{"version":3,"file":"Components.Cy14ceEN.mjs","names":["colors","Arrow","useState","Framer101","\\uC77C","\\uC2DC\\uAC04","\\uBD84","\\uCD08","useState","colors","CheckIcon","i","StarIcon","useState","Reviews","e","b","a","serializationHash","variantClassNames","transition1","Transition","React.useContext","React.useMemo","Variants","React.Fragment","getProps","props","createLayoutDependency","React.useRef","React.useId","cx","className","RichText","serializationHash","variantClassNames","animation","transition1","transition2","Transition","React.useContext","React.useMemo","Variants","React.Fragment","getProps","props","createLayoutDependency","useRef","React.useId","cx","sharedStyle.className","sharedStyle1.className","sharedStyle2.className","sharedStyle3.className","sharedStyle4.className","sharedStyle5.className","sharedStyle6.className","sharedStyle7.className","className","RichText","\"USOOGQvdD\"","\"bGrj_P5Hk\"","sharedStyle.css","sharedStyle1.css","sharedStyle2.css","sharedStyle3.css","sharedStyle4.css","sharedStyle5.css","sharedStyle6.css","sharedStyle7.css","sharedStyle.fonts","sharedStyle1.fonts","sharedStyle2.fonts","sharedStyle3.fonts","sharedStyle4.fonts","sharedStyle5.fonts","sharedStyle6.fonts","sharedStyle7.fonts","serializationHash","variantClassNames","transition1","Transition","React.useContext","React.useMemo","Variants","React.Fragment","getProps","props","createLayoutDependency","useRef","React.useId","cx","sharedStyle.className","sharedStyle1.className","sharedStyle2.className","sharedStyle3.className","sharedStyle4.className","sharedStyle5.className","sharedStyle6.className","className","\"USOOGQvdD\"","\"bGrj_P5Hk\"","RichText","sharedStyle.css","sharedStyle1.css","sharedStyle2.css","sharedStyle3.css","sharedStyle4.css","sharedStyle5.css","sharedStyle6.css","sharedStyle.fonts","sharedStyle1.fonts","sharedStyle2.fonts","sharedStyle3.fonts","sharedStyle4.fonts","sharedStyle5.fonts","sharedStyle6.fonts","addPropertyOverrides","cycleOrder","serializationHash","variantClassNames","transition1","Transition","React.useContext","React.useMemo","Variants","React.Fragment","humanReadableVariantMap","getProps","props","createLayoutDependency","React.useRef","React.useId","cx","className","RichText","addPropertyOverrides","ClassBadge","cycleOrder","serializationHash","variantClassNames","transition1","Transition","React.useContext","React.useMemo","Variants","React.Fragment","humanReadableVariantMap","getProps","props","createLayoutDependency","React.useRef","React.useId","cx","className","RichText","SVG","serializationHash","variantClassNames","transition1","Transition","React.useContext","React.useMemo","Variants","React.Fragment","getProps","props","createLayoutDependency","useRef","React.useId","cx","sharedStyle.className","className","RichText","sharedStyle.css","sharedStyle.fonts","WebButton","PaymentsPaymentForm","serializationHash","variantClassNames","transition1","Transition","React.useContext","React.useMemo","Variants","React.Fragment","getProps","props","createLayoutDependency","React.useRef","React.useId","cx","className","_Fragment","React.useContext","React.useMemo","props","React.Fragment","cx","sharedStyle.className","React.useRef","React.useId","className","RichText","sharedStyle.css","sharedStyle.fonts","U","e","ce","fe","oe","I","l","noop","version","uuid","re","ae","W","pe","Y","B","ye","X","$","ue","F","Me","te","se","G","ie","Te","ResizeObserver","get","u","props","p","ne4","ee5","te5","y4","ue5","ye4","useRef","useState","e","Fragment","Spinner","Ae","PaymentButton","VideoList","_a","useState","Fragment","e","Button","CourseTitle","VideoItem","NordyInfo","LiveEventInfo","HandleMobileRedirection","colors","BootcampPointsDashboard","React","b","a","ClassList","CourseCard","Framer101_2","Framer101_3","\\uC77C","\\uC2DC\\uAC04","\\uBD84","\\uCD08","useState","i","__awaiter","P","e","resolveFetch","__awaiter$1","_a","crossFetch","_a","status","c","format","x","version","DEFAULT_HEADERS","version$1","require$$0$1","w3cwebsocket","__commonjs_module0","version","DEFAULT_HEADERS","decoder","_a","status","h","m","x","_","__awaiter","P","e","_a2","i","push","_e","k","__awaiter$1","c","_handleRequest","__awaiter$1","_getRequestParams","handleError","status","__awaiter","P","e","resolveFetch","_getErrorMessage","__awaiter$2","version","DEFAULT_HEADERS","__awaiter$3","c","_a","i","__awaiter","e","__awaiter$1","P","resolveFetch","status","p","__awaiter$2","_e","version","DEFAULT_HEADERS","x","now","defaults","crossFetch","P","e","_a","_e","Init","props","useState","Login","Spinner","UserButton","MenuItem","Fragment","CompareImage","ee","_a","e","te","i","u","m","H","C","E","y","ne","N","O","Le","ge","be","a","g","le","ce","pe","p","M","j","d","L","q","V","me","x","w","ue","fe","J","l","P","c","R","b","A","D","h","S","Pe","Ee","ye","Q","z","Z","_","n","Re","v","T","Se","Ce","k","He","de","ve","Y","K","he","xe","we","Ae","Counter","useState","Fragment","MuxPlayer","useState","useRef","Ae","Waitlist","useState","e","m.Init","props","m.UserButton","m.Login","m.CompareImage","m.Counter","m.ClassList","m.VideoList","m.MuxPlayer","m.Reviews","m.Framer101","m.Framer101_2","m.Framer101_3","m.Waitlist","m.BootcampPointsDashboard","m.HandleMobileRedirection"],"sources":["https:/esm.ngrok.dev/chunk-6OBOGQ5Q.mjs","https:/esm.ngrok.dev/chunk-NLIN542D.mjs","https:/esm.ngrok.dev/chunk-QGPPRTJS.mjs","https:/esm.ngrok.dev/chunk-EJKG6TUT.mjs","https:/framer.com/m/web-Spinner-IdTB.js","https:/framerusercontent.com/modules/s1nHsY3DZ0r2DGN4PHpb/iQtzO103s1J4wYZITdsh/wUFtSXOPd.js","https:/framer.com/m/web-MenuItem-oSWT.js","https:/framerusercontent.com/modules/n51JpbmTCZj0LxYSFmb1/gO4DvTsRgXrbLCAVCQAv/pNHUzUY_J.js","https:/framer.com/m/web-Course-Card-oJCo.js","https:/framer.com/m/web-Button-amAd.js","https:/framerusercontent.com/modules/DH7YJmjS42jlu4kOTUwK/M70Tig8OCluXU0xfLqZc/qZtbqVS6g.js","https:/framer.com/m/class-Course-Title-s240.js","https:/framerusercontent.com/modules/PPKGDPDpNwE7Pib5UrtX/9q40P0jbWZu2mrfDKAmR/L_qgV81kS.js","https:/framerusercontent.com/modules/IY8Iw6GpUszVBrWdUrxK/7YXyLUKUO9riWgDlTEpb/rTlTWfSvU.js","https:/framer.com/m/class-Video-Item-Qr97.js","https:/framerusercontent.com/modules/1PPf8Z5LxViZZGNUlf8W/ekChcq8DOCbOnMvXnsjx/Y9iy1zFI3.js","https:/framerusercontent.com/modules/Cyss6QoGDtkcfULO0YOF/EJOpJCkEUkzw9bIjtCoh/U_w7ouzJ4.js","https:/framer.com/m/class-Info-ii1V.js","https:/framerusercontent.com/modules/8iCk2zx14xcoRlLqEOJ1/ZGTCpyXhHIbvyKQFJxR4/gMV56Irc9.js","https:/framer.com/m/payments-Payment-Button-oYzB.js","https:/framerusercontent.com/modules/o4S7A3FEFkTChLwEmE9h/FWskgFGdVu0ey3E8Le7a/J_CUIzUcf.js","https:/framer.com/m/LiveEventInfo-1uhR.js","https:/esm.ngrok.dev/chunk-SDKSBXQ2.mjs","https:/esm.ngrok.dev/chunk-PO4BOMMR.mjs","https:/esm.ngrok.dev/chunk-5VZGXROV.mjs","https:/esm.ngrok.dev/chunk-RZ4MXR2C.mjs","https:/esm.ngrok.dev/chunk-TEDLZ3D6.mjs","https:/esm.ngrok.dev/chunk-2LOYQZCH.mjs","https:/esm.ngrok.dev/chunk-7STDMDMA.mjs","https:/esm.ngrok.dev/chunk-EWPOG4AQ.mjs","https:/esm.ngrok.dev/chunk-RP45HKMD.mjs","https:/esm.ngrok.dev/chunk-SVBYECQE.mjs","https:/esm.ngrok.dev/chunk-WTDJDUJN.mjs","https:/esm.ngrok.dev/chunk-TAP4VNEF.mjs","https:/cdn.skypack.dev/-/@supabase/functions-js@v2.1.0-RnZ2mgdVtYJw6BDBGbAJ/dist=es2019,mode=imports/optimized/@supabase/functions-js.js","https:/cdn.skypack.dev/-/@supabase/postgrest-js@v1.4.1-M6VL6LW6WNlsBWTBZFbq/dist=es2019,mode=imports/optimized/@supabase/postgrest-js.js","https:/cdn.skypack.dev/-/es5-ext@v0.10.53-QgoIgxGeG8vPfAwjei6y/dist=es2019,mode=imports/unoptimized/global.js","https:/cdn.skypack.dev/-/websocket@v1.0.34-bITKCQn27Ks1QQoRgk94/dist=es2019,mode=imports/optimized/websocket.js","https:/cdn.skypack.dev/-/@supabase/realtime-js@v2.6.0-KChn2jQyrOOE0GhQ08fE/dist=es2019,mode=imports/optimized/@supabase/realtime-js.js","https:/cdn.skypack.dev/-/@supabase/storage-js@v2.3.1-BHfs8j7jU6qHoJRSHZPL/dist=es2019,mode=imports/optimized/@supabase/storage-js.js","https:/cdn.skypack.dev/-/@supabase/gotrue-js@v2.12.1-U9V71OI5x9GUonOWwkxZ/dist=es2019,mode=imports/optimized/@supabase/gotrue-js.js","https:/cdn.skypack.dev/-/@supabase/supabase-js@v2.10.0-iuC42NKMzc0WgF6sPBaq/dist=es2019,mode=imports/optimized/@supabase/supabase-js.js","https:/cdn.skypack.dev/@supabase/supabase-js@2.10.0","https:/esm.ngrok.dev/chunk-AEFPPVC4.mjs","https:/esm.ngrok.dev/chunk-77M2HTGP.mjs","https:/esm.ngrok.dev/chunk-O2UFHUW4.mjs","https:/esm.ngrok.dev/chunk-M4QTGDPE.mjs","https:/esm.ngrok.dev/chunk-T2GIHYPT.mjs","https:/esm.ngrok.dev/chunk-AWVVVBQN.mjs","https:/esm.ngrok.dev/chunk-C3VYQ5YF.mjs","https:/esm.ngrok.dev/index.mjs","https:/framerusercontent.com/modules/vOfYfdbvNgrwYkPTjTl9/snfoljupFbQqGzQudT1x/Components.js"],"sourcesContent":["// src/class/BeforeAfter.tsx\nimport { useState } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar colors = {\n  harborBlue: \"#005DFA\",\n  white: \"#FEFDFA\",\n  textDark: \"#1a202c\",\n  textMedium: \"#4a5568\",\n  textLight: \"#718096\",\n  lightGray: \"#f8f9fa\"\n};\nvar Icon = ({\n  path,\n  className = \"w-10 h-10\"\n}) => /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    className,\n    viewBox: \"0 0 24 24\",\n    fill: \"none\",\n    stroke: \"currentColor\",\n    strokeWidth: \"1.5\",\n    children: /* @__PURE__ */ jsx(\"path\", { strokeLinecap: \"round\", strokeLinejoin: \"round\", d: path })\n  }\n);\nvar FigmaIcon = () => /* @__PURE__ */ jsxs(\n  \"svg\",\n  {\n    width: \"24\",\n    height: \"24\",\n    viewBox: \"0 0 24 24\",\n    fill: \"none\",\n    xmlns: \"http://www.w3.org/2000/svg\",\n    children: [\n      /* @__PURE__ */ jsx(\n        \"path\",\n        {\n          d: \"M12 24C18.6274 24 24 18.6274 24 12C24 5.37258 18.6274 0 12 0C5.37258 0 0 5.37258 0 12C0 18.6274 5.37258 24 12 24Z\",\n          fill: \"#2C2C2C\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        \"path\",\n        {\n          d: \"M7.50009 12C7.50009 10.0688 9.06884 8.5 11.0001 8.5H13.5001C15.4313 8.5 17.0001 10.0688 17.0001 12C17.0001 13.9312 15.4313 15.5 13.5001 15.5H11.0001C9.06884 15.5 7.50009 13.9312 7.50009 12Z\",\n          fill: \"#0ACF83\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        \"path\",\n        {\n          d: \"M7.5 6.25C7.5 4.31875 9.06875 2.75 11 2.75H13.5C15.4312 2.75 17 4.31875 17 6.25V8.5H13.5C11.5688 8.5 10 7.18125 10 5.25C10 4.81875 9.68125 4.5 9.25 4.5C8.2875 4.5 7.5 5.2875 7.5 6.25Z\",\n          fill: \"#A259FF\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        \"path\",\n        {\n          d: \"M7.5 17.75C7.5 19.6812 9.06875 21.25 11 21.25H13.5C15.4312 21.25 17 19.6812 17 17.75V15.5H13.5C11.5688 15.5 10 16.8187 10 18.75C10 19.1812 9.68125 19.5 9.25 19.5C8.2875 19.5 7.5 18.7125 7.5 17.75Z\",\n          fill: \"#F24E1E\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        \"path\",\n        {\n          d: \"M17 12C17 13.9312 15.4312 15.5 13.5 15.5H11C9.06875 15.5 7.5 13.9312 7.5 12C7.5 10.0688 9.06875 8.5 11 8.5H13.5C15.4312 8.5 17 10.0688 17 12Z\",\n          fill: \"#FF7262\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        \"path\",\n        {\n          d: \"M19.25 12C19.25 13.9312 17.6812 15.5 15.75 15.5H13.5V8.5H15.75C17.6812 8.5 19.25 10.0688 19.25 12Z\",\n          fill: \"#1ABCFE\"\n        }\n      )\n    ]\n  }\n);\nvar ScrollIcon = () => /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    className: \"w-8 h-8 text-white animate-bounce\",\n    fill: \"none\",\n    viewBox: \"0 0 24 24\",\n    stroke: \"currentColor\",\n    children: /* @__PURE__ */ jsx(\n      \"path\",\n      {\n        strokeLinecap: \"round\",\n        strokeLinejoin: \"round\",\n        strokeWidth: \"1.5\",\n        d: \"M15 13l-3 3m0 0l-3-3m3 3V8m0 13a9 9 0 110-18 9 9 0 010 18z\"\n      }\n    )\n  }\n);\nvar Arrow = ({ className }) => /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    className,\n    viewBox: \"0 0 24 24\",\n    fill: \"none\",\n    stroke: \"currentColor\",\n    children: /* @__PURE__ */ jsx(\n      \"path\",\n      {\n        strokeLinecap: \"round\",\n        strokeLinejoin: \"round\",\n        strokeWidth: 2,\n        d: \"M14 5l7 7m0 0l-7 7m7-7H3\"\n      }\n    )\n  }\n);\nvar BeforeAfterGraphic = () => {\n  const [showTooltip, setShowTooltip] = useState(true);\n  return /* @__PURE__ */ jsxs(\"div\", { className: \"grid md:grid-cols-2 gap-8 items-start\", children: [\n    /* @__PURE__ */ jsxs(\"div\", { children: [\n      /* @__PURE__ */ jsx(\"h3\", { className: \"text-2xl font-bold mb-4 text-red-500\", children: \"Before\" }),\n      /* @__PURE__ */ jsxs(\"div\", { className: \"p-4 rounded-lg border border-gray-200 bg-white shadow-lg h-full\", children: [\n        /* @__PURE__ */ jsx(\"p\", { className: \"text-left text-sm font-semibold mb-4\", children: \"[\\uC218\\uAC15 \\uC804] Figma-\\uAC1C\\uBC1C\\uC790 \\uC804\\uB2EC \\uBC29\\uC2DD\" }),\n        /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col items-center space-y-2\", children: [\n          /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center space-x-2\", children: [\n            /* @__PURE__ */ jsx(FigmaIcon, {}),\n            /* @__PURE__ */ jsx(\"span\", { className: \"font-bold\", children: \"\\uB514\\uC790\\uC774\\uB108\" })\n          ] }),\n          /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-gray-500\", children: \"\\uC815\\uC801 \\uB514\\uC790\\uC778 \\uC81C\\uC791\" }),\n          /* @__PURE__ */ jsx(Arrow, { className: \"w-8 h-8 text-gray-300 transform rotate-90\" }),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"text-center p-2 bg-red-50 border border-red-200 rounded-lg\", children: [\n            /* @__PURE__ */ jsx(\"p\", { className: \"font-bold text-red-600 text-sm\", children: \"\\uC18C\\uD1B5\\uC758 \\uBCBD\" }),\n            /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-red-500\", children: '\"\\uC774\\uAC70 \\uC774\\uB807\\uAC8C \\uC548\\uB418\\uB098\\uC694?\"' }),\n            /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-red-500\", children: '\"\\uC774\\uAC74 \\uAD6C\\uD604\\uC774 \\uC5B4\\uB824\\uC6B4\\uB370...\"' })\n          ] }),\n          /* @__PURE__ */ jsx(Arrow, { className: \"w-8 h-8 text-gray-300 transform rotate-90\" }),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center space-x-2\", children: [\n            /* @__PURE__ */ jsx(\n              Icon,\n              {\n                path: \"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\",\n                className: \"w-8 h-8 text-gray-600\"\n              }\n            ),\n            /* @__PURE__ */ jsx(\"span\", { className: \"font-bold\", children: \"\\uAC1C\\uBC1C\\uC790\" })\n          ] }),\n          /* @__PURE__ */ jsx(\"p\", { className: \"text-xs text-gray-500\", children: \"\\uD574\\uC11D\\uD558\\uACE0 \\uC7AC\\uAD6C\\uD604\" })\n        ] })\n      ] }),\n      /* @__PURE__ */ jsx(\"p\", { className: \"mt-4 text-center\", style: { color: colors.textLight }, children: \"\\uC18C\\uD1B5 \\uBE44\\uC6A9 \\uC99D\\uAC00, \\uAD6C\\uD604 \\uD004\\uB9AC\\uD2F0 \\uC800\\uD558\" })\n    ] }),\n    /* @__PURE__ */ jsxs(\"div\", { children: [\n      /* @__PURE__ */ jsx(\n        \"h3\",\n        {\n          className: \"text-2xl font-bold mb-4\",\n          style: { color: colors.harborBlue },\n          children: \"After\"\n        }\n      ),\n      /* @__PURE__ */ jsxs(\n        \"div\",\n        {\n          className: \"p-4 rounded-lg border-2 h-full\",\n          style: { borderColor: colors.harborBlue },\n          children: [\n            /* @__PURE__ */ jsx(\n              \"p\",\n              {\n                className: \"text-left text-sm font-semibold mb-4\",\n                style: { color: colors.harborBlue },\n                children: \"[\\uC218\\uAC15 \\uD6C4] Framer\\uB97C \\uD1B5\\uD55C \\uC6D0\\uC2A4\\uD1B1 \\uC81C\\uC791\"\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"relative w-full h-[450px] rounded-lg overflow-hidden group\",\n                onMouseEnter: () => setShowTooltip(false),\n                children: [\n                  showTooltip && /* @__PURE__ */ jsxs(\"div\", { className: \"absolute inset-0 z-10 flex flex-col items-center justify-center bg-black bg-opacity-60 transition-opacity duration-300 pointer-events-none\", children: [\n                    /* @__PURE__ */ jsx(ScrollIcon, {}),\n                    /* @__PURE__ */ jsx(\"p\", { className: \"mt-2 text-white font-bold\", children: \"\\uC2A4\\uD06C\\uB864\\uD558\\uC5EC \\uC778\\uD130\\uB799\\uC158\\uC744 \\uD655\\uC778\\uD574\\uBCF4\\uC138\\uC694\" })\n                  ] }),\n                  /* @__PURE__ */ jsx(\n                    \"iframe\",\n                    {\n                      src: \"https://marianne.framer.website/\",\n                      className: \"w-full h-full border-0\",\n                      title: \"Framer Project Example\",\n                      scrolling: \"no\"\n                    }\n                  )\n                ]\n              }\n            )\n          ]\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        \"p\",\n        {\n          className: \"mt-4 text-center font-bold\",\n          style: { color: colors.harborBlue },\n          children: \"\\uC555\\uB3C4\\uC801\\uC778 \\uC18D\\uB3C4, \\uC644\\uBCBD\\uD55C \\uD004\\uB9AC\\uD2F0\"\n        }\n      )\n    ] })\n  ] });\n};\n\nexport {\n  BeforeAfterGraphic\n};\n","import {\n  BeforeAfterGraphic\n} from \"./chunk-6OBOGQ5Q.mjs\";\n\n// src/class/Framer101.tsx\nimport { useState, useEffect } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar colors = {\n  harborBlue: \"#005DFA\",\n  white: \"#FEFDFA\",\n  harborPink: \"#FCEBEF\",\n  black: \"#25313c\",\n  textMedium: \"#4a5568\",\n  textLight: \"#718096\",\n  lightGray: \"#f8f9fa\"\n};\nvar CheckIcon = ({ className }) => /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    className,\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    fill: \"currentColor\",\n    children: /* @__PURE__ */ jsx(\n      \"path\",\n      {\n        fillRule: \"evenodd\",\n        d: \"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm13.36-1.814a.75.75 0 10-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 00-1.06 1.06l2.25 2.25a.75.75 0 001.14-.094l3.75-5.25z\",\n        clipRule: \"evenodd\"\n      }\n    )\n  }\n);\nvar StarIcon = ({ className }) => /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    className,\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    fill: \"currentColor\",\n    children: /* @__PURE__ */ jsx(\n      \"path\",\n      {\n        fillRule: \"evenodd\",\n        d: \"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.007z\",\n        clipRule: \"evenodd\"\n      }\n    )\n  }\n);\nfunction Framer101() {\n  const features = [\n    \"\\uD504\\uB808\\uC774\\uBA38\\uC758 \\uBAA8\\uB4E0 \\uAE30\\uB2A5, \\uAE30\\uCD08\\uBD80\\uD130 \\uC2E4\\uBB34\\uAE4C\\uC9C0\",\n    \"Apple.com \\uC2A4\\uD0C0\\uC77C\\uC758 \\uACE0\\uAE09 \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158\",\n    \"\\uC2E4\\uC81C \\uCD9C\\uC2DC \\uAC00\\uB2A5\\uD55C \\uBC18\\uC751\\uD615 \\uC6F9 \\uD504\\uB85C\\uC81D\\uD2B8 \\uC81C\\uC791\",\n    \"\\uB514\\uC790\\uC778\\uB9CC\\uC73C\\uB85C \\uB05D\\uB0B4\\uC9C0 \\uC54A\\uB294, \\uCF54\\uB4DC \\uCEF4\\uD3EC\\uB10C\\uD2B8 \\uD65C\\uC6A9\\uBC95\",\n    \"Framer CMS\\uB97C \\uD65C\\uC6A9\\uD55C \\uB370\\uC774\\uD130 \\uC5F0\\uB3D9 \\uB9C8\\uC2A4\\uD130\",\n    \"AI\\uB97C \\uD65C\\uC6A9\\uD55C \\uC6F9\\uB514\\uC790\\uC778 \\uBC0F \\uCF54\\uB4DC \\uC0DD\\uC131 \\uC790\\uB3D9\\uD654\"\n  ];\n  const audience = [\n    {\n      title: \"\\uC6F9 \\uB514\\uC790\\uC778\\uC744 \\uCF54\\uB529 \\uB54C\\uBB38\\uC5D0 \\uD3EC\\uAE30\\uD588\\uB358 \\uB514\\uC790\\uC774\\uB108\",\n      description: \"\\uC774\\uC81C \\uAC1C\\uBC1C\\uC790\\uC5D0\\uAC8C \\uC544\\uC26C\\uC6B4 \\uC18C\\uB9AC \\uD558\\uC9C0 \\uB9C8\\uC138\\uC694. \\uB2F9\\uC2E0\\uC774 \\uC0C1\\uC0C1\\uD55C \\uB514\\uC790\\uC778, 100% \\uADF8\\uB300\\uB85C \\uAD6C\\uD604\\uB418\\uB294 \\uC644\\uBCBD\\uD55C \\uBC18\\uC751\\uD615 \\uC6F9\\uC0AC\\uC774\\uD2B8\\uB97C \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      title: \"\\uC678\\uC8FC \\uBE44\\uC6A9\\uC774 \\uBD80\\uB2F4\\uB418\\uB294 1\\uC778 \\uC0AC\\uC5C5\\uAC00, \\uC2A4\\uD0C0\\uD2B8\\uC5C5\",\n      description: \"\\uB79C\\uB529\\uD398\\uC774\\uC9C0 \\uD558\\uB098\\uC5D0 \\uC218\\uBC31\\uB9CC \\uC6D0... \\uC774\\uC81C \\uC9C1\\uC811 \\uB9CC\\uB4E4\\uACE0 5\\uBD84 \\uB9CC\\uC5D0 \\uC218\\uC815\\uD558\\uC138\\uC694. \\uC544\\uB080 \\uC678\\uC8FC\\uBE44\\uB85C \\uBE44\\uC988\\uB2C8\\uC2A4\\uC758 \\uC131\\uACF5 \\uD655\\uB960\\uC744 \\uB192\\uC77C \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      title: \"Framer\\uB85C \\uD558\\uC774\\uC5D4\\uB4DC \\uD504\\uB85C\\uC81D\\uD2B8\\uB97C \\uAFC8\\uAFB8\\uB294 \\uC804\\uBB38\\uAC00\",\n      description: \"\\uB2E8\\uC21C \\uD398\\uC774\\uC9C0 \\uC81C\\uC791\\uC744 \\uB118\\uC5B4, \\uACE0\\uAC1D\\uC744 \\uAC10\\uB3D9\\uC2DC\\uD0A4\\uB294 \\uD558\\uC774\\uC5D4\\uB4DC \\uC778\\uD130\\uB799\\uC158\\uC73C\\uB85C \\uB2F9\\uC2E0\\uC758 \\uC11C\\uBE44\\uC2A4 \\uB2E8\\uAC00\\uB97C 2\\uBC30 \\uC774\\uC0C1 \\uB04C\\uC5B4\\uC62C\\uB9AC\\uC138\\uC694. \\uB300\\uCCB4 \\uBD88\\uAC00\\uB2A5\\uD55C \\uC804\\uBB38\\uAC00\\uAC00 \\uB418\\uC2ED\\uC2DC\\uC624.\"\n    }\n  ];\n  const reviews = [\n    {\n      name: \"\\uAE40\\uC9C0\\uC218\",\n      role: \"UX/UI \\uB514\\uC790\\uC774\\uB108\",\n      text: \"\\uC774 \\uAC15\\uC758 \\uC5C6\\uC5C8\\uC73C\\uBA74 \\uC5B4\\uCA54 \\uBED4 \\uD588\\uB098\\uC694. \\uAC1C\\uBC1C\\uC790\\uC640\\uC758 \\uC18C\\uD1B5 \\uBE44\\uC6A9\\uC774 1/10\\uB85C \\uC904\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uC81C\\uAC00 \\uC9C1\\uC811 \\uB9CC\\uB4DC\\uB294 \\uAC8C \\uD6E8\\uC52C \\uBE60\\uB974\\uACE0 \\uD004\\uB9AC\\uD2F0\\uB3C4 \\uB192\\uC544\\uC694.\"\n    },\n    {\n      name: \"\\uBC15\\uB300\\uD45C\",\n      role: \"\\uC2A4\\uD0C0\\uD2B8\\uC5C5 \\uB300\\uD45C\",\n      text: \"\\uC678\\uC8FC \\uB9E1\\uAE38 \\uB3C8\\uC73C\\uB85C \\uB9C8\\uCF00\\uD305\\uC5D0 \\uB354 \\uC9D1\\uC911\\uD560 \\uC218 \\uC788\\uAC8C \\uB410\\uC2B5\\uB2C8\\uB2E4. MVP \\uC81C\\uC791\\uACFC \\uD14C\\uC2A4\\uD2B8\\uAC00 \\uC815\\uB9D0 \\uBE68\\uB77C\\uC84C\\uACE0, \\uD22C\\uC790 \\uC720\\uCE58\\uC5D0\\uB3C4 \\uD070 \\uB3C4\\uC6C0\\uC774 \\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      name: \"\\uD504\\uB9AC\\uB79C\\uC11C \\uBC15\",\n      role: \"Framer \\uC804\\uBB38\\uAC00\",\n      text: \"\\uC194\\uC9C1\\uD788 \\uC800\\uB9CC \\uC54C\\uACE0 \\uC2F6\\uC740 \\uAC15\\uC758\\uC785\\uB2C8\\uB2E4. \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158 \\uD30C\\uD2B8\\uB294 \\uC815\\uB9D0... \\uC608\\uC220\\uC785\\uB2C8\\uB2E4. \\uD504\\uB85C\\uC81D\\uD2B8 \\uB2E8\\uAC00\\uAC00 \\uB2EC\\uB77C\\uC84C\\uC5B4\\uC694.\"\n    }\n  ];\n  const curriculum = [\n    {\n      module: \"Week 1: Welcome to Framer\",\n      title: \"Framer \\uC2DC\\uC791\\uD558\\uAE30: \\uAE30\\uBCF8\\uAE30 \\uC644\\uC804 \\uC815\\uBCF5\",\n      description: \"Framer\\uC758 \\uC778\\uD130\\uD398\\uC774\\uC2A4\\uBD80\\uD130 \\uC2DC\\uC791\\uD574, \\uB514\\uC790\\uC778\\uC758 \\uAE30\\uBCF8 \\uC694\\uC18C\\uB4E4\\uC744 \\uC775\\uD788\\uACE0, \\uC65C Framer\\uAC00 \\uD604\\uC874 \\uCD5C\\uACE0\\uC758 \\uC6F9 \\uB514\\uC790\\uC778 \\uD234\\uC778\\uC9C0 \\uC9C1\\uC811 \\uACBD\\uD5D8\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"3.5\\uC2DC\\uAC04\",\n      outcome: \"Framer\\uC758 \\uAE30\\uBCF8 \\uC870\\uC791\\uBC95\\uC744 \\uC644\\uC804\\uD788 \\uC775\\uD788\\uACE0, \\uAC04\\uB2E8\\uD55C \\uB514\\uC790\\uC778 \\uCEF4\\uD3EC\\uB10C\\uD2B8\\uB97C \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Framer\\uB780 \\uBB34\\uC5C7\\uC778\\uAC00? (\\uCCA0\\uD559 & \\uBE44\\uC804)\",\n        \"\\uC778\\uD130\\uD398\\uC774\\uC2A4 \\uC644\\uBCBD \\uAC00\\uC774\\uB4DC: \\uD55C \\uBC88\\uC5D0 \\uB05D\\uB0B4\\uAE30\",\n        \"\\uAE30\\uBCF8 \\uB3C4\\uD615\\uACFC \\uD504\\uB808\\uC784 \\uB2E4\\uB8E8\\uAE30\",\n        \"\\uB808\\uC774\\uC544\\uC6C3\\uC758 \\uD575\\uC2EC: \\uC2A4\\uD0DD\\uACFC \\uADF8\\uB9AC\\uB4DC\",\n        \"[\\uC2E4\\uC2B5] \\uAC04\\uB2E8\\uD55C \\uD504\\uB85C\\uD544 \\uCE74\\uB4DC \\uB9CC\\uB4E4\\uAE30\"\n      ]\n    },\n    {\n      module: \"Week 2: Interactive Design\",\n      title: \"\\uC0B4\\uC544 \\uC6C0\\uC9C1\\uC774\\uB294 \\uB514\\uC790\\uC778: \\uC778\\uD130\\uB799\\uC158 \\uAE30\\uCD08\",\n      description: \"\\uB2E8\\uC21C\\uD55C \\uC774\\uBBF8\\uC9C0\\uB97C \\uB118\\uC5B4 \\uC0AC\\uC6A9\\uC790\\uC640 \\uC0C1\\uD638\\uC791\\uC6A9\\uD558\\uB294 \\uB514\\uC790\\uC778\\uC744 \\uB9CC\\uB4ED\\uB2C8\\uB2E4. \\uD074\\uB9AD, \\uD638\\uBC84, \\uB4DC\\uB798\\uADF8 \\uB4F1 \\uD544\\uC218 \\uC778\\uD130\\uB799\\uC158\\uC744 \\uB9C8\\uC2A4\\uD130\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"4\\uC2DC\\uAC04\",\n      outcome: \"\\uC7AC\\uC0AC\\uC6A9 \\uAC00\\uB2A5\\uD55C \\uCEF4\\uD3EC\\uB10C\\uD2B8\\uB97C \\uB9CC\\uB4E4\\uACE0, \\uB2E4\\uC591\\uD55C \\uC0C1\\uD0DC\\uC5D0 \\uB530\\uB978 \\uC778\\uD130\\uB799\\uC158\\uC744 \\uAD6C\\uD604\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Effects: \\uADF8\\uB9BC\\uC790, \\uBE14\\uB7EC \\uB4F1 \\uB514\\uC790\\uC778\\uC5D0 \\uAE4A\\uC774 \\uB354\\uD558\\uAE30\",\n        \"Components: \\uC7AC\\uC0AC\\uC6A9 \\uAC00\\uB2A5\\uD55C \\uB514\\uC790\\uC778 \\uC2DC\\uC2A4\\uD15C \\uB9CC\\uB4E4\\uAE30\",\n        \"Variants: \\uCEF4\\uD3EC\\uB10C\\uD2B8 \\uC0C1\\uD0DC \\uAD00\\uB9AC\\uC758 \\uBAA8\\uB4E0 \\uAC83\",\n        \"\\uAE30\\uBCF8 \\uC778\\uD130\\uB799\\uC158: \\uD074\\uB9AD, \\uD638\\uBC84, \\uB51C\\uB808\\uC774\",\n        \"[\\uC2E4\\uC2B5] \\uC778\\uD130\\uB799\\uD2F0\\uBE0C \\uBC84\\uD2BC \\uBC0F \\uCE74\\uB4DC UI \\uC81C\\uC791\"\n      ]\n    },\n    {\n      module: \"Week 3: Advanced Animations\",\n      title: \"\\uC2DC\\uC120\\uC744 \\uC0AC\\uB85C\\uC7A1\\uB294 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\",\n      description: \"\\uD398\\uC774\\uC9C0 \\uC2A4\\uD06C\\uB864, \\uC694\\uC18C\\uC758 \\uB4F1\\uC7A5\\uACFC \\uC0AC\\uB77C\\uC9D0 \\uB4F1 \\uC815\\uAD50\\uD55C \\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC744 \\uAD6C\\uD604\\uD558\\uC5EC \\uC0AC\\uC6A9\\uC790 \\uACBD\\uD5D8\\uC744 \\uADF9\\uB300\\uD654\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"5\\uC2DC\\uAC04\",\n      outcome: \"\\uC2A4\\uD06C\\uB864\\uACFC \\uC5F0\\uB3D9\\uB418\\uB294 \\uBCF5\\uD569\\uC801\\uC778 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC744 \\uC790\\uC720\\uC790\\uC7AC\\uB85C \\uAD6C\\uD604\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"\\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC758 \\uC6D0\\uB9AC: Timing, Easing, Spring\",\n        \"Scroll Section & Scroll Variants\",\n        \"Stagger: \\uC21C\\uCC28\\uC801\\uC778 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC758 \\uBBF8\\uD559\",\n        \"Code Overrides\\uC758 \\uAE30\\uCD08: \\uC560\\uB2C8\\uBA54\\uC774\\uC158 \\uC81C\\uC5B4\\uD558\\uAE30\",\n        \"[\\uC2E4\\uC2B5] \\uC2A4\\uD06C\\uB864\\uC5D0 \\uBC18\\uC751\\uD558\\uB294 \\uD5E4\\uB354 \\uC81C\\uC791\"\n      ]\n    },\n    {\n      module: \"Week 4: The Apple Way\",\n      title: \"\\uC560\\uD50C \\uC2A4\\uD0C0\\uC77C \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158 \\uC815\\uBCF5\",\n      description: \"\\uBAA8\\uB450\\uAC00 \\uAC10\\uD0C4\\uD558\\uB294 \\uC560\\uD50C \\uC6F9\\uC0AC\\uC774\\uD2B8\\uC758 \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158. \\uADF8 \\uC6D0\\uB9AC\\uB97C \\uD30C\\uD5E4\\uCE58\\uACE0, \\uC6B0\\uB9AC \\uC190\\uC73C\\uB85C \\uC9C1\\uC811 \\uAD6C\\uD604\\uD574\\uBD05\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"6.5\\uC2DC\\uAC04\",\n      outcome: \"\\uB204\\uAD6C\\uB098 \\uAC10\\uD0C4\\uD560 \\uB9CC\\uD55C \\uD558\\uC774\\uC5D4\\uB4DC \\uC6F9\\uC0AC\\uC774\\uD2B8\\uC758 \\uD575\\uC2EC \\uC778\\uD130\\uB799\\uC158\\uC744 \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Sticky \\uC2A4\\uD06C\\uB864\\uC758 \\uC6D0\\uB9AC\\uC640 \\uD65C\\uC6A9\",\n        \"3D Transform\\uC744 \\uC774\\uC6A9\\uD55C \\uC785\\uCCB4\\uC801 \\uD6A8\\uACFC\",\n        \"\\uB3D9\\uC601\\uC0C1\\uACFC \\uC2A4\\uD06C\\uB864 \\uC5F0\\uB3D9\\uD558\\uAE30\",\n        \"\\uC2A4\\uD06C\\uB864 \\uC9C4\\uD589\\uB3C4\\uC5D0 \\uB530\\uB978 \\uBCF5\\uD569 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\",\n        \"[\\uC2E4\\uC2B5] \\uC560\\uD50C \\uC5D0\\uC5B4\\uD31F \\uD504\\uB85C \\uC2A4\\uD0C0\\uC77C \\uD398\\uC774\\uC9C0 \\uD074\\uB860\"\n      ]\n    },\n    {\n      module: \"Week 5: Real-World Project\",\n      title: \"\\uC2E4\\uC804! \\uBC18\\uC751\\uD615 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC0AC\\uC774\\uD2B8 \\uC81C\\uC791\",\n      description: \"\\uC9C0\\uAE08\\uAE4C\\uC9C0 \\uBC30\\uC6B4 \\uBAA8\\uB4E0 \\uAE30\\uC220\\uC744 \\uCD1D\\uB3D9\\uC6D0\\uD558\\uC5EC, \\uB370\\uC2A4\\uD06C\\uD0D1\\uBD80\\uD130 \\uBAA8\\uBC14\\uC77C\\uAE4C\\uC9C0 \\uC644\\uBCBD\\uD558\\uAC8C \\uB300\\uC751\\uD558\\uB294 \\uB098\\uB9CC\\uC758 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC0AC\\uC774\\uD2B8\\uB97C \\uB9CC\\uB4ED\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"8\\uC2DC\\uAC04\",\n      outcome: \"\\uAE30\\uD68D\\uBD80\\uD130 \\uBC30\\uD3EC\\uAE4C\\uC9C0, \\uC6F9 \\uD504\\uB85C\\uC81D\\uD2B8 \\uC804\\uCCB4 \\uC0AC\\uC774\\uD074\\uC744 \\uACBD\\uD5D8\\uD558\\uACE0 \\uB098\\uB9CC\\uC758 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624\\uB97C \\uC644\\uC131\\uD569\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"\\uD504\\uB85C\\uC81D\\uD2B8 \\uAE30\\uD68D \\uBC0F \\uB514\\uC790\\uC778 \\uC2DC\\uC2A4\\uD15C \\uAD6C\\uCD95\",\n        \"CMS\\uB97C \\uD65C\\uC6A9\\uD55C \\uCF58\\uD150\\uCE20 \\uAD00\\uB9AC\",\n        \"\\uB370\\uC2A4\\uD06C\\uD0D1, \\uD0DC\\uBE14\\uB9BF, \\uBAA8\\uBC14\\uC77C \\uBC18\\uC751\\uD615 \\uB514\\uC790\\uC778\",\n        \"\\uC2E4\\uC81C \\uB3C4\\uBA54\\uC778 \\uC5F0\\uACB0 \\uBC0F \\uC0AC\\uC774\\uD2B8 \\uBC30\\uD3EC\",\n        \"[\\uC2E4\\uC804] \\uB098\\uB9CC\\uC758 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC6F9\\uC0AC\\uC774\\uD2B8 \\uC644\\uC131\"\n      ]\n    },\n    {\n      module: \"Week 6: From Skill to Profit\",\n      title: \"Framer\\uB85C \\uB3C8 \\uBC8C\\uAE30: \\uC678\\uC8FC\\uBD80\\uD130 \\uCC3D\\uC5C5\\uAE4C\\uC9C0\",\n      description: \"\\uC0C8\\uB85C\\uC6B4 \\uC2A4\\uD0AC\\uC744 \\uC2E4\\uC81C \\uC218\\uC775\\uC73C\\uB85C \\uC5F0\\uACB0\\uD558\\uB294 \\uBC29\\uBC95\\uC744 \\uBC30\\uC6C1\\uB2C8\\uB2E4. \\uC678\\uC8FC \\uD504\\uB85C\\uC81D\\uD2B8 \\uC218\\uC8FC \\uB178\\uD558\\uC6B0, \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC804\\uB7B5, \\uCC3D\\uC5C5 \\uC544\\uC774\\uB514\\uC5B4\\uAE4C\\uC9C0 \\uBAA8\\uB450 \\uACF5\\uAC1C\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 7,\n      duration: \"5\\uC2DC\\uAC04\",\n      outcome: \"\\uC2B5\\uB4DD\\uD55C Framer \\uC2A4\\uD0AC\\uC744 \\uD1B5\\uD574 \\uC2E4\\uC81C \\uC218\\uC775\\uC744 \\uCC3D\\uCD9C\\uD558\\uB294 \\uAD6C\\uCCB4\\uC801\\uC778 \\uBC29\\uBC95\\uC744 \\uC54C\\uAC8C \\uB429\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Framer \\uC804\\uBB38\\uAC00\\uB85C \\uD3EC\\uC9C0\\uC154\\uB2DD\\uD558\\uAE30\",\n        \"\\uCCAB \\uC678\\uC8FC, 100\\uB9CC\\uC6D0\\uBD80\\uD130 \\uC2DC\\uC791\\uD558\\uB294 \\uBC95\",\n        \"\\uD074\\uB77C\\uC774\\uC5B8\\uD2B8\\uB97C \\uC124\\uB4DD\\uD558\\uB294 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC804\\uB7B5\",\n        \"\\uACAC\\uC801\\uBD80\\uD130 \\uACC4\\uC57D\\uAE4C\\uC9C0: \\uC2E4\\uD328 \\uC5C6\\uB294 \\uD504\\uB85C\\uC81D\\uD2B8 \\uAD00\\uB9AC\",\n        \"Framer\\uB85C \\uAC00\\uB2A5\\uD55C 1\\uC778 \\uCC3D\\uC5C5 \\uC544\\uC774\\uD15C\\uB4E4\",\n        \"AI\\uB97C \\uD65C\\uC6A9\\uD55C \\uC0DD\\uC0B0\\uC131 10\\uBC30 \\uB192\\uC774\\uAE30\",\n        \"[\\uD2B9\\uAC15] \\uC6D4 1,000\\uB9CC\\uC6D0 \\uBC84\\uB294 \\uB514\\uC790\\uC774\\uB108\\uC758 \\uC2DC\\uAC04 \\uAD00\\uB9AC\\uBC95\"\n      ]\n    }\n  ];\n  const faqs = [\n    {\n      question: \"\\uCF54\\uB529\\uC744 \\uC804\\uD600 \\uBAA8\\uB974\\uB294\\uB370, \\uC815\\uB9D0 \\uAD1C\\uCC2E\\uC744\\uAE4C\\uC694?\",\n      answer: \"\\uB124, \\uADF8\\uB7FC\\uC694! \\uC774 \\uAC15\\uC758\\uB294 \\uCF54\\uB529 \\uACBD\\uD5D8\\uC774 \\uC804\\uBB34\\uD55C \\uBD84\\uB4E4\\uC744 \\uC704\\uD574 \\uC124\\uACC4\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4. Framer\\uC758 \\uAC15\\uB825\\uD55C \\uB178\\uCF54\\uB4DC \\uAE30\\uB2A5\\uC744 \\uD65C\\uC6A9\\uD558\\uC5EC \\uCF54\\uB529 \\uC5C6\\uC774\\uB3C4 100% \\uC0C1\\uC0C1\\uD558\\uB358 \\uC6F9\\uC0AC\\uC774\\uD2B8\\uB97C \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uCF54\\uB529\\uC740 \\uC120\\uD0DD \\uC0AC\\uD56D\\uC77C \\uBFD0\\uC774\\uBA70, \\uAC15\\uC758 \\uD6C4\\uBC18\\uBD80\\uC758 \\uCF54\\uB4DC \\uCEF4\\uD3EC\\uB10C\\uD2B8 \\uD30C\\uD2B8\\uB3C4 \\uBCF5\\uC0AC/\\uBD99\\uC5EC\\uB123\\uAE30\\uB9CC\\uC73C\\uB85C \\uB530\\uB77C\\uC62C \\uC218 \\uC788\\uB3C4\\uB85D \\uAD6C\\uC131\\uD588\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      question: \"\\uAC15\\uC758\\uB97C \\uB4E3\\uAE30 \\uC704\\uD574 \\uBB34\\uC5C7\\uC744 \\uC900\\uBE44\\uD574\\uC57C \\uD558\\uB098\\uC694?\",\n      answer: \"Framer \\uACC4\\uC815\\uACFC \\uC778\\uD130\\uB137\\uC774 \\uC5F0\\uACB0\\uB41C \\uCEF4\\uD4E8\\uD130\\uB9CC \\uC788\\uC73C\\uBA74 \\uB429\\uB2C8\\uB2E4! Framer\\uB294 \\uBB34\\uB8CC \\uD50C\\uB79C\\uC73C\\uB85C\\uB3C4 \\uAC15\\uC758\\uC758 95% \\uC774\\uC0C1\\uC744 \\uC218\\uAC15\\uD558\\uB294 \\uB370 \\uC804\\uD600 \\uBB38\\uC81C\\uAC00 \\uC5C6\\uC2B5\\uB2C8\\uB2E4. \\uCD94\\uAC00\\uB85C \\uC720\\uB8CC \\uD50C\\uB79C\\uC774 \\uD544\\uC694\\uD55C \\uBD80\\uBD84\\uC740 \\uAC15\\uC758\\uC5D0\\uC11C \\uBCC4\\uB3C4\\uB85C \\uC548\\uB0B4\\uD574 \\uB4DC\\uB9BD\\uB2C8\\uB2E4.\"\n    },\n    {\n      question: \"\\uAC15\\uC758 \\uC218\\uAC15 \\uAE30\\uAC04\\uC5D0 \\uC81C\\uD55C\\uC774 \\uC788\\uB098\\uC694?\",\n      answer: \"\\uC544\\uB2C8\\uC694! \\uD55C\\uBC88 \\uAD6C\\uB9E4\\uD558\\uC2DC\\uBA74 \\uBAA8\\uB4E0 \\uAC15\\uC758 \\uC601\\uC0C1\\uACFC \\uC790\\uB8CC\\uB294 \\uD3C9\\uC0DD \\uC18C\\uC7A5\\uC774 \\uAC00\\uB2A5\\uD569\\uB2C8\\uB2E4. \\uC5B8\\uC81C \\uC5B4\\uB514\\uC11C\\uB4E0 \\uD3B8\\uD558\\uAC8C \\uBC18\\uBCF5 \\uD559\\uC2B5\\uD558\\uC138\\uC694.\"\n    },\n    {\n      question: \"\\uAC15\\uC758\\uB97C \\uB4E3\\uB2E4\\uAC00 \\uBAA8\\uB974\\uB294 \\uC810\\uC774 \\uC0DD\\uAE30\\uBA74 \\uC5B4\\uB5BB\\uAC8C \\uD558\\uC8E0?\",\n      answer: \"\\uC218\\uAC15\\uC0DD \\uC804\\uC6A9 \\uC2AC\\uB799 \\uCEE4\\uBBA4\\uB2C8\\uD2F0\\uB97C \\uD1B5\\uD574 \\uC9C8\\uBB38\\uC744 \\uB0A8\\uACA8\\uC8FC\\uC2DC\\uBA74, \\uAC15\\uC0AC\\uB2D8\\uACFC \\uB2E4\\uB978 \\uC218\\uAC15\\uC0DD\\uB4E4\\uC774 \\uB2F5\\uBCC0\\uC744 \\uB2EC\\uC544\\uB4DC\\uB9BD\\uB2C8\\uB2E4. \\uD568\\uAED8 \\uBC30\\uC6B0\\uACE0 \\uC131\\uC7A5\\uD558\\uB294 \\uCEE4\\uBBA4\\uB2C8\\uD2F0\\uC5D0 \\uCC38\\uC5EC\\uD558\\uC138\\uC694!\"\n    }\n  ];\n  const CountdownTimer = ({ targetDate }) => {\n    const calculateTimeLeft = () => {\n      const difference = +new Date(targetDate) - +/* @__PURE__ */ new Date();\n      let timeLeft2 = {};\n      if (difference > 0) {\n        timeLeft2 = {\n          \\uC77C: Math.floor(difference / (1e3 * 60 * 60 * 24)),\n          \\uC2DC\\uAC04: Math.floor(difference / (1e3 * 60 * 60) % 24),\n          \\uBD84: Math.floor(difference / 1e3 / 60 % 60),\n          \\uCD08: Math.floor(difference / 1e3 % 60)\n        };\n      }\n      return timeLeft2;\n    };\n    const [timeLeft, setTimeLeft] = useState(calculateTimeLeft());\n    useEffect(() => {\n      const timer = setTimeout(() => {\n        setTimeLeft(calculateTimeLeft());\n      }, 1e3);\n      return () => clearTimeout(timer);\n    });\n    const timerComponents = [];\n    Object.keys(timeLeft).forEach((interval) => {\n      if (!timeLeft[interval] && Object.keys(timeLeft).length > 1) {\n        return;\n      }\n      timerComponents.push(\n        /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-baseline\", children: [\n          /* @__PURE__ */ jsx(\"span\", { className: \"text-2xl md:text-4xl font-bold\", children: String(timeLeft[interval]).padStart(\n            2,\n            \"0\"\n          ) }),\n          /* @__PURE__ */ jsx(\"span\", { className: \"text-sm ml-1\", children: interval })\n        ] }, interval)\n      );\n    });\n    return /* @__PURE__ */ jsx(\"div\", { className: \"flex justify-center space-x-4\", children: timerComponents.length ? timerComponents : /* @__PURE__ */ jsx(\"span\", { children: \"Time's up!\" }) });\n  };\n  return /* @__PURE__ */ jsxs(\n    \"div\",\n    {\n      style: { backgroundColor: colors.white, color: colors.black },\n      className: \"font-sans\",\n      children: [\n        /* @__PURE__ */ jsxs(\"header\", { className: \"text-center py-20 px-4\", children: [\n          /* @__PURE__ */ jsxs(\"h1\", { className: \"text-5xl md:text-7xl font-bold leading-tight mb-4\", children: [\n            /* @__PURE__ */ jsx(\"span\", { className: \"block\", children: \"\\uCF54\\uB4DC\\uC758 \\uC7A5\\uBCBD\\uC744 \\uB118\\uC5B4,\" }),\n            /* @__PURE__ */ jsx(\"span\", { style: { color: colors.harborBlue }, className: \"block\", children: \"\\uB514\\uC790\\uC778\\uC758 \\uC644\\uC804\\uD55C \\uC790\\uC720\\uB97C \\uACBD\\uD5D8\\uD558\\uC138\\uC694\" })\n          ] }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              style: { color: colors.textMedium },\n              className: \"max-w-2xl mx-auto text-lg md:text-xl mb-8\",\n              children: [\n                \"\\uB2F9\\uC2E0\\uC758 \\uC815\\uAD50\\uD55C \\uB514\\uC790\\uC778\\uC774 \\uAC1C\\uBC1C \\uACFC\\uC815\\uC5D0\\uC11C \\uAE38\\uC744 \\uC783\\uC9C0 \\uC54A\\uB3C4\\uB85D.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"Framer\\uB294 \\uC0C1\\uC0C1\\uC744 \\uD604\\uC2E4\\uB85C \\uB9CC\\uB4DC\\uB294 \\uAC00\\uC7A5 \\uBE60\\uB978 \\uAE38\\uC744 \\uC81C\\uC548\\uD569\\uB2C8\\uB2E4.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\n            \"div\",\n            {\n              style: { backgroundColor: colors.harborPink },\n              className: \"text-center py-4 px-6 rounded-lg max-w-lg mx-auto mb-8\",\n              children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"font-bold text-lg\", style: { color: colors.harborBlue }, children: \"\\uC0C8\\uB85C\\uC6B4 \\uC2DC\\uB300\\uC758 \\uB514\\uC790\\uC774\\uB108\\uB97C \\uC704\\uD55C \\uB9C8\\uC9C0\\uB9C9 \\uD560\\uC778\" }),\n                /* @__PURE__ */ jsx(\"div\", { style: { color: colors.harborBlue }, children: /* @__PURE__ */ jsx(\n                  CountdownTimer,\n                  {\n                    targetDate: new Date(\n                      Date.now() + 3 * 24 * 60 * 60 * 1e3\n                    ).toISOString()\n                  }\n                ) })\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsx(\n            \"a\",\n            {\n              href: \"#pricing\",\n              style: { backgroundColor: colors.harborBlue, color: colors.white },\n              className: \"font-bold py-4 px-10 rounded-full text-lg hover:opacity-90 transition-opacity duration-300\",\n              children: \"\\uC790\\uC720\\uB97C \\uD5A5\\uD55C \\uC5EC\\uC815 \\uC2DC\\uC791\\uD558\\uAE30\"\n            }\n          )\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-3xl mx-auto text-center\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-3xl md:text-4xl font-bold mb-6\", children: \"\\uD639\\uC2DC, \\uB2F9\\uC2E0\\uC758 \\uC774\\uC57C\\uAE30\\uC778\\uAC00\\uC694?\" }),\n              /* @__PURE__ */ jsxs(\n                \"p\",\n                {\n                  className: \"text-lg leading-relaxed\",\n                  style: { color: colors.textMedium },\n                  children: [\n                    '\"\\uBD84\\uBA85 \\uC644\\uBCBD\\uD55C \\uB514\\uC790\\uC778\\uC774\\uC5C8\\uB294\\uB370, \\uC65C \\uAC1C\\uBC1C\\uB9CC \\uAC70\\uCE58\\uBA74 \\uD3C9\\uBC94\\uD574\\uC9C8\\uAE4C?\"',\n                    /* @__PURE__ */ jsx(\"br\", {}),\n                    \"\\uC218\\uB9CE\\uC740 \\uB514\\uC790\\uC774\\uB108\\uAC00 \\uACAA\\uB294 \\uC88C\\uC808\\uC785\\uB2C8\\uB2E4. \\uAC1C\\uBC1C\\uC790\\uC640\\uC758 \\uC18C\\uD1B5 \\uBE44\\uC6A9, \\uAE30\\uC220\\uC801 \\uC81C\\uC57D, \\uAE38\\uC5B4\\uC9C0\\uB294 \\uC81C\\uC791 \\uAE30\\uAC04...\",\n                    /* @__PURE__ */ jsx(\"br\", {}),\n                    \"\\uB2F9\\uC2E0\\uC758 \\uC704\\uB300\\uD55C \\uC544\\uC774\\uB514\\uC5B4\\uB294 \\uADF8\\uB807\\uAC8C \\uBE5B\\uC744 \\uC783\\uC5B4\\uAC11\\uB2C8\\uB2E4.\",\n                    /* @__PURE__ */ jsxs(\"span\", { style: { color: colors.harborBlue }, className: \"font-bold\", children: [\n                      \" \",\n                      \"\\uC774\\uC81C \\uADF8 \\uACE0\\uB9AC\\uB97C \\uB04A\\uC5B4\\uB0BC \\uC2DC\\uAC04\\uC785\\uB2C8\\uB2E4.\"\n                    ] })\n                  ]\n                }\n              )\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4 border-t border-gray-100\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-12\", children: \"\\uB2F9\\uC2E0\\uC758 \\uC791\\uC5C5\\uBB3C, \\uC774\\uB807\\uAC8C \\uB2EC\\uB77C\\uC9D1\\uB2C8\\uB2E4\" }),\n          /* @__PURE__ */ jsx(BeforeAfterGraphic, {})\n        ] }) }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-12 border-t border-gray-100\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsx(\"div\", { className: \"max-w-6xl mx-auto px-4\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"grid grid-cols-1 md:grid-cols-3 gap-8 text-center\", children: [\n              /* @__PURE__ */ jsxs(\"div\", { children: [\n                /* @__PURE__ */ jsx(\n                  \"p\",\n                  {\n                    className: \"text-4xl font-bold\",\n                    style: { color: colors.harborBlue },\n                    children: \"1,300+\"\n                  }\n                ),\n                /* @__PURE__ */ jsx(\"p\", { className: \"mt-2\", style: { color: colors.textMedium }, children: \"\\uB204\\uC801 \\uC218\\uAC15\\uC0DD\" })\n              ] }),\n              /* @__PURE__ */ jsxs(\"div\", { children: [\n                /* @__PURE__ */ jsx(\n                  \"p\",\n                  {\n                    className: \"text-4xl font-bold\",\n                    style: { color: colors.harborBlue },\n                    children: \"4.9/5.0\"\n                  }\n                ),\n                /* @__PURE__ */ jsx(\"p\", { className: \"mt-2\", style: { color: colors.textMedium }, children: \"\\uC218\\uAC15\\uC0DD \\uB9CC\\uC871\\uB3C4\" })\n              ] }),\n              /* @__PURE__ */ jsxs(\"div\", { children: [\n                /* @__PURE__ */ jsx(\n                  \"p\",\n                  {\n                    className: \"text-4xl font-bold\",\n                    style: { color: colors.harborBlue },\n                    children: \"30+\"\n                  }\n                ),\n                /* @__PURE__ */ jsx(\"p\", { className: \"mt-2\", style: { color: colors.textMedium }, children: \"\\uC2E4\\uC804 \\uD504\\uB85C\\uC81D\\uD2B8 \\uACBD\\uD5D8\" })\n              ] })\n            ] }) })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 text-center border-t border-gray-100\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl md:text-5xl font-bold mb-6\", children: \"\\uACB0\\uACFC\\uB85C \\uC99D\\uBA85\\uD558\\uB294, \\uB2E8 \\uD558\\uB098\\uC758 \\uB9C8\\uC2A4\\uD130\\uB9AC \\uCF54\\uC2A4\" }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              className: \"max-w-3xl mx-auto text-lg\",\n              style: { color: colors.textMedium },\n              children: [\n                \"\\uC774 \\uAC15\\uC758\\uB294 Framer \\uC0AC\\uC6A9\\uBC95\\uC744 \\uC54C\\uB824\\uC8FC\\uB294 \\uAC15\\uC758\\uAC00 \\uC544\\uB2D9\\uB2C8\\uB2E4.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uB514\\uC790\\uC774\\uB108\\uAC00 \\uC790\\uC2E0\\uC758 \\uAC00\\uCE58\\uB97C \\uC2A4\\uC2A4\\uB85C \\uC99D\\uBA85\\uD558\\uACE0,\",\n                \" \",\n                /* @__PURE__ */ jsx(\"span\", { style: { color: colors.harborBlue }, children: \"\\uB300\\uCCB4 \\uBD88\\uAC00\\uB2A5\\uD55C \\uC804\\uBB38\\uAC00\" }),\n                \"\\uB85C \\uAC70\\uB4ED\\uB098\\uB294 \\uBC29\\uBC95\\uC744 \\uC548\\uB0B4\\uD569\\uB2C8\\uB2E4.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-6xl mx-auto grid md:grid-cols-3 gap-8 mt-12 text-left\", children: [\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg border border-gray-200\",\n                style: { backgroundColor: colors.white },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h4\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"1. \\uCC3D\\uC791\\uC758 \\uC644\\uC804\\uD55C \\uC790\\uC728\\uC131\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC544\\uC774\\uB514\\uC5B4 \\uC2A4\\uCF00\\uCE58\\uBD80\\uD130 \\uCD5C\\uC885 \\uBC30\\uD3EC\\uAE4C\\uC9C0, \\uBAA8\\uB4E0 \\uCC3D\\uC791 \\uACFC\\uC815\\uC744 \\uC628\\uC804\\uD788 \\uD1B5\\uC81C\\uD558\\uC138\\uC694. \\uB354 \\uC774\\uC0C1 \\uAE30\\uC220\\uC801 \\uC81C\\uC57D\\uC774\\uB098 \\uC18C\\uD1B5\\uC758 \\uC624\\uB958\\uB85C \\uB2F9\\uC2E0\\uC758 \\uBE44\\uC804\\uC774 \\uD0C0\\uD611\\uB418\\uB294 \\uC77C\\uC740 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg border border-gray-200\",\n                style: { backgroundColor: colors.white },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h4\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"2. \\uC138\\uACC4\\uC801 \\uC218\\uC900\\uC758 \\uC778\\uD130\\uB799\\uC158\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uB2E8\\uC21C\\uD788 '\\uC6C0\\uC9C1\\uC774\\uB294' \\uAC83\\uC744 \\uB118\\uC5B4 '\\uBC18\\uC751\\uD558\\uB294' \\uB514\\uC790\\uC778\\uC744 \\uB9CC\\uB4ED\\uB2C8\\uB2E4. \\uC0AC\\uC6A9\\uC790\\uC758 \\uBAA8\\uB4E0 \\uD589\\uB3D9\\uC5D0 \\uC12C\\uC138\\uD558\\uAC8C \\uBC18\\uC751\\uD558\\uB294 \\uC6D4\\uB4DC\\uD074\\uB798\\uC2A4 \\uC778\\uD130\\uB799\\uC158\\uC73C\\uB85C \\uD504\\uB85C\\uC81D\\uD2B8\\uC758 \\uACA9\\uC744 \\uB192\\uC774\\uC138\\uC694.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg border border-gray-200\",\n                style: { backgroundColor: colors.white },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h4\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"3. \\uC2E4\\uC804\\uC73C\\uB85C \\uC644\\uC131\\uB418\\uB294 \\uD559\\uC2B5 \\uACBD\\uD5D8\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC774\\uB860\\uC5D0 \\uBA38\\uBB34\\uB294 \\uC9C0\\uC2DD\\uC740 \\uC758\\uBBF8 \\uC5C6\\uC2B5\\uB2C8\\uB2E4. \\uB9E4\\uC8FC \\uC2E4\\uC804 \\uACFC\\uC81C\\uB97C \\uD1B5\\uD574 \\uBC30\\uC6B4 \\uAC83\\uC744 \\uC989\\uC2DC \\uCCB4\\uD654\\uD558\\uACE0, \\uCD5C\\uC885 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uD504\\uB85C\\uC81D\\uD2B8\\uB85C \\uB2F9\\uC2E0\\uC758 \\uC131\\uC7A5\\uC744 \\uC138\\uC0C1\\uC5D0 \\uC99D\\uBA85\\uD558\\uC138\\uC694. \\uC774 \\uAC15\\uC758\\uB294 \\uB2F9\\uC2E0\\uC744 '\\uC544\\uB294' \\uB514\\uC790\\uC774\\uB108\\uAC00 \\uC544\\uB2CC '\\uD574\\uB0B4\\uB294' \\uB514\\uC790\\uC774\\uB108\\uB85C \\uB9CC\\uB4ED\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            )\n          ] })\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-6xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-4\", children: \"\\uC5B4\\uB5A4 \\uAC15\\uC758\\uB97C \\uC120\\uD0DD\\uD574\\uC57C \\uD560\\uC9C0, \\uACE0\\uBBFC\\uB418\\uC2DC\\uB098\\uC694?\" }),\n              /* @__PURE__ */ jsx(\n                \"p\",\n                {\n                  className: \"text-lg text-center mb-12\",\n                  style: { color: colors.textMedium },\n                  children: \"\\uB2F9\\uC2E0\\uC758 \\uC18C\\uC911\\uD55C \\uC2DC\\uAC04\\uACFC \\uB178\\uB825\\uC744 \\uAC00\\uC7A5 \\uAC00\\uCE58\\uC788\\uAC8C \\uB9CC\\uB4DC\\uB294 \\uC120\\uD0DD. \\uC800\\uD76C\\uAC00 \\uADF8 \\uCC28\\uC774\\uB97C \\uBA85\\uD655\\uD788 \\uBCF4\\uC5EC\\uB4DC\\uB9BD\\uB2C8\\uB2E4.\"\n                }\n              ),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"grid md:grid-cols-2 gap-8\", children: [\n                /* @__PURE__ */ jsxs(\"div\", { className: \"border-2 border-gray-200 rounded-lg p-6 bg-white\", children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-2xl font-bold text-center mb-6\",\n                      style: { color: colors.textLight },\n                      children: \"\\uD0C0\\uC0AC \\uC218\\uC775\\uD615 \\uAC15\\uC758 (ex. \\uD328\\uC2A4\\uD2B8\\uCEA0\\uD37C\\uC2A4)\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsxs(\"ul\", { className: \"space-y-4\", children: [\n                    /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                      /* @__PURE__ */ jsx(\"span\", { className: \"text-red-500 font-bold mr-3 text-xl\", children: \"\\u2715\" }),\n                      /* @__PURE__ */ jsxs(\"div\", { children: [\n                        /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uCCA0\\uD559: \\uB2E8\\uAE30 \\uC218\\uC775 \\uC911\\uC2EC\" }),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: '\"\\uC6D4 1,000\\uB9CC\\uC6D0\"\\uACFC \\uAC19\\uC740 \\uC790\\uADF9\\uC801\\uC778 \\uD0A4\\uC6CC\\uB4DC\\uB85C \\uB2E8\\uAE30\\uC801\\uC778 \\uC218\\uC775 \\uCC3D\\uCD9C\\uC5D0\\uB9CC \\uC9D1\\uC911\\uD569\\uB2C8\\uB2E4. \\uD558\\uC9C0\\uB9CC \\uC804\\uBB38\\uC131\\uC758 \\uAE4A\\uC774\\uB294 \\uB193\\uCE60 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.' })\n                      ] })\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                      /* @__PURE__ */ jsx(\"span\", { className: \"text-red-500 font-bold mr-3 text-xl\", children: \"\\u2715\" }),\n                      /* @__PURE__ */ jsxs(\"div\", { children: [\n                        /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uD559\\uC2B5 \\uACBD\\uD5D8: \\uD30C\\uD3B8\\uD654\\uB41C \\uC2A4\\uD0AC \\uC2B5\\uB4DD\" }),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uC678\\uC8FC \\uC2A4\\uD0AC, \\uD2B9\\uC815 \\uAE30\\uC220 \\uB4F1 \\uD30C\\uD3B8\\uD654\\uB41C \\uC9C0\\uC2DD\\uC744 \\uB098\\uC5F4\\uD558\\uC5EC \\uC81C\\uACF5\\uD569\\uB2C8\\uB2E4. \\uC65C, \\uC5B4\\uB5BB\\uAC8C \\uC368\\uC57C\\uD558\\uB294\\uC9C0\\uC5D0 \\uB300\\uD55C \\uADFC\\uBCF8\\uC801\\uC778 \\uC774\\uD574\\uAC00 \\uBD80\\uC871\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\" })\n                      ] })\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                      /* @__PURE__ */ jsx(\"span\", { className: \"text-red-500 font-bold mr-3 text-xl\", children: \"\\u2715\" }),\n                      /* @__PURE__ */ jsxs(\"div\", { children: [\n                        /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uC811\\uADFC\\uC131: \\uC21C\\uCC28\\uC801 \\uAC15\\uC758 \\uACF5\\uAC1C\" }),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uAC15\\uC758\\uAC00 \\uBA87 \\uB2EC\\uC5D0 \\uAC78\\uCCD0 \\uB098\\uB258\\uC5B4 \\uACF5\\uAC1C\\uB429\\uB2C8\\uB2E4. \\uB098\\uC758 \\uD559\\uC2B5 \\uC18D\\uB3C4\\uC640 \\uC0C1\\uAD00\\uC5C6\\uC774, \\uCF58\\uD150\\uCE20\\uAC00 \\uACF5\\uAC1C\\uB420 \\uB54C\\uAE4C\\uC9C0 \\uAE30\\uB2E4\\uB824\\uC57C\\uB9CC \\uD569\\uB2C8\\uB2E4.\" })\n                      ] })\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                      /* @__PURE__ */ jsx(\"span\", { className: \"text-red-500 font-bold mr-3 text-xl\", children: \"\\u2715\" }),\n                      /* @__PURE__ */ jsxs(\"div\", { children: [\n                        /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uACB0\\uACFC: \\uAE30\\uB2A5 \\uBCF4\\uC720\\uC790\" }),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"Framer\\uB77C\\uB294 '\\uD234'\\uC740 \\uB2E4\\uB8F0 \\uC218 \\uC788\\uC9C0\\uB9CC, \\uB354 \\uC800\\uB834\\uD55C \\uBE44\\uC6A9\\uC744 \\uC81C\\uC2DC\\uD558\\uB294 \\uB2E4\\uB978 '\\uAE30\\uB2A5 \\uBCF4\\uC720\\uC790'\\uC5D0\\uAC8C \\uB300\\uCCB4\\uB420 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\" })\n                      ] })\n                    ] })\n                  ] })\n                ] }),\n                /* @__PURE__ */ jsxs(\n                  \"div\",\n                  {\n                    className: \"border-2 rounded-lg p-6\",\n                    style: {\n                      borderColor: colors.harborBlue,\n                      backgroundColor: colors.white\n                    },\n                    children: [\n                      /* @__PURE__ */ jsx(\n                        \"h3\",\n                        {\n                          className: \"text-2xl font-bold text-center mb-6\",\n                          style: { color: colors.harborBlue },\n                          children: \"Harbor School \\uD504\\uB808\\uC774\\uBA38 101\"\n                        }\n                      ),\n                      /* @__PURE__ */ jsxs(\"ul\", { className: \"space-y-4\", children: [\n                        /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                          /* @__PURE__ */ jsx(CheckIcon, { className: \"h-6 w-6 mr-3 mt-1 flex-shrink-0 text-green-500\" }),\n                          /* @__PURE__ */ jsxs(\"div\", { children: [\n                            /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uCCA0\\uD559: \\uC804\\uBB38\\uAC00\\uB85C\\uC758 \\uC131\\uC7A5\" }),\n                            /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"7\\uB144\\uAC04\\uC758 \\uAD50\\uC721 \\uACBD\\uD5D8\\uC744 \\uBC14\\uD0D5\\uC73C\\uB85C, \\uB514\\uC790\\uC778\\uC758 \\uBCF8\\uC9C8\\uACFC \\uBB38\\uC81C \\uD574\\uACB0 \\uB2A5\\uB825\\uC744 \\uAE38\\uB7EC '\\uB300\\uCCB4 \\uBD88\\uAC00\\uB2A5\\uD55C' \\uC804\\uBB38\\uAC00\\uB85C \\uC131\\uC7A5\\uC2DC\\uD0B5\\uB2C8\\uB2E4.\" })\n                          ] })\n                        ] }),\n                        /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                          /* @__PURE__ */ jsx(CheckIcon, { className: \"h-6 w-6 mr-3 mt-1 flex-shrink-0 text-green-500\" }),\n                          /* @__PURE__ */ jsxs(\"div\", { children: [\n                            /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uD559\\uC2B5 \\uACBD\\uD5D8: \\uCCB4\\uACC4\\uC801\\uC778 \\uB9C8\\uC2A4\\uD130\\uB9AC\" }),\n                            /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uAE30\\uCD08\\uBD80\\uD130 \\uC560\\uD50C \\uC218\\uC900\\uC758 \\uC778\\uD130\\uB799\\uC158, \\uBE44\\uC988\\uB2C8\\uC2A4 \\uC804\\uB7B5\\uAE4C\\uC9C0. \\uBAA8\\uB4E0 \\uACFC\\uC815\\uC774 \\uC720\\uAE30\\uC801\\uC73C\\uB85C \\uC5F0\\uACB0\\uB418\\uC5B4 \\uC555\\uCD95 \\uC131\\uC7A5\\uC744 \\uB3D5\\uB294 \\uAC80\\uC99D\\uB41C \\uB85C\\uB4DC\\uB9F5\\uC785\\uB2C8\\uB2E4.\" })\n                          ] })\n                        ] }),\n                        /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                          /* @__PURE__ */ jsx(CheckIcon, { className: \"h-6 w-6 mr-3 mt-1 flex-shrink-0 text-green-500\" }),\n                          /* @__PURE__ */ jsxs(\"div\", { children: [\n                            /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uC811\\uADFC\\uC131: \\uACB0\\uC81C \\uC989\\uC2DC, \\uBAA8\\uB4E0 \\uAC15\\uC758 \\uC218\\uAC15\" }),\n                            /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uAE30\\uB2E4\\uB9B4 \\uD544\\uC694 \\uC5C6\\uC2B5\\uB2C8\\uB2E4. \\uB2F9\\uC2E0\\uC758 \\uD559\\uC2B5 \\uC18D\\uB3C4\\uC5D0 \\uB9DE\\uCDB0 \\uBAA8\\uB4E0 \\uCC55\\uD130\\uB97C \\uC790\\uC720\\uB86D\\uAC8C \\uB118\\uB098\\uB4E4\\uBA70, \\uAC00\\uC7A5 \\uD6A8\\uC728\\uC801\\uC73C\\uB85C \\uD559\\uC2B5\\uD558\\uACE0 \\uBE60\\uB974\\uAC8C \\uC131\\uC7A5\\uD558\\uC138\\uC694.\" })\n                          ] })\n                        ] }),\n                        /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                          /* @__PURE__ */ jsx(CheckIcon, { className: \"h-6 w-6 mr-3 mt-1 flex-shrink-0 text-green-500\" }),\n                          /* @__PURE__ */ jsxs(\"div\", { children: [\n                            /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uACB0\\uACFC: \\uB300\\uCCB4 \\uBD88\\uAC00\\uB2A5\\uD55C \\uC804\\uBB38\\uAC00\" }),\n                            /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uC790\\uC2E0\\uB9CC\\uC758 \\uB514\\uC790\\uC778 \\uCCA0\\uD559\\uC744 \\uAC16\\uACE0, \\uC5B4\\uB5A4 \\uBB38\\uC81C\\uB4E0 \\uD574\\uACB0\\uD560 \\uC218 \\uC788\\uB294 \\uC804\\uBB38\\uAC00. \\uAC00\\uACA9\\uC774 \\uC544\\uB2CC '\\uAC00\\uCE58'\\uB85C \\uACBD\\uC7C1\\uD558\\uB294 \\uB514\\uC790\\uC774\\uB108\\uAC00 \\uB429\\uB2C8\\uB2E4.\" })\n                          ] })\n                        ] })\n                      ] })\n                    ]\n                  }\n                )\n              ] })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 text-center border-t border-gray-100\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-2xl font-bold\", style: { color: colors.harborBlue }, children: \"GAME CHANGER\" }),\n          /* @__PURE__ */ jsx(\"h3\", { className: \"text-4xl md:text-5xl font-bold my-4\", children: \"\\uC65C \\uC9C0\\uAE08, Framer\\uC778\\uAC00?\" }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              className: \"max-w-3xl mx-auto text-lg\",\n              style: { color: colors.textMedium },\n              children: [\n                \"90%\\uC758 \\uBC18\\uBCF5 \\uC791\\uC5C5\\uACFC 10%\\uC758 \\uD06C\\uB9AC\\uC5D0\\uC774\\uD2F0\\uBE0C. \\uC6F9\\uB514\\uC790\\uC778\\uC758 \\uD604\\uC2E4\\uC785\\uB2C8\\uB2E4. \",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"Framer\\uB294 \\uC774 \\uACF5\\uC2DD\\uC744 \\uC644\\uC804\\uD788 \\uB4A4\\uC9D1\\uC2B5\\uB2C8\\uB2E4. \\uC774\\uC81C \\uB2F9\\uC2E0\\uC758 \\uC2DC\\uAC04 90%\\uB97C \\uC624\\uB86F\\uC774 \\uCC3D\\uC758\\uC131\\uC5D0 \\uC3DF\\uC544\\uBD80\\uC73C\\uC138\\uC694.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto grid md:grid-cols-3 gap-8 mt-12\", children: [\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.lightGray },\n                children: [\n                  /* @__PURE__ */ jsx(\"h4\", { className: \"text-xl font-bold mb-2\", children: \"\\uC555\\uB3C4\\uC801\\uC778 \\uC18D\\uB3C4\" }),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC544\\uC774\\uB514\\uC5B4\\uB97C \\uD604\\uC2E4\\uB85C \\uB9CC\\uB4DC\\uB294 \\uB370 \\uB2E8 \\uD558\\uB8E8. Framer\\uC758 \\uBE14\\uB85D \\uC2DC\\uC2A4\\uD15C\\uACFC AI \\uAE30\\uB2A5\\uC774 \\uB2F9\\uC2E0\\uC758 \\uC2DC\\uAC04\\uC744 \\uC544\\uAEF4\\uC90D\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.lightGray },\n                children: [\n                  /* @__PURE__ */ jsx(\"h4\", { className: \"text-xl font-bold mb-2\", children: \"\\uCF54\\uB4DC \\uC5C6\\uB294 \\uACE0\\uD004\\uB9AC\\uD2F0\" }),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC1C\\uBC1C\\uC790\\uAC00 \\uBA87 \\uC8FC\\uAC04 \\uAD6C\\uD604\\uD560 \\uC778\\uD130\\uB799\\uC158\\uC744 \\uB2E8 \\uBA87 \\uBC88\\uC758 \\uD074\\uB9AD\\uC73C\\uB85C. \\uB2F9\\uC2E0\\uC758 \\uB514\\uC790\\uC778\\uC740 \\uC774\\uC81C \\uC8FD\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.lightGray },\n                children: [\n                  /* @__PURE__ */ jsx(\"h4\", { className: \"text-xl font-bold mb-2\", children: \"\\uC2E4\\uC2DC\\uAC04 \\uD611\\uC5C5\\uACFC \\uBC30\\uD3EC\" }),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uB514\\uC790\\uC778\\uBD80\\uD130 \\uBC30\\uD3EC\\uAE4C\\uC9C0 \\uD55C \\uACF3\\uC5D0\\uC11C. \\uD300\\uACFC \\uD568\\uAED8 \\uC2E4\\uC2DC\\uAC04\\uC73C\\uB85C \\uC791\\uC5C5\\uD558\\uACE0, \\uD074\\uB9AD \\uD55C \\uBC88\\uC73C\\uB85C \\uC138\\uC0C1\\uC5D0 \\uACF5\\uAC1C\\uD558\\uC138\\uC694.\" })\n                ]\n              }\n            )\n          ] })\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uC774 \\uC704\\uB300\\uD55C \\uC5EC\\uC815\\uC744 \\uD568\\uAED8\\uD560 \\uBD84\\uB4E4\\uC744 \\uCC3E\\uC2B5\\uB2C8\\uB2E4\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-3 gap-8\", children: audience.map((person, index) => /* @__PURE__ */ jsxs(\n                \"div\",\n                {\n                  className: \"p-8 rounded-lg bg-white shadow-md hover:shadow-xl transition-shadow duration-300\",\n                  children: [\n                    /* @__PURE__ */ jsx(\n                      \"h3\",\n                      {\n                        className: \"text-xl font-bold mb-4\",\n                        style: { color: colors.harborBlue },\n                        children: person.title\n                      }\n                    ),\n                    /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: person.description })\n                  ]\n                },\n                index\n              )) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4 border-t border-gray-100\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto grid md:grid-cols-2 gap-12 items-center\", children: [\n          /* @__PURE__ */ jsxs(\"div\", { className: \"text-center md:text-left\", children: [\n            /* @__PURE__ */ jsx(\"p\", { className: \"font-bold\", style: { color: colors.harborBlue }, children: \"INSTRUCTOR\" }),\n            /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold my-4\", children: \"Yongmin, Harbor School\" }),\n            /* @__PURE__ */ jsx(\"p\", { className: \"mb-6\", style: { color: colors.textMedium }, children: \"Framer\\uAC00 \\uD55C\\uAD6D\\uC5D0 \\uC54C\\uB824\\uC9C0\\uAE30 \\uC804\\uBD80\\uD130 7\\uB144\\uAC04 Framer\\uB9CC\\uC744 \\uC5F0\\uAD6C\\uD558\\uACE0, 30\\uAC1C \\uC774\\uC0C1\\uC758 \\uC2E4\\uC804 \\uD504\\uB85C\\uC81D\\uD2B8\\uB97C \\uC131\\uACF5\\uC2DC\\uD0A8 1\\uC138\\uB300 Framer \\uC804\\uBB38\\uAC00\\uC785\\uB2C8\\uB2E4. \\uB2E8\\uC21C\\uD55C \\uD234 \\uC0AC\\uC6A9\\uBC95\\uC744 \\uB118\\uC5B4, '\\uC5B4\\uB5BB\\uAC8C' \\uB514\\uC790\\uC778\\uC73C\\uB85C \\uBB38\\uC81C\\uB97C \\uD574\\uACB0\\uD558\\uB294\\uC9C0\\uC5D0 \\uB300\\uD55C \\uAE4A\\uC740 \\uD1B5\\uCC30\\uB825\\uC744 \\uACF5\\uC720\\uD569\\uB2C8\\uB2E4.\" }),\n            /* @__PURE__ */ jsxs(\"div\", { className: \"flex justify-center md:justify-start space-x-8\", children: [\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-center\", children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-3xl font-bold\", children: \"7+\" }),\n                /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"\\uAD50\\uC721 \\uACBD\\uB825\" })\n              ] }),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-center\", children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-3xl font-bold\", children: \"30+\" }),\n                /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"\\uC2E4\\uC804 \\uD504\\uB85C\\uC81D\\uD2B8\" })\n              ] }),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-center\", children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-3xl font-bold\", children: \"1,300+\" }),\n                /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"\\uB204\\uC801 \\uC218\\uAC15\\uC0DD\" })\n              ] })\n            ] })\n          ] }),\n          /* @__PURE__ */ jsx(\"div\", { className: \"w-full max-w-sm mx-auto\", children: /* @__PURE__ */ jsx(\n            \"div\",\n            {\n              className: \"aspect-square rounded-full p-2\",\n              style: {\n                background: `linear-gradient(to bottom right, ${colors.harborPink}, ${colors.harborBlue})`\n              },\n              children: /* @__PURE__ */ jsx(\"div\", { className: \"w-full h-full rounded-full flex items-center justify-center bg-gray-100\", children: /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"[\\uAC15\\uC0AC \\uC774\\uBBF8\\uC9C0]\" }) })\n            }\n          ) })\n        ] }) }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-4xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uB2F9\\uC2E0\\uC774 \\uB9C8\\uC2A4\\uD130\\uD560 6\\uAC00\\uC9C0 \\uD575\\uC2EC \\uC5ED\\uB7C9\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-2 gap-x-8 gap-y-6\", children: features.map((feature, index) => /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start space-x-4\", children: [\n                /* @__PURE__ */ jsx(\n                  CheckIcon,\n                  {\n                    className: \"h-6 w-6 mt-1 flex-shrink-0\",\n                    style: { color: colors.harborBlue }\n                  }\n                ),\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-lg\", style: { color: colors.textMedium }, children: feature })\n              ] }, index)) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4 border-t border-gray-100\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-6xl mx-auto text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-4\", children: \"\\uC878\\uC5C5\\uC0DD\\uB4E4\\uC758 \\uC2E4\\uC81C \\uACB0\\uACFC\\uBB3C\" }),\n          /* @__PURE__ */ jsx(\n            \"p\",\n            {\n              className: \"max-w-2xl mx-auto mb-12\",\n              style: { color: colors.textMedium },\n              children: \"\\uC774 \\uAC15\\uC758\\uB97C \\uD1B5\\uD574 \\uB2F9\\uC2E0\\uCC98\\uB7FC \\uD3C9\\uBC94\\uD588\\uB358 \\uB514\\uC790\\uC774\\uB108\\uB4E4\\uC774 \\uB9CC\\uB4E4\\uC5B4\\uB0B8, \\uBE44\\uBC94\\uD55C \\uACB0\\uACFC\\uBB3C\\uB4E4\\uC785\\uB2C8\\uB2E4.\"\n            }\n          ),\n          /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-3 gap-8\", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxs(\"div\", { className: \"group\", children: [\n            /* @__PURE__ */ jsx(\"div\", { className: \"aspect-video rounded-lg bg-gray-100 mb-4 border border-gray-200 flex items-center justify-center\", children: /* @__PURE__ */ jsxs(\"p\", { style: { color: colors.textLight }, children: [\n              \"[\\uC878\\uC5C5\\uC0DD \\uD504\\uB85C\\uC81D\\uD2B8 \",\n              i,\n              \"]\"\n            ] }) }),\n            /* @__PURE__ */ jsxs(\"h3\", { className: \"text-lg font-bold\", children: [\n              \"Project Title \",\n              i\n            ] }),\n            /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"by Alumnus Name\" })\n          ] }, i)) })\n        ] }) }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto text-center\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-4\", children: \"\\uBC31\\uBB38\\uC774 \\uBD88\\uC5EC\\uC77C\\uACAC\" }),\n              /* @__PURE__ */ jsxs(\"p\", { className: \"text-lg mb-8\", style: { color: colors.textMedium }, children: [\n                \"\\uC774 \\uAC15\\uC758\\uB97C \\uD1B5\\uD574 \\uB2F9\\uC2E0\\uC774 \\uC9C1\\uC811 \\uB9CC\\uB4E4\\uAC8C \\uB420\",\n                \" \",\n                /* @__PURE__ */ jsx(\"span\", { style: { color: colors.harborBlue }, className: \"font-bold\", children: \"\\uC2E4\\uC804 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uD504\\uB85C\\uC81D\\uD2B8\" }),\n                \"\\uC785\\uB2C8\\uB2E4.\"\n              ] }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"aspect-video rounded-lg shadow-2xl p-2 border border-gray-200 bg-white\", children: /* @__PURE__ */ jsx(\"div\", { className: \"w-full h-full bg-gray-100 rounded flex items-center justify-center\", children: /* @__PURE__ */ jsxs(\"p\", { style: { color: colors.textLight }, children: [\n                \"[\",\n                /* @__PURE__ */ jsx(\n                  \"a\",\n                  {\n                    href: \"https://marianne.framer.website\",\n                    target: \"_blank\",\n                    rel: \"noopener noreferrer\",\n                    className: \"underline\",\n                    style: { color: colors.harborBlue },\n                    children: \"https://marianne.framer.website\"\n                  }\n                ),\n                \"]\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"(\\uC704 \\uB9C1\\uD06C\\uC640 \\uAC19\\uC740 \\uD004\\uB9AC\\uD2F0\\uC758 \\uACB0\\uACFC\\uBB3C\\uC744 \\uB9CC\\uB4ED\\uB2C8\\uB2E4)\"\n              ] }) }) }),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-left mt-8 grid md:grid-cols-2 gap-x-8 gap-y-4 max-w-2xl mx-auto\", children: [\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"\\uC644\\uBCBD\\uD55C \\uBC18\\uC751\\uD615 \\uB808\\uC774\\uC544\\uC6C3\"\n                ] }),\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"CMS\\uB97C \\uD1B5\\uD55C \\uB3D9\\uC801 \\uCF58\\uD150\\uCE20 \\uAD00\\uB9AC\"\n                ] }),\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"\\uC2DC\\uC120\\uC744 \\uC0AC\\uB85C\\uC7A1\\uB294 \\uC2A4\\uD06C\\uB864 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\"\n                ] }),\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"\\uCF54\\uB4DC \\uCEF4\\uD3EC\\uB10C\\uD2B8\\uB97C \\uD65C\\uC6A9\\uD55C \\uAE30\\uB2A5 \\uD655\\uC7A5\"\n                ] })\n              ] })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4 border-t border-gray-100\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-4xl mx-auto\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uC7A0\\uC7AC\\uB825\\uC744 \\uD3ED\\uBC1C\\uC2DC\\uD0AC 6\\uC8FC\\uAC04\\uC758 \\uC555\\uCD95 \\uC131\\uC7A5 \\uD504\\uB85C\\uADF8\\uB7A8\" }),\n          /* @__PURE__ */ jsx(\"div\", { className: \"space-y-4\", children: curriculum.map((week, index) => /* @__PURE__ */ jsxs(\n            \"details\",\n            {\n              className: \"p-6 rounded-lg group border border-gray-200\",\n              open: index === 0,\n              style: { backgroundColor: colors.white },\n              children: [\n                /* @__PURE__ */ jsxs(\"summary\", { className: \"font-bold text-xl list-none flex justify-between items-center cursor-pointer\", children: [\n                  /* @__PURE__ */ jsxs(\"div\", { children: [\n                    /* @__PURE__ */ jsx(\n                      \"p\",\n                      {\n                        className: \"text-sm font-bold\",\n                        style: { color: colors.harborBlue },\n                        children: week.module\n                      }\n                    ),\n                    /* @__PURE__ */ jsx(\"h3\", { className: \"text-2xl font-bold mt-1 group-hover:opacity-80 transition-opacity\", children: week.title })\n                  ] }),\n                  /* @__PURE__ */ jsxs(\n                    \"span\",\n                    {\n                      className: \"text-sm ml-4 whitespace-nowrap\",\n                      style: { color: colors.textLight },\n                      children: [\n                        week.lessonsCount,\n                        \"\\uAC15 / \",\n                        week.duration\n                      ]\n                    }\n                  )\n                ] }),\n                /* @__PURE__ */ jsxs(\"div\", { className: \"overflow-hidden max-h-0 group-open:max-h-[1000px] transition-all duration-500 ease-in-out\", children: [\n                  /* @__PURE__ */ jsx(\"p\", { className: \"my-4\", style: { color: colors.textMedium }, children: week.description }),\n                  /* @__PURE__ */ jsxs(\n                    \"div\",\n                    {\n                      className: \"p-4 rounded-md mt-4\",\n                      style: { backgroundColor: colors.lightGray },\n                      children: [\n                        /* @__PURE__ */ jsx(\n                          \"p\",\n                          {\n                            className: \"font-bold text-sm\",\n                            style: { color: colors.harborBlue },\n                            children: \"Key Outcome\"\n                          }\n                        ),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"mt-1\", style: { color: colors.textMedium }, children: week.outcome })\n                      ]\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"ul\", { className: \"space-y-2 pt-4 mt-4 border-t border-gray-200\", children: week.lessons.map((lesson, lessonIndex) => /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                    /* @__PURE__ */ jsx(\n                      CheckIcon,\n                      {\n                        className: \"h-5 w-5 mr-3 mt-1 flex-shrink-0\",\n                        style: { color: colors.textLight }\n                      }\n                    ),\n                    /* @__PURE__ */ jsx(\"span\", { style: { color: colors.textMedium }, children: lesson })\n                  ] }, lessonIndex)) })\n                ] })\n              ]\n            },\n            index\n          )) })\n        ] }) }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uBA3C\\uC800 \\uACBD\\uD5D8\\uD55C \\uBD84\\uB4E4\\uC758 \\uC758\\uC2EC \\uC5C6\\uB294 \\uCC2C\\uC0AC\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-3 gap-8\", children: reviews.map((review, i) => /* @__PURE__ */ jsxs(\n                \"div\",\n                {\n                  className: \"bg-white p-6 rounded-lg flex flex-col shadow-md hover:shadow-xl transition-shadow duration-300\",\n                  children: [\n                    /* @__PURE__ */ jsx(\"div\", { className: \"flex mb-4\", children: [...Array(5)].map((_, starIndex) => /* @__PURE__ */ jsx(\n                      StarIcon,\n                      {\n                        className: \"h-5 w-5 text-yellow-400\"\n                      },\n                      starIndex\n                    )) }),\n                    /* @__PURE__ */ jsxs(\"p\", { className: \"flex-grow\", style: { color: colors.textMedium }, children: [\n                      '\"',\n                      review.text,\n                      '\"'\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"div\", { className: \"mt-4\", children: [\n                      /* @__PURE__ */ jsx(\"p\", { className: \"font-bold\", children: review.name }),\n                      /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: review.role })\n                    ] })\n                  ]\n                },\n                i\n              )) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 text-center border-t border-gray-100\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-4\", children: \"\\uB2F9\\uC2E0\\uC758 \\uC131\\uC7A5\\uC744 \\uC704\\uD55C, \\uB2E8 \\uD558\\uB098\\uC758 \\uD0A4\\uD2B8\" }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              className: \"text-lg max-w-2xl mx-auto mb-10\",\n              style: { color: colors.textMedium },\n              children: [\n                \"\\uC131\\uACF5\\uC801\\uC778 \\uC5EC\\uC815\\uC744 \\uC704\\uD574 \\uD544\\uC694\\uD55C \\uBAA8\\uB4E0 \\uAC83\\uC744 \\uB2F4\\uC558\\uC2B5\\uB2C8\\uB2E4.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uB2F9\\uC2E0\\uC740 \\uADF8\\uC800 \\uC131\\uC7A5\\uC5D0\\uB9CC \\uC9D1\\uC911\\uD558\\uC138\\uC694.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 text-left\", children: [\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uC131\\uC7A5\\uC758 \\uB3D9\\uBC18\\uC790, \\uC2AC\\uB799 \\uCEE4\\uBBA4\\uB2C8\\uD2F0\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC19\\uC740 \\uBAA9\\uD45C\\uB97C \\uAC00\\uC9C4 \\uB3D9\\uB8CC\\uB4E4\\uACFC \\uD568\\uAED8\\uB77C\\uBA74 \\uB354 \\uBA40\\uB9AC, \\uB354 \\uBE60\\uB974\\uAC8C \\uAC08 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uC774\\uACF3\\uC740 \\uB2E8\\uC21C\\uD55C Q&A \\uACF5\\uAC04\\uC774 \\uC544\\uB2CC, \\uC9D1\\uB2E8 \\uC9C0\\uC131\\uC758 \\uD5C8\\uBE0C\\uC785\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uC2DC\\uAC04\\uC744 \\uC9C0\\uBC30\\uD558\\uB294, \\uD575\\uC2EC \\uB9AC\\uC18C\\uC2A4\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC15\\uC758\\uC5D0 \\uC0AC\\uC6A9\\uB41C \\uBAA8\\uB4E0 Framer \\uD30C\\uC77C\\uACFC \\uCF54\\uB4DC \\uC2A4\\uB2C8\\uD3AB\\uC740 \\uB2F9\\uC2E0\\uC758 \\uC2DC\\uAC04\\uC744 \\uC544\\uAEF4\\uC8FC\\uB294 \\uAC00\\uC7A5 \\uAC15\\uB825\\uD55C \\uBB34\\uAE30\\uAC00 \\uB420 \\uAC83\\uC785\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uD504\\uB85C\\uD398\\uC154\\uB110\\uC758 \\uC0C1\\uC9D5, \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uD15C\\uD50C\\uB9BF\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC15\\uC758 \\uC644\\uAC15 \\uD6C4, \\uB2F9\\uC2E0\\uC758 \\uC2E4\\uB825\\uC744 \\uC99D\\uBA85\\uD560 \\uAC00\\uC7A5 \\uBE60\\uB978 \\uBC29\\uBC95. \\uC804\\uBB38\\uAC00\\uAC00 \\uB514\\uC790\\uC778\\uD55C \\uACE0\\uD488\\uC9C8 \\uD15C\\uD50C\\uB9BF\\uC73C\\uB85C \\uB2F9\\uC2E0\\uC758 \\uAC00\\uCE58\\uB97C \\uBCF4\\uC5EC\\uC8FC\\uC138\\uC694.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uC131\\uC7A5\\uC758 \\uD604\\uC7AC\\uC9C4\\uD589\\uD615, \\uD3C9\\uC0DD \\uC5C5\\uB370\\uC774\\uD2B8\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC774 \\uAC15\\uC758\\uB294 \\uC0B4\\uC544\\uC788\\uB294 \\uC720\\uAE30\\uCCB4\\uC785\\uB2C8\\uB2E4. Framer\\uC758 \\uBC1C\\uC804\\uC5D0 \\uB9DE\\uCDB0 \\uB04A\\uC784\\uC5C6\\uC774 \\uC9C4\\uD654\\uD558\\uBA70, \\uB2F9\\uC2E0\\uC758 \\uC2E4\\uB825\\uC744 \\uD56D\\uC0C1 \\uCD5C\\uC2E0\\uC73C\\uB85C \\uC720\\uC9C0\\uD574 \\uB4DC\\uB9BD\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            )\n          ] })\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.lightGray },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-3xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uB2F9\\uC2E0\\uC758 \\uB9C8\\uC9C0\\uB9C9 \\uB9DD\\uC124\\uC784\\uC744 \\uD574\\uACB0\\uD574 \\uB4DC\\uB9BD\\uB2C8\\uB2E4\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"space-y-4\", children: faqs.map((faq, index) => /* @__PURE__ */ jsxs(\n                \"details\",\n                {\n                  className: \"bg-white p-6 rounded-lg group cursor-pointer shadow-sm\",\n                  children: [\n                    /* @__PURE__ */ jsxs(\"summary\", { className: \"font-bold text-lg list-none flex justify-between items-center\", children: [\n                      faq.question,\n                      /* @__PURE__ */ jsx(\n                        \"span\",\n                        {\n                          style: { color: colors.harborBlue },\n                          className: \"transform transition-transform duration-300 group-open:rotate-45 text-2xl\",\n                          children: \"+\"\n                        }\n                      )\n                    ] }),\n                    /* @__PURE__ */ jsx(\"div\", { className: \"overflow-hidden max-h-0 group-open:max-h-screen transition-all duration-500 ease-in-out\", children: /* @__PURE__ */ jsx(\"p\", { className: \"mt-4\", style: { color: colors.textMedium }, children: faq.answer }) })\n                  ]\n                },\n                index\n              )) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\n          \"section\",\n          {\n            id: \"pricing\",\n            className: \"py-20 px-4 text-center border-t border-gray-100\",\n            children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl md:text-5xl font-bold mb-4\", children: \"\\uAC00\\uC7A5 \\uC704\\uB300\\uD55C \\uD22C\\uC790\\uB294 \\uB2F9\\uC2E0\\uC758 \\uC131\\uC7A5\\uC785\\uB2C8\\uB2E4\" }),\n              /* @__PURE__ */ jsxs(\n                \"p\",\n                {\n                  className: \"text-lg max-w-2xl mx-auto mb-10\",\n                  style: { color: colors.textMedium },\n                  children: [\n                    \"\\uD55C \\uBC88\\uC758 \\uACB0\\uC2EC\\uC73C\\uB85C, \\uB2F9\\uC2E0\\uC758 \\uCEE4\\uB9AC\\uC5B4\\uB294 \\uC0C8\\uB85C\\uC6B4 \\uC2DC\\uB300\\uB97C \\uB9DE\\uC774\\uD569\\uB2C8\\uB2E4.\",\n                    /* @__PURE__ */ jsx(\"br\", {}),\n                    \"\\uC5B4\\uC81C\\uC758 \\uB2F9\\uC2E0\\uACFC \\uC791\\uBCC4\\uD558\\uACE0, \\uB0B4\\uC77C\\uC758 \\uC804\\uBB38\\uAC00\\uC640 \\uB9CC\\uB098\\uC138\\uC694.\"\n                  ]\n                }\n              ),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"grid md:grid-cols-2 max-w-4xl mx-auto items-center gap-8\", children: [\n                /* @__PURE__ */ jsxs(\"div\", { className: \"text-left\", children: [\n                  /* @__PURE__ */ jsx(\"h3\", { className: \"text-3xl font-bold mb-4\", children: \"\\uBB34\\uC5C7\\uC744 \\uB9DD\\uC124\\uC774\\uB098\\uC694?\" }),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, className: \"mb-4\", children: \"\\uC774 \\uAC15\\uC758\\uB294 \\uB2E8\\uC21C\\uD55C \\uC9C0\\uCD9C\\uC774 \\uC544\\uB2CC, \\uB2F9\\uC2E0\\uC758 \\uBBF8\\uB798\\uB97C \\uC704\\uD55C \\uAC00\\uC7A5 \\uD655\\uC2E4\\uD55C \\uD22C\\uC790\\uC785\\uB2C8\\uB2E4. \\uC218\\uC2ED, \\uC218\\uBC31 \\uBC30\\uC758 \\uAC00\\uCE58\\uB85C \\uB3CC\\uC544\\uC62C \\uC131\\uC7A5\\uC758 \\uAE30\\uD68C\\uB97C \\uB354 \\uC774\\uC0C1 \\uBBF8\\uB8E8\\uC9C0 \\uB9C8\\uC138\\uC694.\" }),\n                  /* @__PURE__ */ jsxs(\"ul\", { className: \"space-y-3\", children: [\n                    /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                      /* @__PURE__ */ jsx(CheckIcon, { className: \"h-6 w-6 mr-3 mt-1 flex-shrink-0 text-green-500\" }),\n                      /* @__PURE__ */ jsxs(\"div\", { children: [\n                        /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uD3C9\\uC0DD \\uC18C\\uC7A5 VOD\" }),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uC5B8\\uC81C \\uC5B4\\uB514\\uC11C\\uB4E0, \\uB2F9\\uC2E0\\uC758 \\uD398\\uC774\\uC2A4\\uC5D0 \\uB9DE\\uCDB0 \\uD559\\uC2B5\\uD558\\uC138\\uC694.\" })\n                      ] })\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                      /* @__PURE__ */ jsx(CheckIcon, { className: \"h-6 w-6 mr-3 mt-1 flex-shrink-0 text-green-500\" }),\n                      /* @__PURE__ */ jsxs(\"div\", { children: [\n                        /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uC804\\uBB38\\uAC00 \\uCEE4\\uBBA4\\uB2C8\\uD2F0\" }),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uD63C\\uC790\\uAC00 \\uC544\\uB2CC \\uD568\\uAED8\\uC758 \\uD798\\uC73C\\uB85C \\uB354 \\uBE60\\uB974\\uAC8C \\uC131\\uC7A5\\uD569\\uB2C8\\uB2E4.\" })\n                      ] })\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                      /* @__PURE__ */ jsx(CheckIcon, { className: \"h-6 w-6 mr-3 mt-1 flex-shrink-0 text-green-500\" }),\n                      /* @__PURE__ */ jsxs(\"div\", { children: [\n                        /* @__PURE__ */ jsx(\"h4\", { className: \"font-bold\", children: \"\\uC2E4\\uC804 \\uC911\\uC2EC\\uC758 \\uACB0\\uACFC\\uBB3C\" }),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"\\uAC15\\uC758\\uAC00 \\uB05D\\uB098\\uBA74, \\uB2F9\\uC2E0\\uC758 \\uC2E4\\uB825\\uC744 \\uC99D\\uBA85\\uD560 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624\\uAC00 \\uB0A8\\uC2B5\\uB2C8\\uB2E4.\" })\n                      ] })\n                    ] })\n                  ] })\n                ] }),\n                /* @__PURE__ */ jsxs(\n                  \"div\",\n                  {\n                    style: { backgroundColor: colors.harborBlue, color: colors.white },\n                    className: \"rounded-lg p-8 shadow-2xl text-center\",\n                    children: [\n                      /* @__PURE__ */ jsx(\"p\", { className: \"text-lg font-bold\", children: \"Framer 101 Mastery\" }),\n                      /* @__PURE__ */ jsxs(\"p\", { className: \"text-5xl font-bold my-4\", children: [\n                        new Intl.NumberFormat(\"ko-KR\").format(32e4),\n                        \"\\uC6D0\"\n                      ] }),\n                      /* @__PURE__ */ jsxs(\"p\", { className: \"line-through text-xl opacity-70\", children: [\n                        new Intl.NumberFormat(\"ko-KR\").format(63e4),\n                        \"\\uC6D0\"\n                      ] }),\n                      /* @__PURE__ */ jsx(\"div\", { className: \"my-6\", children: /* @__PURE__ */ jsx(\"span\", { className: \"bg-yellow-400 text-black font-bold py-1 px-3 rounded-md\", children: \"49% OFF\" }) }),\n                      /* @__PURE__ */ jsx(\n                        \"a\",\n                        {\n                          href: \"#\",\n                          style: {\n                            backgroundColor: colors.harborPink,\n                            color: colors.black\n                          },\n                          className: \"w-full block font-bold py-4 px-8 rounded-lg text-xl hover:opacity-90 transition-opacity duration-300 transform hover:scale-105\",\n                          children: \"\\uBC14\\uB85C \\uAD6C\\uB9E4\\uD558\\uACE0 \\uC2DC\\uC791\\uD558\\uAE30\"\n                        }\n                      ),\n                      /* @__PURE__ */ jsx(\"p\", { className: \"text-sm mt-4 opacity-80\", children: \"\\uC6D4 26,600\\uC6D0 (12\\uAC1C\\uC6D4 \\uD560\\uBD80 \\uC2DC)\" })\n                    ]\n                  }\n                )\n              ] })\n            ]\n          }\n        ),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4 border-t border-gray-100\",\n            style: {\n              backgroundColor: colors.lightGray,\n              color: colors.textLight,\n              fontSize: \"0.875rem\"\n            },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-4xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\n                \"h2\",\n                {\n                  className: \"text-2xl font-bold text-center mb-8\",\n                  style: { color: colors.black },\n                  children: \"\\uD559\\uC2B5 \\uBC0F \\uD658\\uBD88 \\uADDC\\uC815\"\n                }\n              ),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-6\", children: [\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\"h3\", { className: \"font-bold mb-2\", style: { color: colors.black }, children: \"\\uD559\\uC2B5 \\uADDC\\uC815\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uBCF8 \\uC0C1\\uD488\\uC740 \\uB3D9\\uC601\\uC0C1 \\uD615\\uD0DC\\uC758 \\uAC15\\uC758\\uB97C \\uD3C9\\uC0DD \\uC18C\\uC7A5\\uD558\\uBA70 \\uC218\\uAC15\\uD558\\uB294 \\uC0C1\\uD488\\uC785\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uC218\\uAC15 \\uC2E0\\uCCAD \\uBC0F \\uACB0\\uC81C\\uB97C \\uC644\\uB8CC\\uD558\\uC2DC\\uBA74, \\uB9C8\\uC774\\uD398\\uC774\\uC9C0\\uB97C \\uD1B5\\uD574 \\uBC14\\uB85C \\uC218\\uAC15\\uC774 \\uAC00\\uB2A5\\uD569\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* ID \\uACF5\\uC720, \\uAC15\\uC758 \\uC601\\uC0C1 \\uBB34\\uB2E8 \\uBC30\\uD3EC \\uBC0F \\uAC00\\uACF5, \\uCEA1\\uCCD0, \\uD310\\uB9E4 \\uB4F1 \\uC77C\\uCCB4\\uC758 \\uC800\\uC791\\uAD8C \\uCE68\\uD574 \\uD589\\uC704\\uB97C \\uAE08\\uC9C0\\uD569\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uBD80\\uC815 \\uC0AC\\uC6A9\\uC774 \\uC801\\uBC1C\\uB420 \\uACBD\\uC6B0 \\uC800\\uC791\\uAD8C\\uBC95 \\uC704\\uBC18\\uC5D0 \\uC758\\uD55C \\uBC95\\uC801\\uC778 \\uC81C\\uC7AC\\uB97C \\uBC1B\\uC73C\\uC2E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\" })\n                ] }),\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\"h3\", { className: \"font-bold mb-2\", style: { color: colors.black }, children: \"\\uD658\\uBD88 \\uADDC\\uC815\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uD658\\uBD88 \\uAE08\\uC561\\uC740 \\uC815\\uAC00\\uAC00 \\uC544\\uB2CC \\uC2E4\\uC81C \\uACB0\\uC81C \\uAE08\\uC561\\uC744 \\uAE30\\uC900\\uC73C\\uB85C \\uACC4\\uC0B0\\uB429\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uC218\\uAC15 \\uC2DC\\uC791 \\uD6C4 7\\uC77C \\uC774\\uB0B4, 2\\uAC1C \\uAC15\\uC758 \\uBBF8\\uB9CC \\uC218\\uAC15 \\uC2DC\\uC5D0\\uB294 100% \\uD658\\uBD88 \\uAC00\\uB2A5\\uD569\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uC218\\uAC15 \\uC2DC\\uC791 \\uD6C4 7\\uC77C \\uC774\\uB0B4, 2\\uAC1C \\uAC15\\uC758 \\uC774\\uC0C1 \\uC218\\uAC15 \\uC2DC \\uB610\\uB294 7\\uC77C \\uCD08\\uACFC \\uC2DC\\uC5D0\\uB294 \\uD559\\uC2B5\\uB960\\uC5D0 \\uB530\\uB77C \\uCC28\\uAC10 \\uD6C4 \\uD658\\uBD88\\uC774 \\uC9C4\\uD589\\uB429\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uBCF4\\uB2E4 \\uC790\\uC138\\uD55C \\uD658\\uBD88 \\uADDC\\uC815\\uC740 \\uACE0\\uAC1D\\uC13C\\uD130\\uB85C \\uBB38\\uC758 \\uBC14\\uB78D\\uB2C8\\uB2E4.\" })\n                ] })\n              ] })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\n          \"footer\",\n          {\n            className: \"text-center py-10 border-t border-gray-100\",\n            style: { backgroundColor: colors.white },\n            children: [\n              /* @__PURE__ */ jsx(\"p\", { className: \"text-lg font-bold mb-4\", style: { color: colors.black }, children: \"(\\uC8FC) \\uD558\\uBC84\\uC2A4\\uCFE8\" }),\n              /* @__PURE__ */ jsxs(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: [\n                \"\\uB300\\uD45C\\uC790 : OOO | \\uAC1C\\uC778\\uC815\\uBCF4\\uCC45\\uC784\\uAD00\\uB9AC\\uC790 : OOO\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uC0AC\\uC5C5\\uC790\\uBC88\\uD638 : 559-63-00040 | \\uD1B5\\uC2E0\\uD310\\uB9E4\\uC5C5 \\uC2E0\\uACE0\\uBC88\\uD638 : \\uC81C 2019-\\uC11C\\uC6B8\\uAC15\\uB0A8-04995\\uD638\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uC8FC\\uC18C : \\uC11C\\uC6B8\\uD2B9\\uBCC4\\uC2DC \\uAD00\\uC545\\uAD6C \\uC870\\uC6D0\\uB85C 25 109 | \\uC774\\uBA54\\uC77C : help@harbor.school\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                /* @__PURE__ */ jsx(\"a\", { href: \"#\", className: \"underline\", children: \"\\uC774\\uC6A9\\uC57D\\uAD00\" }),\n                \" \",\n                \"|\",\n                \" \",\n                /* @__PURE__ */ jsx(\"a\", { href: \"#\", className: \"underline\", children: \"\\uAC1C\\uC778\\uC815\\uBCF4\\uCC98\\uB9AC\\uBC29\\uCE68\" })\n              ] }),\n              /* @__PURE__ */ jsx(\n                \"p\",\n                {\n                  className: \"mt-4\",\n                  style: { color: colors.textLight, fontSize: \"0.875rem\" },\n                  children: \"\\xA9 2024 Harbor School. All rights reserved.\"\n                }\n              )\n            ]\n          }\n        )\n      ]\n    }\n  );\n}\n\nexport {\n  Framer101\n};\n","import {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\nimport {\n  __async,\n  __spreadProps,\n  __spreadValues\n} from \"./chunk-JWK35I2R.mjs\";\n\n// src/class/Reviews.tsx\nimport { useState } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar FONTS = {\n  bold: '\"Pretendard Bold\", \"Pretendard Bold Placeholder\", sans-serif',\n  medium: '\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\n  light: '\"Pretendard Light\", \"Pretendard Light Placeholder\", sans-serif'\n};\nvar StarRating = ({\n  rating,\n  size = \"md\"\n}) => {\n  const sizeClasses = {\n    sm: \"w-4 h-4\",\n    md: \"w-5 h-5\",\n    lg: \"w-6 h-6\"\n  };\n  return /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center space-x-1\", children: [1, 2, 3, 4, 5].map((star) => /* @__PURE__ */ jsx(\n    \"svg\",\n    {\n      className: `${sizeClasses[size]} ${star <= rating ? \"text-yellow-400\" : \"text-gray-300\"} fill-current`,\n      viewBox: \"0 0 20 20\",\n      children: /* @__PURE__ */ jsx(\"path\", { d: \"M9.049 2.927c.3-.921 1.603-.921 1.902 0l1.07 3.292a1 1 0 00.95.69h3.462c.969 0 1.371 1.24.588 1.81l-2.8 2.034a1 1 0 00-.364 1.118l1.07 3.292c.3.921-.755 1.688-1.54 1.118l-2.8-2.034a1 1 0 00-1.175 0l-2.8 2.034c-.784.57-1.838-.197-1.539-1.118l1.07-3.292a1 1 0 00-.364-1.118L2.98 8.72c-.783-.57-.38-1.81.588-1.81h3.461a1 1 0 00.951-.69l1.07-3.292z\" })\n    },\n    star\n  )) });\n};\nvar ReviewItem = ({ review }) => {\n  const [isHelpful, setIsHelpful] = useState(false);\n  const [helpfulCount, setHelpfulCount] = useState(review.helpful);\n  const handleHelpful = () => {\n    if (!isHelpful) {\n      setHelpfulCount((prev) => prev + 1);\n      setIsHelpful(true);\n    }\n  };\n  return /* @__PURE__ */ jsx(\"div\", { className: \"bg-white border border-slate-200 rounded-2xl p-6 mb-4 shadow-sm hover:border-slate-300 transition-colors max-md:p-4 max-md:mb-3\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start space-x-4 max-md:space-x-3\", children: [\n    /* @__PURE__ */ jsx(\"div\", { className: \"flex-shrink-0\", children: /* @__PURE__ */ jsx(\n      \"div\",\n      {\n        className: \"w-12 h-12 bg-slate-900 rounded-full flex items-center justify-center text-white text-lg max-md:w-10 max-md:h-10 max-md:text-base\",\n        style: { fontFamily: FONTS.bold },\n        children: review.name.charAt(0)\n      }\n    ) }),\n    /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-w-0\", children: [\n      /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start justify-between mb-2 max-md:flex-col max-md:gap-2\", children: [\n        /* @__PURE__ */ jsxs(\"div\", { className: \"flex-1 min-w-0\", children: [\n          /* @__PURE__ */ jsx(\n            \"h4\",\n            {\n              className: \"text-gray-900 max-md:text-sm\",\n              style: { fontFamily: FONTS.bold },\n              children: review.name\n            }\n          ),\n          /* @__PURE__ */ jsx(\n            \"p\",\n            {\n              className: \"text-sm text-gray-600 max-md:text-xs\",\n              style: { fontFamily: FONTS.light },\n              children: review.role\n            }\n          )\n        ] }),\n        /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap gap-2\", children: [\n          review.verified && /* @__PURE__ */ jsxs(\n            \"span\",\n            {\n              className: \"inline-flex items-center px-2 py-1 rounded-full text-xs bg-slate-100 text-slate-700 max-md:px-2 max-md:py-0.5 max-md:text-xs flex-shrink-0\",\n              style: { fontFamily: FONTS.medium },\n              children: [\n                /* @__PURE__ */ jsx(\n                  \"svg\",\n                  {\n                    className: \"w-3 h-3 mr-1 max-md:w-2 max-md:h-2\",\n                    fill: \"currentColor\",\n                    viewBox: \"0 0 20 20\",\n                    children: /* @__PURE__ */ jsx(\n                      \"path\",\n                      {\n                        fillRule: \"evenodd\",\n                        d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\",\n                        clipRule: \"evenodd\"\n                      }\n                    )\n                  }\n                ),\n                /* @__PURE__ */ jsx(\"span\", { className: \"max-md:hidden\", children: \"\\uC2E4 \\uAD6C\\uB9E4 \\uC778\\uC99D\" }),\n                /* @__PURE__ */ jsx(\"span\", { className: \"md:hidden\", children: \"\\uC778\\uC99D\" })\n              ]\n            }\n          ),\n          review.completionDate && /* @__PURE__ */ jsx(\n            \"span\",\n            {\n              className: \"inline-flex items-center px-2 py-1 rounded-full text-xs bg-slate-100 text-slate-700 max-md:px-2 max-md:py-0.5 max-md:text-xs\",\n              style: { fontFamily: FONTS.medium },\n              children: \"\\uC218\\uAC15 \\uC644\\uB8CC\"\n            }\n          )\n        ] })\n      ] }),\n      /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap items-center gap-x-3 gap-y-2 mb-3 max-md:gap-x-2 max-md:mb-2\", children: [\n        /* @__PURE__ */ jsx(\"div\", { className: \"hidden md:block\", children: /* @__PURE__ */ jsx(StarRating, { rating: review.rating, size: \"md\" }) }),\n        /* @__PURE__ */ jsx(\"div\", { className: \"md:hidden\", children: /* @__PURE__ */ jsx(StarRating, { rating: review.rating, size: \"sm\" }) }),\n        /* @__PURE__ */ jsx(\n          \"span\",\n          {\n            className: \"text-sm text-slate-800 max-md:text-xs\",\n            style: { fontFamily: FONTS.medium },\n            children: review.title\n          }\n        ),\n        /* @__PURE__ */ jsx(\n          \"span\",\n          {\n            className: \"text-sm text-slate-500 max-md:text-xs\",\n            style: { fontFamily: FONTS.light },\n            children: review.date\n          }\n        )\n      ] }),\n      /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap items-center gap-x-3 gap-y-2 text-xs text-slate-500 mb-4 max-md:mb-3\", children: [\n        /* @__PURE__ */ jsxs(\"span\", { style: { fontFamily: FONTS.light }, children: [\n          \"\\uACB0\\uC81C\\uC77C \",\n          review.purchaseDate\n        ] }),\n        review.completionDate && /* @__PURE__ */ jsxs(\"span\", { style: { fontFamily: FONTS.light }, children: [\n          \"\\uC218\\uAC15 \\uC644\\uB8CC \",\n          review.completionDate\n        ] }),\n        /* @__PURE__ */ jsxs(\"span\", { style: { fontFamily: FONTS.light }, children: [\n          \"\\uACFC\\uC815 \",\n          review.course\n        ] }),\n        /* @__PURE__ */ jsxs(\"span\", { style: { fontFamily: FONTS.light }, children: [\n          \"\\uC778\\uC99D \\uCF54\\uB4DC \",\n          review.verificationCode\n        ] })\n      ] }),\n      /* @__PURE__ */ jsx(\n        \"p\",\n        {\n          className: \"text-gray-700 leading-relaxed mb-4 max-md:text-sm max-md:leading-normal max-md:mb-3\",\n          style: { fontFamily: FONTS.light },\n          children: review.content\n        }\n      ),\n      /* @__PURE__ */ jsx(\"div\", { className: \"flex items-center space-x-4 text-sm max-md:space-x-2\", children: /* @__PURE__ */ jsxs(\n        \"button\",\n        {\n          onClick: handleHelpful,\n          className: `flex items-center space-x-1 px-3 py-1 rounded-full transition-colors max-md:px-2 max-md:py-1 max-md:text-xs ${isHelpful ? \"bg-slate-900 text-white\" : \"bg-slate-100 text-slate-700 hover:bg-slate-200\"}`,\n          style: { fontFamily: FONTS.medium },\n          children: [\n            /* @__PURE__ */ jsx(\n              \"svg\",\n              {\n                className: \"w-4 h-4 max-md:w-3 max-md:h-3\",\n                fill: \"none\",\n                stroke: \"currentColor\",\n                viewBox: \"0 0 24 24\",\n                children: /* @__PURE__ */ jsx(\n                  \"path\",\n                  {\n                    strokeLinecap: \"round\",\n                    strokeLinejoin: \"round\",\n                    strokeWidth: 2,\n                    d: \"M14 10h4.764a2 2 0 011.789 2.894l-3.5 7A2 2 0 0115.263 21h-4.017c-.163 0-.326-.02-.485-.06L7 20m7-10V5a2 2 0 00-2-2h-.095c-.5 0-.905.405-.905.905 0 .714-.211 1.412-.608 2.006L9 6m-5 4v10m5-10H4a2 2 0 00-2 2v8a2 2 0 002 2h5z\"\n                  }\n                )\n              }\n            ),\n            /* @__PURE__ */ jsxs(\"span\", { children: [\n              \"\\uB3C4\\uC6C0\\uB428 \",\n              helpfulCount\n            ] })\n          ]\n        }\n      ) })\n    ] })\n  ] }) });\n};\nvar ReviewStats = ({ reviews }) => {\n  const averageRating = reviews.reduce((sum, review) => sum + review.rating, 0) / reviews.length;\n  const ratingDistribution = [5, 4, 3, 2, 1].map((rating) => ({\n    rating,\n    count: reviews.filter((r) => r.rating === rating).length,\n    percentage: reviews.filter((r) => r.rating === rating).length / reviews.length * 100\n  }));\n  const verifiedCount = reviews.filter((review) => review.verified).length;\n  return /* @__PURE__ */ jsxs(\"div\", { className: \"bg-white border border-slate-200 rounded-2xl p-6 mb-8 max-md:p-4 max-md:mb-6\", children: [\n    /* @__PURE__ */ jsx(\n      \"h3\",\n      {\n        className: \"text-xl mb-4 max-md:text-lg max-md:mb-3\",\n        style: { fontFamily: FONTS.bold },\n        children: \"\\uC218\\uAC15\\uC0DD \\uB9AC\\uBDF0 \\uD1B5\\uACC4\"\n      }\n    ),\n    /* @__PURE__ */ jsxs(\"div\", { className: \"grid grid-cols-1 md:grid-cols-2 gap-8 max-md:gap-6\", children: [\n      /* @__PURE__ */ jsx(\"div\", { children: /* @__PURE__ */ jsxs(\"div\", { className: \"text-center mb-4 max-md:mb-3\", children: [\n        /* @__PURE__ */ jsx(\n          \"div\",\n          {\n            className: \"text-4xl text-gray-900 max-md:text-3xl\",\n            style: { fontFamily: FONTS.bold },\n            children: averageRating.toFixed(1)\n          }\n        ),\n        /* @__PURE__ */ jsx(\"div\", { className: \"hidden md:block\", children: /* @__PURE__ */ jsx(StarRating, { rating: Math.round(averageRating), size: \"lg\" }) }),\n        /* @__PURE__ */ jsx(\"div\", { className: \"md:hidden\", children: /* @__PURE__ */ jsx(StarRating, { rating: Math.round(averageRating), size: \"md\" }) }),\n        /* @__PURE__ */ jsxs(\n          \"p\",\n          {\n            className: \"text-gray-600 mt-2 max-md:text-sm max-md:mt-1\",\n            style: { fontFamily: FONTS.light },\n            children: [\n              \"\\uCD1D \",\n              reviews.length,\n              \"\\uAC1C\\uC758 \\uB9AC\\uBDF0\"\n            ]\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"div\", { className: \"mt-3 flex flex-wrap items-center justify-center gap-2 text-xs text-slate-600\", children: [\n          /* @__PURE__ */ jsxs(\n            \"span\",\n            {\n              className: \"inline-flex items-center rounded-full bg-slate-100 px-2.5 py-1 text-slate-700\",\n              style: { fontFamily: FONTS.medium },\n              children: [\n                \"\\uC2E4 \\uAD6C\\uB9E4 \\uC778\\uC99D \",\n                verifiedCount,\n                \"\\uBA85\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\n            \"span\",\n            {\n              className: \"inline-flex items-center rounded-full bg-slate-100 px-2.5 py-1 text-slate-700\",\n              style: { fontFamily: FONTS.medium },\n              children: [\n                \"\\uCD5C\\uADFC 90\\uC77C \\uB9AC\\uBDF0 \",\n                reviews.filter((r) => r.date >= \"2024.09.01\").length,\n                \"\\uAC1C\"\n              ]\n            }\n          )\n        ] })\n      ] }) }),\n      /* @__PURE__ */ jsx(\"div\", { children: /* @__PURE__ */ jsx(\"div\", { className: \"space-y-2 max-md:space-y-1\", children: ratingDistribution.map(({ rating, count, percentage }) => /* @__PURE__ */ jsxs(\n        \"div\",\n        {\n          className: \"flex items-center space-x-2 max-md:space-x-1\",\n          children: [\n            /* @__PURE__ */ jsxs(\n              \"span\",\n              {\n                className: \"text-sm text-gray-600 w-8 max-md:text-xs max-md:w-6\",\n                style: { fontFamily: FONTS.light },\n                children: [\n                  rating,\n                  \"\\uC810\"\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsx(\"div\", { className: \"flex-1 bg-slate-200 rounded-full h-2 max-md:h-1.5\", children: /* @__PURE__ */ jsx(\n              \"div\",\n              {\n                className: \"bg-slate-900 h-2 rounded-full transition-all duration-500 max-md:h-1.5\",\n                style: { width: `${percentage}%` }\n              }\n            ) }),\n            /* @__PURE__ */ jsx(\n              \"span\",\n              {\n                className: \"text-sm text-gray-600 w-8 max-md:text-xs max-md:w-6\",\n                style: { fontFamily: FONTS.light },\n                children: count\n              }\n            )\n          ]\n        },\n        rating\n      )) }) })\n    ] })\n  ] });\n};\nvar Reviews = () => {\n  const [store] = useGlobalStore();\n  const { supabase } = store;\n  const [sortBy, setSortBy] = useState(\n    \"latest\"\n  );\n  const [filterRating, setFilterRating] = useState(null);\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [submitError, setSubmitError] = useState(\"\");\n  const [submitSuccess, setSubmitSuccess] = useState(\"\");\n  const [formData, setFormData] = useState({\n    email: \"\",\n    star: \"\",\n    review: \"\"\n  });\n  const handleFormChange = (e) => {\n    const { name, value } = e.target;\n    setFormData((prev) => __spreadProps(__spreadValues({}, prev), { [name]: value }));\n    if (submitError) setSubmitError(\"\");\n  };\n  const handleOpenModal = () => {\n    setIsModalOpen(true);\n    setSubmitError(\"\");\n    setSubmitSuccess(\"\");\n  };\n  const handleCloseModal = () => {\n    setIsModalOpen(false);\n    setSubmitError(\"\");\n    setSubmitSuccess(\"\");\n  };\n  const handleSubmitReview = (e) => __async(null, null, function* () {\n    e.preventDefault();\n    if (!formData.email.trim() || !formData.star.trim() || !formData.review.trim()) {\n      setSubmitError(\"\\uC774\\uBA54\\uC77C, \\uBCC4\\uC810, \\uB9AC\\uBDF0 \\uB0B4\\uC6A9\\uC744 \\uBAA8\\uB450 \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\");\n      return;\n    }\n    const parsedStar = Number(formData.star);\n    if (Number.isNaN(parsedStar) || parsedStar < 1 || parsedStar > 5) {\n      setSubmitError(\"\\uBCC4\\uC810\\uC740 1\\uC5D0\\uC11C 5 \\uC0AC\\uC774 \\uC22B\\uC790\\uB97C \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\");\n      return;\n    }\n    if (!supabase) {\n      setSubmitError(\"\\uB370\\uC774\\uD130\\uBCA0\\uC774\\uC2A4 \\uC5F0\\uACB0\\uC5D0 \\uBB38\\uC81C\\uAC00 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uC7A0\\uC2DC \\uD6C4 \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD574\\uC8FC\\uC138\\uC694.\");\n      return;\n    }\n    setIsSubmitting(true);\n    setSubmitError(\"\");\n    try {\n      const { error } = yield supabase.from(\"reviews\").insert({\n        email: formData.email,\n        star: formData.star,\n        review: formData.review\n      });\n      if (error) {\n        console.error(\"Review submit error:\", error);\n        setSubmitError(\"\\uB9AC\\uBDF0 \\uB4F1\\uB85D \\uC911 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD574\\uC8FC\\uC138\\uC694.\");\n        return;\n      }\n      setSubmitSuccess(\"\\uB9AC\\uBDF0\\uAC00 \\uB4F1\\uB85D\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uC18C\\uC911\\uD55C \\uC758\\uACAC \\uAC10\\uC0AC\\uD569\\uB2C8\\uB2E4!\");\n      setFormData({ email: \"\", star: \"\", review: \"\" });\n    } catch (err) {\n      console.error(\"Review submit error:\", err);\n      setSubmitError(\"\\uB9AC\\uBDF0 \\uB4F1\\uB85D \\uC911 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD574\\uC8FC\\uC138\\uC694.\");\n    } finally {\n      setIsSubmitting(false);\n    }\n  });\n  const reviewsData = [\n    {\n      id: 1,\n      name: \"\\uC548\\uC6B0\\uC900\",\n      role: \"AI Artist, TA\",\n      title: \"\\uC2E4\\uBB34\\uC5D0 \\uBC14\\uB85C \\uC4F0\\uB294 \\uC6CC\\uD06C\\uD50C\\uB85C\\uC6B0\\uAC00 \\uD0C4\\uD0C4\\uD574\\uC694\",\n      rating: 5,\n      date: \"2024.11.15\",\n      purchaseDate: \"2024.09.18\",\n      completionDate: \"2024.10.06\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-1042\",\n      content: \"\\uC774 \\uAC15\\uC758\\uB97C \\uB4E4\\uC5B4\\uC11C \\uCDE8\\uC5C5\\uD55C \\uB9CC\\uD07C \\uC544\\uC8FC \\uC88B\\uC740 \\uAC15\\uC758\\uB77C\\uACE0 \\uC0DD\\uAC01\\uB429\\uB2C8\\uB2E4. \\uAD11\\uACE0\\uCABD\\uC740 \\uC774 \\uAC15\\uC758\\uB97C \\uB4E4\\uC73C\\uBA74 AI\\uB85C \\uD560 \\uC218 \\uC788\\uB294 \\uB300\\uBD80\\uBD84\\uC744 \\uC751\\uC6A9\\uD560 \\uC218 \\uC788\\uB2E4\\uACE0 \\uC0DD\\uAC01\\uB429\\uB2C8\\uB2E4. \\uC2E4\\uBB34\\uC5D0\\uC11C \\uBC14\\uB85C \\uC368\\uBA39\\uC744 \\uC218 \\uC788\\uB294 \\uC6CC\\uD06C\\uD50C\\uB85C\\uC6B0\\uB4E4\\uC774 \\uC815\\uB9D0 \\uC720\\uC6A9\\uD588\\uC5B4\\uC694. \\uD2B9\\uD788 ComfyUI\\uC758 \\uBCF5\\uC7A1\\uD55C \\uB178\\uB4DC \\uC2DC\\uC2A4\\uD15C\\uC744 \\uC774\\uD574\\uD558\\uAE30 \\uC27D\\uAC8C \\uC124\\uBA85\\uD574\\uC8FC\\uC154\\uC11C \\uAC10\\uC0AC\\uD588\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 45,\n      verified: true\n    },\n    {\n      id: 2,\n      name: \"\\uC218\\uAC15\\uC0DD K\",\n      role: \"\\uB9C8\\uCF00\\uD130\",\n      title: \"\\uC2E4\\uC81C \\uCEA0\\uD398\\uC778 \\uC0AC\\uB840\\uAC00 \\uB9CE\\uC544\\uC11C \\uC88B\\uC558\\uC2B5\\uB2C8\\uB2E4\",\n      rating: 5,\n      date: \"2024.11.10\",\n      purchaseDate: \"2024.09.22\",\n      completionDate: \"2024.10.12\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-1184\",\n      content: \"\\uC88B\\uC558\\uB358 \\uC810\\uC740 \\uAC15\\uC758\\uC5D0\\uC11C \\uC2DC\\uC5F0\\uC73C\\uB85C \\uBCF4\\uC5EC\\uC8FC\\uC2DC\\uB294 \\uBAA8\\uB4E0 \\uC6CC\\uD06C\\uD50C\\uB85C\\uC6B0\\uB97C \\uC0C1\\uC138\\uD788 \\uB2E4\\uB904\\uC8FC\\uC2E0 \\uD6C4 \\uC804\\uBD80 \\uACF5\\uC720\\uB97C \\uD574\\uC8FC\\uC2E0\\uB2E4\\uB294 \\uC810\\uC774\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uB2E8\\uC21C\\uD788 \\uB178\\uB4DC\\uB4E4\\uC758 \\uAE30\\uB2A5\\uC744 \\uB098\\uC5F4\\uD558\\uB294 \\uAC83\\uC774 \\uC544\\uB2C8\\uB77C, \\uC2E4\\uC81C \\uB9C8\\uCF00\\uD305\\uC5D0 \\uC5B4\\uB5BB\\uAC8C \\uD65C\\uC6A9\\uD560 \\uC218 \\uC788\\uB294\\uC9C0, \\uC2DC\\uAC04 \\uD6A8\\uC728\\uC131\\uC740 \\uC5B4\\uB5BB\\uAC8C \\uB192\\uC77C \\uC218 \\uC788\\uB294\\uC9C0 \\uB4F1 \\uC2E4\\uBB34\\uC790\\uC758 \\uAD00\\uC810\\uC5D0\\uC11C \\uD544\\uC694\\uD55C \\uB0B4\\uC6A9\\uC744 \\uC0C1\\uC138\\uD558\\uAC8C \\uC54C\\uB824\\uC8FC\\uC168\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 38,\n      verified: true\n    },\n    {\n      id: 3,\n      name: \"\\uAE40\\uB2E4\\uC560\",\n      role: \"\\uC758\\uB958\\uBE0C\\uB79C\\uB4DC \\uC885\\uC0AC\\uC790\",\n      title: \"\\uD575\\uC2EC\\uB9CC \\uC815\\uB9AC\\uB418\\uC5B4 \\uC788\\uC5B4 \\uBC18\\uBCF5 \\uC2DC\\uCCAD\\uD558\\uAE30 \\uC88B\\uC544\\uC694\",\n      rating: 5,\n      date: \"2024.11.08\",\n      purchaseDate: \"2024.09.15\",\n      completionDate: \"2024.10.04\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0998\",\n      content: \"\\uC2E4\\uBB34\\uC6A9\\uC73C\\uB85C \\uC88B\\uC558\\uB358 \\uAC15\\uC758\\uAC19\\uC544\\uC694. \\uB2E4\\uB978\\uBD84\\uB4E4 \\uAC15\\uC758\\uB294 \\uC774\\uB860\\uC124\\uBA85\\uBD80\\uD130 \\uAE4A\\uC774\\uC788\\uB294 \\uC124\\uBA85\\uC744 \\uCD94\\uAD6C\\uD558\\uC2DC\\uB294 \\uBD84\\uB4E4\\uC774 \\uB9CE\\uC558\\uB294\\uB370, \\uB108\\uBB34 \\uBD80\\uC218\\uC801\\uC778 \\uC124\\uBA85\\uC740 \\uC880 \\uC5B4\\uB835\\uAC70\\uB4E0\\uC694 \\u314E\\u314E \\uD544\\uC694\\uD55C\\uAC83\\uB9CC \\uB531\\uB531 \\uB4E3\\uAE30 \\uB108\\uBB34\\uC88B\\uC740\\uB290\\uB08C. \\uBE0C\\uB79C\\uB4DC \\uC774\\uBBF8\\uC9C0 \\uC81C\\uC791\\uC5D0 \\uBC14\\uB85C \\uD65C\\uC6A9\\uD560 \\uC218 \\uC788\\uC5B4\\uC11C \\uC5C5\\uBB34 \\uD6A8\\uC728\\uC774 \\uD06C\\uAC8C \\uD5A5\\uC0C1\\uB410\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 42,\n      verified: true\n    },\n    {\n      id: 4,\n      name: \"\\uC218\\uAC15\\uC0DD J\",\n      role: \"\\uB9C8\\uCF00\\uD130\",\n      title: \"\\uAD11\\uACE0 \\uC2E4\\uBB34\\uC5D0 \\uD544\\uC694\\uD55C \\uD750\\uB984\\uC774 \\uC798 \\uC7A1\\uD600\\uC788\\uC5B4\\uC694\",\n      rating: 5,\n      date: \"2024.11.05\",\n      purchaseDate: \"2024.09.12\",\n      completionDate: \"2024.10.01\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0931\",\n      content: \"\\uB8E8\\uC6C0\\uB2D8\\uC758 ComfyUI \\uAC15\\uC758\\uB294 \\uB9C8\\uCF00\\uD305 \\uC2E4\\uBB34\\uC790\\uC5D0\\uAC8C \\uD544\\uC218\\uC801\\uC778 AI \\uC774\\uBBF8\\uC9C0 \\uC0DD\\uC131 \\uAE30\\uC220\\uC744 \\uCCB4\\uACC4\\uC801\\uC73C\\uB85C \\uC804\\uB2EC\\uD558\\uB294 \\uAC15\\uC758\\uC778 \\uAC83 \\uAC19\\uC2B5\\uB2C8\\uB2E4. \\uC2E4\\uBB34\\uC5D0\\uC11C \\uC989\\uC2DC \\uD65C\\uC6A9\\uD560 \\uC218 \\uC788\\uB294 \\uC6CC\\uD06C\\uD50C\\uB85C\\uC6B0 \\uAE30\\uBC18\\uC73C\\uB85C \\uC54C\\uB824\\uC8FC\\uC154\\uC11C \\uB354\\uC6B1 \\uCC3D\\uC758\\uC801\\uC774\\uACE0 \\uD6A8\\uC728\\uC801\\uC778 \\uB9C8\\uCF00\\uD305 \\uC774\\uBBF8\\uC9C0 \\uC81C\\uC791\\uC774 \\uAC00\\uB2A5\\uD574\\uC84C\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 33,\n      verified: true\n    },\n    {\n      id: 5,\n      name: \"\\uC774\\uC131\\uBBFC\",\n      role: \"\\uD504\\uB9AC\\uB79C\\uC11C \\uB514\\uC790\\uC774\\uB108\",\n      title: \"ControlNet \\uD30C\\uD2B8\\uAC00 \\uD2B9\\uD788 \\uC720\\uC6A9\\uD588\\uC2B5\\uB2C8\\uB2E4\",\n      rating: 5,\n      date: \"2024.11.02\",\n      purchaseDate: \"2024.09.03\",\n      completionDate: \"2024.09.26\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0850\",\n      content: \"ComfyUI \\uCC98\\uC74C \\uC811\\uD588\\uB294\\uB370 \\uC815\\uB9D0 \\uC5B4\\uB824\\uC6E0\\uC5B4\\uC694. \\uD558\\uC9C0\\uB9CC \\uAC15\\uC758\\uB97C \\uCC28\\uADFC\\uCC28\\uADFC \\uB530\\uB77C\\uD558\\uB2C8\\uAE4C \\uC774\\uD574\\uAC00 \\uB410\\uC2B5\\uB2C8\\uB2E4. \\uD2B9\\uD788 ControlNet \\uBD80\\uBD84\\uC774 \\uC2E0\\uAE30\\uD588\\uC5B4\\uC694. \\uD074\\uB77C\\uC774\\uC5B8\\uD2B8 \\uC694\\uAD6C\\uC0AC\\uD56D\\uC5D0 \\uB9DE\\uCDB0 \\uC815\\uD655\\uD55C \\uC774\\uBBF8\\uC9C0\\uB97C \\uC0DD\\uC131\\uD560 \\uC218 \\uC788\\uAC8C \\uB418\\uC5B4\\uC11C \\uC791\\uC5C5 \\uC2DC\\uAC04\\uC774 \\uC808\\uBC18\\uC73C\\uB85C \\uC904\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uC815\\uB9D0 \\uAC10\\uC0AC\\uD569\\uB2C8\\uB2E4!\",\n      helpful: 29,\n      verified: true\n    },\n    {\n      id: 6,\n      name: \"\\uBC15\\uC9C0\\uD6C8\",\n      role: \"\\uAD11\\uACE0 \\uB300\\uD589\\uC0AC \\uD06C\\uB9AC\\uC5D0\\uC774\\uD130\",\n      title: \"\\uCD08\\uBCF4\\uC790\\uC5D0\\uAC8C\\uB294 \\uB09C\\uC774\\uB3C4\\uAC00 \\uC788\\uC5B4\\uC694\",\n      rating: 4,\n      date: \"2024.10.28\",\n      purchaseDate: \"2024.09.02\",\n      completionDate: \"2024.09.24\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0834\",\n      content: \"\\uAC15\\uC758 \\uB0B4\\uC6A9\\uC740 \\uC815\\uB9D0 \\uC88B\\uC558\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uB9CC \\uCD08\\uBCF4\\uC790\\uC5D0\\uAC8C\\uB294 \\uC870\\uAE08 \\uC5B4\\uB824\\uC6B8 \\uC218 \\uC788\\uC744 \\uAC83 \\uAC19\\uC544\\uC694. \\uADF8\\uB798\\uB3C4 \\uBC18\\uBCF5\\uD574\\uC11C \\uB4E4\\uC73C\\uBA74 \\uCDA9\\uBD84\\uD788 \\uC774\\uD574\\uD560 \\uC218 \\uC788\\uACE0, \\uC2E4\\uC81C \\uAD11\\uACE0 \\uC81C\\uC791\\uC5D0 \\uD65C\\uC6A9\\uD560 \\uC218 \\uC788\\uB294 \\uACE0\\uAE09 \\uAE30\\uBC95\\uB4E4\\uC744 \\uBC30\\uC6B8 \\uC218 \\uC788\\uC5B4\\uC11C \\uB9CC\\uC871\\uD569\\uB2C8\\uB2E4. \\uC6CC\\uD06C\\uD50C\\uB85C\\uC6B0 \\uD30C\\uC77C \\uC81C\\uACF5\\uB3C4 \\uD070 \\uB3C4\\uC6C0\\uC774 \\uB410\\uC5B4\\uC694.\",\n      helpful: 25,\n      verified: true\n    },\n    {\n      id: 7,\n      name: \"\\uCD5C\\uC5F0\\uD76C\",\n      role: \"\\uC2A4\\uD0C0\\uD2B8\\uC5C5 \\uB9C8\\uCF00\\uD305 \\uD300\\uC7A5\",\n      title: \"Inpainting \\uD65C\\uC6A9\\uBC95\\uC774 \\uC2E4\\uBB34\\uC5D0 \\uB531\\uC774\\uC5D0\\uC694\",\n      rating: 5,\n      date: \"2024.10.25\",\n      purchaseDate: \"2024.09.01\",\n      completionDate: \"2024.09.20\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0820\",\n      content: \"\\uC2A4\\uD0C0\\uD2B8\\uC5C5\\uC5D0\\uC11C \\uC608\\uC0B0\\uC774 \\uBD80\\uC871\\uD574\\uC11C \\uD56D\\uC0C1 \\uC774\\uBBF8\\uC9C0 \\uC18C\\uC2A4 \\uAD6C\\uD558\\uAE30\\uAC00 \\uC5B4\\uB824\\uC6E0\\uB294\\uB370, \\uC774 \\uAC15\\uC758 \\uB355\\uBD84\\uC5D0 \\uC6B0\\uB9AC\\uB9CC\\uC758 \\uBE0C\\uB79C\\uB4DC \\uC774\\uBBF8\\uC9C0\\uB97C \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uAC8C \\uB410\\uC5B4\\uC694. \\uD2B9\\uD788 Inpainting \\uAE30\\uB2A5\\uC73C\\uB85C \\uAE30\\uC874 \\uC774\\uBBF8\\uC9C0\\uB97C \\uC6B0\\uB9AC \\uBE0C\\uB79C\\uB4DC\\uC5D0 \\uB9DE\\uAC8C \\uC218\\uC815\\uD558\\uB294 \\uBC29\\uBC95\\uC774 \\uC815\\uB9D0 \\uC720\\uC6A9\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uD300\\uC6D0\\uB4E4\\uB3C4 \\uBAA8\\uB450 \\uB9CC\\uC871\\uD574\\uD569\\uB2C8\\uB2E4!\",\n      helpful: 36,\n      verified: true\n    },\n    {\n      id: 8,\n      name: \"\\uAE40\\uD0DC\\uD604\",\n      role: \"\\uAC8C\\uC784 \\uD68C\\uC0AC \\uC544\\uD2F0\\uC2A4\\uD2B8\",\n      title: \"\\uC2A4\\uD0C0\\uC77C \\uC804\\uC774 \\uD30C\\uD2B8\\uAC00 \\uC778\\uC0C1\\uC801\\uC774\\uC5C8\\uC5B4\\uC694\",\n      rating: 5,\n      date: \"2024.10.22\",\n      purchaseDate: \"2024.08.28\",\n      completionDate: \"2024.09.18\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0795\",\n      content: \"\\uAC8C\\uC784 \\uC5C5\\uACC4\\uC5D0\\uC11C \\uCEE8\\uC149 \\uC544\\uD2B8 \\uC791\\uC5C5\\uC744 \\uD558\\uACE0 \\uC788\\uB294\\uB370, ComfyUI\\uB97C \\uD1B5\\uD574 \\uC544\\uC774\\uB514\\uC5B4\\uB97C \\uBE60\\uB974\\uAC8C \\uC2DC\\uAC01\\uD654\\uD560 \\uC218 \\uC788\\uAC8C \\uB410\\uC5B4\\uC694. \\uD2B9\\uD788 IP-Adapter\\uB97C \\uD65C\\uC6A9\\uD55C \\uC2A4\\uD0C0\\uC77C \\uC804\\uC774 \\uAE30\\uBC95\\uC774 \\uC815\\uB9D0 \\uC778\\uC0C1\\uC801\\uC774\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uAE30\\uC874 \\uCEE8\\uC149 \\uC544\\uD2B8 \\uC81C\\uC791 \\uC2DC\\uAC04\\uC774 70% \\uC774\\uC0C1 \\uB2E8\\uCD95\\uB410\\uC5B4\\uC694.\",\n      helpful: 31,\n      verified: true\n    },\n    {\n      id: 9,\n      name: \"\\uC815\\uC218\\uC5F0\",\n      role: \"\\uCF58\\uD150\\uCE20 \\uD06C\\uB9AC\\uC5D0\\uC774\\uD130\",\n      title: \"\\uACB0\\uACFC\\uBB3C\\uC740 \\uB9CC\\uC871, \\uB80C\\uB354 \\uC2DC\\uAC04\\uC740 \\uC544\\uC26C\\uC6C0\",\n      rating: 4,\n      date: \"2024.10.18\",\n      purchaseDate: \"2024.08.22\",\n      completionDate: \"2024.09.14\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0731\",\n      content: \"\\uC720\\uD29C\\uBE0C \\uC378\\uB124\\uC77C\\uC774\\uB098 \\uC778\\uC2A4\\uD0C0\\uADF8\\uB7A8 \\uD3EC\\uC2A4\\uD305\\uC6A9 \\uC774\\uBBF8\\uC9C0 \\uB9CC\\uB4E4 \\uB54C \\uD56D\\uC0C1 \\uACE0\\uBBFC\\uC774 \\uB9CE\\uC558\\uB294\\uB370, \\uC774\\uC81C \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC5B4\\uC11C \\uB108\\uBB34 \\uC88B\\uC544\\uC694. \\uAC15\\uC758\\uAC00 \\uB2E8\\uACC4\\uBCC4\\uB85C \\uC798 \\uAD6C\\uC131\\uB418\\uC5B4 \\uC788\\uC5B4\\uC11C \\uB530\\uB77C\\uD558\\uAE30 \\uC26C\\uC6E0\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uB9CC \\uB80C\\uB354\\uB9C1 \\uC2DC\\uAC04\\uC774 \\uC880 \\uC624\\uB798 \\uAC78\\uB9AC\\uB294 \\uAC8C \\uC544\\uC26C\\uC6CC\\uC694. \\uADF8\\uB798\\uB3C4 \\uACB0\\uACFC\\uBB3C\\uC740 \\uC815\\uB9D0 \\uB9CC\\uC871\\uC2A4\\uB7FD\\uC2B5\\uB2C8\\uB2E4!\",\n      helpful: 22,\n      verified: true\n    },\n    {\n      id: 10,\n      name: \"\\uC624\\uC131\\uC9C4\",\n      role: \"\\uC6F9 \\uAC1C\\uBC1C\\uC790\",\n      title: \"Upscaling \\uC6CC\\uD06C\\uD50C\\uB85C\\uC6B0\\uAC00 \\uD2B9\\uD788 \\uC88B\\uC558\\uC2B5\\uB2C8\\uB2E4\",\n      rating: 5,\n      date: \"2024.10.15\",\n      purchaseDate: \"2024.08.20\",\n      completionDate: \"2024.09.10\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0714\",\n      content: \"\\uAC1C\\uBC1C\\uC790\\uC778\\uB370 \\uB514\\uC790\\uC778 \\uAC10\\uAC01\\uC774 \\uBD80\\uC871\\uD574\\uC11C \\uD56D\\uC0C1 \\uACE0\\uBBFC\\uC774\\uC5C8\\uC5B4\\uC694. \\uC774 \\uAC15\\uC758\\uB97C \\uD1B5\\uD574 \\uC6F9\\uC0AC\\uC774\\uD2B8\\uB098 \\uC571\\uC5D0 \\uB4E4\\uC5B4\\uAC08 \\uC774\\uBBF8\\uC9C0\\uB4E4\\uC744 \\uC9C1\\uC811 \\uC0DD\\uC131\\uD560 \\uC218 \\uC788\\uAC8C \\uB410\\uC2B5\\uB2C8\\uB2E4. \\uD2B9\\uD788 Upscaling \\uAE30\\uBC95\\uC73C\\uB85C \\uACE0\\uD574\\uC0C1\\uB3C4 \\uC774\\uBBF8\\uC9C0\\uB97C \\uB9CC\\uB4DC\\uB294 \\uBC29\\uBC95\\uC774 \\uC815\\uB9D0 \\uC720\\uC6A9\\uD588\\uC5B4\\uC694. \\uD074\\uB77C\\uC774\\uC5B8\\uD2B8 \\uD504\\uB85C\\uC81D\\uD2B8\\uC5D0 \\uBC14\\uB85C \\uC801\\uC6A9\\uD558\\uACE0 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 28,\n      verified: true\n    },\n    {\n      id: 11,\n      name: \"\\uC774\\uBBF8\\uACBD\",\n      role: \"\\uC628\\uB77C\\uC778 \\uC1FC\\uD551\\uBAB0 \\uC6B4\\uC601\\uC790\",\n      title: \"\\uC0C1\\uD488 \\uCEF7 \\uC81C\\uC791\\uC774 \\uBE68\\uB77C\\uC84C\\uC5B4\\uC694\",\n      rating: 5,\n      date: \"2024.10.12\",\n      purchaseDate: \"2024.08.18\",\n      completionDate: \"2024.09.06\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0698\",\n      content: \"\\uC1FC\\uD551\\uBAB0 \\uC0C1\\uD488 \\uC774\\uBBF8\\uC9C0 \\uC81C\\uC791\\uC5D0 \\uACE0\\uBBFC\\uC774 \\uB9CE\\uC558\\uB294\\uB370, \\uC774 \\uAC15\\uC758\\uB97C \\uB4E3\\uACE0 \\uB098\\uC11C \\uC9C1\\uC811 \\uC81C\\uC791\\uD560 \\uC218 \\uC788\\uAC8C \\uB410\\uC5B4\\uC694. \\uD2B9\\uD788 \\uC0C1\\uD488\\uC744 \\uB2E4\\uC591\\uD55C \\uBC30\\uACBD\\uC5D0 \\uD569\\uC131\\uD558\\uB294 \\uAE30\\uBC95\\uC774 \\uC815\\uB9D0 \\uB3C4\\uC6C0\\uC774 \\uB410\\uC2B5\\uB2C8\\uB2E4. \\uC774\\uC81C \\uCD2C\\uC601 \\uBE44\\uC6A9 \\uAC71\\uC815 \\uC5C6\\uC774 \\uB2E4\\uC591\\uD55C \\uC0C1\\uD488 \\uC774\\uBBF8\\uC9C0\\uB97C \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC5B4\\uC11C \\uB9E4\\uCD9C\\uB3C4 \\uB298\\uC5C8\\uC5B4\\uC694!\",\n      helpful: 34,\n      verified: true\n    },\n    {\n      id: 12,\n      name: \"\\uD55C\\uBBFC\\uC218\",\n      role: \"\\uAD11\\uACE0 \\uAE30\\uD68D\\uC790\",\n      title: \"\\uAE30\\uD68D \\uB2E8\\uACC4\\uC5D0\\uC11C \\uC774\\uBBF8\\uC9C0 \\uC18C\\uD1B5\\uC774 \\uC26C\\uC6CC\\uC84C\\uC5B4\\uC694\",\n      rating: 4,\n      date: \"2024.10.08\",\n      purchaseDate: \"2024.08.15\",\n      completionDate: \"2024.09.02\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0652\",\n      content: \"\\uAD11\\uACE0 \\uAE30\\uD68D \\uB2E8\\uACC4\\uC5D0\\uC11C \\uC544\\uC774\\uB514\\uC5B4\\uB97C \\uAD6C\\uCCB4\\uD654\\uD558\\uB294 \\uB370 \\uC815\\uB9D0 \\uB3C4\\uC6C0\\uC774 \\uB410\\uC2B5\\uB2C8\\uB2E4. \\uD074\\uB77C\\uC774\\uC5B8\\uD2B8\\uC5D0\\uAC8C \\uC81C\\uC548\\uD560 \\uB54C \\uD14D\\uC2A4\\uD2B8\\uB85C\\uB9CC \\uC124\\uBA85\\uD558\\uB358 \\uAC83\\uC744 \\uC774\\uC81C \\uC774\\uBBF8\\uC9C0\\uB85C \\uBCF4\\uC5EC\\uC904 \\uC218 \\uC788\\uC5B4\\uC11C \\uC18C\\uD1B5\\uC774 \\uD6E8\\uC52C \\uC6D0\\uD65C\\uD574\\uC84C\\uC5B4\\uC694. \\uAC15\\uC758 \\uB0B4\\uC6A9\\uB3C4 \\uCCB4\\uACC4\\uC801\\uC774\\uACE0 \\uC2E4\\uC2B5 \\uC704\\uC8FC\\uB77C\\uC11C \\uC88B\\uC558\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 26,\n      verified: true\n    },\n    {\n      id: 13,\n      name: \"\\uC724\\uC11C\\uC601\",\n      role: \"UI/UX \\uB514\\uC790\\uC774\\uB108\",\n      title: \"\\uB514\\uC790\\uC778 \\uC2DC\\uC2A4\\uD15C\\uC5D0 \\uC801\\uC6A9\\uD558\\uAE30 \\uC88B\\uC558\\uC5B4\\uC694\",\n      rating: 5,\n      date: \"2024.10.05\",\n      purchaseDate: \"2024.08.10\",\n      completionDate: \"2024.08.30\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0617\",\n      content: \"UI \\uB514\\uC790\\uC778\\uD560 \\uB54C \\uD544\\uC694\\uD55C \\uC544\\uC774\\uCF58\\uC774\\uB098 \\uC77C\\uB7EC\\uC2A4\\uD2B8\\uB97C \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uAC8C \\uB410\\uC5B4\\uC694. \\uD2B9\\uD788 \\uC77C\\uAD00\\uB41C \\uC2A4\\uD0C0\\uC77C\\uC744 \\uC720\\uC9C0\\uD558\\uBA74\\uC11C \\uB2E4\\uC591\\uD55C \\uBCC0\\uD615\\uC744 \\uB9CC\\uB4DC\\uB294 \\uBC29\\uBC95\\uC774 \\uC815\\uB9D0 \\uC778\\uC0C1\\uC801\\uC774\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uB514\\uC790\\uC778 \\uC2DC\\uC2A4\\uD15C \\uAD6C\\uCD95\\uC5D0\\uB3C4 \\uD070 \\uB3C4\\uC6C0\\uC774 \\uB410\\uACE0, \\uC791\\uC5C5 \\uD6A8\\uC728\\uC131\\uC774 \\uB9CE\\uC774 \\uD5A5\\uC0C1\\uB410\\uC5B4\\uC694.\",\n      helpful: 37,\n      verified: true\n    },\n    {\n      id: 14,\n      name: \"\\uC870\\uD604\\uC6B0\",\n      role: \"\\uCD9C\\uD310\\uC0AC \\uD3B8\\uC9D1\\uC790\",\n      title: \"\\uC800\\uC791\\uAD8C \\uAC71\\uC815 \\uC5C6\\uB294 \\uC81C\\uC791\\uC774 \\uAC00\\uB2A5\\uD574\\uC84C\\uC5B4\\uC694\",\n      rating: 5,\n      date: \"2024.10.02\",\n      purchaseDate: \"2024.08.08\",\n      completionDate: \"2024.08.26\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0591\",\n      content: \"\\uCC45 \\uD45C\\uC9C0\\uB098 \\uB0B4\\uC9C0\\uC5D0 \\uB4E4\\uC5B4\\uAC08 \\uC774\\uBBF8\\uC9C0\\uB97C \\uCC3E\\uAE30 \\uC5B4\\uB824\\uC6E0\\uB294\\uB370, \\uC774\\uC81C \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC5B4\\uC11C \\uB108\\uBB34 \\uC88B\\uC544\\uC694. \\uD2B9\\uD788 \\uD14D\\uC2A4\\uD2B8\\uC640 \\uC774\\uBBF8\\uC9C0\\uB97C \\uC870\\uD654\\uB86D\\uAC8C \\uBC30\\uCE58\\uD558\\uB294 \\uAE30\\uBC95\\uC774 \\uC720\\uC6A9\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uC800\\uC791\\uAD8C \\uAC71\\uC815 \\uC5C6\\uC774 \\uC6D0\\uD558\\uB294 \\uC774\\uBBF8\\uC9C0\\uB97C \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC5B4\\uC11C \\uCD9C\\uD310 \\uC5C5\\uBB34\\uAC00 \\uD6E8\\uC52C \\uC218\\uC6D4\\uD574\\uC84C\\uC5B4\\uC694.\",\n      helpful: 30,\n      verified: true\n    },\n    {\n      id: 15,\n      name: \"\\uC784\\uC218\\uBE48\",\n      role: \"\\uCE74\\uD398 \\uC0AC\\uC7A5\",\n      title: \"\\uBA54\\uB274\\uD310 \\uC81C\\uC791\\uC5D0 \\uC2E4\\uC81C\\uB85C \\uB3C4\\uC6C0\\uC774 \\uB410\\uC5B4\\uC694\",\n      rating: 4,\n      date: \"2024.09.28\",\n      purchaseDate: \"2024.08.05\",\n      completionDate: \"2024.08.24\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0550\",\n      content: \"\\uCE74\\uD398 \\uD64D\\uBCF4\\uC6A9 \\uC774\\uBBF8\\uC9C0\\uB098 \\uBA54\\uB274\\uD310 \\uC81C\\uC791\\uC5D0 \\uD65C\\uC6A9\\uD558\\uACE0 \\uC788\\uC5B4\\uC694. \\uC804\\uBB38\\uAC00\\uC5D0\\uAC8C \\uB9E1\\uAE30\\uBA74 \\uBE44\\uC6A9\\uC774 \\uB9CE\\uC774 \\uB4E4\\uC5C8\\uB294\\uB370, \\uC774\\uC81C \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC5B4\\uC11C \\uACBD\\uC81C\\uC801\\uC73C\\uB85C\\uB3C4 \\uB9CE\\uC740 \\uB3C4\\uC6C0\\uC774 \\uB410\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uB9CC \\uCC98\\uC74C\\uC5D0\\uB294 \\uC870\\uAE08 \\uC5B4\\uB824\\uC6E0\\uC9C0\\uB9CC, \\uBC18\\uBCF5 \\uC5F0\\uC2B5\\uD558\\uB2C8\\uAE4C \\uC775\\uC219\\uD574\\uC84C\\uC5B4\\uC694. \\uCD94\\uCC9C\\uD569\\uB2C8\\uB2E4!\",\n      helpful: 23,\n      verified: true\n    },\n    {\n      id: 16,\n      name: \"\\uBC15\\uC18C\\uD76C\",\n      role: \"\\uCD08\\uBCF4 \\uB514\\uC790\\uC774\\uB108\",\n      title: \"\\uC138\\uD305 \\uB2E8\\uACC4\\uAC00 \\uC870\\uAE08 \\uBC84\\uAC70\\uC6E0\\uC5B4\\uC694\",\n      rating: 2,\n      date: \"2024.09.20\",\n      purchaseDate: \"2024.08.01\",\n      completionDate: \"2024.08.18\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0501\",\n      content: \"\\uAC15\\uC758 \\uC790\\uCCB4\\uB294 \\uCE5C\\uC808\\uD558\\uC9C0\\uB9CC, \\uD658\\uACBD \\uC138\\uD305 \\uACFC\\uC815\\uC774 \\uC0DD\\uAC01\\uBCF4\\uB2E4 \\uBCF5\\uC7A1\\uD588\\uC5B4\\uC694. \\uCD08\\uBC18\\uC5D0 \\uB9C9\\uD788\\uB294 \\uC9C0\\uC810\\uC774 \\uB9CE\\uC544\\uC11C \\uCD08\\uBCF4\\uC790\\uC6A9 \\uAC00\\uC774\\uB4DC\\uAC00 \\uB354 \\uC788\\uC5C8\\uC73C\\uBA74 \\uC88B\\uACA0\\uC2B5\\uB2C8\\uB2E4. \\uADF8\\uB798\\uB3C4 \\uC911\\uBC18\\uBD80\\uD130\\uB294 \\uD750\\uB984\\uC774 \\uC7A1\\uD614\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 11,\n      verified: true\n    },\n    {\n      id: 17,\n      name: \"\\uC218\\uAC15\\uC0DD L\",\n      role: \"1\\uC778 \\uB9C8\\uCF00\\uD130\",\n      title: \"\\uC790\\uB8CC\\uB294 \\uC88B\\uC9C0\\uB9CC \\uC5C5\\uB370\\uC774\\uD2B8 \\uC18D\\uB3C4\\uAC00 \\uC544\\uC26C\\uC6CC\\uC694\",\n      rating: 2,\n      date: \"2024.09.12\",\n      purchaseDate: \"2024.07.28\",\n      completionDate: \"2024.08.12\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0479\",\n      content: \"\\uC6CC\\uD06C\\uD50C\\uB85C\\uC6B0 \\uC790\\uB8CC\\uB294 \\uD0C4\\uD0C4\\uD55C\\uB370, \\uCD5C\\uC2E0 \\uB178\\uB4DC \\uC5C5\\uB370\\uC774\\uD2B8\\uC5D0 \\uB300\\uD55C \\uCD94\\uAC00 \\uC124\\uBA85\\uC774 \\uC870\\uAE08 \\uB2A6\\uAC8C \\uBC18\\uC601\\uB41C \\uB290\\uB08C\\uC774\\uC5D0\\uC694. \\uADF8\\uB798\\uB3C4 \\uAE30\\uBCF8\\uAE30\\uB294 \\uC798 \\uC7A1\\uC544\\uC918\\uC11C \\uC804\\uCCB4\\uC801\\uC73C\\uB85C\\uB294 \\uCC38\\uACE0\\uAC00 \\uB410\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 9,\n      verified: true\n    },\n    {\n      id: 18,\n      name: \"\\uC7A5\\uBBFC\\uC9C0\",\n      role: \"\\uCF58\\uD150\\uCE20 \\uB514\\uB809\\uD130\",\n      title: \"\\uC911\\uAE09\\uC790 \\uC774\\uC0C1\\uC5D0\\uAC8C \\uB354 \\uB9DE\\uB294 \\uAD6C\\uC131\",\n      rating: 1,\n      date: \"2024.09.05\",\n      purchaseDate: \"2024.07.25\",\n      completionDate: \"2024.08.05\",\n      course: \"ComfyUI for Real Ads\",\n      verificationCode: \"RE-0455\",\n      content: \"\\uAE30\\uB300\\uD588\\uB358 \\uAC83\\uBCF4\\uB2E4 \\uB09C\\uC774\\uB3C4\\uAC00 \\uB192\\uC544\\uC11C \\uCD08\\uBC18\\uC5D0 \\uD3EC\\uAE30\\uD560 \\uBED4\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uAE30\\uBCF8 \\uAC1C\\uB150\\uC744 \\uC544\\uC608 \\uCC98\\uC74C \\uC811\\uD558\\uB294 \\uBD84\\uB4E4\\uC5D0\\uAC8C\\uB294 \\uC9C4\\uC785 \\uC7A5\\uBCBD\\uC774 \\uC788\\uC744 \\uAC83 \\uAC19\\uC544\\uC694. \\uBCF4\\uAC15 \\uC790\\uB8CC\\uAC00 \\uC788\\uC73C\\uBA74 \\uC88B\\uACA0\\uC2B5\\uB2C8\\uB2E4.\",\n      helpful: 7,\n      verified: true\n    }\n  ];\n  const filteredAndSortedReviews = reviewsData.filter((review) => filterRating === null || review.rating === filterRating).sort((a, b) => {\n    switch (sortBy) {\n      case \"rating\":\n        return b.rating - a.rating;\n      case \"helpful\":\n        return b.helpful - a.helpful;\n      case \"latest\":\n      default:\n        return new Date(b.date).getTime() - new Date(a.date).getTime();\n    }\n  });\n  return /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-6xl mx-auto p-6 max-md:p-4\", children: [\n    /* @__PURE__ */ jsx(\"div\", { className: \"mb-8 max-md:mb-6\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\", children: [\n      /* @__PURE__ */ jsxs(\"div\", { children: [\n        /* @__PURE__ */ jsx(\n          \"h2\",\n          {\n            className: \"text-3xl text-gray-900 mb-2 max-md:text-2xl max-md:mb-1\",\n            style: { fontFamily: FONTS.bold },\n            children: \"\\uC218\\uAC15\\uC0DD \\uB9AC\\uBDF0\"\n          }\n        ),\n        /* @__PURE__ */ jsx(\n          \"p\",\n          {\n            className: \"text-gray-600 max-md:text-sm\",\n            style: { fontFamily: FONTS.light },\n            children: \"ComfyUI for Real Ads \\uAC15\\uC758\\uB97C \\uAD6C\\uB9E4\\uD55C \\uC218\\uAC15\\uC0DD\\uB4E4\\uC758 \\uC194\\uC9C1\\uD55C \\uD6C4\\uAE30\\uC785\\uB2C8\\uB2E4.\"\n          }\n        )\n      ] }),\n      /* @__PURE__ */ jsx(\n        \"button\",\n        {\n          onClick: handleOpenModal,\n          className: \"inline-flex items-center justify-center rounded-full bg-slate-900 px-5 py-2.5 text-sm text-white transition hover:bg-slate-800\",\n          style: { fontFamily: FONTS.medium },\n          children: \"\\uAD6C\\uB9E4\\uD3C9 \\uC791\\uC131\"\n        }\n      )\n    ] }) }),\n    /* @__PURE__ */ jsx(ReviewStats, { reviews: reviewsData }),\n    /* @__PURE__ */ jsx(\"div\", { className: \"bg-white border border-slate-200 rounded-2xl p-4 mb-6 max-md:p-3 max-md:mb-4\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col md:flex-row md:items-center md:justify-between space-y-4 md:space-y-0 max-md:space-y-3\", children: [\n      /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center space-x-4 max-md:space-x-2\", children: [\n        /* @__PURE__ */ jsx(\n          \"label\",\n          {\n            className: \"text-sm text-gray-700 max-md:text-xs\",\n            style: { fontFamily: FONTS.medium },\n            children: \"\\uC815\\uB82C:\"\n          }\n        ),\n        /* @__PURE__ */ jsxs(\n          \"select\",\n          {\n            value: sortBy,\n            onChange: (e) => setSortBy(e.target.value),\n            className: \"px-3 py-2 border border-slate-300 rounded-md text-sm focus:outline-none focus:ring-2 focus:ring-slate-900 max-md:px-2 max-md:py-1 max-md:text-xs\",\n            style: { fontFamily: FONTS.light },\n            children: [\n              /* @__PURE__ */ jsx(\"option\", { value: \"latest\", children: \"\\uCD5C\\uC2E0\\uC21C\" }),\n              /* @__PURE__ */ jsx(\"option\", { value: \"rating\", children: \"\\uD3C9\\uC810\\uC21C\" }),\n              /* @__PURE__ */ jsx(\"option\", { value: \"helpful\", children: \"\\uB3C4\\uC6C0\\uC21C\" })\n            ]\n          }\n        )\n      ] }),\n      /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col space-y-2 md:flex-row md:items-center md:space-y-0 md:space-x-4 max-md:space-y-2\", children: [\n        /* @__PURE__ */ jsx(\n          \"label\",\n          {\n            className: \"text-sm text-gray-700 max-md:text-xs\",\n            style: { fontFamily: FONTS.medium },\n            children: \"\\uD3C9\\uC810 \\uD544\\uD130:\"\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-wrap gap-2 max-md:gap-1\", children: [\n          /* @__PURE__ */ jsx(\n            \"button\",\n            {\n              onClick: () => setFilterRating(null),\n              className: `px-3 py-1 rounded-full text-sm transition-colors max-md:px-2 max-md:text-xs ${filterRating === null ? \"bg-slate-900 text-white\" : \"bg-slate-100 text-slate-700 hover:bg-slate-200\"}`,\n              style: { fontFamily: FONTS.medium },\n              children: \"\\uC804\\uCCB4\"\n            }\n          ),\n          [5, 4, 3, 2, 1].map((rating) => /* @__PURE__ */ jsxs(\n            \"button\",\n            {\n              onClick: () => setFilterRating(rating),\n              className: `px-3 py-1 rounded-full text-sm transition-colors max-md:px-2 max-md:text-xs ${filterRating === rating ? \"bg-slate-900 text-white\" : \"bg-slate-100 text-slate-700 hover:bg-slate-200\"}`,\n              style: { fontFamily: FONTS.medium },\n              children: [\n                rating,\n                \"\\uC810\"\n              ]\n            },\n            rating\n          ))\n        ] })\n      ] })\n    ] }) }),\n    /* @__PURE__ */ jsx(\"div\", { className: \"space-y-4 max-h-[800px] overflow-y-auto pr-2 max-md:max-h-[600px] max-md:pr-1\", children: filteredAndSortedReviews.map((review) => /* @__PURE__ */ jsx(ReviewItem, { review }, review.id)) }),\n    filteredAndSortedReviews.length === 0 && /* @__PURE__ */ jsx(\"div\", { className: \"text-center py-12 max-md:py-8\", children: /* @__PURE__ */ jsx(\n      \"p\",\n      {\n        className: \"text-gray-500 max-md:text-sm\",\n        style: { fontFamily: FONTS.light },\n        children: \"\\uC120\\uD0DD\\uD55C \\uC870\\uAC74\\uC5D0 \\uB9DE\\uB294 \\uB9AC\\uBDF0\\uAC00 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\"\n      }\n    ) }),\n    isModalOpen && /* @__PURE__ */ jsx(\n      \"div\",\n      {\n        className: \"fixed inset-0 z-50 flex items-center justify-center bg-black/30 px-4\",\n        onClick: handleCloseModal,\n        children: /* @__PURE__ */ jsxs(\n          \"div\",\n          {\n            className: \"w-full max-w-lg rounded-2xl bg-white p-6 shadow-xl\",\n            onClick: (e) => e.stopPropagation(),\n            children: [\n              /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start justify-between mb-4\", children: [\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl text-gray-900\",\n                      style: { fontFamily: FONTS.bold },\n                      children: \"\\uAD6C\\uB9E4\\uD3C9 \\uC791\\uC131\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\n                    \"p\",\n                    {\n                      className: \"text-sm text-gray-600 mt-1\",\n                      style: { fontFamily: FONTS.light },\n                      children: \"\\uC2E4\\uC81C \\uC218\\uAC15 \\uACBD\\uD5D8\\uC744 \\uACF5\\uC720\\uD574 \\uC8FC\\uC138\\uC694.\"\n                    }\n                  )\n                ] }),\n                /* @__PURE__ */ jsx(\n                  \"button\",\n                  {\n                    onClick: handleCloseModal,\n                    className: \"text-gray-400 hover:text-gray-600\",\n                    \"aria-label\": \"Close\",\n                    children: /* @__PURE__ */ jsx(\n                      \"svg\",\n                      {\n                        className: \"w-6 h-6\",\n                        fill: \"none\",\n                        stroke: \"currentColor\",\n                        viewBox: \"0 0 24 24\",\n                        children: /* @__PURE__ */ jsx(\n                          \"path\",\n                          {\n                            strokeLinecap: \"round\",\n                            strokeLinejoin: \"round\",\n                            strokeWidth: 2,\n                            d: \"M6 18L18 6M6 6l12 12\"\n                          }\n                        )\n                      }\n                    )\n                  }\n                )\n              ] }),\n              /* @__PURE__ */ jsxs(\"form\", { onSubmit: handleSubmitReview, className: \"space-y-4\", children: [\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\n                    \"label\",\n                    {\n                      className: \"block text-sm text-gray-700 mb-2\",\n                      style: { fontFamily: FONTS.medium },\n                      children: \"\\uAD6C\\uB9E4\\uC790 \\uC774\\uBA54\\uC77C\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\n                    \"input\",\n                    {\n                      name: \"email\",\n                      type: \"text\",\n                      value: formData.email,\n                      onChange: handleFormChange,\n                      placeholder: \"name@email.com\",\n                      className: \"w-full rounded-xl border border-slate-200 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-slate-900\",\n                      style: { fontFamily: FONTS.light }\n                    }\n                  )\n                ] }),\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\n                    \"label\",\n                    {\n                      className: \"block text-sm text-gray-700 mb-2\",\n                      style: { fontFamily: FONTS.medium },\n                      children: \"\\uBCC4\\uC810 (1-5)\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\n                    \"input\",\n                    {\n                      name: \"star\",\n                      type: \"text\",\n                      value: formData.star,\n                      onChange: handleFormChange,\n                      placeholder: \"\\uC608: 4\",\n                      className: \"w-full rounded-xl border border-slate-200 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-slate-900\",\n                      style: { fontFamily: FONTS.light }\n                    }\n                  )\n                ] }),\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\n                    \"label\",\n                    {\n                      className: \"block text-sm text-gray-700 mb-2\",\n                      style: { fontFamily: FONTS.medium },\n                      children: \"\\uD3C9\\uAC00 / \\uB9AC\\uBDF0\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\n                    \"textarea\",\n                    {\n                      name: \"review\",\n                      value: formData.review,\n                      onChange: handleFormChange,\n                      placeholder: \"\\uC218\\uAC15\\uD558\\uBA74\\uC11C \\uC88B\\uC558\\uB358 \\uC810\\uACFC \\uAC1C\\uC120\\uC810\\uC744 \\uC790\\uC720\\uB86D\\uAC8C \\uC801\\uC5B4\\uC8FC\\uC138\\uC694.\",\n                      rows: 4,\n                      className: \"w-full rounded-xl border border-slate-200 px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-slate-900\",\n                      style: { fontFamily: FONTS.light }\n                    }\n                  )\n                ] }),\n                submitError && /* @__PURE__ */ jsx(\n                  \"div\",\n                  {\n                    className: \"rounded-xl bg-red-50 px-4 py-3 text-sm text-red-600\",\n                    style: { fontFamily: FONTS.medium },\n                    children: submitError\n                  }\n                ),\n                submitSuccess && /* @__PURE__ */ jsx(\n                  \"div\",\n                  {\n                    className: \"rounded-xl bg-slate-100 px-4 py-3 text-sm text-slate-700\",\n                    style: { fontFamily: FONTS.medium },\n                    children: submitSuccess\n                  }\n                ),\n                /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-end gap-3 pt-2\", children: [\n                  /* @__PURE__ */ jsx(\n                    \"button\",\n                    {\n                      type: \"button\",\n                      onClick: handleCloseModal,\n                      className: \"rounded-full border border-slate-200 px-4 py-2 text-sm text-slate-600 hover:bg-slate-50\",\n                      style: { fontFamily: FONTS.medium },\n                      children: \"\\uB2EB\\uAE30\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\n                    \"button\",\n                    {\n                      type: \"submit\",\n                      disabled: isSubmitting,\n                      className: \"rounded-full bg-slate-900 px-5 py-2 text-sm text-white transition hover:bg-slate-800 disabled:cursor-not-allowed disabled:opacity-60\",\n                      style: { fontFamily: FONTS.medium },\n                      children: isSubmitting ? \"\\uB4F1\\uB85D \\uC911...\" : \"\\uB9AC\\uBDF0 \\uC81C\\uCD9C\"\n                    }\n                  )\n                ] })\n              ] })\n            ]\n          }\n        )\n      }\n    )\n  ] });\n};\n\nexport {\n  Reviews\n};\n","// src/class/Arrow.tsx\nimport { jsx } from \"react/jsx-runtime\";\nfunction Arrow({ className }) {\n  return /* @__PURE__ */ jsx(\n    \"svg\",\n    {\n      viewBox: \"0 0 24 24\",\n      strokeWidth: \"2\",\n      fill: \"none\",\n      xmlns: \"http://www.w3.org/2000/svg\",\n      color: \"#005DFA\",\n      className,\n      children: /* @__PURE__ */ jsx(\n        \"path\",\n        {\n          d: \"M6.00005 19L19 5.99996M19 5.99996V18.48M19 5.99996H6.52005\",\n          stroke: \"#005DFA\",\n          strokeWidth: \"2\",\n          strokeLinecap: \"round\",\n          strokeLinejoin: \"round\"\n        }\n      )\n    }\n  );\n}\n\nexport {\n  Arrow\n};\n","/*\n * web/Spinner\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/rdz6kWfjATgH86A2tYIi/tPlLOlxZZwrRKALgB7ly/ubzwLPDLP.js\"\nexport { default } from \"https://framerusercontent.com/modules/rdz6kWfjATgH86A2tYIi/tPlLOlxZZwrRKALgB7ly/ubzwLPDLP.js\"\n","// Generated by Framer (15813d8)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,RichText,useActiveVariantCallback,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";const serializationHash=\"framer-243qn\";const variantClassNames={t99AyRX6u:\"framer-v-hony9l\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const getProps=({height,id,onClick,title,width,...props})=>{var _ref;return{...props,DicMLVR17:onClick!==null&&onClick!==void 0?onClick:props.DicMLVR17,GFTgizblO:(_ref=title!==null&&title!==void 0?title:props.GFTgizblO)!==null&&_ref!==void 0?_ref:\"강의실\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,DicMLVR17,GFTgizblO,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"t99AyRX6u\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const{activeVariantCallback,delay}=useActiveVariantCallback(baseVariant);const onTap1knps2q=activeVariantCallback(async(...args)=>{setGestureState({isPressed:false});if(DicMLVR17){const res=await DicMLVR17(...args);if(res===false)return false;}});const ref1=React.useRef(null);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-hony9l\",className,classNames),\"data-framer-name\":\"Variant 1\",\"data-highlight\":true,layoutDependency:layoutDependency,layoutId:\"t99AyRX6u\",onTap:onTap1knps2q,ref:ref!==null&&ref!==void 0?ref:ref1,style:{...style},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"X19TeXN0ZW1EZWZhdWx0LTYwMC1ub3JtYWxfXw==\",\"--framer-font-family\":'\"system-ui\", \"-apple-system\", \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif, \"System Default\", sans-serif',\"--framer-font-weight\":\"600\",\"--framer-letter-spacing\":\"0.42px\",\"--framer-line-height\":\"140%\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(37, 49, 60))\"},children:\"강의실\"})}),className:\"framer-lzy7ob\",\"data-framer-name\":\"SERVICES\",fonts:[\"__SystemDefault-600-normal__\"],layoutDependency:layoutDependency,layoutId:\"oKyFswVwe\",style:{\"--extracted-r6o4lv\":\"rgb(37, 49, 60)\"},text:GFTgizblO,verticalAlignment:\"top\",withExternalLayout:true})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-243qn.framer-1ft7ls2, .framer-243qn .framer-1ft7ls2 { display: block; }\",\".framer-243qn.framer-hony9l { align-content: center; align-items: center; cursor: pointer; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: min-content; }\",\".framer-243qn .framer-lzy7ob { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-243qn.framer-hony9l { gap: 0px; } .framer-243qn.framer-hony9l > * { margin: 0px; margin-bottom: calc(10px / 2); margin-top: calc(10px / 2); } .framer-243qn.framer-hony9l > :first-child { margin-top: 0px; } .framer-243qn.framer-hony9l > :last-child { margin-bottom: 0px; } }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 22.5\n * @framerIntrinsicWidth 43\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"auto\",\"auto\"]}}}\n * @framerVariables {\"DicMLVR17\":\"onClick\",\"GFTgizblO\":\"title\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerwUFtSXOPd=withCSS(Component,css,\"framer-243qn\");export default FramerwUFtSXOPd;FramerwUFtSXOPd.displayName=\"web/MenuItem\";FramerwUFtSXOPd.defaultProps={height:22.5,width:43};addPropertyControls(FramerwUFtSXOPd,{DicMLVR17:{title:\"On Click\",type:ControlType.EventHandler},GFTgizblO:{defaultValue:\"강의실\",displayTextArea:false,title:\"Title\",type:ControlType.String}});addFonts(FramerwUFtSXOPd,[{explicitInter:true,fonts:[]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerwUFtSXOPd\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"43\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"22.5\",\"framerImmutableVariables\":\"true\",\"framerVariables\":\"{\\\"DicMLVR17\\\":\\\"onClick\\\",\\\"GFTgizblO\\\":\\\"title\\\"}\",\"framerComponentViewportWidth\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]}}}\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./wUFtSXOPd.map","/*\n * web/MenuItem\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/s1nHsY3DZ0r2DGN4PHpb/iQtzO103s1J4wYZITdsh/wUFtSXOPd.js\"\nexport { default } from \"https://framerusercontent.com/modules/s1nHsY3DZ0r2DGN4PHpb/iQtzO103s1J4wYZITdsh/wUFtSXOPd.js\"\n","// Generated by Framer (af7f236)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ComponentPresetsProvider,ControlType,cx,getFontsFromComponentPreset,getFontsFromSharedStyle,Link,RichText,useComponentViewport,useLocaleInfo,useVariantState,withCSS,withFX}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import*as componentPresets from\"https://framerusercontent.com/modules/OfOZVxq5O2A2YDp5xhsS/vNQyAPxCoxMu6h70aX0B/componentPresets.js\";import*as sharedStyle5 from\"https://framerusercontent.com/modules/6tlOqCOOZ5lYDnd9a8Cr/eA3GLcVd3Hp6rTRTwf32/Bv3dPpoSV.js\";import*as sharedStyle3 from\"https://framerusercontent.com/modules/qf8WnaeGJ3SKlV1O1xQl/OpcN00bADf7Cx0Plvexi/D3DXxP6A7.js\";import*as sharedStyle1 from\"https://framerusercontent.com/modules/ORPUlZI3WxbcHtHvUanj/aIKrwl6RsacGktaFjPfX/DXjdkQnI3.js\";import*as sharedStyle7 from\"https://framerusercontent.com/modules/WFwJfXfYaLttmLvni3XT/CPcUg4PRsHlE69ChrCl2/igUmRMPj0.js\";import*as sharedStyle from\"https://framerusercontent.com/modules/u1mf9oEcsdT6ZY35EKju/aKBdc0OCLwIFIjQkcI48/kevPKtV7h.js\";import*as sharedStyle6 from\"https://framerusercontent.com/modules/gpKoVqFiaHhnd0ovD92t/6weiTaG8fJrKaTmoa24o/R0ztcLGWn.js\";import*as sharedStyle4 from\"https://framerusercontent.com/modules/E8iS3ykzc4VVNFg4Q0j4/e0p5VUklaAGl2DkhwD5L/sJ2QEITYH.js\";import*as sharedStyle2 from\"https://framerusercontent.com/modules/Ckw3BYDTnwzv14e9Z0QG/JufQFcF7Uj7bjcOGNBav/VKSZtsCFD.js\";const MotionAWithFX=withFX(motion.a);const serializationHash=\"framer-eSL1o\";const variantClassNames={cqB6gnJOn:\"framer-v-10umvpq\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const tELsFd721=undefined;const g6Gj_B3C8=undefined;const SNA6l19Uu=undefined;const OF8b_4AWY=undefined;const animation={opacity:0,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,transformPerspective:1200,x:0,y:-32};const transition1={damping:40,delay:.1,mass:1,stiffness:200,type:\"spring\"};const transition2={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion.create(React.Fragment);const getProps=({content,height,id,link,smallTitle,subTitle,width,...props})=>{return{...props,g6Gj_B3C8:smallTitle??props.g6Gj_B3C8??\"[기간 한정 무료 강의]\",OF8b_4AWY:content??props.OF8b_4AWY??/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(motion.p,{children:[\"ComfyUI 가 처음 이신가요?\",/*#__PURE__*/_jsx(motion.br,{}),\"이 강의를 통해  UI 를 Comfy 시작해 보세요\",/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(motion.br,{}),\"실제 광고 모델을 만들면서,\",/*#__PURE__*/_jsx(motion.br,{}),\"AI 가 어떻게 작동하는지 구체적으로 배워보실 수 있습니다\"]})}),SNA6l19Uu:subTitle??props.SNA6l19Uu??/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(motion.p,{children:[\"ComfyUI 배우고\",/*#__PURE__*/_jsx(motion.br,{}),\"AI 연예인 모델 만들기\"]})}),tELsFd721:link??props.tELsFd721};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,g6Gj_B3C8,tELsFd721,SNA6l19Uu,OF8b_4AWY,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"cqB6gnJOn\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[sharedStyle.className,sharedStyle1.className,sharedStyle2.className,sharedStyle3.className,sharedStyle4.className,sharedStyle5.className,sharedStyle6.className,sharedStyle7.className];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition2,children:/*#__PURE__*/_jsx(Link,{href:tELsFd721,motionChild:true,nodeId:\"cqB6gnJOn\",openInNewTab:false,scopeId:\"pNHUzUY_J\",children:/*#__PURE__*/_jsxs(MotionAWithFX,{...restProps,...gestureHandlers,__framer__animate:{transition:transition1},__framer__animateOnce:true,__framer__enter:animation,__framer__styleAppearEffectEnabled:true,__framer__threshold:.5,__perspectiveFX:false,__smartComponentFX:true,__targetOpacity:1,className:`${cx(scopingClassNames,\"framer-10umvpq\",className,classNames)} framer-1g5vgzs`,\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"cqB6gnJOn\",ref:refBinding,style:{background:\"linear-gradient(132deg, var(--token-7271da1b-9f0a-41bd-91b9-d7098d8944de, rgb(244, 237, 255)) 0%, var(--token-a37e6c3e-a10c-437b-b258-07d1d49555da, rgb(252, 235, 239)) 100%)\",borderBottomLeftRadius:40,borderBottomRightRadius:40,borderTopLeftRadius:40,borderTopRightRadius:40,...style},children:[/*#__PURE__*/_jsxs(motion.div,{className:\"framer-v7fwg\",layoutDependency:layoutDependency,layoutId:\"g9CQgmjJe\",children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgQm9sZA==\",\"--framer-font-family\":'\"Pretendard Bold\", \"Pretendard Bold Placeholder\", sans-serif',\"--framer-font-size\":\"14px\"},children:\"[기간 한정 무료 강의]\"})}),className:\"framer-9w2it1\",fonts:[\"CUSTOM;Pretendard Bold\"],layoutDependency:layoutDependency,layoutId:\"TbmyzTFst\",style:{\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},text:g6Gj_B3C8,verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(ComponentPresetsProvider,{presets:{\"module:NEd4VmDdsxM3StIUbddO/1de6WpgIbCrKkRcPfQcW/YouTube.js:Youtube\":componentPresets.props[\"USOOGQvdD\"],\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\":componentPresets.props[\"bGrj_P5Hk\"]},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:SNA6l19Uu,className:\"framer-r6pbk4\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"lMSldpxcB\",style:{\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},stylesPresetsClassNames:{a:\"framer-styles-preset-1x5q87\",code:\"framer-styles-preset-10lmxa8\",h1:\"framer-styles-preset-1x4saly\",h2:\"framer-styles-preset-1uqk9bj\",h3:\"framer-styles-preset-12fssox\",h4:\"framer-styles-preset-u2ed1w\",h5:\"framer-styles-preset-13rf66x\",h6:\"framer-styles-preset-chmam8\",img:\"framer-styles-preset-1d582qa\",p:\"framer-styles-preset-1shyyex\"},verticalAlignment:\"top\",withExternalLayout:true})})]}),/*#__PURE__*/_jsx(ComponentPresetsProvider,{presets:{\"module:NEd4VmDdsxM3StIUbddO/1de6WpgIbCrKkRcPfQcW/YouTube.js:Youtube\":componentPresets.props[\"USOOGQvdD\"],\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\":componentPresets.props[\"bGrj_P5Hk\"]},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:OF8b_4AWY,className:\"framer-1j6mtsd\",fonts:[\"Inter\"],layoutDependency:layoutDependency,layoutId:\"wlk3icv3R\",style:{\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},stylesPresetsClassNames:{a:\"framer-styles-preset-1x5q87\",code:\"framer-styles-preset-10lmxa8\",h1:\"framer-styles-preset-1x4saly\",h2:\"framer-styles-preset-1uqk9bj\",h3:\"framer-styles-preset-12fssox\",h4:\"framer-styles-preset-17umqzd\",h5:\"framer-styles-preset-13rf66x\",h6:\"framer-styles-preset-chmam8\",img:\"framer-styles-preset-1d582qa\",p:\"framer-styles-preset-1at8hnm\"},verticalAlignment:\"top\",withExternalLayout:true})})]})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-eSL1o.framer-1g5vgzs, .framer-eSL1o .framer-1g5vgzs { display: block; }\",\".framer-eSL1o.framer-10umvpq { align-content: flex-start; align-items: flex-start; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 32px; height: min-content; justify-content: center; overflow: visible; padding: 40px; position: relative; text-decoration: none; width: 515px; }\",\".framer-eSL1o .framer-v7fwg { align-content: flex-start; align-items: flex-start; display: flex; flex: none; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: visible; padding: 0px; position: relative; width: min-content; }\",\".framer-eSL1o .framer-9w2it1, .framer-eSL1o .framer-r6pbk4 { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\".framer-eSL1o .framer-1j6mtsd { flex: none; height: auto; position: relative; white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; }\",...sharedStyle.css,...sharedStyle1.css,...sharedStyle2.css,...sharedStyle3.css,...sharedStyle4.css,...sharedStyle5.css,...sharedStyle6.css,...sharedStyle7.css];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 273\n * @framerIntrinsicWidth 515\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerVariables {\"g6Gj_B3C8\":\"smallTitle\",\"tELsFd721\":\"link\",\"SNA6l19Uu\":\"subTitle\",\"OF8b_4AWY\":\"content\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerpNHUzUY_J=withCSS(Component,css,\"framer-eSL1o\");export default FramerpNHUzUY_J;FramerpNHUzUY_J.displayName=\"web / Course Card\";FramerpNHUzUY_J.defaultProps={height:273,width:515};addPropertyControls(FramerpNHUzUY_J,{g6Gj_B3C8:{defaultValue:\"[기간 한정 무료 강의]\",displayTextArea:false,title:\"smallTitle\",type:ControlType.String},tELsFd721:{title:\"Link\",type:ControlType.Link},SNA6l19Uu:{defaultValue:\"<p>ComfyUI 배우고<br>AI 연예인 모델 만들기</p>\",title:\"subTitle\",type:ControlType.RichText},OF8b_4AWY:{defaultValue:\"<p>ComfyUI 가 처음 이신가요?<br>이 강의를 통해  UI 를 Comfy 시작해 보세요<br><br>실제 광고 모델을 만들면서,<br>AI 가 어떻게 작동하는지 구체적으로 배워보실 수 있습니다</p>\",title:\"content\",type:ControlType.RichText}});addFonts(FramerpNHUzUY_J,[{explicitInter:true,fonts:[{cssFamilyName:\"Pretendard Bold\",source:\"custom\",style:\"normal\",uiFamilyName:\"Pretendard\",url:\"https://framerusercontent.com/assets/GHJPBmd4yxGhh5oPHY0HmX7Jl4.woff2\",weight:\"700\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F\",url:\"https://framerusercontent.com/assets/5vvr9Vy74if2I6bQbJvbw7SY1pQ.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116\",url:\"https://framerusercontent.com/assets/EOr0mi4hNtlgWNn9if640EZzXCo.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+1F00-1FFF\",url:\"https://framerusercontent.com/assets/Y9k9QrlZAqio88Klkmbd8VoMQc.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0370-03FF\",url:\"https://framerusercontent.com/assets/OYrD2tBIBPvoJXiIHnLoOXnY9M.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF\",url:\"https://framerusercontent.com/assets/JeYwfuaPfZHQhEG8U5gtPDZ7WQ.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2070, U+2074-207E, U+2080-208E, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD\",url:\"https://framerusercontent.com/assets/GrgcKwrN6d3Uz8EwcLHZxwEfC4.woff2\",weight:\"400\"},{cssFamilyName:\"Inter\",source:\"framer\",style:\"normal\",uiFamilyName:\"Inter\",unicodeRange:\"U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB\",url:\"https://framerusercontent.com/assets/b6Y37FthZeALduNqHicBT6FutY.woff2\",weight:\"400\"}]},...getFontsFromSharedStyle(sharedStyle.fonts),...getFontsFromSharedStyle(sharedStyle1.fonts),...getFontsFromSharedStyle(sharedStyle2.fonts),...getFontsFromSharedStyle(sharedStyle3.fonts),...getFontsFromSharedStyle(sharedStyle4.fonts),...getFontsFromSharedStyle(sharedStyle5.fonts),...getFontsFromSharedStyle(sharedStyle6.fonts),...getFontsFromSharedStyle(sharedStyle7.fonts),...componentPresets.fonts?.[\"bGrj_P5Hk\"]?getFontsFromComponentPreset(componentPresets.fonts?.[\"bGrj_P5Hk\"]):[],...componentPresets.fonts?.[\"USOOGQvdD\"]?getFontsFromComponentPreset(componentPresets.fonts?.[\"USOOGQvdD\"]):[]],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerpNHUzUY_J\",\"slots\":[],\"annotations\":{\"framerAutoSizeImages\":\"true\",\"framerIntrinsicHeight\":\"273\",\"framerContractVersion\":\"1\",\"framerImmutableVariables\":\"true\",\"framerColorSyntax\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerIntrinsicWidth\":\"515\",\"framerComponentViewportWidth\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\",\"framerVariables\":\"{\\\"g6Gj_B3C8\\\":\\\"smallTitle\\\",\\\"tELsFd721\\\":\\\"link\\\",\\\"SNA6l19Uu\\\":\\\"subTitle\\\",\\\"OF8b_4AWY\\\":\\\"content\\\"}\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./pNHUzUY_J.map","/*\n * web / Course Card\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/n51JpbmTCZj0LxYSFmb1/gO4DvTsRgXrbLCAVCQAv/pNHUzUY_J.js\"\nexport { default } from \"https://framerusercontent.com/modules/n51JpbmTCZj0LxYSFmb1/gO4DvTsRgXrbLCAVCQAv/pNHUzUY_J.js\"\n","/*\n * web / Button\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/mzDv8x1AG3iUry9rhWll/yTZYKS7L3gWdaKakQAGM/e26fWTkl8.js\"\nexport { default } from \"https://framerusercontent.com/modules/mzDv8x1AG3iUry9rhWll/yTZYKS7L3gWdaKakQAGM/e26fWTkl8.js\"\n","// Generated by Framer (af7f236)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ComponentPresetsProvider,ControlType,cx,getFontsFromComponentPreset,getFontsFromSharedStyle,RichText,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import*as componentPresets from\"https://framerusercontent.com/modules/OfOZVxq5O2A2YDp5xhsS/vNQyAPxCoxMu6h70aX0B/componentPresets.js\";import*as sharedStyle5 from\"https://framerusercontent.com/modules/6tlOqCOOZ5lYDnd9a8Cr/eA3GLcVd3Hp6rTRTwf32/Bv3dPpoSV.js\";import*as sharedStyle3 from\"https://framerusercontent.com/modules/qf8WnaeGJ3SKlV1O1xQl/OpcN00bADf7Cx0Plvexi/D3DXxP6A7.js\";import*as sharedStyle1 from\"https://framerusercontent.com/modules/ORPUlZI3WxbcHtHvUanj/aIKrwl6RsacGktaFjPfX/DXjdkQnI3.js\";import*as sharedStyle from\"https://framerusercontent.com/modules/u1mf9oEcsdT6ZY35EKju/aKBdc0OCLwIFIjQkcI48/kevPKtV7h.js\";import*as sharedStyle6 from\"https://framerusercontent.com/modules/gpKoVqFiaHhnd0ovD92t/6weiTaG8fJrKaTmoa24o/R0ztcLGWn.js\";import*as sharedStyle4 from\"https://framerusercontent.com/modules/E8iS3ykzc4VVNFg4Q0j4/e0p5VUklaAGl2DkhwD5L/sJ2QEITYH.js\";import*as sharedStyle2 from\"https://framerusercontent.com/modules/Ckw3BYDTnwzv14e9Z0QG/JufQFcF7Uj7bjcOGNBav/VKSZtsCFD.js\";const serializationHash=\"framer-h6Yyu\";const variantClassNames={QKratsr4q:\"framer-v-1z94h\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const ZjOataw8x=undefined;const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion.create(React.Fragment);const getProps=({height,id,title,width,...props})=>{return{...props,ZjOataw8x:title??props.ZjOataw8x??/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.h1,{children:\"진짜 광고 이미지를 만들면서 배우는 AI (ComfyUI)\"})})};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,ZjOataw8x,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"QKratsr4q\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[sharedStyle.className,sharedStyle1.className,sharedStyle2.className,sharedStyle3.className,sharedStyle4.className,sharedStyle5.className,sharedStyle6.className];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-1z94h\",className,classNames),\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"QKratsr4q\",ref:refBinding,style:{...style},children:/*#__PURE__*/_jsx(ComponentPresetsProvider,{presets:{\"module:NEd4VmDdsxM3StIUbddO/1de6WpgIbCrKkRcPfQcW/YouTube.js:Youtube\":componentPresets.props[\"USOOGQvdD\"],\"module:pVk4QsoHxASnVtUBp6jr/QVzZltTawVJTjmjAWG3C/CodeBlock.js:default\":componentPresets.props[\"bGrj_P5Hk\"]},children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:ZjOataw8x,className:\"framer-1pa6yoz\",fonts:[\"CUSTOM;Pretendard Bold\"],layoutDependency:layoutDependency,layoutId:\"qhfetsWw0\",style:{\"--extracted-r6o4lv\":\"var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250))\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},stylesPresetsClassNames:{a:\"framer-styles-preset-1x5q87\",code:\"framer-styles-preset-10lmxa8\",h1:\"framer-styles-preset-1x4saly\",h2:\"framer-styles-preset-1uqk9bj\",h3:\"framer-styles-preset-12fssox\",img:\"framer-styles-preset-1d582qa\",p:\"framer-styles-preset-1shyyex\"},verticalAlignment:\"top\",withExternalLayout:true})})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-h6Yyu.framer-d3l0lq, .framer-h6Yyu .framer-d3l0lq { display: block; }\",\".framer-h6Yyu.framer-1z94h { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: 485px; }\",\".framer-h6Yyu .framer-1pa6yoz { flex: none; height: auto; position: relative; white-space: pre-wrap; width: 100%; word-break: break-word; word-wrap: break-word; }\",...sharedStyle.css,...sharedStyle1.css,...sharedStyle2.css,...sharedStyle3.css,...sharedStyle4.css,...sharedStyle5.css,...sharedStyle6.css];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 252\n * @framerIntrinsicWidth 485\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerVariables {\"ZjOataw8x\":\"title\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerqZtbqVS6g=withCSS(Component,css,\"framer-h6Yyu\");export default FramerqZtbqVS6g;FramerqZtbqVS6g.displayName=\"class / Course Title\";FramerqZtbqVS6g.defaultProps={height:252,width:485};addPropertyControls(FramerqZtbqVS6g,{ZjOataw8x:{defaultValue:\"<h1>진짜 광고 이미지를 만들면서 배우는 AI (ComfyUI)</h1>\",title:\"Title\",type:ControlType.RichText}});addFonts(FramerqZtbqVS6g,[{explicitInter:true,fonts:[{cssFamilyName:\"Pretendard Bold\",source:\"custom\",style:\"normal\",uiFamilyName:\"Pretendard\",url:\"https://framerusercontent.com/assets/GHJPBmd4yxGhh5oPHY0HmX7Jl4.woff2\",weight:\"700\"}]},...getFontsFromSharedStyle(sharedStyle.fonts),...getFontsFromSharedStyle(sharedStyle1.fonts),...getFontsFromSharedStyle(sharedStyle2.fonts),...getFontsFromSharedStyle(sharedStyle3.fonts),...getFontsFromSharedStyle(sharedStyle4.fonts),...getFontsFromSharedStyle(sharedStyle5.fonts),...getFontsFromSharedStyle(sharedStyle6.fonts),...componentPresets.fonts?.[\"bGrj_P5Hk\"]?getFontsFromComponentPreset(componentPresets.fonts?.[\"bGrj_P5Hk\"]):[],...componentPresets.fonts?.[\"USOOGQvdD\"]?getFontsFromComponentPreset(componentPresets.fonts?.[\"USOOGQvdD\"]):[]],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerqZtbqVS6g\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerVariables\":\"{\\\"ZjOataw8x\\\":\\\"title\\\"}\",\"framerImmutableVariables\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\",\"framerColorSyntax\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerAutoSizeImages\":\"true\",\"framerComponentViewportWidth\":\"true\",\"framerIntrinsicHeight\":\"252\",\"framerIntrinsicWidth\":\"485\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./qZtbqVS6g.map","/*\n * class / Course Title\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/DH7YJmjS42jlu4kOTUwK/M70Tig8OCluXU0xfLqZc/qZtbqVS6g.js\"\nexport { default } from \"https://framerusercontent.com/modules/DH7YJmjS42jlu4kOTUwK/M70Tig8OCluXU0xfLqZc/qZtbqVS6g.js\"\n","// Generated by Framer (15813d8)\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ControlType,cx,RichText,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";const cycleOrder=[\"m6CGN0c1a\",\"EOXxliv42\",\"DmlfyxLV4\",\"gu8c0uaz0\"];const serializationHash=\"framer-XKPpq\";const variantClassNames={DmlfyxLV4:\"framer-v-10imz3x\",EOXxliv42:\"framer-v-13hxbjr\",gu8c0uaz0:\"framer-v-1cwx5gn\",m6CGN0c1a:\"framer-v-z3vf65\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const humanReadableVariantMap={blue300:\"m6CGN0c1a\",positive:\"gu8c0uaz0\",primary500:\"EOXxliv42\",primary700:\"DmlfyxLV4\"};const getProps=({height,id,title,width,...props})=>{var _ref,_humanReadableVariantMap_props_variant,_ref1;return{...props,HmIe2CS40:(_ref=title!==null&&title!==void 0?title:props.HmIe2CS40)!==null&&_ref!==void 0?_ref:\"Basic\",variant:(_ref1=(_humanReadableVariantMap_props_variant=humanReadableVariantMap[props.variant])!==null&&_humanReadableVariantMap_props_variant!==void 0?_humanReadableVariantMap_props_variant:props.variant)!==null&&_ref1!==void 0?_ref1:\"m6CGN0c1a\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,HmIe2CS40,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"m6CGN0c1a\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const ref1=React.useRef(null);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-z3vf65\",className,classNames),\"data-framer-name\":\"blue300\",layoutDependency:layoutDependency,layoutId:\"m6CGN0c1a\",ref:ref!==null&&ref!==void 0?ref:ref1,style:{backgroundColor:\"rgba(0, 153, 255, 0.1)\",borderBottomLeftRadius:5,borderBottomRightRadius:5,borderTopLeftRadius:5,borderTopRightRadius:5,...style},variants:{DmlfyxLV4:{backgroundColor:\"rgba(0, 92, 250, 0.1)\"},EOXxliv42:{backgroundColor:\"rgba(32, 128, 253, 0.1)\"},gu8c0uaz0:{backgroundColor:\"rgba(14, 183, 131, 0.1)\"}},...addPropertyOverrides({DmlfyxLV4:{\"data-framer-name\":\"primary700\"},EOXxliv42:{\"data-framer-name\":\"primary500\"},gu8c0uaz0:{\"data-framer-name\":\"positive\"}},baseVariant,gestureVariant),children:/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"X19TeXN0ZW1EZWZhdWx0LTcwMC1ub3JtYWxfXw==\",\"--framer-font-family\":'\"system-ui\", \"-apple-system\", \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif, \"System Default\", sans-serif',\"--framer-font-size\":\"10px\",\"--framer-font-weight\":\"700\",\"--framer-line-height\":\"11px\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(0, 153, 255))\",\"--framer-text-transform\":\"uppercase\"},children:\"Basic\"})}),className:\"framer-ugzqh6\",fonts:[\"__SystemDefault-700-normal__\"],layoutDependency:layoutDependency,layoutId:\"S7iSxDPRh\",style:{\"--extracted-r6o4lv\":\"rgb(0, 153, 255)\"},text:HmIe2CS40,variants:{DmlfyxLV4:{\"--extracted-r6o4lv\":\"var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250))\"},EOXxliv42:{\"--extracted-r6o4lv\":\"rgb(32, 128, 253)\"},gu8c0uaz0:{\"--extracted-r6o4lv\":\"rgb(14, 183, 131)\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({DmlfyxLV4:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"X19TeXN0ZW1EZWZhdWx0LTcwMC1ub3JtYWxfXw==\",\"--framer-font-family\":'\"system-ui\", \"-apple-system\", \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif, \"System Default\", sans-serif',\"--framer-font-size\":\"10px\",\"--framer-font-weight\":\"700\",\"--framer-line-height\":\"11px\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250)))\",\"--framer-text-transform\":\"uppercase\"},children:\"Basic\"})})},EOXxliv42:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"X19TeXN0ZW1EZWZhdWx0LTcwMC1ub3JtYWxfXw==\",\"--framer-font-family\":'\"system-ui\", \"-apple-system\", \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif, \"System Default\", sans-serif',\"--framer-font-size\":\"10px\",\"--framer-font-weight\":\"700\",\"--framer-line-height\":\"11px\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(32, 128, 253))\",\"--framer-text-transform\":\"uppercase\"},children:\"Basic\"})})},gu8c0uaz0:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"X19TeXN0ZW1EZWZhdWx0LTcwMC1ub3JtYWxfXw==\",\"--framer-font-family\":'\"system-ui\", \"-apple-system\", \"BlinkMacSystemFont\", \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif, \"System Default\", sans-serif',\"--framer-font-size\":\"10px\",\"--framer-font-weight\":\"700\",\"--framer-line-height\":\"11px\",\"--framer-text-alignment\":\"center\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(14, 183, 131))\",\"--framer-text-transform\":\"uppercase\"},children:\"Basic\"})})}},baseVariant,gestureVariant)})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-XKPpq.framer-pyt4e2, .framer-XKPpq .framer-pyt4e2 { display: block; }\",\".framer-XKPpq.framer-z3vf65 { align-content: center; align-items: center; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 0px; height: min-content; justify-content: center; padding: 3px 4px 3px 4px; position: relative; width: min-content; }\",\".framer-XKPpq .framer-ugzqh6 { -webkit-user-select: none; flex: none; height: auto; pointer-events: auto; position: relative; user-select: none; white-space: pre; width: auto; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-XKPpq.framer-z3vf65 { gap: 0px; } .framer-XKPpq.framer-z3vf65 > * { margin: 0px; margin-bottom: calc(0px / 2); margin-top: calc(0px / 2); } .framer-XKPpq.framer-z3vf65 > :first-child { margin-top: 0px; } .framer-XKPpq.framer-z3vf65 > :last-child { margin-bottom: 0px; } }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 17\n * @framerIntrinsicWidth 40\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"auto\",\"auto\"]},\"EOXxliv42\":{\"layout\":[\"auto\",\"auto\"]},\"DmlfyxLV4\":{\"layout\":[\"auto\",\"auto\"]},\"gu8c0uaz0\":{\"layout\":[\"auto\",\"auto\"]}}}\n * @framerVariables {\"HmIe2CS40\":\"title\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerL_qgV81kS=withCSS(Component,css,\"framer-XKPpq\");export default FramerL_qgV81kS;FramerL_qgV81kS.displayName=\"class / Badge\";FramerL_qgV81kS.defaultProps={height:17,width:40};addPropertyControls(FramerL_qgV81kS,{variant:{options:[\"m6CGN0c1a\",\"EOXxliv42\",\"DmlfyxLV4\",\"gu8c0uaz0\"],optionTitles:[\"blue300\",\"primary500\",\"primary700\",\"positive\"],title:\"Variant\",type:ControlType.Enum},HmIe2CS40:{defaultValue:\"Basic\",displayTextArea:false,title:\"Title\",type:ControlType.String}});addFonts(FramerL_qgV81kS,[{explicitInter:true,fonts:[]}],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerL_qgV81kS\",\"slots\":[],\"annotations\":{\"framerVariables\":\"{\\\"HmIe2CS40\\\":\\\"title\\\"}\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]},\\\"EOXxliv42\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]},\\\"DmlfyxLV4\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]},\\\"gu8c0uaz0\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]}}}\",\"framerIntrinsicWidth\":\"40\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"17\",\"framerDisplayContentsDiv\":\"false\",\"framerComponentViewportWidth\":\"true\",\"framerImmutableVariables\":\"true\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./L_qgV81kS.map","// Generated by Framer (15813d8)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ComponentViewportProvider,ControlType,cx,getFonts,RichText,SVG,useActiveVariantCallback,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import ClassBadge from\"https://framerusercontent.com/modules/PPKGDPDpNwE7Pib5UrtX/9q40P0jbWZu2mrfDKAmR/L_qgV81kS.js\";const ClassBadgeFonts=getFonts(ClassBadge);const enabledGestures={IohDfcPBy:{hover:true}};const cycleOrder=[\"IohDfcPBy\",\"NZfMI2NWA\",\"DLrRrcEgb\"];const serializationHash=\"framer-e8eSn\";const variantClassNames={DLrRrcEgb:\"framer-v-rjx21w\",IohDfcPBy:\"framer-v-1jgcywx\",NZfMI2NWA:\"framer-v-1r9jacy\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const isSet=value=>{return value!==undefined&&value!==null&&value!==\"\";};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const humanReadableVariantMap={active:\"NZfMI2NWA\",default:\"IohDfcPBy\",locked:\"DLrRrcEgb\"};const getProps=({category,height,id,onClick,showBadge,showBadges,title,width,...props})=>{var _ref,_humanReadableVariantMap_props_variant,_ref1;return{...props,B_OfjITaX:showBadges!==null&&showBadges!==void 0?showBadges:props.B_OfjITaX,BsCHs94Gy:category!==null&&category!==void 0?category:props.BsCHs94Gy,K0LT0h_gV:(_ref=title!==null&&title!==void 0?title:props.K0LT0h_gV)!==null&&_ref!==void 0?_ref:\"Comfy UI 설치하기 (10:23)\",oaG9Chr4C:showBadge!==null&&showBadge!==void 0?showBadge:props.oaG9Chr4C,variant:(_ref1=(_humanReadableVariantMap_props_variant=humanReadableVariantMap[props.variant])!==null&&_humanReadableVariantMap_props_variant!==void 0?_humanReadableVariantMap_props_variant:props.variant)!==null&&_ref1!==void 0?_ref1:\"IohDfcPBy\",vUdH30LGf:onClick!==null&&onClick!==void 0?onClick:props.vUdH30LGf};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,vUdH30LGf,K0LT0h_gV,B_OfjITaX,oaG9Chr4C,BsCHs94Gy,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"IohDfcPBy\",enabledGestures,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const{activeVariantCallback,delay}=useActiveVariantCallback(baseVariant);const onTap1rr2kdx=activeVariantCallback(async(...args)=>{setGestureState({isPressed:false});if(vUdH30LGf){const res=await vUdH30LGf(...args);if(res===false)return false;}});const ref1=React.useRef(null);const isDisplayed=()=>{if(baseVariant===\"DLrRrcEgb\")return true;return false;};const visible=isSet(BsCHs94Gy);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-1jgcywx\",className,classNames),\"data-framer-name\":\"default\",\"data-highlight\":true,layoutDependency:layoutDependency,layoutId:\"IohDfcPBy\",onTap:onTap1rr2kdx,ref:ref!==null&&ref!==void 0?ref:ref1,style:{borderBottomLeftRadius:12,borderBottomRightRadius:12,borderTopLeftRadius:12,borderTopRightRadius:12,...style},...addPropertyOverrides({\"IohDfcPBy-hover\":{\"data-framer-name\":undefined},DLrRrcEgb:{\"data-framer-name\":\"locked\",\"data-highlight\":undefined,onTap:undefined},NZfMI2NWA:{\"data-framer-name\":\"active\"}},baseVariant,gestureVariant),children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgU2VtaUJvbGQ=\",\"--framer-font-family\":'\"Pretendard SemiBold\", \"Pretendard SemiBold Placeholder\", sans-serif',\"--framer-font-size\":\"14px\",\"--framer-letter-spacing\":\"-0.2px\",\"--framer-line-height\":\"1.5em\",\"--framer-text-alignment\":\"left\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-26444142-8ce9-44e5-934a-21ee2c38f77b, rgb(25, 20, 57)))\"},children:\"Comfy UI 설치하기 (10:23)\"})}),className:\"framer-229wnw\",fonts:[\"CUSTOM;Pretendard SemiBold\"],layoutDependency:layoutDependency,layoutId:\"sUqLJYXyu\",style:{\"--extracted-r6o4lv\":\"var(--token-26444142-8ce9-44e5-934a-21ee2c38f77b, rgb(25, 20, 57))\",\"--framer-link-current-text-color\":\"var(--token-797ef18e-f527-41d0-aadb-3551de64ffca, rgb(34, 0, 255))\",\"--framer-link-hover-text-color\":\"var(--token-797ef18e-f527-41d0-aadb-3551de64ffca, rgb(34, 0, 255))\",\"--framer-link-text-color\":\"var(--token-26444142-8ce9-44e5-934a-21ee2c38f77b, rgb(25, 20, 57))\",\"--framer-link-text-decoration\":\"none\"},text:K0LT0h_gV,variants:{\"IohDfcPBy-hover\":{\"--extracted-r6o4lv\":\"var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250))\"},DLrRrcEgb:{\"--extracted-r6o4lv\":\"rgb(186, 186, 186)\"},NZfMI2NWA:{\"--extracted-r6o4lv\":\"var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250))\"}},verticalAlignment:\"top\",withExternalLayout:true,...addPropertyOverrides({\"IohDfcPBy-hover\":{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgU2VtaUJvbGQ=\",\"--framer-font-family\":'\"Pretendard SemiBold\", \"Pretendard SemiBold Placeholder\", sans-serif',\"--framer-font-size\":\"14px\",\"--framer-letter-spacing\":\"-0.2px\",\"--framer-line-height\":\"1.5em\",\"--framer-text-alignment\":\"left\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250)))\"},children:\"Comfy UI 설치하기 (10:23)\"})})},DLrRrcEgb:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgU2VtaUJvbGQ=\",\"--framer-font-family\":'\"Pretendard SemiBold\", \"Pretendard SemiBold Placeholder\", sans-serif',\"--framer-font-size\":\"14px\",\"--framer-letter-spacing\":\"-0.2px\",\"--framer-line-height\":\"1.5em\",\"--framer-text-alignment\":\"left\",\"--framer-text-color\":\"var(--extracted-r6o4lv, rgb(186, 186, 186))\"},children:\"Comfy UI 설치하기 (10:23)\"})})},NZfMI2NWA:{children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgU2VtaUJvbGQ=\",\"--framer-font-family\":'\"Pretendard SemiBold\", \"Pretendard SemiBold Placeholder\", sans-serif',\"--framer-font-size\":\"14px\",\"--framer-letter-spacing\":\"-0.2px\",\"--framer-line-height\":\"1.5em\",\"--framer-text-alignment\":\"left\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250)))\"},children:\"Comfy UI 설치하기 (10:23)\"})})}},baseVariant,gestureVariant)}),isDisplayed()&&/*#__PURE__*/_jsx(SVG,{className:\"framer-zlss69\",\"data-framer-name\":\"graphic\",fill:\"black\",intrinsicHeight:16,intrinsicWidth:16,layoutDependency:layoutDependency,layoutId:\"yGrP9QxMh\",svg:'<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" viewBox=\"0 0 24 24\" style=\"display:block;margin:0 auto\"><path d=\"M5 22a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2Zm2-11V7a5 5 0 0 1 10 0v4\" fill=\"transparent\" stroke-width=\"2\" stroke=\"#bababa\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>',withExternalLayout:true}),B_OfjITaX&&/*#__PURE__*/_jsxs(motion.div,{className:\"framer-1ku5z74\",layoutDependency:layoutDependency,layoutId:\"tuaVIGw3h\",children:[visible&&/*#__PURE__*/_jsx(ComponentViewportProvider,{height:17,y:((componentViewport===null||componentViewport===void 0?void 0:componentViewport.y)||0)+(16+(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||53)-32-(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||53)-32)*1)/2)+(0+((((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||53)-32)*1-0-17)/2),...addPropertyOverrides({DLrRrcEgb:{y:((componentViewport===null||componentViewport===void 0?void 0:componentViewport.y)||0)+(16+(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||74)-32-(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||74)-32)*1)/2)+(0+((((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||74)-32)*1-0-17)/2)}},baseVariant,gestureVariant),children:/*#__PURE__*/_jsx(motion.div,{className:\"framer-1gv8558-container\",layoutDependency:layoutDependency,layoutId:\"gawDjmk21-container\",children:/*#__PURE__*/_jsx(ClassBadge,{height:\"100%\",HmIe2CS40:BsCHs94Gy,id:\"gawDjmk21\",layoutId:\"gawDjmk21\",variant:\"m6CGN0c1a\",width:\"100%\"})})}),oaG9Chr4C&&/*#__PURE__*/_jsx(ComponentViewportProvider,{height:17,y:((componentViewport===null||componentViewport===void 0?void 0:componentViewport.y)||0)+(16+(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||53)-32-(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||53)-32)*1)/2)+(0+((((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||53)-32)*1-0-17)/2),...addPropertyOverrides({DLrRrcEgb:{y:((componentViewport===null||componentViewport===void 0?void 0:componentViewport.y)||0)+(16+(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||74)-32-(((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||74)-32)*1)/2)+(0+((((componentViewport===null||componentViewport===void 0?void 0:componentViewport.height)||74)-32)*1-0-17)/2)}},baseVariant,gestureVariant),children:/*#__PURE__*/_jsx(motion.div,{className:\"framer-hp145s-container\",layoutDependency:layoutDependency,layoutId:\"Sl0Yq_O8n-container\",children:/*#__PURE__*/_jsx(ClassBadge,{height:\"100%\",HmIe2CS40:\"New\",id:\"Sl0Yq_O8n\",layoutId:\"Sl0Yq_O8n\",variant:\"m6CGN0c1a\",width:\"100%\"})})})]})]})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-e8eSn.framer-4dh2y1, .framer-e8eSn .framer-4dh2y1 { display: block; }\",\".framer-e8eSn.framer-1jgcywx { align-content: center; align-items: center; cursor: pointer; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 48px; height: min-content; justify-content: flex-start; overflow: visible; padding: 16px 4px 16px 4px; position: relative; width: 200px; }\",\".framer-e8eSn .framer-229wnw { flex: 1 0 0px; height: auto; overflow: visible; position: relative; white-space: pre-wrap; width: 1px; word-break: break-word; word-wrap: break-word; }\",\".framer-e8eSn .framer-zlss69 { aspect-ratio: 1 / 1; flex: none; height: var(--framer-aspect-ratio-supported, 16px); position: relative; width: 16px; }\",\".framer-e8eSn .framer-1ku5z74 { align-content: center; align-items: center; align-self: stretch; display: flex; flex: none; flex-direction: row; flex-wrap: nowrap; gap: 8px; height: auto; justify-content: center; overflow: visible; padding: 0px; position: relative; width: min-content; }\",\".framer-e8eSn .framer-1gv8558-container, .framer-e8eSn .framer-hp145s-container { flex: none; height: auto; position: relative; width: auto; z-index: 1; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-e8eSn.framer-1jgcywx, .framer-e8eSn .framer-1ku5z74 { gap: 0px; } .framer-e8eSn.framer-1jgcywx > * { margin: 0px; margin-left: calc(48px / 2); margin-right: calc(48px / 2); } .framer-e8eSn.framer-1jgcywx > :first-child, .framer-e8eSn .framer-1ku5z74 > :first-child { margin-left: 0px; } .framer-e8eSn.framer-1jgcywx > :last-child, .framer-e8eSn .framer-1ku5z74 > :last-child { margin-right: 0px; } .framer-e8eSn .framer-1ku5z74 > * { margin: 0px; margin-left: calc(8px / 2); margin-right: calc(8px / 2); } }\",\".framer-e8eSn.framer-v-rjx21w.framer-1jgcywx { cursor: unset; }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 53\n * @framerIntrinsicWidth 200\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"fixed\",\"auto\"]},\"NZfMI2NWA\":{\"layout\":[\"fixed\",\"auto\"]},\"DLrRrcEgb\":{\"layout\":[\"fixed\",\"auto\"]},\"HvNgYiFQS\":{\"layout\":[\"fixed\",\"auto\"]}}}\n * @framerVariables {\"vUdH30LGf\":\"onClick\",\"K0LT0h_gV\":\"title\",\"B_OfjITaX\":\"showBadges\",\"oaG9Chr4C\":\"showBadge\",\"BsCHs94Gy\":\"category\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerrTlTWfSvU=withCSS(Component,css,\"framer-e8eSn\");export default FramerrTlTWfSvU;FramerrTlTWfSvU.displayName=\"class / Video Item\";FramerrTlTWfSvU.defaultProps={height:53,width:200};addPropertyControls(FramerrTlTWfSvU,{variant:{options:[\"IohDfcPBy\",\"NZfMI2NWA\",\"DLrRrcEgb\"],optionTitles:[\"default\",\"active\",\"locked\"],title:\"Variant\",type:ControlType.Enum},vUdH30LGf:{title:\"On Click\",type:ControlType.EventHandler},K0LT0h_gV:{defaultValue:\"Comfy UI 설치하기 (10:23)\",displayTextArea:false,title:\"title\",type:ControlType.String},B_OfjITaX:{defaultValue:false,title:\"showBadges\",type:ControlType.Boolean},oaG9Chr4C:{defaultValue:false,title:\"showBadge\",type:ControlType.Boolean},BsCHs94Gy:{defaultValue:\"\",displayTextArea:false,placeholder:\"\",title:\"category\",type:ControlType.String}});addFonts(FramerrTlTWfSvU,[{explicitInter:true,fonts:[{family:\"Pretendard SemiBold\",source:\"custom\",url:\"https://framerusercontent.com/assets/DXCK3bs3vdiYSbHJOQav9W2nkwk.woff2\"}]},...ClassBadgeFonts],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerrTlTWfSvU\",\"slots\":[],\"annotations\":{\"framerComponentViewportWidth\":\"true\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"NZfMI2NWA\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"DLrRrcEgb\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]},\\\"HvNgYiFQS\\\":{\\\"layout\\\":[\\\"fixed\\\",\\\"auto\\\"]}}}\",\"framerVariables\":\"{\\\"vUdH30LGf\\\":\\\"onClick\\\",\\\"K0LT0h_gV\\\":\\\"title\\\",\\\"B_OfjITaX\\\":\\\"showBadges\\\",\\\"oaG9Chr4C\\\":\\\"showBadge\\\",\\\"BsCHs94Gy\\\":\\\"category\\\"}\",\"framerDisplayContentsDiv\":\"false\",\"framerContractVersion\":\"1\",\"framerIntrinsicHeight\":\"53\",\"framerIntrinsicWidth\":\"200\",\"framerImmutableVariables\":\"true\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./rTlTWfSvU.map","/*\n * class / Video Item\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/IY8Iw6GpUszVBrWdUrxK/7YXyLUKUO9riWgDlTEpb/rTlTWfSvU.js\"\nexport { default } from \"https://framerusercontent.com/modules/IY8Iw6GpUszVBrWdUrxK/7YXyLUKUO9riWgDlTEpb/rTlTWfSvU.js\"\n","// Generated by Framer (5bbf1f3)\nimport{fontStore}from\"framer\";fontStore.loadFonts([]);export const fonts=[{explicitInter:true,fonts:[]}];export const css=[\".framer-TEXV6 .framer-styles-preset-pjlu09:not(.rich-text-wrapper), .framer-TEXV6 .framer-styles-preset-pjlu09.rich-text-wrapper a { --framer-link-current-text-color: #111111; --framer-link-current-text-decoration: underline; --framer-link-hover-text-color: #0088ff; --framer-link-hover-text-decoration: underline; --framer-link-text-color: var(--token-7c9a8c52-ae10-4871-a89f-bc8d071de9aa, #005dfa); --framer-link-text-decoration: none; }\"];export const className=\"framer-TEXV6\";\nexport const __FramerMetadata__ = {\"exports\":{\"fonts\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"css\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"className\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// Generated by Framer (8e1ebfe)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,cx,getFontsFromSharedStyle,Link,RichText,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import{useRef}from\"react\";import*as sharedStyle from\"https://framerusercontent.com/modules/1PPf8Z5LxViZZGNUlf8W/ekChcq8DOCbOnMvXnsjx/Y9iy1zFI3.js\";const serializationHash=\"framer-xBMKY\";const variantClassNames={hGQhNbWFT:\"framer-v-1n8mczs\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion.create(React.Fragment);const getProps=({height,id,width,...props})=>{return{...props};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const fallbackRef=useRef(null);const refBinding=ref??fallbackRef;const defaultLayoutId=React.useId();const{activeLocale,setLocale}=useLocaleInfo();const componentViewport=useComponentViewport();const{style,className,layoutId,variant,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"hGQhNbWFT\",ref:refBinding,variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[sharedStyle.className];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-1n8mczs\",className,classNames),\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"hGQhNbWFT\",ref:refBinding,style:{...style},children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-font-weight\":\"500\",\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250)))\"},children:\"[공지] ComfyUI Cloud 출시\"}),/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-font-weight\":\"500\",\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-2gxw0f, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:\"ComfyUI 에서 공식적으로 사용하는 Comfy Cloud 앱이 공개 되었습니다\"}),/*#__PURE__*/_jsxs(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-font-weight\":\"500\",\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-1iakedh, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:[\"https://www.comfy.org/cloud\",/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(Link,{href:\"https://drive.google.com/file/d/1YZFuCJAQyvCMXruyMshpVGLP3mmFy0As/view?usp=sharing\",motionChild:true,nodeId:\"EM4MJy5f4\",openInNewTab:true,preserveParams:false,relValues:[],scopeId:\"U_w7ouzJ4\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{children:\"Comfy Cloud 강의 호환 워크플로우 (계속 업데이트 됩니다)\"})})]})]}),className:\"framer-14cvl41\",fonts:[\"CUSTOM;Pretendard Medium\"],layoutDependency:layoutDependency,layoutId:\"EM4MJy5f4\",style:{\"--extracted-1iakedh\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-2gxw0f\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-r6o4lv\":\"var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250))\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-font-weight\":\"500\",\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250)))\"},children:\"[공지] Harbor School 전용 ComfyUI 라이트닝 템플릿 출시\"}),/*#__PURE__*/_jsxs(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-font-weight\":\"500\",\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-2gxw0f, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:[\"\\b설치, 모델 다운로등 복잡한 과정 없이 \",/*#__PURE__*/_jsx(motion.br,{}),\"한번에 강의에 포함된 내용을 따라오실 수 있습니다\"]}),/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-font-weight\":\"500\",\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-1iakedh, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:/*#__PURE__*/_jsx(Link,{href:\"https://lightning.ai/harborschool/studios/harbor-school-ai-comfyui\",motionChild:true,nodeId:\"nDLlFj8sx\",openInNewTab:true,relValues:[],scopeId:\"U_w7ouzJ4\",smoothScroll:false,children:/*#__PURE__*/_jsx(motion.a,{className:\"framer-styles-preset-pjlu09\",\"data-styles-preset\":\"Y9iy1zFI3\",children:\"→ 라이트닝 스튜디오 템플릿 바로가기\"})})})]}),className:\"framer-o499qk\",fonts:[\"CUSTOM;Pretendard Medium\"],layoutDependency:layoutDependency,layoutId:\"nDLlFj8sx\",style:{\"--extracted-1iakedh\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-2gxw0f\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-r6o4lv\":\"var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250))\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsxs(React.Fragment,{children:[/*#__PURE__*/_jsx(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250)))\"},children:\"[이벤트] Nordy AI x Harbor School\"}),/*#__PURE__*/_jsxs(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-2gxw0f, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:[\"nordy.ai 마이페이지 쿠폰 창에 \",/*#__PURE__*/_jsx(motion.strong,{children:\"HARBOR-SCHOOL\"}),\" 를 입력하면 \",/*#__PURE__*/_jsx(motion.br,{}),\"15시간 (3만원 상당) GPU 무료 제공\"]})]}),className:\"framer-qhtvgo\",fonts:[\"CUSTOM;Pretendard Medium\",\"CUSTOMV2;Pretendard Bold\"],layoutDependency:layoutDependency,layoutId:\"OJMXRjqzq\",style:{\"--extracted-2gxw0f\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-r6o4lv\":\"var(--token-7f4c4d51-297a-47a8-88ad-f45d0af21fef, rgb(0, 93, 250))\",\"--framer-link-text-color\":\"rgb(0, 153, 255)\",\"--framer-link-text-decoration\":\"underline\"},verticalAlignment:\"top\",withExternalLayout:true})]})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-xBMKY.framer-1f55drx, .framer-xBMKY .framer-1f55drx { display: block; }\",\".framer-xBMKY.framer-1n8mczs { align-content: flex-start; align-items: flex-start; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 32px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: min-content; }\",\".framer-xBMKY .framer-14cvl41, .framer-xBMKY .framer-o499qk, .framer-xBMKY .framer-qhtvgo { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",...sharedStyle.css];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 416\n * @framerIntrinsicWidth 462.5\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"auto\",\"auto\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerAutoSizeImages true\n * @framerComponentViewportWidth true\n * @framerColorSyntax true\n */const FramerU_w7ouzJ4=withCSS(Component,css,\"framer-xBMKY\");export default FramerU_w7ouzJ4;FramerU_w7ouzJ4.displayName=\"class / Info\";FramerU_w7ouzJ4.defaultProps={height:416,width:462.5};addFonts(FramerU_w7ouzJ4,[{explicitInter:true,fonts:[{cssFamilyName:\"Pretendard Medium\",source:\"custom\",style:\"normal\",uiFamilyName:\"Pretendard\",url:\"https://framerusercontent.com/assets/epBtQURZXgL4OLYz60X1zhOh4o4.woff2\",weight:\"500\"},{cssFamilyName:\"Pretendard Bold\",source:\"custom\",style:\"normal\",uiFamilyName:\"Pretendard\",url:\"https://framerusercontent.com/assets/GHJPBmd4yxGhh5oPHY0HmX7Jl4.woff2\",weight:\"700\"}]},...getFontsFromSharedStyle(sharedStyle.fonts)],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerU_w7ouzJ4\",\"slots\":[],\"annotations\":{\"framerAutoSizeImages\":\"true\",\"framerIntrinsicHeight\":\"416\",\"framerComponentViewportWidth\":\"true\",\"framerContractVersion\":\"1\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]}}}\",\"framerDisplayContentsDiv\":\"false\",\"framerImmutableVariables\":\"true\",\"framerIntrinsicWidth\":\"462.5\",\"framerColorSyntax\":\"true\"}},\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./U_w7ouzJ4.map","/*\n * class / Info\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/Cyss6QoGDtkcfULO0YOF/EJOpJCkEUkzw9bIjtCoh/U_w7ouzJ4.js\"\nexport { default } from \"https://framerusercontent.com/modules/Cyss6QoGDtkcfULO0YOF/EJOpJCkEUkzw9bIjtCoh/U_w7ouzJ4.js\"\n","// Generated by Framer (15813d8)\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{addFonts,addPropertyControls,ComponentViewportProvider,ControlType,cx,Floating,getFonts,useActiveVariantCallback,useComponentViewport,useLocaleInfo,useOverlayState,useVariantState,withCSS,withFX}from\"framer\";import{AnimatePresence,LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import PaymentsPaymentForm from\"https://framerusercontent.com/modules/fC6tZRuwKF5gt2iNqU7K/PrUiWOj4gWTTiSfXbtUp/ctqoUUpVh.js\";import WebButton from\"https://framerusercontent.com/modules/mzDv8x1AG3iUry9rhWll/yTZYKS7L3gWdaKakQAGM/e26fWTkl8.js\";const WebButtonFonts=getFonts(WebButton);const PaymentsPaymentFormFonts=getFonts(PaymentsPaymentForm);const MotionDivWithFX=withFX(motion.div);const cycleOrder=[\"tcOsmc_jo\",\"gZgzbS5Cq\"];const serializationHash=\"framer-dunMK\";const variantClassNames={gZgzbS5Cq:\"framer-v-1z7eu4\",tcOsmc_jo:\"framer-v-jwlkf\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants?.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={damping:60,delay:0,mass:1,stiffness:500,type:\"spring\"};const transition2={damping:30,delay:0,mass:1,stiffness:400,type:\"spring\"};const animation={opacity:0,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,transition:transition2,x:0,y:0};const animation1={opacity:1,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,transition:transition2,x:0,y:0};const animation2={opacity:0,rotate:0,rotateX:0,rotateY:0,scale:1,skewX:0,skewY:0,x:0,y:0};const Overlay=({children,blockDocumentScrolling,enabled=true})=>{const[visible,setVisible]=useOverlayState({blockDocumentScrolling});return children({hide:()=>setVisible(false),show:()=>setVisible(true),toggle:()=>setVisible(!visible),visible:enabled&&visible});};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value??config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const Variants=motion(React.Fragment);const humanReadableVariantMap={Desktop:\"tcOsmc_jo\",Phone:\"gZgzbS5Cq\"};const getProps=({click,height,id,width,...props})=>{return{...props,Qb7DnJ8iN:click??props.Qb7DnJ8iN,variant:humanReadableVariantMap[props.variant]??props.variant??\"tcOsmc_jo\"};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,Qb7DnJ8iN,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({cycleOrder,defaultVariant:\"tcOsmc_jo\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const{activeVariantCallback,delay}=useActiveVariantCallback(baseVariant);const qdfjHAymA10lo0u3=({overlay,paginationInfo})=>activeVariantCallback(async(...args)=>{if(Qb7DnJ8iN){const res=await Qb7DnJ8iN(...args);if(res===false)return false;}overlay.show();});const ref1=React.useRef(null);const ref2=React.useRef(null);const ref3=React.useRef(null);const defaultLayoutId=React.useId();const sharedStyleClassNames=[];const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId??defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsx(motion.div,{...restProps,...gestureHandlers,className:cx(serializationHash,...sharedStyleClassNames,\"framer-jwlkf\",className,classNames),\"data-framer-name\":\"Desktop\",layoutDependency:layoutDependency,layoutId:\"tcOsmc_jo\",ref:ref??ref1,style:{...style},...addPropertyOverrides({gZgzbS5Cq:{\"data-framer-name\":\"Phone\"}},baseVariant,gestureVariant),children:/*#__PURE__*/_jsx(Overlay,{blockDocumentScrolling:false,children:overlay=>/*#__PURE__*/_jsx(_Fragment,{children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:56,y:(componentViewport?.y||0)+(0+((componentViewport?.height||56)-0-56)/2),children:/*#__PURE__*/_jsxs(motion.div,{className:\"framer-m8mpso-container\",id:`${layoutId}-m8mpso`,layoutDependency:layoutDependency,layoutId:\"dSrX_dmuV-container\",ref:ref2,children:[/*#__PURE__*/_jsx(WebButton,{height:\"100%\",id:\"dSrX_dmuV\",layoutId:\"dSrX_dmuV\",qdfjHAymA:qdfjHAymA10lo0u3({overlay}),qGd_L3zY2:\"수강 신청하기\",sLwHAfjpJ:true,variant:\"IyQPoiN0q\",width:\"100%\"}),/*#__PURE__*/_jsx(AnimatePresence,{children:overlay.visible&&/*#__PURE__*/_jsx(Floating,{alignment:\"center\",anchorRef:ref2,className:cx(serializationHash,classNames,...sharedStyleClassNames),collisionDetection:true,collisionDetectionPadding:20,\"data-framer-portal-id\":`${layoutId}-m8mpso`,offsetX:0,offsetY:10,onDismiss:overlay.hide,placement:\"bottom\",portalSelector:\"#overlay\",safeArea:true,zIndex:11,children:/*#__PURE__*/_jsx(MotionDivWithFX,{__perspectiveFX:false,__smartComponentFX:true,__targetOpacity:1,animate:animation1,className:\"framer-sllywk\",exit:animation,initial:animation2,layoutDependency:layoutDependency,layoutId:\"SRTIlbIkS\",ref:ref3,role:\"dialog\",style:{backgroundColor:\"rgb(255, 255, 255)\",borderBottomLeftRadius:10,borderBottomRightRadius:10,borderTopLeftRadius:10,borderTopRightRadius:10,boxShadow:\"0px 10px 20px 0px rgba(0,0,0,0.05)\"},children:/*#__PURE__*/_jsx(ComponentViewportProvider,{height:537,width:\"292px\",y:(componentViewport?.y||0)+(0+((componentViewport?.height||56)-0-56)/2)+0+0,children:/*#__PURE__*/_jsx(motion.div,{className:\"framer-qzr0fv-container\",layoutDependency:layoutDependency,layoutId:\"SLZJIfx7y-container\",children:/*#__PURE__*/_jsx(PaymentsPaymentForm,{height:\"100%\",id:\"SLZJIfx7y\",layoutId:\"SLZJIfx7y\",style:{width:\"100%\"},variant:\"eVKiPLOAw\",width:\"100%\"})})})})})})]})})})})})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-dunMK.framer-10766ln, .framer-dunMK .framer-10766ln { display: block; }\",\".framer-dunMK.framer-jwlkf { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: min-content; }\",\".framer-dunMK .framer-m8mpso-container { flex: none; height: auto; position: relative; width: auto; }\",\".framer-dunMK .framer-sllywk { align-content: center; align-items: center; display: flex; flex-direction: row; flex-wrap: nowrap; gap: 10px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: min-content; will-change: var(--framer-will-change-override, transform); }\",\".framer-dunMK .framer-qzr0fv-container { flex: none; height: auto; position: relative; width: 292px; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-dunMK.framer-jwlkf, .framer-dunMK .framer-sllywk { gap: 0px; } .framer-dunMK.framer-jwlkf > *, .framer-dunMK .framer-sllywk > * { margin: 0px; margin-left: calc(10px / 2); margin-right: calc(10px / 2); } .framer-dunMK.framer-jwlkf > :first-child, .framer-dunMK .framer-sllywk > :first-child { margin-left: 0px; } .framer-dunMK.framer-jwlkf > :last-child, .framer-dunMK .framer-sllywk > :last-child { margin-right: 0px; } }\"];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 56\n * @framerIntrinsicWidth 148.5\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"auto\",\"auto\"]},\"gZgzbS5Cq\":{\"layout\":[\"auto\",\"auto\"]}}}\n * @framerVariables {\"Qb7DnJ8iN\":\"click\"}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramergMV56Irc9=withCSS(Component,css,\"framer-dunMK\");export default FramergMV56Irc9;FramergMV56Irc9.displayName=\"payments / Payment Button\";FramergMV56Irc9.defaultProps={height:56,width:148.5};addPropertyControls(FramergMV56Irc9,{variant:{options:[\"tcOsmc_jo\",\"gZgzbS5Cq\"],optionTitles:[\"Desktop\",\"Phone\"],title:\"Variant\",type:ControlType.Enum},Qb7DnJ8iN:{title:\"Click\",type:ControlType.EventHandler}});addFonts(FramergMV56Irc9,[{explicitInter:true,fonts:[]},...WebButtonFonts,...PaymentsPaymentFormFonts],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"FramergMV56Irc9\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"148.5\",\"framerVariables\":\"{\\\"Qb7DnJ8iN\\\":\\\"click\\\"}\",\"framerImmutableVariables\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerIntrinsicHeight\":\"56\",\"framerComponentViewportWidth\":\"true\",\"framerContractVersion\":\"1\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]},\\\"gZgzbS5Cq\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]}}}\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","/*\n * payments / Payment Button\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/8iCk2zx14xcoRlLqEOJ1/ZGTCpyXhHIbvyKQFJxR4/gMV56Irc9.js\"\nexport { default } from \"https://framerusercontent.com/modules/8iCk2zx14xcoRlLqEOJ1/ZGTCpyXhHIbvyKQFJxR4/gMV56Irc9.js\"\n","// Generated by Framer (5bbf1f3)\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addFonts,cx,getFontsFromSharedStyle,Link,RichText,useComponentViewport,useLocaleInfo,useVariantState,withCSS}from\"framer\";import{LayoutGroup,motion,MotionConfigContext}from\"framer-motion\";import*as React from\"react\";import*as sharedStyle from\"https://framerusercontent.com/modules/1PPf8Z5LxViZZGNUlf8W/ekChcq8DOCbOnMvXnsjx/Y9iy1zFI3.js\";const serializationHash=\"framer-hsAw6\";const variantClassNames={hkOi4v0eI:\"framer-v-19ejqhy\"};function addPropertyOverrides(overrides,...variants){const nextOverrides={};variants===null||variants===void 0?void 0:variants.forEach(variant=>variant&&Object.assign(nextOverrides,overrides[variant]));return nextOverrides;}const transition1={bounce:.2,delay:0,duration:.4,type:\"spring\"};const Transition=({value,children})=>{const config=React.useContext(MotionConfigContext);const transition=value!==null&&value!==void 0?value:config.transition;const contextValue=React.useMemo(()=>({...config,transition}),[JSON.stringify(transition)]);return /*#__PURE__*/_jsx(MotionConfigContext.Provider,{value:contextValue,children:children});};const getProps=({height,id,width,...props})=>{return{...props};};const createLayoutDependency=(props,variants)=>{if(props.layoutDependency)return variants.join(\"-\")+props.layoutDependency;return variants.join(\"-\");};const Variants=motion.create(React.Fragment);const Component=/*#__PURE__*/React.forwardRef(function(props,ref){const{activeLocale,setLocale}=useLocaleInfo();const{style,className,layoutId,variant,...restProps}=getProps(props);const{baseVariant,classNames,clearLoadingGesture,gestureHandlers,gestureVariant,isLoading,setGestureState,setVariant,variants}=useVariantState({defaultVariant:\"hkOi4v0eI\",variant,variantClassNames});const layoutDependency=createLayoutDependency(props,variants);const sharedStyleClassNames=[sharedStyle.className];const scopingClassNames=cx(serializationHash,...sharedStyleClassNames);const ref1=React.useRef(null);const defaultLayoutId=React.useId();const componentViewport=useComponentViewport();return /*#__PURE__*/_jsx(LayoutGroup,{id:layoutId!==null&&layoutId!==void 0?layoutId:defaultLayoutId,children:/*#__PURE__*/_jsx(Variants,{animate:variants,initial:false,children:/*#__PURE__*/_jsx(Transition,{value:transition1,children:/*#__PURE__*/_jsxs(motion.div,{...restProps,...gestureHandlers,className:cx(scopingClassNames,\"framer-19ejqhy\",className,classNames),\"data-framer-name\":\"Variant 1\",layoutDependency:layoutDependency,layoutId:\"hkOi4v0eI\",ref:ref!==null&&ref!==void 0?ref:ref1,style:{...style},children:[/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-0ebb279a-44c9-4ca9-b5ee-9429bfef2737, rgb(37, 49, 60)))\"},children:[/*#__PURE__*/_jsx(motion.strong,{children:\"[온라인 Live / 3주 과정]\"}),/*#__PURE__*/_jsx(motion.strong,{children:/*#__PURE__*/_jsx(motion.br,{})}),/*#__PURE__*/_jsx(motion.strong,{children:\"진짜 광고 이미지를 만들면서 배우는 ComfyUI\"}),/*#__PURE__*/_jsx(motion.strong,{children:/*#__PURE__*/_jsx(motion.br,{})}),/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-143mgqx, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:\"Live 기념 쿠폰 코드 : OPENKAKAO\"}),/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(Link,{href:\"https://ai.harbor.school/courses/comfy-for-real-ads-live\",nodeId:\"m9iPTur51\",openInNewTab:true,smoothScroll:false,children:/*#__PURE__*/_jsxs(motion.a,{className:\"framer-styles-preset-pjlu09\",\"data-styles-preset\":\"Y9iy1zFI3\",children:[/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-158ds2i, var(--token-7c9a8c52-ae10-4871-a89f-bc8d071de9aa, rgb(0, 93, 250)))\"},children:\"→ 신청하기 \"}),/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-5bx7kw, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:\"(21만원 → 19만원)\"})]})})]})}),className:\"framer-kfhtan\",fonts:[\"CUSTOM;Pretendard Medium\"],layoutDependency:layoutDependency,layoutId:\"m9iPTur51\",style:{\"--extracted-143mgqx\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-158ds2i\":\"var(--token-7c9a8c52-ae10-4871-a89f-bc8d071de9aa, rgb(0, 93, 250))\",\"--extracted-5bx7kw\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-r6o4lv\":\"var(--token-0ebb279a-44c9-4ca9-b5ee-9429bfef2737, rgb(37, 49, 60))\"},verticalAlignment:\"top\",withExternalLayout:true}),/*#__PURE__*/_jsx(RichText,{__fromCanvasComponent:true,children:/*#__PURE__*/_jsx(React.Fragment,{children:/*#__PURE__*/_jsxs(motion.p,{style:{\"--font-selector\":\"Q1VTVE9NO1ByZXRlbmRhcmQgTWVkaXVt\",\"--framer-font-family\":'\"Pretendard Medium\", \"Pretendard Medium Placeholder\", sans-serif',\"--framer-line-height\":\"2em\",\"--framer-text-color\":\"var(--extracted-r6o4lv, var(--token-0ebb279a-44c9-4ca9-b5ee-9429bfef2737, rgb(37, 49, 60)))\"},children:[/*#__PURE__*/_jsx(motion.strong,{children:\"[VOD 강의 / 18강 완성]\"}),/*#__PURE__*/_jsx(motion.strong,{children:/*#__PURE__*/_jsx(motion.br,{})}),/*#__PURE__*/_jsx(motion.strong,{children:\"진짜 광고 이미지를 만들면서 배우는 ComfyUI\"}),/*#__PURE__*/_jsx(motion.strong,{children:/*#__PURE__*/_jsx(motion.br,{})}),/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-143mgqx, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:\"Live 기념 쿠폰 코드 : OPENKAKAO2\"}),/*#__PURE__*/_jsx(motion.br,{}),/*#__PURE__*/_jsx(Link,{href:\"https://ai.harbor.school/courses/comfy-for-real-ads\",nodeId:\"MVHmusnkc\",openInNewTab:true,smoothScroll:false,children:/*#__PURE__*/_jsxs(motion.a,{className:\"framer-styles-preset-pjlu09\",\"data-styles-preset\":\"Y9iy1zFI3\",children:[/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-158ds2i, var(--token-7c9a8c52-ae10-4871-a89f-bc8d071de9aa, rgb(0, 93, 250)))\"},children:\"→ 신청하기 \"}),/*#__PURE__*/_jsx(motion.span,{style:{\"--framer-text-color\":\"var(--extracted-5bx7kw, var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60)))\"},children:\"(35만원 → 29만원)\"})]})})]})}),className:\"framer-1q2hi5z\",fonts:[\"CUSTOM;Pretendard Medium\"],layoutDependency:layoutDependency,layoutId:\"MVHmusnkc\",style:{\"--extracted-143mgqx\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-158ds2i\":\"var(--token-7c9a8c52-ae10-4871-a89f-bc8d071de9aa, rgb(0, 93, 250))\",\"--extracted-5bx7kw\":\"var(--token-24683d71-6947-499a-b04a-a14329b3ea4e, rgb(37, 49, 60))\",\"--extracted-r6o4lv\":\"var(--token-0ebb279a-44c9-4ca9-b5ee-9429bfef2737, rgb(37, 49, 60))\"},verticalAlignment:\"top\",withExternalLayout:true})]})})})});});const css=[\"@supports (aspect-ratio: 1) { body { --framer-aspect-ratio-supported: auto; } }\",\".framer-hsAw6.framer-1vpqrr0, .framer-hsAw6 .framer-1vpqrr0 { display: block; }\",\".framer-hsAw6.framer-19ejqhy { align-content: flex-start; align-items: flex-start; display: flex; flex-direction: column; flex-wrap: nowrap; gap: 60px; height: min-content; justify-content: center; overflow: hidden; padding: 0px; position: relative; width: min-content; }\",\".framer-hsAw6 .framer-kfhtan, .framer-hsAw6 .framer-1q2hi5z { flex: none; height: auto; position: relative; white-space: pre; width: auto; }\",\"@supports (background: -webkit-named-image(i)) and (not (font-palette:dark)) { .framer-hsAw6.framer-19ejqhy { gap: 0px; } .framer-hsAw6.framer-19ejqhy > * { margin: 0px; margin-bottom: calc(60px / 2); margin-top: calc(60px / 2); } .framer-hsAw6.framer-19ejqhy > :first-child { margin-top: 0px; } .framer-hsAw6.framer-19ejqhy > :last-child { margin-bottom: 0px; } }\",...sharedStyle.css];/**\n * This is a generated Framer component.\n * @framerIntrinsicHeight 380\n * @framerIntrinsicWidth 290.5\n * @framerCanvasComponentVariantDetails {\"propertyName\":\"variant\",\"data\":{\"default\":{\"layout\":[\"auto\",\"auto\"]}}}\n * @framerImmutableVariables true\n * @framerDisplayContentsDiv false\n * @framerComponentViewportWidth true\n */const FramerJ_CUIzUcf=withCSS(Component,css,\"framer-hsAw6\");export default FramerJ_CUIzUcf;FramerJ_CUIzUcf.displayName=\"LiveEventInfo\";FramerJ_CUIzUcf.defaultProps={height:380,width:290.5};addFonts(FramerJ_CUIzUcf,[{explicitInter:true,fonts:[{family:\"Pretendard Medium\",source:\"custom\",url:\"https://framerusercontent.com/assets/epBtQURZXgL4OLYz60X1zhOh4o4.woff2\"}]},...getFontsFromSharedStyle(sharedStyle.fonts)],{supportsExplicitInterCodegen:true});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"FramerJ_CUIzUcf\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"290.5\",\"framerIntrinsicHeight\":\"380\",\"framerCanvasComponentVariantDetails\":\"{\\\"propertyName\\\":\\\"variant\\\",\\\"data\\\":{\\\"default\\\":{\\\"layout\\\":[\\\"auto\\\",\\\"auto\\\"]}}}\",\"framerContractVersion\":\"1\",\"framerComponentViewportWidth\":\"true\",\"framerDisplayContentsDiv\":\"false\",\"framerImmutableVariables\":\"true\"}},\"Props\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./J_CUIzUcf.map","/*\n * LiveEventInfo\n *\n * Learn More: https://www.framer.com/asset-urls\n */\n\nexport * from \"https://framerusercontent.com/modules/o4S7A3FEFkTChLwEmE9h/FWskgFGdVu0ey3E8Le7a/J_CUIzUcf.js\"\nexport { default } from \"https://framerusercontent.com/modules/o4S7A3FEFkTChLwEmE9h/FWskgFGdVu0ey3E8Le7a/J_CUIzUcf.js\"\n","// src/designComponents/index.ts\nimport Spinner from \"https://framer.com/m/web-Spinner-IdTB.js\";\nimport MenuItem from \"https://framer.com/m/web-MenuItem-oSWT.js\";\nimport CourseCard from \"https://framer.com/m/web-Course-Card-oJCo.js\";\nimport Button from \"https://framer.com/m/web-Button-amAd.js\";\nimport CourseTitle from \"https://framer.com/m/class-Course-Title-s240.js\";\nimport VideoItem from \"https://framer.com/m/class-Video-Item-Qr97.js\";\nimport NordyInfo from \"https://framer.com/m/class-Info-ii1V.js\";\nimport PaymentButton from \"https://framer.com/m/payments-Payment-Button-oYzB.js\";\nimport LiveEventInfo from \"https://framer.com/m/LiveEventInfo-1uhR.js\";\n\nexport {\n  Spinner,\n  MenuItem,\n  CourseCard,\n  Button,\n  CourseTitle,\n  VideoItem,\n  NordyInfo,\n  PaymentButton,\n  LiveEventInfo\n};\n","import {\n  __async,\n  __objRest,\n  __pow,\n  __spreadProps,\n  __spreadValues,\n  __superGet\n} from \"./chunk-JWK35I2R.mjs\";\n\n// node_modules/.pnpm/@mux+mux-player-react@2.9.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@mux/mux-player-react/dist/index.mjs\nimport y4, { useEffect as ue5 } from \"react\";\n\n// node_modules/.pnpm/mux-embed@5.2.1/node_modules/mux-embed/dist/mux.mjs\nvar $r = Object.create;\nvar ct = Object.defineProperty;\nvar Zr = Object.getOwnPropertyDescriptor;\nvar ei = Object.getOwnPropertyNames;\nvar ti = Object.getPrototypeOf;\nvar ri = Object.prototype.hasOwnProperty;\nvar ft = function(r10, e) {\n  return function() {\n    return r10 && (e = r10(r10 = 0)), e;\n  };\n};\nvar H = function(r10, e) {\n  return function() {\n    return e || r10((e = { exports: {} }).exports, e), e.exports;\n  };\n};\nvar ii = function(r10, e, t2, a2) {\n  if (e && typeof e == \"object\" || typeof e == \"function\") for (var i2 = ei(e), n2 = 0, o = i2.length, s; n2 < o; n2++) s = i2[n2], !ri.call(r10, s) && s !== t2 && ct(r10, s, { get: function(f) {\n    return e[f];\n  }.bind(null, s), enumerable: !(a2 = Zr(e, s)) || a2.enumerable });\n  return r10;\n};\nvar B = function(r10, e, t2) {\n  return t2 = r10 != null ? $r(ti(r10)) : {}, ii(e || !r10 || !r10.__esModule ? ct(t2, \"default\", { value: r10, enumerable: true }) : t2, r10);\n};\nvar J = H(function(za, ht2) {\n  var Te4;\n  typeof window != \"undefined\" ? Te4 = window : typeof global != \"undefined\" ? Te4 = global : typeof self != \"undefined\" ? Te4 = self : Te4 = {};\n  ht2.exports = Te4;\n});\nfunction C(r10) {\n  \"@swc/helpers - typeof\";\n  return r10 && typeof Symbol != \"undefined\" && r10.constructor === Symbol ? \"symbol\" : typeof r10;\n}\nvar ke = ft(function() {\n});\nvar gt = H(function(yt4, Ae4) {\n  ke();\n  (function(r10, e) {\n    \"use strict\";\n    typeof define == \"function\" && define.amd ? define(e) : typeof Ae4 == \"object\" && Ae4.exports ? Ae4.exports = e() : r10.log = e();\n  })(yt4, function() {\n    \"use strict\";\n    var r10 = function() {\n    }, e = \"undefined\", t2 = (typeof window == \"undefined\" ? \"undefined\" : C(window)) !== e && C(window.navigator) !== e && /Trident\\/|MSIE /.test(window.navigator.userAgent), a2 = [\"trace\", \"debug\", \"info\", \"warn\", \"error\"];\n    function i2(l, w2) {\n      var D3 = l[w2];\n      if (typeof D3.bind == \"function\") return D3.bind(l);\n      try {\n        return Function.prototype.bind.call(D3, l);\n      } catch (p3) {\n        return function() {\n          return Function.prototype.apply.apply(D3, [l, arguments]);\n        };\n      }\n    }\n    function n2() {\n      console.log && (console.log.apply ? console.log.apply(console, arguments) : Function.prototype.apply.apply(console.log, [console, arguments])), console.trace && console.trace();\n    }\n    function o(l) {\n      return l === \"debug\" && (l = \"log\"), (typeof console == \"undefined\" ? \"undefined\" : C(console)) === e ? false : l === \"trace\" && t2 ? n2 : console[l] !== void 0 ? i2(console, l) : console.log !== void 0 ? i2(console, \"log\") : r10;\n    }\n    function s(l, w2) {\n      for (var D3 = 0; D3 < a2.length; D3++) {\n        var p3 = a2[D3];\n        this[p3] = D3 < l ? r10 : this.methodFactory(p3, l, w2);\n      }\n      this.log = this.debug;\n    }\n    function f(l, w2, D3) {\n      return function() {\n        (typeof console == \"undefined\" ? \"undefined\" : C(console)) !== e && (s.call(this, w2, D3), this[l].apply(this, arguments));\n      };\n    }\n    function h3(l, w2, D3) {\n      return o(l) || f.apply(this, arguments);\n    }\n    function T3(l, w2, D3) {\n      var p3 = this, _3;\n      w2 = w2 == null ? \"WARN\" : w2;\n      var c4 = \"loglevel\";\n      typeof l == \"string\" ? c4 += \":\" + l : (typeof l == \"undefined\" ? \"undefined\" : C(l)) === \"symbol\" && (c4 = void 0);\n      function u3(m3) {\n        var q3 = (a2[m3] || \"silent\").toUpperCase();\n        if (!((typeof window == \"undefined\" ? \"undefined\" : C(window)) === e || !c4)) {\n          try {\n            window.localStorage[c4] = q3;\n            return;\n          } catch (P2) {\n          }\n          try {\n            window.document.cookie = encodeURIComponent(c4) + \"=\" + q3 + \";\";\n          } catch (P2) {\n          }\n        }\n      }\n      function y5() {\n        var m3;\n        if (!((typeof window == \"undefined\" ? \"undefined\" : C(window)) === e || !c4)) {\n          try {\n            m3 = window.localStorage[c4];\n          } catch (L2) {\n          }\n          if ((typeof m3 == \"undefined\" ? \"undefined\" : C(m3)) === e) try {\n            var q3 = window.document.cookie, P2 = q3.indexOf(encodeURIComponent(c4) + \"=\");\n            P2 !== -1 && (m3 = /^([^;]+)/.exec(q3.slice(P2))[1]);\n          } catch (L2) {\n          }\n          return p3.levels[m3] === void 0 && (m3 = void 0), m3;\n        }\n      }\n      function E4() {\n        if (!((typeof window == \"undefined\" ? \"undefined\" : C(window)) === e || !c4)) {\n          try {\n            window.localStorage.removeItem(c4);\n            return;\n          } catch (m3) {\n          }\n          try {\n            window.document.cookie = encodeURIComponent(c4) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n          } catch (m3) {\n          }\n        }\n      }\n      p3.name = l, p3.levels = { TRACE: 0, DEBUG: 1, INFO: 2, WARN: 3, ERROR: 4, SILENT: 5 }, p3.methodFactory = D3 || h3, p3.getLevel = function() {\n        return _3;\n      }, p3.setLevel = function(m3, q3) {\n        if (typeof m3 == \"string\" && p3.levels[m3.toUpperCase()] !== void 0 && (m3 = p3.levels[m3.toUpperCase()]), typeof m3 == \"number\" && m3 >= 0 && m3 <= p3.levels.SILENT) {\n          if (_3 = m3, q3 !== false && u3(m3), s.call(p3, m3, l), (typeof console == \"undefined\" ? \"undefined\" : C(console)) === e && m3 < p3.levels.SILENT) return \"No console available for logging\";\n        } else throw \"log.setLevel() called with invalid level: \" + m3;\n      }, p3.setDefaultLevel = function(m3) {\n        w2 = m3, y5() || p3.setLevel(m3, false);\n      }, p3.resetLevel = function() {\n        p3.setLevel(w2, false), E4();\n      }, p3.enableAll = function(m3) {\n        p3.setLevel(p3.levels.TRACE, m3);\n      }, p3.disableAll = function(m3) {\n        p3.setLevel(p3.levels.SILENT, m3);\n      };\n      var k3 = y5();\n      k3 == null && (k3 = w2), p3.setLevel(k3, false);\n    }\n    var g2 = new T3(), x4 = {};\n    g2.getLogger = function(w2) {\n      if ((typeof w2 == \"undefined\" ? \"undefined\" : C(w2)) !== \"symbol\" && typeof w2 != \"string\" || w2 === \"\") throw new TypeError(\"You must supply a name when creating a logger.\");\n      var D3 = x4[w2];\n      return D3 || (D3 = x4[w2] = new T3(w2, g2.getLevel(), g2.methodFactory)), D3;\n    };\n    var v4 = (typeof window == \"undefined\" ? \"undefined\" : C(window)) !== e ? window.log : void 0;\n    return g2.noConflict = function() {\n      return (typeof window == \"undefined\" ? \"undefined\" : C(window)) !== e && window.log === g2 && (window.log = v4), g2;\n    }, g2.getLoggers = function() {\n      return x4;\n    }, g2.default = g2, g2;\n  });\n});\nfunction U(r10, e) {\n  return e != null && typeof Symbol != \"undefined\" && e[Symbol.hasInstance] ? !!e[Symbol.hasInstance](r10) : U(r10, e);\n}\nvar Z = ft(function() {\n  Z();\n});\nvar Xt = H(function(Ge3) {\n  \"use strict\";\n  var Ai = Object.prototype.hasOwnProperty, Oi;\n  function Kt3(r10) {\n    try {\n      return decodeURIComponent(r10.replace(/\\+/g, \" \"));\n    } catch (e) {\n      return null;\n    }\n  }\n  function Yt3(r10) {\n    try {\n      return encodeURIComponent(r10);\n    } catch (e) {\n      return null;\n    }\n  }\n  function Ii(r10) {\n    for (var e = /([^=?#&]+)=?([^&]*)/g, t2 = {}, a2; a2 = e.exec(r10); ) {\n      var i2 = Kt3(a2[1]), n2 = Kt3(a2[2]);\n      i2 === null || n2 === null || i2 in t2 || (t2[i2] = n2);\n    }\n    return t2;\n  }\n  function Li(r10, e) {\n    e = e || \"\";\n    var t2 = [], a2, i2;\n    typeof e != \"string\" && (e = \"?\");\n    for (i2 in r10) if (Ai.call(r10, i2)) {\n      if (a2 = r10[i2], !a2 && (a2 === null || a2 === Oi || isNaN(a2)) && (a2 = \"\"), i2 = Yt3(i2), a2 = Yt3(a2), i2 === null || a2 === null) continue;\n      t2.push(i2 + \"=\" + a2);\n    }\n    return t2.length ? e + t2.join(\"&\") : \"\";\n  }\n  Ge3.stringify = Li;\n  Ge3.parse = Ii;\n});\nvar er = H(function($t3, Zt4) {\n  \"use strict\";\n  (function(r10) {\n    var e = false;\n    if (typeof define == \"function\" && define.amd && (define(r10), e = true), typeof $t3 == \"object\" && (Zt4.exports = r10(), e = true), !e) {\n      var t2 = window.Cookies, a2 = window.Cookies = r10();\n      a2.noConflict = function() {\n        return window.Cookies = t2, a2;\n      };\n    }\n  })(function() {\n    var r10 = function() {\n      for (var a2 = 0, i2 = {}; a2 < arguments.length; a2++) {\n        var n2 = arguments[a2];\n        for (var o in n2) i2[o] = n2[o];\n      }\n      return i2;\n    };\n    function e(t2) {\n      function a2(i2, n2, o) {\n        var s;\n        if (typeof document != \"undefined\") {\n          if (arguments.length > 1) {\n            if (o = r10({ path: \"/\" }, a2.defaults, o), typeof o.expires == \"number\") {\n              var f = /* @__PURE__ */ new Date();\n              f.setMilliseconds(f.getMilliseconds() + o.expires * 864e5), o.expires = f;\n            }\n            try {\n              s = JSON.stringify(n2), /^[\\{\\[]/.test(s) && (n2 = s);\n            } catch (w2) {\n            }\n            return t2.write ? n2 = t2.write(n2, i2) : n2 = encodeURIComponent(String(n2)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent), i2 = encodeURIComponent(String(i2)), i2 = i2.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent), i2 = i2.replace(/[\\(\\)]/g, escape), document.cookie = [i2, \"=\", n2, o.expires ? \"; expires=\" + o.expires.toUTCString() : \"\", o.path ? \"; path=\" + o.path : \"\", o.domain ? \"; domain=\" + o.domain : \"\", o.secure ? \"; secure\" : \"\"].join(\"\");\n          }\n          i2 || (s = {});\n          for (var h3 = document.cookie ? document.cookie.split(\"; \") : [], T3 = /(%[0-9A-Z]{2})+/g, g2 = 0; g2 < h3.length; g2++) {\n            var x4 = h3[g2].split(\"=\"), v4 = x4.slice(1).join(\"=\");\n            v4.charAt(0) === '\"' && (v4 = v4.slice(1, -1));\n            try {\n              var l = x4[0].replace(T3, decodeURIComponent);\n              if (v4 = t2.read ? t2.read(v4, l) : t2(v4, l) || v4.replace(T3, decodeURIComponent), this.json) try {\n                v4 = JSON.parse(v4);\n              } catch (w2) {\n              }\n              if (i2 === l) {\n                s = v4;\n                break;\n              }\n              i2 || (s[l] = v4);\n            } catch (w2) {\n            }\n          }\n          return s;\n        }\n      }\n      return a2.set = a2, a2.get = function(i2) {\n        return a2.call(a2, i2);\n      }, a2.getJSON = function() {\n        return a2.apply({ json: true }, [].slice.call(arguments));\n      }, a2.defaults = {}, a2.remove = function(i2, n2) {\n        a2(i2, \"\", r10(n2, { expires: -1 }));\n      }, a2.withConverter = e, a2;\n    }\n    return e(function() {\n    });\n  });\n});\nvar Ke = H(function(du, gr) {\n  var yr = Array.prototype.slice;\n  gr.exports = $i;\n  function $i(r10, e) {\n    for ((\"length\" in r10) || (r10 = [r10]), r10 = yr.call(r10); r10.length; ) {\n      var t2 = r10.shift(), a2 = e(t2);\n      if (a2) return a2;\n      t2.childNodes && t2.childNodes.length && (r10 = yr.call(t2.childNodes).concat(r10));\n    }\n  }\n});\nvar wr = H(function(cu, br) {\n  Z();\n  br.exports = pe4;\n  function pe4(r10, e) {\n    if (!U(this, pe4)) return new pe4(r10, e);\n    this.data = r10, this.nodeValue = r10, this.length = r10.length, this.ownerDocument = e || null;\n  }\n  pe4.prototype.nodeType = 8;\n  pe4.prototype.nodeName = \"#comment\";\n  pe4.prototype.toString = function() {\n    return \"[object Comment]\";\n  };\n});\nvar Er = H(function(_u, Tr) {\n  Z();\n  Tr.exports = re5;\n  function re5(r10, e) {\n    if (!U(this, re5)) return new re5(r10);\n    this.data = r10 || \"\", this.length = this.data.length, this.ownerDocument = e || null;\n  }\n  re5.prototype.type = \"DOMTextNode\";\n  re5.prototype.nodeType = 3;\n  re5.prototype.nodeName = \"#text\";\n  re5.prototype.toString = function() {\n    return this.data;\n  };\n  re5.prototype.replaceData = function(e, t2, a2) {\n    var i2 = this.data, n2 = i2.substring(0, e), o = i2.substring(e + t2, i2.length);\n    this.data = n2 + a2 + o, this.length = this.data.length;\n  };\n});\nvar Ye = H(function(pu, kr) {\n  kr.exports = Zi;\n  function Zi(r10) {\n    var e = this, t2 = r10.type;\n    r10.target || (r10.target = e), e.listeners || (e.listeners = {});\n    var a2 = e.listeners[t2];\n    if (a2) return a2.forEach(function(i2) {\n      r10.currentTarget = e, typeof i2 == \"function\" ? i2(r10) : i2.handleEvent(r10);\n    });\n    e.parentNode && e.parentNode.dispatchEvent(r10);\n  }\n});\nvar Xe = H(function(vu, xr) {\n  xr.exports = ea;\n  function ea(r10, e) {\n    var t2 = this;\n    t2.listeners || (t2.listeners = {}), t2.listeners[r10] || (t2.listeners[r10] = []), t2.listeners[r10].indexOf(e) === -1 && t2.listeners[r10].push(e);\n  }\n});\nvar $e = H(function(mu, Dr) {\n  Dr.exports = ta2;\n  function ta2(r10, e) {\n    var t2 = this;\n    if (t2.listeners && t2.listeners[r10]) {\n      var a2 = t2.listeners[r10], i2 = a2.indexOf(e);\n      i2 !== -1 && a2.splice(i2, 1);\n    }\n  }\n});\nvar Ar = H(function(yu, qr) {\n  ke();\n  qr.exports = Sr;\n  var ra2 = [\"area\", \"base\", \"br\", \"col\", \"embed\", \"hr\", \"img\", \"input\", \"keygen\", \"link\", \"menuitem\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"];\n  function Sr(r10) {\n    switch (r10.nodeType) {\n      case 3:\n        return Ze3(r10.data);\n      case 8:\n        return \"<!--\" + r10.data + \"-->\";\n      default:\n        return ia2(r10);\n    }\n  }\n  function ia2(r10) {\n    var e = [], t2 = r10.tagName;\n    return r10.namespaceURI === \"http://www.w3.org/1999/xhtml\" && (t2 = t2.toLowerCase()), e.push(\"<\" + t2 + sa2(r10) + oa2(r10)), ra2.indexOf(t2) > -1 ? e.push(\" />\") : (e.push(\">\"), r10.childNodes.length ? e.push.apply(e, r10.childNodes.map(Sr)) : r10.textContent || r10.innerText ? e.push(Ze3(r10.textContent || r10.innerText)) : r10.innerHTML && e.push(r10.innerHTML), e.push(\"</\" + t2 + \">\")), e.join(\"\");\n  }\n  function aa(r10, e) {\n    var t2 = C(r10[e]);\n    return e === \"style\" && Object.keys(r10.style).length > 0 ? true : r10.hasOwnProperty(e) && (t2 === \"string\" || t2 === \"boolean\" || t2 === \"number\") && e !== \"nodeName\" && e !== \"className\" && e !== \"tagName\" && e !== \"textContent\" && e !== \"innerText\" && e !== \"namespaceURI\" && e !== \"innerHTML\";\n  }\n  function na2(r10) {\n    if (typeof r10 == \"string\") return r10;\n    var e = \"\";\n    return Object.keys(r10).forEach(function(t2) {\n      var a2 = r10[t2];\n      t2 = t2.replace(/[A-Z]/g, function(i2) {\n        return \"-\" + i2.toLowerCase();\n      }), e += t2 + \":\" + a2 + \";\";\n    }), e;\n  }\n  function oa2(r10) {\n    var e = r10.dataset, t2 = [];\n    for (var a2 in e) t2.push({ name: \"data-\" + a2, value: e[a2] });\n    return t2.length ? Rr(t2) : \"\";\n  }\n  function Rr(r10) {\n    var e = [];\n    return r10.forEach(function(t2) {\n      var a2 = t2.name, i2 = t2.value;\n      a2 === \"style\" && (i2 = na2(i2)), e.push(a2 + '=\"' + ua2(i2) + '\"');\n    }), e.length ? \" \" + e.join(\" \") : \"\";\n  }\n  function sa2(r10) {\n    var e = [];\n    for (var t2 in r10) aa(r10, t2) && e.push({ name: t2, value: r10[t2] });\n    for (var a2 in r10._attributes) for (var i2 in r10._attributes[a2]) {\n      var n2 = r10._attributes[a2][i2], o = (n2.prefix ? n2.prefix + \":\" : \"\") + i2;\n      e.push({ name: o, value: n2.value });\n    }\n    return r10.className && e.push({ name: \"class\", value: r10.className }), e.length ? Rr(e) : \"\";\n  }\n  function Ze3(r10) {\n    var e = \"\";\n    return typeof r10 == \"string\" ? e = r10 : r10 && (e = r10.toString()), e.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n  }\n  function ua2(r10) {\n    return Ze3(r10).replace(/\"/g, \"&quot;\");\n  }\n});\nvar tt = H(function(bu, Ir) {\n  Z();\n  var et3 = Ke(), da2 = Ye(), la2 = Xe(), ca = $e(), fa2 = Ar(), Or = \"http://www.w3.org/1999/xhtml\";\n  Ir.exports = N3;\n  function N3(r10, e, t2) {\n    if (!U(this, N3)) return new N3(r10);\n    var a2 = t2 === void 0 ? Or : t2 || null;\n    this.tagName = a2 === Or ? String(r10).toUpperCase() : r10, this.nodeName = this.tagName, this.className = \"\", this.dataset = {}, this.childNodes = [], this.parentNode = null, this.style = {}, this.ownerDocument = e || null, this.namespaceURI = a2, this._attributes = {}, this.tagName === \"INPUT\" && (this.type = \"text\");\n  }\n  N3.prototype.type = \"DOMElement\";\n  N3.prototype.nodeType = 1;\n  N3.prototype.appendChild = function(e) {\n    return e.parentNode && e.parentNode.removeChild(e), this.childNodes.push(e), e.parentNode = this, e;\n  };\n  N3.prototype.replaceChild = function(e, t2) {\n    e.parentNode && e.parentNode.removeChild(e);\n    var a2 = this.childNodes.indexOf(t2);\n    return t2.parentNode = null, this.childNodes[a2] = e, e.parentNode = this, t2;\n  };\n  N3.prototype.removeChild = function(e) {\n    var t2 = this.childNodes.indexOf(e);\n    return this.childNodes.splice(t2, 1), e.parentNode = null, e;\n  };\n  N3.prototype.insertBefore = function(e, t2) {\n    e.parentNode && e.parentNode.removeChild(e);\n    var a2 = t2 == null ? -1 : this.childNodes.indexOf(t2);\n    return a2 > -1 ? this.childNodes.splice(a2, 0, e) : this.childNodes.push(e), e.parentNode = this, e;\n  };\n  N3.prototype.setAttributeNS = function(e, t2, a2) {\n    var i2 = null, n2 = t2, o = t2.indexOf(\":\");\n    if (o > -1 && (i2 = t2.substr(0, o), n2 = t2.substr(o + 1)), this.tagName === \"INPUT\" && t2 === \"type\") this.type = a2;\n    else {\n      var s = this._attributes[e] || (this._attributes[e] = {});\n      s[n2] = { value: a2, prefix: i2 };\n    }\n  };\n  N3.prototype.getAttributeNS = function(e, t2) {\n    var a2 = this._attributes[e], i2 = a2 && a2[t2] && a2[t2].value;\n    return this.tagName === \"INPUT\" && t2 === \"type\" ? this.type : typeof i2 != \"string\" ? null : i2;\n  };\n  N3.prototype.removeAttributeNS = function(e, t2) {\n    var a2 = this._attributes[e];\n    a2 && delete a2[t2];\n  };\n  N3.prototype.hasAttributeNS = function(e, t2) {\n    var a2 = this._attributes[e];\n    return !!a2 && t2 in a2;\n  };\n  N3.prototype.setAttribute = function(e, t2) {\n    return this.setAttributeNS(null, e, t2);\n  };\n  N3.prototype.getAttribute = function(e) {\n    return this.getAttributeNS(null, e);\n  };\n  N3.prototype.removeAttribute = function(e) {\n    return this.removeAttributeNS(null, e);\n  };\n  N3.prototype.hasAttribute = function(e) {\n    return this.hasAttributeNS(null, e);\n  };\n  N3.prototype.removeEventListener = ca;\n  N3.prototype.addEventListener = la2;\n  N3.prototype.dispatchEvent = da2;\n  N3.prototype.focus = function() {\n  };\n  N3.prototype.toString = function() {\n    return fa2(this);\n  };\n  N3.prototype.getElementsByClassName = function(e) {\n    var t2 = e.split(\" \"), a2 = [];\n    return et3(this, function(i2) {\n      if (i2.nodeType === 1) {\n        var n2 = i2.className || \"\", o = n2.split(\" \");\n        t2.every(function(s) {\n          return o.indexOf(s) !== -1;\n        }) && a2.push(i2);\n      }\n    }), a2;\n  };\n  N3.prototype.getElementsByTagName = function(e) {\n    e = e.toLowerCase();\n    var t2 = [];\n    return et3(this.childNodes, function(a2) {\n      a2.nodeType === 1 && (e === \"*\" || a2.tagName.toLowerCase() === e) && t2.push(a2);\n    }), t2;\n  };\n  N3.prototype.contains = function(e) {\n    return et3(this, function(t2) {\n      return e === t2;\n    }) || false;\n  };\n});\nvar Nr = H(function(Tu, Lr) {\n  Z();\n  var rt3 = tt();\n  Lr.exports = z2;\n  function z2(r10) {\n    if (!U(this, z2)) return new z2();\n    this.childNodes = [], this.parentNode = null, this.ownerDocument = r10 || null;\n  }\n  z2.prototype.type = \"DocumentFragment\";\n  z2.prototype.nodeType = 11;\n  z2.prototype.nodeName = \"#document-fragment\";\n  z2.prototype.appendChild = rt3.prototype.appendChild;\n  z2.prototype.replaceChild = rt3.prototype.replaceChild;\n  z2.prototype.removeChild = rt3.prototype.removeChild;\n  z2.prototype.toString = function() {\n    return this.childNodes.map(function(e) {\n      return String(e);\n    }).join(\"\");\n  };\n});\nvar Cr = H(function(Eu, Pr) {\n  Pr.exports = it2;\n  function it2(r10) {\n  }\n  it2.prototype.initEvent = function(e, t2, a2) {\n    this.type = e, this.bubbles = t2, this.cancelable = a2;\n  };\n  it2.prototype.preventDefault = function() {\n  };\n});\nvar Hr = H(function(xu, Mr) {\n  Z();\n  var _a3 = Ke(), pa2 = wr(), va = Er(), Se3 = tt(), ma2 = Nr(), ha2 = Cr(), ya = Ye(), ga2 = Xe(), ba2 = $e();\n  Mr.exports = He3;\n  function He3() {\n    if (!U(this, He3)) return new He3();\n    this.head = this.createElement(\"head\"), this.body = this.createElement(\"body\"), this.documentElement = this.createElement(\"html\"), this.documentElement.appendChild(this.head), this.documentElement.appendChild(this.body), this.childNodes = [this.documentElement], this.nodeType = 9;\n  }\n  var V4 = He3.prototype;\n  V4.createTextNode = function(e) {\n    return new va(e, this);\n  };\n  V4.createElementNS = function(e, t2) {\n    var a2 = e === null ? null : String(e);\n    return new Se3(t2, this, a2);\n  };\n  V4.createElement = function(e) {\n    return new Se3(e, this);\n  };\n  V4.createDocumentFragment = function() {\n    return new ma2(this);\n  };\n  V4.createEvent = function(e) {\n    return new ha2(e);\n  };\n  V4.createComment = function(e) {\n    return new pa2(e, this);\n  };\n  V4.getElementById = function(e) {\n    e = String(e);\n    var t2 = _a3(this.childNodes, function(a2) {\n      if (String(a2.id) === e) return a2;\n    });\n    return t2 || null;\n  };\n  V4.getElementsByClassName = Se3.prototype.getElementsByClassName;\n  V4.getElementsByTagName = Se3.prototype.getElementsByTagName;\n  V4.contains = Se3.prototype.contains;\n  V4.removeEventListener = ba2;\n  V4.addEventListener = ga2;\n  V4.dispatchEvent = ya;\n});\nvar Ur = H(function(Du, Br) {\n  var wa2 = Hr();\n  Br.exports = new wa2();\n});\nvar Wr = H(function(Su, Vr) {\n  var Fr = typeof global != \"undefined\" ? global : typeof window != \"undefined\" ? window : {}, Ta = Ur(), Re4;\n  typeof document != \"undefined\" ? Re4 = document : (Re4 = Fr[\"__GLOBAL_DOCUMENT_CACHE@4\"], Re4 || (Re4 = Fr[\"__GLOBAL_DOCUMENT_CACHE@4\"] = Ta));\n  Vr.exports = Re4;\n});\nfunction _t(r10) {\n  if (Array.isArray(r10)) return r10;\n}\nfunction pt(r10, e) {\n  var t2 = r10 == null ? null : typeof Symbol != \"undefined\" && r10[Symbol.iterator] || r10[\"@@iterator\"];\n  if (t2 != null) {\n    var a2 = [], i2 = true, n2 = false, o, s;\n    try {\n      for (t2 = t2.call(r10); !(i2 = (o = t2.next()).done) && (a2.push(o.value), !(e && a2.length === e)); i2 = true) ;\n    } catch (f) {\n      n2 = true, s = f;\n    } finally {\n      try {\n        !i2 && t2.return != null && t2.return();\n      } finally {\n        if (n2) throw s;\n      }\n    }\n    return a2;\n  }\n}\nfunction vt() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction We(r10, e) {\n  (e == null || e > r10.length) && (e = r10.length);\n  for (var t2 = 0, a2 = new Array(e); t2 < e; t2++) a2[t2] = r10[t2];\n  return a2;\n}\nfunction mt(r10, e) {\n  if (r10) {\n    if (typeof r10 == \"string\") return We(r10, e);\n    var t2 = Object.prototype.toString.call(r10).slice(8, -1);\n    if (t2 === \"Object\" && r10.constructor && (t2 = r10.constructor.name), t2 === \"Map\" || t2 === \"Set\") return Array.from(t2);\n    if (t2 === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t2)) return We(r10, e);\n  }\n}\nfunction j(r10, e) {\n  return _t(r10) || pt(r10, e) || mt(r10, e) || vt();\n}\nvar ye = B(J());\nvar X = function() {\n  return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(e) {\n    var t2 = Math.random() * 16 | 0, a2 = e === \"x\" ? t2 : t2 & 3 | 8;\n    return a2.toString(16);\n  });\n};\nvar qe = function() {\n  return (\"000000\" + (Math.random() * Math.pow(36, 6) << 0).toString(36)).slice(-6);\n};\nvar $ = function(e) {\n  if (e && typeof e.nodeName != \"undefined\") return e.muxId || (e.muxId = qe()), e.muxId;\n  var t2;\n  try {\n    t2 = document.querySelector(e);\n  } catch (a2) {\n  }\n  return t2 && !t2.muxId && (t2.muxId = e), (t2 == null ? void 0 : t2.muxId) || e;\n};\nvar Ee = function(e) {\n  var t2;\n  e && typeof e.nodeName != \"undefined\" ? (t2 = e, e = $(t2)) : t2 = document.querySelector(e);\n  var a2 = t2 && t2.nodeName ? t2.nodeName.toLowerCase() : \"\";\n  return [t2, e, a2];\n};\nvar ue = B(gt());\nvar ai = ue.default.methodFactory;\nue.default.methodFactory = function(r10, e, t2) {\n  var a2 = ai(r10, e, t2);\n  return function() {\n    for (var i2 = [\"[mux]\"], n2 = 0; n2 < arguments.length; n2++) i2.push(arguments[n2]);\n    a2.apply(void 0, i2);\n  };\n};\nue.default.setLevel(ue.default.getLevel());\nvar I = ue.default;\nvar Oe = B(J());\nfunction de() {\n  var r10 = Oe.default.doNotTrack || Oe.default.navigator && Oe.default.navigator.doNotTrack;\n  return r10 === \"1\";\n}\nvar bt = B(J());\nvar ni = { now: function() {\n  var r10 = bt.default.performance, e = r10 && r10.timing, t2 = e && e.navigationStart, a2 = typeof t2 == \"number\" && typeof r10.now == \"function\" ? t2 + r10.now() : Date.now();\n  return Math.round(a2);\n} };\nvar A = ni;\nfunction b(r10) {\n  if (r10 === void 0) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return r10;\n}\nZ();\nfunction S(r10, e) {\n  if (!U(r10, e)) throw new TypeError(\"Cannot call a class as a function\");\n}\nfunction wt(r10, e) {\n  for (var t2 = 0; t2 < e.length; t2++) {\n    var a2 = e[t2];\n    a2.enumerable = a2.enumerable || false, a2.configurable = true, \"value\" in a2 && (a2.writable = true), Object.defineProperty(r10, a2.key, a2);\n  }\n}\nfunction M(r10, e, t2) {\n  return e && wt(r10.prototype, e), t2 && wt(r10, t2), r10;\n}\nfunction d(r10, e, t2) {\n  return e in r10 ? Object.defineProperty(r10, e, { value: t2, enumerable: true, configurable: true, writable: true }) : r10[e] = t2, r10;\n}\nfunction Ie(r10, e) {\n  return Ie = Object.setPrototypeOf || function(a2, i2) {\n    return a2.__proto__ = i2, a2;\n  }, Ie(r10, e);\n}\nfunction Tt(r10, e) {\n  if (typeof e != \"function\" && e !== null) throw new TypeError(\"Super expression must either be null or a function\");\n  r10.prototype = Object.create(e && e.prototype, { constructor: { value: r10, writable: true, configurable: true } }), e && Ie(r10, e);\n}\nfunction xe(r10) {\n  return xe = Object.setPrototypeOf ? Object.getPrototypeOf : function(t2) {\n    return t2.__proto__ || Object.getPrototypeOf(t2);\n  }, xe(r10);\n}\nfunction Et() {\n  if (typeof Reflect == \"undefined\" || !Reflect.construct || Reflect.construct.sham) return false;\n  if (typeof Proxy == \"function\") return true;\n  try {\n    return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {\n    })), true;\n  } catch (r10) {\n    return false;\n  }\n}\nke();\nfunction kt(r10, e) {\n  return e && (C(e) === \"object\" || typeof e == \"function\") ? e : b(r10);\n}\nfunction xt(r10) {\n  var e = Et();\n  return function() {\n    var a2 = xe(r10), i2;\n    if (e) {\n      var n2 = xe(this).constructor;\n      i2 = Reflect.construct(a2, arguments, n2);\n    } else i2 = a2.apply(this, arguments);\n    return kt(this, i2);\n  };\n}\nvar F = function(r10) {\n  return ee(r10)[0];\n};\nvar ee = function(r10) {\n  if (typeof r10 != \"string\" || r10 === \"\") return [\"localhost\"];\n  var e = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/, t2 = r10.match(e) || [], a2 = t2[4], i2;\n  return a2 && (i2 = (a2.match(/[^\\.]+\\.[^\\.]+$/) || [])[0]), [a2, i2];\n};\nvar Le = B(J());\nvar oi = { exists: function() {\n  var r10 = Le.default.performance, e = r10 && r10.timing;\n  return e !== void 0;\n}, domContentLoadedEventEnd: function() {\n  var r10 = Le.default.performance, e = r10 && r10.timing;\n  return e && e.domContentLoadedEventEnd;\n}, navigationStart: function() {\n  var r10 = Le.default.performance, e = r10 && r10.timing;\n  return e && e.navigationStart;\n} };\nvar le = oi;\nfunction O(r10, e, t2) {\n  t2 = t2 === void 0 ? 1 : t2, r10[e] = r10[e] || 0, r10[e] += t2;\n}\nfunction ne(r10) {\n  for (var e = 1; e < arguments.length; e++) {\n    var t2 = arguments[e] != null ? arguments[e] : {}, a2 = Object.keys(t2);\n    typeof Object.getOwnPropertySymbols == \"function\" && (a2 = a2.concat(Object.getOwnPropertySymbols(t2).filter(function(i2) {\n      return Object.getOwnPropertyDescriptor(t2, i2).enumerable;\n    }))), a2.forEach(function(i2) {\n      d(r10, i2, t2[i2]);\n    });\n  }\n  return r10;\n}\nfunction si(r10, e) {\n  var t2 = Object.keys(r10);\n  if (Object.getOwnPropertySymbols) {\n    var a2 = Object.getOwnPropertySymbols(r10);\n    e && (a2 = a2.filter(function(i2) {\n      return Object.getOwnPropertyDescriptor(r10, i2).enumerable;\n    })), t2.push.apply(t2, a2);\n  }\n  return t2;\n}\nfunction ce(r10, e) {\n  return e = e != null ? e : {}, Object.getOwnPropertyDescriptors ? Object.defineProperties(r10, Object.getOwnPropertyDescriptors(e)) : si(Object(e)).forEach(function(t2) {\n    Object.defineProperty(r10, t2, Object.getOwnPropertyDescriptor(e, t2));\n  }), r10;\n}\nvar ui = [\"x-cdn\", \"content-type\"];\nvar Dt = [\"x-request-id\", \"cf-ray\", \"x-amz-cf-id\", \"x-akamai-request-id\"];\nvar di = ui.concat(Dt);\nfunction fe(r10) {\n  r10 = r10 || \"\";\n  var e = {}, t2 = r10.trim().split(/[\\r\\n]+/);\n  return t2.forEach(function(a2) {\n    if (a2) {\n      var i2 = a2.split(\": \"), n2 = i2.shift();\n      n2 && (di.indexOf(n2.toLowerCase()) >= 0 || n2.toLowerCase().indexOf(\"x-litix-\") === 0) && (e[n2] = i2.join(\": \"));\n    }\n  }), e;\n}\nfunction oe(r10) {\n  if (r10) {\n    var e = Dt.find(function(t2) {\n      return r10[t2] !== void 0;\n    });\n    return e ? r10[e] : void 0;\n  }\n}\nvar li = function(r10) {\n  var e = {};\n  for (var t2 in r10) {\n    var a2 = r10[t2], i2 = a2[\"DATA-ID\"].search(\"io.litix.data.\");\n    if (i2 !== -1) {\n      var n2 = a2[\"DATA-ID\"].replace(\"io.litix.data.\", \"\");\n      e[n2] = a2.VALUE;\n    }\n  }\n  return e;\n};\nvar Ne = li;\nvar Pe = function(r10) {\n  if (!r10) return {};\n  var e = le.navigationStart(), t2 = r10.loading, a2 = t2 ? t2.start : r10.trequest, i2 = t2 ? t2.first : r10.tfirst, n2 = t2 ? t2.end : r10.tload;\n  return { bytesLoaded: r10.total, requestStart: Math.round(e + a2), responseStart: Math.round(e + i2), responseEnd: Math.round(e + n2) };\n};\nvar De = function(r10) {\n  if (!(!r10 || typeof r10.getAllResponseHeaders != \"function\")) return fe(r10.getAllResponseHeaders());\n};\nvar St = function(r10, e, t2) {\n  var a2 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}, i2 = arguments.length > 4 ? arguments[4] : void 0, n2 = r10.log, o = r10.utils.secondsToMs, s = function(p3) {\n    var _3 = parseInt(i2.version), c4;\n    return _3 === 1 && p3.programDateTime !== null && (c4 = p3.programDateTime), _3 === 0 && p3.pdt !== null && (c4 = p3.pdt), c4;\n  };\n  if (!le.exists()) {\n    n2.warn(\"performance timing not supported. Not tracking HLS.js.\");\n    return;\n  }\n  var f = function(p3, _3) {\n    return r10.emit(e, p3, _3);\n  }, h3 = function(p3, _3) {\n    var c4 = _3.levels, u3 = _3.audioTracks, y5 = _3.url, E4 = _3.stats, k3 = _3.networkDetails, m3 = _3.sessionData, q3 = {}, P2 = {};\n    c4.forEach(function(W4, ae5) {\n      q3[ae5] = { width: W4.width, height: W4.height, bitrate: W4.bitrate, attrs: W4.attrs };\n    }), u3.forEach(function(W4, ae5) {\n      P2[ae5] = { name: W4.name, language: W4.lang, bitrate: W4.bitrate };\n    });\n    var L2 = Pe(E4), R2 = L2.bytesLoaded, Y5 = L2.requestStart, ge4 = L2.responseStart, be3 = L2.responseEnd;\n    f(\"requestcompleted\", ce(ne({}, Ne(m3)), { request_event_type: p3, request_bytes_loaded: R2, request_start: Y5, request_response_start: ge4, request_response_end: be3, request_type: \"manifest\", request_hostname: F(y5), request_response_headers: De(k3), request_rendition_lists: { media: q3, audio: P2, video: {} } }));\n  };\n  t2.on(i2.Events.MANIFEST_LOADED, h3);\n  var T3 = function(p3, _3) {\n    var c4 = _3.details, u3 = _3.level, y5 = _3.networkDetails, E4 = _3.stats, k3 = Pe(E4), m3 = k3.bytesLoaded, q3 = k3.requestStart, P2 = k3.responseStart, L2 = k3.responseEnd, R2 = c4.fragments[c4.fragments.length - 1], Y5 = s(R2) + o(R2.duration);\n    f(\"requestcompleted\", { request_event_type: p3, request_bytes_loaded: m3, request_start: q3, request_response_start: P2, request_response_end: L2, request_current_level: u3, request_type: \"manifest\", request_hostname: F(c4.url), request_response_headers: De(y5), video_holdback: c4.holdBack && o(c4.holdBack), video_part_holdback: c4.partHoldBack && o(c4.partHoldBack), video_part_target_duration: c4.partTarget && o(c4.partTarget), video_target_duration: c4.targetduration && o(c4.targetduration), video_source_is_live: c4.live, player_manifest_newest_program_time: isNaN(Y5) ? void 0 : Y5 });\n  };\n  t2.on(i2.Events.LEVEL_LOADED, T3);\n  var g2 = function(p3, _3) {\n    var c4 = _3.details, u3 = _3.networkDetails, y5 = _3.stats, E4 = Pe(y5), k3 = E4.bytesLoaded, m3 = E4.requestStart, q3 = E4.responseStart, P2 = E4.responseEnd;\n    f(\"requestcompleted\", { request_event_type: p3, request_bytes_loaded: k3, request_start: m3, request_response_start: q3, request_response_end: P2, request_type: \"manifest\", request_hostname: F(c4.url), request_response_headers: De(u3) });\n  };\n  t2.on(i2.Events.AUDIO_TRACK_LOADED, g2);\n  var x4 = function(p3, _3) {\n    var c4 = _3.stats, u3 = _3.networkDetails, y5 = _3.frag;\n    c4 = c4 || y5.stats;\n    var E4 = Pe(c4), k3 = E4.bytesLoaded, m3 = E4.requestStart, q3 = E4.responseStart, P2 = E4.responseEnd, L2 = u3 ? De(u3) : void 0, R2 = { request_event_type: p3, request_bytes_loaded: k3, request_start: m3, request_response_start: q3, request_response_end: P2, request_hostname: u3 ? F(u3.responseURL) : void 0, request_id: L2 ? oe(L2) : void 0, request_response_headers: L2, request_media_duration: y5.duration, request_url: u3 == null ? void 0 : u3.responseURL };\n    y5.type === \"main\" ? (R2.request_type = \"media\", R2.request_current_level = y5.level, R2.request_video_width = (t2.levels[y5.level] || {}).width, R2.request_video_height = (t2.levels[y5.level] || {}).height, R2.request_labeled_bitrate = (t2.levels[y5.level] || {}).bitrate) : R2.request_type = y5.type, f(\"requestcompleted\", R2);\n  };\n  t2.on(i2.Events.FRAG_LOADED, x4);\n  var v4 = function(p3, _3) {\n    var c4 = _3.frag, u3 = c4.start, y5 = s(c4), E4 = { currentFragmentPDT: y5, currentFragmentStart: o(u3) };\n    f(\"fragmentchange\", E4);\n  };\n  t2.on(i2.Events.FRAG_CHANGED, v4);\n  var l = function(p3, _3) {\n    var c4 = _3.type, u3 = _3.details, y5 = _3.response, E4 = _3.fatal, k3 = _3.frag, m3 = _3.networkDetails, q3 = (k3 == null ? void 0 : k3.url) || _3.url || \"\", P2 = m3 ? De(m3) : void 0;\n    if ((u3 === i2.ErrorDetails.MANIFEST_LOAD_ERROR || u3 === i2.ErrorDetails.MANIFEST_LOAD_TIMEOUT || u3 === i2.ErrorDetails.FRAG_LOAD_ERROR || u3 === i2.ErrorDetails.FRAG_LOAD_TIMEOUT || u3 === i2.ErrorDetails.LEVEL_LOAD_ERROR || u3 === i2.ErrorDetails.LEVEL_LOAD_TIMEOUT || u3 === i2.ErrorDetails.AUDIO_TRACK_LOAD_ERROR || u3 === i2.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT || u3 === i2.ErrorDetails.SUBTITLE_LOAD_ERROR || u3 === i2.ErrorDetails.SUBTITLE_LOAD_TIMEOUT || u3 === i2.ErrorDetails.KEY_LOAD_ERROR || u3 === i2.ErrorDetails.KEY_LOAD_TIMEOUT) && f(\"requestfailed\", { request_error: u3, request_url: q3, request_hostname: F(q3), request_id: P2 ? oe(P2) : void 0, request_type: u3 === i2.ErrorDetails.FRAG_LOAD_ERROR || u3 === i2.ErrorDetails.FRAG_LOAD_TIMEOUT ? \"media\" : u3 === i2.ErrorDetails.AUDIO_TRACK_LOAD_ERROR || u3 === i2.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT ? \"audio\" : u3 === i2.ErrorDetails.SUBTITLE_LOAD_ERROR || u3 === i2.ErrorDetails.SUBTITLE_LOAD_TIMEOUT ? \"subtitle\" : u3 === i2.ErrorDetails.KEY_LOAD_ERROR || u3 === i2.ErrorDetails.KEY_LOAD_TIMEOUT ? \"encryption\" : \"manifest\", request_error_code: y5 == null ? void 0 : y5.code, request_error_text: y5 == null ? void 0 : y5.text }), E4) {\n      var L2, R2 = \"\".concat(q3 ? \"url: \".concat(q3, \"\\n\") : \"\") + \"\".concat(y5 && (y5.code || y5.text) ? \"response: \".concat(y5.code, \", \").concat(y5.text, \"\\n\") : \"\") + \"\".concat(_3.reason ? \"failure reason: \".concat(_3.reason, \"\\n\") : \"\") + \"\".concat(_3.level ? \"level: \".concat(_3.level, \"\\n\") : \"\") + \"\".concat(_3.parent ? \"parent stream controller: \".concat(_3.parent, \"\\n\") : \"\") + \"\".concat(_3.buffer ? \"buffer length: \".concat(_3.buffer, \"\\n\") : \"\") + \"\".concat(_3.error ? \"error: \".concat(_3.error, \"\\n\") : \"\") + \"\".concat(_3.event ? \"event: \".concat(_3.event, \"\\n\") : \"\") + \"\".concat(_3.err ? \"error message: \".concat((L2 = _3.err) === null || L2 === void 0 ? void 0 : L2.message, \"\\n\") : \"\");\n      f(\"error\", { player_error_code: c4, player_error_message: u3, player_error_context: R2 });\n    }\n  };\n  t2.on(i2.Events.ERROR, l);\n  var w2 = function(p3, _3) {\n    var c4 = _3.frag, u3 = c4 && c4._url || \"\";\n    f(\"requestcanceled\", { request_event_type: p3, request_url: u3, request_type: \"media\", request_hostname: F(u3) });\n  };\n  t2.on(i2.Events.FRAG_LOAD_EMERGENCY_ABORTED, w2);\n  var D3 = function(p3, _3) {\n    var c4 = _3.level, u3 = t2.levels[c4];\n    if (u3 && u3.attrs && u3.attrs.BANDWIDTH) {\n      var y5 = u3.attrs.BANDWIDTH, E4, k3 = parseFloat(u3.attrs[\"FRAME-RATE\"]);\n      isNaN(k3) || (E4 = k3), y5 ? f(\"renditionchange\", { video_source_fps: E4, video_source_bitrate: y5, video_source_width: u3.width, video_source_height: u3.height, video_source_rendition_name: u3.name, video_source_codec: u3 == null ? void 0 : u3.videoCodec }) : n2.warn(\"missing BANDWIDTH from HLS manifest parsed by HLS.js\");\n    }\n  };\n  t2.on(i2.Events.LEVEL_SWITCHED, D3), t2._stopMuxMonitor = function() {\n    t2.off(i2.Events.MANIFEST_LOADED, h3), t2.off(i2.Events.LEVEL_LOADED, T3), t2.off(i2.Events.AUDIO_TRACK_LOADED, g2), t2.off(i2.Events.FRAG_LOADED, x4), t2.off(i2.Events.FRAG_CHANGED, v4), t2.off(i2.Events.ERROR, l), t2.off(i2.Events.FRAG_LOAD_EMERGENCY_ABORTED, w2), t2.off(i2.Events.LEVEL_SWITCHED, D3), t2.off(i2.Events.DESTROYING, t2._stopMuxMonitor), delete t2._stopMuxMonitor;\n  }, t2.on(i2.Events.DESTROYING, t2._stopMuxMonitor);\n};\nvar Rt = function(r10) {\n  r10 && typeof r10._stopMuxMonitor == \"function\" && r10._stopMuxMonitor();\n};\nvar qt = function(r10, e) {\n  if (!r10 || !r10.requestEndDate) return {};\n  var t2 = F(r10.url), a2 = r10.url, i2 = r10.bytesLoaded, n2 = new Date(r10.requestStartDate).getTime(), o = new Date(r10.firstByteDate).getTime(), s = new Date(r10.requestEndDate).getTime(), f = isNaN(r10.duration) ? 0 : r10.duration, h3 = typeof e.getMetricsFor == \"function\" ? e.getMetricsFor(r10.mediaType).HttpList : e.getDashMetrics().getHttpRequests(r10.mediaType), T3;\n  h3.length > 0 && (T3 = fe(h3[h3.length - 1]._responseHeaders || \"\"));\n  var g2 = T3 ? oe(T3) : void 0;\n  return { requestStart: n2, requestResponseStart: o, requestResponseEnd: s, requestBytesLoaded: i2, requestResponseHeaders: T3, requestMediaDuration: f, requestHostname: t2, requestUrl: a2, requestId: g2 };\n};\nvar ci = function(r10, e) {\n  var t2 = e.getQualityFor(r10), a2 = e.getCurrentTrackFor(r10).bitrateList;\n  return a2 ? { currentLevel: t2, renditionWidth: a2[t2].width || null, renditionHeight: a2[t2].height || null, renditionBitrate: a2[t2].bandwidth } : {};\n};\nvar fi = function(r10) {\n  var e;\n  return (e = r10.match(/.*codecs\\*?=\"(.*)\"/)) === null || e === void 0 ? void 0 : e[1];\n};\nvar _i = function(e) {\n  try {\n    var t2, a2, i2 = (a2 = e.getVersion) === null || a2 === void 0 || (t2 = a2.call(e)) === null || t2 === void 0 ? void 0 : t2.split(\".\").map(function(n2) {\n      return parseInt(n2);\n    })[0];\n    return i2;\n  } catch (n2) {\n    return false;\n  }\n};\nvar At = function(r10, e, t2) {\n  var a2 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : {}, i2 = r10.log;\n  if (!t2 || !t2.on) {\n    i2.warn(\"Invalid dash.js player reference. Monitoring blocked.\");\n    return;\n  }\n  var n2 = _i(t2), o = function(c4, u3) {\n    return r10.emit(e, c4, u3);\n  }, s = function(c4) {\n    var u3 = c4.type, y5 = c4.data, E4 = (y5 || {}).url;\n    o(\"requestcompleted\", { request_event_type: u3, request_start: 0, request_response_start: 0, request_response_end: 0, request_bytes_loaded: -1, request_type: \"manifest\", request_hostname: F(E4), request_url: E4 });\n  };\n  t2.on(\"manifestLoaded\", s);\n  var f = {}, h3 = function(c4) {\n    if (typeof c4.getRequests != \"function\") return null;\n    var u3 = c4.getRequests({ state: \"executed\" });\n    return u3.length === 0 ? null : u3[u3.length - 1];\n  }, T3 = function(c4) {\n    var u3 = c4.type, y5 = c4.fragmentModel, E4 = c4.chunk, k3 = h3(y5);\n    g2({ type: u3, request: k3, chunk: E4 });\n  }, g2 = function(c4) {\n    var u3 = c4.type, y5 = c4.chunk, E4 = c4.request, k3 = (y5 || {}).mediaInfo, m3 = k3 || {}, q3 = m3.type, P2 = m3.bitrateList;\n    P2 = P2 || [];\n    var L2 = {};\n    P2.forEach(function(we4, Q5) {\n      L2[Q5] = {}, L2[Q5].width = we4.width, L2[Q5].height = we4.height, L2[Q5].bitrate = we4.bandwidth, L2[Q5].attrs = {};\n    }), q3 === \"video\" ? f.video = L2 : q3 === \"audio\" ? f.audio = L2 : f.media = L2;\n    var R2 = qt(E4, t2), Y5 = R2.requestStart, ge4 = R2.requestResponseStart, be3 = R2.requestResponseEnd, W4 = R2.requestResponseHeaders, ae5 = R2.requestMediaDuration, Ue4 = R2.requestHostname, Fe3 = R2.requestUrl, Ve4 = R2.requestId;\n    o(\"requestcompleted\", { request_event_type: u3, request_start: Y5, request_response_start: ge4, request_response_end: be3, request_bytes_loaded: -1, request_type: q3 + \"_init\", request_response_headers: W4, request_hostname: Ue4, request_id: Ve4, request_url: Fe3, request_media_duration: ae5, request_rendition_lists: f });\n  };\n  n2 >= 4 ? t2.on(\"initFragmentLoaded\", g2) : t2.on(\"initFragmentLoaded\", T3);\n  var x4 = function(c4) {\n    var u3 = c4.type, y5 = c4.fragmentModel, E4 = c4.chunk, k3 = h3(y5);\n    v4({ type: u3, request: k3, chunk: E4 });\n  }, v4 = function(c4) {\n    var u3 = c4.type, y5 = c4.chunk, E4 = c4.request, k3 = y5 || {}, m3 = k3.mediaInfo, q3 = k3.start, P2 = m3 || {}, L2 = P2.type, R2 = qt(E4, t2), Y5 = R2.requestStart, ge4 = R2.requestResponseStart, be3 = R2.requestResponseEnd, W4 = R2.requestBytesLoaded, ae5 = R2.requestResponseHeaders, Ue4 = R2.requestMediaDuration, Fe3 = R2.requestHostname, Ve4 = R2.requestUrl, we4 = R2.requestId, Q5 = ci(L2, t2), zr = Q5.currentLevel, Kr = Q5.renditionWidth, Yr = Q5.renditionHeight, Xr = Q5.renditionBitrate;\n    o(\"requestcompleted\", { request_event_type: u3, request_start: Y5, request_response_start: ge4, request_response_end: be3, request_bytes_loaded: W4, request_type: L2, request_response_headers: ae5, request_hostname: Fe3, request_id: we4, request_url: Ve4, request_media_start_time: q3, request_media_duration: Ue4, request_current_level: zr, request_labeled_bitrate: Xr, request_video_width: Kr, request_video_height: Yr });\n  };\n  n2 >= 4 ? t2.on(\"mediaFragmentLoaded\", v4) : t2.on(\"mediaFragmentLoaded\", x4);\n  var l = { video: void 0, audio: void 0, totalBitrate: void 0 }, w2 = function() {\n    if (l.video && typeof l.video.bitrate == \"number\") {\n      if (!(l.video.width && l.video.height)) {\n        i2.warn(\"have bitrate info for video but missing width/height\");\n        return;\n      }\n      var c4 = l.video.bitrate;\n      if (l.audio && typeof l.audio.bitrate == \"number\" && (c4 += l.audio.bitrate), c4 !== l.totalBitrate) return l.totalBitrate = c4, { video_source_bitrate: c4, video_source_height: l.video.height, video_source_width: l.video.width, video_source_codec: fi(l.video.codec) };\n    }\n  }, D3 = function(c4, u3, y5) {\n    if (typeof c4.newQuality != \"number\") {\n      i2.warn(\"missing evt.newQuality in qualityChangeRendered event\", c4);\n      return;\n    }\n    var E4 = c4.mediaType;\n    if (E4 === \"audio\" || E4 === \"video\") {\n      var k3 = t2.getBitrateInfoListFor(E4).find(function(q3) {\n        var P2 = q3.qualityIndex;\n        return P2 === c4.newQuality;\n      });\n      if (!(k3 && typeof k3.bitrate == \"number\")) {\n        i2.warn(\"missing bitrate info for \".concat(E4));\n        return;\n      }\n      l[E4] = ce(ne({}, k3), { codec: t2.getCurrentTrackFor(E4).codec });\n      var m3 = w2();\n      m3 && o(\"renditionchange\", m3);\n    }\n  };\n  t2.on(\"qualityChangeRendered\", D3);\n  var p3 = function(c4) {\n    var u3 = c4.request, y5 = c4.mediaType;\n    u3 = u3 || {}, o(\"requestcanceled\", { request_event_type: u3.type + \"_\" + u3.action, request_url: u3.url, request_type: y5, request_hostname: F(u3.url) });\n  };\n  t2.on(\"fragmentLoadingAbandoned\", p3);\n  var _3 = function(c4) {\n    var u3 = c4.error, y5, E4, k3 = (u3 == null || (y5 = u3.data) === null || y5 === void 0 ? void 0 : y5.request) || {}, m3 = (u3 == null || (E4 = u3.data) === null || E4 === void 0 ? void 0 : E4.response) || {};\n    (u3 == null ? void 0 : u3.code) === 27 && o(\"requestfailed\", { request_error: k3.type + \"_\" + k3.action, request_url: k3.url, request_hostname: F(k3.url), request_type: k3.mediaType, request_error_code: m3.status, request_error_text: m3.statusText });\n    var q3 = \"\".concat(k3 != null && k3.url ? \"url: \".concat(k3.url, \"\\n\") : \"\") + \"\".concat(m3 != null && m3.status || m3 != null && m3.statusText ? \"response: \".concat(m3 == null ? void 0 : m3.status, \", \").concat(m3 == null ? void 0 : m3.statusText, \"\\n\") : \"\");\n    o(\"error\", { player_error_code: u3 == null ? void 0 : u3.code, player_error_message: u3 == null ? void 0 : u3.message, player_error_context: q3 });\n  };\n  t2.on(\"error\", _3), t2._stopMuxMonitor = function() {\n    t2.off(\"manifestLoaded\", s), t2.off(\"initFragmentLoaded\", g2), t2.off(\"mediaFragmentLoaded\", v4), t2.off(\"qualityChangeRendered\", D3), t2.off(\"error\", _3), t2.off(\"fragmentLoadingAbandoned\", p3), delete t2._stopMuxMonitor;\n  };\n};\nvar Ot = function(r10) {\n  r10 && typeof r10._stopMuxMonitor == \"function\" && r10._stopMuxMonitor();\n};\nvar It = 0;\nvar pi = function() {\n  \"use strict\";\n  function r10() {\n    S(this, r10), d(this, \"_listeners\", void 0);\n  }\n  return M(r10, [{ key: \"on\", value: function(t2, a2, i2) {\n    return a2._eventEmitterGuid = a2._eventEmitterGuid || ++It, this._listeners = this._listeners || {}, this._listeners[t2] = this._listeners[t2] || [], i2 && (a2 = a2.bind(i2)), this._listeners[t2].push(a2), a2;\n  } }, { key: \"off\", value: function(t2, a2) {\n    var i2 = this._listeners && this._listeners[t2];\n    i2 && i2.forEach(function(n2, o) {\n      n2._eventEmitterGuid === a2._eventEmitterGuid && i2.splice(o, 1);\n    });\n  } }, { key: \"one\", value: function(t2, a2, i2) {\n    var n2 = this;\n    a2._eventEmitterGuid = a2._eventEmitterGuid || ++It;\n    var o = function() {\n      n2.off(t2, o), a2.apply(i2 || this, arguments);\n    };\n    o._eventEmitterGuid = a2._eventEmitterGuid, this.on(t2, o);\n  } }, { key: \"emit\", value: function(t2, a2) {\n    var i2 = this;\n    if (this._listeners) {\n      a2 = a2 || {};\n      var n2 = this._listeners[\"before*\"] || [], o = this._listeners[t2] || [], s = this._listeners[\"after\" + t2] || [], f = function(h3, T3) {\n        h3 = h3.slice(), h3.forEach(function(g2) {\n          g2.call(i2, { type: t2 }, T3);\n        });\n      };\n      f(n2, a2), f(o, a2), f(s, a2);\n    }\n  } }]), r10;\n}();\nvar Lt = pi;\nvar Ce = B(J());\nvar vi = function() {\n  \"use strict\";\n  function r10(e) {\n    var t2 = this;\n    S(this, r10), d(this, \"_playbackHeartbeatInterval\", void 0), d(this, \"_playheadShouldBeProgressing\", void 0), d(this, \"pm\", void 0), this.pm = e, this._playbackHeartbeatInterval = null, this._playheadShouldBeProgressing = false, e.on(\"playing\", function() {\n      t2._playheadShouldBeProgressing = true;\n    }), e.on(\"play\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"playing\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"adbreakstart\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"adplay\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"adplaying\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"devicewake\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"viewstart\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"rebufferstart\", this._startPlaybackHeartbeatInterval.bind(this)), e.on(\"pause\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"ended\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"viewend\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"error\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"aderror\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"adpause\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"adended\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"adbreakend\", this._stopPlaybackHeartbeatInterval.bind(this)), e.on(\"seeked\", function() {\n      e.data.player_is_paused ? t2._stopPlaybackHeartbeatInterval() : t2._startPlaybackHeartbeatInterval();\n    }), e.on(\"timeupdate\", function() {\n      t2._playbackHeartbeatInterval !== null && e.emit(\"playbackheartbeat\");\n    }), e.on(\"devicesleep\", function(a2, i2) {\n      t2._playbackHeartbeatInterval !== null && (Ce.default.clearInterval(t2._playbackHeartbeatInterval), e.emit(\"playbackheartbeatend\", { viewer_time: i2.viewer_time }), t2._playbackHeartbeatInterval = null);\n    });\n  }\n  return M(r10, [{ key: \"_startPlaybackHeartbeatInterval\", value: function() {\n    var t2 = this;\n    this._playbackHeartbeatInterval === null && (this.pm.emit(\"playbackheartbeat\"), this._playbackHeartbeatInterval = Ce.default.setInterval(function() {\n      t2.pm.emit(\"playbackheartbeat\");\n    }, this.pm.playbackHeartbeatTime));\n  } }, { key: \"_stopPlaybackHeartbeatInterval\", value: function() {\n    this._playheadShouldBeProgressing = false, this._playbackHeartbeatInterval !== null && (Ce.default.clearInterval(this._playbackHeartbeatInterval), this.pm.emit(\"playbackheartbeatend\"), this._playbackHeartbeatInterval = null);\n  } }]), r10;\n}();\nvar Nt = vi;\nvar mi = function r(e) {\n  \"use strict\";\n  var t2 = this;\n  S(this, r), d(this, \"viewErrored\", void 0), e.on(\"viewinit\", function() {\n    t2.viewErrored = false;\n  }), e.on(\"error\", function(a2, i2) {\n    try {\n      var n2 = e.errorTranslator({ player_error_code: i2.player_error_code, player_error_message: i2.player_error_message, player_error_context: i2.player_error_context, player_error_severity: i2.player_error_severity, player_error_business_exception: i2.player_error_business_exception });\n      n2 && (e.data.player_error_code = n2.player_error_code || i2.player_error_code, e.data.player_error_message = n2.player_error_message || i2.player_error_message, e.data.player_error_context = n2.player_error_context || i2.player_error_context, e.data.player_error_severity = n2.player_error_severity || i2.player_error_severity, e.data.player_error_business_exception = n2.player_error_business_exception || i2.player_error_business_exception, t2.viewErrored = true);\n    } catch (o) {\n      e.mux.log.warn(\"Exception in error translator callback.\", o), t2.viewErrored = true;\n    }\n  }), e.on(\"aftererror\", function() {\n    var a2, i2, n2, o, s;\n    (a2 = e.data) === null || a2 === void 0 || delete a2.player_error_code, (i2 = e.data) === null || i2 === void 0 || delete i2.player_error_message, (n2 = e.data) === null || n2 === void 0 || delete n2.player_error_context, (o = e.data) === null || o === void 0 || delete o.player_error_severity, (s = e.data) === null || s === void 0 || delete s.player_error_business_exception;\n  });\n};\nvar Pt = mi;\nvar hi = function() {\n  \"use strict\";\n  function r10(e) {\n    S(this, r10), d(this, \"_watchTimeTrackerLastCheckedTime\", void 0), d(this, \"pm\", void 0), this.pm = e, this._watchTimeTrackerLastCheckedTime = null, e.on(\"playbackheartbeat\", this._updateWatchTime.bind(this)), e.on(\"playbackheartbeatend\", this._clearWatchTimeState.bind(this));\n  }\n  return M(r10, [{ key: \"_updateWatchTime\", value: function(t2, a2) {\n    var i2 = a2.viewer_time;\n    this._watchTimeTrackerLastCheckedTime === null && (this._watchTimeTrackerLastCheckedTime = i2), O(this.pm.data, \"view_watch_time\", i2 - this._watchTimeTrackerLastCheckedTime), this._watchTimeTrackerLastCheckedTime = i2;\n  } }, { key: \"_clearWatchTimeState\", value: function(t2, a2) {\n    this._updateWatchTime(t2, a2), this._watchTimeTrackerLastCheckedTime = null;\n  } }]), r10;\n}();\nvar Ct = hi;\nvar yi = function() {\n  \"use strict\";\n  function r10(e) {\n    var t2 = this;\n    S(this, r10), d(this, \"_playbackTimeTrackerLastPlayheadPosition\", void 0), d(this, \"_lastTime\", void 0), d(this, \"_isAdPlaying\", void 0), d(this, \"_callbackUpdatePlaybackTime\", void 0), d(this, \"pm\", void 0), this.pm = e, this._playbackTimeTrackerLastPlayheadPosition = -1, this._lastTime = A.now(), this._isAdPlaying = false, this._callbackUpdatePlaybackTime = null;\n    var a2 = this._startPlaybackTimeTracking.bind(this);\n    e.on(\"playing\", a2), e.on(\"adplaying\", a2), e.on(\"seeked\", a2);\n    var i2 = this._stopPlaybackTimeTracking.bind(this);\n    e.on(\"playbackheartbeatend\", i2), e.on(\"seeking\", i2), e.on(\"adplaying\", function() {\n      t2._isAdPlaying = true;\n    }), e.on(\"adended\", function() {\n      t2._isAdPlaying = false;\n    }), e.on(\"adpause\", function() {\n      t2._isAdPlaying = false;\n    }), e.on(\"adbreakstart\", function() {\n      t2._isAdPlaying = false;\n    }), e.on(\"adbreakend\", function() {\n      t2._isAdPlaying = false;\n    }), e.on(\"adplay\", function() {\n      t2._isAdPlaying = false;\n    }), e.on(\"viewinit\", function() {\n      t2._playbackTimeTrackerLastPlayheadPosition = -1, t2._lastTime = A.now(), t2._isAdPlaying = false, t2._callbackUpdatePlaybackTime = null;\n    });\n  }\n  return M(r10, [{ key: \"_startPlaybackTimeTracking\", value: function() {\n    this._callbackUpdatePlaybackTime === null && (this._callbackUpdatePlaybackTime = this._updatePlaybackTime.bind(this), this._playbackTimeTrackerLastPlayheadPosition = this.pm.data.player_playhead_time, this.pm.on(\"playbackheartbeat\", this._callbackUpdatePlaybackTime));\n  } }, { key: \"_stopPlaybackTimeTracking\", value: function() {\n    this._callbackUpdatePlaybackTime && (this._updatePlaybackTime(), this.pm.off(\"playbackheartbeat\", this._callbackUpdatePlaybackTime), this._callbackUpdatePlaybackTime = null, this._playbackTimeTrackerLastPlayheadPosition = -1);\n  } }, { key: \"_updatePlaybackTime\", value: function() {\n    var t2 = this.pm.data.player_playhead_time, a2 = A.now(), i2 = -1;\n    this._playbackTimeTrackerLastPlayheadPosition >= 0 && t2 > this._playbackTimeTrackerLastPlayheadPosition ? i2 = t2 - this._playbackTimeTrackerLastPlayheadPosition : this._isAdPlaying && (i2 = a2 - this._lastTime), i2 > 0 && i2 <= 1e3 && O(this.pm.data, \"view_content_playback_time\", i2), this._playbackTimeTrackerLastPlayheadPosition = t2, this._lastTime = a2;\n  } }]), r10;\n}();\nvar Mt = yi;\nvar gi = function() {\n  \"use strict\";\n  function r10(e) {\n    S(this, r10), d(this, \"pm\", void 0), this.pm = e;\n    var t2 = this._updatePlayheadTime.bind(this);\n    e.on(\"playbackheartbeat\", t2), e.on(\"playbackheartbeatend\", t2), e.on(\"timeupdate\", t2), e.on(\"destroy\", function() {\n      e.off(\"timeupdate\", t2);\n    });\n  }\n  return M(r10, [{ key: \"_updateMaxPlayheadPosition\", value: function() {\n    this.pm.data.view_max_playhead_position = typeof this.pm.data.view_max_playhead_position == \"undefined\" ? this.pm.data.player_playhead_time : Math.max(this.pm.data.view_max_playhead_position, this.pm.data.player_playhead_time);\n  } }, { key: \"_updatePlayheadTime\", value: function(t2, a2) {\n    var i2 = this, n2 = function() {\n      i2.pm.currentFragmentPDT && i2.pm.currentFragmentStart && (i2.pm.data.player_program_time = i2.pm.currentFragmentPDT + i2.pm.data.player_playhead_time - i2.pm.currentFragmentStart);\n    };\n    if (a2 && a2.player_playhead_time) this.pm.data.player_playhead_time = a2.player_playhead_time, n2(), this._updateMaxPlayheadPosition();\n    else if (this.pm.getPlayheadTime) {\n      var o = this.pm.getPlayheadTime();\n      typeof o != \"undefined\" && (this.pm.data.player_playhead_time = o, n2(), this._updateMaxPlayheadPosition());\n    }\n  } }]), r10;\n}();\nvar Ht = gi;\nvar Bt = 5 * 60 * 1e3;\nvar bi = function r2(e) {\n  \"use strict\";\n  if (S(this, r2), !e.disableRebufferTracking) {\n    var t2, a2 = function(n2, o) {\n      i2(o), t2 = void 0;\n    }, i2 = function(n2) {\n      if (t2) {\n        var o = n2.viewer_time - t2;\n        O(e.data, \"view_rebuffer_duration\", o), t2 = n2.viewer_time, e.data.view_rebuffer_duration > Bt && (e.emit(\"viewend\"), e.send(\"viewend\"), e.mux.log.warn(\"Ending view after rebuffering for longer than \".concat(Bt, \"ms, future events will be ignored unless a programchange or videochange occurs.\")));\n      }\n      e.data.view_watch_time >= 0 && e.data.view_rebuffer_count > 0 && (e.data.view_rebuffer_frequency = e.data.view_rebuffer_count / e.data.view_watch_time, e.data.view_rebuffer_percentage = e.data.view_rebuffer_duration / e.data.view_watch_time);\n    };\n    e.on(\"playbackheartbeat\", function(n2, o) {\n      return i2(o);\n    }), e.on(\"rebufferstart\", function(n2, o) {\n      t2 || (O(e.data, \"view_rebuffer_count\", 1), t2 = o.viewer_time, e.one(\"rebufferend\", a2));\n    }), e.on(\"viewinit\", function() {\n      t2 = void 0, e.off(\"rebufferend\", a2);\n    });\n  }\n};\nvar Ut = bi;\nvar wi = function() {\n  \"use strict\";\n  function r10(e) {\n    var t2 = this;\n    S(this, r10), d(this, \"_lastCheckedTime\", void 0), d(this, \"_lastPlayheadTime\", void 0), d(this, \"_lastPlayheadTimeUpdatedTime\", void 0), d(this, \"_rebuffering\", void 0), d(this, \"pm\", void 0), this.pm = e, !(e.disableRebufferTracking || e.disablePlayheadRebufferTracking) && (this._lastCheckedTime = null, this._lastPlayheadTime = null, this._lastPlayheadTimeUpdatedTime = null, e.on(\"playbackheartbeat\", this._checkIfRebuffering.bind(this)), e.on(\"playbackheartbeatend\", this._cleanupRebufferTracker.bind(this)), e.on(\"seeking\", function() {\n      t2._cleanupRebufferTracker(null, { viewer_time: A.now() });\n    }));\n  }\n  return M(r10, [{ key: \"_checkIfRebuffering\", value: function(t2, a2) {\n    if (this.pm.seekingTracker.isSeeking || this.pm.adTracker.isAdBreak || !this.pm.playbackHeartbeat._playheadShouldBeProgressing) {\n      this._cleanupRebufferTracker(t2, a2);\n      return;\n    }\n    if (this._lastCheckedTime === null) {\n      this._prepareRebufferTrackerState(a2.viewer_time);\n      return;\n    }\n    if (this._lastPlayheadTime !== this.pm.data.player_playhead_time) {\n      this._cleanupRebufferTracker(t2, a2, true);\n      return;\n    }\n    var i2 = a2.viewer_time - this._lastPlayheadTimeUpdatedTime;\n    typeof this.pm.sustainedRebufferThreshold == \"number\" && i2 >= this.pm.sustainedRebufferThreshold && (this._rebuffering || (this._rebuffering = true, this.pm.emit(\"rebufferstart\", { viewer_time: this._lastPlayheadTimeUpdatedTime }))), this._lastCheckedTime = a2.viewer_time;\n  } }, { key: \"_clearRebufferTrackerState\", value: function() {\n    this._lastCheckedTime = null, this._lastPlayheadTime = null, this._lastPlayheadTimeUpdatedTime = null;\n  } }, { key: \"_prepareRebufferTrackerState\", value: function(t2) {\n    this._lastCheckedTime = t2, this._lastPlayheadTime = this.pm.data.player_playhead_time, this._lastPlayheadTimeUpdatedTime = t2;\n  } }, { key: \"_cleanupRebufferTracker\", value: function(t2, a2) {\n    var i2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;\n    if (this._rebuffering) this._rebuffering = false, this.pm.emit(\"rebufferend\", { viewer_time: a2.viewer_time });\n    else {\n      if (this._lastCheckedTime === null) return;\n      var n2 = this.pm.data.player_playhead_time - this._lastPlayheadTime, o = a2.viewer_time - this._lastPlayheadTimeUpdatedTime;\n      typeof this.pm.minimumRebufferDuration == \"number\" && n2 > 0 && o - n2 > this.pm.minimumRebufferDuration && (this._lastCheckedTime = null, this.pm.emit(\"rebufferstart\", { viewer_time: this._lastPlayheadTimeUpdatedTime }), this.pm.emit(\"rebufferend\", { viewer_time: this._lastPlayheadTimeUpdatedTime + o - n2 }));\n    }\n    i2 ? this._prepareRebufferTrackerState(a2.viewer_time) : this._clearRebufferTrackerState();\n  } }]), r10;\n}();\nvar Ft = wi;\nvar Ti = function() {\n  \"use strict\";\n  function r10(e) {\n    var t2 = this;\n    S(this, r10), d(this, \"NAVIGATION_START\", void 0), d(this, \"pm\", void 0), this.pm = e, e.on(\"viewinit\", function() {\n      var a2 = e.data, i2 = a2.view_id;\n      if (!a2.view_program_changed) {\n        var n2 = function(o, s) {\n          var f = s.viewer_time;\n          o.type === \"playing\" && typeof e.data.view_time_to_first_frame == \"undefined\" ? t2.calculateTimeToFirstFrame(f || A.now(), i2) : o.type === \"adplaying\" && (typeof e.data.view_time_to_first_frame == \"undefined\" || t2._inPrerollPosition()) && t2.calculateTimeToFirstFrame(f || A.now(), i2);\n        };\n        e.one(\"playing\", n2), e.one(\"adplaying\", n2), e.one(\"viewend\", function() {\n          e.off(\"playing\", n2), e.off(\"adplaying\", n2);\n        });\n      }\n    });\n  }\n  return M(r10, [{ key: \"_inPrerollPosition\", value: function() {\n    return typeof this.pm.data.view_content_playback_time == \"undefined\" || this.pm.data.view_content_playback_time <= 1e3;\n  } }, { key: \"calculateTimeToFirstFrame\", value: function(t2, a2) {\n    a2 === this.pm.data.view_id && (this.pm.watchTimeTracker._updateWatchTime(null, { viewer_time: t2 }), this.pm.data.view_time_to_first_frame = this.pm.data.view_watch_time, (this.pm.data.player_autoplay_on || this.pm.data.video_is_autoplay) && this.NAVIGATION_START && (this.pm.data.view_aggregate_startup_time = this.pm.data.view_start + this.pm.data.view_watch_time - this.NAVIGATION_START));\n  } }]), r10;\n}();\nvar Vt = Ti;\nvar Ei = function r3(e) {\n  \"use strict\";\n  var t2 = this;\n  S(this, r3), d(this, \"_lastPlayerHeight\", void 0), d(this, \"_lastPlayerWidth\", void 0), d(this, \"_lastPlayheadPosition\", void 0), d(this, \"_lastSourceHeight\", void 0), d(this, \"_lastSourceWidth\", void 0), e.on(\"viewinit\", function() {\n    t2._lastPlayheadPosition = -1;\n  });\n  var a2 = [\"pause\", \"rebufferstart\", \"seeking\", \"error\", \"adbreakstart\", \"hb\"], i2 = [\"playing\", \"hb\"];\n  a2.forEach(function(n2) {\n    e.on(n2, function() {\n      if (t2._lastPlayheadPosition >= 0 && e.data.player_playhead_time >= 0 && t2._lastPlayerWidth >= 0 && t2._lastSourceWidth > 0 && t2._lastPlayerHeight >= 0 && t2._lastSourceHeight > 0) {\n        var o = e.data.player_playhead_time - t2._lastPlayheadPosition;\n        if (o < 0) {\n          t2._lastPlayheadPosition = -1;\n          return;\n        }\n        var s = Math.min(t2._lastPlayerWidth / t2._lastSourceWidth, t2._lastPlayerHeight / t2._lastSourceHeight), f = Math.max(0, s - 1), h3 = Math.max(0, 1 - s);\n        e.data.view_max_upscale_percentage = Math.max(e.data.view_max_upscale_percentage || 0, f), e.data.view_max_downscale_percentage = Math.max(e.data.view_max_downscale_percentage || 0, h3), O(e.data, \"view_total_content_playback_time\", o), O(e.data, \"view_total_upscaling\", f * o), O(e.data, \"view_total_downscaling\", h3 * o);\n      }\n      t2._lastPlayheadPosition = -1;\n    });\n  }), i2.forEach(function(n2) {\n    e.on(n2, function() {\n      t2._lastPlayheadPosition = e.data.player_playhead_time, t2._lastPlayerWidth = e.data.player_width, t2._lastPlayerHeight = e.data.player_height, t2._lastSourceWidth = e.data.video_source_width, t2._lastSourceHeight = e.data.video_source_height;\n    });\n  });\n};\nvar Wt = Ei;\nvar ki = 2e3;\nvar xi = function r4(e) {\n  \"use strict\";\n  var t2 = this;\n  S(this, r4), d(this, \"isSeeking\", void 0), this.isSeeking = false;\n  var a2 = -1, i2 = function() {\n    var n2 = A.now(), o = (e.data.viewer_time || n2) - (a2 || n2);\n    O(e.data, \"view_seek_duration\", o), e.data.view_max_seek_time = Math.max(e.data.view_max_seek_time || 0, o), t2.isSeeking = false, a2 = -1;\n  };\n  e.on(\"seeking\", function(n2, o) {\n    if (Object.assign(e.data, o), t2.isSeeking && o.viewer_time - a2 <= ki) {\n      a2 = o.viewer_time;\n      return;\n    }\n    t2.isSeeking && i2(), t2.isSeeking = true, a2 = o.viewer_time, O(e.data, \"view_seek_count\", 1), e.send(\"seeking\");\n  }), e.on(\"seeked\", function() {\n    i2();\n  }), e.on(\"viewend\", function() {\n    t2.isSeeking && (i2(), e.send(\"seeked\")), t2.isSeeking = false, a2 = -1;\n  });\n};\nvar jt = xi;\nvar Gt = function(e, t2) {\n  e.push(t2), e.sort(function(a2, i2) {\n    return a2.viewer_time - i2.viewer_time;\n  });\n};\nvar Di = [\"adbreakstart\", \"adrequest\", \"adresponse\", \"adplay\", \"adplaying\", \"adpause\", \"adended\", \"adbreakend\", \"aderror\", \"adclicked\", \"adskipped\"];\nvar Si = function() {\n  \"use strict\";\n  function r10(e) {\n    var t2 = this;\n    S(this, r10), d(this, \"_adHasPlayed\", void 0), d(this, \"_adRequests\", void 0), d(this, \"_adResponses\", void 0), d(this, \"_currentAdRequestNumber\", void 0), d(this, \"_currentAdResponseNumber\", void 0), d(this, \"_prerollPlayTime\", void 0), d(this, \"_wouldBeNewAdPlay\", void 0), d(this, \"isAdBreak\", void 0), d(this, \"pm\", void 0), this.pm = e, e.on(\"viewinit\", function() {\n      t2.isAdBreak = false, t2._currentAdRequestNumber = 0, t2._currentAdResponseNumber = 0, t2._adRequests = [], t2._adResponses = [], t2._adHasPlayed = false, t2._wouldBeNewAdPlay = true, t2._prerollPlayTime = void 0;\n    }), Di.forEach(function(i2) {\n      return e.on(i2, t2._updateAdData.bind(t2));\n    });\n    var a2 = function() {\n      t2.isAdBreak = false;\n    };\n    e.on(\"adbreakstart\", function() {\n      t2.isAdBreak = true;\n    }), e.on(\"play\", a2), e.on(\"playing\", a2), e.on(\"viewend\", a2), e.on(\"adrequest\", function(i2, n2) {\n      n2 = Object.assign({ ad_request_id: \"generatedAdRequestId\" + t2._currentAdRequestNumber++ }, n2), Gt(t2._adRequests, n2), O(e.data, \"view_ad_request_count\"), t2.inPrerollPosition() && (e.data.view_preroll_requested = true, t2._adHasPlayed || O(e.data, \"view_preroll_request_count\"));\n    }), e.on(\"adresponse\", function(i2, n2) {\n      n2 = Object.assign({ ad_request_id: \"generatedAdRequestId\" + t2._currentAdResponseNumber++ }, n2), Gt(t2._adResponses, n2);\n      var o = t2.findAdRequest(n2.ad_request_id);\n      o && O(e.data, \"view_ad_request_time\", Math.max(0, n2.viewer_time - o.viewer_time));\n    }), e.on(\"adplay\", function(i2, n2) {\n      t2._adHasPlayed = true, t2._wouldBeNewAdPlay && (t2._wouldBeNewAdPlay = false, O(e.data, \"view_ad_played_count\")), t2.inPrerollPosition() && !e.data.view_preroll_played && (e.data.view_preroll_played = true, t2._adRequests.length > 0 && (e.data.view_preroll_request_time = Math.max(0, n2.viewer_time - t2._adRequests[0].viewer_time)), e.data.view_start && (e.data.view_startup_preroll_request_time = Math.max(0, n2.viewer_time - e.data.view_start)), t2._prerollPlayTime = n2.viewer_time);\n    }), e.on(\"adplaying\", function(i2, n2) {\n      t2.inPrerollPosition() && typeof e.data.view_preroll_load_time == \"undefined\" && typeof t2._prerollPlayTime != \"undefined\" && (e.data.view_preroll_load_time = n2.viewer_time - t2._prerollPlayTime, e.data.view_startup_preroll_load_time = n2.viewer_time - t2._prerollPlayTime);\n    }), e.on(\"adclicked\", function(i2, n2) {\n      t2._wouldBeNewAdPlay || O(e.data, \"view_ad_clicked_count\");\n    }), e.on(\"adskipped\", function(i2, n2) {\n      t2._wouldBeNewAdPlay || O(e.data, \"view_ad_skipped_count\");\n    }), e.on(\"adended\", function() {\n      t2._wouldBeNewAdPlay = true;\n    }), e.on(\"aderror\", function() {\n      t2._wouldBeNewAdPlay = true;\n    });\n  }\n  return M(r10, [{ key: \"inPrerollPosition\", value: function() {\n    return typeof this.pm.data.view_content_playback_time == \"undefined\" || this.pm.data.view_content_playback_time <= 1e3;\n  } }, { key: \"findAdRequest\", value: function(t2) {\n    for (var a2 = 0; a2 < this._adRequests.length; a2++) if (this._adRequests[a2].ad_request_id === t2) return this._adRequests[a2];\n  } }, { key: \"_updateAdData\", value: function(t2, a2) {\n    if (this.inPrerollPosition()) {\n      if (!this.pm.data.view_preroll_ad_tag_hostname && a2.ad_tag_url) {\n        var i2 = j(ee(a2.ad_tag_url), 2), n2 = i2[0], o = i2[1];\n        this.pm.data.view_preroll_ad_tag_domain = o, this.pm.data.view_preroll_ad_tag_hostname = n2;\n      }\n      if (!this.pm.data.view_preroll_ad_asset_hostname && a2.ad_asset_url) {\n        var s = j(ee(a2.ad_asset_url), 2), f = s[0], h3 = s[1];\n        this.pm.data.view_preroll_ad_asset_domain = h3, this.pm.data.view_preroll_ad_asset_hostname = f;\n      }\n    }\n    this.pm.data.ad_asset_url = a2 == null ? void 0 : a2.ad_asset_url, this.pm.data.ad_tag_url = a2 == null ? void 0 : a2.ad_tag_url, this.pm.data.ad_creative_id = a2 == null ? void 0 : a2.ad_creative_id, this.pm.data.ad_id = a2 == null ? void 0 : a2.ad_id, this.pm.data.ad_universal_id = a2 == null ? void 0 : a2.ad_universal_id;\n  } }]), r10;\n}();\nvar Jt = Si;\nvar je = B(J());\nvar Ri = function r5(e) {\n  \"use strict\";\n  S(this, r5);\n  var t2, a2, i2 = function() {\n    e.disableRebufferTracking || (O(e.data, \"view_waiting_rebuffer_count\", 1), t2 = A.now(), a2 = je.default.setInterval(function() {\n      if (t2) {\n        var h3 = A.now();\n        O(e.data, \"view_waiting_rebuffer_duration\", h3 - t2), t2 = h3;\n      }\n    }, 250));\n  }, n2 = function() {\n    e.disableRebufferTracking || t2 && (O(e.data, \"view_waiting_rebuffer_duration\", A.now() - t2), t2 = false, je.default.clearInterval(a2));\n  }, o = false, s = function() {\n    o = true;\n  }, f = function() {\n    o = false, n2();\n  };\n  e.on(\"waiting\", function() {\n    o && i2();\n  }), e.on(\"playing\", function() {\n    n2(), s();\n  }), e.on(\"pause\", f), e.on(\"seeking\", f);\n};\nvar Qt = Ri;\nvar qi = function r6(e) {\n  \"use strict\";\n  var t2 = this;\n  S(this, r6), d(this, \"lastWallClockTime\", void 0);\n  var a2 = function() {\n    t2.lastWallClockTime = A.now(), e.on(\"before*\", i2);\n  }, i2 = function(n2) {\n    var o = A.now(), s = t2.lastWallClockTime;\n    t2.lastWallClockTime = o, o - s > 3e4 && (e.emit(\"devicesleep\", { viewer_time: s }), Object.assign(e.data, { viewer_time: s }), e.send(\"devicesleep\"), e.emit(\"devicewake\", { viewer_time: o }), Object.assign(e.data, { viewer_time: o }), e.send(\"devicewake\"));\n  };\n  e.one(\"playbackheartbeat\", a2), e.on(\"playbackheartbeatend\", function() {\n    e.off(\"before*\", i2), e.one(\"playbackheartbeat\", a2);\n  });\n};\nvar zt = qi;\nvar Me = B(J());\nvar Je = B(Xt());\nvar Qe = B(er());\nvar tr = \"muxData\";\nvar rr = function() {\n  var e;\n  try {\n    e = Je.default.parse(Qe.default.get(tr) || \"\");\n  } catch (t2) {\n    e = {};\n  }\n  return e;\n};\nvar ir = function(e) {\n  try {\n    Qe.default.set(tr, Je.default.stringify(e), { expires: 365 });\n  } catch (t2) {\n  }\n};\nvar ar = function() {\n  var e = rr();\n  return e.mux_viewer_id = e.mux_viewer_id || X(), e.msn = e.msn || Math.random(), ir(e), { mux_viewer_id: e.mux_viewer_id, mux_sample_number: e.msn };\n};\nvar nr = function() {\n  var e = rr(), t2 = A.now();\n  return e.session_start && (e.sst = e.session_start, delete e.session_start), e.session_id && (e.sid = e.session_id, delete e.session_id), e.session_expires && (e.sex = e.session_expires, delete e.session_expires), (!e.sex || e.sex < t2) && (e.sid = X(), e.sst = t2), e.sex = t2 + 25 * 60 * 1e3, ir(e), { session_id: e.sid, session_start: e.sst, session_expires: e.sex };\n};\nfunction ze(r10, e) {\n  var t2 = e.beaconCollectionDomain, a2 = e.beaconDomain;\n  if (t2) return \"https://\" + t2;\n  r10 = r10 || \"inferred\";\n  var i2 = a2 || \"litix.io\";\n  return r10.match(/^[a-z0-9]+$/) ? \"https://\" + r10 + \".\" + i2 : \"https://img.litix.io/a.gif\";\n}\nvar or = B(J());\nvar sr = function() {\n  var e;\n  switch (ur()) {\n    case \"cellular\":\n      e = \"cellular\";\n      break;\n    case \"ethernet\":\n      e = \"wired\";\n      break;\n    case \"wifi\":\n      e = \"wifi\";\n      break;\n    case void 0:\n      break;\n    default:\n      e = \"other\";\n  }\n  return e;\n};\nvar ur = function() {\n  var e = or.default.navigator, t2 = e && (e.connection || e.mozConnection || e.webkitConnection);\n  return t2 && t2.type;\n};\nsr.getConnectionFromAPI = ur;\nvar dr = sr;\nvar Ni = { a: \"env\", b: \"beacon\", c: \"custom\", d: \"ad\", e: \"event\", f: \"experiment\", i: \"internal\", m: \"mux\", n: \"response\", p: \"player\", q: \"request\", r: \"retry\", s: \"session\", t: \"timestamp\", u: \"viewer\", v: \"video\", w: \"page\", x: \"view\", y: \"sub\" };\nvar Pi = cr(Ni);\nvar Ci = { ad: \"ad\", ag: \"aggregate\", ap: \"api\", al: \"application\", ar: \"architecture\", as: \"asset\", au: \"autoplay\", av: \"average\", bi: \"bitrate\", br: \"break\", bw: \"browser\", by: \"bytes\", bz: \"business\", ca: \"cached\", cb: \"cancel\", cc: \"codec\", cd: \"code\", cg: \"category\", ch: \"changed\", ck: \"clicked\", cl: \"canceled\", cn: \"config\", co: \"count\", ce: \"counter\", cp: \"complete\", cr: \"creative\", ct: \"content\", cu: \"current\", cx: \"connection\", cz: \"context\", dg: \"downscaling\", dm: \"domain\", dn: \"cdn\", do: \"downscale\", dr: \"drm\", dp: \"dropped\", du: \"duration\", dv: \"device\", ec: \"encoding\", ed: \"edge\", en: \"end\", eg: \"engine\", em: \"embed\", er: \"error\", ep: \"experiments\", es: \"errorcode\", et: \"errortext\", ee: \"event\", ev: \"events\", ex: \"expires\", ez: \"exception\", fa: \"failed\", fi: \"first\", fm: \"family\", ft: \"format\", fp: \"fps\", fq: \"frequency\", fr: \"frame\", fs: \"fullscreen\", ha: \"has\", hb: \"holdback\", he: \"headers\", ho: \"host\", hn: \"hostname\", ht: \"height\", id: \"id\", ii: \"init\", in: \"instance\", ip: \"ip\", is: \"is\", ke: \"key\", la: \"language\", lb: \"labeled\", le: \"level\", li: \"live\", ld: \"loaded\", lo: \"load\", ls: \"lists\", lt: \"latency\", ma: \"max\", md: \"media\", me: \"message\", mf: \"manifest\", mi: \"mime\", ml: \"midroll\", mm: \"min\", mn: \"manufacturer\", mo: \"model\", mx: \"mux\", ne: \"newest\", nm: \"name\", no: \"number\", on: \"on\", os: \"os\", pa: \"paused\", pb: \"playback\", pd: \"producer\", pe: \"percentage\", pf: \"played\", pg: \"program\", ph: \"playhead\", pi: \"plugin\", pl: \"preroll\", pn: \"playing\", po: \"poster\", pr: \"preload\", ps: \"position\", pt: \"part\", py: \"property\", ra: \"rate\", rd: \"requested\", re: \"rebuffer\", rf: \"rendition\", rm: \"remote\", ro: \"ratio\", rp: \"response\", rq: \"request\", rs: \"requests\", sa: \"sample\", sd: \"skipped\", se: \"session\", sk: \"seek\", sm: \"stream\", so: \"source\", sq: \"sequence\", sr: \"series\", st: \"start\", su: \"startup\", sv: \"server\", sw: \"software\", sy: \"severity\", ta: \"tag\", tc: \"tech\", te: \"text\", tg: \"target\", th: \"throughput\", ti: \"time\", tl: \"total\", to: \"to\", tt: \"title\", ty: \"type\", ug: \"upscaling\", un: \"universal\", up: \"upscale\", ur: \"url\", us: \"user\", va: \"variant\", vd: \"viewed\", vi: \"video\", ve: \"version\", vw: \"view\", vr: \"viewer\", wd: \"width\", wa: \"watch\", wt: \"waiting\" };\nvar lr = cr(Ci);\nfunction cr(r10) {\n  var e = {};\n  for (var t2 in r10) r10.hasOwnProperty(t2) && (e[r10[t2]] = t2);\n  return e;\n}\nfunction _e(r10) {\n  var e = {}, t2 = {};\n  return Object.keys(r10).forEach(function(a2) {\n    var i2 = false;\n    if (r10.hasOwnProperty(a2) && r10[a2] !== void 0) {\n      var n2 = a2.split(\"_\"), o = n2[0], s = Pi[o];\n      s || (I.info(\"Data key word `\" + n2[0] + \"` not expected in \" + a2), s = o + \"_\"), n2.splice(1).forEach(function(f) {\n        f === \"url\" && (i2 = true), lr[f] ? s += lr[f] : Number(f) && Math.floor(Number(f)) === Number(f) ? s += f : (I.info(\"Data key word `\" + f + \"` not expected in \" + a2), s += \"_\" + f + \"_\");\n      }), i2 ? t2[s] = r10[a2] : e[s] = r10[a2];\n    }\n  }), Object.assign(e, t2);\n}\nvar te = B(J());\nvar Mi = { maxBeaconSize: 300, maxQueueLength: 3600, baseTimeBetweenBeacons: 1e4, maxPayloadKBSize: 500 };\nvar Hi = 56 * 1024;\nvar Bi = [\"hb\", \"requestcompleted\", \"requestfailed\", \"requestcanceled\"];\nvar Ui = \"https://img.litix.io\";\nvar K = function(e) {\n  var t2 = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n  this._beaconUrl = e || Ui, this._eventQueue = [], this._postInFlight = false, this._failureCount = 0, this._sendTimeout = false, this._options = Object.assign({}, Mi, t2);\n};\nK.prototype.queueEvent = function(r10, e) {\n  var t2 = Object.assign({}, e);\n  return this._eventQueue.length <= this._options.maxQueueLength || r10 === \"eventrateexceeded\" ? (this._eventQueue.push(t2), this._sendTimeout || this._startBeaconSending(), this._eventQueue.length <= this._options.maxQueueLength) : false;\n};\nK.prototype.flushEvents = function() {\n  var r10 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;\n  if (r10 && this._eventQueue.length === 1) {\n    this._eventQueue.pop();\n    return;\n  }\n  this._eventQueue.length && this._sendBeaconQueue(), this._startBeaconSending();\n};\nK.prototype.destroy = function() {\n  var r10 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;\n  this.destroyed = true, r10 ? this._clearBeaconQueue() : this.flushEvents(), te.default.clearTimeout(this._sendTimeout);\n};\nK.prototype._clearBeaconQueue = function() {\n  var r10 = this._eventQueue.length > this._options.maxBeaconSize ? this._eventQueue.length - this._options.maxBeaconSize : 0, e = this._eventQueue.slice(r10);\n  r10 > 0 && Object.assign(e[e.length - 1], _e({ mux_view_message: \"event queue truncated\" }));\n  var t2 = this._createPayload(e);\n  fr(this._beaconUrl, t2, true, function() {\n  });\n};\nK.prototype._sendBeaconQueue = function() {\n  var r10 = this;\n  if (!this._postInFlight) {\n    var e = this._eventQueue.slice(0, this._options.maxBeaconSize);\n    this._eventQueue = this._eventQueue.slice(this._options.maxBeaconSize), this._postInFlight = true;\n    var t2 = this._createPayload(e), a2 = A.now();\n    fr(this._beaconUrl, t2, false, function(i2, n2) {\n      n2 ? (r10._eventQueue = e.concat(r10._eventQueue), r10._failureCount += 1, I.info(\"Error sending beacon: \" + n2)) : r10._failureCount = 0, r10._roundTripTime = A.now() - a2, r10._postInFlight = false;\n    });\n  }\n};\nK.prototype._getNextBeaconTime = function() {\n  if (!this._failureCount) return this._options.baseTimeBetweenBeacons;\n  var r10 = Math.pow(2, this._failureCount - 1);\n  return r10 = r10 * Math.random(), (1 + r10) * this._options.baseTimeBetweenBeacons;\n};\nK.prototype._startBeaconSending = function() {\n  var r10 = this;\n  te.default.clearTimeout(this._sendTimeout), !this.destroyed && (this._sendTimeout = te.default.setTimeout(function() {\n    r10._eventQueue.length && r10._sendBeaconQueue(), r10._startBeaconSending();\n  }, this._getNextBeaconTime()));\n};\nK.prototype._createPayload = function(r10) {\n  var e = this, t2 = { transmission_timestamp: Math.round(A.now()) };\n  this._roundTripTime && (t2.rtt_ms = Math.round(this._roundTripTime));\n  var a2, i2, n2, o = function() {\n    a2 = JSON.stringify({ metadata: t2, events: i2 || r10 }), n2 = a2.length / 1024;\n  }, s = function() {\n    return n2 <= e._options.maxPayloadKBSize;\n  };\n  return o(), s() || (I.info(\"Payload size is too big (\" + n2 + \" kb). Removing unnecessary events.\"), i2 = r10.filter(function(f) {\n    return Bi.indexOf(f.e) === -1;\n  }), o()), s() || (I.info(\"Payload size still too big (\" + n2 + \" kb). Cropping fields..\"), i2.forEach(function(f) {\n    for (var h3 in f) {\n      var T3 = f[h3], g2 = 50 * 1024;\n      typeof T3 == \"string\" && T3.length > g2 && (f[h3] = T3.substring(0, g2));\n    }\n  }), o()), a2;\n};\nvar Fi = function(r10) {\n  return r10.length <= Hi;\n};\nvar fr = function(r10, e, t2, a2) {\n  if (t2 && navigator && navigator.sendBeacon && navigator.sendBeacon(r10, e)) {\n    a2();\n    return;\n  }\n  if (te.default.fetch) {\n    te.default.fetch(r10, { method: \"POST\", body: e, headers: { \"Content-Type\": \"text/plain\" }, keepalive: Fi(e) }).then(function(n2) {\n      return a2(null, n2.ok ? null : \"Error\");\n    }).catch(function(n2) {\n      return a2(null, n2);\n    });\n    return;\n  }\n  if (te.default.XMLHttpRequest) {\n    var i2 = new te.default.XMLHttpRequest();\n    i2.onreadystatechange = function() {\n      if (i2.readyState === 4) return a2(null, i2.status !== 200 ? \"error\" : void 0);\n    }, i2.open(\"POST\", r10), i2.setRequestHeader(\"Content-Type\", \"text/plain\"), i2.send(e);\n    return;\n  }\n  a2();\n};\nvar _r = K;\nvar Vi = [\"env_key\", \"view_id\", \"view_sequence_number\", \"player_sequence_number\", \"beacon_domain\", \"player_playhead_time\", \"viewer_time\", \"mux_api_version\", \"event\", \"video_id\", \"player_instance_id\", \"player_error_code\", \"player_error_message\", \"player_error_context\", \"player_error_severity\", \"player_error_business_exception\"];\nvar Wi = [\"adplay\", \"adplaying\", \"adpause\", \"adfirstquartile\", \"admidpoint\", \"adthirdquartile\", \"adended\", \"adresponse\", \"adrequest\"];\nvar ji = [\"ad_id\", \"ad_creative_id\", \"ad_universal_id\"];\nvar Gi = [\"viewstart\", \"error\", \"ended\", \"viewend\"];\nvar Ji = 10 * 60 * 1e3;\nvar pr = function() {\n  \"use strict\";\n  function r10(e, t2) {\n    var a2 = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};\n    S(this, r10);\n    var i2, n2, o, s, f, h3, T3, g2, x4, v4, l, w2;\n    d(this, \"mux\", void 0), d(this, \"envKey\", void 0), d(this, \"options\", void 0), d(this, \"eventQueue\", void 0), d(this, \"sampleRate\", void 0), d(this, \"disableCookies\", void 0), d(this, \"respectDoNotTrack\", void 0), d(this, \"previousBeaconData\", void 0), d(this, \"lastEventTime\", void 0), d(this, \"rateLimited\", void 0), d(this, \"pageLevelData\", void 0), d(this, \"viewerData\", void 0), this.mux = e, this.envKey = t2, this.options = a2, this.previousBeaconData = null, this.lastEventTime = 0, this.rateLimited = false, this.eventQueue = new _r(ze(this.envKey, this.options));\n    var D3;\n    this.sampleRate = (D3 = this.options.sampleRate) !== null && D3 !== void 0 ? D3 : 1;\n    var p3;\n    this.disableCookies = (p3 = this.options.disableCookies) !== null && p3 !== void 0 ? p3 : false;\n    var _3;\n    this.respectDoNotTrack = (_3 = this.options.respectDoNotTrack) !== null && _3 !== void 0 ? _3 : false, this.previousBeaconData = null, this.lastEventTime = 0, this.rateLimited = false, this.pageLevelData = { mux_api_version: this.mux.API_VERSION, mux_embed: this.mux.NAME, mux_embed_version: this.mux.VERSION, viewer_application_name: (i2 = this.options.platform) === null || i2 === void 0 ? void 0 : i2.name, viewer_application_version: (n2 = this.options.platform) === null || n2 === void 0 ? void 0 : n2.version, viewer_application_engine: (o = this.options.platform) === null || o === void 0 ? void 0 : o.layout, viewer_device_name: (s = this.options.platform) === null || s === void 0 ? void 0 : s.product, viewer_device_category: \"\", viewer_device_manufacturer: (f = this.options.platform) === null || f === void 0 ? void 0 : f.manufacturer, viewer_os_family: (T3 = this.options.platform) === null || T3 === void 0 || (h3 = T3.os) === null || h3 === void 0 ? void 0 : h3.family, viewer_os_architecture: (x4 = this.options.platform) === null || x4 === void 0 || (g2 = x4.os) === null || g2 === void 0 ? void 0 : g2.architecture, viewer_os_version: (l = this.options.platform) === null || l === void 0 || (v4 = l.os) === null || v4 === void 0 ? void 0 : v4.version, viewer_connection_type: dr(), page_url: Me.default === null || Me.default === void 0 || (w2 = Me.default.location) === null || w2 === void 0 ? void 0 : w2.href }, this.viewerData = this.disableCookies ? {} : ar();\n  }\n  return M(r10, [{ key: \"send\", value: function(t2, a2) {\n    if (!(!t2 || !(a2 != null && a2.view_id))) {\n      if (this.respectDoNotTrack && de()) return I.info(\"Not sending `\" + t2 + \"` because Do Not Track is enabled\");\n      if (!a2 || typeof a2 != \"object\") return I.error(\"A data object was expected in send() but was not provided\");\n      var i2 = this.disableCookies ? {} : nr(), n2 = ce(ne({}, this.pageLevelData, a2, i2, this.viewerData), { event: t2, env_key: this.envKey });\n      n2.user_id && (n2.viewer_user_id = n2.user_id, delete n2.user_id);\n      var o, s = ((o = n2.mux_sample_number) !== null && o !== void 0 ? o : 0) >= this.sampleRate, f = this._deduplicateBeaconData(t2, n2), h3 = _e(f);\n      if (this.lastEventTime = this.mux.utils.now(), s) return I.info(\"Not sending event due to sample rate restriction\", t2, n2, h3);\n      if (this.envKey || I.info(\"Missing environment key (envKey) - beacons will be dropped if the video source is not a valid mux video URL\", t2, n2, h3), !this.rateLimited) {\n        if (I.info(\"Sending event\", t2, n2, h3), this.rateLimited = !this.eventQueue.queueEvent(t2, h3), this.mux.WINDOW_UNLOADING && t2 === \"viewend\") this.eventQueue.destroy(true);\n        else if (this.mux.WINDOW_HIDDEN && t2 === \"hb\" ? this.eventQueue.flushEvents(true) : Gi.indexOf(t2) >= 0 && this.eventQueue.flushEvents(), this.rateLimited) return n2.event = \"eventrateexceeded\", h3 = _e(n2), this.eventQueue.queueEvent(n2.event, h3), I.error(\"Beaconing disabled due to rate limit.\");\n      }\n    }\n  } }, { key: \"destroy\", value: function() {\n    this.eventQueue.destroy(false);\n  } }, { key: \"_deduplicateBeaconData\", value: function(t2, a2) {\n    var i2 = this, n2 = {}, o = a2.view_id;\n    if (o === \"-1\" || t2 === \"viewstart\" || t2 === \"viewend\" || !this.previousBeaconData || this.mux.utils.now() - this.lastEventTime >= Ji) n2 = ne({}, a2), o && (this.previousBeaconData = n2), o && t2 === \"viewend\" && (this.previousBeaconData = null);\n    else {\n      var s = t2.indexOf(\"request\") === 0;\n      Object.entries(a2).forEach(function(f) {\n        var h3 = j(f, 2), T3 = h3[0], g2 = h3[1];\n        i2.previousBeaconData && (g2 !== i2.previousBeaconData[T3] || Vi.indexOf(T3) > -1 || i2.objectHasChanged(s, T3, g2, i2.previousBeaconData[T3]) || i2.eventRequiresKey(t2, T3)) && (n2[T3] = g2, i2.previousBeaconData[T3] = g2);\n      });\n    }\n    return n2;\n  } }, { key: \"objectHasChanged\", value: function(t2, a2, i2, n2) {\n    return !t2 || a2.indexOf(\"request_\") !== 0 ? false : a2 === \"request_response_headers\" || typeof i2 != \"object\" || typeof n2 != \"object\" ? true : Object.keys(i2 || {}).length !== Object.keys(n2 || {}).length;\n  } }, { key: \"eventRequiresKey\", value: function(t2, a2) {\n    return !!(t2 === \"renditionchange\" && a2.indexOf(\"video_source_\") === 0 || ji.includes(a2) && Wi.includes(t2));\n  } }]), r10;\n}();\nvar Qi = function r7(e) {\n  \"use strict\";\n  S(this, r7);\n  var t2 = 0, a2 = 0, i2 = 0, n2 = 0, o = 0, s = 0, f = 0, h3 = function(x4, v4) {\n    var l = v4.request_start, w2 = v4.request_response_start, D3 = v4.request_response_end, p3 = v4.request_bytes_loaded;\n    n2++;\n    var _3, c4;\n    if (w2 ? (_3 = w2 - (l != null ? l : 0), c4 = (D3 != null ? D3 : 0) - w2) : c4 = (D3 != null ? D3 : 0) - (l != null ? l : 0), c4 > 0 && p3 && p3 > 0) {\n      var u3 = p3 / c4 * 8e3;\n      o++, a2 += p3, i2 += c4, e.data.view_min_request_throughput = Math.min(e.data.view_min_request_throughput || 1 / 0, u3), e.data.view_average_request_throughput = a2 / i2 * 8e3, e.data.view_request_count = n2, _3 > 0 && (t2 += _3, e.data.view_max_request_latency = Math.max(e.data.view_max_request_latency || 0, _3), e.data.view_average_request_latency = t2 / o);\n    }\n  }, T3 = function(x4, v4) {\n    n2++, s++, e.data.view_request_count = n2, e.data.view_request_failed_count = s;\n  }, g2 = function(x4, v4) {\n    n2++, f++, e.data.view_request_count = n2, e.data.view_request_canceled_count = f;\n  };\n  e.on(\"requestcompleted\", h3), e.on(\"requestfailed\", T3), e.on(\"requestcanceled\", g2);\n};\nvar vr = Qi;\nvar zi = 60 * 60 * 1e3;\nvar Ki = function r8(e) {\n  \"use strict\";\n  var t2 = this;\n  S(this, r8), d(this, \"_lastEventTime\", void 0), e.on(\"before*\", function(a2, i2) {\n    var n2 = i2.viewer_time, o = A.now(), s = t2._lastEventTime;\n    if (t2._lastEventTime = o, s && o - s > zi) {\n      var f = Object.keys(e.data).reduce(function(h3, T3) {\n        return T3.indexOf(\"video_\") === 0 ? Object.assign(h3, d({}, T3, e.data[T3])) : h3;\n      }, {});\n      e.mux.log.info(\"Received event after at least an hour inactivity, creating a new view\"), e.emit(\"viewinit\", Object.assign({ viewer_time: n2 }, f)), e.playbackHeartbeat._playheadShouldBeProgressing && a2.type !== \"play\" && a2.type !== \"adbreakstart\" && (e.emit(\"play\", { viewer_time: n2 }), a2.type !== \"playing\" && e.emit(\"playing\", { viewer_time: n2 }));\n    }\n  });\n};\nvar mr = Ki;\nvar Yi = [\"viewstart\", \"ended\", \"loadstart\", \"pause\", \"play\", \"playing\", \"ratechange\", \"waiting\", \"adplay\", \"adpause\", \"adended\", \"aderror\", \"adplaying\", \"adrequest\", \"adresponse\", \"adbreakstart\", \"adbreakend\", \"adfirstquartile\", \"admidpoint\", \"adthirdquartile\", \"rebufferstart\", \"rebufferend\", \"seeked\", \"error\", \"hb\", \"requestcompleted\", \"requestfailed\", \"requestcanceled\", \"renditionchange\"];\nvar Xi = function(r10) {\n  \"use strict\";\n  Tt(t2, r10);\n  var e = xt(t2);\n  function t2(a2, i2, n2) {\n    S(this, t2);\n    var o;\n    o = e.call(this), d(b(o), \"DOM_CONTENT_LOADED_EVENT_END\", void 0), d(b(o), \"NAVIGATION_START\", void 0), d(b(o), \"_destroyed\", void 0), d(b(o), \"_heartBeatTimeout\", void 0), d(b(o), \"adTracker\", void 0), d(b(o), \"dashjs\", void 0), d(b(o), \"data\", void 0), d(b(o), \"disablePlayheadRebufferTracking\", void 0), d(b(o), \"disableRebufferTracking\", void 0), d(b(o), \"errorTracker\", void 0), d(b(o), \"errorTranslator\", void 0), d(b(o), \"getAdData\", void 0), d(b(o), \"getPlayheadTime\", void 0), d(b(o), \"getStateData\", void 0), d(b(o), \"hlsjs\", void 0), d(b(o), \"id\", void 0), d(b(o), \"longResumeTracker\", void 0), d(b(o), \"minimumRebufferDuration\", void 0), d(b(o), \"mux\", void 0), d(b(o), \"oldEmit\", void 0), d(b(o), \"playbackEventDispatcher\", void 0), d(b(o), \"playbackHeartbeat\", void 0), d(b(o), \"playbackHeartbeatTime\", void 0), d(b(o), \"playheadTime\", void 0), d(b(o), \"seekingTracker\", void 0), d(b(o), \"sustainedRebufferThreshold\", void 0), d(b(o), \"watchTimeTracker\", void 0), d(b(o), \"currentFragmentPDT\", void 0), d(b(o), \"currentFragmentStart\", void 0), o.DOM_CONTENT_LOADED_EVENT_END = le.domContentLoadedEventEnd(), o.NAVIGATION_START = le.navigationStart();\n    var s = { debug: false, minimumRebufferDuration: 250, sustainedRebufferThreshold: 1e3, playbackHeartbeatTime: 25, beaconDomain: \"litix.io\", sampleRate: 1, disableCookies: false, respectDoNotTrack: false, disableRebufferTracking: false, disablePlayheadRebufferTracking: false, errorTranslator: function(v4) {\n      return v4;\n    } };\n    o.mux = a2, o.id = i2, n2 != null && n2.beaconDomain && o.mux.log.warn(\"The `beaconDomain` setting has been deprecated in favor of `beaconCollectionDomain`. Please change your integration to use `beaconCollectionDomain` instead of `beaconDomain`.\"), n2 = Object.assign(s, n2), n2.data = n2.data || {}, n2.data.property_key && (n2.data.env_key = n2.data.property_key, delete n2.data.property_key), I.setLevel(n2.debug ? \"debug\" : \"warn\"), o.getPlayheadTime = n2.getPlayheadTime, o.getStateData = n2.getStateData || function() {\n      return {};\n    }, o.getAdData = n2.getAdData || function() {\n    }, o.minimumRebufferDuration = n2.minimumRebufferDuration, o.sustainedRebufferThreshold = n2.sustainedRebufferThreshold, o.playbackHeartbeatTime = n2.playbackHeartbeatTime, o.disableRebufferTracking = n2.disableRebufferTracking, o.disableRebufferTracking && o.mux.log.warn(\"Disabling rebuffer tracking. This should only be used in specific circumstances as a last resort when your player is known to unreliably track rebuffering.\"), o.disablePlayheadRebufferTracking = n2.disablePlayheadRebufferTracking, o.errorTranslator = n2.errorTranslator, o.playbackEventDispatcher = new pr(a2, n2.data.env_key, n2), o.data = { player_instance_id: X(), mux_sample_rate: n2.sampleRate, beacon_domain: n2.beaconCollectionDomain || n2.beaconDomain }, o.data.view_sequence_number = 1, o.data.player_sequence_number = 1, o.oldEmit = o.emit, o.emit = function(v4, l) {\n      l = Object.assign({ viewer_time: this.mux.utils.now() }, l), this.oldEmit(v4, l);\n    };\n    var f = function() {\n      typeof this.data.view_start == \"undefined\" && (this.data.view_start = this.mux.utils.now(), this.emit(\"viewstart\"));\n    }.bind(b(o));\n    o.on(\"viewinit\", function(v4, l) {\n      this._resetVideoData(), this._resetViewData(), this._resetErrorData(), this._updateStateData(), Object.assign(this.data, l), this._initializeViewData(), this.one(\"play\", f), this.one(\"adbreakstart\", f);\n    });\n    var h3 = function(v4) {\n      this.emit(\"viewend\"), this.send(\"viewend\"), this.emit(\"viewinit\", v4);\n    }.bind(b(o));\n    if (o.on(\"videochange\", function(v4, l) {\n      h3(l);\n    }), o.on(\"programchange\", function(v4, l) {\n      this.data.player_is_paused && this.mux.log.warn(\"The `programchange` event is intended to be used when the content changes mid playback without the video source changing, however the video is not currently playing. If the video source is changing please use the videochange event otherwise you will lose startup time information.\"), h3(Object.assign(l, { view_program_changed: true })), f(), this.emit(\"play\"), this.emit(\"playing\");\n    }), o.on(\"fragmentchange\", function(v4, l) {\n      this.currentFragmentPDT = l.currentFragmentPDT, this.currentFragmentStart = l.currentFragmentStart;\n    }), o.on(\"destroy\", o.destroy), typeof window != \"undefined\" && typeof window.addEventListener == \"function\" && typeof window.removeEventListener == \"function\") {\n      var T3 = function() {\n        var v4 = typeof o.data.view_start != \"undefined\";\n        o.mux.WINDOW_HIDDEN = document.visibilityState === \"hidden\", v4 && o.mux.WINDOW_HIDDEN && (o.data.player_is_paused || o.emit(\"hb\"));\n      };\n      window.addEventListener(\"visibilitychange\", T3, false);\n      var g2 = function(v4) {\n        v4.persisted || o.destroy();\n      };\n      window.addEventListener(\"pagehide\", g2, false), o.on(\"destroy\", function() {\n        window.removeEventListener(\"visibilitychange\", T3), window.removeEventListener(\"pagehide\", g2);\n      });\n    }\n    o.on(\"playerready\", function(v4, l) {\n      Object.assign(this.data, l);\n    }), Yi.forEach(function(v4) {\n      o.on(v4, function(l, w2) {\n        v4.indexOf(\"ad\") !== 0 && this._updateStateData(), Object.assign(this.data, w2), this._sanitizeData();\n      }), o.on(\"after\" + v4, function() {\n        (v4 !== \"error\" || this.errorTracker.viewErrored) && this.send(v4);\n      });\n    }), o.on(\"viewend\", function(v4, l) {\n      Object.assign(o.data, l);\n    });\n    var x4 = function(l) {\n      var w2 = this.mux.utils.now();\n      this.data.player_init_time && (this.data.player_startup_time = w2 - this.data.player_init_time), !this.mux.PLAYER_TRACKED && this.NAVIGATION_START && (this.mux.PLAYER_TRACKED = true, (this.data.player_init_time || this.DOM_CONTENT_LOADED_EVENT_END) && (this.data.page_load_time = Math.min(this.data.player_init_time || 1 / 0, this.DOM_CONTENT_LOADED_EVENT_END || 1 / 0) - this.NAVIGATION_START)), this.send(\"playerready\"), delete this.data.player_startup_time, delete this.data.page_load_time;\n    };\n    return o.one(\"playerready\", x4), o.longResumeTracker = new mr(b(o)), o.errorTracker = new Pt(b(o)), new zt(b(o)), o.seekingTracker = new jt(b(o)), o.playheadTime = new Ht(b(o)), o.playbackHeartbeat = new Nt(b(o)), new Wt(b(o)), o.watchTimeTracker = new Ct(b(o)), new Mt(b(o)), o.adTracker = new Jt(b(o)), new Ft(b(o)), new Ut(b(o)), new Vt(b(o)), new Qt(b(o)), new vr(b(o)), n2.hlsjs && o.addHLSJS(n2), n2.dashjs && o.addDashJS(n2), o.emit(\"viewinit\", n2.data), o;\n  }\n  return M(t2, [{ key: \"destroy\", value: function() {\n    this._destroyed || (this._destroyed = true, typeof this.data.view_start != \"undefined\" && (this.emit(\"viewend\"), this.send(\"viewend\")), this.playbackEventDispatcher.destroy(), this.removeHLSJS(), this.removeDashJS(), window.clearTimeout(this._heartBeatTimeout));\n  } }, { key: \"send\", value: function(i2) {\n    if (this.data.view_id) {\n      var n2 = Object.assign({}, this.data), o = [\"player_program_time\", \"player_manifest_newest_program_time\", \"player_live_edge_program_time\", \"player_program_time\", \"video_holdback\", \"video_part_holdback\", \"video_target_duration\", \"video_part_target_duration\"];\n      if (n2.video_source_is_live === void 0 && (n2.player_source_duration === 1 / 0 || n2.video_source_duration === 1 / 0 ? n2.video_source_is_live = true : (n2.player_source_duration > 0 || n2.video_source_duration > 0) && (n2.video_source_is_live = false)), n2.video_source_is_live || o.forEach(function(T3) {\n        n2[T3] = void 0;\n      }), n2.video_source_url = n2.video_source_url || n2.player_source_url, n2.video_source_url) {\n        var s = j(ee(n2.video_source_url), 2), f = s[0], h3 = s[1];\n        n2.video_source_domain = h3, n2.video_source_hostname = f;\n      }\n      delete n2.ad_request_id, this.playbackEventDispatcher.send(i2, n2), this.data.view_sequence_number++, this.data.player_sequence_number++, this._restartHeartBeat(), i2 === \"viewend\" && delete this.data.view_id;\n    }\n  } }, { key: \"_updateStateData\", value: function() {\n    Object.assign(this.data, this.getStateData()), this.playheadTime._updatePlayheadTime(), this._sanitizeData();\n  } }, { key: \"_sanitizeData\", value: function() {\n    var i2 = this, n2 = [\"player_width\", \"player_height\", \"video_source_width\", \"video_source_height\", \"player_playhead_time\", \"video_source_bitrate\"];\n    n2.forEach(function(s) {\n      var f = parseInt(i2.data[s], 10);\n      i2.data[s] = isNaN(f) ? void 0 : f;\n    });\n    var o = [\"player_source_url\", \"video_source_url\"];\n    o.forEach(function(s) {\n      if (i2.data[s]) {\n        var f = i2.data[s].toLowerCase();\n        (f.indexOf(\"data:\") === 0 || f.indexOf(\"blob:\") === 0) && (i2.data[s] = \"MSE style URL\");\n      }\n    });\n  } }, { key: \"_resetVideoData\", value: function() {\n    var i2 = this;\n    Object.keys(this.data).forEach(function(n2) {\n      n2.indexOf(\"video_\") === 0 && delete i2.data[n2];\n    });\n  } }, { key: \"_resetViewData\", value: function() {\n    var i2 = this;\n    Object.keys(this.data).forEach(function(n2) {\n      n2.indexOf(\"view_\") === 0 && delete i2.data[n2];\n    }), this.data.view_sequence_number = 1;\n  } }, { key: \"_resetErrorData\", value: function() {\n    delete this.data.player_error_code, delete this.data.player_error_message, delete this.data.player_error_context, delete this.data.player_error_severity, delete this.data.player_error_business_exception;\n  } }, { key: \"_initializeViewData\", value: function() {\n    var i2 = this, n2 = this.data.view_id = X(), o = function() {\n      n2 === i2.data.view_id && O(i2.data, \"player_view_count\", 1);\n    };\n    this.data.player_is_paused ? this.one(\"play\", o) : o();\n  } }, { key: \"_restartHeartBeat\", value: function() {\n    var i2 = this;\n    window.clearTimeout(this._heartBeatTimeout), this._heartBeatTimeout = window.setTimeout(function() {\n      i2.data.player_is_paused || i2.emit(\"hb\");\n    }, 1e4);\n  } }, { key: \"addHLSJS\", value: function(i2) {\n    if (!i2.hlsjs) {\n      this.mux.log.warn(\"You must pass a valid hlsjs instance in order to track it.\");\n      return;\n    }\n    if (this.hlsjs) {\n      this.mux.log.warn(\"An instance of HLS.js is already being monitored for this player.\");\n      return;\n    }\n    this.hlsjs = i2.hlsjs, St(this.mux, this.id, i2.hlsjs, {}, i2.Hls || window.Hls);\n  } }, { key: \"removeHLSJS\", value: function() {\n    this.hlsjs && (Rt(this.hlsjs), this.hlsjs = void 0);\n  } }, { key: \"addDashJS\", value: function(i2) {\n    if (!i2.dashjs) {\n      this.mux.log.warn(\"You must pass a valid dashjs instance in order to track it.\");\n      return;\n    }\n    if (this.dashjs) {\n      this.mux.log.warn(\"An instance of Dash.js is already being monitored for this player.\");\n      return;\n    }\n    this.dashjs = i2.dashjs, At(this.mux, this.id, i2.dashjs);\n  } }, { key: \"removeDashJS\", value: function() {\n    this.dashjs && (Ot(this.dashjs), this.dashjs = void 0);\n  } }]), t2;\n}(Lt);\nvar hr = Xi;\nke();\nvar ve = B(Wr());\nfunction at() {\n  return ve.default && !!(ve.default.fullscreenElement || ve.default.webkitFullscreenElement || ve.default.mozFullScreenElement || ve.default.msFullscreenElement);\n}\nvar Ea = [\"loadstart\", \"pause\", \"play\", \"playing\", \"seeking\", \"seeked\", \"timeupdate\", \"ratechange\", \"stalled\", \"waiting\", \"error\", \"ended\"];\nvar ka = { 1: \"MEDIA_ERR_ABORTED\", 2: \"MEDIA_ERR_NETWORK\", 3: \"MEDIA_ERR_DECODE\", 4: \"MEDIA_ERR_SRC_NOT_SUPPORTED\" };\nfunction nt(r10, e, t2) {\n  var a2 = j(Ee(e), 3), i2 = a2[0], n2 = a2[1], o = a2[2], s = r10.log, f = r10.utils.getComputedStyle, h3 = r10.utils.secondsToMs, T3 = { automaticErrorTracking: true };\n  if (i2) {\n    if (o !== \"video\" && o !== \"audio\") return s.error(\"The element of `\" + n2 + \"` was not a media element.\");\n  } else return s.error(\"No element was found with the `\" + n2 + \"` query selector.\");\n  i2.mux && (i2.mux.destroy(), delete i2.mux, s.warn(\"Already monitoring this video element, replacing existing event listeners\")), t2 = Object.assign(T3, t2), t2.data = Object.assign({ player_software: \"HTML5 Video Element\", player_mux_plugin_name: \"VideoElementMonitor\", player_mux_plugin_version: r10.VERSION }, t2.data), t2.getPlayheadTime = function() {\n    return h3(i2.currentTime);\n  }, t2.getStateData = function() {\n    var x4, v4 = this.hlsjs && this.hlsjs.url, l = this.dashjs && C(this.dashjs.getSource === \"function\") && this.dashjs.getSource(), w2 = { player_is_paused: i2.paused, player_playhead_time: h3(i2.currentTime), player_width: parseInt(f(i2, \"width\")), player_height: parseInt(f(i2, \"height\")), player_autoplay_on: i2.autoplay, player_preload_on: i2.preload, player_language_code: i2.lang, player_is_fullscreen: at(), video_poster_url: i2.poster, video_source_url: v4 || l || i2.currentSrc, video_source_duration: h3(i2.duration), video_source_height: i2.videoHeight, video_source_width: i2.videoWidth, view_dropped_frame_count: i2 == null || (x4 = i2.getVideoPlaybackQuality) === null || x4 === void 0 ? void 0 : x4.call(i2).droppedVideoFrames }, D3 = t2.getPlayheadTime();\n    if (i2.getStartDate && D3 > 0) {\n      var p3 = i2.getStartDate();\n      if (p3 && typeof p3.getTime == \"function\" && p3.getTime()) {\n        var _3 = p3.getTime();\n        if (w2.player_program_time = _3 + D3, i2.seekable.length > 0) {\n          var c4 = _3 + i2.seekable.end(i2.seekable.length - 1);\n          w2.player_live_edge_program_time = c4;\n        }\n      }\n    }\n    return w2;\n  }, i2.mux = i2.mux || {}, i2.mux.deleted = false, i2.mux.emit = function(x4, v4) {\n    r10.emit(n2, x4, v4);\n  };\n  var g2 = function() {\n    s.error(\"The monitor for this video element has already been destroyed.\");\n  };\n  i2.mux.destroy = function() {\n    Object.keys(i2.mux.listeners).forEach(function(x4) {\n      i2.removeEventListener(x4, i2.mux.listeners[x4], false);\n    }), delete i2.mux.listeners, i2.mux.destroy = g2, i2.mux.swapElement = g2, i2.mux.emit = g2, i2.mux.addHLSJS = g2, i2.mux.addDashJS = g2, i2.mux.removeHLSJS = g2, i2.mux.removeDashJS = g2, i2.mux.deleted = true, r10.emit(n2, \"destroy\");\n  }, i2.mux.swapElement = function(x4) {\n    var v4 = j(Ee(x4), 3), l = v4[0], w2 = v4[1], D3 = v4[2];\n    if (l) {\n      if (D3 !== \"video\" && D3 !== \"audio\") return r10.log.error(\"The element of `\" + w2 + \"` was not a media element.\");\n    } else return r10.log.error(\"No element was found with the `\" + w2 + \"` query selector.\");\n    l.muxId = i2.muxId, delete i2.muxId, l.mux = l.mux || {}, l.mux.listeners = Object.assign({}, i2.mux.listeners), delete i2.mux.listeners, Object.keys(l.mux.listeners).forEach(function(p3) {\n      i2.removeEventListener(p3, l.mux.listeners[p3], false), l.addEventListener(p3, l.mux.listeners[p3], false);\n    }), l.mux.swapElement = i2.mux.swapElement, l.mux.destroy = i2.mux.destroy, delete i2.mux, i2 = l;\n  }, i2.mux.addHLSJS = function(x4) {\n    r10.addHLSJS(n2, x4);\n  }, i2.mux.addDashJS = function(x4) {\n    r10.addDashJS(n2, x4);\n  }, i2.mux.removeHLSJS = function() {\n    r10.removeHLSJS(n2);\n  }, i2.mux.removeDashJS = function() {\n    r10.removeDashJS(n2);\n  }, r10.init(n2, t2), r10.emit(n2, \"playerready\"), i2.paused || (r10.emit(n2, \"play\"), i2.readyState > 2 && r10.emit(n2, \"playing\")), i2.mux.listeners = {}, Ea.forEach(function(x4) {\n    x4 === \"error\" && !t2.automaticErrorTracking || (i2.mux.listeners[x4] = function() {\n      var v4 = {};\n      if (x4 === \"error\") {\n        if (!i2.error || i2.error.code === 1) return;\n        v4.player_error_code = i2.error.code, v4.player_error_message = ka[i2.error.code] || i2.error.message;\n      }\n      r10.emit(n2, x4, v4);\n    }, i2.addEventListener(x4, i2.mux.listeners[x4], false));\n  });\n}\nfunction ot(r10, e, t2, a2) {\n  var i2 = a2;\n  if (r10 && typeof r10[e] == \"function\") try {\n    i2 = r10[e].apply(r10, t2);\n  } catch (n2) {\n    I.info(\"safeCall error\", n2);\n  }\n  return i2;\n}\nvar he = B(J());\nvar me;\nhe.default && he.default.WeakMap && (me = /* @__PURE__ */ new WeakMap());\nfunction st(r10, e) {\n  if (!r10 || !e || !he.default || typeof he.default.getComputedStyle != \"function\") return \"\";\n  var t2;\n  return me && me.has(r10) && (t2 = me.get(r10)), t2 || (t2 = he.default.getComputedStyle(r10, null), me && me.set(r10, t2)), t2.getPropertyValue(e);\n}\nfunction ut(r10) {\n  return Math.floor(r10 * 1e3);\n}\nvar se = { TARGET_DURATION: \"#EXT-X-TARGETDURATION\", PART_INF: \"#EXT-X-PART-INF\", SERVER_CONTROL: \"#EXT-X-SERVER-CONTROL\", INF: \"#EXTINF\", PROGRAM_DATE_TIME: \"#EXT-X-PROGRAM-DATE-TIME\", VERSION: \"#EXT-X-VERSION\", SESSION_DATA: \"#EXT-X-SESSION-DATA\" };\nvar Be = function(e) {\n  return this.buffer = \"\", this.manifest = { segments: [], serverControl: {}, sessionData: {} }, this.currentUri = {}, this.process(e), this.manifest;\n};\nBe.prototype.process = function(r10) {\n  var e;\n  for (this.buffer += r10, e = this.buffer.indexOf(\"\\n\"); e > -1; e = this.buffer.indexOf(\"\\n\")) this.processLine(this.buffer.substring(0, e)), this.buffer = this.buffer.substring(e + 1);\n};\nBe.prototype.processLine = function(r10) {\n  var e = r10.indexOf(\":\"), t2 = Ra(r10, e), a2 = t2[0], i2 = t2.length === 2 ? lt(t2[1]) : void 0;\n  if (a2[0] !== \"#\") this.currentUri.uri = a2, this.manifest.segments.push(this.currentUri), this.manifest.targetDuration && !(\"duration\" in this.currentUri) && (this.currentUri.duration = this.manifest.targetDuration), this.currentUri = {};\n  else switch (a2) {\n    case se.TARGET_DURATION: {\n      if (!isFinite(i2) || i2 < 0) return;\n      this.manifest.targetDuration = i2, this.setHoldBack();\n      break;\n    }\n    case se.PART_INF: {\n      dt(this.manifest, t2), this.manifest.partInf.partTarget && (this.manifest.partTargetDuration = this.manifest.partInf.partTarget), this.setHoldBack();\n      break;\n    }\n    case se.SERVER_CONTROL: {\n      dt(this.manifest, t2), this.setHoldBack();\n      break;\n    }\n    case se.INF: {\n      i2 === 0 ? this.currentUri.duration = 0.01 : i2 > 0 && (this.currentUri.duration = i2);\n      break;\n    }\n    case se.PROGRAM_DATE_TIME: {\n      var n2 = i2, o = new Date(n2);\n      this.manifest.dateTimeString || (this.manifest.dateTimeString = n2, this.manifest.dateTimeObject = o), this.currentUri.dateTimeString = n2, this.currentUri.dateTimeObject = o;\n      break;\n    }\n    case se.VERSION: {\n      dt(this.manifest, t2);\n      break;\n    }\n    case se.SESSION_DATA: {\n      var s = qa(t2[1]), f = Ne(s);\n      Object.assign(this.manifest.sessionData, f);\n    }\n  }\n};\nBe.prototype.setHoldBack = function() {\n  var r10 = this.manifest, e = r10.serverControl, t2 = r10.targetDuration, a2 = r10.partTargetDuration;\n  if (e) {\n    var i2 = \"holdBack\", n2 = \"partHoldBack\", o = t2 && t2 * 3, s = a2 && a2 * 2;\n    t2 && !e.hasOwnProperty(i2) && (e[i2] = o), o && e[i2] < o && (e[i2] = o), a2 && !e.hasOwnProperty(n2) && (e[n2] = a2 * 3), a2 && e[n2] < s && (e[n2] = s);\n  }\n};\nvar dt = function(r10, e) {\n  var t2 = jr(e[0].replace(\"#EXT-X-\", \"\")), a2;\n  Sa(e[1]) ? (a2 = {}, a2 = Object.assign(Da(e[1]), a2)) : a2 = lt(e[1]), r10[t2] = a2;\n};\nvar jr = function(r10) {\n  return r10.toLowerCase().replace(/-(\\w)/g, function(e) {\n    return e[1].toUpperCase();\n  });\n};\nvar lt = function(r10) {\n  if (r10.toLowerCase() === \"yes\" || r10.toLowerCase() === \"no\") return r10.toLowerCase() === \"yes\";\n  var e = r10.indexOf(\":\") !== -1 ? r10 : parseFloat(r10);\n  return isNaN(e) ? r10 : e;\n};\nvar xa = function(r10) {\n  var e = {}, t2 = r10.split(\"=\");\n  if (t2.length > 1) {\n    var a2 = jr(t2[0]);\n    e[a2] = lt(t2[1]);\n  }\n  return e;\n};\nvar Da = function(r10) {\n  for (var e = r10.split(\",\"), t2 = {}, a2 = 0; e.length > a2; a2++) {\n    var i2 = e[a2], n2 = xa(i2);\n    t2 = Object.assign(n2, t2);\n  }\n  return t2;\n};\nvar Sa = function(r10) {\n  return r10.indexOf(\"=\") > -1;\n};\nvar Ra = function(r10, e) {\n  return e === -1 ? [r10] : [r10.substring(0, e), r10.substring(e + 1)];\n};\nvar qa = function(r10) {\n  var e = {};\n  if (r10) {\n    var t2 = r10.search(\",\"), a2 = r10.slice(0, t2), i2 = r10.slice(t2 + 1), n2 = [a2, i2];\n    return n2.forEach(function(o, s) {\n      for (var f = o.replace(/['\"]+/g, \"\").split(\"=\"), h3 = 0; h3 < f.length; h3++) f[h3] === \"DATA-ID\" && (e[\"DATA-ID\"] = f[1 - h3]), f[h3] === \"VALUE\" && (e.VALUE = f[1 - h3]);\n    }), { data: e };\n  }\n};\nvar Gr = Be;\nvar Aa = { safeCall: ot, safeIncrement: O, getComputedStyle: st, secondsToMs: ut, assign: Object.assign, headersStringToObject: fe, cdnHeadersToRequestId: oe, extractHostnameAndDomain: ee, extractHostname: F, manifestParser: Gr, generateShortID: qe, generateUUID: X, now: A.now };\nvar Jr = Aa;\nvar Oa = { PLAYER_READY: \"playerready\", VIEW_INIT: \"viewinit\", VIDEO_CHANGE: \"videochange\", PLAY: \"play\", PAUSE: \"pause\", PLAYING: \"playing\", TIME_UPDATE: \"timeupdate\", SEEKING: \"seeking\", SEEKED: \"seeked\", REBUFFER_START: \"rebufferstart\", REBUFFER_END: \"rebufferend\", ERROR: \"error\", ENDED: \"ended\", RENDITION_CHANGE: \"renditionchange\", ORIENTATION_CHANGE: \"orientationchange\", AD_REQUEST: \"adrequest\", AD_RESPONSE: \"adresponse\", AD_BREAK_START: \"adbreakstart\", AD_PLAY: \"adplay\", AD_PLAYING: \"adplaying\", AD_PAUSE: \"adpause\", AD_FIRST_QUARTILE: \"adfirstquartile\", AD_MID_POINT: \"admidpoint\", AD_THIRD_QUARTILE: \"adthirdquartile\", AD_ENDED: \"adended\", AD_BREAK_END: \"adbreakend\", AD_ERROR: \"aderror\", REQUEST_COMPLETED: \"requestcompleted\", REQUEST_FAILED: \"requestfailed\", REQUEST_CANCELLED: \"requestcanceled\" };\nvar Qr = Oa;\nvar Ia = \"mux-embed\";\nvar La = \"5.2.1\";\nvar Na = \"2.1\";\nvar G = {};\nvar ie = function(e) {\n  var t2 = arguments;\n  typeof e == \"string\" ? ie.hasOwnProperty(e) ? ye.default.setTimeout(function() {\n    t2 = Array.prototype.splice.call(t2, 1), ie[e].apply(null, t2);\n  }, 0) : I.warn(\"`\" + e + \"` is an unknown task\") : typeof e == \"function\" ? ye.default.setTimeout(function() {\n    e(ie);\n  }, 0) : I.warn(\"`\" + e + \"` is invalid.\");\n};\nvar Pa = { loaded: A.now(), NAME: Ia, VERSION: La, API_VERSION: Na, PLAYER_TRACKED: false, monitor: function(e, t2) {\n  return nt(ie, e, t2);\n}, destroyMonitor: function(e) {\n  var t2 = j(Ee(e), 1), a2 = t2[0];\n  a2 && a2.mux && typeof a2.mux.destroy == \"function\" ? a2.mux.destroy() : I.error(\"A video element monitor for `\" + e + \"` has not been initialized via `mux.monitor`.\");\n}, addHLSJS: function(e, t2) {\n  var a2 = $(e);\n  G[a2] ? G[a2].addHLSJS(t2) : I.error(\"A monitor for `\" + a2 + \"` has not been initialized.\");\n}, addDashJS: function(e, t2) {\n  var a2 = $(e);\n  G[a2] ? G[a2].addDashJS(t2) : I.error(\"A monitor for `\" + a2 + \"` has not been initialized.\");\n}, removeHLSJS: function(e) {\n  var t2 = $(e);\n  G[t2] ? G[t2].removeHLSJS() : I.error(\"A monitor for `\" + t2 + \"` has not been initialized.\");\n}, removeDashJS: function(e) {\n  var t2 = $(e);\n  G[t2] ? G[t2].removeDashJS() : I.error(\"A monitor for `\" + t2 + \"` has not been initialized.\");\n}, init: function(e, t2) {\n  de() && t2 && t2.respectDoNotTrack && I.info(\"The browser's Do Not Track flag is enabled - Mux beaconing is disabled.\");\n  var a2 = $(e);\n  G[a2] = new hr(ie, a2, t2);\n}, emit: function(e, t2, a2) {\n  var i2 = $(e);\n  G[i2] ? (G[i2].emit(t2, a2), t2 === \"destroy\" && delete G[i2]) : I.error(\"A monitor for `\" + i2 + \"` has not been initialized.\");\n}, checkDoNotTrack: de, log: I, utils: Jr, events: Qr, WINDOW_HIDDEN: false, WINDOW_UNLOADING: false };\nObject.assign(ie, Pa);\ntypeof ye.default != \"undefined\" && typeof ye.default.addEventListener == \"function\" && ye.default.addEventListener(\"pagehide\", function(r10) {\n  r10.persisted || (ie.WINDOW_UNLOADING = true);\n}, false);\nvar od = ie;\n\n// node_modules/.pnpm/hls.js@1.5.20/node_modules/hls.js/dist/hls.mjs\nfunction getDefaultExportFromCjs(x4) {\n  return x4 && x4.__esModule && Object.prototype.hasOwnProperty.call(x4, \"default\") ? x4[\"default\"] : x4;\n}\nvar urlToolkit = { exports: {} };\n(function(module, exports) {\n  (function(root) {\n    var URL_REGEX = /^(?=((?:[a-zA-Z0-9+\\-.]+:)?))\\1(?=((?:\\/\\/[^\\/?#]*)?))\\2(?=((?:(?:[^?#\\/]*\\/)*[^;?#\\/]*)?))\\3((?:;[^?#]*)?)(\\?[^#]*)?(#[^]*)?$/;\n    var FIRST_SEGMENT_REGEX = /^(?=([^\\/?#]*))\\1([^]*)$/;\n    var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n    var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/)[^\\/]*(?=\\/)/g;\n    var URLToolkit = {\n      // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n      // E.g\n      // With opts.alwaysNormalize = false (default, spec compliant)\n      // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n      // With opts.alwaysNormalize = true (not spec compliant)\n      // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n      buildAbsoluteURL: function(baseURL, relativeURL, opts) {\n        opts = opts || {};\n        baseURL = baseURL.trim();\n        relativeURL = relativeURL.trim();\n        if (!relativeURL) {\n          if (!opts.alwaysNormalize) {\n            return baseURL;\n          }\n          var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n          if (!basePartsForNormalise) {\n            throw new Error(\"Error trying to parse base URL.\");\n          }\n          basePartsForNormalise.path = URLToolkit.normalizePath(\n            basePartsForNormalise.path\n          );\n          return URLToolkit.buildURLFromParts(basePartsForNormalise);\n        }\n        var relativeParts = URLToolkit.parseURL(relativeURL);\n        if (!relativeParts) {\n          throw new Error(\"Error trying to parse relative URL.\");\n        }\n        if (relativeParts.scheme) {\n          if (!opts.alwaysNormalize) {\n            return relativeURL;\n          }\n          relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n          return URLToolkit.buildURLFromParts(relativeParts);\n        }\n        var baseParts = URLToolkit.parseURL(baseURL);\n        if (!baseParts) {\n          throw new Error(\"Error trying to parse base URL.\");\n        }\n        if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== \"/\") {\n          var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n          baseParts.netLoc = pathParts[1];\n          baseParts.path = pathParts[2];\n        }\n        if (baseParts.netLoc && !baseParts.path) {\n          baseParts.path = \"/\";\n        }\n        var builtParts = {\n          // 2c) Otherwise, the embedded URL inherits the scheme of\n          // the base URL.\n          scheme: baseParts.scheme,\n          netLoc: relativeParts.netLoc,\n          path: null,\n          params: relativeParts.params,\n          query: relativeParts.query,\n          fragment: relativeParts.fragment\n        };\n        if (!relativeParts.netLoc) {\n          builtParts.netLoc = baseParts.netLoc;\n          if (relativeParts.path[0] !== \"/\") {\n            if (!relativeParts.path) {\n              builtParts.path = baseParts.path;\n              if (!relativeParts.params) {\n                builtParts.params = baseParts.params;\n                if (!relativeParts.query) {\n                  builtParts.query = baseParts.query;\n                }\n              }\n            } else {\n              var baseURLPath = baseParts.path;\n              var newPath = baseURLPath.substring(0, baseURLPath.lastIndexOf(\"/\") + 1) + relativeParts.path;\n              builtParts.path = URLToolkit.normalizePath(newPath);\n            }\n          }\n        }\n        if (builtParts.path === null) {\n          builtParts.path = opts.alwaysNormalize ? URLToolkit.normalizePath(relativeParts.path) : relativeParts.path;\n        }\n        return URLToolkit.buildURLFromParts(builtParts);\n      },\n      parseURL: function(url) {\n        var parts = URL_REGEX.exec(url);\n        if (!parts) {\n          return null;\n        }\n        return {\n          scheme: parts[1] || \"\",\n          netLoc: parts[2] || \"\",\n          path: parts[3] || \"\",\n          params: parts[4] || \"\",\n          query: parts[5] || \"\",\n          fragment: parts[6] || \"\"\n        };\n      },\n      normalizePath: function(path) {\n        path = path.split(\"\").reverse().join(\"\").replace(SLASH_DOT_REGEX, \"\");\n        while (path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, \"\")).length) {\n        }\n        return path.split(\"\").reverse().join(\"\");\n      },\n      buildURLFromParts: function(parts) {\n        return parts.scheme + parts.netLoc + parts.path + parts.params + parts.query + parts.fragment;\n      }\n    };\n    module.exports = URLToolkit;\n  })();\n})(urlToolkit);\nvar urlToolkitExports = urlToolkit.exports;\nfunction ownKeys(e, r10) {\n  var t2 = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r10 && (o = o.filter(function(r11) {\n      return Object.getOwnPropertyDescriptor(e, r11).enumerable;\n    })), t2.push.apply(t2, o);\n  }\n  return t2;\n}\nfunction _objectSpread2(e) {\n  for (var r10 = 1; r10 < arguments.length; r10++) {\n    var t2 = null != arguments[r10] ? arguments[r10] : {};\n    r10 % 2 ? ownKeys(Object(t2), true).forEach(function(r11) {\n      _defineProperty(e, r11, t2[r11]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t2)) : ownKeys(Object(t2)).forEach(function(r11) {\n      Object.defineProperty(e, r11, Object.getOwnPropertyDescriptor(t2, r11));\n    });\n  }\n  return e;\n}\nfunction _toPrimitive(t2, r10) {\n  if (\"object\" != typeof t2 || !t2) return t2;\n  var e = t2[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i2 = e.call(t2, r10 || \"default\");\n    if (\"object\" != typeof i2) return i2;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r10 ? String : Number)(t2);\n}\nfunction _toPropertyKey(t2) {\n  var i2 = _toPrimitive(t2, \"string\");\n  return \"symbol\" == typeof i2 ? i2 : String(i2);\n}\nfunction _defineProperty(obj, key, value) {\n  key = _toPropertyKey(key);\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n  return obj;\n}\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function(target) {\n    for (var i2 = 1; i2 < arguments.length; i2++) {\n      var source = arguments[i2];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nvar isFiniteNumber = Number.isFinite || function(value) {\n  return typeof value === \"number\" && isFinite(value);\n};\nvar isSafeInteger = Number.isSafeInteger || function(value) {\n  return typeof value === \"number\" && Math.abs(value) <= MAX_SAFE_INTEGER;\n};\nvar MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\nvar Events = /* @__PURE__ */ function(Events2) {\n  Events2[\"MEDIA_ATTACHING\"] = \"hlsMediaAttaching\";\n  Events2[\"MEDIA_ATTACHED\"] = \"hlsMediaAttached\";\n  Events2[\"MEDIA_DETACHING\"] = \"hlsMediaDetaching\";\n  Events2[\"MEDIA_DETACHED\"] = \"hlsMediaDetached\";\n  Events2[\"BUFFER_RESET\"] = \"hlsBufferReset\";\n  Events2[\"BUFFER_CODECS\"] = \"hlsBufferCodecs\";\n  Events2[\"BUFFER_CREATED\"] = \"hlsBufferCreated\";\n  Events2[\"BUFFER_APPENDING\"] = \"hlsBufferAppending\";\n  Events2[\"BUFFER_APPENDED\"] = \"hlsBufferAppended\";\n  Events2[\"BUFFER_EOS\"] = \"hlsBufferEos\";\n  Events2[\"BUFFER_FLUSHING\"] = \"hlsBufferFlushing\";\n  Events2[\"BUFFER_FLUSHED\"] = \"hlsBufferFlushed\";\n  Events2[\"MANIFEST_LOADING\"] = \"hlsManifestLoading\";\n  Events2[\"MANIFEST_LOADED\"] = \"hlsManifestLoaded\";\n  Events2[\"MANIFEST_PARSED\"] = \"hlsManifestParsed\";\n  Events2[\"LEVEL_SWITCHING\"] = \"hlsLevelSwitching\";\n  Events2[\"LEVEL_SWITCHED\"] = \"hlsLevelSwitched\";\n  Events2[\"LEVEL_LOADING\"] = \"hlsLevelLoading\";\n  Events2[\"LEVEL_LOADED\"] = \"hlsLevelLoaded\";\n  Events2[\"LEVEL_UPDATED\"] = \"hlsLevelUpdated\";\n  Events2[\"LEVEL_PTS_UPDATED\"] = \"hlsLevelPtsUpdated\";\n  Events2[\"LEVELS_UPDATED\"] = \"hlsLevelsUpdated\";\n  Events2[\"AUDIO_TRACKS_UPDATED\"] = \"hlsAudioTracksUpdated\";\n  Events2[\"AUDIO_TRACK_SWITCHING\"] = \"hlsAudioTrackSwitching\";\n  Events2[\"AUDIO_TRACK_SWITCHED\"] = \"hlsAudioTrackSwitched\";\n  Events2[\"AUDIO_TRACK_LOADING\"] = \"hlsAudioTrackLoading\";\n  Events2[\"AUDIO_TRACK_LOADED\"] = \"hlsAudioTrackLoaded\";\n  Events2[\"SUBTITLE_TRACKS_UPDATED\"] = \"hlsSubtitleTracksUpdated\";\n  Events2[\"SUBTITLE_TRACKS_CLEARED\"] = \"hlsSubtitleTracksCleared\";\n  Events2[\"SUBTITLE_TRACK_SWITCH\"] = \"hlsSubtitleTrackSwitch\";\n  Events2[\"SUBTITLE_TRACK_LOADING\"] = \"hlsSubtitleTrackLoading\";\n  Events2[\"SUBTITLE_TRACK_LOADED\"] = \"hlsSubtitleTrackLoaded\";\n  Events2[\"SUBTITLE_FRAG_PROCESSED\"] = \"hlsSubtitleFragProcessed\";\n  Events2[\"CUES_PARSED\"] = \"hlsCuesParsed\";\n  Events2[\"NON_NATIVE_TEXT_TRACKS_FOUND\"] = \"hlsNonNativeTextTracksFound\";\n  Events2[\"INIT_PTS_FOUND\"] = \"hlsInitPtsFound\";\n  Events2[\"FRAG_LOADING\"] = \"hlsFragLoading\";\n  Events2[\"FRAG_LOAD_EMERGENCY_ABORTED\"] = \"hlsFragLoadEmergencyAborted\";\n  Events2[\"FRAG_LOADED\"] = \"hlsFragLoaded\";\n  Events2[\"FRAG_DECRYPTED\"] = \"hlsFragDecrypted\";\n  Events2[\"FRAG_PARSING_INIT_SEGMENT\"] = \"hlsFragParsingInitSegment\";\n  Events2[\"FRAG_PARSING_USERDATA\"] = \"hlsFragParsingUserdata\";\n  Events2[\"FRAG_PARSING_METADATA\"] = \"hlsFragParsingMetadata\";\n  Events2[\"FRAG_PARSED\"] = \"hlsFragParsed\";\n  Events2[\"FRAG_BUFFERED\"] = \"hlsFragBuffered\";\n  Events2[\"FRAG_CHANGED\"] = \"hlsFragChanged\";\n  Events2[\"FPS_DROP\"] = \"hlsFpsDrop\";\n  Events2[\"FPS_DROP_LEVEL_CAPPING\"] = \"hlsFpsDropLevelCapping\";\n  Events2[\"MAX_AUTO_LEVEL_UPDATED\"] = \"hlsMaxAutoLevelUpdated\";\n  Events2[\"ERROR\"] = \"hlsError\";\n  Events2[\"DESTROYING\"] = \"hlsDestroying\";\n  Events2[\"KEY_LOADING\"] = \"hlsKeyLoading\";\n  Events2[\"KEY_LOADED\"] = \"hlsKeyLoaded\";\n  Events2[\"LIVE_BACK_BUFFER_REACHED\"] = \"hlsLiveBackBufferReached\";\n  Events2[\"BACK_BUFFER_REACHED\"] = \"hlsBackBufferReached\";\n  Events2[\"STEERING_MANIFEST_LOADED\"] = \"hlsSteeringManifestLoaded\";\n  return Events2;\n}({});\nvar ErrorTypes = /* @__PURE__ */ function(ErrorTypes2) {\n  ErrorTypes2[\"NETWORK_ERROR\"] = \"networkError\";\n  ErrorTypes2[\"MEDIA_ERROR\"] = \"mediaError\";\n  ErrorTypes2[\"KEY_SYSTEM_ERROR\"] = \"keySystemError\";\n  ErrorTypes2[\"MUX_ERROR\"] = \"muxError\";\n  ErrorTypes2[\"OTHER_ERROR\"] = \"otherError\";\n  return ErrorTypes2;\n}({});\nvar ErrorDetails = /* @__PURE__ */ function(ErrorDetails2) {\n  ErrorDetails2[\"KEY_SYSTEM_NO_KEYS\"] = \"keySystemNoKeys\";\n  ErrorDetails2[\"KEY_SYSTEM_NO_ACCESS\"] = \"keySystemNoAccess\";\n  ErrorDetails2[\"KEY_SYSTEM_NO_SESSION\"] = \"keySystemNoSession\";\n  ErrorDetails2[\"KEY_SYSTEM_NO_CONFIGURED_LICENSE\"] = \"keySystemNoConfiguredLicense\";\n  ErrorDetails2[\"KEY_SYSTEM_LICENSE_REQUEST_FAILED\"] = \"keySystemLicenseRequestFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED\"] = \"keySystemServerCertificateRequestFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED\"] = \"keySystemServerCertificateUpdateFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_SESSION_UPDATE_FAILED\"] = \"keySystemSessionUpdateFailed\";\n  ErrorDetails2[\"KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED\"] = \"keySystemStatusOutputRestricted\";\n  ErrorDetails2[\"KEY_SYSTEM_STATUS_INTERNAL_ERROR\"] = \"keySystemStatusInternalError\";\n  ErrorDetails2[\"MANIFEST_LOAD_ERROR\"] = \"manifestLoadError\";\n  ErrorDetails2[\"MANIFEST_LOAD_TIMEOUT\"] = \"manifestLoadTimeOut\";\n  ErrorDetails2[\"MANIFEST_PARSING_ERROR\"] = \"manifestParsingError\";\n  ErrorDetails2[\"MANIFEST_INCOMPATIBLE_CODECS_ERROR\"] = \"manifestIncompatibleCodecsError\";\n  ErrorDetails2[\"LEVEL_EMPTY_ERROR\"] = \"levelEmptyError\";\n  ErrorDetails2[\"LEVEL_LOAD_ERROR\"] = \"levelLoadError\";\n  ErrorDetails2[\"LEVEL_LOAD_TIMEOUT\"] = \"levelLoadTimeOut\";\n  ErrorDetails2[\"LEVEL_PARSING_ERROR\"] = \"levelParsingError\";\n  ErrorDetails2[\"LEVEL_SWITCH_ERROR\"] = \"levelSwitchError\";\n  ErrorDetails2[\"AUDIO_TRACK_LOAD_ERROR\"] = \"audioTrackLoadError\";\n  ErrorDetails2[\"AUDIO_TRACK_LOAD_TIMEOUT\"] = \"audioTrackLoadTimeOut\";\n  ErrorDetails2[\"SUBTITLE_LOAD_ERROR\"] = \"subtitleTrackLoadError\";\n  ErrorDetails2[\"SUBTITLE_TRACK_LOAD_TIMEOUT\"] = \"subtitleTrackLoadTimeOut\";\n  ErrorDetails2[\"FRAG_LOAD_ERROR\"] = \"fragLoadError\";\n  ErrorDetails2[\"FRAG_LOAD_TIMEOUT\"] = \"fragLoadTimeOut\";\n  ErrorDetails2[\"FRAG_DECRYPT_ERROR\"] = \"fragDecryptError\";\n  ErrorDetails2[\"FRAG_PARSING_ERROR\"] = \"fragParsingError\";\n  ErrorDetails2[\"FRAG_GAP\"] = \"fragGap\";\n  ErrorDetails2[\"REMUX_ALLOC_ERROR\"] = \"remuxAllocError\";\n  ErrorDetails2[\"KEY_LOAD_ERROR\"] = \"keyLoadError\";\n  ErrorDetails2[\"KEY_LOAD_TIMEOUT\"] = \"keyLoadTimeOut\";\n  ErrorDetails2[\"BUFFER_ADD_CODEC_ERROR\"] = \"bufferAddCodecError\";\n  ErrorDetails2[\"BUFFER_INCOMPATIBLE_CODECS_ERROR\"] = \"bufferIncompatibleCodecsError\";\n  ErrorDetails2[\"BUFFER_APPEND_ERROR\"] = \"bufferAppendError\";\n  ErrorDetails2[\"BUFFER_APPENDING_ERROR\"] = \"bufferAppendingError\";\n  ErrorDetails2[\"BUFFER_STALLED_ERROR\"] = \"bufferStalledError\";\n  ErrorDetails2[\"BUFFER_FULL_ERROR\"] = \"bufferFullError\";\n  ErrorDetails2[\"BUFFER_SEEK_OVER_HOLE\"] = \"bufferSeekOverHole\";\n  ErrorDetails2[\"BUFFER_NUDGE_ON_STALL\"] = \"bufferNudgeOnStall\";\n  ErrorDetails2[\"INTERNAL_EXCEPTION\"] = \"internalException\";\n  ErrorDetails2[\"INTERNAL_ABORTED\"] = \"aborted\";\n  ErrorDetails2[\"UNKNOWN\"] = \"unknown\";\n  return ErrorDetails2;\n}({});\nvar noop = function noop2() {\n};\nvar fakeLogger = {\n  trace: noop,\n  debug: noop,\n  log: noop,\n  warn: noop,\n  info: noop,\n  error: noop\n};\nvar exportedLogger = fakeLogger;\nfunction consolePrintFn(type) {\n  const func = self.console[type];\n  if (func) {\n    return func.bind(self.console, `[${type}] >`);\n  }\n  return noop;\n}\nfunction exportLoggerFunctions(debugConfig, ...functions) {\n  functions.forEach(function(type) {\n    exportedLogger[type] = debugConfig[type] ? debugConfig[type].bind(debugConfig) : consolePrintFn(type);\n  });\n}\nfunction enableLogs(debugConfig, id) {\n  if (typeof console === \"object\" && debugConfig === true || typeof debugConfig === \"object\") {\n    exportLoggerFunctions(\n      debugConfig,\n      // Remove out from list here to hard-disable a log-level\n      // 'trace',\n      \"debug\",\n      \"log\",\n      \"info\",\n      \"warn\",\n      \"error\"\n    );\n    try {\n      exportedLogger.log(`Debug logs enabled for \"${id}\" in hls.js version ${\"1.5.20\"}`);\n    } catch (e) {\n      exportedLogger = fakeLogger;\n    }\n  } else {\n    exportedLogger = fakeLogger;\n  }\n}\nvar logger = exportedLogger;\nvar DECIMAL_RESOLUTION_REGEX = /^(\\d+)x(\\d+)$/;\nvar ATTR_LIST_REGEX = /(.+?)=(\".*?\"|.*?)(?:,|$)/g;\nvar AttrList = class _AttrList {\n  constructor(attrs) {\n    if (typeof attrs === \"string\") {\n      attrs = _AttrList.parseAttrList(attrs);\n    }\n    _extends(this, attrs);\n  }\n  get clientAttrs() {\n    return Object.keys(this).filter((attr) => attr.substring(0, 2) === \"X-\");\n  }\n  decimalInteger(attrName) {\n    const intValue = parseInt(this[attrName], 10);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n  hexadecimalInteger(attrName) {\n    if (this[attrName]) {\n      let stringValue = (this[attrName] || \"0x\").slice(2);\n      stringValue = (stringValue.length & 1 ? \"0\" : \"\") + stringValue;\n      const value = new Uint8Array(stringValue.length / 2);\n      for (let i2 = 0; i2 < stringValue.length / 2; i2++) {\n        value[i2] = parseInt(stringValue.slice(i2 * 2, i2 * 2 + 2), 16);\n      }\n      return value;\n    } else {\n      return null;\n    }\n  }\n  hexadecimalIntegerAsNumber(attrName) {\n    const intValue = parseInt(this[attrName], 16);\n    if (intValue > Number.MAX_SAFE_INTEGER) {\n      return Infinity;\n    }\n    return intValue;\n  }\n  decimalFloatingPoint(attrName) {\n    return parseFloat(this[attrName]);\n  }\n  optionalFloat(attrName, defaultValue) {\n    const value = this[attrName];\n    return value ? parseFloat(value) : defaultValue;\n  }\n  enumeratedString(attrName) {\n    return this[attrName];\n  }\n  bool(attrName) {\n    return this[attrName] === \"YES\";\n  }\n  decimalResolution(attrName) {\n    const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);\n    if (res === null) {\n      return void 0;\n    }\n    return {\n      width: parseInt(res[1], 10),\n      height: parseInt(res[2], 10)\n    };\n  }\n  static parseAttrList(input) {\n    let match;\n    const attrs = {};\n    const quote = '\"';\n    ATTR_LIST_REGEX.lastIndex = 0;\n    while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {\n      let value = match[2];\n      if (value.indexOf(quote) === 0 && value.lastIndexOf(quote) === value.length - 1) {\n        value = value.slice(1, -1);\n      }\n      const name = match[1].trim();\n      attrs[name] = value;\n    }\n    return attrs;\n  }\n};\nfunction isDateRangeCueAttribute(attrName) {\n  return attrName !== \"ID\" && attrName !== \"CLASS\" && attrName !== \"START-DATE\" && attrName !== \"DURATION\" && attrName !== \"END-DATE\" && attrName !== \"END-ON-NEXT\";\n}\nfunction isSCTE35Attribute(attrName) {\n  return attrName === \"SCTE35-OUT\" || attrName === \"SCTE35-IN\";\n}\nvar DateRange = class {\n  constructor(dateRangeAttr, dateRangeWithSameId) {\n    this.attr = void 0;\n    this._startDate = void 0;\n    this._endDate = void 0;\n    this._badValueForSameId = void 0;\n    if (dateRangeWithSameId) {\n      const previousAttr = dateRangeWithSameId.attr;\n      for (const key in previousAttr) {\n        if (Object.prototype.hasOwnProperty.call(dateRangeAttr, key) && dateRangeAttr[key] !== previousAttr[key]) {\n          logger.warn(`DATERANGE tag attribute: \"${key}\" does not match for tags with ID: \"${dateRangeAttr.ID}\"`);\n          this._badValueForSameId = key;\n          break;\n        }\n      }\n      dateRangeAttr = _extends(new AttrList({}), previousAttr, dateRangeAttr);\n    }\n    this.attr = dateRangeAttr;\n    this._startDate = new Date(dateRangeAttr[\"START-DATE\"]);\n    if (\"END-DATE\" in this.attr) {\n      const endDate = new Date(this.attr[\"END-DATE\"]);\n      if (isFiniteNumber(endDate.getTime())) {\n        this._endDate = endDate;\n      }\n    }\n  }\n  get id() {\n    return this.attr.ID;\n  }\n  get class() {\n    return this.attr.CLASS;\n  }\n  get startDate() {\n    return this._startDate;\n  }\n  get endDate() {\n    if (this._endDate) {\n      return this._endDate;\n    }\n    const duration = this.duration;\n    if (duration !== null) {\n      return new Date(this._startDate.getTime() + duration * 1e3);\n    }\n    return null;\n  }\n  get duration() {\n    if (\"DURATION\" in this.attr) {\n      const duration = this.attr.decimalFloatingPoint(\"DURATION\");\n      if (isFiniteNumber(duration)) {\n        return duration;\n      }\n    } else if (this._endDate) {\n      return (this._endDate.getTime() - this._startDate.getTime()) / 1e3;\n    }\n    return null;\n  }\n  get plannedDuration() {\n    if (\"PLANNED-DURATION\" in this.attr) {\n      return this.attr.decimalFloatingPoint(\"PLANNED-DURATION\");\n    }\n    return null;\n  }\n  get endOnNext() {\n    return this.attr.bool(\"END-ON-NEXT\");\n  }\n  get isValid() {\n    return !!this.id && !this._badValueForSameId && isFiniteNumber(this.startDate.getTime()) && (this.duration === null || this.duration >= 0) && (!this.endOnNext || !!this.class);\n  }\n};\nvar LoadStats = class {\n  constructor() {\n    this.aborted = false;\n    this.loaded = 0;\n    this.retry = 0;\n    this.total = 0;\n    this.chunkCount = 0;\n    this.bwEstimate = 0;\n    this.loading = {\n      start: 0,\n      first: 0,\n      end: 0\n    };\n    this.parsing = {\n      start: 0,\n      end: 0\n    };\n    this.buffering = {\n      start: 0,\n      first: 0,\n      end: 0\n    };\n  }\n};\nvar ElementaryStreamTypes = {\n  AUDIO: \"audio\",\n  VIDEO: \"video\",\n  AUDIOVIDEO: \"audiovideo\"\n};\nvar BaseSegment = class {\n  constructor(baseurl) {\n    this._byteRange = null;\n    this._url = null;\n    this.baseurl = void 0;\n    this.relurl = void 0;\n    this.elementaryStreams = {\n      [ElementaryStreamTypes.AUDIO]: null,\n      [ElementaryStreamTypes.VIDEO]: null,\n      [ElementaryStreamTypes.AUDIOVIDEO]: null\n    };\n    this.baseurl = baseurl;\n  }\n  // setByteRange converts a EXT-X-BYTERANGE attribute into a two element array\n  setByteRange(value, previous) {\n    const params = value.split(\"@\", 2);\n    let start;\n    if (params.length === 1) {\n      start = (previous == null ? void 0 : previous.byteRangeEndOffset) || 0;\n    } else {\n      start = parseInt(params[1]);\n    }\n    this._byteRange = [start, parseInt(params[0]) + start];\n  }\n  get byteRange() {\n    if (!this._byteRange) {\n      return [];\n    }\n    return this._byteRange;\n  }\n  get byteRangeStartOffset() {\n    return this.byteRange[0];\n  }\n  get byteRangeEndOffset() {\n    return this.byteRange[1];\n  }\n  get url() {\n    if (!this._url && this.baseurl && this.relurl) {\n      this._url = urlToolkitExports.buildAbsoluteURL(this.baseurl, this.relurl, {\n        alwaysNormalize: true\n      });\n    }\n    return this._url || \"\";\n  }\n  set url(value) {\n    this._url = value;\n  }\n};\nvar Fragment = class extends BaseSegment {\n  constructor(type, baseurl) {\n    super(baseurl);\n    this._decryptdata = null;\n    this.rawProgramDateTime = null;\n    this.programDateTime = null;\n    this.tagList = [];\n    this.duration = 0;\n    this.sn = 0;\n    this.levelkeys = void 0;\n    this.type = void 0;\n    this.loader = null;\n    this.keyLoader = null;\n    this.level = -1;\n    this.cc = 0;\n    this.startPTS = void 0;\n    this.endPTS = void 0;\n    this.startDTS = void 0;\n    this.endDTS = void 0;\n    this.start = 0;\n    this.deltaPTS = void 0;\n    this.maxStartPTS = void 0;\n    this.minEndPTS = void 0;\n    this.stats = new LoadStats();\n    this.data = void 0;\n    this.bitrateTest = false;\n    this.title = null;\n    this.initSegment = null;\n    this.endList = void 0;\n    this.gap = void 0;\n    this.urlId = 0;\n    this.type = type;\n  }\n  get decryptdata() {\n    const {\n      levelkeys\n    } = this;\n    if (!levelkeys && !this._decryptdata) {\n      return null;\n    }\n    if (!this._decryptdata && this.levelkeys && !this.levelkeys.NONE) {\n      const key = this.levelkeys.identity;\n      if (key) {\n        this._decryptdata = key.getDecryptData(this.sn);\n      } else {\n        const keyFormats = Object.keys(this.levelkeys);\n        if (keyFormats.length === 1) {\n          return this._decryptdata = this.levelkeys[keyFormats[0]].getDecryptData(this.sn);\n        }\n      }\n    }\n    return this._decryptdata;\n  }\n  get end() {\n    return this.start + this.duration;\n  }\n  get endProgramDateTime() {\n    if (this.programDateTime === null) {\n      return null;\n    }\n    if (!isFiniteNumber(this.programDateTime)) {\n      return null;\n    }\n    const duration = !isFiniteNumber(this.duration) ? 0 : this.duration;\n    return this.programDateTime + duration * 1e3;\n  }\n  get encrypted() {\n    var _this$_decryptdata;\n    if ((_this$_decryptdata = this._decryptdata) != null && _this$_decryptdata.encrypted) {\n      return true;\n    } else if (this.levelkeys) {\n      const keyFormats = Object.keys(this.levelkeys);\n      const len = keyFormats.length;\n      if (len > 1 || len === 1 && this.levelkeys[keyFormats[0]].encrypted) {\n        return true;\n      }\n    }\n    return false;\n  }\n  setKeyFormat(keyFormat) {\n    if (this.levelkeys) {\n      const key = this.levelkeys[keyFormat];\n      if (key && !this._decryptdata) {\n        this._decryptdata = key.getDecryptData(this.sn);\n      }\n    }\n  }\n  abortRequests() {\n    var _this$loader, _this$keyLoader;\n    (_this$loader = this.loader) == null ? void 0 : _this$loader.abort();\n    (_this$keyLoader = this.keyLoader) == null ? void 0 : _this$keyLoader.abort();\n  }\n  setElementaryStreamInfo(type, startPTS, endPTS, startDTS, endDTS, partial = false) {\n    const {\n      elementaryStreams\n    } = this;\n    const info = elementaryStreams[type];\n    if (!info) {\n      elementaryStreams[type] = {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS,\n        partial\n      };\n      return;\n    }\n    info.startPTS = Math.min(info.startPTS, startPTS);\n    info.endPTS = Math.max(info.endPTS, endPTS);\n    info.startDTS = Math.min(info.startDTS, startDTS);\n    info.endDTS = Math.max(info.endDTS, endDTS);\n  }\n  clearElementaryStreamInfo() {\n    const {\n      elementaryStreams\n    } = this;\n    elementaryStreams[ElementaryStreamTypes.AUDIO] = null;\n    elementaryStreams[ElementaryStreamTypes.VIDEO] = null;\n    elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO] = null;\n  }\n};\nvar Part = class extends BaseSegment {\n  constructor(partAttrs, frag, baseurl, index, previous) {\n    super(baseurl);\n    this.fragOffset = 0;\n    this.duration = 0;\n    this.gap = false;\n    this.independent = false;\n    this.relurl = void 0;\n    this.fragment = void 0;\n    this.index = void 0;\n    this.stats = new LoadStats();\n    this.duration = partAttrs.decimalFloatingPoint(\"DURATION\");\n    this.gap = partAttrs.bool(\"GAP\");\n    this.independent = partAttrs.bool(\"INDEPENDENT\");\n    this.relurl = partAttrs.enumeratedString(\"URI\");\n    this.fragment = frag;\n    this.index = index;\n    const byteRange = partAttrs.enumeratedString(\"BYTERANGE\");\n    if (byteRange) {\n      this.setByteRange(byteRange, previous);\n    }\n    if (previous) {\n      this.fragOffset = previous.fragOffset + previous.duration;\n    }\n  }\n  get start() {\n    return this.fragment.start + this.fragOffset;\n  }\n  get end() {\n    return this.start + this.duration;\n  }\n  get loaded() {\n    const {\n      elementaryStreams\n    } = this;\n    return !!(elementaryStreams.audio || elementaryStreams.video || elementaryStreams.audiovideo);\n  }\n};\nvar DEFAULT_TARGET_DURATION = 10;\nvar LevelDetails = class {\n  constructor(baseUrl) {\n    this.PTSKnown = false;\n    this.alignedSliding = false;\n    this.averagetargetduration = void 0;\n    this.endCC = 0;\n    this.endSN = 0;\n    this.fragments = void 0;\n    this.fragmentHint = void 0;\n    this.partList = null;\n    this.dateRanges = void 0;\n    this.live = true;\n    this.ageHeader = 0;\n    this.advancedDateTime = void 0;\n    this.updated = true;\n    this.advanced = true;\n    this.availabilityDelay = void 0;\n    this.misses = 0;\n    this.startCC = 0;\n    this.startSN = 0;\n    this.startTimeOffset = null;\n    this.targetduration = 0;\n    this.totalduration = 0;\n    this.type = null;\n    this.url = void 0;\n    this.m3u8 = \"\";\n    this.version = null;\n    this.canBlockReload = false;\n    this.canSkipUntil = 0;\n    this.canSkipDateRanges = false;\n    this.skippedSegments = 0;\n    this.recentlyRemovedDateranges = void 0;\n    this.partHoldBack = 0;\n    this.holdBack = 0;\n    this.partTarget = 0;\n    this.preloadHint = void 0;\n    this.renditionReports = void 0;\n    this.tuneInGoal = 0;\n    this.deltaUpdateFailed = void 0;\n    this.driftStartTime = 0;\n    this.driftEndTime = 0;\n    this.driftStart = 0;\n    this.driftEnd = 0;\n    this.encryptedFragments = void 0;\n    this.playlistParsingError = null;\n    this.variableList = null;\n    this.hasVariableRefs = false;\n    this.fragments = [];\n    this.encryptedFragments = [];\n    this.dateRanges = {};\n    this.url = baseUrl;\n  }\n  reloaded(previous) {\n    if (!previous) {\n      this.advanced = true;\n      this.updated = true;\n      return;\n    }\n    const partSnDiff = this.lastPartSn - previous.lastPartSn;\n    const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;\n    this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;\n    this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;\n    if (this.updated || this.advanced) {\n      this.misses = Math.floor(previous.misses * 0.6);\n    } else {\n      this.misses = previous.misses + 1;\n    }\n    this.availabilityDelay = previous.availabilityDelay;\n  }\n  get hasProgramDateTime() {\n    if (this.fragments.length) {\n      return isFiniteNumber(this.fragments[this.fragments.length - 1].programDateTime);\n    }\n    return false;\n  }\n  get levelTargetDuration() {\n    return this.averagetargetduration || this.targetduration || DEFAULT_TARGET_DURATION;\n  }\n  get drift() {\n    const runTime = this.driftEndTime - this.driftStartTime;\n    if (runTime > 0) {\n      const runDuration = this.driftEnd - this.driftStart;\n      return runDuration * 1e3 / runTime;\n    }\n    return 1;\n  }\n  get edge() {\n    return this.partEnd || this.fragmentEnd;\n  }\n  get partEnd() {\n    var _this$partList;\n    if ((_this$partList = this.partList) != null && _this$partList.length) {\n      return this.partList[this.partList.length - 1].end;\n    }\n    return this.fragmentEnd;\n  }\n  get fragmentEnd() {\n    var _this$fragments;\n    if ((_this$fragments = this.fragments) != null && _this$fragments.length) {\n      return this.fragments[this.fragments.length - 1].end;\n    }\n    return 0;\n  }\n  get age() {\n    if (this.advancedDateTime) {\n      return Math.max(Date.now() - this.advancedDateTime, 0) / 1e3;\n    }\n    return 0;\n  }\n  get lastPartIndex() {\n    var _this$partList2;\n    if ((_this$partList2 = this.partList) != null && _this$partList2.length) {\n      return this.partList[this.partList.length - 1].index;\n    }\n    return -1;\n  }\n  get lastPartSn() {\n    var _this$partList3;\n    if ((_this$partList3 = this.partList) != null && _this$partList3.length) {\n      return this.partList[this.partList.length - 1].fragment.sn;\n    }\n    return this.endSN;\n  }\n};\nfunction base64Decode(base64encodedStr) {\n  return Uint8Array.from(atob(base64encodedStr), (c4) => c4.charCodeAt(0));\n}\nfunction getKeyIdBytes(str) {\n  const keyIdbytes = strToUtf8array(str).subarray(0, 16);\n  const paddedkeyIdbytes = new Uint8Array(16);\n  paddedkeyIdbytes.set(keyIdbytes, 16 - keyIdbytes.length);\n  return paddedkeyIdbytes;\n}\nfunction changeEndianness(keyId) {\n  const swap = function swap2(array, from, to) {\n    const cur = array[from];\n    array[from] = array[to];\n    array[to] = cur;\n  };\n  swap(keyId, 0, 3);\n  swap(keyId, 1, 2);\n  swap(keyId, 4, 5);\n  swap(keyId, 6, 7);\n}\nfunction convertDataUriToArrayBytes(uri) {\n  const colonsplit = uri.split(\":\");\n  let keydata = null;\n  if (colonsplit[0] === \"data\" && colonsplit.length === 2) {\n    const semicolonsplit = colonsplit[1].split(\";\");\n    const commasplit = semicolonsplit[semicolonsplit.length - 1].split(\",\");\n    if (commasplit.length === 2) {\n      const isbase64 = commasplit[0] === \"base64\";\n      const data = commasplit[1];\n      if (isbase64) {\n        semicolonsplit.splice(-1, 1);\n        keydata = base64Decode(data);\n      } else {\n        keydata = getKeyIdBytes(data);\n      }\n    }\n  }\n  return keydata;\n}\nfunction strToUtf8array(str) {\n  return Uint8Array.from(unescape(encodeURIComponent(str)), (c4) => c4.charCodeAt(0));\n}\nvar optionalSelf = typeof self !== \"undefined\" ? self : void 0;\nvar KeySystems = {\n  CLEARKEY: \"org.w3.clearkey\",\n  FAIRPLAY: \"com.apple.fps\",\n  PLAYREADY: \"com.microsoft.playready\",\n  WIDEVINE: \"com.widevine.alpha\"\n};\nvar KeySystemFormats = {\n  CLEARKEY: \"org.w3.clearkey\",\n  FAIRPLAY: \"com.apple.streamingkeydelivery\",\n  PLAYREADY: \"com.microsoft.playready\",\n  WIDEVINE: \"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\"\n};\nfunction keySystemFormatToKeySystemDomain(format2) {\n  switch (format2) {\n    case KeySystemFormats.FAIRPLAY:\n      return KeySystems.FAIRPLAY;\n    case KeySystemFormats.PLAYREADY:\n      return KeySystems.PLAYREADY;\n    case KeySystemFormats.WIDEVINE:\n      return KeySystems.WIDEVINE;\n    case KeySystemFormats.CLEARKEY:\n      return KeySystems.CLEARKEY;\n  }\n}\nvar KeySystemIds = {\n  CENC: \"1077efecc0b24d02ace33c1e52e2fb4b\",\n  CLEARKEY: \"e2719d58a985b3c9781ab030af78d30e\",\n  FAIRPLAY: \"94ce86fb07ff4f43adb893d2fa968ca2\",\n  PLAYREADY: \"9a04f07998404286ab92e65be0885f95\",\n  WIDEVINE: \"edef8ba979d64acea3c827dcd51d21ed\"\n};\nfunction keySystemIdToKeySystemDomain(systemId) {\n  if (systemId === KeySystemIds.WIDEVINE) {\n    return KeySystems.WIDEVINE;\n  } else if (systemId === KeySystemIds.PLAYREADY) {\n    return KeySystems.PLAYREADY;\n  } else if (systemId === KeySystemIds.CENC || systemId === KeySystemIds.CLEARKEY) {\n    return KeySystems.CLEARKEY;\n  }\n}\nfunction keySystemDomainToKeySystemFormat(keySystem) {\n  switch (keySystem) {\n    case KeySystems.FAIRPLAY:\n      return KeySystemFormats.FAIRPLAY;\n    case KeySystems.PLAYREADY:\n      return KeySystemFormats.PLAYREADY;\n    case KeySystems.WIDEVINE:\n      return KeySystemFormats.WIDEVINE;\n    case KeySystems.CLEARKEY:\n      return KeySystemFormats.CLEARKEY;\n  }\n}\nfunction getKeySystemsForConfig(config) {\n  const {\n    drmSystems,\n    widevineLicenseUrl\n  } = config;\n  const keySystemsToAttempt = drmSystems ? [KeySystems.FAIRPLAY, KeySystems.WIDEVINE, KeySystems.PLAYREADY, KeySystems.CLEARKEY].filter((keySystem) => !!drmSystems[keySystem]) : [];\n  if (!keySystemsToAttempt[KeySystems.WIDEVINE] && widevineLicenseUrl) {\n    keySystemsToAttempt.push(KeySystems.WIDEVINE);\n  }\n  return keySystemsToAttempt;\n}\nvar requestMediaKeySystemAccess = function(_optionalSelf$navigat) {\n  if (optionalSelf != null && (_optionalSelf$navigat = optionalSelf.navigator) != null && _optionalSelf$navigat.requestMediaKeySystemAccess) {\n    return self.navigator.requestMediaKeySystemAccess.bind(self.navigator);\n  } else {\n    return null;\n  }\n}();\nfunction getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, drmSystemOptions) {\n  let initDataTypes;\n  switch (keySystem) {\n    case KeySystems.FAIRPLAY:\n      initDataTypes = [\"cenc\", \"sinf\"];\n      break;\n    case KeySystems.WIDEVINE:\n    case KeySystems.PLAYREADY:\n      initDataTypes = [\"cenc\"];\n      break;\n    case KeySystems.CLEARKEY:\n      initDataTypes = [\"cenc\", \"keyids\"];\n      break;\n    default:\n      throw new Error(`Unknown key-system: ${keySystem}`);\n  }\n  return createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions);\n}\nfunction createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions) {\n  const baseConfig = {\n    initDataTypes,\n    persistentState: drmSystemOptions.persistentState || \"optional\",\n    distinctiveIdentifier: drmSystemOptions.distinctiveIdentifier || \"optional\",\n    sessionTypes: drmSystemOptions.sessionTypes || [drmSystemOptions.sessionType || \"temporary\"],\n    audioCapabilities: audioCodecs.map((codec) => ({\n      contentType: `audio/mp4; codecs=\"${codec}\"`,\n      robustness: drmSystemOptions.audioRobustness || \"\",\n      encryptionScheme: drmSystemOptions.audioEncryptionScheme || null\n    })),\n    videoCapabilities: videoCodecs.map((codec) => ({\n      contentType: `video/mp4; codecs=\"${codec}\"`,\n      robustness: drmSystemOptions.videoRobustness || \"\",\n      encryptionScheme: drmSystemOptions.videoEncryptionScheme || null\n    }))\n  };\n  return [baseConfig];\n}\nfunction parsePlayReadyWRM(keyBytes) {\n  const keyBytesUtf16 = new Uint16Array(keyBytes.buffer, keyBytes.byteOffset, keyBytes.byteLength / 2);\n  const keyByteStr = String.fromCharCode.apply(null, Array.from(keyBytesUtf16));\n  const xmlKeyBytes = keyByteStr.substring(keyByteStr.indexOf(\"<\"), keyByteStr.length);\n  const parser = new DOMParser();\n  const xmlDoc = parser.parseFromString(xmlKeyBytes, \"text/xml\");\n  const keyData = xmlDoc.getElementsByTagName(\"KID\")[0];\n  if (keyData) {\n    const keyId = keyData.childNodes[0] ? keyData.childNodes[0].nodeValue : keyData.getAttribute(\"VALUE\");\n    if (keyId) {\n      const keyIdArray = base64Decode(keyId).subarray(0, 16);\n      changeEndianness(keyIdArray);\n      return keyIdArray;\n    }\n  }\n  return null;\n}\nfunction sliceUint8(array, start, end) {\n  return Uint8Array.prototype.slice ? array.slice(start, end) : new Uint8Array(Array.prototype.slice.call(array, start, end));\n}\nvar isHeader$2 = (data, offset) => {\n  if (offset + 10 <= data.length) {\n    if (data[offset] === 73 && data[offset + 1] === 68 && data[offset + 2] === 51) {\n      if (data[offset + 3] < 255 && data[offset + 4] < 255) {\n        if (data[offset + 6] < 128 && data[offset + 7] < 128 && data[offset + 8] < 128 && data[offset + 9] < 128) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n};\nvar isFooter = (data, offset) => {\n  if (offset + 10 <= data.length) {\n    if (data[offset] === 51 && data[offset + 1] === 68 && data[offset + 2] === 73) {\n      if (data[offset + 3] < 255 && data[offset + 4] < 255) {\n        if (data[offset + 6] < 128 && data[offset + 7] < 128 && data[offset + 8] < 128 && data[offset + 9] < 128) {\n          return true;\n        }\n      }\n    }\n  }\n  return false;\n};\nvar getID3Data = (data, offset) => {\n  const front = offset;\n  let length = 0;\n  while (isHeader$2(data, offset)) {\n    length += 10;\n    const size = readSize(data, offset + 6);\n    length += size;\n    if (isFooter(data, offset + 10)) {\n      length += 10;\n    }\n    offset += length;\n  }\n  if (length > 0) {\n    return data.subarray(front, front + length);\n  }\n  return void 0;\n};\nvar readSize = (data, offset) => {\n  let size = 0;\n  size = (data[offset] & 127) << 21;\n  size |= (data[offset + 1] & 127) << 14;\n  size |= (data[offset + 2] & 127) << 7;\n  size |= data[offset + 3] & 127;\n  return size;\n};\nvar canParse$2 = (data, offset) => {\n  return isHeader$2(data, offset) && readSize(data, offset + 6) + 10 <= data.length - offset;\n};\nvar getTimeStamp = (data) => {\n  const frames = getID3Frames(data);\n  for (let i2 = 0; i2 < frames.length; i2++) {\n    const frame = frames[i2];\n    if (isTimeStampFrame(frame)) {\n      return readTimeStamp(frame);\n    }\n  }\n  return void 0;\n};\nvar isTimeStampFrame = (frame) => {\n  return frame && frame.key === \"PRIV\" && frame.info === \"com.apple.streaming.transportStreamTimestamp\";\n};\nvar getFrameData = (data) => {\n  const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n  const size = readSize(data, 4);\n  const offset = 10;\n  return {\n    type,\n    size,\n    data: data.subarray(offset, offset + size)\n  };\n};\nvar getID3Frames = (id3Data) => {\n  let offset = 0;\n  const frames = [];\n  while (isHeader$2(id3Data, offset)) {\n    const size = readSize(id3Data, offset + 6);\n    offset += 10;\n    const end = offset + size;\n    while (offset + 8 < end) {\n      const frameData = getFrameData(id3Data.subarray(offset));\n      const frame = decodeFrame(frameData);\n      if (frame) {\n        frames.push(frame);\n      }\n      offset += frameData.size + 10;\n    }\n    if (isFooter(id3Data, offset)) {\n      offset += 10;\n    }\n  }\n  return frames;\n};\nvar decodeFrame = (frame) => {\n  if (frame.type === \"PRIV\") {\n    return decodePrivFrame(frame);\n  } else if (frame.type[0] === \"W\") {\n    return decodeURLFrame(frame);\n  }\n  return decodeTextFrame(frame);\n};\nvar decodePrivFrame = (frame) => {\n  if (frame.size < 2) {\n    return void 0;\n  }\n  const owner = utf8ArrayToStr(frame.data, true);\n  const privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n  return {\n    key: frame.type,\n    info: owner,\n    data: privateData.buffer\n  };\n};\nvar decodeTextFrame = (frame) => {\n  if (frame.size < 2) {\n    return void 0;\n  }\n  if (frame.type === \"TXXX\") {\n    let index = 1;\n    const description = utf8ArrayToStr(frame.data.subarray(index), true);\n    index += description.length + 1;\n    const value = utf8ArrayToStr(frame.data.subarray(index));\n    return {\n      key: frame.type,\n      info: description,\n      data: value\n    };\n  }\n  const text = utf8ArrayToStr(frame.data.subarray(1));\n  return {\n    key: frame.type,\n    data: text\n  };\n};\nvar decodeURLFrame = (frame) => {\n  if (frame.type === \"WXXX\") {\n    if (frame.size < 2) {\n      return void 0;\n    }\n    let index = 1;\n    const description = utf8ArrayToStr(frame.data.subarray(index), true);\n    index += description.length + 1;\n    const value = utf8ArrayToStr(frame.data.subarray(index));\n    return {\n      key: frame.type,\n      info: description,\n      data: value\n    };\n  }\n  const url = utf8ArrayToStr(frame.data);\n  return {\n    key: frame.type,\n    data: url\n  };\n};\nvar readTimeStamp = (timeStampFrame) => {\n  if (timeStampFrame.data.byteLength === 8) {\n    const data = new Uint8Array(timeStampFrame.data);\n    const pts33Bit = data[3] & 1;\n    let timestamp = (data[4] << 23) + (data[5] << 15) + (data[6] << 7) + data[7];\n    timestamp /= 45;\n    if (pts33Bit) {\n      timestamp += 4772185884e-2;\n    }\n    return Math.round(timestamp);\n  }\n  return void 0;\n};\nvar utf8ArrayToStr = (array, exitOnNull = false) => {\n  const decoder2 = getTextDecoder();\n  if (decoder2) {\n    const decoded = decoder2.decode(array);\n    if (exitOnNull) {\n      const idx = decoded.indexOf(\"\\0\");\n      return idx !== -1 ? decoded.substring(0, idx) : decoded;\n    }\n    return decoded.replace(/\\0/g, \"\");\n  }\n  const len = array.length;\n  let c4;\n  let char2;\n  let char3;\n  let out = \"\";\n  let i2 = 0;\n  while (i2 < len) {\n    c4 = array[i2++];\n    if (c4 === 0 && exitOnNull) {\n      return out;\n    } else if (c4 === 0 || c4 === 3) {\n      continue;\n    }\n    switch (c4 >> 4) {\n      case 0:\n      case 1:\n      case 2:\n      case 3:\n      case 4:\n      case 5:\n      case 6:\n      case 7:\n        out += String.fromCharCode(c4);\n        break;\n      case 12:\n      case 13:\n        char2 = array[i2++];\n        out += String.fromCharCode((c4 & 31) << 6 | char2 & 63);\n        break;\n      case 14:\n        char2 = array[i2++];\n        char3 = array[i2++];\n        out += String.fromCharCode((c4 & 15) << 12 | (char2 & 63) << 6 | (char3 & 63) << 0);\n        break;\n    }\n  }\n  return out;\n};\nvar decoder;\nfunction getTextDecoder() {\n  if (navigator.userAgent.includes(\"PlayStation 4\")) {\n    return;\n  }\n  if (!decoder && typeof self.TextDecoder !== \"undefined\") {\n    decoder = new self.TextDecoder(\"utf-8\");\n  }\n  return decoder;\n}\nvar Hex = {\n  hexDump: function(array) {\n    let str = \"\";\n    for (let i2 = 0; i2 < array.length; i2++) {\n      let h3 = array[i2].toString(16);\n      if (h3.length < 2) {\n        h3 = \"0\" + h3;\n      }\n      str += h3;\n    }\n    return str;\n  }\n};\nvar UINT32_MAX$1 = Math.pow(2, 32) - 1;\nvar push = [].push;\nvar RemuxerTrackIdConfig = {\n  video: 1,\n  audio: 2,\n  id3: 3,\n  text: 4\n};\nfunction bin2str(data) {\n  return String.fromCharCode.apply(null, data);\n}\nfunction readUint16(buffer, offset) {\n  const val = buffer[offset] << 8 | buffer[offset + 1];\n  return val < 0 ? 65536 + val : val;\n}\nfunction readUint32(buffer, offset) {\n  const val = readSint32(buffer, offset);\n  return val < 0 ? 4294967296 + val : val;\n}\nfunction readUint64(buffer, offset) {\n  let result = readUint32(buffer, offset);\n  result *= Math.pow(2, 32);\n  result += readUint32(buffer, offset + 4);\n  return result;\n}\nfunction readSint32(buffer, offset) {\n  return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];\n}\nfunction writeUint32(buffer, offset, value) {\n  buffer[offset] = value >> 24;\n  buffer[offset + 1] = value >> 16 & 255;\n  buffer[offset + 2] = value >> 8 & 255;\n  buffer[offset + 3] = value & 255;\n}\nfunction hasMoofData(data) {\n  const end = data.byteLength;\n  for (let i2 = 0; i2 < end; ) {\n    const size = readUint32(data, i2);\n    if (size > 8 && data[i2 + 4] === 109 && data[i2 + 5] === 111 && data[i2 + 6] === 111 && data[i2 + 7] === 102) {\n      return true;\n    }\n    i2 = size > 1 ? i2 + size : end;\n  }\n  return false;\n}\nfunction findBox(data, path) {\n  const results = [];\n  if (!path.length) {\n    return results;\n  }\n  const end = data.byteLength;\n  for (let i2 = 0; i2 < end; ) {\n    const size = readUint32(data, i2);\n    const type = bin2str(data.subarray(i2 + 4, i2 + 8));\n    const endbox = size > 1 ? i2 + size : end;\n    if (type === path[0]) {\n      if (path.length === 1) {\n        results.push(data.subarray(i2 + 8, endbox));\n      } else {\n        const subresults = findBox(data.subarray(i2 + 8, endbox), path.slice(1));\n        if (subresults.length) {\n          push.apply(results, subresults);\n        }\n      }\n    }\n    i2 = endbox;\n  }\n  return results;\n}\nfunction parseSegmentIndex(sidx) {\n  const references = [];\n  const version = sidx[0];\n  let index = 8;\n  const timescale = readUint32(sidx, index);\n  index += 4;\n  let earliestPresentationTime = 0;\n  let firstOffset = 0;\n  if (version === 0) {\n    earliestPresentationTime = readUint32(sidx, index);\n    firstOffset = readUint32(sidx, index + 4);\n    index += 8;\n  } else {\n    earliestPresentationTime = readUint64(sidx, index);\n    firstOffset = readUint64(sidx, index + 8);\n    index += 16;\n  }\n  index += 2;\n  let startByte = sidx.length + firstOffset;\n  const referencesCount = readUint16(sidx, index);\n  index += 2;\n  for (let i2 = 0; i2 < referencesCount; i2++) {\n    let referenceIndex = index;\n    const referenceInfo = readUint32(sidx, referenceIndex);\n    referenceIndex += 4;\n    const referenceSize = referenceInfo & 2147483647;\n    const referenceType = (referenceInfo & 2147483648) >>> 31;\n    if (referenceType === 1) {\n      logger.warn(\"SIDX has hierarchical references (not supported)\");\n      return null;\n    }\n    const subsegmentDuration = readUint32(sidx, referenceIndex);\n    referenceIndex += 4;\n    references.push({\n      referenceSize,\n      subsegmentDuration,\n      // unscaled\n      info: {\n        duration: subsegmentDuration / timescale,\n        start: startByte,\n        end: startByte + referenceSize - 1\n      }\n    });\n    startByte += referenceSize;\n    referenceIndex += 4;\n    index = referenceIndex;\n  }\n  return {\n    earliestPresentationTime,\n    timescale,\n    version,\n    referencesCount,\n    references\n  };\n}\nfunction parseInitSegment(initSegment) {\n  const result = [];\n  const traks = findBox(initSegment, [\"moov\", \"trak\"]);\n  for (let i2 = 0; i2 < traks.length; i2++) {\n    const trak = traks[i2];\n    const tkhd = findBox(trak, [\"tkhd\"])[0];\n    if (tkhd) {\n      let version = tkhd[0];\n      const trackId = readUint32(tkhd, version === 0 ? 12 : 20);\n      const mdhd = findBox(trak, [\"mdia\", \"mdhd\"])[0];\n      if (mdhd) {\n        version = mdhd[0];\n        const timescale = readUint32(mdhd, version === 0 ? 12 : 20);\n        const hdlr = findBox(trak, [\"mdia\", \"hdlr\"])[0];\n        if (hdlr) {\n          const hdlrType = bin2str(hdlr.subarray(8, 12));\n          const type = {\n            soun: ElementaryStreamTypes.AUDIO,\n            vide: ElementaryStreamTypes.VIDEO\n          }[hdlrType];\n          if (type) {\n            const stsd = findBox(trak, [\"mdia\", \"minf\", \"stbl\", \"stsd\"])[0];\n            const stsdData = parseStsd(stsd);\n            result[trackId] = {\n              timescale,\n              type\n            };\n            result[type] = _objectSpread2({\n              timescale,\n              id: trackId\n            }, stsdData);\n          }\n        }\n      }\n    }\n  }\n  const trex = findBox(initSegment, [\"moov\", \"mvex\", \"trex\"]);\n  trex.forEach((trex2) => {\n    const trackId = readUint32(trex2, 4);\n    const track = result[trackId];\n    if (track) {\n      track.default = {\n        duration: readUint32(trex2, 12),\n        flags: readUint32(trex2, 20)\n      };\n    }\n  });\n  return result;\n}\nfunction parseStsd(stsd) {\n  const sampleEntries = stsd.subarray(8);\n  const sampleEntriesEnd = sampleEntries.subarray(8 + 78);\n  const fourCC = bin2str(sampleEntries.subarray(4, 8));\n  let codec = fourCC;\n  const encrypted = fourCC === \"enca\" || fourCC === \"encv\";\n  if (encrypted) {\n    const encBox = findBox(sampleEntries, [fourCC])[0];\n    const encBoxChildren = encBox.subarray(fourCC === \"enca\" ? 28 : 78);\n    const sinfs = findBox(encBoxChildren, [\"sinf\"]);\n    sinfs.forEach((sinf) => {\n      const schm = findBox(sinf, [\"schm\"])[0];\n      if (schm) {\n        const scheme = bin2str(schm.subarray(4, 8));\n        if (scheme === \"cbcs\" || scheme === \"cenc\") {\n          const frma = findBox(sinf, [\"frma\"])[0];\n          if (frma) {\n            codec = bin2str(frma);\n          }\n        }\n      }\n    });\n  }\n  switch (codec) {\n    case \"avc1\":\n    case \"avc2\":\n    case \"avc3\":\n    case \"avc4\": {\n      const avcCBox = findBox(sampleEntriesEnd, [\"avcC\"])[0];\n      codec += \".\" + toHex(avcCBox[1]) + toHex(avcCBox[2]) + toHex(avcCBox[3]);\n      break;\n    }\n    case \"mp4a\": {\n      const codecBox = findBox(sampleEntries, [fourCC])[0];\n      const esdsBox = findBox(codecBox.subarray(28), [\"esds\"])[0];\n      if (esdsBox && esdsBox.length > 12) {\n        let i2 = 4;\n        if (esdsBox[i2++] !== 3) {\n          break;\n        }\n        i2 = skipBERInteger(esdsBox, i2);\n        i2 += 2;\n        const flags = esdsBox[i2++];\n        if (flags & 128) {\n          i2 += 2;\n        }\n        if (flags & 64) {\n          i2 += esdsBox[i2++];\n        }\n        if (esdsBox[i2++] !== 4) {\n          break;\n        }\n        i2 = skipBERInteger(esdsBox, i2);\n        const objectType = esdsBox[i2++];\n        if (objectType === 64) {\n          codec += \".\" + toHex(objectType);\n        } else {\n          break;\n        }\n        i2 += 12;\n        if (esdsBox[i2++] !== 5) {\n          break;\n        }\n        i2 = skipBERInteger(esdsBox, i2);\n        const firstByte = esdsBox[i2++];\n        let audioObjectType = (firstByte & 248) >> 3;\n        if (audioObjectType === 31) {\n          audioObjectType += 1 + ((firstByte & 7) << 3) + ((esdsBox[i2] & 224) >> 5);\n        }\n        codec += \".\" + audioObjectType;\n      }\n      break;\n    }\n    case \"hvc1\":\n    case \"hev1\": {\n      const hvcCBox = findBox(sampleEntriesEnd, [\"hvcC\"])[0];\n      const profileByte = hvcCBox[1];\n      const profileSpace = [\"\", \"A\", \"B\", \"C\"][profileByte >> 6];\n      const generalProfileIdc = profileByte & 31;\n      const profileCompat = readUint32(hvcCBox, 2);\n      const tierFlag = (profileByte & 32) >> 5 ? \"H\" : \"L\";\n      const levelIDC = hvcCBox[12];\n      const constraintIndicator = hvcCBox.subarray(6, 12);\n      codec += \".\" + profileSpace + generalProfileIdc;\n      codec += \".\" + profileCompat.toString(16).toUpperCase();\n      codec += \".\" + tierFlag + levelIDC;\n      let constraintString = \"\";\n      for (let i2 = constraintIndicator.length; i2--; ) {\n        const byte = constraintIndicator[i2];\n        if (byte || constraintString) {\n          const encodedByte = byte.toString(16).toUpperCase();\n          constraintString = \".\" + encodedByte + constraintString;\n        }\n      }\n      codec += constraintString;\n      break;\n    }\n    case \"dvh1\":\n    case \"dvhe\": {\n      const dvcCBox = findBox(sampleEntriesEnd, [\"dvcC\"])[0];\n      const profile = dvcCBox[2] >> 1 & 127;\n      const level = dvcCBox[2] << 5 & 32 | dvcCBox[3] >> 3 & 31;\n      codec += \".\" + addLeadingZero(profile) + \".\" + addLeadingZero(level);\n      break;\n    }\n    case \"vp09\": {\n      const vpcCBox = findBox(sampleEntriesEnd, [\"vpcC\"])[0];\n      const profile = vpcCBox[4];\n      const level = vpcCBox[5];\n      const bitDepth = vpcCBox[6] >> 4 & 15;\n      codec += \".\" + addLeadingZero(profile) + \".\" + addLeadingZero(level) + \".\" + addLeadingZero(bitDepth);\n      break;\n    }\n    case \"av01\": {\n      const av1CBox = findBox(sampleEntriesEnd, [\"av1C\"])[0];\n      const profile = av1CBox[1] >>> 5;\n      const level = av1CBox[1] & 31;\n      const tierFlag = av1CBox[2] >>> 7 ? \"H\" : \"M\";\n      const highBitDepth = (av1CBox[2] & 64) >> 6;\n      const twelveBit = (av1CBox[2] & 32) >> 5;\n      const bitDepth = profile === 2 && highBitDepth ? twelveBit ? 12 : 10 : highBitDepth ? 10 : 8;\n      const monochrome = (av1CBox[2] & 16) >> 4;\n      const chromaSubsamplingX = (av1CBox[2] & 8) >> 3;\n      const chromaSubsamplingY = (av1CBox[2] & 4) >> 2;\n      const chromaSamplePosition = av1CBox[2] & 3;\n      const colorPrimaries = 1;\n      const transferCharacteristics = 1;\n      const matrixCoefficients = 1;\n      const videoFullRangeFlag = 0;\n      codec += \".\" + profile + \".\" + addLeadingZero(level) + tierFlag + \".\" + addLeadingZero(bitDepth) + \".\" + monochrome + \".\" + chromaSubsamplingX + chromaSubsamplingY + chromaSamplePosition + \".\" + addLeadingZero(colorPrimaries) + \".\" + addLeadingZero(transferCharacteristics) + \".\" + addLeadingZero(matrixCoefficients) + \".\" + videoFullRangeFlag;\n      break;\n    }\n  }\n  return {\n    codec,\n    encrypted\n  };\n}\nfunction skipBERInteger(bytes, i2) {\n  const limit = i2 + 5;\n  while (bytes[i2++] & 128 && i2 < limit) {\n  }\n  return i2;\n}\nfunction toHex(x4) {\n  return (\"0\" + x4.toString(16).toUpperCase()).slice(-2);\n}\nfunction addLeadingZero(num) {\n  return (num < 10 ? \"0\" : \"\") + num;\n}\nfunction patchEncyptionData(initSegment, decryptdata) {\n  if (!initSegment || !decryptdata) {\n    return initSegment;\n  }\n  const keyId = decryptdata.keyId;\n  if (keyId && decryptdata.isCommonEncryption) {\n    const traks = findBox(initSegment, [\"moov\", \"trak\"]);\n    traks.forEach((trak) => {\n      const stsd = findBox(trak, [\"mdia\", \"minf\", \"stbl\", \"stsd\"])[0];\n      const sampleEntries = stsd.subarray(8);\n      let encBoxes = findBox(sampleEntries, [\"enca\"]);\n      const isAudio = encBoxes.length > 0;\n      if (!isAudio) {\n        encBoxes = findBox(sampleEntries, [\"encv\"]);\n      }\n      encBoxes.forEach((enc) => {\n        const encBoxChildren = isAudio ? enc.subarray(28) : enc.subarray(78);\n        const sinfBoxes = findBox(encBoxChildren, [\"sinf\"]);\n        sinfBoxes.forEach((sinf) => {\n          const tenc = parseSinf(sinf);\n          if (tenc) {\n            const tencKeyId = tenc.subarray(8, 24);\n            if (!tencKeyId.some((b4) => b4 !== 0)) {\n              logger.log(`[eme] Patching keyId in 'enc${isAudio ? \"a\" : \"v\"}>sinf>>tenc' box: ${Hex.hexDump(tencKeyId)} -> ${Hex.hexDump(keyId)}`);\n              tenc.set(keyId, 8);\n            }\n          }\n        });\n      });\n    });\n  }\n  return initSegment;\n}\nfunction parseSinf(sinf) {\n  const schm = findBox(sinf, [\"schm\"])[0];\n  if (schm) {\n    const scheme = bin2str(schm.subarray(4, 8));\n    if (scheme === \"cbcs\" || scheme === \"cenc\") {\n      return findBox(sinf, [\"schi\", \"tenc\"])[0];\n    }\n  }\n  return null;\n}\nfunction getStartDTS(initData, fmp4) {\n  return findBox(fmp4, [\"moof\", \"traf\"]).reduce((result, traf) => {\n    const tfdt = findBox(traf, [\"tfdt\"])[0];\n    const version = tfdt[0];\n    const start = findBox(traf, [\"tfhd\"]).reduce((result2, tfhd) => {\n      const id = readUint32(tfhd, 4);\n      const track = initData[id];\n      if (track) {\n        let baseTime = readUint32(tfdt, 4);\n        if (version === 1) {\n          if (baseTime === UINT32_MAX$1) {\n            logger.warn(`[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time`);\n            return result2;\n          }\n          baseTime *= UINT32_MAX$1 + 1;\n          baseTime += readUint32(tfdt, 8);\n        }\n        const scale = track.timescale || 9e4;\n        const startTime = baseTime / scale;\n        if (isFiniteNumber(startTime) && (result2 === null || startTime < result2)) {\n          return startTime;\n        }\n      }\n      return result2;\n    }, null);\n    if (start !== null && isFiniteNumber(start) && (result === null || start < result)) {\n      return start;\n    }\n    return result;\n  }, null);\n}\nfunction getDuration(data, initData) {\n  let rawDuration = 0;\n  let videoDuration = 0;\n  let audioDuration = 0;\n  const trafs = findBox(data, [\"moof\", \"traf\"]);\n  for (let i2 = 0; i2 < trafs.length; i2++) {\n    const traf = trafs[i2];\n    const tfhd = findBox(traf, [\"tfhd\"])[0];\n    const id = readUint32(tfhd, 4);\n    const track = initData[id];\n    if (!track) {\n      continue;\n    }\n    const trackDefault = track.default;\n    const tfhdFlags = readUint32(tfhd, 0) | (trackDefault == null ? void 0 : trackDefault.flags);\n    let sampleDuration = trackDefault == null ? void 0 : trackDefault.duration;\n    if (tfhdFlags & 8) {\n      if (tfhdFlags & 2) {\n        sampleDuration = readUint32(tfhd, 12);\n      } else {\n        sampleDuration = readUint32(tfhd, 8);\n      }\n    }\n    const timescale = track.timescale || 9e4;\n    const truns = findBox(traf, [\"trun\"]);\n    for (let j4 = 0; j4 < truns.length; j4++) {\n      rawDuration = computeRawDurationFromSamples(truns[j4]);\n      if (!rawDuration && sampleDuration) {\n        const sampleCount = readUint32(truns[j4], 4);\n        rawDuration = sampleDuration * sampleCount;\n      }\n      if (track.type === ElementaryStreamTypes.VIDEO) {\n        videoDuration += rawDuration / timescale;\n      } else if (track.type === ElementaryStreamTypes.AUDIO) {\n        audioDuration += rawDuration / timescale;\n      }\n    }\n  }\n  if (videoDuration === 0 && audioDuration === 0) {\n    let sidxMinStart = Infinity;\n    let sidxMaxEnd = 0;\n    let sidxDuration = 0;\n    const sidxs = findBox(data, [\"sidx\"]);\n    for (let i2 = 0; i2 < sidxs.length; i2++) {\n      const sidx = parseSegmentIndex(sidxs[i2]);\n      if (sidx != null && sidx.references) {\n        sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);\n        const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);\n        sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);\n        sidxDuration = sidxMaxEnd - sidxMinStart;\n      }\n    }\n    if (sidxDuration && isFiniteNumber(sidxDuration)) {\n      return sidxDuration;\n    }\n  }\n  if (videoDuration) {\n    return videoDuration;\n  }\n  return audioDuration;\n}\nfunction computeRawDurationFromSamples(trun) {\n  const flags = readUint32(trun, 0);\n  let offset = 8;\n  if (flags & 1) {\n    offset += 4;\n  }\n  if (flags & 4) {\n    offset += 4;\n  }\n  let duration = 0;\n  const sampleCount = readUint32(trun, 4);\n  for (let i2 = 0; i2 < sampleCount; i2++) {\n    if (flags & 256) {\n      const sampleDuration = readUint32(trun, offset);\n      duration += sampleDuration;\n      offset += 4;\n    }\n    if (flags & 512) {\n      offset += 4;\n    }\n    if (flags & 1024) {\n      offset += 4;\n    }\n    if (flags & 2048) {\n      offset += 4;\n    }\n  }\n  return duration;\n}\nfunction offsetStartDTS(initData, fmp4, timeOffset) {\n  findBox(fmp4, [\"moof\", \"traf\"]).forEach((traf) => {\n    findBox(traf, [\"tfhd\"]).forEach((tfhd) => {\n      const id = readUint32(tfhd, 4);\n      const track = initData[id];\n      if (!track) {\n        return;\n      }\n      const timescale = track.timescale || 9e4;\n      findBox(traf, [\"tfdt\"]).forEach((tfdt) => {\n        const version = tfdt[0];\n        const offset = timeOffset * timescale;\n        if (offset) {\n          let baseMediaDecodeTime = readUint32(tfdt, 4);\n          if (version === 0) {\n            baseMediaDecodeTime -= offset;\n            baseMediaDecodeTime = Math.max(baseMediaDecodeTime, 0);\n            writeUint32(tfdt, 4, baseMediaDecodeTime);\n          } else {\n            baseMediaDecodeTime *= Math.pow(2, 32);\n            baseMediaDecodeTime += readUint32(tfdt, 8);\n            baseMediaDecodeTime -= offset;\n            baseMediaDecodeTime = Math.max(baseMediaDecodeTime, 0);\n            const upper = Math.floor(baseMediaDecodeTime / (UINT32_MAX$1 + 1));\n            const lower = Math.floor(baseMediaDecodeTime % (UINT32_MAX$1 + 1));\n            writeUint32(tfdt, 4, upper);\n            writeUint32(tfdt, 8, lower);\n          }\n        }\n      });\n    });\n  });\n}\nfunction segmentValidRange(data) {\n  const segmentedRange = {\n    valid: null,\n    remainder: null\n  };\n  const moofs = findBox(data, [\"moof\"]);\n  if (moofs.length < 2) {\n    segmentedRange.remainder = data;\n    return segmentedRange;\n  }\n  const last = moofs[moofs.length - 1];\n  segmentedRange.valid = sliceUint8(data, 0, last.byteOffset - 8);\n  segmentedRange.remainder = sliceUint8(data, last.byteOffset - 8);\n  return segmentedRange;\n}\nfunction appendUint8Array(data1, data2) {\n  const temp = new Uint8Array(data1.length + data2.length);\n  temp.set(data1);\n  temp.set(data2, data1.length);\n  return temp;\n}\nfunction parseSamples(timeOffset, track) {\n  const seiSamples = [];\n  const videoData = track.samples;\n  const timescale = track.timescale;\n  const trackId = track.id;\n  let isHEVCFlavor = false;\n  const moofs = findBox(videoData, [\"moof\"]);\n  moofs.map((moof) => {\n    const moofOffset = moof.byteOffset - 8;\n    const trafs = findBox(moof, [\"traf\"]);\n    trafs.map((traf) => {\n      const baseTime = findBox(traf, [\"tfdt\"]).map((tfdt) => {\n        const version = tfdt[0];\n        let result = readUint32(tfdt, 4);\n        if (version === 1) {\n          result *= Math.pow(2, 32);\n          result += readUint32(tfdt, 8);\n        }\n        return result / timescale;\n      })[0];\n      if (baseTime !== void 0) {\n        timeOffset = baseTime;\n      }\n      return findBox(traf, [\"tfhd\"]).map((tfhd) => {\n        const id = readUint32(tfhd, 4);\n        const tfhdFlags = readUint32(tfhd, 0) & 16777215;\n        const baseDataOffsetPresent = (tfhdFlags & 1) !== 0;\n        const sampleDescriptionIndexPresent = (tfhdFlags & 2) !== 0;\n        const defaultSampleDurationPresent = (tfhdFlags & 8) !== 0;\n        let defaultSampleDuration = 0;\n        const defaultSampleSizePresent = (tfhdFlags & 16) !== 0;\n        let defaultSampleSize = 0;\n        const defaultSampleFlagsPresent = (tfhdFlags & 32) !== 0;\n        let tfhdOffset = 8;\n        if (id === trackId) {\n          if (baseDataOffsetPresent) {\n            tfhdOffset += 8;\n          }\n          if (sampleDescriptionIndexPresent) {\n            tfhdOffset += 4;\n          }\n          if (defaultSampleDurationPresent) {\n            defaultSampleDuration = readUint32(tfhd, tfhdOffset);\n            tfhdOffset += 4;\n          }\n          if (defaultSampleSizePresent) {\n            defaultSampleSize = readUint32(tfhd, tfhdOffset);\n            tfhdOffset += 4;\n          }\n          if (defaultSampleFlagsPresent) {\n            tfhdOffset += 4;\n          }\n          if (track.type === \"video\") {\n            isHEVCFlavor = isHEVC(track.codec);\n          }\n          findBox(traf, [\"trun\"]).map((trun) => {\n            const version = trun[0];\n            const flags = readUint32(trun, 0) & 16777215;\n            const dataOffsetPresent = (flags & 1) !== 0;\n            let dataOffset = 0;\n            const firstSampleFlagsPresent = (flags & 4) !== 0;\n            const sampleDurationPresent = (flags & 256) !== 0;\n            let sampleDuration = 0;\n            const sampleSizePresent = (flags & 512) !== 0;\n            let sampleSize = 0;\n            const sampleFlagsPresent = (flags & 1024) !== 0;\n            const sampleCompositionOffsetsPresent = (flags & 2048) !== 0;\n            let compositionOffset = 0;\n            const sampleCount = readUint32(trun, 4);\n            let trunOffset = 8;\n            if (dataOffsetPresent) {\n              dataOffset = readUint32(trun, trunOffset);\n              trunOffset += 4;\n            }\n            if (firstSampleFlagsPresent) {\n              trunOffset += 4;\n            }\n            let sampleOffset = dataOffset + moofOffset;\n            for (let ix = 0; ix < sampleCount; ix++) {\n              if (sampleDurationPresent) {\n                sampleDuration = readUint32(trun, trunOffset);\n                trunOffset += 4;\n              } else {\n                sampleDuration = defaultSampleDuration;\n              }\n              if (sampleSizePresent) {\n                sampleSize = readUint32(trun, trunOffset);\n                trunOffset += 4;\n              } else {\n                sampleSize = defaultSampleSize;\n              }\n              if (sampleFlagsPresent) {\n                trunOffset += 4;\n              }\n              if (sampleCompositionOffsetsPresent) {\n                if (version === 0) {\n                  compositionOffset = readUint32(trun, trunOffset);\n                } else {\n                  compositionOffset = readSint32(trun, trunOffset);\n                }\n                trunOffset += 4;\n              }\n              if (track.type === ElementaryStreamTypes.VIDEO) {\n                let naluTotalSize = 0;\n                while (naluTotalSize < sampleSize) {\n                  const naluSize = readUint32(videoData, sampleOffset);\n                  sampleOffset += 4;\n                  if (isSEIMessage(isHEVCFlavor, videoData[sampleOffset])) {\n                    const data = videoData.subarray(sampleOffset, sampleOffset + naluSize);\n                    parseSEIMessageFromNALu(data, isHEVCFlavor ? 2 : 1, timeOffset + compositionOffset / timescale, seiSamples);\n                  }\n                  sampleOffset += naluSize;\n                  naluTotalSize += naluSize + 4;\n                }\n              }\n              timeOffset += sampleDuration / timescale;\n            }\n          });\n        }\n      });\n    });\n  });\n  return seiSamples;\n}\nfunction isHEVC(codec) {\n  if (!codec) {\n    return false;\n  }\n  const delimit = codec.indexOf(\".\");\n  const baseCodec = delimit < 0 ? codec : codec.substring(0, delimit);\n  return baseCodec === \"hvc1\" || baseCodec === \"hev1\" || // Dolby Vision\n  baseCodec === \"dvh1\" || baseCodec === \"dvhe\";\n}\nfunction isSEIMessage(isHEVCFlavor, naluHeader) {\n  if (isHEVCFlavor) {\n    const naluType = naluHeader >> 1 & 63;\n    return naluType === 39 || naluType === 40;\n  } else {\n    const naluType = naluHeader & 31;\n    return naluType === 6;\n  }\n}\nfunction parseSEIMessageFromNALu(unescapedData, headerSize, pts, samples) {\n  const data = discardEPB(unescapedData);\n  let seiPtr = 0;\n  seiPtr += headerSize;\n  let payloadType = 0;\n  let payloadSize = 0;\n  let b4 = 0;\n  while (seiPtr < data.length) {\n    payloadType = 0;\n    do {\n      if (seiPtr >= data.length) {\n        break;\n      }\n      b4 = data[seiPtr++];\n      payloadType += b4;\n    } while (b4 === 255);\n    payloadSize = 0;\n    do {\n      if (seiPtr >= data.length) {\n        break;\n      }\n      b4 = data[seiPtr++];\n      payloadSize += b4;\n    } while (b4 === 255);\n    const leftOver = data.length - seiPtr;\n    let payPtr = seiPtr;\n    if (payloadSize < leftOver) {\n      seiPtr += payloadSize;\n    } else if (payloadSize > leftOver) {\n      logger.error(`Malformed SEI payload. ${payloadSize} is too small, only ${leftOver} bytes left to parse.`);\n      break;\n    }\n    if (payloadType === 4) {\n      const countryCode = data[payPtr++];\n      if (countryCode === 181) {\n        const providerCode = readUint16(data, payPtr);\n        payPtr += 2;\n        if (providerCode === 49) {\n          const userStructure = readUint32(data, payPtr);\n          payPtr += 4;\n          if (userStructure === 1195456820) {\n            const userDataType = data[payPtr++];\n            if (userDataType === 3) {\n              const firstByte = data[payPtr++];\n              const totalCCs = 31 & firstByte;\n              const enabled = 64 & firstByte;\n              const totalBytes = enabled ? 2 + totalCCs * 3 : 0;\n              const byteArray = new Uint8Array(totalBytes);\n              if (enabled) {\n                byteArray[0] = firstByte;\n                for (let i2 = 1; i2 < totalBytes; i2++) {\n                  byteArray[i2] = data[payPtr++];\n                }\n              }\n              samples.push({\n                type: userDataType,\n                payloadType,\n                pts,\n                bytes: byteArray\n              });\n            }\n          }\n        }\n      }\n    } else if (payloadType === 5) {\n      if (payloadSize > 16) {\n        const uuidStrArray = [];\n        for (let i2 = 0; i2 < 16; i2++) {\n          const _b = data[payPtr++].toString(16);\n          uuidStrArray.push(_b.length == 1 ? \"0\" + _b : _b);\n          if (i2 === 3 || i2 === 5 || i2 === 7 || i2 === 9) {\n            uuidStrArray.push(\"-\");\n          }\n        }\n        const length = payloadSize - 16;\n        const userDataBytes = new Uint8Array(length);\n        for (let i2 = 0; i2 < length; i2++) {\n          userDataBytes[i2] = data[payPtr++];\n        }\n        samples.push({\n          payloadType,\n          pts,\n          uuid: uuidStrArray.join(\"\"),\n          userData: utf8ArrayToStr(userDataBytes),\n          userDataBytes\n        });\n      }\n    }\n  }\n}\nfunction discardEPB(data) {\n  const length = data.byteLength;\n  const EPBPositions = [];\n  let i2 = 1;\n  while (i2 < length - 2) {\n    if (data[i2] === 0 && data[i2 + 1] === 0 && data[i2 + 2] === 3) {\n      EPBPositions.push(i2 + 2);\n      i2 += 2;\n    } else {\n      i2++;\n    }\n  }\n  if (EPBPositions.length === 0) {\n    return data;\n  }\n  const newLength = length - EPBPositions.length;\n  const newData = new Uint8Array(newLength);\n  let sourceIndex = 0;\n  for (i2 = 0; i2 < newLength; sourceIndex++, i2++) {\n    if (sourceIndex === EPBPositions[0]) {\n      sourceIndex++;\n      EPBPositions.shift();\n    }\n    newData[i2] = data[sourceIndex];\n  }\n  return newData;\n}\nfunction parseEmsg(data) {\n  const version = data[0];\n  let schemeIdUri = \"\";\n  let value = \"\";\n  let timeScale = 0;\n  let presentationTimeDelta = 0;\n  let presentationTime = 0;\n  let eventDuration = 0;\n  let id = 0;\n  let offset = 0;\n  if (version === 0) {\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      value += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    value += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    timeScale = readUint32(data, 12);\n    presentationTimeDelta = readUint32(data, 16);\n    eventDuration = readUint32(data, 20);\n    id = readUint32(data, 24);\n    offset = 28;\n  } else if (version === 1) {\n    offset += 4;\n    timeScale = readUint32(data, offset);\n    offset += 4;\n    const leftPresentationTime = readUint32(data, offset);\n    offset += 4;\n    const rightPresentationTime = readUint32(data, offset);\n    offset += 4;\n    presentationTime = __pow(2, 32) * leftPresentationTime + rightPresentationTime;\n    if (!isSafeInteger(presentationTime)) {\n      presentationTime = Number.MAX_SAFE_INTEGER;\n      logger.warn(\"Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box\");\n    }\n    eventDuration = readUint32(data, offset);\n    offset += 4;\n    id = readUint32(data, offset);\n    offset += 4;\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n    while (bin2str(data.subarray(offset, offset + 1)) !== \"\\0\") {\n      value += bin2str(data.subarray(offset, offset + 1));\n      offset += 1;\n    }\n    value += bin2str(data.subarray(offset, offset + 1));\n    offset += 1;\n  }\n  const payload = data.subarray(offset, data.byteLength);\n  return {\n    schemeIdUri,\n    value,\n    timeScale,\n    presentationTime,\n    presentationTimeDelta,\n    eventDuration,\n    id,\n    payload\n  };\n}\nfunction mp4Box(type, ...payload) {\n  const len = payload.length;\n  let size = 8;\n  let i2 = len;\n  while (i2--) {\n    size += payload[i2].byteLength;\n  }\n  const result = new Uint8Array(size);\n  result[0] = size >> 24 & 255;\n  result[1] = size >> 16 & 255;\n  result[2] = size >> 8 & 255;\n  result[3] = size & 255;\n  result.set(type, 4);\n  for (i2 = 0, size = 8; i2 < len; i2++) {\n    result.set(payload[i2], size);\n    size += payload[i2].byteLength;\n  }\n  return result;\n}\nfunction mp4pssh(systemId, keyids, data) {\n  if (systemId.byteLength !== 16) {\n    throw new RangeError(\"Invalid system id\");\n  }\n  let version;\n  let kids;\n  if (keyids) {\n    version = 1;\n    kids = new Uint8Array(keyids.length * 16);\n    for (let ix = 0; ix < keyids.length; ix++) {\n      const k3 = keyids[ix];\n      if (k3.byteLength !== 16) {\n        throw new RangeError(\"Invalid key\");\n      }\n      kids.set(k3, ix * 16);\n    }\n  } else {\n    version = 0;\n    kids = new Uint8Array();\n  }\n  let kidCount;\n  if (version > 0) {\n    kidCount = new Uint8Array(4);\n    if (keyids.length > 0) {\n      new DataView(kidCount.buffer).setUint32(0, keyids.length, false);\n    }\n  } else {\n    kidCount = new Uint8Array();\n  }\n  const dataSize = new Uint8Array(4);\n  if (data && data.byteLength > 0) {\n    new DataView(dataSize.buffer).setUint32(0, data.byteLength, false);\n  }\n  return mp4Box(\n    [112, 115, 115, 104],\n    new Uint8Array([\n      version,\n      0,\n      0,\n      0\n      // Flags\n    ]),\n    systemId,\n    // 16 bytes\n    kidCount,\n    kids,\n    dataSize,\n    data || new Uint8Array()\n  );\n}\nfunction parseMultiPssh(initData) {\n  const results = [];\n  if (initData instanceof ArrayBuffer) {\n    const length = initData.byteLength;\n    let offset = 0;\n    while (offset + 32 < length) {\n      const view = new DataView(initData, offset);\n      const pssh = parsePssh(view);\n      results.push(pssh);\n      offset += pssh.size;\n    }\n  }\n  return results;\n}\nfunction parsePssh(view) {\n  const size = view.getUint32(0);\n  const offset = view.byteOffset;\n  const length = view.byteLength;\n  if (length < size) {\n    return {\n      offset,\n      size: length\n    };\n  }\n  const type = view.getUint32(4);\n  if (type !== 1886614376) {\n    return {\n      offset,\n      size\n    };\n  }\n  const version = view.getUint32(8) >>> 24;\n  if (version !== 0 && version !== 1) {\n    return {\n      offset,\n      size\n    };\n  }\n  const buffer = view.buffer;\n  const systemId = Hex.hexDump(new Uint8Array(buffer, offset + 12, 16));\n  const dataSizeOrKidCount = view.getUint32(28);\n  let kids = null;\n  let data = null;\n  if (version === 0) {\n    if (size - 32 < dataSizeOrKidCount || dataSizeOrKidCount < 22) {\n      return {\n        offset,\n        size\n      };\n    }\n    data = new Uint8Array(buffer, offset + 32, dataSizeOrKidCount);\n  } else if (version === 1) {\n    if (!dataSizeOrKidCount || length < offset + 32 + dataSizeOrKidCount * 16 + 16) {\n      return {\n        offset,\n        size\n      };\n    }\n    kids = [];\n    for (let i2 = 0; i2 < dataSizeOrKidCount; i2++) {\n      kids.push(new Uint8Array(buffer, offset + 32 + i2 * 16, 16));\n    }\n  }\n  return {\n    version,\n    systemId,\n    kids,\n    data,\n    offset,\n    size\n  };\n}\nvar keyUriToKeyIdMap = {};\nvar LevelKey = class _LevelKey {\n  static clearKeyUriToKeyIdMap() {\n    keyUriToKeyIdMap = {};\n  }\n  constructor(method, uri, format2, formatversions = [1], iv = null) {\n    this.uri = void 0;\n    this.method = void 0;\n    this.keyFormat = void 0;\n    this.keyFormatVersions = void 0;\n    this.encrypted = void 0;\n    this.isCommonEncryption = void 0;\n    this.iv = null;\n    this.key = null;\n    this.keyId = null;\n    this.pssh = null;\n    this.method = method;\n    this.uri = uri;\n    this.keyFormat = format2;\n    this.keyFormatVersions = formatversions;\n    this.iv = iv;\n    this.encrypted = method ? method !== \"NONE\" : false;\n    this.isCommonEncryption = this.encrypted && method !== \"AES-128\";\n  }\n  isSupported() {\n    if (this.method) {\n      if (this.method === \"AES-128\" || this.method === \"NONE\") {\n        return true;\n      }\n      if (this.keyFormat === \"identity\") {\n        return this.method === \"SAMPLE-AES\";\n      } else {\n        switch (this.keyFormat) {\n          case KeySystemFormats.FAIRPLAY:\n          case KeySystemFormats.WIDEVINE:\n          case KeySystemFormats.PLAYREADY:\n          case KeySystemFormats.CLEARKEY:\n            return [\"ISO-23001-7\", \"SAMPLE-AES\", \"SAMPLE-AES-CENC\", \"SAMPLE-AES-CTR\"].indexOf(this.method) !== -1;\n        }\n      }\n    }\n    return false;\n  }\n  getDecryptData(sn) {\n    if (!this.encrypted || !this.uri) {\n      return null;\n    }\n    if (this.method === \"AES-128\" && this.uri && !this.iv) {\n      if (typeof sn !== \"number\") {\n        if (this.method === \"AES-128\" && !this.iv) {\n          logger.warn(`missing IV for initialization segment with method=\"${this.method}\" - compliance issue`);\n        }\n        sn = 0;\n      }\n      const iv = createInitializationVector(sn);\n      const decryptdata = new _LevelKey(this.method, this.uri, \"identity\", this.keyFormatVersions, iv);\n      return decryptdata;\n    }\n    const keyBytes = convertDataUriToArrayBytes(this.uri);\n    if (keyBytes) {\n      switch (this.keyFormat) {\n        case KeySystemFormats.WIDEVINE:\n          this.pssh = keyBytes;\n          if (keyBytes.length >= 22) {\n            this.keyId = keyBytes.subarray(keyBytes.length - 22, keyBytes.length - 6);\n          }\n          break;\n        case KeySystemFormats.PLAYREADY: {\n          const PlayReadyKeySystemUUID = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]);\n          this.pssh = mp4pssh(PlayReadyKeySystemUUID, null, keyBytes);\n          this.keyId = parsePlayReadyWRM(keyBytes);\n          break;\n        }\n        default: {\n          let keydata = keyBytes.subarray(0, 16);\n          if (keydata.length !== 16) {\n            const padded = new Uint8Array(16);\n            padded.set(keydata, 16 - keydata.length);\n            keydata = padded;\n          }\n          this.keyId = keydata;\n          break;\n        }\n      }\n    }\n    if (!this.keyId || this.keyId.byteLength !== 16) {\n      let keyId = keyUriToKeyIdMap[this.uri];\n      if (!keyId) {\n        const val = Object.keys(keyUriToKeyIdMap).length % Number.MAX_SAFE_INTEGER;\n        keyId = new Uint8Array(16);\n        const dv = new DataView(keyId.buffer, 12, 4);\n        dv.setUint32(0, val);\n        keyUriToKeyIdMap[this.uri] = keyId;\n      }\n      this.keyId = keyId;\n    }\n    return this;\n  }\n};\nfunction createInitializationVector(segmentNumber) {\n  const uint8View = new Uint8Array(16);\n  for (let i2 = 12; i2 < 16; i2++) {\n    uint8View[i2] = segmentNumber >> 8 * (15 - i2) & 255;\n  }\n  return uint8View;\n}\nvar VARIABLE_REPLACEMENT_REGEX = /\\{\\$([a-zA-Z0-9-_]+)\\}/g;\nfunction hasVariableReferences(str) {\n  return VARIABLE_REPLACEMENT_REGEX.test(str);\n}\nfunction substituteVariablesInAttributes(parsed, attr, attributeNames) {\n  if (parsed.variableList !== null || parsed.hasVariableRefs) {\n    for (let i2 = attributeNames.length; i2--; ) {\n      const name = attributeNames[i2];\n      const value = attr[name];\n      if (value) {\n        attr[name] = substituteVariables(parsed, value);\n      }\n    }\n  }\n}\nfunction substituteVariables(parsed, value) {\n  if (parsed.variableList !== null || parsed.hasVariableRefs) {\n    const variableList = parsed.variableList;\n    return value.replace(VARIABLE_REPLACEMENT_REGEX, (variableReference) => {\n      const variableName = variableReference.substring(2, variableReference.length - 1);\n      const variableValue = variableList == null ? void 0 : variableList[variableName];\n      if (variableValue === void 0) {\n        parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: \"${variableName}\"`));\n        return variableReference;\n      }\n      return variableValue;\n    });\n  }\n  return value;\n}\nfunction addVariableDefinition(parsed, attr, parentUrl) {\n  let variableList = parsed.variableList;\n  if (!variableList) {\n    parsed.variableList = variableList = {};\n  }\n  let NAME;\n  let VALUE;\n  if (\"QUERYPARAM\" in attr) {\n    NAME = attr.QUERYPARAM;\n    try {\n      const searchParams = new self.URL(parentUrl).searchParams;\n      if (searchParams.has(NAME)) {\n        VALUE = searchParams.get(NAME);\n      } else {\n        throw new Error(`\"${NAME}\" does not match any query parameter in URI: \"${parentUrl}\"`);\n      }\n    } catch (error) {\n      parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE QUERYPARAM: ${error.message}`));\n    }\n  } else {\n    NAME = attr.NAME;\n    VALUE = attr.VALUE;\n  }\n  if (NAME in variableList) {\n    parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE duplicate Variable Name declarations: \"${NAME}\"`));\n  } else {\n    variableList[NAME] = VALUE || \"\";\n  }\n}\nfunction importVariableDefinition(parsed, attr, sourceVariableList) {\n  const IMPORT = attr.IMPORT;\n  if (sourceVariableList && IMPORT in sourceVariableList) {\n    let variableList = parsed.variableList;\n    if (!variableList) {\n      parsed.variableList = variableList = {};\n    }\n    variableList[IMPORT] = sourceVariableList[IMPORT];\n  } else {\n    parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: \"${IMPORT}\"`));\n  }\n}\nfunction getMediaSource(preferManagedMediaSource = true) {\n  if (typeof self === \"undefined\") return void 0;\n  const mms = (preferManagedMediaSource || !self.MediaSource) && self.ManagedMediaSource;\n  return mms || self.MediaSource || self.WebKitMediaSource;\n}\nfunction isManagedMediaSource(source) {\n  return typeof self !== \"undefined\" && source === self.ManagedMediaSource;\n}\nvar sampleEntryCodesISO = {\n  audio: {\n    a3ds: 1,\n    \"ac-3\": 0.95,\n    \"ac-4\": 1,\n    alac: 0.9,\n    alaw: 1,\n    dra1: 1,\n    \"dts+\": 1,\n    \"dts-\": 1,\n    dtsc: 1,\n    dtse: 1,\n    dtsh: 1,\n    \"ec-3\": 0.9,\n    enca: 1,\n    fLaC: 0.9,\n    // MP4-RA listed codec entry for FLAC\n    flac: 0.9,\n    // legacy browser codec name for FLAC\n    FLAC: 0.9,\n    // some manifests may list \"FLAC\" with Apple's tools\n    g719: 1,\n    g726: 1,\n    m4ae: 1,\n    mha1: 1,\n    mha2: 1,\n    mhm1: 1,\n    mhm2: 1,\n    mlpa: 1,\n    mp4a: 1,\n    \"raw \": 1,\n    Opus: 1,\n    opus: 1,\n    // browsers expect this to be lowercase despite MP4RA says 'Opus'\n    samr: 1,\n    sawb: 1,\n    sawp: 1,\n    sevc: 1,\n    sqcp: 1,\n    ssmv: 1,\n    twos: 1,\n    ulaw: 1\n  },\n  video: {\n    avc1: 1,\n    avc2: 1,\n    avc3: 1,\n    avc4: 1,\n    avcp: 1,\n    av01: 0.8,\n    drac: 1,\n    dva1: 1,\n    dvav: 1,\n    dvh1: 0.7,\n    dvhe: 0.7,\n    encv: 1,\n    hev1: 0.75,\n    hvc1: 0.75,\n    mjp2: 1,\n    mp4v: 1,\n    mvc1: 1,\n    mvc2: 1,\n    mvc3: 1,\n    mvc4: 1,\n    resv: 1,\n    rv60: 1,\n    s263: 1,\n    svc1: 1,\n    svc2: 1,\n    \"vc-1\": 1,\n    vp08: 1,\n    vp09: 0.9\n  },\n  text: {\n    stpp: 1,\n    wvtt: 1\n  }\n};\nfunction isCodecType(codec, type) {\n  const typeCodes = sampleEntryCodesISO[type];\n  return !!typeCodes && !!typeCodes[codec.slice(0, 4)];\n}\nfunction areCodecsMediaSourceSupported(codecs, type, preferManagedMediaSource = true) {\n  return !codecs.split(\",\").some((codec) => !isCodecMediaSourceSupported(codec, type, preferManagedMediaSource));\n}\nfunction isCodecMediaSourceSupported(codec, type, preferManagedMediaSource = true) {\n  var _MediaSource$isTypeSu;\n  const MediaSource = getMediaSource(preferManagedMediaSource);\n  return (_MediaSource$isTypeSu = MediaSource == null ? void 0 : MediaSource.isTypeSupported(mimeTypeForCodec(codec, type))) != null ? _MediaSource$isTypeSu : false;\n}\nfunction mimeTypeForCodec(codec, type) {\n  return `${type}/mp4;codecs=\"${codec}\"`;\n}\nfunction videoCodecPreferenceValue(videoCodec) {\n  if (videoCodec) {\n    const fourCC = videoCodec.substring(0, 4);\n    return sampleEntryCodesISO.video[fourCC];\n  }\n  return 2;\n}\nfunction codecsSetSelectionPreferenceValue(codecSet) {\n  return codecSet.split(\",\").reduce((num, fourCC) => {\n    const preferenceValue = sampleEntryCodesISO.video[fourCC];\n    if (preferenceValue) {\n      return (preferenceValue * 2 + num) / (num ? 3 : 2);\n    }\n    return (sampleEntryCodesISO.audio[fourCC] + num) / (num ? 2 : 1);\n  }, 0);\n}\nvar CODEC_COMPATIBLE_NAMES = {};\nfunction getCodecCompatibleNameLower(lowerCaseCodec, preferManagedMediaSource = true) {\n  if (CODEC_COMPATIBLE_NAMES[lowerCaseCodec]) {\n    return CODEC_COMPATIBLE_NAMES[lowerCaseCodec];\n  }\n  const codecsToCheck = {\n    flac: [\"flac\", \"fLaC\", \"FLAC\"],\n    opus: [\"opus\", \"Opus\"]\n  }[lowerCaseCodec];\n  for (let i2 = 0; i2 < codecsToCheck.length; i2++) {\n    if (isCodecMediaSourceSupported(codecsToCheck[i2], \"audio\", preferManagedMediaSource)) {\n      CODEC_COMPATIBLE_NAMES[lowerCaseCodec] = codecsToCheck[i2];\n      return codecsToCheck[i2];\n    }\n  }\n  return lowerCaseCodec;\n}\nvar AUDIO_CODEC_REGEXP = /flac|opus/i;\nfunction getCodecCompatibleName(codec, preferManagedMediaSource = true) {\n  return codec.replace(AUDIO_CODEC_REGEXP, (m3) => getCodecCompatibleNameLower(m3.toLowerCase(), preferManagedMediaSource));\n}\nfunction pickMostCompleteCodecName(parsedCodec, levelCodec) {\n  if (parsedCodec && parsedCodec !== \"mp4a\") {\n    return parsedCodec;\n  }\n  return levelCodec ? levelCodec.split(\",\")[0] : levelCodec;\n}\nfunction convertAVC1ToAVCOTI(codec) {\n  const codecs = codec.split(\",\");\n  for (let i2 = 0; i2 < codecs.length; i2++) {\n    const avcdata = codecs[i2].split(\".\");\n    if (avcdata.length > 2) {\n      let result = avcdata.shift() + \".\";\n      result += parseInt(avcdata.shift()).toString(16);\n      result += (\"000\" + parseInt(avcdata.shift()).toString(16)).slice(-4);\n      codecs[i2] = result;\n    }\n  }\n  return codecs.join(\",\");\n}\nvar MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\r\\n]*)(?:[\\r\\n](?:#[^\\r\\n]*)?)*([^\\r\\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\\r\\n]*)[\\r\\n]+/g;\nvar MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;\nvar IS_MEDIA_PLAYLIST = /^#EXT(?:INF|-X-TARGETDURATION):/m;\nvar LEVEL_PLAYLIST_REGEX_FAST = new RegExp([\n  /#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?/.source,\n  // duration (#EXTINF:<duration>,<title>), group 1 => duration, group 2 => title\n  /(?!#) *(\\S[^\\r\\n]*)/.source,\n  // segment URI, group 3 => the URI (note newline is not eaten)\n  /#EXT-X-BYTERANGE:*(.+)/.source,\n  // next segment's byterange, group 4 => range spec (x@y)\n  /#EXT-X-PROGRAM-DATE-TIME:(.+)/.source,\n  // next segment's program date/time group 5 => the datetime spec\n  /#.*/.source\n  // All other non-segment oriented tags will match with all groups empty\n].join(\"|\"), \"g\");\nvar LEVEL_PLAYLIST_REGEX_SLOW = new RegExp([/#(EXTM3U)/.source, /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\\r?\\n?/.source].join(\"|\"));\nvar M3U8Parser = class _M3U8Parser {\n  static findGroup(groups, mediaGroupId) {\n    for (let i2 = 0; i2 < groups.length; i2++) {\n      const group = groups[i2];\n      if (group.id === mediaGroupId) {\n        return group;\n      }\n    }\n  }\n  static resolve(url, baseUrl) {\n    return urlToolkitExports.buildAbsoluteURL(baseUrl, url, {\n      alwaysNormalize: true\n    });\n  }\n  static isMediaPlaylist(str) {\n    return IS_MEDIA_PLAYLIST.test(str);\n  }\n  static parseMasterPlaylist(string, baseurl) {\n    const hasVariableRefs = hasVariableReferences(string);\n    const parsed = {\n      contentSteering: null,\n      levels: [],\n      playlistParsingError: null,\n      sessionData: null,\n      sessionKeys: null,\n      startTimeOffset: null,\n      variableList: null,\n      hasVariableRefs\n    };\n    const levelsWithKnownCodecs = [];\n    MASTER_PLAYLIST_REGEX.lastIndex = 0;\n    let result;\n    while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null) {\n      if (result[1]) {\n        var _level$unknownCodecs;\n        const attrs = new AttrList(result[1]);\n        {\n          substituteVariablesInAttributes(parsed, attrs, [\"CODECS\", \"SUPPLEMENTAL-CODECS\", \"ALLOWED-CPC\", \"PATHWAY-ID\", \"STABLE-VARIANT-ID\", \"AUDIO\", \"VIDEO\", \"SUBTITLES\", \"CLOSED-CAPTIONS\", \"NAME\"]);\n        }\n        const uri = substituteVariables(parsed, result[2]);\n        const level = {\n          attrs,\n          bitrate: attrs.decimalInteger(\"BANDWIDTH\") || attrs.decimalInteger(\"AVERAGE-BANDWIDTH\"),\n          name: attrs.NAME,\n          url: _M3U8Parser.resolve(uri, baseurl)\n        };\n        const resolution = attrs.decimalResolution(\"RESOLUTION\");\n        if (resolution) {\n          level.width = resolution.width;\n          level.height = resolution.height;\n        }\n        setCodecs(attrs.CODECS, level);\n        if (!((_level$unknownCodecs = level.unknownCodecs) != null && _level$unknownCodecs.length)) {\n          levelsWithKnownCodecs.push(level);\n        }\n        parsed.levels.push(level);\n      } else if (result[3]) {\n        const tag = result[3];\n        const attributes = result[4];\n        switch (tag) {\n          case \"SESSION-DATA\": {\n            const sessionAttrs = new AttrList(attributes);\n            {\n              substituteVariablesInAttributes(parsed, sessionAttrs, [\"DATA-ID\", \"LANGUAGE\", \"VALUE\", \"URI\"]);\n            }\n            const dataId = sessionAttrs[\"DATA-ID\"];\n            if (dataId) {\n              if (parsed.sessionData === null) {\n                parsed.sessionData = {};\n              }\n              parsed.sessionData[dataId] = sessionAttrs;\n            }\n            break;\n          }\n          case \"SESSION-KEY\": {\n            const sessionKey = parseKey(attributes, baseurl, parsed);\n            if (sessionKey.encrypted && sessionKey.isSupported()) {\n              if (parsed.sessionKeys === null) {\n                parsed.sessionKeys = [];\n              }\n              parsed.sessionKeys.push(sessionKey);\n            } else {\n              logger.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: \"${attributes}\"`);\n            }\n            break;\n          }\n          case \"DEFINE\": {\n            {\n              const variableAttributes = new AttrList(attributes);\n              substituteVariablesInAttributes(parsed, variableAttributes, [\"NAME\", \"VALUE\", \"QUERYPARAM\"]);\n              addVariableDefinition(parsed, variableAttributes, baseurl);\n            }\n            break;\n          }\n          case \"CONTENT-STEERING\": {\n            const contentSteeringAttributes = new AttrList(attributes);\n            {\n              substituteVariablesInAttributes(parsed, contentSteeringAttributes, [\"SERVER-URI\", \"PATHWAY-ID\"]);\n            }\n            parsed.contentSteering = {\n              uri: _M3U8Parser.resolve(contentSteeringAttributes[\"SERVER-URI\"], baseurl),\n              pathwayId: contentSteeringAttributes[\"PATHWAY-ID\"] || \".\"\n            };\n            break;\n          }\n          case \"START\": {\n            parsed.startTimeOffset = parseStartTimeOffset(attributes);\n            break;\n          }\n        }\n      }\n    }\n    const stripUnknownCodecLevels = levelsWithKnownCodecs.length > 0 && levelsWithKnownCodecs.length < parsed.levels.length;\n    parsed.levels = stripUnknownCodecLevels ? levelsWithKnownCodecs : parsed.levels;\n    if (parsed.levels.length === 0) {\n      parsed.playlistParsingError = new Error(\"no levels found in manifest\");\n    }\n    return parsed;\n  }\n  static parseMasterPlaylistMedia(string, baseurl, parsed) {\n    let result;\n    const results = {};\n    const levels = parsed.levels;\n    const groupsByType = {\n      AUDIO: levels.map((level) => ({\n        id: level.attrs.AUDIO,\n        audioCodec: level.audioCodec\n      })),\n      SUBTITLES: levels.map((level) => ({\n        id: level.attrs.SUBTITLES,\n        textCodec: level.textCodec\n      })),\n      \"CLOSED-CAPTIONS\": []\n    };\n    let id = 0;\n    MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;\n    while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) !== null) {\n      const attrs = new AttrList(result[1]);\n      const type = attrs.TYPE;\n      if (type) {\n        const groups = groupsByType[type];\n        const medias = results[type] || [];\n        results[type] = medias;\n        {\n          substituteVariablesInAttributes(parsed, attrs, [\"URI\", \"GROUP-ID\", \"LANGUAGE\", \"ASSOC-LANGUAGE\", \"STABLE-RENDITION-ID\", \"NAME\", \"INSTREAM-ID\", \"CHARACTERISTICS\", \"CHANNELS\"]);\n        }\n        const lang = attrs.LANGUAGE;\n        const assocLang = attrs[\"ASSOC-LANGUAGE\"];\n        const channels = attrs.CHANNELS;\n        const characteristics = attrs.CHARACTERISTICS;\n        const instreamId = attrs[\"INSTREAM-ID\"];\n        const media = {\n          attrs,\n          bitrate: 0,\n          id: id++,\n          groupId: attrs[\"GROUP-ID\"] || \"\",\n          name: attrs.NAME || lang || \"\",\n          type,\n          default: attrs.bool(\"DEFAULT\"),\n          autoselect: attrs.bool(\"AUTOSELECT\"),\n          forced: attrs.bool(\"FORCED\"),\n          lang,\n          url: attrs.URI ? _M3U8Parser.resolve(attrs.URI, baseurl) : \"\"\n        };\n        if (assocLang) {\n          media.assocLang = assocLang;\n        }\n        if (channels) {\n          media.channels = channels;\n        }\n        if (characteristics) {\n          media.characteristics = characteristics;\n        }\n        if (instreamId) {\n          media.instreamId = instreamId;\n        }\n        if (groups != null && groups.length) {\n          const groupCodec = _M3U8Parser.findGroup(groups, media.groupId) || groups[0];\n          assignCodec(media, groupCodec, \"audioCodec\");\n          assignCodec(media, groupCodec, \"textCodec\");\n        }\n        medias.push(media);\n      }\n    }\n    return results;\n  }\n  static parseLevelPlaylist(string, baseurl, id, type, levelUrlId, multivariantVariableList) {\n    const level = new LevelDetails(baseurl);\n    const fragments = level.fragments;\n    let currentInitSegment = null;\n    let currentSN = 0;\n    let currentPart = 0;\n    let totalduration = 0;\n    let discontinuityCounter = 0;\n    let prevFrag = null;\n    let frag = new Fragment(type, baseurl);\n    let result;\n    let i2;\n    let levelkeys;\n    let firstPdtIndex = -1;\n    let createNextFrag = false;\n    let nextByteRange = null;\n    LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;\n    level.m3u8 = string;\n    level.hasVariableRefs = hasVariableReferences(string);\n    while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {\n      if (createNextFrag) {\n        createNextFrag = false;\n        frag = new Fragment(type, baseurl);\n        frag.start = totalduration;\n        frag.sn = currentSN;\n        frag.cc = discontinuityCounter;\n        frag.level = id;\n        if (currentInitSegment) {\n          frag.initSegment = currentInitSegment;\n          frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n          currentInitSegment.rawProgramDateTime = null;\n          if (nextByteRange) {\n            frag.setByteRange(nextByteRange);\n            nextByteRange = null;\n          }\n        }\n      }\n      const duration = result[1];\n      if (duration) {\n        frag.duration = parseFloat(duration);\n        const title = (\" \" + result[2]).slice(1);\n        frag.title = title || null;\n        frag.tagList.push(title ? [\"INF\", duration, title] : [\"INF\", duration]);\n      } else if (result[3]) {\n        if (isFiniteNumber(frag.duration)) {\n          frag.start = totalduration;\n          if (levelkeys) {\n            setFragLevelKeys(frag, levelkeys, level);\n          }\n          frag.sn = currentSN;\n          frag.level = id;\n          frag.cc = discontinuityCounter;\n          fragments.push(frag);\n          const uri = (\" \" + result[3]).slice(1);\n          frag.relurl = substituteVariables(level, uri);\n          assignProgramDateTime(frag, prevFrag);\n          prevFrag = frag;\n          totalduration += frag.duration;\n          currentSN++;\n          currentPart = 0;\n          createNextFrag = true;\n        }\n      } else if (result[4]) {\n        const data = (\" \" + result[4]).slice(1);\n        if (prevFrag) {\n          frag.setByteRange(data, prevFrag);\n        } else {\n          frag.setByteRange(data);\n        }\n      } else if (result[5]) {\n        frag.rawProgramDateTime = (\" \" + result[5]).slice(1);\n        frag.tagList.push([\"PROGRAM-DATE-TIME\", frag.rawProgramDateTime]);\n        if (firstPdtIndex === -1) {\n          firstPdtIndex = fragments.length;\n        }\n      } else {\n        result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);\n        if (!result) {\n          logger.warn(\"No matches on slow regex match for level playlist!\");\n          continue;\n        }\n        for (i2 = 1; i2 < result.length; i2++) {\n          if (typeof result[i2] !== \"undefined\") {\n            break;\n          }\n        }\n        const tag = (\" \" + result[i2]).slice(1);\n        const value1 = (\" \" + result[i2 + 1]).slice(1);\n        const value2 = result[i2 + 2] ? (\" \" + result[i2 + 2]).slice(1) : \"\";\n        switch (tag) {\n          case \"PLAYLIST-TYPE\":\n            level.type = value1.toUpperCase();\n            break;\n          case \"MEDIA-SEQUENCE\":\n            currentSN = level.startSN = parseInt(value1);\n            break;\n          case \"SKIP\": {\n            const skipAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, skipAttrs, [\"RECENTLY-REMOVED-DATERANGES\"]);\n            }\n            const skippedSegments = skipAttrs.decimalInteger(\"SKIPPED-SEGMENTS\");\n            if (isFiniteNumber(skippedSegments)) {\n              level.skippedSegments = skippedSegments;\n              for (let _i2 = skippedSegments; _i2--; ) {\n                fragments.unshift(null);\n              }\n              currentSN += skippedSegments;\n            }\n            const recentlyRemovedDateranges = skipAttrs.enumeratedString(\"RECENTLY-REMOVED-DATERANGES\");\n            if (recentlyRemovedDateranges) {\n              level.recentlyRemovedDateranges = recentlyRemovedDateranges.split(\"\t\");\n            }\n            break;\n          }\n          case \"TARGETDURATION\":\n            level.targetduration = Math.max(parseInt(value1), 1);\n            break;\n          case \"VERSION\":\n            level.version = parseInt(value1);\n            break;\n          case \"INDEPENDENT-SEGMENTS\":\n          case \"EXTM3U\":\n            break;\n          case \"ENDLIST\":\n            level.live = false;\n            break;\n          case \"#\":\n            if (value1 || value2) {\n              frag.tagList.push(value2 ? [value1, value2] : [value1]);\n            }\n            break;\n          case \"DISCONTINUITY\":\n            discontinuityCounter++;\n            frag.tagList.push([\"DIS\"]);\n            break;\n          case \"GAP\":\n            frag.gap = true;\n            frag.tagList.push([tag]);\n            break;\n          case \"BITRATE\":\n            frag.tagList.push([tag, value1]);\n            break;\n          case \"DATERANGE\": {\n            const dateRangeAttr = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, dateRangeAttr, [\"ID\", \"CLASS\", \"START-DATE\", \"END-DATE\", \"SCTE35-CMD\", \"SCTE35-OUT\", \"SCTE35-IN\"]);\n              substituteVariablesInAttributes(level, dateRangeAttr, dateRangeAttr.clientAttrs);\n            }\n            const dateRange = new DateRange(dateRangeAttr, level.dateRanges[dateRangeAttr.ID]);\n            if (dateRange.isValid || level.skippedSegments) {\n              level.dateRanges[dateRange.id] = dateRange;\n            } else {\n              logger.warn(`Ignoring invalid DATERANGE tag: \"${value1}\"`);\n            }\n            frag.tagList.push([\"EXT-X-DATERANGE\", value1]);\n            break;\n          }\n          case \"DEFINE\": {\n            {\n              const variableAttributes = new AttrList(value1);\n              substituteVariablesInAttributes(level, variableAttributes, [\"NAME\", \"VALUE\", \"IMPORT\", \"QUERYPARAM\"]);\n              if (\"IMPORT\" in variableAttributes) {\n                importVariableDefinition(level, variableAttributes, multivariantVariableList);\n              } else {\n                addVariableDefinition(level, variableAttributes, baseurl);\n              }\n            }\n            break;\n          }\n          case \"DISCONTINUITY-SEQUENCE\":\n            discontinuityCounter = parseInt(value1);\n            break;\n          case \"KEY\": {\n            const levelKey = parseKey(value1, baseurl, level);\n            if (levelKey.isSupported()) {\n              if (levelKey.method === \"NONE\") {\n                levelkeys = void 0;\n                break;\n              }\n              if (!levelkeys) {\n                levelkeys = {};\n              }\n              if (levelkeys[levelKey.keyFormat]) {\n                levelkeys = _extends({}, levelkeys);\n              }\n              levelkeys[levelKey.keyFormat] = levelKey;\n            } else {\n              logger.warn(`[Keys] Ignoring invalid EXT-X-KEY tag: \"${value1}\"`);\n            }\n            break;\n          }\n          case \"START\":\n            level.startTimeOffset = parseStartTimeOffset(value1);\n            break;\n          case \"MAP\": {\n            const mapAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, mapAttrs, [\"BYTERANGE\", \"URI\"]);\n            }\n            if (frag.duration) {\n              const init = new Fragment(type, baseurl);\n              setInitSegment(init, mapAttrs, id, levelkeys);\n              currentInitSegment = init;\n              frag.initSegment = currentInitSegment;\n              if (currentInitSegment.rawProgramDateTime && !frag.rawProgramDateTime) {\n                frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n              }\n            } else {\n              const end = frag.byteRangeEndOffset;\n              if (end) {\n                const start = frag.byteRangeStartOffset;\n                nextByteRange = `${end - start}@${start}`;\n              } else {\n                nextByteRange = null;\n              }\n              setInitSegment(frag, mapAttrs, id, levelkeys);\n              currentInitSegment = frag;\n              createNextFrag = true;\n            }\n            break;\n          }\n          case \"SERVER-CONTROL\": {\n            const serverControlAttrs = new AttrList(value1);\n            level.canBlockReload = serverControlAttrs.bool(\"CAN-BLOCK-RELOAD\");\n            level.canSkipUntil = serverControlAttrs.optionalFloat(\"CAN-SKIP-UNTIL\", 0);\n            level.canSkipDateRanges = level.canSkipUntil > 0 && serverControlAttrs.bool(\"CAN-SKIP-DATERANGES\");\n            level.partHoldBack = serverControlAttrs.optionalFloat(\"PART-HOLD-BACK\", 0);\n            level.holdBack = serverControlAttrs.optionalFloat(\"HOLD-BACK\", 0);\n            break;\n          }\n          case \"PART-INF\": {\n            const partInfAttrs = new AttrList(value1);\n            level.partTarget = partInfAttrs.decimalFloatingPoint(\"PART-TARGET\");\n            break;\n          }\n          case \"PART\": {\n            let partList = level.partList;\n            if (!partList) {\n              partList = level.partList = [];\n            }\n            const previousFragmentPart = currentPart > 0 ? partList[partList.length - 1] : void 0;\n            const index = currentPart++;\n            const partAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, partAttrs, [\"BYTERANGE\", \"URI\"]);\n            }\n            const part = new Part(partAttrs, frag, baseurl, index, previousFragmentPart);\n            partList.push(part);\n            frag.duration += part.duration;\n            break;\n          }\n          case \"PRELOAD-HINT\": {\n            const preloadHintAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, preloadHintAttrs, [\"URI\"]);\n            }\n            level.preloadHint = preloadHintAttrs;\n            break;\n          }\n          case \"RENDITION-REPORT\": {\n            const renditionReportAttrs = new AttrList(value1);\n            {\n              substituteVariablesInAttributes(level, renditionReportAttrs, [\"URI\"]);\n            }\n            level.renditionReports = level.renditionReports || [];\n            level.renditionReports.push(renditionReportAttrs);\n            break;\n          }\n          default:\n            logger.warn(`line parsed but not handled: ${result}`);\n            break;\n        }\n      }\n    }\n    if (prevFrag && !prevFrag.relurl) {\n      fragments.pop();\n      totalduration -= prevFrag.duration;\n      if (level.partList) {\n        level.fragmentHint = prevFrag;\n      }\n    } else if (level.partList) {\n      assignProgramDateTime(frag, prevFrag);\n      frag.cc = discontinuityCounter;\n      level.fragmentHint = frag;\n      if (levelkeys) {\n        setFragLevelKeys(frag, levelkeys, level);\n      }\n    }\n    const fragmentLength = fragments.length;\n    const firstFragment = fragments[0];\n    const lastFragment = fragments[fragmentLength - 1];\n    totalduration += level.skippedSegments * level.targetduration;\n    if (totalduration > 0 && fragmentLength && lastFragment) {\n      level.averagetargetduration = totalduration / fragmentLength;\n      const lastSn = lastFragment.sn;\n      level.endSN = lastSn !== \"initSegment\" ? lastSn : 0;\n      if (!level.live) {\n        lastFragment.endList = true;\n      }\n      if (firstFragment) {\n        level.startCC = firstFragment.cc;\n      }\n    } else {\n      level.endSN = 0;\n      level.startCC = 0;\n    }\n    if (level.fragmentHint) {\n      totalduration += level.fragmentHint.duration;\n    }\n    level.totalduration = totalduration;\n    level.endCC = discontinuityCounter;\n    if (firstPdtIndex > 0) {\n      backfillProgramDateTimes(fragments, firstPdtIndex);\n    }\n    return level;\n  }\n};\nfunction parseKey(keyTagAttributes, baseurl, parsed) {\n  var _keyAttrs$METHOD, _keyAttrs$KEYFORMAT;\n  const keyAttrs = new AttrList(keyTagAttributes);\n  {\n    substituteVariablesInAttributes(parsed, keyAttrs, [\"KEYFORMAT\", \"KEYFORMATVERSIONS\", \"URI\", \"IV\", \"URI\"]);\n  }\n  const decryptmethod = (_keyAttrs$METHOD = keyAttrs.METHOD) != null ? _keyAttrs$METHOD : \"\";\n  const decrypturi = keyAttrs.URI;\n  const decryptiv = keyAttrs.hexadecimalInteger(\"IV\");\n  const decryptkeyformatversions = keyAttrs.KEYFORMATVERSIONS;\n  const decryptkeyformat = (_keyAttrs$KEYFORMAT = keyAttrs.KEYFORMAT) != null ? _keyAttrs$KEYFORMAT : \"identity\";\n  if (decrypturi && keyAttrs.IV && !decryptiv) {\n    logger.error(`Invalid IV: ${keyAttrs.IV}`);\n  }\n  const resolvedUri = decrypturi ? M3U8Parser.resolve(decrypturi, baseurl) : \"\";\n  const keyFormatVersions = (decryptkeyformatversions ? decryptkeyformatversions : \"1\").split(\"/\").map(Number).filter(Number.isFinite);\n  return new LevelKey(decryptmethod, resolvedUri, decryptkeyformat, keyFormatVersions, decryptiv);\n}\nfunction parseStartTimeOffset(startAttributes) {\n  const startAttrs = new AttrList(startAttributes);\n  const startTimeOffset = startAttrs.decimalFloatingPoint(\"TIME-OFFSET\");\n  if (isFiniteNumber(startTimeOffset)) {\n    return startTimeOffset;\n  }\n  return null;\n}\nfunction setCodecs(codecsAttributeValue, level) {\n  let codecs = (codecsAttributeValue || \"\").split(/[ ,]+/).filter((c4) => c4);\n  [\"video\", \"audio\", \"text\"].forEach((type) => {\n    const filtered = codecs.filter((codec) => isCodecType(codec, type));\n    if (filtered.length) {\n      level[`${type}Codec`] = filtered.join(\",\");\n      codecs = codecs.filter((codec) => filtered.indexOf(codec) === -1);\n    }\n  });\n  level.unknownCodecs = codecs;\n}\nfunction assignCodec(media, groupItem, codecProperty) {\n  const codecValue = groupItem[codecProperty];\n  if (codecValue) {\n    media[codecProperty] = codecValue;\n  }\n}\nfunction backfillProgramDateTimes(fragments, firstPdtIndex) {\n  let fragPrev = fragments[firstPdtIndex];\n  for (let i2 = firstPdtIndex; i2--; ) {\n    const frag = fragments[i2];\n    if (!frag) {\n      return;\n    }\n    frag.programDateTime = fragPrev.programDateTime - frag.duration * 1e3;\n    fragPrev = frag;\n  }\n}\nfunction assignProgramDateTime(frag, prevFrag) {\n  if (frag.rawProgramDateTime) {\n    frag.programDateTime = Date.parse(frag.rawProgramDateTime);\n  } else if (prevFrag != null && prevFrag.programDateTime) {\n    frag.programDateTime = prevFrag.endProgramDateTime;\n  }\n  if (!isFiniteNumber(frag.programDateTime)) {\n    frag.programDateTime = null;\n    frag.rawProgramDateTime = null;\n  }\n}\nfunction setInitSegment(frag, mapAttrs, id, levelkeys) {\n  frag.relurl = mapAttrs.URI;\n  if (mapAttrs.BYTERANGE) {\n    frag.setByteRange(mapAttrs.BYTERANGE);\n  }\n  frag.level = id;\n  frag.sn = \"initSegment\";\n  if (levelkeys) {\n    frag.levelkeys = levelkeys;\n  }\n  frag.initSegment = null;\n}\nfunction setFragLevelKeys(frag, levelkeys, level) {\n  frag.levelkeys = levelkeys;\n  const {\n    encryptedFragments\n  } = level;\n  if ((!encryptedFragments.length || encryptedFragments[encryptedFragments.length - 1].levelkeys !== levelkeys) && Object.keys(levelkeys).some((format2) => levelkeys[format2].isCommonEncryption)) {\n    encryptedFragments.push(frag);\n  }\n}\nvar PlaylistContextType = {\n  MANIFEST: \"manifest\",\n  LEVEL: \"level\",\n  AUDIO_TRACK: \"audioTrack\",\n  SUBTITLE_TRACK: \"subtitleTrack\"\n};\nvar PlaylistLevelType = {\n  MAIN: \"main\",\n  AUDIO: \"audio\",\n  SUBTITLE: \"subtitle\"\n};\nfunction mapContextToLevelType(context) {\n  const {\n    type\n  } = context;\n  switch (type) {\n    case PlaylistContextType.AUDIO_TRACK:\n      return PlaylistLevelType.AUDIO;\n    case PlaylistContextType.SUBTITLE_TRACK:\n      return PlaylistLevelType.SUBTITLE;\n    default:\n      return PlaylistLevelType.MAIN;\n  }\n}\nfunction getResponseUrl(response, context) {\n  let url = response.url;\n  if (url === void 0 || url.indexOf(\"data:\") === 0) {\n    url = context.url;\n  }\n  return url;\n}\nvar PlaylistLoader = class {\n  constructor(hls) {\n    this.hls = void 0;\n    this.loaders = /* @__PURE__ */ Object.create(null);\n    this.variableList = null;\n    this.hls = hls;\n    this.registerListeners();\n  }\n  startLoad(startPosition) {\n  }\n  stopLoad() {\n    this.destroyInternalLoaders();\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n  }\n  /**\n   * Returns defaults or configured loader-type overloads (pLoader and loader config params)\n   */\n  createInternalLoader(context) {\n    const config = this.hls.config;\n    const PLoader = config.pLoader;\n    const Loader = config.loader;\n    const InternalLoader = PLoader || Loader;\n    const loader = new InternalLoader(config);\n    this.loaders[context.type] = loader;\n    return loader;\n  }\n  getInternalLoader(context) {\n    return this.loaders[context.type];\n  }\n  resetInternalLoader(contextType) {\n    if (this.loaders[contextType]) {\n      delete this.loaders[contextType];\n    }\n  }\n  /**\n   * Call `destroy` on all internal loader instances mapped (one per context type)\n   */\n  destroyInternalLoaders() {\n    for (const contextType in this.loaders) {\n      const loader = this.loaders[contextType];\n      if (loader) {\n        loader.destroy();\n      }\n      this.resetInternalLoader(contextType);\n    }\n  }\n  destroy() {\n    this.variableList = null;\n    this.unregisterListeners();\n    this.destroyInternalLoaders();\n  }\n  onManifestLoading(event, data) {\n    const {\n      url\n    } = data;\n    this.variableList = null;\n    this.load({\n      id: null,\n      level: 0,\n      responseType: \"text\",\n      type: PlaylistContextType.MANIFEST,\n      url,\n      deliveryDirectives: null\n    });\n  }\n  onLevelLoading(event, data) {\n    const {\n      id,\n      level,\n      pathwayId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      level,\n      pathwayId,\n      responseType: \"text\",\n      type: PlaylistContextType.LEVEL,\n      url,\n      deliveryDirectives\n    });\n  }\n  onAudioTrackLoading(event, data) {\n    const {\n      id,\n      groupId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      groupId,\n      level: null,\n      responseType: \"text\",\n      type: PlaylistContextType.AUDIO_TRACK,\n      url,\n      deliveryDirectives\n    });\n  }\n  onSubtitleTrackLoading(event, data) {\n    const {\n      id,\n      groupId,\n      url,\n      deliveryDirectives\n    } = data;\n    this.load({\n      id,\n      groupId,\n      level: null,\n      responseType: \"text\",\n      type: PlaylistContextType.SUBTITLE_TRACK,\n      url,\n      deliveryDirectives\n    });\n  }\n  load(context) {\n    var _context$deliveryDire;\n    const config = this.hls.config;\n    let loader = this.getInternalLoader(context);\n    if (loader) {\n      const loaderContext = loader.context;\n      if (loaderContext && loaderContext.url === context.url && loaderContext.level === context.level) {\n        logger.trace(\"[playlist-loader]: playlist request ongoing\");\n        return;\n      }\n      logger.log(`[playlist-loader]: aborting previous loader for type: ${context.type}`);\n      loader.abort();\n    }\n    let loadPolicy;\n    if (context.type === PlaylistContextType.MANIFEST) {\n      loadPolicy = config.manifestLoadPolicy.default;\n    } else {\n      loadPolicy = _extends({}, config.playlistLoadPolicy.default, {\n        timeoutRetry: null,\n        errorRetry: null\n      });\n    }\n    loader = this.createInternalLoader(context);\n    if (isFiniteNumber((_context$deliveryDire = context.deliveryDirectives) == null ? void 0 : _context$deliveryDire.part)) {\n      let levelDetails;\n      if (context.type === PlaylistContextType.LEVEL && context.level !== null) {\n        levelDetails = this.hls.levels[context.level].details;\n      } else if (context.type === PlaylistContextType.AUDIO_TRACK && context.id !== null) {\n        levelDetails = this.hls.audioTracks[context.id].details;\n      } else if (context.type === PlaylistContextType.SUBTITLE_TRACK && context.id !== null) {\n        levelDetails = this.hls.subtitleTracks[context.id].details;\n      }\n      if (levelDetails) {\n        const partTarget = levelDetails.partTarget;\n        const targetDuration = levelDetails.targetduration;\n        if (partTarget && targetDuration) {\n          const maxLowLatencyPlaylistRefresh = Math.max(partTarget * 3, targetDuration * 0.8) * 1e3;\n          loadPolicy = _extends({}, loadPolicy, {\n            maxTimeToFirstByteMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs),\n            maxLoadTimeMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs)\n          });\n        }\n      }\n    }\n    const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n    const loaderConfig = {\n      loadPolicy,\n      timeout: loadPolicy.maxLoadTimeMs,\n      maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n      retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n      maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n    };\n    const loaderCallbacks = {\n      onSuccess: (response, stats, context2, networkDetails) => {\n        const loader2 = this.getInternalLoader(context2);\n        this.resetInternalLoader(context2.type);\n        const string = response.data;\n        if (string.indexOf(\"#EXTM3U\") !== 0) {\n          this.handleManifestParsingError(response, context2, new Error(\"no EXTM3U delimiter\"), networkDetails || null, stats);\n          return;\n        }\n        stats.parsing.start = performance.now();\n        if (M3U8Parser.isMediaPlaylist(string)) {\n          this.handleTrackOrLevelPlaylist(response, stats, context2, networkDetails || null, loader2);\n        } else {\n          this.handleMasterPlaylist(response, stats, context2, networkDetails);\n        }\n      },\n      onError: (response, context2, networkDetails, stats) => {\n        this.handleNetworkError(context2, networkDetails, false, response, stats);\n      },\n      onTimeout: (stats, context2, networkDetails) => {\n        this.handleNetworkError(context2, networkDetails, true, void 0, stats);\n      }\n    };\n    loader.load(context, loaderConfig, loaderCallbacks);\n  }\n  handleMasterPlaylist(response, stats, context, networkDetails) {\n    const hls = this.hls;\n    const string = response.data;\n    const url = getResponseUrl(response, context);\n    const parsedResult = M3U8Parser.parseMasterPlaylist(string, url);\n    if (parsedResult.playlistParsingError) {\n      this.handleManifestParsingError(response, context, parsedResult.playlistParsingError, networkDetails, stats);\n      return;\n    }\n    const {\n      contentSteering,\n      levels,\n      sessionData,\n      sessionKeys,\n      startTimeOffset,\n      variableList\n    } = parsedResult;\n    this.variableList = variableList;\n    const {\n      AUDIO: audioTracks = [],\n      SUBTITLES: subtitles,\n      \"CLOSED-CAPTIONS\": captions\n    } = M3U8Parser.parseMasterPlaylistMedia(string, url, parsedResult);\n    if (audioTracks.length) {\n      const embeddedAudioFound = audioTracks.some((audioTrack) => !audioTrack.url);\n      if (!embeddedAudioFound && levels[0].audioCodec && !levels[0].attrs.AUDIO) {\n        logger.log(\"[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one\");\n        audioTracks.unshift({\n          type: \"main\",\n          name: \"main\",\n          groupId: \"main\",\n          default: false,\n          autoselect: false,\n          forced: false,\n          id: -1,\n          attrs: new AttrList({}),\n          bitrate: 0,\n          url: \"\"\n        });\n      }\n    }\n    hls.trigger(Events.MANIFEST_LOADED, {\n      levels,\n      audioTracks,\n      subtitles,\n      captions,\n      contentSteering,\n      url,\n      stats,\n      networkDetails,\n      sessionData,\n      sessionKeys,\n      startTimeOffset,\n      variableList\n    });\n  }\n  handleTrackOrLevelPlaylist(response, stats, context, networkDetails, loader) {\n    const hls = this.hls;\n    const {\n      id,\n      level,\n      type\n    } = context;\n    const url = getResponseUrl(response, context);\n    const levelUrlId = 0;\n    const levelId = isFiniteNumber(level) ? level : isFiniteNumber(id) ? id : 0;\n    const levelType = mapContextToLevelType(context);\n    const levelDetails = M3U8Parser.parseLevelPlaylist(response.data, url, levelId, levelType, levelUrlId, this.variableList);\n    if (type === PlaylistContextType.MANIFEST) {\n      const singleLevel = {\n        attrs: new AttrList({}),\n        bitrate: 0,\n        details: levelDetails,\n        name: \"\",\n        url\n      };\n      hls.trigger(Events.MANIFEST_LOADED, {\n        levels: [singleLevel],\n        audioTracks: [],\n        url,\n        stats,\n        networkDetails,\n        sessionData: null,\n        sessionKeys: null,\n        contentSteering: null,\n        startTimeOffset: null,\n        variableList: null\n      });\n    }\n    stats.parsing.end = performance.now();\n    context.levelDetails = levelDetails;\n    this.handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader);\n  }\n  handleManifestParsingError(response, context, error, networkDetails, stats) {\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.NETWORK_ERROR,\n      details: ErrorDetails.MANIFEST_PARSING_ERROR,\n      fatal: context.type === PlaylistContextType.MANIFEST,\n      url: response.url,\n      err: error,\n      error,\n      reason: error.message,\n      response,\n      context,\n      networkDetails,\n      stats\n    });\n  }\n  handleNetworkError(context, networkDetails, timeout = false, response, stats) {\n    let message = `A network ${timeout ? \"timeout\" : \"error\" + (response ? \" (status \" + response.code + \")\" : \"\")} occurred while loading ${context.type}`;\n    if (context.type === PlaylistContextType.LEVEL) {\n      message += `: ${context.level} id: ${context.id}`;\n    } else if (context.type === PlaylistContextType.AUDIO_TRACK || context.type === PlaylistContextType.SUBTITLE_TRACK) {\n      message += ` id: ${context.id} group-id: \"${context.groupId}\"`;\n    }\n    const error = new Error(message);\n    logger.warn(`[playlist-loader]: ${message}`);\n    let details = ErrorDetails.UNKNOWN;\n    let fatal = false;\n    const loader = this.getInternalLoader(context);\n    switch (context.type) {\n      case PlaylistContextType.MANIFEST:\n        details = timeout ? ErrorDetails.MANIFEST_LOAD_TIMEOUT : ErrorDetails.MANIFEST_LOAD_ERROR;\n        fatal = true;\n        break;\n      case PlaylistContextType.LEVEL:\n        details = timeout ? ErrorDetails.LEVEL_LOAD_TIMEOUT : ErrorDetails.LEVEL_LOAD_ERROR;\n        fatal = false;\n        break;\n      case PlaylistContextType.AUDIO_TRACK:\n        details = timeout ? ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT : ErrorDetails.AUDIO_TRACK_LOAD_ERROR;\n        fatal = false;\n        break;\n      case PlaylistContextType.SUBTITLE_TRACK:\n        details = timeout ? ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT : ErrorDetails.SUBTITLE_LOAD_ERROR;\n        fatal = false;\n        break;\n    }\n    if (loader) {\n      this.resetInternalLoader(context.type);\n    }\n    const errorData = {\n      type: ErrorTypes.NETWORK_ERROR,\n      details,\n      fatal,\n      url: context.url,\n      loader,\n      context,\n      error,\n      networkDetails,\n      stats\n    };\n    if (response) {\n      const url = (networkDetails == null ? void 0 : networkDetails.url) || context.url;\n      errorData.response = _objectSpread2({\n        url,\n        data: void 0\n      }, response);\n    }\n    this.hls.trigger(Events.ERROR, errorData);\n  }\n  handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader) {\n    const hls = this.hls;\n    const {\n      type,\n      level,\n      id,\n      groupId,\n      deliveryDirectives\n    } = context;\n    const url = getResponseUrl(response, context);\n    const parent = mapContextToLevelType(context);\n    const levelIndex = typeof context.level === \"number\" && parent === PlaylistLevelType.MAIN ? level : void 0;\n    if (!levelDetails.fragments.length) {\n      const _error = new Error(\"No Segments found in Playlist\");\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.LEVEL_EMPTY_ERROR,\n        fatal: false,\n        url,\n        error: _error,\n        reason: _error.message,\n        response,\n        context,\n        level: levelIndex,\n        parent,\n        networkDetails,\n        stats\n      });\n      return;\n    }\n    if (!levelDetails.targetduration) {\n      levelDetails.playlistParsingError = new Error(\"Missing Target Duration\");\n    }\n    const error = levelDetails.playlistParsingError;\n    if (error) {\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.LEVEL_PARSING_ERROR,\n        fatal: false,\n        url,\n        error,\n        reason: error.message,\n        response,\n        context,\n        level: levelIndex,\n        parent,\n        networkDetails,\n        stats\n      });\n      return;\n    }\n    if (levelDetails.live && loader) {\n      if (loader.getCacheAge) {\n        levelDetails.ageHeader = loader.getCacheAge() || 0;\n      }\n      if (!loader.getCacheAge || isNaN(levelDetails.ageHeader)) {\n        levelDetails.ageHeader = 0;\n      }\n    }\n    switch (type) {\n      case PlaylistContextType.MANIFEST:\n      case PlaylistContextType.LEVEL:\n        hls.trigger(Events.LEVEL_LOADED, {\n          details: levelDetails,\n          level: levelIndex || 0,\n          id: id || 0,\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n      case PlaylistContextType.AUDIO_TRACK:\n        hls.trigger(Events.AUDIO_TRACK_LOADED, {\n          details: levelDetails,\n          id: id || 0,\n          groupId: groupId || \"\",\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n      case PlaylistContextType.SUBTITLE_TRACK:\n        hls.trigger(Events.SUBTITLE_TRACK_LOADED, {\n          details: levelDetails,\n          id: id || 0,\n          groupId: groupId || \"\",\n          stats,\n          networkDetails,\n          deliveryDirectives\n        });\n        break;\n    }\n  }\n};\nfunction sendAddTrackEvent(track, videoEl) {\n  let event;\n  try {\n    event = new Event(\"addtrack\");\n  } catch (err) {\n    event = document.createEvent(\"Event\");\n    event.initEvent(\"addtrack\", false, false);\n  }\n  event.track = track;\n  videoEl.dispatchEvent(event);\n}\nfunction addCueToTrack(track, cue) {\n  const mode = track.mode;\n  if (mode === \"disabled\") {\n    track.mode = \"hidden\";\n  }\n  if (track.cues && !track.cues.getCueById(cue.id)) {\n    try {\n      track.addCue(cue);\n      if (!track.cues.getCueById(cue.id)) {\n        throw new Error(`addCue is failed for: ${cue}`);\n      }\n    } catch (err) {\n      logger.debug(`[texttrack-utils]: ${err}`);\n      try {\n        const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);\n        textTrackCue.id = cue.id;\n        track.addCue(textTrackCue);\n      } catch (err2) {\n        logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);\n      }\n    }\n  }\n  if (mode === \"disabled\") {\n    track.mode = mode;\n  }\n}\nfunction clearCurrentCues(track) {\n  const mode = track.mode;\n  if (mode === \"disabled\") {\n    track.mode = \"hidden\";\n  }\n  if (track.cues) {\n    for (let i2 = track.cues.length; i2--; ) {\n      track.removeCue(track.cues[i2]);\n    }\n  }\n  if (mode === \"disabled\") {\n    track.mode = mode;\n  }\n}\nfunction removeCuesInRange(track, start, end, predicate) {\n  const mode = track.mode;\n  if (mode === \"disabled\") {\n    track.mode = \"hidden\";\n  }\n  if (track.cues && track.cues.length > 0) {\n    const cues = getCuesInRange(track.cues, start, end);\n    for (let i2 = 0; i2 < cues.length; i2++) {\n      if (!predicate || predicate(cues[i2])) {\n        track.removeCue(cues[i2]);\n      }\n    }\n  }\n  if (mode === \"disabled\") {\n    track.mode = mode;\n  }\n}\nfunction getFirstCueIndexAfterTime(cues, time) {\n  if (time < cues[0].startTime) {\n    return 0;\n  }\n  const len = cues.length - 1;\n  if (time > cues[len].endTime) {\n    return -1;\n  }\n  let left = 0;\n  let right = len;\n  while (left <= right) {\n    const mid = Math.floor((right + left) / 2);\n    if (time < cues[mid].startTime) {\n      right = mid - 1;\n    } else if (time > cues[mid].startTime && left < len) {\n      left = mid + 1;\n    } else {\n      return mid;\n    }\n  }\n  return cues[left].startTime - time < time - cues[right].startTime ? left : right;\n}\nfunction getCuesInRange(cues, start, end) {\n  const cuesFound = [];\n  const firstCueInRange = getFirstCueIndexAfterTime(cues, start);\n  if (firstCueInRange > -1) {\n    for (let i2 = firstCueInRange, len = cues.length; i2 < len; i2++) {\n      const cue = cues[i2];\n      if (cue.startTime >= start && cue.endTime <= end) {\n        cuesFound.push(cue);\n      } else if (cue.startTime > end) {\n        return cuesFound;\n      }\n    }\n  }\n  return cuesFound;\n}\nfunction filterSubtitleTracks(textTrackList) {\n  const tracks = [];\n  for (let i2 = 0; i2 < textTrackList.length; i2++) {\n    const track = textTrackList[i2];\n    if ((track.kind === \"subtitles\" || track.kind === \"captions\") && track.label) {\n      tracks.push(textTrackList[i2]);\n    }\n  }\n  return tracks;\n}\nvar MetadataSchema = {\n  audioId3: \"org.id3\",\n  dateRange: \"com.apple.quicktime.HLS\",\n  emsg: \"https://aomedia.org/emsg/ID3\"\n};\nvar MIN_CUE_DURATION = 0.25;\nfunction getCueClass() {\n  if (typeof self === \"undefined\") return void 0;\n  return self.VTTCue || self.TextTrackCue;\n}\nfunction createCueWithDataFields(Cue, startTime, endTime, data, type) {\n  let cue = new Cue(startTime, endTime, \"\");\n  try {\n    cue.value = data;\n    if (type) {\n      cue.type = type;\n    }\n  } catch (e) {\n    cue = new Cue(startTime, endTime, JSON.stringify(type ? _objectSpread2({\n      type\n    }, data) : data));\n  }\n  return cue;\n}\nvar MAX_CUE_ENDTIME = (() => {\n  const Cue = getCueClass();\n  try {\n    Cue && new Cue(0, Number.POSITIVE_INFINITY, \"\");\n  } catch (e) {\n    return Number.MAX_VALUE;\n  }\n  return Number.POSITIVE_INFINITY;\n})();\nfunction dateRangeDateToTimelineSeconds(date, offset) {\n  return date.getTime() / 1e3 - offset;\n}\nfunction hexToArrayBuffer(str) {\n  return Uint8Array.from(str.replace(/^0x/, \"\").replace(/([\\da-fA-F]{2}) ?/g, \"0x$1 \").replace(/ +$/, \"\").split(\" \")).buffer;\n}\nvar ID3TrackController = class {\n  constructor(hls) {\n    this.hls = void 0;\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n    this.hls = hls;\n    this._registerListeners();\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n    this.hls = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  // Add ID3 metatadata text track.\n  onMediaAttached(event, data) {\n    this.media = data.media;\n  }\n  onMediaDetaching() {\n    if (!this.id3Track) {\n      return;\n    }\n    clearCurrentCues(this.id3Track);\n    this.id3Track = null;\n    this.media = null;\n    this.dateRangeCuesAppended = {};\n  }\n  onManifestLoading() {\n    this.dateRangeCuesAppended = {};\n  }\n  createTrack(media) {\n    const track = this.getID3Track(media.textTracks);\n    track.mode = \"hidden\";\n    return track;\n  }\n  getID3Track(textTracks) {\n    if (!this.media) {\n      return;\n    }\n    for (let i2 = 0; i2 < textTracks.length; i2++) {\n      const textTrack = textTracks[i2];\n      if (textTrack.kind === \"metadata\" && textTrack.label === \"id3\") {\n        sendAddTrackEvent(textTrack, this.media);\n        return textTrack;\n      }\n    }\n    return this.media.addTextTrack(\"metadata\", \"id3\");\n  }\n  onFragParsingMetadata(event, data) {\n    if (!this.media) {\n      return;\n    }\n    const {\n      hls: {\n        config: {\n          enableEmsgMetadataCues,\n          enableID3MetadataCues\n        }\n      }\n    } = this;\n    if (!enableEmsgMetadataCues && !enableID3MetadataCues) {\n      return;\n    }\n    const {\n      samples\n    } = data;\n    if (!this.id3Track) {\n      this.id3Track = this.createTrack(this.media);\n    }\n    const Cue = getCueClass();\n    if (!Cue) {\n      return;\n    }\n    for (let i2 = 0; i2 < samples.length; i2++) {\n      const type = samples[i2].type;\n      if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {\n        continue;\n      }\n      const frames = getID3Frames(samples[i2].data);\n      if (frames) {\n        const startTime = samples[i2].pts;\n        let endTime = startTime + samples[i2].duration;\n        if (endTime > MAX_CUE_ENDTIME) {\n          endTime = MAX_CUE_ENDTIME;\n        }\n        const timeDiff = endTime - startTime;\n        if (timeDiff <= 0) {\n          endTime = startTime + MIN_CUE_DURATION;\n        }\n        for (let j4 = 0; j4 < frames.length; j4++) {\n          const frame = frames[j4];\n          if (!isTimeStampFrame(frame)) {\n            this.updateId3CueEnds(startTime, type);\n            const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);\n            if (cue) {\n              this.id3Track.addCue(cue);\n            }\n          }\n        }\n      }\n    }\n  }\n  updateId3CueEnds(startTime, type) {\n    var _this$id3Track;\n    const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;\n    if (cues) {\n      for (let i2 = cues.length; i2--; ) {\n        const cue = cues[i2];\n        if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {\n          cue.endTime = startTime;\n        }\n      }\n    }\n  }\n  onBufferFlushing(event, {\n    startOffset,\n    endOffset,\n    type\n  }) {\n    const {\n      id3Track,\n      hls\n    } = this;\n    if (!hls) {\n      return;\n    }\n    const {\n      config: {\n        enableEmsgMetadataCues,\n        enableID3MetadataCues\n      }\n    } = hls;\n    if (id3Track && (enableEmsgMetadataCues || enableID3MetadataCues)) {\n      let predicate;\n      if (type === \"audio\") {\n        predicate = (cue) => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues;\n      } else if (type === \"video\") {\n        predicate = (cue) => cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n      } else {\n        predicate = (cue) => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues || cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n      }\n      removeCuesInRange(id3Track, startOffset, endOffset, predicate);\n    }\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    if (!this.media || !details.hasProgramDateTime || !this.hls.config.enableDateRangeMetadataCues) {\n      return;\n    }\n    const {\n      dateRangeCuesAppended,\n      id3Track\n    } = this;\n    const {\n      dateRanges\n    } = details;\n    const ids = Object.keys(dateRanges);\n    if (id3Track) {\n      const idsToRemove = Object.keys(dateRangeCuesAppended).filter((id) => !ids.includes(id));\n      for (let i2 = idsToRemove.length; i2--; ) {\n        const id = idsToRemove[i2];\n        Object.keys(dateRangeCuesAppended[id].cues).forEach((key) => {\n          id3Track.removeCue(dateRangeCuesAppended[id].cues[key]);\n        });\n        delete dateRangeCuesAppended[id];\n      }\n    }\n    const lastFragment = details.fragments[details.fragments.length - 1];\n    if (ids.length === 0 || !isFiniteNumber(lastFragment == null ? void 0 : lastFragment.programDateTime)) {\n      return;\n    }\n    if (!this.id3Track) {\n      this.id3Track = this.createTrack(this.media);\n    }\n    const dateTimeOffset = lastFragment.programDateTime / 1e3 - lastFragment.start;\n    const Cue = getCueClass();\n    for (let i2 = 0; i2 < ids.length; i2++) {\n      const id = ids[i2];\n      const dateRange = dateRanges[id];\n      const startTime = dateRangeDateToTimelineSeconds(dateRange.startDate, dateTimeOffset);\n      const appendedDateRangeCues = dateRangeCuesAppended[id];\n      const cues = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.cues) || {};\n      let durationKnown = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.durationKnown) || false;\n      let endTime = MAX_CUE_ENDTIME;\n      const endDate = dateRange.endDate;\n      if (endDate) {\n        endTime = dateRangeDateToTimelineSeconds(endDate, dateTimeOffset);\n        durationKnown = true;\n      } else if (dateRange.endOnNext && !durationKnown) {\n        const nextDateRangeWithSameClass = ids.reduce((candidateDateRange, id2) => {\n          if (id2 !== dateRange.id) {\n            const otherDateRange = dateRanges[id2];\n            if (otherDateRange.class === dateRange.class && otherDateRange.startDate > dateRange.startDate && (!candidateDateRange || dateRange.startDate < candidateDateRange.startDate)) {\n              return otherDateRange;\n            }\n          }\n          return candidateDateRange;\n        }, null);\n        if (nextDateRangeWithSameClass) {\n          endTime = dateRangeDateToTimelineSeconds(nextDateRangeWithSameClass.startDate, dateTimeOffset);\n          durationKnown = true;\n        }\n      }\n      const attributes = Object.keys(dateRange.attr);\n      for (let j4 = 0; j4 < attributes.length; j4++) {\n        const key = attributes[j4];\n        if (!isDateRangeCueAttribute(key)) {\n          continue;\n        }\n        const cue = cues[key];\n        if (cue) {\n          if (durationKnown && !appendedDateRangeCues.durationKnown) {\n            cue.endTime = endTime;\n          }\n        } else if (Cue) {\n          let data = dateRange.attr[key];\n          if (isSCTE35Attribute(key)) {\n            data = hexToArrayBuffer(data);\n          }\n          const _cue = createCueWithDataFields(Cue, startTime, endTime, {\n            key,\n            data\n          }, MetadataSchema.dateRange);\n          if (_cue) {\n            _cue.id = id;\n            this.id3Track.addCue(_cue);\n            cues[key] = _cue;\n          }\n        }\n      }\n      dateRangeCuesAppended[id] = {\n        cues,\n        dateRange,\n        durationKnown\n      };\n    }\n  }\n};\nvar LatencyController = class {\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = null;\n    this.levelDetails = null;\n    this.currentTime = 0;\n    this.stallCount = 0;\n    this._latency = null;\n    this.timeupdateHandler = () => this.timeupdate();\n    this.hls = hls;\n    this.config = hls.config;\n    this.registerListeners();\n  }\n  get latency() {\n    return this._latency || 0;\n  }\n  get maxLatency() {\n    const {\n      config,\n      levelDetails\n    } = this;\n    if (config.liveMaxLatencyDuration !== void 0) {\n      return config.liveMaxLatencyDuration;\n    }\n    return levelDetails ? config.liveMaxLatencyDurationCount * levelDetails.targetduration : 0;\n  }\n  get targetLatency() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return null;\n    }\n    const {\n      holdBack,\n      partHoldBack,\n      targetduration\n    } = levelDetails;\n    const {\n      liveSyncDuration,\n      liveSyncDurationCount,\n      lowLatencyMode\n    } = this.config;\n    const userConfig = this.hls.userConfig;\n    let targetLatency = lowLatencyMode ? partHoldBack || holdBack : holdBack;\n    if (userConfig.liveSyncDuration || userConfig.liveSyncDurationCount || targetLatency === 0) {\n      targetLatency = liveSyncDuration !== void 0 ? liveSyncDuration : liveSyncDurationCount * targetduration;\n    }\n    const maxLiveSyncOnStallIncrease = targetduration;\n    const liveSyncOnStallIncrease = 1;\n    return targetLatency + Math.min(this.stallCount * liveSyncOnStallIncrease, maxLiveSyncOnStallIncrease);\n  }\n  get liveSyncPosition() {\n    const liveEdge = this.estimateLiveEdge();\n    const targetLatency = this.targetLatency;\n    const levelDetails = this.levelDetails;\n    if (liveEdge === null || targetLatency === null || levelDetails === null) {\n      return null;\n    }\n    const edge = levelDetails.edge;\n    const syncPosition = liveEdge - targetLatency - this.edgeStalled;\n    const min = edge - levelDetails.totalduration;\n    const max = edge - (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration);\n    return Math.min(Math.max(min, syncPosition), max);\n  }\n  get drift() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return 1;\n    }\n    return levelDetails.drift;\n  }\n  get edgeStalled() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return 0;\n    }\n    const maxLevelUpdateAge = (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration) * 3;\n    return Math.max(levelDetails.age - maxLevelUpdateAge, 0);\n  }\n  get forwardBufferLength() {\n    const {\n      media,\n      levelDetails\n    } = this;\n    if (!media || !levelDetails) {\n      return 0;\n    }\n    const bufferedRanges = media.buffered.length;\n    return (bufferedRanges ? media.buffered.end(bufferedRanges - 1) : levelDetails.edge) - this.currentTime;\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetaching();\n    this.levelDetails = null;\n    this.hls = this.timeupdateHandler = null;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    this.hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    this.hls.off(Events.ERROR, this.onError, this);\n  }\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    this.media.addEventListener(\"timeupdate\", this.timeupdateHandler);\n  }\n  onMediaDetaching() {\n    if (this.media) {\n      this.media.removeEventListener(\"timeupdate\", this.timeupdateHandler);\n      this.media = null;\n    }\n  }\n  onManifestLoading() {\n    this.levelDetails = null;\n    this._latency = null;\n    this.stallCount = 0;\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    this.levelDetails = details;\n    if (details.advanced) {\n      this.timeupdate();\n    }\n    if (!details.live && this.media) {\n      this.media.removeEventListener(\"timeupdate\", this.timeupdateHandler);\n    }\n  }\n  onError(event, data) {\n    var _this$levelDetails;\n    if (data.details !== ErrorDetails.BUFFER_STALLED_ERROR) {\n      return;\n    }\n    this.stallCount++;\n    if ((_this$levelDetails = this.levelDetails) != null && _this$levelDetails.live) {\n      logger.warn(\"[playback-rate-controller]: Stall detected, adjusting target latency\");\n    }\n  }\n  timeupdate() {\n    const {\n      media,\n      levelDetails\n    } = this;\n    if (!media || !levelDetails) {\n      return;\n    }\n    this.currentTime = media.currentTime;\n    const latency = this.computeLatency();\n    if (latency === null) {\n      return;\n    }\n    this._latency = latency;\n    const {\n      lowLatencyMode,\n      maxLiveSyncPlaybackRate\n    } = this.config;\n    if (!lowLatencyMode || maxLiveSyncPlaybackRate === 1 || !levelDetails.live) {\n      return;\n    }\n    const targetLatency = this.targetLatency;\n    if (targetLatency === null) {\n      return;\n    }\n    const distanceFromTarget = latency - targetLatency;\n    const liveMinLatencyDuration = Math.min(this.maxLatency, targetLatency + levelDetails.targetduration);\n    const inLiveRange = distanceFromTarget < liveMinLatencyDuration;\n    if (inLiveRange && distanceFromTarget > 0.05 && this.forwardBufferLength > 1) {\n      const max = Math.min(2, Math.max(1, maxLiveSyncPlaybackRate));\n      const rate = Math.round(2 / (1 + Math.exp(-0.75 * distanceFromTarget - this.edgeStalled)) * 20) / 20;\n      media.playbackRate = Math.min(max, Math.max(1, rate));\n    } else if (media.playbackRate !== 1 && media.playbackRate !== 0) {\n      media.playbackRate = 1;\n    }\n  }\n  estimateLiveEdge() {\n    const {\n      levelDetails\n    } = this;\n    if (levelDetails === null) {\n      return null;\n    }\n    return levelDetails.edge + levelDetails.age;\n  }\n  computeLatency() {\n    const liveEdge = this.estimateLiveEdge();\n    if (liveEdge === null) {\n      return null;\n    }\n    return liveEdge - this.currentTime;\n  }\n};\nvar HdcpLevels = [\"NONE\", \"TYPE-0\", \"TYPE-1\", null];\nfunction isHdcpLevel(value) {\n  return HdcpLevels.indexOf(value) > -1;\n}\nvar VideoRangeValues = [\"SDR\", \"PQ\", \"HLG\"];\nfunction isVideoRange(value) {\n  return !!value && VideoRangeValues.indexOf(value) > -1;\n}\nvar HlsSkip = {\n  No: \"\",\n  Yes: \"YES\",\n  v2: \"v2\"\n};\nfunction getSkipValue(details) {\n  const {\n    canSkipUntil,\n    canSkipDateRanges,\n    age\n  } = details;\n  const playlistRecentEnough = age < canSkipUntil / 2;\n  if (canSkipUntil && playlistRecentEnough) {\n    if (canSkipDateRanges) {\n      return HlsSkip.v2;\n    }\n    return HlsSkip.Yes;\n  }\n  return HlsSkip.No;\n}\nvar HlsUrlParameters = class {\n  constructor(msn, part, skip) {\n    this.msn = void 0;\n    this.part = void 0;\n    this.skip = void 0;\n    this.msn = msn;\n    this.part = part;\n    this.skip = skip;\n  }\n  addDirectives(uri) {\n    const url = new self.URL(uri);\n    if (this.msn !== void 0) {\n      url.searchParams.set(\"_HLS_msn\", this.msn.toString());\n    }\n    if (this.part !== void 0) {\n      url.searchParams.set(\"_HLS_part\", this.part.toString());\n    }\n    if (this.skip) {\n      url.searchParams.set(\"_HLS_skip\", this.skip);\n    }\n    return url.href;\n  }\n};\nvar Level = class {\n  constructor(data) {\n    this._attrs = void 0;\n    this.audioCodec = void 0;\n    this.bitrate = void 0;\n    this.codecSet = void 0;\n    this.url = void 0;\n    this.frameRate = void 0;\n    this.height = void 0;\n    this.id = void 0;\n    this.name = void 0;\n    this.videoCodec = void 0;\n    this.width = void 0;\n    this.details = void 0;\n    this.fragmentError = 0;\n    this.loadError = 0;\n    this.loaded = void 0;\n    this.realBitrate = 0;\n    this.supportedPromise = void 0;\n    this.supportedResult = void 0;\n    this._avgBitrate = 0;\n    this._audioGroups = void 0;\n    this._subtitleGroups = void 0;\n    this._urlId = 0;\n    this.url = [data.url];\n    this._attrs = [data.attrs];\n    this.bitrate = data.bitrate;\n    if (data.details) {\n      this.details = data.details;\n    }\n    this.id = data.id || 0;\n    this.name = data.name;\n    this.width = data.width || 0;\n    this.height = data.height || 0;\n    this.frameRate = data.attrs.optionalFloat(\"FRAME-RATE\", 0);\n    this._avgBitrate = data.attrs.decimalInteger(\"AVERAGE-BANDWIDTH\");\n    this.audioCodec = data.audioCodec;\n    this.videoCodec = data.videoCodec;\n    this.codecSet = [data.videoCodec, data.audioCodec].filter((c4) => !!c4).map((s) => s.substring(0, 4)).join(\",\");\n    this.addGroupId(\"audio\", data.attrs.AUDIO);\n    this.addGroupId(\"text\", data.attrs.SUBTITLES);\n  }\n  get maxBitrate() {\n    return Math.max(this.realBitrate, this.bitrate);\n  }\n  get averageBitrate() {\n    return this._avgBitrate || this.realBitrate || this.bitrate;\n  }\n  get attrs() {\n    return this._attrs[0];\n  }\n  get codecs() {\n    return this.attrs.CODECS || \"\";\n  }\n  get pathwayId() {\n    return this.attrs[\"PATHWAY-ID\"] || \".\";\n  }\n  get videoRange() {\n    return this.attrs[\"VIDEO-RANGE\"] || \"SDR\";\n  }\n  get score() {\n    return this.attrs.optionalFloat(\"SCORE\", 0);\n  }\n  get uri() {\n    return this.url[0] || \"\";\n  }\n  hasAudioGroup(groupId) {\n    return hasGroup(this._audioGroups, groupId);\n  }\n  hasSubtitleGroup(groupId) {\n    return hasGroup(this._subtitleGroups, groupId);\n  }\n  get audioGroups() {\n    return this._audioGroups;\n  }\n  get subtitleGroups() {\n    return this._subtitleGroups;\n  }\n  addGroupId(type, groupId) {\n    if (!groupId) {\n      return;\n    }\n    if (type === \"audio\") {\n      let audioGroups = this._audioGroups;\n      if (!audioGroups) {\n        audioGroups = this._audioGroups = [];\n      }\n      if (audioGroups.indexOf(groupId) === -1) {\n        audioGroups.push(groupId);\n      }\n    } else if (type === \"text\") {\n      let subtitleGroups = this._subtitleGroups;\n      if (!subtitleGroups) {\n        subtitleGroups = this._subtitleGroups = [];\n      }\n      if (subtitleGroups.indexOf(groupId) === -1) {\n        subtitleGroups.push(groupId);\n      }\n    }\n  }\n  // Deprecated methods (retained for backwards compatibility)\n  get urlId() {\n    return 0;\n  }\n  set urlId(value) {\n  }\n  get audioGroupIds() {\n    return this.audioGroups ? [this.audioGroupId] : void 0;\n  }\n  get textGroupIds() {\n    return this.subtitleGroups ? [this.textGroupId] : void 0;\n  }\n  get audioGroupId() {\n    var _this$audioGroups;\n    return (_this$audioGroups = this.audioGroups) == null ? void 0 : _this$audioGroups[0];\n  }\n  get textGroupId() {\n    var _this$subtitleGroups;\n    return (_this$subtitleGroups = this.subtitleGroups) == null ? void 0 : _this$subtitleGroups[0];\n  }\n  addFallback() {\n  }\n};\nfunction hasGroup(groups, groupId) {\n  if (!groupId || !groups) {\n    return false;\n  }\n  return groups.indexOf(groupId) !== -1;\n}\nfunction updateFromToPTS(fragFrom, fragTo) {\n  const fragToPTS = fragTo.startPTS;\n  if (isFiniteNumber(fragToPTS)) {\n    let duration = 0;\n    let frag;\n    if (fragTo.sn > fragFrom.sn) {\n      duration = fragToPTS - fragFrom.start;\n      frag = fragFrom;\n    } else {\n      duration = fragFrom.start - fragToPTS;\n      frag = fragTo;\n    }\n    if (frag.duration !== duration) {\n      frag.duration = duration;\n    }\n  } else if (fragTo.sn > fragFrom.sn) {\n    const contiguous = fragFrom.cc === fragTo.cc;\n    if (contiguous && fragFrom.minEndPTS) {\n      fragTo.start = fragFrom.start + (fragFrom.minEndPTS - fragFrom.start);\n    } else {\n      fragTo.start = fragFrom.start + fragFrom.duration;\n    }\n  } else {\n    fragTo.start = Math.max(fragFrom.start - fragTo.duration, 0);\n  }\n}\nfunction updateFragPTSDTS(details, frag, startPTS, endPTS, startDTS, endDTS) {\n  const parsedMediaDuration = endPTS - startPTS;\n  if (parsedMediaDuration <= 0) {\n    logger.warn(\"Fragment should have a positive duration\", frag);\n    endPTS = startPTS + frag.duration;\n    endDTS = startDTS + frag.duration;\n  }\n  let maxStartPTS = startPTS;\n  let minEndPTS = endPTS;\n  const fragStartPts = frag.startPTS;\n  const fragEndPts = frag.endPTS;\n  if (isFiniteNumber(fragStartPts)) {\n    const deltaPTS = Math.abs(fragStartPts - startPTS);\n    if (!isFiniteNumber(frag.deltaPTS)) {\n      frag.deltaPTS = deltaPTS;\n    } else {\n      frag.deltaPTS = Math.max(deltaPTS, frag.deltaPTS);\n    }\n    maxStartPTS = Math.max(startPTS, fragStartPts);\n    startPTS = Math.min(startPTS, fragStartPts);\n    startDTS = Math.min(startDTS, frag.startDTS);\n    minEndPTS = Math.min(endPTS, fragEndPts);\n    endPTS = Math.max(endPTS, fragEndPts);\n    endDTS = Math.max(endDTS, frag.endDTS);\n  }\n  const drift = startPTS - frag.start;\n  if (frag.start !== 0) {\n    frag.start = startPTS;\n  }\n  frag.duration = endPTS - frag.start;\n  frag.startPTS = startPTS;\n  frag.maxStartPTS = maxStartPTS;\n  frag.startDTS = startDTS;\n  frag.endPTS = endPTS;\n  frag.minEndPTS = minEndPTS;\n  frag.endDTS = endDTS;\n  const sn = frag.sn;\n  if (!details || sn < details.startSN || sn > details.endSN) {\n    return 0;\n  }\n  let i2;\n  const fragIdx = sn - details.startSN;\n  const fragments = details.fragments;\n  fragments[fragIdx] = frag;\n  for (i2 = fragIdx; i2 > 0; i2--) {\n    updateFromToPTS(fragments[i2], fragments[i2 - 1]);\n  }\n  for (i2 = fragIdx; i2 < fragments.length - 1; i2++) {\n    updateFromToPTS(fragments[i2], fragments[i2 + 1]);\n  }\n  if (details.fragmentHint) {\n    updateFromToPTS(fragments[fragments.length - 1], details.fragmentHint);\n  }\n  details.PTSKnown = details.alignedSliding = true;\n  return drift;\n}\nfunction mergeDetails(oldDetails, newDetails) {\n  let currentInitSegment = null;\n  const oldFragments = oldDetails.fragments;\n  for (let i2 = oldFragments.length - 1; i2 >= 0; i2--) {\n    const oldInit = oldFragments[i2].initSegment;\n    if (oldInit) {\n      currentInitSegment = oldInit;\n      break;\n    }\n  }\n  if (oldDetails.fragmentHint) {\n    delete oldDetails.fragmentHint.endPTS;\n  }\n  let PTSFrag;\n  mapFragmentIntersection(oldDetails, newDetails, (oldFrag, newFrag, newFragIndex, newFragments2) => {\n    if (newDetails.skippedSegments) {\n      if (newFrag.cc !== oldFrag.cc) {\n        const ccOffset = oldFrag.cc - newFrag.cc;\n        for (let i2 = newFragIndex; i2 < newFragments2.length; i2++) {\n          newFragments2[i2].cc += ccOffset;\n        }\n      }\n    }\n    if (isFiniteNumber(oldFrag.startPTS) && isFiniteNumber(oldFrag.endPTS)) {\n      newFrag.start = newFrag.startPTS = oldFrag.startPTS;\n      newFrag.startDTS = oldFrag.startDTS;\n      newFrag.maxStartPTS = oldFrag.maxStartPTS;\n      newFrag.endPTS = oldFrag.endPTS;\n      newFrag.endDTS = oldFrag.endDTS;\n      newFrag.minEndPTS = oldFrag.minEndPTS;\n      newFrag.duration = oldFrag.endPTS - oldFrag.startPTS;\n      if (newFrag.duration) {\n        PTSFrag = newFrag;\n      }\n      newDetails.PTSKnown = newDetails.alignedSliding = true;\n    }\n    newFrag.elementaryStreams = oldFrag.elementaryStreams;\n    newFrag.loader = oldFrag.loader;\n    newFrag.stats = oldFrag.stats;\n    if (oldFrag.initSegment) {\n      newFrag.initSegment = oldFrag.initSegment;\n      currentInitSegment = oldFrag.initSegment;\n    }\n  });\n  const newFragments = newDetails.fragments;\n  if (currentInitSegment) {\n    const fragmentsToCheck = newDetails.fragmentHint ? newFragments.concat(newDetails.fragmentHint) : newFragments;\n    fragmentsToCheck.forEach((frag) => {\n      var _currentInitSegment;\n      if (frag && (!frag.initSegment || frag.initSegment.relurl === ((_currentInitSegment = currentInitSegment) == null ? void 0 : _currentInitSegment.relurl))) {\n        frag.initSegment = currentInitSegment;\n      }\n    });\n  }\n  if (newDetails.skippedSegments) {\n    newDetails.deltaUpdateFailed = newFragments.some((frag) => !frag);\n    if (newDetails.deltaUpdateFailed) {\n      logger.warn(\"[level-helper] Previous playlist missing segments skipped in delta playlist\");\n      for (let i2 = newDetails.skippedSegments; i2--; ) {\n        newFragments.shift();\n      }\n      newDetails.startSN = newFragments[0].sn;\n    } else {\n      if (newDetails.canSkipDateRanges) {\n        newDetails.dateRanges = mergeDateRanges(oldDetails.dateRanges, newDetails.dateRanges, newDetails.recentlyRemovedDateranges);\n      }\n    }\n    newDetails.startCC = newDetails.fragments[0].cc;\n    newDetails.endCC = newFragments[newFragments.length - 1].cc;\n  }\n  mapPartIntersection(oldDetails.partList, newDetails.partList, (oldPart, newPart) => {\n    newPart.elementaryStreams = oldPart.elementaryStreams;\n    newPart.stats = oldPart.stats;\n  });\n  if (PTSFrag) {\n    updateFragPTSDTS(newDetails, PTSFrag, PTSFrag.startPTS, PTSFrag.endPTS, PTSFrag.startDTS, PTSFrag.endDTS);\n  } else {\n    adjustSliding(oldDetails, newDetails);\n  }\n  if (newFragments.length) {\n    newDetails.totalduration = newDetails.edge - newFragments[0].start;\n  }\n  newDetails.driftStartTime = oldDetails.driftStartTime;\n  newDetails.driftStart = oldDetails.driftStart;\n  const advancedDateTime = newDetails.advancedDateTime;\n  if (newDetails.advanced && advancedDateTime) {\n    const edge = newDetails.edge;\n    if (!newDetails.driftStart) {\n      newDetails.driftStartTime = advancedDateTime;\n      newDetails.driftStart = edge;\n    }\n    newDetails.driftEndTime = advancedDateTime;\n    newDetails.driftEnd = edge;\n  } else {\n    newDetails.driftEndTime = oldDetails.driftEndTime;\n    newDetails.driftEnd = oldDetails.driftEnd;\n    newDetails.advancedDateTime = oldDetails.advancedDateTime;\n  }\n}\nfunction mergeDateRanges(oldDateRanges, deltaDateRanges, recentlyRemovedDateranges) {\n  const dateRanges = _extends({}, oldDateRanges);\n  if (recentlyRemovedDateranges) {\n    recentlyRemovedDateranges.forEach((id) => {\n      delete dateRanges[id];\n    });\n  }\n  Object.keys(deltaDateRanges).forEach((id) => {\n    const dateRange = new DateRange(deltaDateRanges[id].attr, dateRanges[id]);\n    if (dateRange.isValid) {\n      dateRanges[id] = dateRange;\n    } else {\n      logger.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: \"${JSON.stringify(deltaDateRanges[id].attr)}\"`);\n    }\n  });\n  return dateRanges;\n}\nfunction mapPartIntersection(oldParts, newParts, intersectionFn) {\n  if (oldParts && newParts) {\n    let delta = 0;\n    for (let i2 = 0, len = oldParts.length; i2 <= len; i2++) {\n      const oldPart = oldParts[i2];\n      const newPart = newParts[i2 + delta];\n      if (oldPart && newPart && oldPart.index === newPart.index && oldPart.fragment.sn === newPart.fragment.sn) {\n        intersectionFn(oldPart, newPart);\n      } else {\n        delta--;\n      }\n    }\n  }\n}\nfunction mapFragmentIntersection(oldDetails, newDetails, intersectionFn) {\n  const skippedSegments = newDetails.skippedSegments;\n  const start = Math.max(oldDetails.startSN, newDetails.startSN) - newDetails.startSN;\n  const end = (oldDetails.fragmentHint ? 1 : 0) + (skippedSegments ? newDetails.endSN : Math.min(oldDetails.endSN, newDetails.endSN)) - newDetails.startSN;\n  const delta = newDetails.startSN - oldDetails.startSN;\n  const newFrags = newDetails.fragmentHint ? newDetails.fragments.concat(newDetails.fragmentHint) : newDetails.fragments;\n  const oldFrags = oldDetails.fragmentHint ? oldDetails.fragments.concat(oldDetails.fragmentHint) : oldDetails.fragments;\n  for (let i2 = start; i2 <= end; i2++) {\n    const oldFrag = oldFrags[delta + i2];\n    let newFrag = newFrags[i2];\n    if (skippedSegments && !newFrag && i2 < skippedSegments) {\n      newFrag = newDetails.fragments[i2] = oldFrag;\n    }\n    if (oldFrag && newFrag) {\n      intersectionFn(oldFrag, newFrag, i2, newFrags);\n    }\n  }\n}\nfunction adjustSliding(oldDetails, newDetails) {\n  const delta = newDetails.startSN + newDetails.skippedSegments - oldDetails.startSN;\n  const oldFragments = oldDetails.fragments;\n  if (delta < 0 || delta >= oldFragments.length) {\n    return;\n  }\n  addSliding(newDetails, oldFragments[delta].start);\n}\nfunction addSliding(details, start) {\n  if (start) {\n    const fragments = details.fragments;\n    for (let i2 = details.skippedSegments; i2 < fragments.length; i2++) {\n      fragments[i2].start += start;\n    }\n    if (details.fragmentHint) {\n      details.fragmentHint.start += start;\n    }\n  }\n}\nfunction computeReloadInterval(newDetails, distanceToLiveEdgeMs = Infinity) {\n  let reloadInterval = 1e3 * newDetails.targetduration;\n  if (newDetails.updated) {\n    const fragments = newDetails.fragments;\n    const liveEdgeMaxTargetDurations = 4;\n    if (fragments.length && reloadInterval * liveEdgeMaxTargetDurations > distanceToLiveEdgeMs) {\n      const lastSegmentDuration = fragments[fragments.length - 1].duration * 1e3;\n      if (lastSegmentDuration < reloadInterval) {\n        reloadInterval = lastSegmentDuration;\n      }\n    }\n  } else {\n    reloadInterval /= 2;\n  }\n  return Math.round(reloadInterval);\n}\nfunction getFragmentWithSN(level, sn, fragCurrent) {\n  if (!(level != null && level.details)) {\n    return null;\n  }\n  const levelDetails = level.details;\n  let fragment = levelDetails.fragments[sn - levelDetails.startSN];\n  if (fragment) {\n    return fragment;\n  }\n  fragment = levelDetails.fragmentHint;\n  if (fragment && fragment.sn === sn) {\n    return fragment;\n  }\n  if (sn < levelDetails.startSN && fragCurrent && fragCurrent.sn === sn) {\n    return fragCurrent;\n  }\n  return null;\n}\nfunction getPartWith(level, sn, partIndex) {\n  var _level$details;\n  if (!(level != null && level.details)) {\n    return null;\n  }\n  return findPart((_level$details = level.details) == null ? void 0 : _level$details.partList, sn, partIndex);\n}\nfunction findPart(partList, sn, partIndex) {\n  if (partList) {\n    for (let i2 = partList.length; i2--; ) {\n      const part = partList[i2];\n      if (part.index === partIndex && part.fragment.sn === sn) {\n        return part;\n      }\n    }\n  }\n  return null;\n}\nfunction reassignFragmentLevelIndexes(levels) {\n  levels.forEach((level, index) => {\n    const {\n      details\n    } = level;\n    if (details != null && details.fragments) {\n      details.fragments.forEach((fragment) => {\n        fragment.level = index;\n      });\n    }\n  });\n}\nfunction isTimeoutError(error) {\n  switch (error.details) {\n    case ErrorDetails.FRAG_LOAD_TIMEOUT:\n    case ErrorDetails.KEY_LOAD_TIMEOUT:\n    case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n    case ErrorDetails.MANIFEST_LOAD_TIMEOUT:\n      return true;\n  }\n  return false;\n}\nfunction getRetryConfig(loadPolicy, error) {\n  const isTimeout = isTimeoutError(error);\n  return loadPolicy.default[`${isTimeout ? \"timeout\" : \"error\"}Retry`];\n}\nfunction getRetryDelay(retryConfig, retryCount) {\n  const backoffFactor = retryConfig.backoff === \"linear\" ? 1 : Math.pow(2, retryCount);\n  return Math.min(backoffFactor * retryConfig.retryDelayMs, retryConfig.maxRetryDelayMs);\n}\nfunction getLoaderConfigWithoutReties(loderConfig) {\n  return _objectSpread2(_objectSpread2({}, loderConfig), {\n    errorRetry: null,\n    timeoutRetry: null\n  });\n}\nfunction shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse) {\n  if (!retryConfig) {\n    return false;\n  }\n  const httpStatus = loaderResponse == null ? void 0 : loaderResponse.code;\n  const retry = retryCount < retryConfig.maxNumRetry && (retryForHttpStatus(httpStatus) || !!isTimeout);\n  return retryConfig.shouldRetry ? retryConfig.shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse, retry) : retry;\n}\nfunction retryForHttpStatus(httpStatus) {\n  return httpStatus === 0 && navigator.onLine === false || !!httpStatus && (httpStatus < 400 || httpStatus > 499);\n}\nvar BinarySearch = {\n  /**\n   * Searches for an item in an array which matches a certain condition.\n   * This requires the condition to only match one item in the array,\n   * and for the array to be ordered.\n   *\n   * @param list The array to search.\n   * @param comparisonFn\n   *      Called and provided a candidate item as the first argument.\n   *      Should return:\n   *          > -1 if the item should be located at a lower index than the provided item.\n   *          > 1 if the item should be located at a higher index than the provided item.\n   *          > 0 if the item is the item you're looking for.\n   *\n   * @returns the object if found, otherwise returns null\n   */\n  search: function(list, comparisonFn) {\n    let minIndex = 0;\n    let maxIndex = list.length - 1;\n    let currentIndex = null;\n    let currentElement = null;\n    while (minIndex <= maxIndex) {\n      currentIndex = (minIndex + maxIndex) / 2 | 0;\n      currentElement = list[currentIndex];\n      const comparisonResult = comparisonFn(currentElement);\n      if (comparisonResult > 0) {\n        minIndex = currentIndex + 1;\n      } else if (comparisonResult < 0) {\n        maxIndex = currentIndex - 1;\n      } else {\n        return currentElement;\n      }\n    }\n    return null;\n  }\n};\nfunction findFragmentByPDT(fragments, PDTValue, maxFragLookUpTolerance) {\n  if (PDTValue === null || !Array.isArray(fragments) || !fragments.length || !isFiniteNumber(PDTValue)) {\n    return null;\n  }\n  const startPDT = fragments[0].programDateTime;\n  if (PDTValue < (startPDT || 0)) {\n    return null;\n  }\n  const endPDT = fragments[fragments.length - 1].endProgramDateTime;\n  if (PDTValue >= (endPDT || 0)) {\n    return null;\n  }\n  maxFragLookUpTolerance = maxFragLookUpTolerance || 0;\n  for (let seg = 0; seg < fragments.length; ++seg) {\n    const frag = fragments[seg];\n    if (pdtWithinToleranceTest(PDTValue, maxFragLookUpTolerance, frag)) {\n      return frag;\n    }\n  }\n  return null;\n}\nfunction findFragmentByPTS(fragPrevious, fragments, bufferEnd = 0, maxFragLookUpTolerance = 0, nextFragLookupTolerance = 5e-3) {\n  let fragNext = null;\n  if (fragPrevious) {\n    fragNext = fragments[fragPrevious.sn - fragments[0].sn + 1] || null;\n    const bufferEdgeError = fragPrevious.endDTS - bufferEnd;\n    if (bufferEdgeError > 0 && bufferEdgeError < 15e-7) {\n      bufferEnd += 15e-7;\n    }\n  } else if (bufferEnd === 0 && fragments[0].start === 0) {\n    fragNext = fragments[0];\n  }\n  if (fragNext && ((!fragPrevious || fragPrevious.level === fragNext.level) && fragmentWithinToleranceTest(bufferEnd, maxFragLookUpTolerance, fragNext) === 0 || fragmentWithinFastStartSwitch(fragNext, fragPrevious, Math.min(nextFragLookupTolerance, maxFragLookUpTolerance)))) {\n    return fragNext;\n  }\n  const foundFragment = BinarySearch.search(fragments, fragmentWithinToleranceTest.bind(null, bufferEnd, maxFragLookUpTolerance));\n  if (foundFragment && (foundFragment !== fragPrevious || !fragNext)) {\n    return foundFragment;\n  }\n  return fragNext;\n}\nfunction fragmentWithinFastStartSwitch(fragNext, fragPrevious, nextFragLookupTolerance) {\n  if (fragPrevious && fragPrevious.start === 0 && fragPrevious.level < fragNext.level && (fragPrevious.endPTS || 0) > 0) {\n    const firstDuration = fragPrevious.tagList.reduce((duration, tag) => {\n      if (tag[0] === \"INF\") {\n        duration += parseFloat(tag[1]);\n      }\n      return duration;\n    }, nextFragLookupTolerance);\n    return fragNext.start <= firstDuration;\n  }\n  return false;\n}\nfunction fragmentWithinToleranceTest(bufferEnd = 0, maxFragLookUpTolerance = 0, candidate) {\n  if (candidate.start <= bufferEnd && candidate.start + candidate.duration > bufferEnd) {\n    return 0;\n  }\n  const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0));\n  if (candidate.start + candidate.duration - candidateLookupTolerance <= bufferEnd) {\n    return 1;\n  } else if (candidate.start - candidateLookupTolerance > bufferEnd && candidate.start) {\n    return -1;\n  }\n  return 0;\n}\nfunction pdtWithinToleranceTest(pdtBufferEnd, maxFragLookUpTolerance, candidate) {\n  const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0)) * 1e3;\n  const endProgramDateTime = candidate.endProgramDateTime || 0;\n  return endProgramDateTime - candidateLookupTolerance > pdtBufferEnd;\n}\nfunction findFragWithCC(fragments, cc) {\n  return BinarySearch.search(fragments, (candidate) => {\n    if (candidate.cc < cc) {\n      return 1;\n    } else if (candidate.cc > cc) {\n      return -1;\n    } else {\n      return 0;\n    }\n  });\n}\nvar NetworkErrorAction = {\n  DoNothing: 0,\n  SendEndCallback: 1,\n  SendAlternateToPenaltyBox: 2,\n  RemoveAlternatePermanently: 3,\n  InsertDiscontinuity: 4,\n  RetryRequest: 5\n};\nvar ErrorActionFlags = {\n  None: 0,\n  MoveAllAlternatesMatchingHost: 1,\n  MoveAllAlternatesMatchingHDCP: 2,\n  SwitchToSDR: 4\n};\nvar ErrorController = class {\n  constructor(hls) {\n    this.hls = void 0;\n    this.playlistError = 0;\n    this.penalizedRenditions = {};\n    this.log = void 0;\n    this.warn = void 0;\n    this.error = void 0;\n    this.hls = hls;\n    this.log = logger.log.bind(logger, `[info]:`);\n    this.warn = logger.warn.bind(logger, `[warning]:`);\n    this.error = logger.error.bind(logger, `[error]:`);\n    this.registerListeners();\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.ERROR, this.onErrorOut, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.hls = null;\n    this.penalizedRenditions = {};\n  }\n  startLoad(startPosition) {\n  }\n  stopLoad() {\n    this.playlistError = 0;\n  }\n  getVariantLevelIndex(frag) {\n    return (frag == null ? void 0 : frag.type) === PlaylistLevelType.MAIN ? frag.level : this.hls.loadLevel;\n  }\n  onManifestLoading() {\n    this.playlistError = 0;\n    this.penalizedRenditions = {};\n  }\n  onLevelUpdated() {\n    this.playlistError = 0;\n  }\n  onError(event, data) {\n    var _data$frag, _data$level;\n    if (data.fatal) {\n      return;\n    }\n    const hls = this.hls;\n    const context = data.context;\n    switch (data.details) {\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        data.errorAction = this.getFragRetryOrSwitchAction(data);\n        return;\n      case ErrorDetails.FRAG_PARSING_ERROR:\n        if ((_data$frag = data.frag) != null && _data$frag.gap) {\n          data.errorAction = {\n            action: NetworkErrorAction.DoNothing,\n            flags: ErrorActionFlags.None\n          };\n          return;\n        }\n      // falls through\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_DECRYPT_ERROR: {\n        data.errorAction = this.getFragRetryOrSwitchAction(data);\n        data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n        return;\n      }\n      case ErrorDetails.LEVEL_EMPTY_ERROR:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        {\n          var _data$context, _data$context$levelDe;\n          const levelIndex = data.parent === PlaylistLevelType.MAIN ? data.level : hls.loadLevel;\n          if (data.details === ErrorDetails.LEVEL_EMPTY_ERROR && !!((_data$context = data.context) != null && (_data$context$levelDe = _data$context.levelDetails) != null && _data$context$levelDe.live)) {\n            data.errorAction = this.getPlaylistRetryOrSwitchAction(data, levelIndex);\n          } else {\n            data.levelRetry = false;\n            data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n          }\n        }\n        return;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n        if (typeof (context == null ? void 0 : context.level) === \"number\") {\n          data.errorAction = this.getPlaylistRetryOrSwitchAction(data, context.level);\n        }\n        return;\n      case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n      case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n      case ErrorDetails.SUBTITLE_LOAD_ERROR:\n      case ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT:\n        if (context) {\n          const level = hls.levels[hls.loadLevel];\n          if (level && (context.type === PlaylistContextType.AUDIO_TRACK && level.hasAudioGroup(context.groupId) || context.type === PlaylistContextType.SUBTITLE_TRACK && level.hasSubtitleGroup(context.groupId))) {\n            data.errorAction = this.getPlaylistRetryOrSwitchAction(data, hls.loadLevel);\n            data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n            data.errorAction.flags = ErrorActionFlags.MoveAllAlternatesMatchingHost;\n            return;\n          }\n        }\n        return;\n      case ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:\n        {\n          const level = hls.levels[hls.loadLevel];\n          const restrictedHdcpLevel = level == null ? void 0 : level.attrs[\"HDCP-LEVEL\"];\n          if (restrictedHdcpLevel) {\n            data.errorAction = {\n              action: NetworkErrorAction.SendAlternateToPenaltyBox,\n              flags: ErrorActionFlags.MoveAllAlternatesMatchingHDCP,\n              hdcpLevel: restrictedHdcpLevel\n            };\n          } else {\n            this.keySystemError(data);\n          }\n        }\n        return;\n      case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n      case ErrorDetails.REMUX_ALLOC_ERROR:\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n        data.errorAction = this.getLevelSwitchAction(data, (_data$level = data.level) != null ? _data$level : hls.loadLevel);\n        return;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n      case ErrorDetails.BUFFER_APPENDING_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n      case ErrorDetails.LEVEL_SWITCH_ERROR:\n      case ErrorDetails.BUFFER_STALLED_ERROR:\n      case ErrorDetails.BUFFER_SEEK_OVER_HOLE:\n      case ErrorDetails.BUFFER_NUDGE_ON_STALL:\n        data.errorAction = {\n          action: NetworkErrorAction.DoNothing,\n          flags: ErrorActionFlags.None\n        };\n        return;\n    }\n    if (data.type === ErrorTypes.KEY_SYSTEM_ERROR) {\n      this.keySystemError(data);\n    }\n  }\n  keySystemError(data) {\n    const levelIndex = this.getVariantLevelIndex(data.frag);\n    data.levelRetry = false;\n    data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n  }\n  getPlaylistRetryOrSwitchAction(data, levelIndex) {\n    const hls = this.hls;\n    const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);\n    const retryCount = this.playlistError++;\n    const retry = shouldRetry(retryConfig, retryCount, isTimeoutError(data), data.response);\n    if (retry) {\n      return {\n        action: NetworkErrorAction.RetryRequest,\n        flags: ErrorActionFlags.None,\n        retryConfig,\n        retryCount\n      };\n    }\n    const errorAction = this.getLevelSwitchAction(data, levelIndex);\n    if (retryConfig) {\n      errorAction.retryConfig = retryConfig;\n      errorAction.retryCount = retryCount;\n    }\n    return errorAction;\n  }\n  getFragRetryOrSwitchAction(data) {\n    const hls = this.hls;\n    const variantLevelIndex = this.getVariantLevelIndex(data.frag);\n    const level = hls.levels[variantLevelIndex];\n    const {\n      fragLoadPolicy,\n      keyLoadPolicy\n    } = hls.config;\n    const retryConfig = getRetryConfig(data.details.startsWith(\"key\") ? keyLoadPolicy : fragLoadPolicy, data);\n    const fragmentErrors = hls.levels.reduce((acc, level2) => acc + level2.fragmentError, 0);\n    if (level) {\n      if (data.details !== ErrorDetails.FRAG_GAP) {\n        level.fragmentError++;\n      }\n      const retry = shouldRetry(retryConfig, fragmentErrors, isTimeoutError(data), data.response);\n      if (retry) {\n        return {\n          action: NetworkErrorAction.RetryRequest,\n          flags: ErrorActionFlags.None,\n          retryConfig,\n          retryCount: fragmentErrors\n        };\n      }\n    }\n    const errorAction = this.getLevelSwitchAction(data, variantLevelIndex);\n    if (retryConfig) {\n      errorAction.retryConfig = retryConfig;\n      errorAction.retryCount = fragmentErrors;\n    }\n    return errorAction;\n  }\n  getLevelSwitchAction(data, levelIndex) {\n    const hls = this.hls;\n    if (levelIndex === null || levelIndex === void 0) {\n      levelIndex = hls.loadLevel;\n    }\n    const level = this.hls.levels[levelIndex];\n    if (level) {\n      var _data$frag2, _data$context2;\n      const errorDetails = data.details;\n      level.loadError++;\n      if (errorDetails === ErrorDetails.BUFFER_APPEND_ERROR) {\n        level.fragmentError++;\n      }\n      let nextLevel = -1;\n      const {\n        levels,\n        loadLevel,\n        minAutoLevel,\n        maxAutoLevel\n      } = hls;\n      if (!hls.autoLevelEnabled) {\n        hls.loadLevel = -1;\n      }\n      const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;\n      const isAudioCodecError = fragErrorType === PlaylistLevelType.AUDIO && errorDetails === ErrorDetails.FRAG_PARSING_ERROR || data.sourceBufferName === \"audio\" && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n      const findAudioCodecAlternate = isAudioCodecError && levels.some(({\n        audioCodec\n      }) => level.audioCodec !== audioCodec);\n      const isVideoCodecError = data.sourceBufferName === \"video\" && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n      const findVideoCodecAlternate = isVideoCodecError && levels.some(({\n        codecSet,\n        audioCodec\n      }) => level.codecSet !== codecSet && level.audioCodec === audioCodec);\n      const {\n        type: playlistErrorType,\n        groupId: playlistErrorGroupId\n      } = (_data$context2 = data.context) != null ? _data$context2 : {};\n      for (let i2 = levels.length; i2--; ) {\n        const candidate = (i2 + loadLevel) % levels.length;\n        if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {\n          var _level$audioGroups, _level$subtitleGroups;\n          const levelCandidate = levels[candidate];\n          if (errorDetails === ErrorDetails.FRAG_GAP && fragErrorType === PlaylistLevelType.MAIN && data.frag) {\n            const levelDetails = levels[candidate].details;\n            if (levelDetails) {\n              const fragCandidate = findFragmentByPTS(data.frag, levelDetails.fragments, data.frag.start);\n              if (fragCandidate != null && fragCandidate.gap) {\n                continue;\n              }\n            }\n          } else if (playlistErrorType === PlaylistContextType.AUDIO_TRACK && levelCandidate.hasAudioGroup(playlistErrorGroupId) || playlistErrorType === PlaylistContextType.SUBTITLE_TRACK && levelCandidate.hasSubtitleGroup(playlistErrorGroupId)) {\n            continue;\n          } else if (fragErrorType === PlaylistLevelType.AUDIO && (_level$audioGroups = level.audioGroups) != null && _level$audioGroups.some((groupId) => levelCandidate.hasAudioGroup(groupId)) || fragErrorType === PlaylistLevelType.SUBTITLE && (_level$subtitleGroups = level.subtitleGroups) != null && _level$subtitleGroups.some((groupId) => levelCandidate.hasSubtitleGroup(groupId)) || findAudioCodecAlternate && level.audioCodec === levelCandidate.audioCodec || !findAudioCodecAlternate && level.audioCodec !== levelCandidate.audioCodec || findVideoCodecAlternate && level.codecSet === levelCandidate.codecSet) {\n            continue;\n          }\n          nextLevel = candidate;\n          break;\n        }\n      }\n      if (nextLevel > -1 && hls.loadLevel !== nextLevel) {\n        data.levelRetry = true;\n        this.playlistError = 0;\n        return {\n          action: NetworkErrorAction.SendAlternateToPenaltyBox,\n          flags: ErrorActionFlags.None,\n          nextAutoLevel: nextLevel\n        };\n      }\n    }\n    return {\n      action: NetworkErrorAction.SendAlternateToPenaltyBox,\n      flags: ErrorActionFlags.MoveAllAlternatesMatchingHost\n    };\n  }\n  onErrorOut(event, data) {\n    var _data$errorAction;\n    switch ((_data$errorAction = data.errorAction) == null ? void 0 : _data$errorAction.action) {\n      case NetworkErrorAction.DoNothing:\n        break;\n      case NetworkErrorAction.SendAlternateToPenaltyBox:\n        this.sendAlternateToPenaltyBox(data);\n        if (!data.errorAction.resolved && data.details !== ErrorDetails.FRAG_GAP) {\n          data.fatal = true;\n        } else if (/MediaSource readyState: ended/.test(data.error.message)) {\n          this.warn(`MediaSource ended after \"${data.sourceBufferName}\" sourceBuffer append error. Attempting to recover from media error.`);\n          this.hls.recoverMediaError();\n        }\n        break;\n      case NetworkErrorAction.RetryRequest:\n        break;\n    }\n    if (data.fatal) {\n      this.hls.stopLoad();\n      return;\n    }\n  }\n  sendAlternateToPenaltyBox(data) {\n    const hls = this.hls;\n    const errorAction = data.errorAction;\n    if (!errorAction) {\n      return;\n    }\n    const {\n      flags,\n      hdcpLevel,\n      nextAutoLevel\n    } = errorAction;\n    switch (flags) {\n      case ErrorActionFlags.None:\n        this.switchLevel(data, nextAutoLevel);\n        break;\n      case ErrorActionFlags.MoveAllAlternatesMatchingHDCP:\n        if (hdcpLevel) {\n          hls.maxHdcpLevel = HdcpLevels[HdcpLevels.indexOf(hdcpLevel) - 1];\n          errorAction.resolved = true;\n        }\n        this.warn(`Restricting playback to HDCP-LEVEL of \"${hls.maxHdcpLevel}\" or lower`);\n        break;\n    }\n    if (!errorAction.resolved) {\n      this.switchLevel(data, nextAutoLevel);\n    }\n  }\n  switchLevel(data, levelIndex) {\n    if (levelIndex !== void 0 && data.errorAction) {\n      this.warn(`switching to level ${levelIndex} after ${data.details}`);\n      this.hls.nextAutoLevel = levelIndex;\n      data.errorAction.resolved = true;\n      this.hls.nextLoadLevel = this.hls.nextAutoLevel;\n    }\n  }\n};\nvar BasePlaylistController = class {\n  constructor(hls, logPrefix) {\n    this.hls = void 0;\n    this.timer = -1;\n    this.requestScheduled = -1;\n    this.canLoad = false;\n    this.log = void 0;\n    this.warn = void 0;\n    this.log = logger.log.bind(logger, `${logPrefix}:`);\n    this.warn = logger.warn.bind(logger, `${logPrefix}:`);\n    this.hls = hls;\n  }\n  destroy() {\n    this.clearTimer();\n    this.hls = this.log = this.warn = null;\n  }\n  clearTimer() {\n    if (this.timer !== -1) {\n      self.clearTimeout(this.timer);\n      this.timer = -1;\n    }\n  }\n  startLoad() {\n    this.canLoad = true;\n    this.requestScheduled = -1;\n    this.loadPlaylist();\n  }\n  stopLoad() {\n    this.canLoad = false;\n    this.clearTimer();\n  }\n  switchParams(playlistUri, previous, current) {\n    const renditionReports = previous == null ? void 0 : previous.renditionReports;\n    if (renditionReports) {\n      let foundIndex = -1;\n      for (let i2 = 0; i2 < renditionReports.length; i2++) {\n        const attr = renditionReports[i2];\n        let uri;\n        try {\n          uri = new self.URL(attr.URI, previous.url).href;\n        } catch (error) {\n          logger.warn(`Could not construct new URL for Rendition Report: ${error}`);\n          uri = attr.URI || \"\";\n        }\n        if (uri === playlistUri) {\n          foundIndex = i2;\n          break;\n        } else if (uri === playlistUri.substring(0, uri.length)) {\n          foundIndex = i2;\n        }\n      }\n      if (foundIndex !== -1) {\n        const attr = renditionReports[foundIndex];\n        const msn = parseInt(attr[\"LAST-MSN\"]) || (previous == null ? void 0 : previous.lastPartSn);\n        let part = parseInt(attr[\"LAST-PART\"]) || (previous == null ? void 0 : previous.lastPartIndex);\n        if (this.hls.config.lowLatencyMode) {\n          const currentGoal = Math.min(previous.age - previous.partTarget, previous.targetduration);\n          if (part >= 0 && currentGoal > previous.partTarget) {\n            part += 1;\n          }\n        }\n        const skip = current && getSkipValue(current);\n        return new HlsUrlParameters(msn, part >= 0 ? part : void 0, skip);\n      }\n    }\n  }\n  loadPlaylist(hlsUrlParameters) {\n    if (this.requestScheduled === -1) {\n      this.requestScheduled = self.performance.now();\n    }\n  }\n  shouldLoadPlaylist(playlist) {\n    return this.canLoad && !!playlist && !!playlist.url && (!playlist.details || playlist.details.live);\n  }\n  shouldReloadPlaylist(playlist) {\n    return this.timer === -1 && this.requestScheduled === -1 && this.shouldLoadPlaylist(playlist);\n  }\n  playlistLoaded(index, data, previousDetails) {\n    const {\n      details,\n      stats\n    } = data;\n    const now2 = self.performance.now();\n    const elapsed = stats.loading.first ? Math.max(0, now2 - stats.loading.first) : 0;\n    details.advancedDateTime = Date.now() - elapsed;\n    if (details.live || previousDetails != null && previousDetails.live) {\n      details.reloaded(previousDetails);\n      if (previousDetails) {\n        this.log(`live playlist ${index} ${details.advanced ? \"REFRESHED \" + details.lastPartSn + \"-\" + details.lastPartIndex : details.updated ? \"UPDATED\" : \"MISSED\"}`);\n      }\n      if (previousDetails && details.fragments.length > 0) {\n        mergeDetails(previousDetails, details);\n      }\n      if (!this.canLoad || !details.live) {\n        return;\n      }\n      let deliveryDirectives;\n      let msn = void 0;\n      let part = void 0;\n      if (details.canBlockReload && details.endSN && details.advanced) {\n        const lowLatencyMode = this.hls.config.lowLatencyMode;\n        const lastPartSn = details.lastPartSn;\n        const endSn = details.endSN;\n        const lastPartIndex = details.lastPartIndex;\n        const hasParts = lastPartIndex !== -1;\n        const lastPart = lastPartSn === endSn;\n        const nextSnStartIndex = lowLatencyMode ? 0 : lastPartIndex;\n        if (hasParts) {\n          msn = lastPart ? endSn + 1 : lastPartSn;\n          part = lastPart ? nextSnStartIndex : lastPartIndex + 1;\n        } else {\n          msn = endSn + 1;\n        }\n        const lastAdvanced = details.age;\n        const cdnAge = lastAdvanced + details.ageHeader;\n        let currentGoal = Math.min(cdnAge - details.partTarget, details.targetduration * 1.5);\n        if (currentGoal > 0) {\n          if (previousDetails && currentGoal > previousDetails.tuneInGoal) {\n            this.warn(`CDN Tune-in goal increased from: ${previousDetails.tuneInGoal} to: ${currentGoal} with playlist age: ${details.age}`);\n            currentGoal = 0;\n          } else {\n            const segments = Math.floor(currentGoal / details.targetduration);\n            msn += segments;\n            if (part !== void 0) {\n              const parts = Math.round(currentGoal % details.targetduration / details.partTarget);\n              part += parts;\n            }\n            this.log(`CDN Tune-in age: ${details.ageHeader}s last advanced ${lastAdvanced.toFixed(2)}s goal: ${currentGoal} skip sn ${segments} to part ${part}`);\n          }\n          details.tuneInGoal = currentGoal;\n        }\n        deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n        if (lowLatencyMode || !lastPart) {\n          this.loadPlaylist(deliveryDirectives);\n          return;\n        }\n      } else if (details.canBlockReload || details.canSkipUntil) {\n        deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n      }\n      const bufferInfo = this.hls.mainForwardBufferInfo;\n      const position = bufferInfo ? bufferInfo.end - bufferInfo.len : 0;\n      const distanceToLiveEdgeMs = (details.edge - position) * 1e3;\n      const reloadInterval = computeReloadInterval(details, distanceToLiveEdgeMs);\n      if (details.updated && now2 > this.requestScheduled + reloadInterval) {\n        this.requestScheduled = stats.loading.start;\n      }\n      if (msn !== void 0 && details.canBlockReload) {\n        this.requestScheduled = stats.loading.first + reloadInterval - (details.partTarget * 1e3 || 1e3);\n      } else if (this.requestScheduled === -1 || this.requestScheduled + reloadInterval < now2) {\n        this.requestScheduled = now2;\n      } else if (this.requestScheduled - now2 <= 0) {\n        this.requestScheduled += reloadInterval;\n      }\n      let estimatedTimeUntilUpdate = this.requestScheduled - now2;\n      estimatedTimeUntilUpdate = Math.max(0, estimatedTimeUntilUpdate);\n      this.log(`reload live playlist ${index} in ${Math.round(estimatedTimeUntilUpdate)} ms`);\n      this.timer = self.setTimeout(() => this.loadPlaylist(deliveryDirectives), estimatedTimeUntilUpdate);\n    } else {\n      this.clearTimer();\n    }\n  }\n  getDeliveryDirectives(details, previousDeliveryDirectives, msn, part) {\n    let skip = getSkipValue(details);\n    if (previousDeliveryDirectives != null && previousDeliveryDirectives.skip && details.deltaUpdateFailed) {\n      msn = previousDeliveryDirectives.msn;\n      part = previousDeliveryDirectives.part;\n      skip = HlsSkip.No;\n    }\n    return new HlsUrlParameters(msn, part, skip);\n  }\n  checkRetry(errorEvent) {\n    const errorDetails = errorEvent.details;\n    const isTimeout = isTimeoutError(errorEvent);\n    const errorAction = errorEvent.errorAction;\n    const {\n      action,\n      retryCount = 0,\n      retryConfig\n    } = errorAction || {};\n    const retry = !!errorAction && !!retryConfig && (action === NetworkErrorAction.RetryRequest || !errorAction.resolved && action === NetworkErrorAction.SendAlternateToPenaltyBox);\n    if (retry) {\n      var _errorEvent$context;\n      this.requestScheduled = -1;\n      if (retryCount >= retryConfig.maxNumRetry) {\n        return false;\n      }\n      if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {\n        this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" without delivery-directives`);\n        this.loadPlaylist();\n      } else {\n        const delay2 = getRetryDelay(retryConfig, retryCount);\n        this.timer = self.setTimeout(() => this.loadPlaylist(), delay2);\n        this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" in ${delay2}ms`);\n      }\n      errorEvent.levelRetry = true;\n      errorAction.resolved = true;\n    }\n    return retry;\n  }\n};\nvar EWMA = class {\n  //  About half of the estimated value will be from the last |halfLife| samples by weight.\n  constructor(halfLife, estimate = 0, weight = 0) {\n    this.halfLife = void 0;\n    this.alpha_ = void 0;\n    this.estimate_ = void 0;\n    this.totalWeight_ = void 0;\n    this.halfLife = halfLife;\n    this.alpha_ = halfLife ? Math.exp(Math.log(0.5) / halfLife) : 0;\n    this.estimate_ = estimate;\n    this.totalWeight_ = weight;\n  }\n  sample(weight, value) {\n    const adjAlpha = Math.pow(this.alpha_, weight);\n    this.estimate_ = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n    this.totalWeight_ += weight;\n  }\n  getTotalWeight() {\n    return this.totalWeight_;\n  }\n  getEstimate() {\n    if (this.alpha_) {\n      const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n      if (zeroFactor) {\n        return this.estimate_ / zeroFactor;\n      }\n    }\n    return this.estimate_;\n  }\n};\nvar EwmaBandWidthEstimator = class {\n  constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {\n    this.defaultEstimate_ = void 0;\n    this.minWeight_ = void 0;\n    this.minDelayMs_ = void 0;\n    this.slow_ = void 0;\n    this.fast_ = void 0;\n    this.defaultTTFB_ = void 0;\n    this.ttfb_ = void 0;\n    this.defaultEstimate_ = defaultEstimate;\n    this.minWeight_ = 1e-3;\n    this.minDelayMs_ = 50;\n    this.slow_ = new EWMA(slow);\n    this.fast_ = new EWMA(fast);\n    this.defaultTTFB_ = defaultTTFB;\n    this.ttfb_ = new EWMA(slow);\n  }\n  update(slow, fast) {\n    const {\n      slow_,\n      fast_,\n      ttfb_\n    } = this;\n    if (slow_.halfLife !== slow) {\n      this.slow_ = new EWMA(slow, slow_.getEstimate(), slow_.getTotalWeight());\n    }\n    if (fast_.halfLife !== fast) {\n      this.fast_ = new EWMA(fast, fast_.getEstimate(), fast_.getTotalWeight());\n    }\n    if (ttfb_.halfLife !== slow) {\n      this.ttfb_ = new EWMA(slow, ttfb_.getEstimate(), ttfb_.getTotalWeight());\n    }\n  }\n  sample(durationMs, numBytes) {\n    durationMs = Math.max(durationMs, this.minDelayMs_);\n    const numBits = 8 * numBytes;\n    const durationS = durationMs / 1e3;\n    const bandwidthInBps = numBits / durationS;\n    this.fast_.sample(durationS, bandwidthInBps);\n    this.slow_.sample(durationS, bandwidthInBps);\n  }\n  sampleTTFB(ttfb) {\n    const seconds = ttfb / 1e3;\n    const weight = Math.sqrt(2) * Math.exp(-Math.pow(seconds, 2) / 2);\n    this.ttfb_.sample(weight, Math.max(ttfb, 5));\n  }\n  canEstimate() {\n    return this.fast_.getTotalWeight() >= this.minWeight_;\n  }\n  getEstimate() {\n    if (this.canEstimate()) {\n      return Math.min(this.fast_.getEstimate(), this.slow_.getEstimate());\n    } else {\n      return this.defaultEstimate_;\n    }\n  }\n  getEstimateTTFB() {\n    if (this.ttfb_.getTotalWeight() >= this.minWeight_) {\n      return this.ttfb_.getEstimate();\n    } else {\n      return this.defaultTTFB_;\n    }\n  }\n  destroy() {\n  }\n};\nvar SUPPORTED_INFO_DEFAULT = {\n  supported: true,\n  configurations: [],\n  decodingInfoResults: [{\n    supported: true,\n    powerEfficient: true,\n    smooth: true\n  }]\n};\nvar SUPPORTED_INFO_CACHE = {};\nfunction requiresMediaCapabilitiesDecodingInfo(level, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference) {\n  const audioGroups = level.audioCodec ? level.audioGroups : null;\n  const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n  const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n  const maxChannels = channelsPreference ? parseInt(channelsPreference) : audioCodecPreference ? Infinity : 2;\n  let audioChannels = null;\n  if (audioGroups != null && audioGroups.length) {\n    try {\n      if (audioGroups.length === 1 && audioGroups[0]) {\n        audioChannels = audioTracksByGroup.groups[audioGroups[0]].channels;\n      } else {\n        audioChannels = audioGroups.reduce((acc, groupId) => {\n          if (groupId) {\n            const audioTrackGroup = audioTracksByGroup.groups[groupId];\n            if (!audioTrackGroup) {\n              throw new Error(`Audio track group ${groupId} not found`);\n            }\n            Object.keys(audioTrackGroup.channels).forEach((key) => {\n              acc[key] = (acc[key] || 0) + audioTrackGroup.channels[key];\n            });\n          }\n          return acc;\n        }, {\n          2: 0\n        });\n      }\n    } catch (error) {\n      return true;\n    }\n  }\n  return level.videoCodec !== void 0 && (level.width > 1920 && level.height > 1088 || level.height > 1920 && level.width > 1088 || level.frameRate > Math.max(currentFrameRate, 30) || level.videoRange !== \"SDR\" && level.videoRange !== currentVideoRange || level.bitrate > Math.max(currentBw, 8e6)) || !!audioChannels && isFiniteNumber(maxChannels) && Object.keys(audioChannels).some((channels) => parseInt(channels) > maxChannels);\n}\nfunction getMediaDecodingInfoPromise(level, audioTracksByGroup, mediaCapabilities) {\n  const videoCodecs = level.videoCodec;\n  const audioCodecs = level.audioCodec;\n  if (!videoCodecs || !audioCodecs || !mediaCapabilities) {\n    return Promise.resolve(SUPPORTED_INFO_DEFAULT);\n  }\n  const baseVideoConfiguration = {\n    width: level.width,\n    height: level.height,\n    bitrate: Math.ceil(Math.max(level.bitrate * 0.9, level.averageBitrate)),\n    // Assume a framerate of 30fps since MediaCapabilities will not accept Level default of 0.\n    framerate: level.frameRate || 30\n  };\n  const videoRange = level.videoRange;\n  if (videoRange !== \"SDR\") {\n    baseVideoConfiguration.transferFunction = videoRange.toLowerCase();\n  }\n  const configurations = videoCodecs.split(\",\").map((videoCodec) => ({\n    type: \"media-source\",\n    video: _objectSpread2(_objectSpread2({}, baseVideoConfiguration), {}, {\n      contentType: mimeTypeForCodec(videoCodec, \"video\")\n    })\n  }));\n  if (audioCodecs && level.audioGroups) {\n    level.audioGroups.forEach((audioGroupId) => {\n      var _audioTracksByGroup$g;\n      if (!audioGroupId) {\n        return;\n      }\n      (_audioTracksByGroup$g = audioTracksByGroup.groups[audioGroupId]) == null ? void 0 : _audioTracksByGroup$g.tracks.forEach((audioTrack) => {\n        if (audioTrack.groupId === audioGroupId) {\n          const channels = audioTrack.channels || \"\";\n          const channelsNumber = parseFloat(channels);\n          if (isFiniteNumber(channelsNumber) && channelsNumber > 2) {\n            configurations.push.apply(configurations, audioCodecs.split(\",\").map((audioCodec) => ({\n              type: \"media-source\",\n              audio: {\n                contentType: mimeTypeForCodec(audioCodec, \"audio\"),\n                channels: \"\" + channelsNumber\n                // spatialRendering:\n                //   audioCodec === 'ec-3' && channels.indexOf('JOC'),\n              }\n            })));\n          }\n        }\n      });\n    });\n  }\n  return Promise.all(configurations.map((configuration) => {\n    const decodingInfoKey = getMediaDecodingInfoKey(configuration);\n    return SUPPORTED_INFO_CACHE[decodingInfoKey] || (SUPPORTED_INFO_CACHE[decodingInfoKey] = mediaCapabilities.decodingInfo(configuration));\n  })).then((decodingInfoResults) => ({\n    supported: !decodingInfoResults.some((info) => !info.supported),\n    configurations,\n    decodingInfoResults\n  })).catch((error) => ({\n    supported: false,\n    configurations,\n    decodingInfoResults: [],\n    error\n  }));\n}\nfunction getMediaDecodingInfoKey(config) {\n  const {\n    audio,\n    video\n  } = config;\n  const mediaConfig = video || audio;\n  if (mediaConfig) {\n    const codec = mediaConfig.contentType.split('\"')[1];\n    if (video) {\n      return `r${video.height}x${video.width}f${Math.ceil(video.framerate)}${video.transferFunction || \"sd\"}_${codec}_${Math.ceil(video.bitrate / 1e5)}`;\n    }\n    if (audio) {\n      return `c${audio.channels}${audio.spatialRendering ? \"s\" : \"n\"}_${codec}`;\n    }\n  }\n  return \"\";\n}\nfunction isHdrSupported() {\n  if (typeof matchMedia === \"function\") {\n    const mediaQueryList = matchMedia(\"(dynamic-range: high)\");\n    const badQuery = matchMedia(\"bad query\");\n    if (mediaQueryList.media !== badQuery.media) {\n      return mediaQueryList.matches === true;\n    }\n  }\n  return false;\n}\nfunction getVideoSelectionOptions(currentVideoRange, videoPreference) {\n  let preferHDR = false;\n  let allowedVideoRanges = [];\n  if (currentVideoRange) {\n    preferHDR = currentVideoRange !== \"SDR\";\n    allowedVideoRanges = [currentVideoRange];\n  }\n  if (videoPreference) {\n    allowedVideoRanges = videoPreference.allowedVideoRanges || VideoRangeValues.slice(0);\n    preferHDR = videoPreference.preferHDR !== void 0 ? videoPreference.preferHDR : isHdrSupported();\n    if (preferHDR) {\n      allowedVideoRanges = allowedVideoRanges.filter((range) => range !== \"SDR\");\n    } else {\n      allowedVideoRanges = [\"SDR\"];\n    }\n  }\n  return {\n    preferHDR,\n    allowedVideoRanges\n  };\n}\nfunction getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference) {\n  const codecSets = Object.keys(codecTiers);\n  const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n  const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n  const preferStereo = channelsPreference && parseInt(channelsPreference) === 2;\n  let hasStereo = true;\n  let hasCurrentVideoRange = false;\n  let minHeight = Infinity;\n  let minFramerate = Infinity;\n  let minBitrate = Infinity;\n  let selectedScore = 0;\n  let videoRanges = [];\n  const {\n    preferHDR,\n    allowedVideoRanges\n  } = getVideoSelectionOptions(currentVideoRange, videoPreference);\n  for (let i2 = codecSets.length; i2--; ) {\n    const tier = codecTiers[codecSets[i2]];\n    hasStereo = tier.channels[2] > 0;\n    minHeight = Math.min(minHeight, tier.minHeight);\n    minFramerate = Math.min(minFramerate, tier.minFramerate);\n    minBitrate = Math.min(minBitrate, tier.minBitrate);\n    const matchingVideoRanges = allowedVideoRanges.filter((range) => tier.videoRanges[range] > 0);\n    if (matchingVideoRanges.length > 0) {\n      hasCurrentVideoRange = true;\n      videoRanges = matchingVideoRanges;\n    }\n  }\n  minHeight = isFiniteNumber(minHeight) ? minHeight : 0;\n  minFramerate = isFiniteNumber(minFramerate) ? minFramerate : 0;\n  const maxHeight = Math.max(1080, minHeight);\n  const maxFramerate = Math.max(30, minFramerate);\n  minBitrate = isFiniteNumber(minBitrate) ? minBitrate : currentBw;\n  currentBw = Math.max(minBitrate, currentBw);\n  if (!hasCurrentVideoRange) {\n    currentVideoRange = void 0;\n    videoRanges = [];\n  }\n  const codecSet = codecSets.reduce((selected, candidate) => {\n    const candidateTier = codecTiers[candidate];\n    if (candidate === selected) {\n      return selected;\n    }\n    if (candidateTier.minBitrate > currentBw) {\n      logStartCodecCandidateIgnored(candidate, `min bitrate of ${candidateTier.minBitrate} > current estimate of ${currentBw}`);\n      return selected;\n    }\n    if (!candidateTier.hasDefaultAudio) {\n      logStartCodecCandidateIgnored(candidate, `no renditions with default or auto-select sound found`);\n      return selected;\n    }\n    if (audioCodecPreference && candidate.indexOf(audioCodecPreference.substring(0, 4)) % 5 !== 0) {\n      logStartCodecCandidateIgnored(candidate, `audio codec preference \"${audioCodecPreference}\" not found`);\n      return selected;\n    }\n    if (channelsPreference && !preferStereo) {\n      if (!candidateTier.channels[channelsPreference]) {\n        logStartCodecCandidateIgnored(candidate, `no renditions with ${channelsPreference} channel sound found (channels options: ${Object.keys(candidateTier.channels)})`);\n        return selected;\n      }\n    } else if ((!audioCodecPreference || preferStereo) && hasStereo && candidateTier.channels[\"2\"] === 0) {\n      logStartCodecCandidateIgnored(candidate, `no renditions with stereo sound found`);\n      return selected;\n    }\n    if (candidateTier.minHeight > maxHeight) {\n      logStartCodecCandidateIgnored(candidate, `min resolution of ${candidateTier.minHeight} > maximum of ${maxHeight}`);\n      return selected;\n    }\n    if (candidateTier.minFramerate > maxFramerate) {\n      logStartCodecCandidateIgnored(candidate, `min framerate of ${candidateTier.minFramerate} > maximum of ${maxFramerate}`);\n      return selected;\n    }\n    if (!videoRanges.some((range) => candidateTier.videoRanges[range] > 0)) {\n      logStartCodecCandidateIgnored(candidate, `no variants with VIDEO-RANGE of ${JSON.stringify(videoRanges)} found`);\n      return selected;\n    }\n    if (candidateTier.maxScore < selectedScore) {\n      logStartCodecCandidateIgnored(candidate, `max score of ${candidateTier.maxScore} < selected max of ${selectedScore}`);\n      return selected;\n    }\n    if (selected && (codecsSetSelectionPreferenceValue(candidate) >= codecsSetSelectionPreferenceValue(selected) || candidateTier.fragmentError > codecTiers[selected].fragmentError)) {\n      return selected;\n    }\n    selectedScore = candidateTier.maxScore;\n    return candidate;\n  }, void 0);\n  return {\n    codecSet,\n    videoRanges,\n    preferHDR,\n    minFramerate,\n    minBitrate\n  };\n}\nfunction logStartCodecCandidateIgnored(codeSet, reason) {\n  logger.log(`[abr] start candidates with \"${codeSet}\" ignored because ${reason}`);\n}\nfunction getAudioTracksByGroup(allAudioTracks) {\n  return allAudioTracks.reduce((audioTracksByGroup, track) => {\n    let trackGroup = audioTracksByGroup.groups[track.groupId];\n    if (!trackGroup) {\n      trackGroup = audioTracksByGroup.groups[track.groupId] = {\n        tracks: [],\n        channels: {\n          2: 0\n        },\n        hasDefault: false,\n        hasAutoSelect: false\n      };\n    }\n    trackGroup.tracks.push(track);\n    const channelsKey = track.channels || \"2\";\n    trackGroup.channels[channelsKey] = (trackGroup.channels[channelsKey] || 0) + 1;\n    trackGroup.hasDefault = trackGroup.hasDefault || track.default;\n    trackGroup.hasAutoSelect = trackGroup.hasAutoSelect || track.autoselect;\n    if (trackGroup.hasDefault) {\n      audioTracksByGroup.hasDefaultAudio = true;\n    }\n    if (trackGroup.hasAutoSelect) {\n      audioTracksByGroup.hasAutoSelectAudio = true;\n    }\n    return audioTracksByGroup;\n  }, {\n    hasDefaultAudio: false,\n    hasAutoSelectAudio: false,\n    groups: {}\n  });\n}\nfunction getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel) {\n  return levels.slice(minAutoLevel, maxAutoLevel + 1).reduce((tiers, level) => {\n    if (!level.codecSet) {\n      return tiers;\n    }\n    const audioGroups = level.audioGroups;\n    let tier = tiers[level.codecSet];\n    if (!tier) {\n      tiers[level.codecSet] = tier = {\n        minBitrate: Infinity,\n        minHeight: Infinity,\n        minFramerate: Infinity,\n        maxScore: 0,\n        videoRanges: {\n          SDR: 0\n        },\n        channels: {\n          \"2\": 0\n        },\n        hasDefaultAudio: !audioGroups,\n        fragmentError: 0\n      };\n    }\n    tier.minBitrate = Math.min(tier.minBitrate, level.bitrate);\n    const lesserWidthOrHeight = Math.min(level.height, level.width);\n    tier.minHeight = Math.min(tier.minHeight, lesserWidthOrHeight);\n    tier.minFramerate = Math.min(tier.minFramerate, level.frameRate);\n    tier.maxScore = Math.max(tier.maxScore, level.score);\n    tier.fragmentError += level.fragmentError;\n    tier.videoRanges[level.videoRange] = (tier.videoRanges[level.videoRange] || 0) + 1;\n    if (audioGroups) {\n      audioGroups.forEach((audioGroupId) => {\n        if (!audioGroupId) {\n          return;\n        }\n        const audioGroup = audioTracksByGroup.groups[audioGroupId];\n        if (!audioGroup) {\n          return;\n        }\n        tier.hasDefaultAudio = tier.hasDefaultAudio || audioTracksByGroup.hasDefaultAudio ? audioGroup.hasDefault : audioGroup.hasAutoSelect || !audioTracksByGroup.hasDefaultAudio && !audioTracksByGroup.hasAutoSelectAudio;\n        Object.keys(audioGroup.channels).forEach((channels) => {\n          tier.channels[channels] = (tier.channels[channels] || 0) + audioGroup.channels[channels];\n        });\n      });\n    }\n    return tiers;\n  }, {});\n}\nfunction findMatchingOption(option, tracks, matchPredicate) {\n  if (\"attrs\" in option) {\n    const index = tracks.indexOf(option);\n    if (index !== -1) {\n      return index;\n    }\n  }\n  for (let i2 = 0; i2 < tracks.length; i2++) {\n    const track = tracks[i2];\n    if (matchesOption(option, track, matchPredicate)) {\n      return i2;\n    }\n  }\n  return -1;\n}\nfunction matchesOption(option, track, matchPredicate) {\n  const {\n    groupId,\n    name,\n    lang,\n    assocLang,\n    default: isDefault\n  } = option;\n  const forced = option.forced;\n  return (groupId === void 0 || track.groupId === groupId) && (name === void 0 || track.name === name) && (lang === void 0 || track.lang === lang) && (lang === void 0 || track.assocLang === assocLang) && (isDefault === void 0 || track.default === isDefault) && (forced === void 0 || track.forced === forced) && (!(\"characteristics\" in option) || characteristicsMatch(option.characteristics || \"\", track.characteristics)) && (matchPredicate === void 0 || matchPredicate(option, track));\n}\nfunction characteristicsMatch(characteristicsA, characteristicsB = \"\") {\n  const arrA = characteristicsA.split(\",\");\n  const arrB = characteristicsB.split(\",\");\n  return arrA.length === arrB.length && !arrA.some((el) => arrB.indexOf(el) === -1);\n}\nfunction audioMatchPredicate(option, track) {\n  const {\n    audioCodec,\n    channels\n  } = option;\n  return (audioCodec === void 0 || (track.audioCodec || \"\").substring(0, 4) === audioCodec.substring(0, 4)) && (channels === void 0 || channels === (track.channels || \"2\"));\n}\nfunction findClosestLevelWithAudioGroup(option, levels, allAudioTracks, searchIndex, matchPredicate) {\n  const currentLevel = levels[searchIndex];\n  const variants = levels.reduce((variantMap, level, index) => {\n    const uri = level.uri;\n    const renditions2 = variantMap[uri] || (variantMap[uri] = []);\n    renditions2.push(index);\n    return variantMap;\n  }, {});\n  const renditions = variants[currentLevel.uri];\n  if (renditions.length > 1) {\n    searchIndex = Math.max.apply(Math, renditions);\n  }\n  const currentVideoRange = currentLevel.videoRange;\n  const currentFrameRate = currentLevel.frameRate;\n  const currentVideoCodec = currentLevel.codecSet.substring(0, 4);\n  const matchingVideo = searchDownAndUpList(levels, searchIndex, (level) => {\n    if (level.videoRange !== currentVideoRange || level.frameRate !== currentFrameRate || level.codecSet.substring(0, 4) !== currentVideoCodec) {\n      return false;\n    }\n    const audioGroups = level.audioGroups;\n    const tracks = allAudioTracks.filter((track) => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n    return findMatchingOption(option, tracks, matchPredicate) > -1;\n  });\n  if (matchingVideo > -1) {\n    return matchingVideo;\n  }\n  return searchDownAndUpList(levels, searchIndex, (level) => {\n    const audioGroups = level.audioGroups;\n    const tracks = allAudioTracks.filter((track) => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n    return findMatchingOption(option, tracks, matchPredicate) > -1;\n  });\n}\nfunction searchDownAndUpList(arr, searchIndex, predicate) {\n  for (let i2 = searchIndex; i2 > -1; i2--) {\n    if (predicate(arr[i2])) {\n      return i2;\n    }\n  }\n  for (let i2 = searchIndex + 1; i2 < arr.length; i2++) {\n    if (predicate(arr[i2])) {\n      return i2;\n    }\n  }\n  return -1;\n}\nvar AbrController = class {\n  constructor(_hls) {\n    this.hls = void 0;\n    this.lastLevelLoadSec = 0;\n    this.lastLoadedFragLevel = -1;\n    this.firstSelection = -1;\n    this._nextAutoLevel = -1;\n    this.nextAutoLevelKey = \"\";\n    this.audioTracksByGroup = null;\n    this.codecTiers = null;\n    this.timer = -1;\n    this.fragCurrent = null;\n    this.partCurrent = null;\n    this.bitrateTestDelay = 0;\n    this.bwEstimator = void 0;\n    this._abandonRulesCheck = () => {\n      const {\n        fragCurrent: frag,\n        partCurrent: part,\n        hls\n      } = this;\n      const {\n        autoLevelEnabled,\n        media\n      } = hls;\n      if (!frag || !media) {\n        return;\n      }\n      const now2 = performance.now();\n      const stats = part ? part.stats : frag.stats;\n      const duration = part ? part.duration : frag.duration;\n      const timeLoading = now2 - stats.loading.start;\n      const minAutoLevel = hls.minAutoLevel;\n      if (stats.aborted || stats.loaded && stats.loaded === stats.total || frag.level <= minAutoLevel) {\n        this.clearTimer();\n        this._nextAutoLevel = -1;\n        return;\n      }\n      if (!autoLevelEnabled || media.paused || !media.playbackRate || !media.readyState) {\n        return;\n      }\n      const bufferInfo = hls.mainForwardBufferInfo;\n      if (bufferInfo === null) {\n        return;\n      }\n      const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n      const playbackRate = Math.abs(media.playbackRate);\n      if (timeLoading <= Math.max(ttfbEstimate, 1e3 * (duration / (playbackRate * 2)))) {\n        return;\n      }\n      const bufferStarvationDelay = bufferInfo.len / playbackRate;\n      const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n      const loadedFirstByte = stats.loaded && ttfb > -1;\n      const bwEstimate = this.getBwEstimate();\n      const levels = hls.levels;\n      const level = levels[frag.level];\n      const expectedLen = stats.total || Math.max(stats.loaded, Math.round(duration * level.averageBitrate / 8));\n      let timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;\n      if (timeStreaming < 1 && loadedFirstByte) {\n        timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);\n      }\n      const loadRate = loadedFirstByte ? stats.loaded * 1e3 / timeStreaming : 0;\n      const fragLoadedDelay = loadRate ? (expectedLen - stats.loaded) / loadRate : expectedLen * 8 / bwEstimate + ttfbEstimate / 1e3;\n      if (fragLoadedDelay <= bufferStarvationDelay) {\n        return;\n      }\n      const bwe = loadRate ? loadRate * 8 : bwEstimate;\n      let fragLevelNextLoadedDelay = Number.POSITIVE_INFINITY;\n      let nextLoadLevel;\n      for (nextLoadLevel = frag.level - 1; nextLoadLevel > minAutoLevel; nextLoadLevel--) {\n        const levelNextBitrate = levels[nextLoadLevel].maxBitrate;\n        fragLevelNextLoadedDelay = this.getTimeToLoadFrag(ttfbEstimate / 1e3, bwe, duration * levelNextBitrate, !levels[nextLoadLevel].details);\n        if (fragLevelNextLoadedDelay < bufferStarvationDelay) {\n          break;\n        }\n      }\n      if (fragLevelNextLoadedDelay >= fragLoadedDelay) {\n        return;\n      }\n      if (fragLevelNextLoadedDelay > duration * 10) {\n        return;\n      }\n      hls.nextLoadLevel = hls.nextAutoLevel = nextLoadLevel;\n      if (loadedFirstByte) {\n        this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n      } else {\n        this.bwEstimator.sampleTTFB(timeLoading);\n      }\n      const nextLoadLevelBitrate = levels[nextLoadLevel].maxBitrate;\n      if (this.getBwEstimate() * this.hls.config.abrBandWidthUpFactor > nextLoadLevelBitrate) {\n        this.resetEstimator(nextLoadLevelBitrate);\n      }\n      this.clearTimer();\n      logger.warn(`[abr] Fragment ${frag.sn}${part ? \" part \" + part.index : \"\"} of level ${frag.level} is loading too slowly;\n      Time to underbuffer: ${bufferStarvationDelay.toFixed(3)} s\n      Estimated load time for current fragment: ${fragLoadedDelay.toFixed(3)} s\n      Estimated load time for down switch fragment: ${fragLevelNextLoadedDelay.toFixed(3)} s\n      TTFB estimate: ${ttfb | 0} ms\n      Current BW estimate: ${isFiniteNumber(bwEstimate) ? bwEstimate | 0 : \"Unknown\"} bps\n      New BW estimate: ${this.getBwEstimate() | 0} bps\n      Switching to level ${nextLoadLevel} @ ${nextLoadLevelBitrate | 0} bps`);\n      hls.trigger(Events.FRAG_LOAD_EMERGENCY_ABORTED, {\n        frag,\n        part,\n        stats\n      });\n    };\n    this.hls = _hls;\n    this.bwEstimator = this.initEstimator();\n    this.registerListeners();\n  }\n  resetEstimator(abrEwmaDefaultEstimate) {\n    if (abrEwmaDefaultEstimate) {\n      logger.log(`setting initial bwe to ${abrEwmaDefaultEstimate}`);\n      this.hls.config.abrEwmaDefaultEstimate = abrEwmaDefaultEstimate;\n    }\n    this.firstSelection = -1;\n    this.bwEstimator = this.initEstimator();\n  }\n  initEstimator() {\n    const config = this.hls.config;\n    return new EwmaBandWidthEstimator(config.abrEwmaSlowVoD, config.abrEwmaFastVoD, config.abrEwmaDefaultEstimate);\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.clearTimer();\n    this.hls = this._abandonRulesCheck = null;\n    this.fragCurrent = this.partCurrent = null;\n  }\n  onManifestLoading(event, data) {\n    this.lastLoadedFragLevel = -1;\n    this.firstSelection = -1;\n    this.lastLevelLoadSec = 0;\n    this.fragCurrent = this.partCurrent = null;\n    this.onLevelsUpdated();\n    this.clearTimer();\n  }\n  onLevelsUpdated() {\n    if (this.lastLoadedFragLevel > -1 && this.fragCurrent) {\n      this.lastLoadedFragLevel = this.fragCurrent.level;\n    }\n    this._nextAutoLevel = -1;\n    this.onMaxAutoLevelUpdated();\n    this.codecTiers = null;\n    this.audioTracksByGroup = null;\n  }\n  onMaxAutoLevelUpdated() {\n    this.firstSelection = -1;\n    this.nextAutoLevelKey = \"\";\n  }\n  onFragLoading(event, data) {\n    const frag = data.frag;\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    if (!frag.bitrateTest) {\n      var _data$part;\n      this.fragCurrent = frag;\n      this.partCurrent = (_data$part = data.part) != null ? _data$part : null;\n    }\n    this.clearTimer();\n    this.timer = self.setInterval(this._abandonRulesCheck, 100);\n  }\n  onLevelSwitching(event, data) {\n    this.clearTimer();\n  }\n  onError(event, data) {\n    if (data.fatal) {\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n        this.lastLoadedFragLevel = -1;\n        this.firstSelection = -1;\n        break;\n      case ErrorDetails.FRAG_LOAD_TIMEOUT: {\n        const frag = data.frag;\n        const {\n          fragCurrent,\n          partCurrent: part\n        } = this;\n        if (frag && fragCurrent && frag.sn === fragCurrent.sn && frag.level === fragCurrent.level) {\n          const now2 = performance.now();\n          const stats = part ? part.stats : frag.stats;\n          const timeLoading = now2 - stats.loading.start;\n          const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n          const loadedFirstByte = stats.loaded && ttfb > -1;\n          if (loadedFirstByte) {\n            const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n            this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n          } else {\n            this.bwEstimator.sampleTTFB(timeLoading);\n          }\n        }\n        break;\n      }\n    }\n  }\n  getTimeToLoadFrag(timeToFirstByteSec, bandwidth, fragSizeBits, isSwitch) {\n    const fragLoadSec = timeToFirstByteSec + fragSizeBits / bandwidth;\n    const playlistLoadSec = isSwitch ? this.lastLevelLoadSec : 0;\n    return fragLoadSec + playlistLoadSec;\n  }\n  onLevelLoaded(event, data) {\n    const config = this.hls.config;\n    const {\n      loading\n    } = data.stats;\n    const timeLoadingMs = loading.end - loading.start;\n    if (isFiniteNumber(timeLoadingMs)) {\n      this.lastLevelLoadSec = timeLoadingMs / 1e3;\n    }\n    if (data.details.live) {\n      this.bwEstimator.update(config.abrEwmaSlowLive, config.abrEwmaFastLive);\n    } else {\n      this.bwEstimator.update(config.abrEwmaSlowVoD, config.abrEwmaFastVoD);\n    }\n  }\n  onFragLoaded(event, {\n    frag,\n    part\n  }) {\n    const stats = part ? part.stats : frag.stats;\n    if (frag.type === PlaylistLevelType.MAIN) {\n      this.bwEstimator.sampleTTFB(stats.loading.first - stats.loading.start);\n    }\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    this.clearTimer();\n    if (frag.level === this._nextAutoLevel) {\n      this._nextAutoLevel = -1;\n    }\n    this.firstSelection = -1;\n    if (this.hls.config.abrMaxWithRealBitrate) {\n      const duration = part ? part.duration : frag.duration;\n      const level = this.hls.levels[frag.level];\n      const loadedBytes = (level.loaded ? level.loaded.bytes : 0) + stats.loaded;\n      const loadedDuration = (level.loaded ? level.loaded.duration : 0) + duration;\n      level.loaded = {\n        bytes: loadedBytes,\n        duration: loadedDuration\n      };\n      level.realBitrate = Math.round(8 * loadedBytes / loadedDuration);\n    }\n    if (frag.bitrateTest) {\n      const fragBufferedData = {\n        stats,\n        frag,\n        part,\n        id: frag.type\n      };\n      this.onFragBuffered(Events.FRAG_BUFFERED, fragBufferedData);\n      frag.bitrateTest = false;\n    } else {\n      this.lastLoadedFragLevel = frag.level;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    const stats = part != null && part.stats.loaded ? part.stats : frag.stats;\n    if (stats.aborted) {\n      return;\n    }\n    if (this.ignoreFragment(frag)) {\n      return;\n    }\n    const processingMs = stats.parsing.end - stats.loading.start - Math.min(stats.loading.first - stats.loading.start, this.bwEstimator.getEstimateTTFB());\n    this.bwEstimator.sample(processingMs, stats.loaded);\n    stats.bwEstimate = this.getBwEstimate();\n    if (frag.bitrateTest) {\n      this.bitrateTestDelay = processingMs / 1e3;\n    } else {\n      this.bitrateTestDelay = 0;\n    }\n  }\n  ignoreFragment(frag) {\n    return frag.type !== PlaylistLevelType.MAIN || frag.sn === \"initSegment\";\n  }\n  clearTimer() {\n    if (this.timer > -1) {\n      self.clearInterval(this.timer);\n      this.timer = -1;\n    }\n  }\n  get firstAutoLevel() {\n    const {\n      maxAutoLevel,\n      minAutoLevel\n    } = this.hls;\n    const bwEstimate = this.getBwEstimate();\n    const maxStartDelay = this.hls.config.maxStarvationDelay;\n    const abrAutoLevel = this.findBestLevel(bwEstimate, minAutoLevel, maxAutoLevel, 0, maxStartDelay, 1, 1);\n    if (abrAutoLevel > -1) {\n      return abrAutoLevel;\n    }\n    const firstLevel = this.hls.firstLevel;\n    const clamped = Math.min(Math.max(firstLevel, minAutoLevel), maxAutoLevel);\n    logger.warn(`[abr] Could not find best starting auto level. Defaulting to first in playlist ${firstLevel} clamped to ${clamped}`);\n    return clamped;\n  }\n  get forcedAutoLevel() {\n    if (this.nextAutoLevelKey) {\n      return -1;\n    }\n    return this._nextAutoLevel;\n  }\n  // return next auto level\n  get nextAutoLevel() {\n    const forcedAutoLevel = this.forcedAutoLevel;\n    const bwEstimator = this.bwEstimator;\n    const useEstimate = bwEstimator.canEstimate();\n    const loadedFirstFrag = this.lastLoadedFragLevel > -1;\n    if (forcedAutoLevel !== -1 && (!useEstimate || !loadedFirstFrag || this.nextAutoLevelKey === this.getAutoLevelKey())) {\n      return forcedAutoLevel;\n    }\n    const nextABRAutoLevel = useEstimate && loadedFirstFrag ? this.getNextABRAutoLevel() : this.firstAutoLevel;\n    if (forcedAutoLevel !== -1) {\n      const levels = this.hls.levels;\n      if (levels.length > Math.max(forcedAutoLevel, nextABRAutoLevel) && levels[forcedAutoLevel].loadError <= levels[nextABRAutoLevel].loadError) {\n        return forcedAutoLevel;\n      }\n    }\n    this._nextAutoLevel = nextABRAutoLevel;\n    this.nextAutoLevelKey = this.getAutoLevelKey();\n    return nextABRAutoLevel;\n  }\n  getAutoLevelKey() {\n    return `${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}`;\n  }\n  getNextABRAutoLevel() {\n    const {\n      fragCurrent,\n      partCurrent,\n      hls\n    } = this;\n    const {\n      maxAutoLevel,\n      config,\n      minAutoLevel\n    } = hls;\n    const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n    const avgbw = this.getBwEstimate();\n    const bufferStarvationDelay = this.getStarvationDelay();\n    let bwFactor = config.abrBandWidthFactor;\n    let bwUpFactor = config.abrBandWidthUpFactor;\n    if (bufferStarvationDelay) {\n      const _bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, 0, bwFactor, bwUpFactor);\n      if (_bestLevel >= 0) {\n        return _bestLevel;\n      }\n    }\n    let maxStarvationDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxStarvationDelay) : config.maxStarvationDelay;\n    if (!bufferStarvationDelay) {\n      const bitrateTestDelay = this.bitrateTestDelay;\n      if (bitrateTestDelay) {\n        const maxLoadingDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxLoadingDelay) : config.maxLoadingDelay;\n        maxStarvationDelay = maxLoadingDelay - bitrateTestDelay;\n        logger.info(`[abr] bitrate test took ${Math.round(1e3 * bitrateTestDelay)}ms, set first fragment max fetchDuration to ${Math.round(1e3 * maxStarvationDelay)} ms`);\n        bwFactor = bwUpFactor = 1;\n      }\n    }\n    const bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor);\n    logger.info(`[abr] ${bufferStarvationDelay ? \"rebuffering expected\" : \"buffer is empty\"}, optimal quality level ${bestLevel}`);\n    if (bestLevel > -1) {\n      return bestLevel;\n    }\n    const minLevel = hls.levels[minAutoLevel];\n    const autoLevel = hls.levels[hls.loadLevel];\n    if ((minLevel == null ? void 0 : minLevel.bitrate) < (autoLevel == null ? void 0 : autoLevel.bitrate)) {\n      return minAutoLevel;\n    }\n    return hls.loadLevel;\n  }\n  getStarvationDelay() {\n    const hls = this.hls;\n    const media = hls.media;\n    if (!media) {\n      return Infinity;\n    }\n    const playbackRate = media && media.playbackRate !== 0 ? Math.abs(media.playbackRate) : 1;\n    const bufferInfo = hls.mainForwardBufferInfo;\n    return (bufferInfo ? bufferInfo.len : 0) / playbackRate;\n  }\n  getBwEstimate() {\n    return this.bwEstimator.canEstimate() ? this.bwEstimator.getEstimate() : this.hls.config.abrEwmaDefaultEstimate;\n  }\n  findBestLevel(currentBw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor) {\n    var _level$details;\n    const maxFetchDuration = bufferStarvationDelay + maxStarvationDelay;\n    const lastLoadedFragLevel = this.lastLoadedFragLevel;\n    const selectionBaseLevel = lastLoadedFragLevel === -1 ? this.hls.firstLevel : lastLoadedFragLevel;\n    const {\n      fragCurrent,\n      partCurrent\n    } = this;\n    const {\n      levels,\n      allAudioTracks,\n      loadLevel,\n      config\n    } = this.hls;\n    if (levels.length === 1) {\n      return 0;\n    }\n    const level = levels[selectionBaseLevel];\n    const live = !!(level != null && (_level$details = level.details) != null && _level$details.live);\n    const firstSelection = loadLevel === -1 || lastLoadedFragLevel === -1;\n    let currentCodecSet;\n    let currentVideoRange = \"SDR\";\n    let currentFrameRate = (level == null ? void 0 : level.frameRate) || 0;\n    const {\n      audioPreference,\n      videoPreference\n    } = config;\n    const audioTracksByGroup = this.audioTracksByGroup || (this.audioTracksByGroup = getAudioTracksByGroup(allAudioTracks));\n    if (firstSelection) {\n      if (this.firstSelection !== -1) {\n        return this.firstSelection;\n      }\n      const codecTiers = this.codecTiers || (this.codecTiers = getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel));\n      const startTier = getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference);\n      const {\n        codecSet,\n        videoRanges,\n        minFramerate,\n        minBitrate,\n        preferHDR\n      } = startTier;\n      currentCodecSet = codecSet;\n      currentVideoRange = preferHDR ? videoRanges[videoRanges.length - 1] : videoRanges[0];\n      currentFrameRate = minFramerate;\n      currentBw = Math.max(currentBw, minBitrate);\n      logger.log(`[abr] picked start tier ${JSON.stringify(startTier)}`);\n    } else {\n      currentCodecSet = level == null ? void 0 : level.codecSet;\n      currentVideoRange = level == null ? void 0 : level.videoRange;\n    }\n    const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n    const ttfbEstimateSec = this.bwEstimator.getEstimateTTFB() / 1e3;\n    const levelsSkipped = [];\n    for (let i2 = maxAutoLevel; i2 >= minAutoLevel; i2--) {\n      var _levelInfo$supportedR;\n      const levelInfo = levels[i2];\n      const upSwitch = i2 > selectionBaseLevel;\n      if (!levelInfo) {\n        continue;\n      }\n      if (config.useMediaCapabilities && !levelInfo.supportedResult && !levelInfo.supportedPromise) {\n        const mediaCapabilities = navigator.mediaCapabilities;\n        if (typeof (mediaCapabilities == null ? void 0 : mediaCapabilities.decodingInfo) === \"function\" && requiresMediaCapabilitiesDecodingInfo(levelInfo, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference)) {\n          levelInfo.supportedPromise = getMediaDecodingInfoPromise(levelInfo, audioTracksByGroup, mediaCapabilities);\n          levelInfo.supportedPromise.then((decodingInfo) => {\n            if (!this.hls) {\n              return;\n            }\n            levelInfo.supportedResult = decodingInfo;\n            const levels2 = this.hls.levels;\n            const index = levels2.indexOf(levelInfo);\n            if (decodingInfo.error) {\n              logger.warn(`[abr] MediaCapabilities decodingInfo error: \"${decodingInfo.error}\" for level ${index} ${JSON.stringify(decodingInfo)}`);\n            } else if (!decodingInfo.supported) {\n              logger.warn(`[abr] Unsupported MediaCapabilities decodingInfo result for level ${index} ${JSON.stringify(decodingInfo)}`);\n              if (index > -1 && levels2.length > 1) {\n                logger.log(`[abr] Removing unsupported level ${index}`);\n                this.hls.removeLevel(index);\n              }\n            }\n          });\n        } else {\n          levelInfo.supportedResult = SUPPORTED_INFO_DEFAULT;\n        }\n      }\n      if (currentCodecSet && levelInfo.codecSet !== currentCodecSet || currentVideoRange && levelInfo.videoRange !== currentVideoRange || upSwitch && currentFrameRate > levelInfo.frameRate || !upSwitch && currentFrameRate > 0 && currentFrameRate < levelInfo.frameRate || levelInfo.supportedResult && !((_levelInfo$supportedR = levelInfo.supportedResult.decodingInfoResults) != null && _levelInfo$supportedR[0].smooth)) {\n        levelsSkipped.push(i2);\n        continue;\n      }\n      const levelDetails = levelInfo.details;\n      const avgDuration = (partCurrent ? levelDetails == null ? void 0 : levelDetails.partTarget : levelDetails == null ? void 0 : levelDetails.averagetargetduration) || currentFragDuration;\n      let adjustedbw;\n      if (!upSwitch) {\n        adjustedbw = bwFactor * currentBw;\n      } else {\n        adjustedbw = bwUpFactor * currentBw;\n      }\n      const bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levels[i2].averageBitrate : levels[i2].maxBitrate;\n      const fetchDuration = this.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === void 0);\n      const canSwitchWithinTolerance = (\n        // if adjusted bw is greater than level bitrate AND\n        adjustedbw >= bitrate && // no level change, or new level has no error history\n        (i2 === lastLoadedFragLevel || levelInfo.loadError === 0 && levelInfo.fragmentError === 0) && // fragment fetchDuration unknown OR live stream OR fragment fetchDuration less than max allowed fetch duration, then this level matches\n        // we don't account for max Fetch Duration for live streams, this is to avoid switching down when near the edge of live sliding window ...\n        // special case to support startLevel = -1 (bitrateTest) on live streams : in that case we should not exit loop so that findBestLevel will return -1\n        (fetchDuration <= ttfbEstimateSec || !isFiniteNumber(fetchDuration) || live && !this.bitrateTestDelay || fetchDuration < maxFetchDuration)\n      );\n      if (canSwitchWithinTolerance) {\n        const forcedAutoLevel = this.forcedAutoLevel;\n        if (i2 !== loadLevel && (forcedAutoLevel === -1 || forcedAutoLevel !== loadLevel)) {\n          if (levelsSkipped.length) {\n            logger.trace(`[abr] Skipped level(s) ${levelsSkipped.join(\",\")} of ${maxAutoLevel} max with CODECS and VIDEO-RANGE:\"${levels[levelsSkipped[0]].codecs}\" ${levels[levelsSkipped[0]].videoRange}; not compatible with \"${level.codecs}\" ${currentVideoRange}`);\n          }\n          logger.info(`[abr] switch candidate:${selectionBaseLevel}->${i2} adjustedbw(${Math.round(adjustedbw)})-bitrate=${Math.round(adjustedbw - bitrate)} ttfb:${ttfbEstimateSec.toFixed(1)} avgDuration:${avgDuration.toFixed(1)} maxFetchDuration:${maxFetchDuration.toFixed(1)} fetchDuration:${fetchDuration.toFixed(1)} firstSelection:${firstSelection} codecSet:${currentCodecSet} videoRange:${currentVideoRange} hls.loadLevel:${loadLevel}`);\n        }\n        if (firstSelection) {\n          this.firstSelection = i2;\n        }\n        return i2;\n      }\n    }\n    return -1;\n  }\n  set nextAutoLevel(nextLevel) {\n    const {\n      maxAutoLevel,\n      minAutoLevel\n    } = this.hls;\n    const value = Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);\n    if (this._nextAutoLevel !== value) {\n      this.nextAutoLevelKey = \"\";\n      this._nextAutoLevel = value;\n    }\n  }\n};\nvar TaskLoop = class {\n  constructor() {\n    this._boundTick = void 0;\n    this._tickTimer = null;\n    this._tickInterval = null;\n    this._tickCallCount = 0;\n    this._boundTick = this.tick.bind(this);\n  }\n  destroy() {\n    this.onHandlerDestroying();\n    this.onHandlerDestroyed();\n  }\n  onHandlerDestroying() {\n    this.clearNextTick();\n    this.clearInterval();\n  }\n  onHandlerDestroyed() {\n  }\n  hasInterval() {\n    return !!this._tickInterval;\n  }\n  hasNextTick() {\n    return !!this._tickTimer;\n  }\n  /**\n   * @param millis - Interval time (ms)\n   * @eturns True when interval has been scheduled, false when already scheduled (no effect)\n   */\n  setInterval(millis) {\n    if (!this._tickInterval) {\n      this._tickCallCount = 0;\n      this._tickInterval = self.setInterval(this._boundTick, millis);\n      return true;\n    }\n    return false;\n  }\n  /**\n   * @returns True when interval was cleared, false when none was set (no effect)\n   */\n  clearInterval() {\n    if (this._tickInterval) {\n      self.clearInterval(this._tickInterval);\n      this._tickInterval = null;\n      return true;\n    }\n    return false;\n  }\n  /**\n   * @returns True when timeout was cleared, false when none was set (no effect)\n   */\n  clearNextTick() {\n    if (this._tickTimer) {\n      self.clearTimeout(this._tickTimer);\n      this._tickTimer = null;\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Will call the subclass doTick implementation in this main loop tick\n   * or in the next one (via setTimeout(,0)) in case it has already been called\n   * in this tick (in case this is a re-entrant call).\n   */\n  tick() {\n    this._tickCallCount++;\n    if (this._tickCallCount === 1) {\n      this.doTick();\n      if (this._tickCallCount > 1) {\n        this.tickImmediate();\n      }\n      this._tickCallCount = 0;\n    }\n  }\n  tickImmediate() {\n    this.clearNextTick();\n    this._tickTimer = self.setTimeout(this._boundTick, 0);\n  }\n  /**\n   * For subclass to implement task logic\n   * @abstract\n   */\n  doTick() {\n  }\n};\nvar FragmentState = {\n  NOT_LOADED: \"NOT_LOADED\",\n  APPENDING: \"APPENDING\",\n  PARTIAL: \"PARTIAL\",\n  OK: \"OK\"\n};\nvar FragmentTracker = class {\n  constructor(hls) {\n    this.activePartLists = /* @__PURE__ */ Object.create(null);\n    this.endListFragments = /* @__PURE__ */ Object.create(null);\n    this.fragments = /* @__PURE__ */ Object.create(null);\n    this.timeRanges = /* @__PURE__ */ Object.create(null);\n    this.bufferPadding = 0.2;\n    this.hls = void 0;\n    this.hasGaps = false;\n    this.hls = hls;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.fragments = // @ts-ignore\n    this.activePartLists = // @ts-ignore\n    this.endListFragments = this.timeRanges = null;\n  }\n  /**\n   * Return a Fragment or Part with an appended range that matches the position and levelType\n   * Otherwise, return null\n   */\n  getAppendedFrag(position, levelType) {\n    const activeParts = this.activePartLists[levelType];\n    if (activeParts) {\n      for (let i2 = activeParts.length; i2--; ) {\n        const activePart = activeParts[i2];\n        if (!activePart) {\n          break;\n        }\n        const appendedPTS = activePart.end;\n        if (activePart.start <= position && appendedPTS !== null && position <= appendedPTS) {\n          return activePart;\n        }\n      }\n    }\n    return this.getBufferedFrag(position, levelType);\n  }\n  /**\n   * Return a buffered Fragment that matches the position and levelType.\n   * A buffered Fragment is one whose loading, parsing and appending is done (completed or \"partial\" meaning aborted).\n   * If not found any Fragment, return null\n   */\n  getBufferedFrag(position, levelType) {\n    const {\n      fragments\n    } = this;\n    const keys = Object.keys(fragments);\n    for (let i2 = keys.length; i2--; ) {\n      const fragmentEntity = fragments[keys[i2]];\n      if ((fragmentEntity == null ? void 0 : fragmentEntity.body.type) === levelType && fragmentEntity.buffered) {\n        const frag = fragmentEntity.body;\n        if (frag.start <= position && position <= frag.end) {\n          return frag;\n        }\n      }\n    }\n    return null;\n  }\n  /**\n   * Partial fragments effected by coded frame eviction will be removed\n   * The browser will unload parts of the buffer to free up memory for new buffer data\n   * Fragments will need to be reloaded when the buffer is freed up, removing partial fragments will allow them to reload(since there might be parts that are still playable)\n   */\n  detectEvictedFragments(elementaryStream, timeRange, playlistType, appendedPart) {\n    if (this.timeRanges) {\n      this.timeRanges[elementaryStream] = timeRange;\n    }\n    const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;\n    Object.keys(this.fragments).forEach((key) => {\n      const fragmentEntity = this.fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      if (appendedPartSn >= fragmentEntity.body.sn) {\n        return;\n      }\n      if (!fragmentEntity.buffered && !fragmentEntity.loaded) {\n        if (fragmentEntity.body.type === playlistType) {\n          this.removeFragment(fragmentEntity.body);\n        }\n        return;\n      }\n      const esData = fragmentEntity.range[elementaryStream];\n      if (!esData) {\n        return;\n      }\n      esData.time.some((time) => {\n        const isNotBuffered = !this.isTimeBuffered(time.startPTS, time.endPTS, timeRange);\n        if (isNotBuffered) {\n          this.removeFragment(fragmentEntity.body);\n        }\n        return isNotBuffered;\n      });\n    });\n  }\n  /**\n   * Checks if the fragment passed in is loaded in the buffer properly\n   * Partially loaded fragments will be registered as a partial fragment\n   */\n  detectPartialFragments(data) {\n    const timeRanges = this.timeRanges;\n    const {\n      frag,\n      part\n    } = data;\n    if (!timeRanges || frag.sn === \"initSegment\") {\n      return;\n    }\n    const fragKey = getFragmentKey(frag);\n    const fragmentEntity = this.fragments[fragKey];\n    if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {\n      return;\n    }\n    const isFragHint = !frag.relurl;\n    Object.keys(timeRanges).forEach((elementaryStream) => {\n      const streamInfo = frag.elementaryStreams[elementaryStream];\n      if (!streamInfo) {\n        return;\n      }\n      const timeRange = timeRanges[elementaryStream];\n      const partial = isFragHint || streamInfo.partial === true;\n      fragmentEntity.range[elementaryStream] = this.getBufferedTimes(frag, part, partial, timeRange);\n    });\n    fragmentEntity.loaded = null;\n    if (Object.keys(fragmentEntity.range).length) {\n      fragmentEntity.buffered = true;\n      const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;\n      if (endList) {\n        this.endListFragments[fragmentEntity.body.type] = fragmentEntity;\n      }\n      if (!isPartial(fragmentEntity)) {\n        this.removeParts(frag.sn - 1, frag.type);\n      }\n    } else {\n      this.removeFragment(fragmentEntity.body);\n    }\n  }\n  removeParts(snToKeep, levelType) {\n    const activeParts = this.activePartLists[levelType];\n    if (!activeParts) {\n      return;\n    }\n    this.activePartLists[levelType] = activeParts.filter((part) => part.fragment.sn >= snToKeep);\n  }\n  fragBuffered(frag, force) {\n    const fragKey = getFragmentKey(frag);\n    let fragmentEntity = this.fragments[fragKey];\n    if (!fragmentEntity && force) {\n      fragmentEntity = this.fragments[fragKey] = {\n        body: frag,\n        appendedPTS: null,\n        loaded: null,\n        buffered: false,\n        range: /* @__PURE__ */ Object.create(null)\n      };\n      if (frag.gap) {\n        this.hasGaps = true;\n      }\n    }\n    if (fragmentEntity) {\n      fragmentEntity.loaded = null;\n      fragmentEntity.buffered = true;\n    }\n  }\n  getBufferedTimes(fragment, part, partial, timeRange) {\n    const buffered = {\n      time: [],\n      partial\n    };\n    const startPTS = fragment.start;\n    const endPTS = fragment.end;\n    const minEndPTS = fragment.minEndPTS || endPTS;\n    const maxStartPTS = fragment.maxStartPTS || startPTS;\n    for (let i2 = 0; i2 < timeRange.length; i2++) {\n      const startTime = timeRange.start(i2) - this.bufferPadding;\n      const endTime = timeRange.end(i2) + this.bufferPadding;\n      if (maxStartPTS >= startTime && minEndPTS <= endTime) {\n        buffered.time.push({\n          startPTS: Math.max(startPTS, timeRange.start(i2)),\n          endPTS: Math.min(endPTS, timeRange.end(i2))\n        });\n        break;\n      } else if (startPTS < endTime && endPTS > startTime) {\n        const start = Math.max(startPTS, timeRange.start(i2));\n        const end = Math.min(endPTS, timeRange.end(i2));\n        if (end > start) {\n          buffered.partial = true;\n          buffered.time.push({\n            startPTS: start,\n            endPTS: end\n          });\n        }\n      } else if (endPTS <= startTime) {\n        break;\n      }\n    }\n    return buffered;\n  }\n  /**\n   * Gets the partial fragment for a certain time\n   */\n  getPartialFragment(time) {\n    let bestFragment = null;\n    let timePadding;\n    let startTime;\n    let endTime;\n    let bestOverlap = 0;\n    const {\n      bufferPadding,\n      fragments\n    } = this;\n    Object.keys(fragments).forEach((key) => {\n      const fragmentEntity = fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      if (isPartial(fragmentEntity)) {\n        startTime = fragmentEntity.body.start - bufferPadding;\n        endTime = fragmentEntity.body.end + bufferPadding;\n        if (time >= startTime && time <= endTime) {\n          timePadding = Math.min(time - startTime, endTime - time);\n          if (bestOverlap <= timePadding) {\n            bestFragment = fragmentEntity.body;\n            bestOverlap = timePadding;\n          }\n        }\n      }\n    });\n    return bestFragment;\n  }\n  isEndListAppended(type) {\n    const lastFragmentEntity = this.endListFragments[type];\n    return lastFragmentEntity !== void 0 && (lastFragmentEntity.buffered || isPartial(lastFragmentEntity));\n  }\n  getState(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    const fragmentEntity = this.fragments[fragKey];\n    if (fragmentEntity) {\n      if (!fragmentEntity.buffered) {\n        return FragmentState.APPENDING;\n      } else if (isPartial(fragmentEntity)) {\n        return FragmentState.PARTIAL;\n      } else {\n        return FragmentState.OK;\n      }\n    }\n    return FragmentState.NOT_LOADED;\n  }\n  isTimeBuffered(startPTS, endPTS, timeRange) {\n    let startTime;\n    let endTime;\n    for (let i2 = 0; i2 < timeRange.length; i2++) {\n      startTime = timeRange.start(i2) - this.bufferPadding;\n      endTime = timeRange.end(i2) + this.bufferPadding;\n      if (startPTS >= startTime && endPTS <= endTime) {\n        return true;\n      }\n      if (endPTS <= startTime) {\n        return false;\n      }\n    }\n    return false;\n  }\n  onFragLoaded(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag.sn === \"initSegment\" || frag.bitrateTest) {\n      return;\n    }\n    const loaded = part ? null : data;\n    const fragKey = getFragmentKey(frag);\n    this.fragments[fragKey] = {\n      body: frag,\n      appendedPTS: null,\n      loaded,\n      buffered: false,\n      range: /* @__PURE__ */ Object.create(null)\n    };\n  }\n  onBufferAppended(event, data) {\n    const {\n      frag,\n      part,\n      timeRanges\n    } = data;\n    if (frag.sn === \"initSegment\") {\n      return;\n    }\n    const playlistType = frag.type;\n    if (part) {\n      let activeParts = this.activePartLists[playlistType];\n      if (!activeParts) {\n        this.activePartLists[playlistType] = activeParts = [];\n      }\n      activeParts.push(part);\n    }\n    this.timeRanges = timeRanges;\n    Object.keys(timeRanges).forEach((elementaryStream) => {\n      const timeRange = timeRanges[elementaryStream];\n      this.detectEvictedFragments(elementaryStream, timeRange, playlistType, part);\n    });\n  }\n  onFragBuffered(event, data) {\n    this.detectPartialFragments(data);\n  }\n  hasFragment(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    return !!this.fragments[fragKey];\n  }\n  hasParts(type) {\n    var _this$activePartLists;\n    return !!((_this$activePartLists = this.activePartLists[type]) != null && _this$activePartLists.length);\n  }\n  removeFragmentsInRange(start, end, playlistType, withGapOnly, unbufferedOnly) {\n    if (withGapOnly && !this.hasGaps) {\n      return;\n    }\n    Object.keys(this.fragments).forEach((key) => {\n      const fragmentEntity = this.fragments[key];\n      if (!fragmentEntity) {\n        return;\n      }\n      const frag = fragmentEntity.body;\n      if (frag.type !== playlistType || withGapOnly && !frag.gap) {\n        return;\n      }\n      if (frag.start < end && frag.end > start && (fragmentEntity.buffered || unbufferedOnly)) {\n        this.removeFragment(frag);\n      }\n    });\n  }\n  removeFragment(fragment) {\n    const fragKey = getFragmentKey(fragment);\n    fragment.stats.loaded = 0;\n    fragment.clearElementaryStreamInfo();\n    const activeParts = this.activePartLists[fragment.type];\n    if (activeParts) {\n      const snToRemove = fragment.sn;\n      this.activePartLists[fragment.type] = activeParts.filter((part) => part.fragment.sn !== snToRemove);\n    }\n    delete this.fragments[fragKey];\n    if (fragment.endList) {\n      delete this.endListFragments[fragment.type];\n    }\n  }\n  removeAllFragments() {\n    this.fragments = /* @__PURE__ */ Object.create(null);\n    this.endListFragments = /* @__PURE__ */ Object.create(null);\n    this.activePartLists = /* @__PURE__ */ Object.create(null);\n    this.hasGaps = false;\n  }\n};\nfunction isPartial(fragmentEntity) {\n  var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;\n  return fragmentEntity.buffered && (fragmentEntity.body.gap || ((_fragmentEntity$range = fragmentEntity.range.video) == null ? void 0 : _fragmentEntity$range.partial) || ((_fragmentEntity$range2 = fragmentEntity.range.audio) == null ? void 0 : _fragmentEntity$range2.partial) || ((_fragmentEntity$range3 = fragmentEntity.range.audiovideo) == null ? void 0 : _fragmentEntity$range3.partial));\n}\nfunction getFragmentKey(fragment) {\n  return `${fragment.type}_${fragment.level}_${fragment.sn}`;\n}\nvar noopBuffered = {\n  length: 0,\n  start: () => 0,\n  end: () => 0\n};\nvar BufferHelper = class _BufferHelper {\n  /**\n   * Return true if `media`'s buffered include `position`\n   */\n  static isBuffered(media, position) {\n    try {\n      if (media) {\n        const buffered = _BufferHelper.getBuffered(media);\n        for (let i2 = 0; i2 < buffered.length; i2++) {\n          if (position >= buffered.start(i2) && position <= buffered.end(i2)) {\n            return true;\n          }\n        }\n      }\n    } catch (error) {\n    }\n    return false;\n  }\n  static bufferInfo(media, pos, maxHoleDuration) {\n    try {\n      if (media) {\n        const vbuffered = _BufferHelper.getBuffered(media);\n        const buffered = [];\n        let i2;\n        for (i2 = 0; i2 < vbuffered.length; i2++) {\n          buffered.push({\n            start: vbuffered.start(i2),\n            end: vbuffered.end(i2)\n          });\n        }\n        return this.bufferedInfo(buffered, pos, maxHoleDuration);\n      }\n    } catch (error) {\n    }\n    return {\n      len: 0,\n      start: pos,\n      end: pos,\n      nextStart: void 0\n    };\n  }\n  static bufferedInfo(buffered, pos, maxHoleDuration) {\n    pos = Math.max(0, pos);\n    buffered.sort(function(a2, b4) {\n      const diff = a2.start - b4.start;\n      if (diff) {\n        return diff;\n      } else {\n        return b4.end - a2.end;\n      }\n    });\n    let buffered2 = [];\n    if (maxHoleDuration) {\n      for (let i2 = 0; i2 < buffered.length; i2++) {\n        const buf2len = buffered2.length;\n        if (buf2len) {\n          const buf2end = buffered2[buf2len - 1].end;\n          if (buffered[i2].start - buf2end < maxHoleDuration) {\n            if (buffered[i2].end > buf2end) {\n              buffered2[buf2len - 1].end = buffered[i2].end;\n            }\n          } else {\n            buffered2.push(buffered[i2]);\n          }\n        } else {\n          buffered2.push(buffered[i2]);\n        }\n      }\n    } else {\n      buffered2 = buffered;\n    }\n    let bufferLen = 0;\n    let bufferStartNext;\n    let bufferStart = pos;\n    let bufferEnd = pos;\n    for (let i2 = 0; i2 < buffered2.length; i2++) {\n      const start = buffered2[i2].start;\n      const end = buffered2[i2].end;\n      if (pos + maxHoleDuration >= start && pos < end) {\n        bufferStart = start;\n        bufferEnd = end;\n        bufferLen = bufferEnd - pos;\n      } else if (pos + maxHoleDuration < start) {\n        bufferStartNext = start;\n        break;\n      }\n    }\n    return {\n      len: bufferLen,\n      start: bufferStart || 0,\n      end: bufferEnd || 0,\n      nextStart: bufferStartNext\n    };\n  }\n  /**\n   * Safe method to get buffered property.\n   * SourceBuffer.buffered may throw if SourceBuffer is removed from it's MediaSource\n   */\n  static getBuffered(media) {\n    try {\n      return media.buffered;\n    } catch (e) {\n      logger.log(\"failed to get media.buffered\", e);\n      return noopBuffered;\n    }\n  }\n};\nvar ChunkMetadata = class {\n  constructor(level, sn, id, size = 0, part = -1, partial = false) {\n    this.level = void 0;\n    this.sn = void 0;\n    this.part = void 0;\n    this.id = void 0;\n    this.size = void 0;\n    this.partial = void 0;\n    this.transmuxing = getNewPerformanceTiming();\n    this.buffering = {\n      audio: getNewPerformanceTiming(),\n      video: getNewPerformanceTiming(),\n      audiovideo: getNewPerformanceTiming()\n    };\n    this.level = level;\n    this.sn = sn;\n    this.id = id;\n    this.size = size;\n    this.part = part;\n    this.partial = partial;\n  }\n};\nfunction getNewPerformanceTiming() {\n  return {\n    start: 0,\n    executeStart: 0,\n    executeEnd: 0,\n    end: 0\n  };\n}\nfunction findFirstFragWithCC(fragments, cc) {\n  for (let i2 = 0, len = fragments.length; i2 < len; i2++) {\n    var _fragments$i;\n    if (((_fragments$i = fragments[i2]) == null ? void 0 : _fragments$i.cc) === cc) {\n      return fragments[i2];\n    }\n  }\n  return null;\n}\nfunction shouldAlignOnDiscontinuities(lastFrag, switchDetails, details) {\n  if (switchDetails) {\n    if (details.endCC > details.startCC || lastFrag && lastFrag.cc < details.startCC) {\n      return true;\n    }\n  }\n  return false;\n}\nfunction findDiscontinuousReferenceFrag(prevDetails, curDetails) {\n  const prevFrags = prevDetails.fragments;\n  const curFrags = curDetails.fragments;\n  if (!curFrags.length || !prevFrags.length) {\n    logger.log(\"No fragments to align\");\n    return;\n  }\n  const prevStartFrag = findFirstFragWithCC(prevFrags, curFrags[0].cc);\n  if (!prevStartFrag || prevStartFrag && !prevStartFrag.startPTS) {\n    logger.log(\"No frag in previous level to align on\");\n    return;\n  }\n  return prevStartFrag;\n}\nfunction adjustFragmentStart(frag, sliding) {\n  if (frag) {\n    const start = frag.start + sliding;\n    frag.start = frag.startPTS = start;\n    frag.endPTS = start + frag.duration;\n  }\n}\nfunction adjustSlidingStart(sliding, details) {\n  const fragments = details.fragments;\n  for (let i2 = 0, len = fragments.length; i2 < len; i2++) {\n    adjustFragmentStart(fragments[i2], sliding);\n  }\n  if (details.fragmentHint) {\n    adjustFragmentStart(details.fragmentHint, sliding);\n  }\n  details.alignedSliding = true;\n}\nfunction alignStream(lastFrag, switchDetails, details) {\n  if (!switchDetails) {\n    return;\n  }\n  alignDiscontinuities(lastFrag, details, switchDetails);\n  if (!details.alignedSliding && switchDetails) {\n    alignMediaPlaylistByPDT(details, switchDetails);\n  }\n  if (!details.alignedSliding && switchDetails && !details.skippedSegments) {\n    adjustSliding(switchDetails, details);\n  }\n}\nfunction alignDiscontinuities(lastFrag, details, switchDetails) {\n  if (shouldAlignOnDiscontinuities(lastFrag, switchDetails, details)) {\n    const referenceFrag = findDiscontinuousReferenceFrag(switchDetails, details);\n    if (referenceFrag && isFiniteNumber(referenceFrag.start)) {\n      logger.log(`Adjusting PTS using last level due to CC increase within current level ${details.url}`);\n      adjustSlidingStart(referenceFrag.start, details);\n    }\n  }\n}\nfunction alignMediaPlaylistByPDT(details, refDetails) {\n  if (!details.hasProgramDateTime || !refDetails.hasProgramDateTime) {\n    return;\n  }\n  const fragments = details.fragments;\n  const refFragments = refDetails.fragments;\n  if (!fragments.length || !refFragments.length) {\n    return;\n  }\n  let refFrag;\n  let frag;\n  const targetCC = Math.min(refDetails.endCC, details.endCC);\n  if (refDetails.startCC < targetCC && details.startCC < targetCC) {\n    refFrag = findFirstFragWithCC(refFragments, targetCC);\n    frag = findFirstFragWithCC(fragments, targetCC);\n  }\n  if (!refFrag || !frag) {\n    refFrag = refFragments[Math.floor(refFragments.length / 2)];\n    frag = findFirstFragWithCC(fragments, refFrag.cc) || fragments[Math.floor(fragments.length / 2)];\n  }\n  const refPDT = refFrag.programDateTime;\n  const targetPDT = frag.programDateTime;\n  if (!refPDT || !targetPDT) {\n    return;\n  }\n  const delta = (targetPDT - refPDT) / 1e3 - (frag.start - refFrag.start);\n  adjustSlidingStart(delta, details);\n}\nvar MIN_CHUNK_SIZE = Math.pow(2, 17);\nvar FragmentLoader = class {\n  constructor(config) {\n    this.config = void 0;\n    this.loader = null;\n    this.partLoadTimeout = -1;\n    this.config = config;\n  }\n  destroy() {\n    if (this.loader) {\n      this.loader.destroy();\n      this.loader = null;\n    }\n  }\n  abort() {\n    if (this.loader) {\n      this.loader.abort();\n    }\n  }\n  load(frag, onProgress) {\n    const url = frag.url;\n    if (!url) {\n      return Promise.reject(new LoadError({\n        type: ErrorTypes.NETWORK_ERROR,\n        details: ErrorDetails.FRAG_LOAD_ERROR,\n        fatal: false,\n        frag,\n        error: new Error(`Fragment does not have a ${url ? \"part list\" : \"url\"}`),\n        networkDetails: null\n      }));\n    }\n    this.abort();\n    const config = this.config;\n    const FragmentILoader = config.fLoader;\n    const DefaultILoader = config.loader;\n    return new Promise((resolve, reject) => {\n      if (this.loader) {\n        this.loader.destroy();\n      }\n      if (frag.gap) {\n        if (frag.tagList.some((tags) => tags[0] === \"GAP\")) {\n          reject(createGapLoadError(frag));\n          return;\n        } else {\n          frag.gap = false;\n        }\n      }\n      const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n      const loaderContext = createLoaderContext(frag);\n      const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0,\n        highWaterMark: frag.sn === \"initSegment\" ? Infinity : MIN_CHUNK_SIZE\n      };\n      frag.stats = loader.stats;\n      loader.load(loaderContext, loaderConfig, {\n        onSuccess: (response, stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          let payload = response.data;\n          if (context.resetIV && frag.decryptdata) {\n            frag.decryptdata.iv = new Uint8Array(payload.slice(0, 16));\n            payload = payload.slice(16);\n          }\n          resolve({\n            frag,\n            part: null,\n            payload,\n            networkDetails\n          });\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_ERROR,\n            fatal: false,\n            frag,\n            response: _objectSpread2({\n              url,\n              data: void 0\n            }, response),\n            error: new Error(`HTTP Error ${response.code} ${response.text}`),\n            networkDetails,\n            stats\n          }));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.INTERNAL_ABORTED,\n            fatal: false,\n            frag,\n            error: new Error(\"Aborted\"),\n            networkDetails,\n            stats\n          }));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n            fatal: false,\n            frag,\n            error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n            networkDetails,\n            stats\n          }));\n        },\n        onProgress: (stats, context, data, networkDetails) => {\n          if (onProgress) {\n            onProgress({\n              frag,\n              part: null,\n              payload: data,\n              networkDetails\n            });\n          }\n        }\n      });\n    });\n  }\n  loadPart(frag, part, onProgress) {\n    this.abort();\n    const config = this.config;\n    const FragmentILoader = config.fLoader;\n    const DefaultILoader = config.loader;\n    return new Promise((resolve, reject) => {\n      if (this.loader) {\n        this.loader.destroy();\n      }\n      if (frag.gap || part.gap) {\n        reject(createGapLoadError(frag, part));\n        return;\n      }\n      const loader = this.loader = frag.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n      const loaderContext = createLoaderContext(frag, part);\n      const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0,\n        highWaterMark: MIN_CHUNK_SIZE\n      };\n      part.stats = loader.stats;\n      loader.load(loaderContext, loaderConfig, {\n        onSuccess: (response, stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          this.updateStatsFromPart(frag, part);\n          const partLoadedData = {\n            frag,\n            part,\n            payload: response.data,\n            networkDetails\n          };\n          onProgress(partLoadedData);\n          resolve(partLoadedData);\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_ERROR,\n            fatal: false,\n            frag,\n            part,\n            response: _objectSpread2({\n              url: loaderContext.url,\n              data: void 0\n            }, response),\n            error: new Error(`HTTP Error ${response.code} ${response.text}`),\n            networkDetails,\n            stats\n          }));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          frag.stats.aborted = part.stats.aborted;\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.INTERNAL_ABORTED,\n            fatal: false,\n            frag,\n            part,\n            error: new Error(\"Aborted\"),\n            networkDetails,\n            stats\n          }));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(frag, loader);\n          reject(new LoadError({\n            type: ErrorTypes.NETWORK_ERROR,\n            details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n            fatal: false,\n            frag,\n            part,\n            error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n            networkDetails,\n            stats\n          }));\n        }\n      });\n    });\n  }\n  updateStatsFromPart(frag, part) {\n    const fragStats = frag.stats;\n    const partStats = part.stats;\n    const partTotal = partStats.total;\n    fragStats.loaded += partStats.loaded;\n    if (partTotal) {\n      const estTotalParts = Math.round(frag.duration / part.duration);\n      const estLoadedParts = Math.min(Math.round(fragStats.loaded / partTotal), estTotalParts);\n      const estRemainingParts = estTotalParts - estLoadedParts;\n      const estRemainingBytes = estRemainingParts * Math.round(fragStats.loaded / estLoadedParts);\n      fragStats.total = fragStats.loaded + estRemainingBytes;\n    } else {\n      fragStats.total = Math.max(fragStats.loaded, fragStats.total);\n    }\n    const fragLoading = fragStats.loading;\n    const partLoading = partStats.loading;\n    if (fragLoading.start) {\n      fragLoading.first += partLoading.first - partLoading.start;\n    } else {\n      fragLoading.start = partLoading.start;\n      fragLoading.first = partLoading.first;\n    }\n    fragLoading.end = partLoading.end;\n  }\n  resetLoader(frag, loader) {\n    frag.loader = null;\n    if (this.loader === loader) {\n      self.clearTimeout(this.partLoadTimeout);\n      this.loader = null;\n    }\n    loader.destroy();\n  }\n};\nfunction createLoaderContext(frag, part = null) {\n  const segment = part || frag;\n  const loaderContext = {\n    frag,\n    part,\n    responseType: \"arraybuffer\",\n    url: segment.url,\n    headers: {},\n    rangeStart: 0,\n    rangeEnd: 0\n  };\n  const start = segment.byteRangeStartOffset;\n  const end = segment.byteRangeEndOffset;\n  if (isFiniteNumber(start) && isFiniteNumber(end)) {\n    var _frag$decryptdata;\n    let byteRangeStart = start;\n    let byteRangeEnd = end;\n    if (frag.sn === \"initSegment\" && ((_frag$decryptdata = frag.decryptdata) == null ? void 0 : _frag$decryptdata.method) === \"AES-128\") {\n      const fragmentLen = end - start;\n      if (fragmentLen % 16) {\n        byteRangeEnd = end + (16 - fragmentLen % 16);\n      }\n      if (start !== 0) {\n        loaderContext.resetIV = true;\n        byteRangeStart = start - 16;\n      }\n    }\n    loaderContext.rangeStart = byteRangeStart;\n    loaderContext.rangeEnd = byteRangeEnd;\n  }\n  return loaderContext;\n}\nfunction createGapLoadError(frag, part) {\n  const error = new Error(`GAP ${frag.gap ? \"tag\" : \"attribute\"} found`);\n  const errorData = {\n    type: ErrorTypes.MEDIA_ERROR,\n    details: ErrorDetails.FRAG_GAP,\n    fatal: false,\n    frag,\n    error,\n    networkDetails: null\n  };\n  if (part) {\n    errorData.part = part;\n  }\n  (part ? part : frag).stats.aborted = true;\n  return new LoadError(errorData);\n}\nvar LoadError = class extends Error {\n  constructor(data) {\n    super(data.error.message);\n    this.data = void 0;\n    this.data = data;\n  }\n};\nvar AESCrypto = class {\n  constructor(subtle, iv) {\n    this.subtle = void 0;\n    this.aesIV = void 0;\n    this.subtle = subtle;\n    this.aesIV = iv;\n  }\n  decrypt(data, key) {\n    return this.subtle.decrypt({\n      name: \"AES-CBC\",\n      iv: this.aesIV\n    }, key, data);\n  }\n};\nvar FastAESKey = class {\n  constructor(subtle, key) {\n    this.subtle = void 0;\n    this.key = void 0;\n    this.subtle = subtle;\n    this.key = key;\n  }\n  expandKey() {\n    return this.subtle.importKey(\"raw\", this.key, {\n      name: \"AES-CBC\"\n    }, false, [\"encrypt\", \"decrypt\"]);\n  }\n};\nfunction removePadding(array) {\n  const outputBytes = array.byteLength;\n  const paddingBytes = outputBytes && new DataView(array.buffer).getUint8(outputBytes - 1);\n  if (paddingBytes) {\n    return sliceUint8(array, 0, outputBytes - paddingBytes);\n  }\n  return array;\n}\nvar AESDecryptor = class {\n  constructor() {\n    this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];\n    this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n    this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n    this.sBox = new Uint32Array(256);\n    this.invSBox = new Uint32Array(256);\n    this.key = new Uint32Array(0);\n    this.ksRows = 0;\n    this.keySize = 0;\n    this.keySchedule = void 0;\n    this.invKeySchedule = void 0;\n    this.initTable();\n  }\n  // Using view.getUint32() also swaps the byte order.\n  uint8ArrayToUint32Array_(arrayBuffer) {\n    const view = new DataView(arrayBuffer);\n    const newArray = new Uint32Array(4);\n    for (let i2 = 0; i2 < 4; i2++) {\n      newArray[i2] = view.getUint32(i2 * 4);\n    }\n    return newArray;\n  }\n  initTable() {\n    const sBox = this.sBox;\n    const invSBox = this.invSBox;\n    const subMix = this.subMix;\n    const subMix0 = subMix[0];\n    const subMix1 = subMix[1];\n    const subMix2 = subMix[2];\n    const subMix3 = subMix[3];\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    const d4 = new Uint32Array(256);\n    let x4 = 0;\n    let xi2 = 0;\n    let i2 = 0;\n    for (i2 = 0; i2 < 256; i2++) {\n      if (i2 < 128) {\n        d4[i2] = i2 << 1;\n      } else {\n        d4[i2] = i2 << 1 ^ 283;\n      }\n    }\n    for (i2 = 0; i2 < 256; i2++) {\n      let sx = xi2 ^ xi2 << 1 ^ xi2 << 2 ^ xi2 << 3 ^ xi2 << 4;\n      sx = sx >>> 8 ^ sx & 255 ^ 99;\n      sBox[x4] = sx;\n      invSBox[sx] = x4;\n      const x22 = d4[x4];\n      const x42 = d4[x22];\n      const x8 = d4[x42];\n      let t2 = d4[sx] * 257 ^ sx * 16843008;\n      subMix0[x4] = t2 << 24 | t2 >>> 8;\n      subMix1[x4] = t2 << 16 | t2 >>> 16;\n      subMix2[x4] = t2 << 8 | t2 >>> 24;\n      subMix3[x4] = t2;\n      t2 = x8 * 16843009 ^ x42 * 65537 ^ x22 * 257 ^ x4 * 16843008;\n      invSubMix0[sx] = t2 << 24 | t2 >>> 8;\n      invSubMix1[sx] = t2 << 16 | t2 >>> 16;\n      invSubMix2[sx] = t2 << 8 | t2 >>> 24;\n      invSubMix3[sx] = t2;\n      if (!x4) {\n        x4 = xi2 = 1;\n      } else {\n        x4 = x22 ^ d4[d4[d4[x8 ^ x22]]];\n        xi2 ^= d4[d4[xi2]];\n      }\n    }\n  }\n  expandKey(keyBuffer) {\n    const key = this.uint8ArrayToUint32Array_(keyBuffer);\n    let sameKey = true;\n    let offset = 0;\n    while (offset < key.length && sameKey) {\n      sameKey = key[offset] === this.key[offset];\n      offset++;\n    }\n    if (sameKey) {\n      return;\n    }\n    this.key = key;\n    const keySize = this.keySize = key.length;\n    if (keySize !== 4 && keySize !== 6 && keySize !== 8) {\n      throw new Error(\"Invalid aes key size=\" + keySize);\n    }\n    const ksRows = this.ksRows = (keySize + 6 + 1) * 4;\n    let ksRow;\n    let invKsRow;\n    const keySchedule = this.keySchedule = new Uint32Array(ksRows);\n    const invKeySchedule = this.invKeySchedule = new Uint32Array(ksRows);\n    const sbox = this.sBox;\n    const rcon = this.rcon;\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    let prev;\n    let t2;\n    for (ksRow = 0; ksRow < ksRows; ksRow++) {\n      if (ksRow < keySize) {\n        prev = keySchedule[ksRow] = key[ksRow];\n        continue;\n      }\n      t2 = prev;\n      if (ksRow % keySize === 0) {\n        t2 = t2 << 8 | t2 >>> 24;\n        t2 = sbox[t2 >>> 24] << 24 | sbox[t2 >>> 16 & 255] << 16 | sbox[t2 >>> 8 & 255] << 8 | sbox[t2 & 255];\n        t2 ^= rcon[ksRow / keySize | 0] << 24;\n      } else if (keySize > 6 && ksRow % keySize === 4) {\n        t2 = sbox[t2 >>> 24] << 24 | sbox[t2 >>> 16 & 255] << 16 | sbox[t2 >>> 8 & 255] << 8 | sbox[t2 & 255];\n      }\n      keySchedule[ksRow] = prev = (keySchedule[ksRow - keySize] ^ t2) >>> 0;\n    }\n    for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n      ksRow = ksRows - invKsRow;\n      if (invKsRow & 3) {\n        t2 = keySchedule[ksRow];\n      } else {\n        t2 = keySchedule[ksRow - 4];\n      }\n      if (invKsRow < 4 || ksRow <= 4) {\n        invKeySchedule[invKsRow] = t2;\n      } else {\n        invKeySchedule[invKsRow] = invSubMix0[sbox[t2 >>> 24]] ^ invSubMix1[sbox[t2 >>> 16 & 255]] ^ invSubMix2[sbox[t2 >>> 8 & 255]] ^ invSubMix3[sbox[t2 & 255]];\n      }\n      invKeySchedule[invKsRow] = invKeySchedule[invKsRow] >>> 0;\n    }\n  }\n  // Adding this as a method greatly improves performance.\n  networkToHostOrderSwap(word) {\n    return word << 24 | (word & 65280) << 8 | (word & 16711680) >> 8 | word >>> 24;\n  }\n  decrypt(inputArrayBuffer, offset, aesIV) {\n    const nRounds = this.keySize + 6;\n    const invKeySchedule = this.invKeySchedule;\n    const invSBOX = this.invSBox;\n    const invSubMix = this.invSubMix;\n    const invSubMix0 = invSubMix[0];\n    const invSubMix1 = invSubMix[1];\n    const invSubMix2 = invSubMix[2];\n    const invSubMix3 = invSubMix[3];\n    const initVector = this.uint8ArrayToUint32Array_(aesIV);\n    let initVector0 = initVector[0];\n    let initVector1 = initVector[1];\n    let initVector2 = initVector[2];\n    let initVector3 = initVector[3];\n    const inputInt32 = new Int32Array(inputArrayBuffer);\n    const outputInt32 = new Int32Array(inputInt32.length);\n    let t0, t1, t2, t3;\n    let s0, s1, s2, s3;\n    let inputWords0, inputWords1, inputWords2, inputWords3;\n    let ksRow, i2;\n    const swapWord = this.networkToHostOrderSwap;\n    while (offset < inputInt32.length) {\n      inputWords0 = swapWord(inputInt32[offset]);\n      inputWords1 = swapWord(inputInt32[offset + 1]);\n      inputWords2 = swapWord(inputInt32[offset + 2]);\n      inputWords3 = swapWord(inputInt32[offset + 3]);\n      s0 = inputWords0 ^ invKeySchedule[0];\n      s1 = inputWords3 ^ invKeySchedule[1];\n      s2 = inputWords2 ^ invKeySchedule[2];\n      s3 = inputWords1 ^ invKeySchedule[3];\n      ksRow = 4;\n      for (i2 = 1; i2 < nRounds; i2++) {\n        t0 = invSubMix0[s0 >>> 24] ^ invSubMix1[s1 >> 16 & 255] ^ invSubMix2[s2 >> 8 & 255] ^ invSubMix3[s3 & 255] ^ invKeySchedule[ksRow];\n        t1 = invSubMix0[s1 >>> 24] ^ invSubMix1[s2 >> 16 & 255] ^ invSubMix2[s3 >> 8 & 255] ^ invSubMix3[s0 & 255] ^ invKeySchedule[ksRow + 1];\n        t2 = invSubMix0[s2 >>> 24] ^ invSubMix1[s3 >> 16 & 255] ^ invSubMix2[s0 >> 8 & 255] ^ invSubMix3[s1 & 255] ^ invKeySchedule[ksRow + 2];\n        t3 = invSubMix0[s3 >>> 24] ^ invSubMix1[s0 >> 16 & 255] ^ invSubMix2[s1 >> 8 & 255] ^ invSubMix3[s2 & 255] ^ invKeySchedule[ksRow + 3];\n        s0 = t0;\n        s1 = t1;\n        s2 = t2;\n        s3 = t3;\n        ksRow = ksRow + 4;\n      }\n      t0 = invSBOX[s0 >>> 24] << 24 ^ invSBOX[s1 >> 16 & 255] << 16 ^ invSBOX[s2 >> 8 & 255] << 8 ^ invSBOX[s3 & 255] ^ invKeySchedule[ksRow];\n      t1 = invSBOX[s1 >>> 24] << 24 ^ invSBOX[s2 >> 16 & 255] << 16 ^ invSBOX[s3 >> 8 & 255] << 8 ^ invSBOX[s0 & 255] ^ invKeySchedule[ksRow + 1];\n      t2 = invSBOX[s2 >>> 24] << 24 ^ invSBOX[s3 >> 16 & 255] << 16 ^ invSBOX[s0 >> 8 & 255] << 8 ^ invSBOX[s1 & 255] ^ invKeySchedule[ksRow + 2];\n      t3 = invSBOX[s3 >>> 24] << 24 ^ invSBOX[s0 >> 16 & 255] << 16 ^ invSBOX[s1 >> 8 & 255] << 8 ^ invSBOX[s2 & 255] ^ invKeySchedule[ksRow + 3];\n      outputInt32[offset] = swapWord(t0 ^ initVector0);\n      outputInt32[offset + 1] = swapWord(t3 ^ initVector1);\n      outputInt32[offset + 2] = swapWord(t2 ^ initVector2);\n      outputInt32[offset + 3] = swapWord(t1 ^ initVector3);\n      initVector0 = inputWords0;\n      initVector1 = inputWords1;\n      initVector2 = inputWords2;\n      initVector3 = inputWords3;\n      offset = offset + 4;\n    }\n    return outputInt32.buffer;\n  }\n};\nvar CHUNK_SIZE = 16;\nvar Decrypter = class {\n  constructor(config, {\n    removePKCS7Padding = true\n  } = {}) {\n    this.logEnabled = true;\n    this.removePKCS7Padding = void 0;\n    this.subtle = null;\n    this.softwareDecrypter = null;\n    this.key = null;\n    this.fastAesKey = null;\n    this.remainderData = null;\n    this.currentIV = null;\n    this.currentResult = null;\n    this.useSoftware = void 0;\n    this.useSoftware = config.enableSoftwareAES;\n    this.removePKCS7Padding = removePKCS7Padding;\n    if (removePKCS7Padding) {\n      try {\n        const browserCrypto = self.crypto;\n        if (browserCrypto) {\n          this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n        }\n      } catch (e) {\n      }\n    }\n    this.useSoftware = !this.subtle;\n  }\n  destroy() {\n    this.subtle = null;\n    this.softwareDecrypter = null;\n    this.key = null;\n    this.fastAesKey = null;\n    this.remainderData = null;\n    this.currentIV = null;\n    this.currentResult = null;\n  }\n  isSync() {\n    return this.useSoftware;\n  }\n  flush() {\n    const {\n      currentResult,\n      remainderData\n    } = this;\n    if (!currentResult || remainderData) {\n      this.reset();\n      return null;\n    }\n    const data = new Uint8Array(currentResult);\n    this.reset();\n    if (this.removePKCS7Padding) {\n      return removePadding(data);\n    }\n    return data;\n  }\n  reset() {\n    this.currentResult = null;\n    this.currentIV = null;\n    this.remainderData = null;\n    if (this.softwareDecrypter) {\n      this.softwareDecrypter = null;\n    }\n  }\n  decrypt(data, key, iv) {\n    if (this.useSoftware) {\n      return new Promise((resolve, reject) => {\n        this.softwareDecrypt(new Uint8Array(data), key, iv);\n        const decryptResult = this.flush();\n        if (decryptResult) {\n          resolve(decryptResult.buffer);\n        } else {\n          reject(new Error(\"[softwareDecrypt] Failed to decrypt data\"));\n        }\n      });\n    }\n    return this.webCryptoDecrypt(new Uint8Array(data), key, iv);\n  }\n  // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n  // data is handled in the flush() call\n  softwareDecrypt(data, key, iv) {\n    const {\n      currentIV,\n      currentResult,\n      remainderData\n    } = this;\n    this.logOnce(\"JS AES decrypt\");\n    if (remainderData) {\n      data = appendUint8Array(remainderData, data);\n      this.remainderData = null;\n    }\n    const currentChunk = this.getValidChunk(data);\n    if (!currentChunk.length) {\n      return null;\n    }\n    if (currentIV) {\n      iv = currentIV;\n    }\n    let softwareDecrypter = this.softwareDecrypter;\n    if (!softwareDecrypter) {\n      softwareDecrypter = this.softwareDecrypter = new AESDecryptor();\n    }\n    softwareDecrypter.expandKey(key);\n    const result = currentResult;\n    this.currentResult = softwareDecrypter.decrypt(currentChunk.buffer, 0, iv);\n    this.currentIV = sliceUint8(currentChunk, -16).buffer;\n    if (!result) {\n      return null;\n    }\n    return result;\n  }\n  webCryptoDecrypt(data, key, iv) {\n    if (this.key !== key || !this.fastAesKey) {\n      if (!this.subtle) {\n        return Promise.resolve(this.onWebCryptoError(data, key, iv));\n      }\n      this.key = key;\n      this.fastAesKey = new FastAESKey(this.subtle, key);\n    }\n    return this.fastAesKey.expandKey().then((aesKey) => {\n      if (!this.subtle) {\n        return Promise.reject(new Error(\"web crypto not initialized\"));\n      }\n      this.logOnce(\"WebCrypto AES decrypt\");\n      const crypto2 = new AESCrypto(this.subtle, new Uint8Array(iv));\n      return crypto2.decrypt(data.buffer, aesKey);\n    }).catch((err) => {\n      logger.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${err.name}: ${err.message}`);\n      return this.onWebCryptoError(data, key, iv);\n    });\n  }\n  onWebCryptoError(data, key, iv) {\n    this.useSoftware = true;\n    this.logEnabled = true;\n    this.softwareDecrypt(data, key, iv);\n    const decryptResult = this.flush();\n    if (decryptResult) {\n      return decryptResult.buffer;\n    }\n    throw new Error(\"WebCrypto and softwareDecrypt: failed to decrypt data\");\n  }\n  getValidChunk(data) {\n    let currentChunk = data;\n    const splitPoint = data.length - data.length % CHUNK_SIZE;\n    if (splitPoint !== data.length) {\n      currentChunk = sliceUint8(data, 0, splitPoint);\n      this.remainderData = sliceUint8(data, splitPoint);\n    }\n    return currentChunk;\n  }\n  logOnce(msg) {\n    if (!this.logEnabled) {\n      return;\n    }\n    logger.log(`[decrypter]: ${msg}`);\n    this.logEnabled = false;\n  }\n};\nvar TimeRanges = {\n  toString: function(r10) {\n    let log = \"\";\n    const len = r10.length;\n    for (let i2 = 0; i2 < len; i2++) {\n      log += `[${r10.start(i2).toFixed(3)}-${r10.end(i2).toFixed(3)}]`;\n    }\n    return log;\n  }\n};\nvar State = {\n  STOPPED: \"STOPPED\",\n  IDLE: \"IDLE\",\n  KEY_LOADING: \"KEY_LOADING\",\n  FRAG_LOADING: \"FRAG_LOADING\",\n  FRAG_LOADING_WAITING_RETRY: \"FRAG_LOADING_WAITING_RETRY\",\n  WAITING_TRACK: \"WAITING_TRACK\",\n  PARSING: \"PARSING\",\n  PARSED: \"PARSED\",\n  ENDED: \"ENDED\",\n  ERROR: \"ERROR\",\n  WAITING_INIT_PTS: \"WAITING_INIT_PTS\",\n  WAITING_LEVEL: \"WAITING_LEVEL\"\n};\nvar BaseStreamController = class extends TaskLoop {\n  constructor(hls, fragmentTracker, keyLoader, logPrefix, playlistType) {\n    super();\n    this.hls = void 0;\n    this.fragPrevious = null;\n    this.fragCurrent = null;\n    this.fragmentTracker = void 0;\n    this.transmuxer = null;\n    this._state = State.STOPPED;\n    this.playlistType = void 0;\n    this.media = null;\n    this.mediaBuffer = null;\n    this.config = void 0;\n    this.bitrateTest = false;\n    this.lastCurrentTime = 0;\n    this.nextLoadPosition = 0;\n    this.startPosition = 0;\n    this.startTimeOffset = null;\n    this.loadedmetadata = false;\n    this.retryDate = 0;\n    this.levels = null;\n    this.fragmentLoader = void 0;\n    this.keyLoader = void 0;\n    this.levelLastLoaded = null;\n    this.startFragRequested = false;\n    this.decrypter = void 0;\n    this.initPTS = [];\n    this.buffering = true;\n    this.onvseeking = null;\n    this.onvended = null;\n    this.logPrefix = \"\";\n    this.log = void 0;\n    this.warn = void 0;\n    this.playlistType = playlistType;\n    this.logPrefix = logPrefix;\n    this.log = logger.log.bind(logger, `${logPrefix}:`);\n    this.warn = logger.warn.bind(logger, `${logPrefix}:`);\n    this.hls = hls;\n    this.fragmentLoader = new FragmentLoader(hls.config);\n    this.keyLoader = keyLoader;\n    this.fragmentTracker = fragmentTracker;\n    this.config = hls.config;\n    this.decrypter = new Decrypter(hls.config);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  doTick() {\n    this.onTickEnd();\n  }\n  onTickEnd() {\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  startLoad(startPosition) {\n  }\n  stopLoad() {\n    this.fragmentLoader.abort();\n    this.keyLoader.abort(this.playlistType);\n    const frag = this.fragCurrent;\n    if (frag != null && frag.loader) {\n      frag.abortRequests();\n      this.fragmentTracker.removeFragment(frag);\n    }\n    this.resetTransmuxer();\n    this.fragCurrent = null;\n    this.fragPrevious = null;\n    this.clearInterval();\n    this.clearNextTick();\n    this.state = State.STOPPED;\n  }\n  pauseBuffering() {\n    this.buffering = false;\n  }\n  resumeBuffering() {\n    this.buffering = true;\n  }\n  _streamEnded(bufferInfo, levelDetails) {\n    if (levelDetails.live || bufferInfo.nextStart || !bufferInfo.end || !this.media) {\n      return false;\n    }\n    const partList = levelDetails.partList;\n    if (partList != null && partList.length) {\n      const lastPart = partList[partList.length - 1];\n      const lastPartBuffered = BufferHelper.isBuffered(this.media, lastPart.start + lastPart.duration / 2);\n      return lastPartBuffered;\n    }\n    const playlistType = levelDetails.fragments[levelDetails.fragments.length - 1].type;\n    return this.fragmentTracker.isEndListAppended(playlistType);\n  }\n  getLevelDetails() {\n    if (this.levels && this.levelLastLoaded !== null) {\n      var _this$levelLastLoaded;\n      return (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details;\n    }\n  }\n  onMediaAttached(event, data) {\n    const media = this.media = this.mediaBuffer = data.media;\n    this.onvseeking = this.onMediaSeeking.bind(this);\n    this.onvended = this.onMediaEnded.bind(this);\n    media.addEventListener(\"seeking\", this.onvseeking);\n    media.addEventListener(\"ended\", this.onvended);\n    const config = this.config;\n    if (this.levels && config.autoStartLoad && this.state === State.STOPPED) {\n      this.startLoad(config.startPosition);\n    }\n  }\n  onMediaDetaching() {\n    const media = this.media;\n    if (media != null && media.ended) {\n      this.log(\"MSE detaching and video ended, reset startPosition\");\n      this.startPosition = this.lastCurrentTime = 0;\n    }\n    if (media && this.onvseeking && this.onvended) {\n      media.removeEventListener(\"seeking\", this.onvseeking);\n      media.removeEventListener(\"ended\", this.onvended);\n      this.onvseeking = this.onvended = null;\n    }\n    if (this.keyLoader) {\n      this.keyLoader.detach();\n    }\n    this.media = this.mediaBuffer = null;\n    this.loadedmetadata = false;\n    this.fragmentTracker.removeAllFragments();\n    this.stopLoad();\n  }\n  onMediaSeeking() {\n    const {\n      config,\n      fragCurrent,\n      media,\n      mediaBuffer,\n      state\n    } = this;\n    const currentTime = media ? media.currentTime : 0;\n    const bufferInfo = BufferHelper.bufferInfo(mediaBuffer ? mediaBuffer : media, currentTime, config.maxBufferHole);\n    this.log(`media seeking to ${isFiniteNumber(currentTime) ? currentTime.toFixed(3) : currentTime}, state: ${state}`);\n    if (this.state === State.ENDED) {\n      this.resetLoadingState();\n    } else if (fragCurrent) {\n      const tolerance = config.maxFragLookUpTolerance;\n      const fragStartOffset = fragCurrent.start - tolerance;\n      const fragEndOffset = fragCurrent.start + fragCurrent.duration + tolerance;\n      if (!bufferInfo.len || fragEndOffset < bufferInfo.start || fragStartOffset > bufferInfo.end) {\n        const pastFragment = currentTime > fragEndOffset;\n        if (currentTime < fragStartOffset || pastFragment) {\n          if (pastFragment && fragCurrent.loader) {\n            this.log(\"seeking outside of buffer while fragment load in progress, cancel fragment load\");\n            fragCurrent.abortRequests();\n            this.resetLoadingState();\n          }\n          this.fragPrevious = null;\n        }\n      }\n    }\n    if (media) {\n      this.fragmentTracker.removeFragmentsInRange(currentTime, Infinity, this.playlistType, true);\n      this.lastCurrentTime = currentTime;\n    }\n    if (!this.loadedmetadata && !bufferInfo.len) {\n      this.nextLoadPosition = this.startPosition = currentTime;\n    }\n    this.tickImmediate();\n  }\n  onMediaEnded() {\n    this.startPosition = this.lastCurrentTime = 0;\n  }\n  onManifestLoaded(event, data) {\n    this.startTimeOffset = data.startTimeOffset;\n    this.initPTS = [];\n  }\n  onHandlerDestroying() {\n    this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    this.stopLoad();\n    super.onHandlerDestroying();\n    this.hls = null;\n  }\n  onHandlerDestroyed() {\n    this.state = State.STOPPED;\n    if (this.fragmentLoader) {\n      this.fragmentLoader.destroy();\n    }\n    if (this.keyLoader) {\n      this.keyLoader.destroy();\n    }\n    if (this.decrypter) {\n      this.decrypter.destroy();\n    }\n    this.hls = this.log = this.warn = this.decrypter = this.keyLoader = this.fragmentLoader = this.fragmentTracker = null;\n    super.onHandlerDestroyed();\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    this._loadFragForPlayback(frag, level, targetBufferTime);\n  }\n  _loadFragForPlayback(frag, level, targetBufferTime) {\n    const progressCallback = (data) => {\n      if (this.fragContextChanged(frag)) {\n        this.warn(`Fragment ${frag.sn}${data.part ? \" p: \" + data.part.index : \"\"} of level ${frag.level} was dropped during download.`);\n        this.fragmentTracker.removeFragment(frag);\n        return;\n      }\n      frag.stats.chunkCount++;\n      this._handleFragmentLoadProgress(data);\n    };\n    this._doFragLoad(frag, level, targetBufferTime, progressCallback).then((data) => {\n      if (!data) {\n        return;\n      }\n      const state = this.state;\n      if (this.fragContextChanged(frag)) {\n        if (state === State.FRAG_LOADING || !this.fragCurrent && state === State.PARSING) {\n          this.fragmentTracker.removeFragment(frag);\n          this.state = State.IDLE;\n        }\n        return;\n      }\n      if (\"payload\" in data) {\n        this.log(`Loaded fragment ${frag.sn} of level ${frag.level}`);\n        this.hls.trigger(Events.FRAG_LOADED, data);\n      }\n      this._handleFragmentLoadComplete(data);\n    }).catch((reason) => {\n      if (this.state === State.STOPPED || this.state === State.ERROR) {\n        return;\n      }\n      this.warn(`Frag error: ${(reason == null ? void 0 : reason.message) || reason}`);\n      this.resetFragmentLoading(frag);\n    });\n  }\n  clearTrackerIfNeeded(frag) {\n    var _this$mediaBuffer;\n    const {\n      fragmentTracker\n    } = this;\n    const fragState = fragmentTracker.getState(frag);\n    if (fragState === FragmentState.APPENDING) {\n      const playlistType = frag.type;\n      const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n      const minForwardBufferLength = Math.max(frag.duration, bufferedInfo ? bufferedInfo.len : this.config.maxBufferLength);\n      const backtrackFragment = this.backtrackFragment;\n      const backtracked = backtrackFragment ? frag.sn - backtrackFragment.sn : 0;\n      if (backtracked === 1 || this.reduceMaxBufferLength(minForwardBufferLength, frag.duration)) {\n        fragmentTracker.removeFragment(frag);\n      }\n    } else if (((_this$mediaBuffer = this.mediaBuffer) == null ? void 0 : _this$mediaBuffer.buffered.length) === 0) {\n      fragmentTracker.removeAllFragments();\n    } else if (fragmentTracker.hasParts(frag.type)) {\n      fragmentTracker.detectPartialFragments({\n        frag,\n        part: null,\n        stats: frag.stats,\n        id: frag.type\n      });\n      if (fragmentTracker.getState(frag) === FragmentState.PARTIAL) {\n        fragmentTracker.removeFragment(frag);\n      }\n    }\n  }\n  checkLiveUpdate(details) {\n    if (details.updated && !details.live) {\n      const lastFragment = details.fragments[details.fragments.length - 1];\n      this.fragmentTracker.detectPartialFragments({\n        frag: lastFragment,\n        part: null,\n        stats: lastFragment.stats,\n        id: lastFragment.type\n      });\n    }\n    if (!details.fragments[0]) {\n      details.deltaUpdateFailed = true;\n    }\n  }\n  flushMainBuffer(startOffset, endOffset, type = null) {\n    if (!(startOffset - endOffset)) {\n      return;\n    }\n    const flushScope = {\n      startOffset,\n      endOffset,\n      type\n    };\n    this.hls.trigger(Events.BUFFER_FLUSHING, flushScope);\n  }\n  _loadInitSegment(frag, level) {\n    this._doFragLoad(frag, level).then((data) => {\n      if (!data || this.fragContextChanged(frag) || !this.levels) {\n        throw new Error(\"init load aborted\");\n      }\n      return data;\n    }).then((data) => {\n      const {\n        hls\n      } = this;\n      const {\n        payload\n      } = data;\n      const decryptData = frag.decryptdata;\n      if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && decryptData.method === \"AES-128\") {\n        const startTime = self.performance.now();\n        return this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer).catch((err) => {\n          hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.FRAG_DECRYPT_ERROR,\n            fatal: false,\n            error: err,\n            reason: err.message,\n            frag\n          });\n          throw err;\n        }).then((decryptedData) => {\n          const endTime = self.performance.now();\n          hls.trigger(Events.FRAG_DECRYPTED, {\n            frag,\n            payload: decryptedData,\n            stats: {\n              tstart: startTime,\n              tdecrypt: endTime\n            }\n          });\n          data.payload = decryptedData;\n          return this.completeInitSegmentLoad(data);\n        });\n      }\n      return this.completeInitSegmentLoad(data);\n    }).catch((reason) => {\n      if (this.state === State.STOPPED || this.state === State.ERROR) {\n        return;\n      }\n      this.warn(reason);\n      this.resetFragmentLoading(frag);\n    });\n  }\n  completeInitSegmentLoad(data) {\n    const {\n      levels\n    } = this;\n    if (!levels) {\n      throw new Error(\"init load aborted, missing levels\");\n    }\n    const stats = data.frag.stats;\n    this.state = State.IDLE;\n    data.frag.data = new Uint8Array(data.payload);\n    stats.parsing.start = stats.buffering.start = self.performance.now();\n    stats.parsing.end = stats.buffering.end = self.performance.now();\n    this.tick();\n  }\n  fragContextChanged(frag) {\n    const {\n      fragCurrent\n    } = this;\n    return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;\n  }\n  fragBufferedComplete(frag, part) {\n    var _frag$startPTS, _frag$endPTS, _this$fragCurrent, _this$fragPrevious;\n    const media = this.mediaBuffer ? this.mediaBuffer : this.media;\n    this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? \" part: \" + part.index : \"\"} of ${this.playlistType === PlaylistLevelType.MAIN ? \"level\" : \"track\"} ${frag.level} (frag:[${((_frag$startPTS = frag.startPTS) != null ? _frag$startPTS : NaN).toFixed(3)}-${((_frag$endPTS = frag.endPTS) != null ? _frag$endPTS : NaN).toFixed(3)}] > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : \"(detached)\"})`);\n    if (frag.sn !== \"initSegment\") {\n      var _this$levels;\n      if (frag.type !== PlaylistLevelType.SUBTITLE) {\n        const el = frag.elementaryStreams;\n        if (!Object.keys(el).some((type) => !!el[type])) {\n          this.state = State.IDLE;\n          return;\n        }\n      }\n      const level = (_this$levels = this.levels) == null ? void 0 : _this$levels[frag.level];\n      if (level != null && level.fragmentError) {\n        this.log(`Resetting level fragment error count of ${level.fragmentError} on frag buffered`);\n        level.fragmentError = 0;\n      }\n    }\n    this.state = State.IDLE;\n    if (!media) {\n      return;\n    }\n    if (!this.loadedmetadata && frag.type == PlaylistLevelType.MAIN && media.buffered.length && ((_this$fragCurrent = this.fragCurrent) == null ? void 0 : _this$fragCurrent.sn) === ((_this$fragPrevious = this.fragPrevious) == null ? void 0 : _this$fragPrevious.sn)) {\n      this.loadedmetadata = true;\n      this.seekToStartPos();\n    }\n    this.tick();\n  }\n  seekToStartPos() {\n  }\n  _handleFragmentLoadComplete(fragLoadedEndData) {\n    const {\n      transmuxer\n    } = this;\n    if (!transmuxer) {\n      return;\n    }\n    const {\n      frag,\n      part,\n      partsLoaded\n    } = fragLoadedEndData;\n    const complete = !partsLoaded || partsLoaded.length === 0 || partsLoaded.some((fragLoaded) => !fragLoaded);\n    const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount + 1, 0, part ? part.index : -1, !complete);\n    transmuxer.flush(chunkMeta);\n  }\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  _handleFragmentLoadProgress(frag) {\n  }\n  _doFragLoad(frag, level, targetBufferTime = null, progressCallback) {\n    var _frag$decryptdata;\n    const details = level == null ? void 0 : level.details;\n    if (!this.levels || !details) {\n      throw new Error(`frag load aborted, missing level${details ? \"\" : \" detail\"}s`);\n    }\n    let keyLoadingPromise = null;\n    if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {\n      this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.logPrefix === \"[stream-controller]\" ? \"level\" : \"track\"} ${frag.level}`);\n      this.state = State.KEY_LOADING;\n      this.fragCurrent = frag;\n      keyLoadingPromise = this.keyLoader.load(frag).then((keyLoadedData) => {\n        if (!this.fragContextChanged(keyLoadedData.frag)) {\n          this.hls.trigger(Events.KEY_LOADED, keyLoadedData);\n          if (this.state === State.KEY_LOADING) {\n            this.state = State.IDLE;\n          }\n          return keyLoadedData;\n        }\n      });\n      this.hls.trigger(Events.KEY_LOADING, {\n        frag\n      });\n      if (this.fragCurrent === null) {\n        keyLoadingPromise = Promise.reject(new Error(`frag load aborted, context changed in KEY_LOADING`));\n      }\n    } else if (!frag.encrypted && details.encryptedFragments.length) {\n      this.keyLoader.loadClear(frag, details.encryptedFragments);\n    }\n    targetBufferTime = Math.max(frag.start, targetBufferTime || 0);\n    if (this.config.lowLatencyMode && frag.sn !== \"initSegment\") {\n      const partList = details.partList;\n      if (partList && progressCallback) {\n        if (targetBufferTime > frag.end && details.fragmentHint) {\n          frag = details.fragmentHint;\n        }\n        const partIndex = this.getNextPart(partList, frag, targetBufferTime);\n        if (partIndex > -1) {\n          const part = partList[partIndex];\n          this.log(`Loading part sn: ${frag.sn} p: ${part.index} cc: ${frag.cc} of playlist [${details.startSN}-${details.endSN}] parts [0-${partIndex}-${partList.length - 1}] ${this.logPrefix === \"[stream-controller]\" ? \"level\" : \"track\"}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n          this.nextLoadPosition = part.start + part.duration;\n          this.state = State.FRAG_LOADING;\n          let _result;\n          if (keyLoadingPromise) {\n            _result = keyLoadingPromise.then((keyLoadedData) => {\n              if (!keyLoadedData || this.fragContextChanged(keyLoadedData.frag)) {\n                return null;\n              }\n              return this.doFragPartsLoad(frag, part, level, progressCallback);\n            }).catch((error) => this.handleFragLoadError(error));\n          } else {\n            _result = this.doFragPartsLoad(frag, part, level, progressCallback).catch((error) => this.handleFragLoadError(error));\n          }\n          this.hls.trigger(Events.FRAG_LOADING, {\n            frag,\n            part,\n            targetBufferTime\n          });\n          if (this.fragCurrent === null) {\n            return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING parts`));\n          }\n          return _result;\n        } else if (!frag.url || this.loadedEndOfParts(partList, targetBufferTime)) {\n          return Promise.resolve(null);\n        }\n      }\n    }\n    this.log(`Loading fragment ${frag.sn} cc: ${frag.cc} ${details ? \"of [\" + details.startSN + \"-\" + details.endSN + \"] \" : \"\"}${this.logPrefix === \"[stream-controller]\" ? \"level\" : \"track\"}: ${frag.level}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n    if (isFiniteNumber(frag.sn) && !this.bitrateTest) {\n      this.nextLoadPosition = frag.start + frag.duration;\n    }\n    this.state = State.FRAG_LOADING;\n    const dataOnProgress = this.config.progressive;\n    let result;\n    if (dataOnProgress && keyLoadingPromise) {\n      result = keyLoadingPromise.then((keyLoadedData) => {\n        if (!keyLoadedData || this.fragContextChanged(keyLoadedData == null ? void 0 : keyLoadedData.frag)) {\n          return null;\n        }\n        return this.fragmentLoader.load(frag, progressCallback);\n      }).catch((error) => this.handleFragLoadError(error));\n    } else {\n      result = Promise.all([this.fragmentLoader.load(frag, dataOnProgress ? progressCallback : void 0), keyLoadingPromise]).then(([fragLoadedData]) => {\n        if (!dataOnProgress && fragLoadedData && progressCallback) {\n          progressCallback(fragLoadedData);\n        }\n        return fragLoadedData;\n      }).catch((error) => this.handleFragLoadError(error));\n    }\n    this.hls.trigger(Events.FRAG_LOADING, {\n      frag,\n      targetBufferTime\n    });\n    if (this.fragCurrent === null) {\n      return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING`));\n    }\n    return result;\n  }\n  doFragPartsLoad(frag, fromPart, level, progressCallback) {\n    return new Promise((resolve, reject) => {\n      var _level$details;\n      const partsLoaded = [];\n      const initialPartList = (_level$details = level.details) == null ? void 0 : _level$details.partList;\n      const loadPart = (part) => {\n        this.fragmentLoader.loadPart(frag, part, progressCallback).then((partLoadedData) => {\n          partsLoaded[part.index] = partLoadedData;\n          const loadedPart = partLoadedData.part;\n          this.hls.trigger(Events.FRAG_LOADED, partLoadedData);\n          const nextPart = getPartWith(level, frag.sn, part.index + 1) || findPart(initialPartList, frag.sn, part.index + 1);\n          if (nextPart) {\n            loadPart(nextPart);\n          } else {\n            return resolve({\n              frag,\n              part: loadedPart,\n              partsLoaded\n            });\n          }\n        }).catch(reject);\n      };\n      loadPart(fromPart);\n    });\n  }\n  handleFragLoadError(error) {\n    if (\"data\" in error) {\n      const data = error.data;\n      if (error.data && data.details === ErrorDetails.INTERNAL_ABORTED) {\n        this.handleFragLoadAborted(data.frag, data.part);\n      } else {\n        this.hls.trigger(Events.ERROR, data);\n      }\n    } else {\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.OTHER_ERROR,\n        details: ErrorDetails.INTERNAL_EXCEPTION,\n        err: error,\n        error,\n        fatal: true\n      });\n    }\n    return null;\n  }\n  _handleTransmuxerFlush(chunkMeta) {\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context || this.state !== State.PARSING) {\n      if (!this.fragCurrent && this.state !== State.STOPPED && this.state !== State.ERROR) {\n        this.state = State.IDLE;\n      }\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const now2 = self.performance.now();\n    frag.stats.parsing.end = now2;\n    if (part) {\n      part.stats.parsing.end = now2;\n    }\n    this.updateLevelTiming(frag, part, level, chunkMeta.partial);\n  }\n  getCurrentContext(chunkMeta) {\n    const {\n      levels,\n      fragCurrent\n    } = this;\n    const {\n      level: levelIndex,\n      sn,\n      part: partIndex\n    } = chunkMeta;\n    if (!(levels != null && levels[levelIndex])) {\n      this.warn(`Levels object was unset while buffering fragment ${sn} of level ${levelIndex}. The current chunk will not be buffered.`);\n      return null;\n    }\n    const level = levels[levelIndex];\n    const part = partIndex > -1 ? getPartWith(level, sn, partIndex) : null;\n    const frag = part ? part.fragment : getFragmentWithSN(level, sn, fragCurrent);\n    if (!frag) {\n      return null;\n    }\n    if (fragCurrent && fragCurrent !== frag) {\n      frag.stats = fragCurrent.stats;\n    }\n    return {\n      frag,\n      part,\n      level\n    };\n  }\n  bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {\n    var _buffer;\n    if (!data || this.state !== State.PARSING) {\n      return;\n    }\n    const {\n      data1,\n      data2\n    } = data;\n    let buffer = data1;\n    if (data1 && data2) {\n      buffer = appendUint8Array(data1, data2);\n    }\n    if (!((_buffer = buffer) != null && _buffer.length)) {\n      return;\n    }\n    const segment = {\n      type: data.type,\n      frag,\n      part,\n      chunkMeta,\n      parent: frag.type,\n      data: buffer\n    };\n    this.hls.trigger(Events.BUFFER_APPENDING, segment);\n    if (data.dropped && data.independent && !part) {\n      if (noBacktracking) {\n        return;\n      }\n      this.flushBufferGap(frag);\n    }\n  }\n  flushBufferGap(frag) {\n    const media = this.media;\n    if (!media) {\n      return;\n    }\n    if (!BufferHelper.isBuffered(media, media.currentTime)) {\n      this.flushMainBuffer(0, frag.start);\n      return;\n    }\n    const currentTime = media.currentTime;\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const fragDuration = frag.duration;\n    const segmentFraction = Math.min(this.config.maxFragLookUpTolerance * 2, fragDuration * 0.25);\n    const start = Math.max(Math.min(frag.start - segmentFraction, bufferInfo.end - segmentFraction), currentTime + segmentFraction);\n    if (frag.start - start > segmentFraction) {\n      this.flushMainBuffer(start, frag.start);\n    }\n  }\n  getFwdBufferInfo(bufferable, type) {\n    const pos = this.getLoadPosition();\n    if (!isFiniteNumber(pos)) {\n      return null;\n    }\n    return this.getFwdBufferInfoAtPos(bufferable, pos, type);\n  }\n  getFwdBufferInfoAtPos(bufferable, pos, type) {\n    const {\n      config: {\n        maxBufferHole\n      }\n    } = this;\n    const bufferInfo = BufferHelper.bufferInfo(bufferable, pos, maxBufferHole);\n    if (bufferInfo.len === 0 && bufferInfo.nextStart !== void 0) {\n      const bufferedFragAtPos = this.fragmentTracker.getBufferedFrag(pos, type);\n      if (bufferedFragAtPos && bufferInfo.nextStart < bufferedFragAtPos.end) {\n        return BufferHelper.bufferInfo(bufferable, pos, Math.max(bufferInfo.nextStart, maxBufferHole));\n      }\n    }\n    return bufferInfo;\n  }\n  getMaxBufferLength(levelBitrate) {\n    const {\n      config\n    } = this;\n    let maxBufLen;\n    if (levelBitrate) {\n      maxBufLen = Math.max(8 * config.maxBufferSize / levelBitrate, config.maxBufferLength);\n    } else {\n      maxBufLen = config.maxBufferLength;\n    }\n    return Math.min(maxBufLen, config.maxMaxBufferLength);\n  }\n  reduceMaxBufferLength(threshold, fragDuration) {\n    const config = this.config;\n    const minLength = Math.max(Math.min(threshold - fragDuration, config.maxBufferLength), fragDuration);\n    const reducedLength = Math.max(threshold - fragDuration * 3, config.maxMaxBufferLength / 2, minLength);\n    if (reducedLength >= minLength) {\n      config.maxMaxBufferLength = reducedLength;\n      this.warn(`Reduce max buffer length to ${reducedLength}s`);\n      return true;\n    }\n    return false;\n  }\n  getAppendedFrag(position, playlistType = PlaylistLevelType.MAIN) {\n    const fragOrPart = this.fragmentTracker.getAppendedFrag(position, PlaylistLevelType.MAIN);\n    if (fragOrPart && \"fragment\" in fragOrPart) {\n      return fragOrPart.fragment;\n    }\n    return fragOrPart;\n  }\n  getNextFragment(pos, levelDetails) {\n    const fragments = levelDetails.fragments;\n    const fragLen = fragments.length;\n    if (!fragLen) {\n      return null;\n    }\n    const {\n      config\n    } = this;\n    const start = fragments[0].start;\n    let frag;\n    if (levelDetails.live) {\n      const initialLiveManifestSize = config.initialLiveManifestSize;\n      if (fragLen < initialLiveManifestSize) {\n        this.warn(`Not enough fragments to start playback (have: ${fragLen}, need: ${initialLiveManifestSize})`);\n        return null;\n      }\n      if (!levelDetails.PTSKnown && !this.startFragRequested && this.startPosition === -1 || pos < start) {\n        frag = this.getInitialLiveFragment(levelDetails, fragments);\n        this.startPosition = this.nextLoadPosition = frag ? this.hls.liveSyncPosition || frag.start : pos;\n      }\n    } else if (pos <= start) {\n      frag = fragments[0];\n    }\n    if (!frag) {\n      const end = config.lowLatencyMode ? levelDetails.partEnd : levelDetails.fragmentEnd;\n      frag = this.getFragmentAtPosition(pos, end, levelDetails);\n    }\n    return this.mapToInitFragWhenRequired(frag);\n  }\n  isLoopLoading(frag, targetBufferTime) {\n    const trackerState = this.fragmentTracker.getState(frag);\n    return (trackerState === FragmentState.OK || trackerState === FragmentState.PARTIAL && !!frag.gap) && this.nextLoadPosition > targetBufferTime;\n  }\n  getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, playlistType, maxBufLen) {\n    const gapStart = frag.gap;\n    const nextFragment = this.getNextFragment(this.nextLoadPosition, levelDetails);\n    if (nextFragment === null) {\n      return nextFragment;\n    }\n    frag = nextFragment;\n    if (gapStart && frag && !frag.gap && bufferInfo.nextStart) {\n      const nextbufferInfo = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, bufferInfo.nextStart, playlistType);\n      if (nextbufferInfo !== null && bufferInfo.len + nextbufferInfo.len >= maxBufLen) {\n        this.log(`buffer full after gaps in \"${playlistType}\" playlist starting at sn: ${frag.sn}`);\n        return null;\n      }\n    }\n    return frag;\n  }\n  mapToInitFragWhenRequired(frag) {\n    if (frag != null && frag.initSegment && !(frag != null && frag.initSegment.data) && !this.bitrateTest) {\n      return frag.initSegment;\n    }\n    return frag;\n  }\n  getNextPart(partList, frag, targetBufferTime) {\n    let nextPart = -1;\n    let contiguous = false;\n    let independentAttrOmitted = true;\n    for (let i2 = 0, len = partList.length; i2 < len; i2++) {\n      const part = partList[i2];\n      independentAttrOmitted = independentAttrOmitted && !part.independent;\n      if (nextPart > -1 && targetBufferTime < part.start) {\n        break;\n      }\n      const loaded = part.loaded;\n      if (loaded) {\n        nextPart = -1;\n      } else if ((contiguous || part.independent || independentAttrOmitted) && part.fragment === frag) {\n        nextPart = i2;\n      }\n      contiguous = loaded;\n    }\n    return nextPart;\n  }\n  loadedEndOfParts(partList, targetBufferTime) {\n    const lastPart = partList[partList.length - 1];\n    return lastPart && targetBufferTime > lastPart.start && lastPart.loaded;\n  }\n  /*\n   This method is used find the best matching first fragment for a live playlist. This fragment is used to calculate the\n   \"sliding\" of the playlist, which is its offset from the start of playback. After sliding we can compute the real\n   start and end times for each fragment in the playlist (after which this method will not need to be called).\n  */\n  getInitialLiveFragment(levelDetails, fragments) {\n    const fragPrevious = this.fragPrevious;\n    let frag = null;\n    if (fragPrevious) {\n      if (levelDetails.hasProgramDateTime) {\n        this.log(`Live playlist, switching playlist, load frag with same PDT: ${fragPrevious.programDateTime}`);\n        frag = findFragmentByPDT(fragments, fragPrevious.endProgramDateTime, this.config.maxFragLookUpTolerance);\n      }\n      if (!frag) {\n        const targetSN = fragPrevious.sn + 1;\n        if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n          const fragNext = fragments[targetSN - levelDetails.startSN];\n          if (fragPrevious.cc === fragNext.cc) {\n            frag = fragNext;\n            this.log(`Live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n          }\n        }\n        if (!frag) {\n          frag = findFragWithCC(fragments, fragPrevious.cc);\n          if (frag) {\n            this.log(`Live playlist, switching playlist, load frag with same CC: ${frag.sn}`);\n          }\n        }\n      }\n    } else {\n      const liveStart = this.hls.liveSyncPosition;\n      if (liveStart !== null) {\n        frag = this.getFragmentAtPosition(liveStart, this.bitrateTest ? levelDetails.fragmentEnd : levelDetails.edge, levelDetails);\n      }\n    }\n    return frag;\n  }\n  /*\n  This method finds the best matching fragment given the provided position.\n   */\n  getFragmentAtPosition(bufferEnd, end, levelDetails) {\n    const {\n      config\n    } = this;\n    let {\n      fragPrevious\n    } = this;\n    let {\n      fragments,\n      endSN\n    } = levelDetails;\n    const {\n      fragmentHint\n    } = levelDetails;\n    const {\n      maxFragLookUpTolerance\n    } = config;\n    const partList = levelDetails.partList;\n    const loadingParts = !!(config.lowLatencyMode && partList != null && partList.length && fragmentHint);\n    if (loadingParts && fragmentHint && !this.bitrateTest) {\n      fragments = fragments.concat(fragmentHint);\n      endSN = fragmentHint.sn;\n    }\n    let frag;\n    if (bufferEnd < end) {\n      const lookupTolerance = bufferEnd > end - maxFragLookUpTolerance ? 0 : maxFragLookUpTolerance;\n      frag = findFragmentByPTS(fragPrevious, fragments, bufferEnd, lookupTolerance);\n    } else {\n      frag = fragments[fragments.length - 1];\n    }\n    if (frag) {\n      const curSNIdx = frag.sn - levelDetails.startSN;\n      const fragState = this.fragmentTracker.getState(frag);\n      if (fragState === FragmentState.OK || fragState === FragmentState.PARTIAL && frag.gap) {\n        fragPrevious = frag;\n      }\n      if (fragPrevious && frag.sn === fragPrevious.sn && (!loadingParts || partList[0].fragment.sn > frag.sn)) {\n        const sameLevel = fragPrevious && frag.level === fragPrevious.level;\n        if (sameLevel) {\n          const nextFrag = fragments[curSNIdx + 1];\n          if (frag.sn < endSN && this.fragmentTracker.getState(nextFrag) !== FragmentState.OK) {\n            frag = nextFrag;\n          } else {\n            frag = null;\n          }\n        }\n      }\n    }\n    return frag;\n  }\n  synchronizeToLiveEdge(levelDetails) {\n    const {\n      config,\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const liveSyncPosition = this.hls.liveSyncPosition;\n    const currentTime = media.currentTime;\n    const start = levelDetails.fragments[0].start;\n    const end = levelDetails.edge;\n    const withinSlidingWindow = currentTime >= start - config.maxFragLookUpTolerance && currentTime <= end;\n    if (liveSyncPosition !== null && media.duration > liveSyncPosition && (currentTime < liveSyncPosition || !withinSlidingWindow)) {\n      const maxLatency = config.liveMaxLatencyDuration !== void 0 ? config.liveMaxLatencyDuration : config.liveMaxLatencyDurationCount * levelDetails.targetduration;\n      if (!withinSlidingWindow && media.readyState < 4 || currentTime < end - maxLatency) {\n        if (!this.loadedmetadata) {\n          this.nextLoadPosition = liveSyncPosition;\n        }\n        if (media.readyState) {\n          this.warn(`Playback: ${currentTime.toFixed(3)} is located too far from the end of live sliding playlist: ${end}, reset currentTime to : ${liveSyncPosition.toFixed(3)}`);\n          media.currentTime = liveSyncPosition;\n        }\n      }\n    }\n  }\n  alignPlaylists(details, previousDetails, switchDetails) {\n    const length = details.fragments.length;\n    if (!length) {\n      this.warn(`No fragments in live playlist`);\n      return 0;\n    }\n    const slidingStart = details.fragments[0].start;\n    const firstLevelLoad = !previousDetails;\n    const aligned = details.alignedSliding && isFiniteNumber(slidingStart);\n    if (firstLevelLoad || !aligned && !slidingStart) {\n      const {\n        fragPrevious\n      } = this;\n      alignStream(fragPrevious, switchDetails, details);\n      const alignedSlidingStart = details.fragments[0].start;\n      this.log(`Live playlist sliding: ${alignedSlidingStart.toFixed(2)} start-sn: ${previousDetails ? previousDetails.startSN : \"na\"}->${details.startSN} prev-sn: ${fragPrevious ? fragPrevious.sn : \"na\"} fragments: ${length}`);\n      return alignedSlidingStart;\n    }\n    return slidingStart;\n  }\n  waitForCdnTuneIn(details) {\n    const advancePartLimit = 3;\n    return details.live && details.canBlockReload && details.partTarget && details.tuneInGoal > Math.max(details.partHoldBack, details.partTarget * advancePartLimit);\n  }\n  setStartPosition(details, sliding) {\n    let startPosition = this.startPosition;\n    if (startPosition < sliding) {\n      startPosition = -1;\n    }\n    if (startPosition === -1 || this.lastCurrentTime === -1) {\n      const offsetInMultivariantPlaylist = this.startTimeOffset !== null;\n      const startTimeOffset = offsetInMultivariantPlaylist ? this.startTimeOffset : details.startTimeOffset;\n      if (startTimeOffset !== null && isFiniteNumber(startTimeOffset)) {\n        startPosition = sliding + startTimeOffset;\n        if (startTimeOffset < 0) {\n          startPosition += details.totalduration;\n        }\n        startPosition = Math.min(Math.max(sliding, startPosition), sliding + details.totalduration);\n        this.log(`Start time offset ${startTimeOffset} found in ${offsetInMultivariantPlaylist ? \"multivariant\" : \"media\"} playlist, adjust startPosition to ${startPosition}`);\n        this.startPosition = startPosition;\n      } else if (details.live) {\n        startPosition = this.hls.liveSyncPosition || sliding;\n      } else {\n        this.startPosition = startPosition = 0;\n      }\n      this.lastCurrentTime = startPosition;\n    }\n    this.nextLoadPosition = startPosition;\n  }\n  getLoadPosition() {\n    const {\n      media\n    } = this;\n    let pos = 0;\n    if (this.loadedmetadata && media) {\n      pos = media.currentTime;\n    } else if (this.nextLoadPosition) {\n      pos = this.nextLoadPosition;\n    }\n    return pos;\n  }\n  handleFragLoadAborted(frag, part) {\n    if (this.transmuxer && frag.sn !== \"initSegment\" && frag.stats.aborted) {\n      this.warn(`Fragment ${frag.sn}${part ? \" part \" + part.index : \"\"} of level ${frag.level} was aborted`);\n      this.resetFragmentLoading(frag);\n    }\n  }\n  resetFragmentLoading(frag) {\n    if (!this.fragCurrent || !this.fragContextChanged(frag) && this.state !== State.FRAG_LOADING_WAITING_RETRY) {\n      this.state = State.IDLE;\n    }\n  }\n  onFragmentOrKeyLoadError(filterType, data) {\n    if (data.chunkMeta && !data.frag) {\n      const context = this.getCurrentContext(data.chunkMeta);\n      if (context) {\n        data.frag = context.frag;\n      }\n    }\n    const frag = data.frag;\n    if (!frag || frag.type !== filterType || !this.levels) {\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      var _this$fragCurrent2;\n      this.warn(`Frag load error must match current frag to retry ${frag.url} > ${(_this$fragCurrent2 = this.fragCurrent) == null ? void 0 : _this$fragCurrent2.url}`);\n      return;\n    }\n    const gapTagEncountered = data.details === ErrorDetails.FRAG_GAP;\n    if (gapTagEncountered) {\n      this.fragmentTracker.fragBuffered(frag, true);\n    }\n    const errorAction = data.errorAction;\n    const {\n      action,\n      retryCount = 0,\n      retryConfig\n    } = errorAction || {};\n    if (errorAction && action === NetworkErrorAction.RetryRequest && retryConfig) {\n      this.resetStartWhenNotLoaded(this.levelLastLoaded);\n      const delay2 = getRetryDelay(retryConfig, retryCount);\n      this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay2}ms`);\n      errorAction.resolved = true;\n      this.retryDate = self.performance.now() + delay2;\n      this.state = State.FRAG_LOADING_WAITING_RETRY;\n    } else if (retryConfig && errorAction) {\n      this.resetFragmentErrors(filterType);\n      if (retryCount < retryConfig.maxNumRetry) {\n        if (!gapTagEncountered && action !== NetworkErrorAction.RemoveAlternatePermanently) {\n          errorAction.resolved = true;\n        }\n      } else {\n        logger.warn(`${data.details} reached or exceeded max retry (${retryCount})`);\n        return;\n      }\n    } else if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox) {\n      this.state = State.WAITING_LEVEL;\n    } else {\n      this.state = State.ERROR;\n    }\n    this.tickImmediate();\n  }\n  reduceLengthAndFlushBuffer(data) {\n    if (this.state === State.PARSING || this.state === State.PARSED) {\n      const frag = data.frag;\n      const playlistType = data.parent;\n      const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n      const buffered = bufferedInfo && bufferedInfo.len > 0.5;\n      if (buffered) {\n        this.reduceMaxBufferLength(bufferedInfo.len, (frag == null ? void 0 : frag.duration) || 10);\n      }\n      const flushBuffer = !buffered;\n      if (flushBuffer) {\n        this.warn(`Buffer full error while media.currentTime is not buffered, flush ${playlistType} buffer`);\n      }\n      if (frag) {\n        this.fragmentTracker.removeFragment(frag);\n        this.nextLoadPosition = frag.start;\n      }\n      this.resetLoadingState();\n      return flushBuffer;\n    }\n    return false;\n  }\n  resetFragmentErrors(filterType) {\n    if (filterType === PlaylistLevelType.AUDIO) {\n      this.fragCurrent = null;\n    }\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n    }\n    if (this.state !== State.STOPPED) {\n      this.state = State.IDLE;\n    }\n  }\n  afterBufferFlushed(media, bufferType, playlistType) {\n    if (!media) {\n      return;\n    }\n    const bufferedTimeRanges = BufferHelper.getBuffered(media);\n    this.fragmentTracker.detectEvictedFragments(bufferType, bufferedTimeRanges, playlistType);\n    if (this.state === State.ENDED) {\n      this.resetLoadingState();\n    }\n  }\n  resetLoadingState() {\n    this.log(\"Reset loading state\");\n    this.fragCurrent = null;\n    this.fragPrevious = null;\n    this.state = State.IDLE;\n  }\n  resetStartWhenNotLoaded(level) {\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n      const details = level ? level.details : null;\n      if (details != null && details.live) {\n        this.startPosition = -1;\n        this.setStartPosition(details, 0);\n        this.resetLoadingState();\n      } else {\n        this.nextLoadPosition = this.startPosition;\n      }\n    }\n  }\n  resetWhenMissingContext(chunkMeta) {\n    this.warn(`The loading context changed while buffering fragment ${chunkMeta.sn} of level ${chunkMeta.level}. This chunk will not be buffered.`);\n    this.removeUnbufferedFrags();\n    this.resetStartWhenNotLoaded(this.levelLastLoaded);\n    this.resetLoadingState();\n  }\n  removeUnbufferedFrags(start = 0) {\n    this.fragmentTracker.removeFragmentsInRange(start, Infinity, this.playlistType, false, true);\n  }\n  updateLevelTiming(frag, part, level, partial) {\n    var _this$transmuxer;\n    const details = level.details;\n    if (!details) {\n      this.warn(\"level.details undefined\");\n      return;\n    }\n    const parsed = Object.keys(frag.elementaryStreams).reduce((result, type) => {\n      const info = frag.elementaryStreams[type];\n      if (info) {\n        const parsedDuration = info.endPTS - info.startPTS;\n        if (parsedDuration <= 0) {\n          this.warn(`Could not parse fragment ${frag.sn} ${type} duration reliably (${parsedDuration})`);\n          return result || false;\n        }\n        const drift = partial ? 0 : updateFragPTSDTS(details, frag, info.startPTS, info.endPTS, info.startDTS, info.endDTS);\n        this.hls.trigger(Events.LEVEL_PTS_UPDATED, {\n          details,\n          level,\n          drift,\n          type,\n          frag,\n          start: info.startPTS,\n          end: info.endPTS\n        });\n        return true;\n      }\n      return result;\n    }, false);\n    if (!parsed && ((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null) {\n      const error = new Error(`Found no media in fragment ${frag.sn} of level ${frag.level} resetting transmuxer to fallback to playlist timing`);\n      if (level.fragmentError === 0) {\n        level.fragmentError++;\n        frag.gap = true;\n        this.fragmentTracker.removeFragment(frag);\n        this.fragmentTracker.fragBuffered(frag, true);\n      }\n      this.warn(error.message);\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.FRAG_PARSING_ERROR,\n        fatal: false,\n        error,\n        frag,\n        reason: `Found no media in msn ${frag.sn} of level \"${level.url}\"`\n      });\n      if (!this.hls) {\n        return;\n      }\n      this.resetTransmuxer();\n    }\n    this.state = State.PARSED;\n    this.hls.trigger(Events.FRAG_PARSED, {\n      frag,\n      part\n    });\n  }\n  resetTransmuxer() {\n    if (this.transmuxer) {\n      this.transmuxer.destroy();\n      this.transmuxer = null;\n    }\n  }\n  recoverWorkerError(data) {\n    if (data.event === \"demuxerWorker\") {\n      this.fragmentTracker.removeAllFragments();\n      this.resetTransmuxer();\n      this.resetStartWhenNotLoaded(this.levelLastLoaded);\n      this.resetLoadingState();\n    }\n  }\n  set state(nextState) {\n    const previousState = this._state;\n    if (previousState !== nextState) {\n      this._state = nextState;\n      this.log(`${previousState}->${nextState}`);\n    }\n  }\n  get state() {\n    return this._state;\n  }\n};\nvar ChunkCache = class {\n  constructor() {\n    this.chunks = [];\n    this.dataLength = 0;\n  }\n  push(chunk) {\n    this.chunks.push(chunk);\n    this.dataLength += chunk.length;\n  }\n  flush() {\n    const {\n      chunks,\n      dataLength\n    } = this;\n    let result;\n    if (!chunks.length) {\n      return new Uint8Array(0);\n    } else if (chunks.length === 1) {\n      result = chunks[0];\n    } else {\n      result = concatUint8Arrays(chunks, dataLength);\n    }\n    this.reset();\n    return result;\n  }\n  reset() {\n    this.chunks.length = 0;\n    this.dataLength = 0;\n  }\n};\nfunction concatUint8Arrays(chunks, dataLength) {\n  const result = new Uint8Array(dataLength);\n  let offset = 0;\n  for (let i2 = 0; i2 < chunks.length; i2++) {\n    const chunk = chunks[i2];\n    result.set(chunk, offset);\n    offset += chunk.length;\n  }\n  return result;\n}\nfunction hasUMDWorker() {\n  return typeof __HLS_WORKER_BUNDLE__ === \"function\";\n}\nfunction injectWorker() {\n  const blob = new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`], {\n    type: \"text/javascript\"\n  });\n  const objectURL = self.URL.createObjectURL(blob);\n  const worker = new self.Worker(objectURL);\n  return {\n    worker,\n    objectURL\n  };\n}\nfunction loadWorker(path) {\n  const scriptURL = new self.URL(path, self.location.href).href;\n  const worker = new self.Worker(scriptURL);\n  return {\n    worker,\n    scriptURL\n  };\n}\nfunction dummyTrack(type = \"\", inputTimeScale = 9e4) {\n  return {\n    type,\n    id: -1,\n    pid: -1,\n    inputTimeScale,\n    sequenceNumber: -1,\n    samples: [],\n    dropped: 0\n  };\n}\nvar BaseAudioDemuxer = class {\n  constructor() {\n    this._audioTrack = void 0;\n    this._id3Track = void 0;\n    this.frameIndex = 0;\n    this.cachedData = null;\n    this.basePTS = null;\n    this.initPTS = null;\n    this.lastPTS = null;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    this._id3Track = {\n      type: \"id3\",\n      id: 3,\n      pid: -1,\n      inputTimeScale: 9e4,\n      sequenceNumber: 0,\n      samples: [],\n      dropped: 0\n    };\n  }\n  resetTimeStamp(deaultTimestamp) {\n    this.initPTS = deaultTimestamp;\n    this.resetContiguity();\n  }\n  resetContiguity() {\n    this.basePTS = null;\n    this.lastPTS = null;\n    this.frameIndex = 0;\n  }\n  canParse(data, offset) {\n    return false;\n  }\n  appendFrame(track, data, offset) {\n  }\n  // feed incoming data to the front of the parsing pipeline\n  demux(data, timeOffset) {\n    if (this.cachedData) {\n      data = appendUint8Array(this.cachedData, data);\n      this.cachedData = null;\n    }\n    let id3Data = getID3Data(data, 0);\n    let offset = id3Data ? id3Data.length : 0;\n    let lastDataIndex;\n    const track = this._audioTrack;\n    const id3Track = this._id3Track;\n    const timestamp = id3Data ? getTimeStamp(id3Data) : void 0;\n    const length = data.length;\n    if (this.basePTS === null || this.frameIndex === 0 && isFiniteNumber(timestamp)) {\n      this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);\n      this.lastPTS = this.basePTS;\n    }\n    if (this.lastPTS === null) {\n      this.lastPTS = this.basePTS;\n    }\n    if (id3Data && id3Data.length > 0) {\n      id3Track.samples.push({\n        pts: this.lastPTS,\n        dts: this.lastPTS,\n        data: id3Data,\n        type: MetadataSchema.audioId3,\n        duration: Number.POSITIVE_INFINITY\n      });\n    }\n    while (offset < length) {\n      if (this.canParse(data, offset)) {\n        const frame = this.appendFrame(track, data, offset);\n        if (frame) {\n          this.frameIndex++;\n          this.lastPTS = frame.sample.pts;\n          offset += frame.length;\n          lastDataIndex = offset;\n        } else {\n          offset = length;\n        }\n      } else if (canParse$2(data, offset)) {\n        id3Data = getID3Data(data, offset);\n        id3Track.samples.push({\n          pts: this.lastPTS,\n          dts: this.lastPTS,\n          data: id3Data,\n          type: MetadataSchema.audioId3,\n          duration: Number.POSITIVE_INFINITY\n        });\n        offset += id3Data.length;\n        lastDataIndex = offset;\n      } else {\n        offset++;\n      }\n      if (offset === length && lastDataIndex !== length) {\n        const partialData = sliceUint8(data, lastDataIndex);\n        if (this.cachedData) {\n          this.cachedData = appendUint8Array(this.cachedData, partialData);\n        } else {\n          this.cachedData = partialData;\n        }\n      }\n    }\n    return {\n      audioTrack: track,\n      videoTrack: dummyTrack(),\n      id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    return Promise.reject(new Error(`[${this}] This demuxer does not support Sample-AES decryption`));\n  }\n  flush(timeOffset) {\n    const cachedData = this.cachedData;\n    if (cachedData) {\n      this.cachedData = null;\n      this.demux(cachedData, 0);\n    }\n    return {\n      audioTrack: this._audioTrack,\n      videoTrack: dummyTrack(),\n      id3Track: this._id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  destroy() {\n  }\n};\nvar initPTSFn = (timestamp, timeOffset, initPTS) => {\n  if (isFiniteNumber(timestamp)) {\n    return timestamp * 90;\n  }\n  const init90kHz = initPTS ? initPTS.baseTime * 9e4 / initPTS.timescale : 0;\n  return timeOffset * 9e4 + init90kHz;\n};\nfunction getAudioConfig(observer2, data, offset, audioCodec) {\n  let adtsObjectType;\n  let adtsExtensionSamplingIndex;\n  let adtsChannelConfig;\n  let config;\n  const userAgent = navigator.userAgent.toLowerCase();\n  const manifestCodec = audioCodec;\n  const adtsSamplingRates = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];\n  adtsObjectType = ((data[offset + 2] & 192) >>> 6) + 1;\n  const adtsSamplingIndex = (data[offset + 2] & 60) >>> 2;\n  if (adtsSamplingIndex > adtsSamplingRates.length - 1) {\n    const error = new Error(`invalid ADTS sampling index:${adtsSamplingIndex}`);\n    observer2.emit(Events.ERROR, Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.FRAG_PARSING_ERROR,\n      fatal: true,\n      error,\n      reason: error.message\n    });\n    return;\n  }\n  adtsChannelConfig = (data[offset + 2] & 1) << 2;\n  adtsChannelConfig |= (data[offset + 3] & 192) >>> 6;\n  logger.log(`manifest codec:${audioCodec}, ADTS type:${adtsObjectType}, samplingIndex:${adtsSamplingIndex}`);\n  if (/firefox/i.test(userAgent)) {\n    if (adtsSamplingIndex >= 6) {\n      adtsObjectType = 5;\n      config = new Array(4);\n      adtsExtensionSamplingIndex = adtsSamplingIndex - 3;\n    } else {\n      adtsObjectType = 2;\n      config = new Array(2);\n      adtsExtensionSamplingIndex = adtsSamplingIndex;\n    }\n  } else if (userAgent.indexOf(\"android\") !== -1) {\n    adtsObjectType = 2;\n    config = new Array(2);\n    adtsExtensionSamplingIndex = adtsSamplingIndex;\n  } else {\n    adtsObjectType = 5;\n    config = new Array(4);\n    if (audioCodec && (audioCodec.indexOf(\"mp4a.40.29\") !== -1 || audioCodec.indexOf(\"mp4a.40.5\") !== -1) || !audioCodec && adtsSamplingIndex >= 6) {\n      adtsExtensionSamplingIndex = adtsSamplingIndex - 3;\n    } else {\n      if (audioCodec && audioCodec.indexOf(\"mp4a.40.2\") !== -1 && (adtsSamplingIndex >= 6 && adtsChannelConfig === 1 || /vivaldi/i.test(userAgent)) || !audioCodec && adtsChannelConfig === 1) {\n        adtsObjectType = 2;\n        config = new Array(2);\n      }\n      adtsExtensionSamplingIndex = adtsSamplingIndex;\n    }\n  }\n  config[0] = adtsObjectType << 3;\n  config[0] |= (adtsSamplingIndex & 14) >> 1;\n  config[1] |= (adtsSamplingIndex & 1) << 7;\n  config[1] |= adtsChannelConfig << 3;\n  if (adtsObjectType === 5) {\n    config[1] |= (adtsExtensionSamplingIndex & 14) >> 1;\n    config[2] = (adtsExtensionSamplingIndex & 1) << 7;\n    config[2] |= 2 << 2;\n    config[3] = 0;\n  }\n  return {\n    config,\n    samplerate: adtsSamplingRates[adtsSamplingIndex],\n    channelCount: adtsChannelConfig,\n    codec: \"mp4a.40.\" + adtsObjectType,\n    manifestCodec\n  };\n}\nfunction isHeaderPattern$1(data, offset) {\n  return data[offset] === 255 && (data[offset + 1] & 246) === 240;\n}\nfunction getHeaderLength(data, offset) {\n  return data[offset + 1] & 1 ? 7 : 9;\n}\nfunction getFullFrameLength(data, offset) {\n  return (data[offset + 3] & 3) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 224) >>> 5;\n}\nfunction canGetFrameLength(data, offset) {\n  return offset + 5 < data.length;\n}\nfunction isHeader$1(data, offset) {\n  return offset + 1 < data.length && isHeaderPattern$1(data, offset);\n}\nfunction canParse$1(data, offset) {\n  return canGetFrameLength(data, offset) && isHeaderPattern$1(data, offset) && getFullFrameLength(data, offset) <= data.length - offset;\n}\nfunction probe$1(data, offset) {\n  if (isHeader$1(data, offset)) {\n    const headerLength = getHeaderLength(data, offset);\n    if (offset + headerLength >= data.length) {\n      return false;\n    }\n    const frameLength = getFullFrameLength(data, offset);\n    if (frameLength <= headerLength) {\n      return false;\n    }\n    const newOffset = offset + frameLength;\n    return newOffset === data.length || isHeader$1(data, newOffset);\n  }\n  return false;\n}\nfunction initTrackConfig(track, observer2, data, offset, audioCodec) {\n  if (!track.samplerate) {\n    const config = getAudioConfig(observer2, data, offset, audioCodec);\n    if (!config) {\n      return;\n    }\n    track.config = config.config;\n    track.samplerate = config.samplerate;\n    track.channelCount = config.channelCount;\n    track.codec = config.codec;\n    track.manifestCodec = config.manifestCodec;\n    logger.log(`parsed codec:${track.codec}, rate:${config.samplerate}, channels:${config.channelCount}`);\n  }\n}\nfunction getFrameDuration(samplerate) {\n  return 1024 * 9e4 / samplerate;\n}\nfunction parseFrameHeader(data, offset) {\n  const headerLength = getHeaderLength(data, offset);\n  if (offset + headerLength <= data.length) {\n    const frameLength = getFullFrameLength(data, offset) - headerLength;\n    if (frameLength > 0) {\n      return {\n        headerLength,\n        frameLength\n      };\n    }\n  }\n}\nfunction appendFrame$2(track, data, offset, pts, frameIndex) {\n  const frameDuration = getFrameDuration(track.samplerate);\n  const stamp = pts + frameIndex * frameDuration;\n  const header = parseFrameHeader(data, offset);\n  let unit;\n  if (header) {\n    const {\n      frameLength,\n      headerLength\n    } = header;\n    const _length = headerLength + frameLength;\n    const missing = Math.max(0, offset + _length - data.length);\n    if (missing) {\n      unit = new Uint8Array(_length - headerLength);\n      unit.set(data.subarray(offset + headerLength, data.length), 0);\n    } else {\n      unit = data.subarray(offset + headerLength, offset + _length);\n    }\n    const _sample = {\n      unit,\n      pts: stamp\n    };\n    if (!missing) {\n      track.samples.push(_sample);\n    }\n    return {\n      sample: _sample,\n      length: _length,\n      missing\n    };\n  }\n  const length = data.length - offset;\n  unit = new Uint8Array(length);\n  unit.set(data.subarray(offset, data.length), 0);\n  const sample = {\n    unit,\n    pts: stamp\n  };\n  return {\n    sample,\n    length,\n    missing: -1\n  };\n}\nvar chromeVersion$1 = null;\nvar BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];\nvar SamplingRateMap = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3];\nvar SamplesCoefficients = [\n  // MPEG 2.5\n  [\n    0,\n    // Reserved\n    72,\n    // Layer3\n    144,\n    // Layer2\n    12\n    // Layer1\n  ],\n  // Reserved\n  [\n    0,\n    // Reserved\n    0,\n    // Layer3\n    0,\n    // Layer2\n    0\n    // Layer1\n  ],\n  // MPEG 2\n  [\n    0,\n    // Reserved\n    72,\n    // Layer3\n    144,\n    // Layer2\n    12\n    // Layer1\n  ],\n  // MPEG 1\n  [\n    0,\n    // Reserved\n    144,\n    // Layer3\n    144,\n    // Layer2\n    12\n    // Layer1\n  ]\n];\nvar BytesInSlot = [\n  0,\n  // Reserved\n  1,\n  // Layer3\n  1,\n  // Layer2\n  4\n  // Layer1\n];\nfunction appendFrame$1(track, data, offset, pts, frameIndex) {\n  if (offset + 24 > data.length) {\n    return;\n  }\n  const header = parseHeader(data, offset);\n  if (header && offset + header.frameLength <= data.length) {\n    const frameDuration = header.samplesPerFrame * 9e4 / header.sampleRate;\n    const stamp = pts + frameIndex * frameDuration;\n    const sample = {\n      unit: data.subarray(offset, offset + header.frameLength),\n      pts: stamp,\n      dts: stamp\n    };\n    track.config = [];\n    track.channelCount = header.channelCount;\n    track.samplerate = header.sampleRate;\n    track.samples.push(sample);\n    return {\n      sample,\n      length: header.frameLength,\n      missing: 0\n    };\n  }\n}\nfunction parseHeader(data, offset) {\n  const mpegVersion = data[offset + 1] >> 3 & 3;\n  const mpegLayer = data[offset + 1] >> 1 & 3;\n  const bitRateIndex = data[offset + 2] >> 4 & 15;\n  const sampleRateIndex = data[offset + 2] >> 2 & 3;\n  if (mpegVersion !== 1 && bitRateIndex !== 0 && bitRateIndex !== 15 && sampleRateIndex !== 3) {\n    const paddingBit = data[offset + 2] >> 1 & 1;\n    const channelMode = data[offset + 3] >> 6;\n    const columnInBitrates = mpegVersion === 3 ? 3 - mpegLayer : mpegLayer === 3 ? 3 : 4;\n    const bitRate = BitratesMap[columnInBitrates * 14 + bitRateIndex - 1] * 1e3;\n    const columnInSampleRates = mpegVersion === 3 ? 0 : mpegVersion === 2 ? 1 : 2;\n    const sampleRate = SamplingRateMap[columnInSampleRates * 3 + sampleRateIndex];\n    const channelCount = channelMode === 3 ? 1 : 2;\n    const sampleCoefficient = SamplesCoefficients[mpegVersion][mpegLayer];\n    const bytesInSlot = BytesInSlot[mpegLayer];\n    const samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;\n    const frameLength = Math.floor(sampleCoefficient * bitRate / sampleRate + paddingBit) * bytesInSlot;\n    if (chromeVersion$1 === null) {\n      const userAgent = navigator.userAgent || \"\";\n      const result = userAgent.match(/Chrome\\/(\\d+)/i);\n      chromeVersion$1 = result ? parseInt(result[1]) : 0;\n    }\n    const needChromeFix = !!chromeVersion$1 && chromeVersion$1 <= 87;\n    if (needChromeFix && mpegLayer === 2 && bitRate >= 224e3 && channelMode === 0) {\n      data[offset + 3] = data[offset + 3] | 128;\n    }\n    return {\n      sampleRate,\n      channelCount,\n      frameLength,\n      samplesPerFrame\n    };\n  }\n}\nfunction isHeaderPattern(data, offset) {\n  return data[offset] === 255 && (data[offset + 1] & 224) === 224 && (data[offset + 1] & 6) !== 0;\n}\nfunction isHeader(data, offset) {\n  return offset + 1 < data.length && isHeaderPattern(data, offset);\n}\nfunction canParse(data, offset) {\n  const headerSize = 4;\n  return isHeaderPattern(data, offset) && headerSize <= data.length - offset;\n}\nfunction probe(data, offset) {\n  if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n    const headerLength = 4;\n    const header = parseHeader(data, offset);\n    let frameLength = headerLength;\n    if (header != null && header.frameLength) {\n      frameLength = header.frameLength;\n    }\n    const newOffset = offset + frameLength;\n    return newOffset === data.length || isHeader(data, newOffset);\n  }\n  return false;\n}\nvar AACDemuxer = class extends BaseAudioDemuxer {\n  constructor(observer2, config) {\n    super();\n    this.observer = void 0;\n    this.config = void 0;\n    this.observer = observer2;\n    this.config = config;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: \"audio/adts\",\n      type: \"audio\",\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: \"aac\",\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 9e4,\n      dropped: 0\n    };\n  }\n  // Source for probe info - https://wiki.multimedia.cx/index.php?title=ADTS\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n    const id3Data = getID3Data(data, 0);\n    let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n    if (probe(data, offset)) {\n      return false;\n    }\n    for (let length = data.length; offset < length; offset++) {\n      if (probe$1(data, offset)) {\n        logger.log(\"ADTS sync word found !\");\n        return true;\n      }\n    }\n    return false;\n  }\n  canParse(data, offset) {\n    return canParse$1(data, offset);\n  }\n  appendFrame(track, data, offset) {\n    initTrackConfig(track, this.observer, data, offset, track.manifestCodec);\n    const frame = appendFrame$2(track, data, offset, this.basePTS, this.frameIndex);\n    if (frame && frame.missing === 0) {\n      return frame;\n    }\n  }\n};\nvar emsgSchemePattern = /\\/emsg[-/]ID3/i;\nvar MP4Demuxer = class {\n  constructor(observer2, config) {\n    this.remainderData = null;\n    this.timeOffset = 0;\n    this.config = void 0;\n    this.videoTrack = void 0;\n    this.audioTrack = void 0;\n    this.id3Track = void 0;\n    this.txtTrack = void 0;\n    this.config = config;\n  }\n  resetTimeStamp() {\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    const videoTrack = this.videoTrack = dummyTrack(\"video\", 1);\n    const audioTrack = this.audioTrack = dummyTrack(\"audio\", 1);\n    const captionTrack = this.txtTrack = dummyTrack(\"text\", 1);\n    this.id3Track = dummyTrack(\"id3\", 1);\n    this.timeOffset = 0;\n    if (!(initSegment != null && initSegment.byteLength)) {\n      return;\n    }\n    const initData = parseInitSegment(initSegment);\n    if (initData.video) {\n      const {\n        id,\n        timescale,\n        codec\n      } = initData.video;\n      videoTrack.id = id;\n      videoTrack.timescale = captionTrack.timescale = timescale;\n      videoTrack.codec = codec;\n    }\n    if (initData.audio) {\n      const {\n        id,\n        timescale,\n        codec\n      } = initData.audio;\n      audioTrack.id = id;\n      audioTrack.timescale = timescale;\n      audioTrack.codec = codec;\n    }\n    captionTrack.id = RemuxerTrackIdConfig.text;\n    videoTrack.sampleDuration = 0;\n    videoTrack.duration = audioTrack.duration = trackDuration;\n  }\n  resetContiguity() {\n    this.remainderData = null;\n  }\n  static probe(data) {\n    return hasMoofData(data);\n  }\n  demux(data, timeOffset) {\n    this.timeOffset = timeOffset;\n    let videoSamples = data;\n    const videoTrack = this.videoTrack;\n    const textTrack = this.txtTrack;\n    if (this.config.progressive) {\n      if (this.remainderData) {\n        videoSamples = appendUint8Array(this.remainderData, data);\n      }\n      const segmentedData = segmentValidRange(videoSamples);\n      this.remainderData = segmentedData.remainder;\n      videoTrack.samples = segmentedData.valid || new Uint8Array();\n    } else {\n      videoTrack.samples = videoSamples;\n    }\n    const id3Track = this.extractID3Track(videoTrack, timeOffset);\n    textTrack.samples = parseSamples(timeOffset, videoTrack);\n    return {\n      videoTrack,\n      audioTrack: this.audioTrack,\n      id3Track,\n      textTrack: this.txtTrack\n    };\n  }\n  flush() {\n    const timeOffset = this.timeOffset;\n    const videoTrack = this.videoTrack;\n    const textTrack = this.txtTrack;\n    videoTrack.samples = this.remainderData || new Uint8Array();\n    this.remainderData = null;\n    const id3Track = this.extractID3Track(videoTrack, this.timeOffset);\n    textTrack.samples = parseSamples(timeOffset, videoTrack);\n    return {\n      videoTrack,\n      audioTrack: dummyTrack(),\n      id3Track,\n      textTrack: dummyTrack()\n    };\n  }\n  extractID3Track(videoTrack, timeOffset) {\n    const id3Track = this.id3Track;\n    if (videoTrack.samples.length) {\n      const emsgs = findBox(videoTrack.samples, [\"emsg\"]);\n      if (emsgs) {\n        emsgs.forEach((data) => {\n          const emsgInfo = parseEmsg(data);\n          if (emsgSchemePattern.test(emsgInfo.schemeIdUri)) {\n            const pts = isFiniteNumber(emsgInfo.presentationTime) ? emsgInfo.presentationTime / emsgInfo.timeScale : timeOffset + emsgInfo.presentationTimeDelta / emsgInfo.timeScale;\n            let duration = emsgInfo.eventDuration === 4294967295 ? Number.POSITIVE_INFINITY : emsgInfo.eventDuration / emsgInfo.timeScale;\n            if (duration <= 1e-3) {\n              duration = Number.POSITIVE_INFINITY;\n            }\n            const payload = emsgInfo.payload;\n            id3Track.samples.push({\n              data: payload,\n              len: payload.byteLength,\n              dts: pts,\n              pts,\n              type: MetadataSchema.emsg,\n              duration\n            });\n          }\n        });\n      }\n    }\n    return id3Track;\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    return Promise.reject(new Error(\"The MP4 demuxer does not support SAMPLE-AES decryption\"));\n  }\n  destroy() {\n  }\n};\nvar getAudioBSID = (data, offset) => {\n  let bsid = 0;\n  let numBits = 5;\n  offset += numBits;\n  const temp = new Uint32Array(1);\n  const mask = new Uint32Array(1);\n  const byte = new Uint8Array(1);\n  while (numBits > 0) {\n    byte[0] = data[offset];\n    const bits = Math.min(numBits, 8);\n    const shift = 8 - bits;\n    mask[0] = 4278190080 >>> 24 + shift << shift;\n    temp[0] = (byte[0] & mask[0]) >> shift;\n    bsid = !bsid ? temp[0] : bsid << bits | temp[0];\n    offset += 1;\n    numBits -= bits;\n  }\n  return bsid;\n};\nvar AC3Demuxer = class extends BaseAudioDemuxer {\n  constructor(observer2) {\n    super();\n    this.observer = void 0;\n    this.observer = observer2;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: \"audio/ac-3\",\n      type: \"audio\",\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: \"ac3\",\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 9e4,\n      dropped: 0\n    };\n  }\n  canParse(data, offset) {\n    return offset + 64 < data.length;\n  }\n  appendFrame(track, data, offset) {\n    const frameLength = appendFrame(track, data, offset, this.basePTS, this.frameIndex);\n    if (frameLength !== -1) {\n      const sample = track.samples[track.samples.length - 1];\n      return {\n        sample,\n        length: frameLength,\n        missing: 0\n      };\n    }\n  }\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n    const id3Data = getID3Data(data, 0);\n    if (!id3Data) {\n      return false;\n    }\n    const offset = id3Data.length;\n    if (data[offset] === 11 && data[offset + 1] === 119 && getTimeStamp(id3Data) !== void 0 && // check the bsid to confirm ac-3\n    getAudioBSID(data, offset) < 16) {\n      return true;\n    }\n    return false;\n  }\n};\nfunction appendFrame(track, data, start, pts, frameIndex) {\n  if (start + 8 > data.length) {\n    return -1;\n  }\n  if (data[start] !== 11 || data[start + 1] !== 119) {\n    return -1;\n  }\n  const samplingRateCode = data[start + 4] >> 6;\n  if (samplingRateCode >= 3) {\n    return -1;\n  }\n  const samplingRateMap = [48e3, 44100, 32e3];\n  const sampleRate = samplingRateMap[samplingRateCode];\n  const frameSizeCode = data[start + 4] & 63;\n  const frameSizeMap = [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920];\n  const frameLength = frameSizeMap[frameSizeCode * 3 + samplingRateCode] * 2;\n  if (start + frameLength > data.length) {\n    return -1;\n  }\n  const channelMode = data[start + 6] >> 5;\n  let skipCount = 0;\n  if (channelMode === 2) {\n    skipCount += 2;\n  } else {\n    if (channelMode & 1 && channelMode !== 1) {\n      skipCount += 2;\n    }\n    if (channelMode & 4) {\n      skipCount += 2;\n    }\n  }\n  const lfeon = (data[start + 6] << 8 | data[start + 7]) >> 12 - skipCount & 1;\n  const channelsMap = [2, 1, 2, 3, 3, 4, 4, 5];\n  const channelCount = channelsMap[channelMode] + lfeon;\n  const bsid = data[start + 5] >> 3;\n  const bsmod = data[start + 5] & 7;\n  const config = new Uint8Array([samplingRateCode << 6 | bsid << 1 | bsmod >> 2, (bsmod & 3) << 6 | channelMode << 3 | lfeon << 2 | frameSizeCode >> 4, frameSizeCode << 4 & 224]);\n  const frameDuration = 1536 / sampleRate * 9e4;\n  const stamp = pts + frameIndex * frameDuration;\n  const unit = data.subarray(start, start + frameLength);\n  track.config = config;\n  track.channelCount = channelCount;\n  track.samplerate = sampleRate;\n  track.samples.push({\n    unit,\n    pts: stamp\n  });\n  return frameLength;\n}\nvar BaseVideoParser = class {\n  constructor() {\n    this.VideoSample = null;\n  }\n  createVideoSample(key, pts, dts, debug) {\n    return {\n      key,\n      frame: false,\n      pts,\n      dts,\n      units: [],\n      debug,\n      length: 0\n    };\n  }\n  getLastNalUnit(samples) {\n    var _VideoSample;\n    let VideoSample = this.VideoSample;\n    let lastUnit;\n    if (!VideoSample || VideoSample.units.length === 0) {\n      VideoSample = samples[samples.length - 1];\n    }\n    if ((_VideoSample = VideoSample) != null && _VideoSample.units) {\n      const units = VideoSample.units;\n      lastUnit = units[units.length - 1];\n    }\n    return lastUnit;\n  }\n  pushAccessUnit(VideoSample, videoTrack) {\n    if (VideoSample.units.length && VideoSample.frame) {\n      if (VideoSample.pts === void 0) {\n        const samples = videoTrack.samples;\n        const nbSamples = samples.length;\n        if (nbSamples) {\n          const lastSample = samples[nbSamples - 1];\n          VideoSample.pts = lastSample.pts;\n          VideoSample.dts = lastSample.dts;\n        } else {\n          videoTrack.dropped++;\n          return;\n        }\n      }\n      videoTrack.samples.push(VideoSample);\n    }\n    if (VideoSample.debug.length) {\n      logger.log(VideoSample.pts + \"/\" + VideoSample.dts + \":\" + VideoSample.debug);\n    }\n  }\n};\nvar ExpGolomb = class {\n  constructor(data) {\n    this.data = void 0;\n    this.bytesAvailable = void 0;\n    this.word = void 0;\n    this.bitsAvailable = void 0;\n    this.data = data;\n    this.bytesAvailable = data.byteLength;\n    this.word = 0;\n    this.bitsAvailable = 0;\n  }\n  // ():void\n  loadWord() {\n    const data = this.data;\n    const bytesAvailable = this.bytesAvailable;\n    const position = data.byteLength - bytesAvailable;\n    const workingBytes = new Uint8Array(4);\n    const availableBytes = Math.min(4, bytesAvailable);\n    if (availableBytes === 0) {\n      throw new Error(\"no bytes available\");\n    }\n    workingBytes.set(data.subarray(position, position + availableBytes));\n    this.word = new DataView(workingBytes.buffer).getUint32(0);\n    this.bitsAvailable = availableBytes * 8;\n    this.bytesAvailable -= availableBytes;\n  }\n  // (count:int):void\n  skipBits(count) {\n    let skipBytes;\n    count = Math.min(count, this.bytesAvailable * 8 + this.bitsAvailable);\n    if (this.bitsAvailable > count) {\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    } else {\n      count -= this.bitsAvailable;\n      skipBytes = count >> 3;\n      count -= skipBytes << 3;\n      this.bytesAvailable -= skipBytes;\n      this.loadWord();\n      this.word <<= count;\n      this.bitsAvailable -= count;\n    }\n  }\n  // (size:int):uint\n  readBits(size) {\n    let bits = Math.min(this.bitsAvailable, size);\n    const valu = this.word >>> 32 - bits;\n    if (size > 32) {\n      logger.error(\"Cannot read more than 32 bits at a time\");\n    }\n    this.bitsAvailable -= bits;\n    if (this.bitsAvailable > 0) {\n      this.word <<= bits;\n    } else if (this.bytesAvailable > 0) {\n      this.loadWord();\n    } else {\n      throw new Error(\"no bits available\");\n    }\n    bits = size - bits;\n    if (bits > 0 && this.bitsAvailable) {\n      return valu << bits | this.readBits(bits);\n    } else {\n      return valu;\n    }\n  }\n  // ():uint\n  skipLZ() {\n    let leadingZeroCount;\n    for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n      if ((this.word & 2147483648 >>> leadingZeroCount) !== 0) {\n        this.word <<= leadingZeroCount;\n        this.bitsAvailable -= leadingZeroCount;\n        return leadingZeroCount;\n      }\n    }\n    this.loadWord();\n    return leadingZeroCount + this.skipLZ();\n  }\n  // ():void\n  skipUEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n  // ():void\n  skipEG() {\n    this.skipBits(1 + this.skipLZ());\n  }\n  // ():uint\n  readUEG() {\n    const clz = this.skipLZ();\n    return this.readBits(clz + 1) - 1;\n  }\n  // ():int\n  readEG() {\n    const valu = this.readUEG();\n    if (1 & valu) {\n      return 1 + valu >>> 1;\n    } else {\n      return -1 * (valu >>> 1);\n    }\n  }\n  // Some convenience functions\n  // :Boolean\n  readBoolean() {\n    return this.readBits(1) === 1;\n  }\n  // ():int\n  readUByte() {\n    return this.readBits(8);\n  }\n  // ():int\n  readUShort() {\n    return this.readBits(16);\n  }\n  // ():int\n  readUInt() {\n    return this.readBits(32);\n  }\n  /**\n   * Advance the ExpGolomb decoder past a scaling list. The scaling\n   * list is optionally transmitted as part of a sequence parameter\n   * set and is not relevant to transmuxing.\n   * @param count the number of entries in this scaling list\n   * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n   */\n  skipScalingList(count) {\n    let lastScale = 8;\n    let nextScale = 8;\n    let deltaScale;\n    for (let j4 = 0; j4 < count; j4++) {\n      if (nextScale !== 0) {\n        deltaScale = this.readEG();\n        nextScale = (lastScale + deltaScale + 256) % 256;\n      }\n      lastScale = nextScale === 0 ? lastScale : nextScale;\n    }\n  }\n  /**\n   * Read a sequence parameter set and return some interesting video\n   * properties. A sequence parameter set is the H264 metadata that\n   * describes the properties of upcoming video frames.\n   * @returns an object with configuration parsed from the\n   * sequence parameter set, including the dimensions of the\n   * associated video frames.\n   */\n  readSPS() {\n    let frameCropLeftOffset = 0;\n    let frameCropRightOffset = 0;\n    let frameCropTopOffset = 0;\n    let frameCropBottomOffset = 0;\n    let numRefFramesInPicOrderCntCycle;\n    let scalingListCount;\n    let i2;\n    const readUByte = this.readUByte.bind(this);\n    const readBits = this.readBits.bind(this);\n    const readUEG = this.readUEG.bind(this);\n    const readBoolean = this.readBoolean.bind(this);\n    const skipBits = this.skipBits.bind(this);\n    const skipEG = this.skipEG.bind(this);\n    const skipUEG = this.skipUEG.bind(this);\n    const skipScalingList = this.skipScalingList.bind(this);\n    readUByte();\n    const profileIdc = readUByte();\n    readBits(5);\n    skipBits(3);\n    readUByte();\n    skipUEG();\n    if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 || profileIdc === 244 || profileIdc === 44 || profileIdc === 83 || profileIdc === 86 || profileIdc === 118 || profileIdc === 128) {\n      const chromaFormatIdc = readUEG();\n      if (chromaFormatIdc === 3) {\n        skipBits(1);\n      }\n      skipUEG();\n      skipUEG();\n      skipBits(1);\n      if (readBoolean()) {\n        scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n        for (i2 = 0; i2 < scalingListCount; i2++) {\n          if (readBoolean()) {\n            if (i2 < 6) {\n              skipScalingList(16);\n            } else {\n              skipScalingList(64);\n            }\n          }\n        }\n      }\n    }\n    skipUEG();\n    const picOrderCntType = readUEG();\n    if (picOrderCntType === 0) {\n      readUEG();\n    } else if (picOrderCntType === 1) {\n      skipBits(1);\n      skipEG();\n      skipEG();\n      numRefFramesInPicOrderCntCycle = readUEG();\n      for (i2 = 0; i2 < numRefFramesInPicOrderCntCycle; i2++) {\n        skipEG();\n      }\n    }\n    skipUEG();\n    skipBits(1);\n    const picWidthInMbsMinus1 = readUEG();\n    const picHeightInMapUnitsMinus1 = readUEG();\n    const frameMbsOnlyFlag = readBits(1);\n    if (frameMbsOnlyFlag === 0) {\n      skipBits(1);\n    }\n    skipBits(1);\n    if (readBoolean()) {\n      frameCropLeftOffset = readUEG();\n      frameCropRightOffset = readUEG();\n      frameCropTopOffset = readUEG();\n      frameCropBottomOffset = readUEG();\n    }\n    let pixelRatio = [1, 1];\n    if (readBoolean()) {\n      if (readBoolean()) {\n        const aspectRatioIdc = readUByte();\n        switch (aspectRatioIdc) {\n          case 1:\n            pixelRatio = [1, 1];\n            break;\n          case 2:\n            pixelRatio = [12, 11];\n            break;\n          case 3:\n            pixelRatio = [10, 11];\n            break;\n          case 4:\n            pixelRatio = [16, 11];\n            break;\n          case 5:\n            pixelRatio = [40, 33];\n            break;\n          case 6:\n            pixelRatio = [24, 11];\n            break;\n          case 7:\n            pixelRatio = [20, 11];\n            break;\n          case 8:\n            pixelRatio = [32, 11];\n            break;\n          case 9:\n            pixelRatio = [80, 33];\n            break;\n          case 10:\n            pixelRatio = [18, 11];\n            break;\n          case 11:\n            pixelRatio = [15, 11];\n            break;\n          case 12:\n            pixelRatio = [64, 33];\n            break;\n          case 13:\n            pixelRatio = [160, 99];\n            break;\n          case 14:\n            pixelRatio = [4, 3];\n            break;\n          case 15:\n            pixelRatio = [3, 2];\n            break;\n          case 16:\n            pixelRatio = [2, 1];\n            break;\n          case 255: {\n            pixelRatio = [readUByte() << 8 | readUByte(), readUByte() << 8 | readUByte()];\n            break;\n          }\n        }\n      }\n    }\n    return {\n      width: Math.ceil((picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2),\n      height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - (frameMbsOnlyFlag ? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset),\n      pixelRatio\n    };\n  }\n  readSliceType() {\n    this.readUByte();\n    this.readUEG();\n    return this.readUEG();\n  }\n};\nvar AvcVideoParser = class extends BaseVideoParser {\n  parseAVCPES(track, textTrack, pes, last, duration) {\n    const units = this.parseAVCNALu(track, pes.data);\n    let VideoSample = this.VideoSample;\n    let push2;\n    let spsfound = false;\n    pes.data = null;\n    if (VideoSample && units.length && !track.audFound) {\n      this.pushAccessUnit(VideoSample, track);\n      VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts, \"\");\n    }\n    units.forEach((unit) => {\n      var _VideoSample2;\n      switch (unit.type) {\n        // NDR\n        case 1: {\n          let iskey = false;\n          push2 = true;\n          const data = unit.data;\n          if (spsfound && data.length > 4) {\n            const sliceType = new ExpGolomb(data).readSliceType();\n            if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n              iskey = true;\n            }\n          }\n          if (iskey) {\n            var _VideoSample;\n            if ((_VideoSample = VideoSample) != null && _VideoSample.frame && !VideoSample.key) {\n              this.pushAccessUnit(VideoSample, track);\n              VideoSample = this.VideoSample = null;\n            }\n          }\n          if (!VideoSample) {\n            VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts, \"\");\n          }\n          VideoSample.frame = true;\n          VideoSample.key = iskey;\n          break;\n        }\n        case 5:\n          push2 = true;\n          if ((_VideoSample2 = VideoSample) != null && _VideoSample2.frame && !VideoSample.key) {\n            this.pushAccessUnit(VideoSample, track);\n            VideoSample = this.VideoSample = null;\n          }\n          if (!VideoSample) {\n            VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts, \"\");\n          }\n          VideoSample.key = true;\n          VideoSample.frame = true;\n          break;\n        // SEI\n        case 6: {\n          push2 = true;\n          parseSEIMessageFromNALu(unit.data, 1, pes.pts, textTrack.samples);\n          break;\n        }\n        case 7: {\n          var _track$pixelRatio, _track$pixelRatio2;\n          push2 = true;\n          spsfound = true;\n          const sps = unit.data;\n          const expGolombDecoder = new ExpGolomb(sps);\n          const config = expGolombDecoder.readSPS();\n          if (!track.sps || track.width !== config.width || track.height !== config.height || ((_track$pixelRatio = track.pixelRatio) == null ? void 0 : _track$pixelRatio[0]) !== config.pixelRatio[0] || ((_track$pixelRatio2 = track.pixelRatio) == null ? void 0 : _track$pixelRatio2[1]) !== config.pixelRatio[1]) {\n            track.width = config.width;\n            track.height = config.height;\n            track.pixelRatio = config.pixelRatio;\n            track.sps = [sps];\n            track.duration = duration;\n            const codecarray = sps.subarray(1, 4);\n            let codecstring = \"avc1.\";\n            for (let i2 = 0; i2 < 3; i2++) {\n              let h3 = codecarray[i2].toString(16);\n              if (h3.length < 2) {\n                h3 = \"0\" + h3;\n              }\n              codecstring += h3;\n            }\n            track.codec = codecstring;\n          }\n          break;\n        }\n        // PPS\n        case 8:\n          push2 = true;\n          track.pps = [unit.data];\n          break;\n        // AUD\n        case 9:\n          push2 = true;\n          track.audFound = true;\n          if (VideoSample) {\n            this.pushAccessUnit(VideoSample, track);\n          }\n          VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts, \"\");\n          break;\n        // Filler Data\n        case 12:\n          push2 = true;\n          break;\n        default:\n          push2 = false;\n          if (VideoSample) {\n            VideoSample.debug += \"unknown NAL \" + unit.type + \" \";\n          }\n          break;\n      }\n      if (VideoSample && push2) {\n        const units2 = VideoSample.units;\n        units2.push(unit);\n      }\n    });\n    if (last && VideoSample) {\n      this.pushAccessUnit(VideoSample, track);\n      this.VideoSample = null;\n    }\n  }\n  parseAVCNALu(track, array) {\n    const len = array.byteLength;\n    let state = track.naluState || 0;\n    const lastState = state;\n    const units = [];\n    let i2 = 0;\n    let value;\n    let overflow;\n    let unitType;\n    let lastUnitStart = -1;\n    let lastUnitType = 0;\n    if (state === -1) {\n      lastUnitStart = 0;\n      lastUnitType = array[0] & 31;\n      state = 0;\n      i2 = 1;\n    }\n    while (i2 < len) {\n      value = array[i2++];\n      if (!state) {\n        state = value ? 0 : 1;\n        continue;\n      }\n      if (state === 1) {\n        state = value ? 0 : 2;\n        continue;\n      }\n      if (!value) {\n        state = 3;\n      } else if (value === 1) {\n        overflow = i2 - state - 1;\n        if (lastUnitStart >= 0) {\n          const unit = {\n            data: array.subarray(lastUnitStart, overflow),\n            type: lastUnitType\n          };\n          units.push(unit);\n        } else {\n          const lastUnit = this.getLastNalUnit(track.samples);\n          if (lastUnit) {\n            if (lastState && i2 <= 4 - lastState) {\n              if (lastUnit.state) {\n                lastUnit.data = lastUnit.data.subarray(0, lastUnit.data.byteLength - lastState);\n              }\n            }\n            if (overflow > 0) {\n              lastUnit.data = appendUint8Array(lastUnit.data, array.subarray(0, overflow));\n              lastUnit.state = 0;\n            }\n          }\n        }\n        if (i2 < len) {\n          unitType = array[i2] & 31;\n          lastUnitStart = i2;\n          lastUnitType = unitType;\n          state = 0;\n        } else {\n          state = -1;\n        }\n      } else {\n        state = 0;\n      }\n    }\n    if (lastUnitStart >= 0 && state >= 0) {\n      const unit = {\n        data: array.subarray(lastUnitStart, len),\n        type: lastUnitType,\n        state\n      };\n      units.push(unit);\n    }\n    if (units.length === 0) {\n      const lastUnit = this.getLastNalUnit(track.samples);\n      if (lastUnit) {\n        lastUnit.data = appendUint8Array(lastUnit.data, array);\n      }\n    }\n    track.naluState = state;\n    return units;\n  }\n};\nvar SampleAesDecrypter = class {\n  constructor(observer2, config, keyData) {\n    this.keyData = void 0;\n    this.decrypter = void 0;\n    this.keyData = keyData;\n    this.decrypter = new Decrypter(config, {\n      removePKCS7Padding: false\n    });\n  }\n  decryptBuffer(encryptedData) {\n    return this.decrypter.decrypt(encryptedData, this.keyData.key.buffer, this.keyData.iv.buffer);\n  }\n  // AAC - encrypt all full 16 bytes blocks starting from offset 16\n  decryptAacSample(samples, sampleIndex, callback) {\n    const curUnit = samples[sampleIndex].unit;\n    if (curUnit.length <= 16) {\n      return;\n    }\n    const encryptedData = curUnit.subarray(16, curUnit.length - curUnit.length % 16);\n    const encryptedBuffer = encryptedData.buffer.slice(encryptedData.byteOffset, encryptedData.byteOffset + encryptedData.length);\n    this.decryptBuffer(encryptedBuffer).then((decryptedBuffer) => {\n      const decryptedData = new Uint8Array(decryptedBuffer);\n      curUnit.set(decryptedData, 16);\n      if (!this.decrypter.isSync()) {\n        this.decryptAacSamples(samples, sampleIndex + 1, callback);\n      }\n    });\n  }\n  decryptAacSamples(samples, sampleIndex, callback) {\n    for (; ; sampleIndex++) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n      if (samples[sampleIndex].unit.length < 32) {\n        continue;\n      }\n      this.decryptAacSample(samples, sampleIndex, callback);\n      if (!this.decrypter.isSync()) {\n        return;\n      }\n    }\n  }\n  // AVC - encrypt one 16 bytes block out of ten, starting from offset 32\n  getAvcEncryptedData(decodedData) {\n    const encryptedDataLen = Math.floor((decodedData.length - 48) / 160) * 16 + 16;\n    const encryptedData = new Int8Array(encryptedDataLen);\n    let outputPos = 0;\n    for (let inputPos = 32; inputPos < decodedData.length - 16; inputPos += 160, outputPos += 16) {\n      encryptedData.set(decodedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return encryptedData;\n  }\n  getAvcDecryptedUnit(decodedData, decryptedData) {\n    const uint8DecryptedData = new Uint8Array(decryptedData);\n    let inputPos = 0;\n    for (let outputPos = 32; outputPos < decodedData.length - 16; outputPos += 160, inputPos += 16) {\n      decodedData.set(uint8DecryptedData.subarray(inputPos, inputPos + 16), outputPos);\n    }\n    return decodedData;\n  }\n  decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit) {\n    const decodedData = discardEPB(curUnit.data);\n    const encryptedData = this.getAvcEncryptedData(decodedData);\n    this.decryptBuffer(encryptedData.buffer).then((decryptedBuffer) => {\n      curUnit.data = this.getAvcDecryptedUnit(decodedData, decryptedBuffer);\n      if (!this.decrypter.isSync()) {\n        this.decryptAvcSamples(samples, sampleIndex, unitIndex + 1, callback);\n      }\n    });\n  }\n  decryptAvcSamples(samples, sampleIndex, unitIndex, callback) {\n    if (samples instanceof Uint8Array) {\n      throw new Error(\"Cannot decrypt samples of type Uint8Array\");\n    }\n    for (; ; sampleIndex++, unitIndex = 0) {\n      if (sampleIndex >= samples.length) {\n        callback();\n        return;\n      }\n      const curUnits = samples[sampleIndex].units;\n      for (; ; unitIndex++) {\n        if (unitIndex >= curUnits.length) {\n          break;\n        }\n        const curUnit = curUnits[unitIndex];\n        if (curUnit.data.length <= 48 || curUnit.type !== 1 && curUnit.type !== 5) {\n          continue;\n        }\n        this.decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit);\n        if (!this.decrypter.isSync()) {\n          return;\n        }\n      }\n    }\n  }\n};\nvar PACKET_LENGTH = 188;\nvar TSDemuxer = class _TSDemuxer {\n  constructor(observer2, config, typeSupported) {\n    this.observer = void 0;\n    this.config = void 0;\n    this.typeSupported = void 0;\n    this.sampleAes = null;\n    this.pmtParsed = false;\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this._duration = 0;\n    this._pmtId = -1;\n    this._videoTrack = void 0;\n    this._audioTrack = void 0;\n    this._id3Track = void 0;\n    this._txtTrack = void 0;\n    this.aacOverFlow = null;\n    this.remainderData = null;\n    this.videoParser = void 0;\n    this.observer = observer2;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    this.videoParser = new AvcVideoParser();\n  }\n  static probe(data) {\n    const syncOffset = _TSDemuxer.syncOffset(data);\n    if (syncOffset > 0) {\n      logger.warn(`MPEG2-TS detected but first sync word found @ offset ${syncOffset}`);\n    }\n    return syncOffset !== -1;\n  }\n  static syncOffset(data) {\n    const length = data.length;\n    let scanwindow = Math.min(PACKET_LENGTH * 5, length - PACKET_LENGTH) + 1;\n    let i2 = 0;\n    while (i2 < scanwindow) {\n      let foundPat = false;\n      let packetStart = -1;\n      let tsPackets = 0;\n      for (let j4 = i2; j4 < length; j4 += PACKET_LENGTH) {\n        if (data[j4] === 71 && (length - j4 === PACKET_LENGTH || data[j4 + PACKET_LENGTH] === 71)) {\n          tsPackets++;\n          if (packetStart === -1) {\n            packetStart = j4;\n            if (packetStart !== 0) {\n              scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;\n            }\n          }\n          if (!foundPat) {\n            foundPat = parsePID(data, j4) === 0;\n          }\n          if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j4 + PACKET_LENGTH > scanwindow)) {\n            return packetStart;\n          }\n        } else if (tsPackets) {\n          return -1;\n        } else {\n          break;\n        }\n      }\n      i2++;\n    }\n    return -1;\n  }\n  /**\n   * Creates a track model internal to demuxer used to drive remuxing input\n   */\n  static createTrack(type, duration) {\n    return {\n      container: type === \"video\" || type === \"audio\" ? \"video/mp2t\" : void 0,\n      type,\n      id: RemuxerTrackIdConfig[type],\n      pid: -1,\n      inputTimeScale: 9e4,\n      sequenceNumber: 0,\n      samples: [],\n      dropped: 0,\n      duration: type === \"audio\" ? duration : void 0\n    };\n  }\n  /**\n   * Initializes a new init segment on the demuxer/remuxer interface. Needed for discontinuities/track-switches (or at stream start)\n   * Resets all internal track instances of the demuxer.\n   */\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    this.pmtParsed = false;\n    this._pmtId = -1;\n    this._videoTrack = _TSDemuxer.createTrack(\"video\");\n    this._audioTrack = _TSDemuxer.createTrack(\"audio\", trackDuration);\n    this._id3Track = _TSDemuxer.createTrack(\"id3\");\n    this._txtTrack = _TSDemuxer.createTrack(\"text\");\n    this._audioTrack.segmentCodec = \"aac\";\n    this.aacOverFlow = null;\n    this.remainderData = null;\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this._duration = trackDuration;\n  }\n  resetTimeStamp() {\n  }\n  resetContiguity() {\n    const {\n      _audioTrack,\n      _videoTrack,\n      _id3Track\n    } = this;\n    if (_audioTrack) {\n      _audioTrack.pesData = null;\n    }\n    if (_videoTrack) {\n      _videoTrack.pesData = null;\n    }\n    if (_id3Track) {\n      _id3Track.pesData = null;\n    }\n    this.aacOverFlow = null;\n    this.remainderData = null;\n  }\n  demux(data, timeOffset, isSampleAes = false, flush = false) {\n    if (!isSampleAes) {\n      this.sampleAes = null;\n    }\n    let pes;\n    const videoTrack = this._videoTrack;\n    const audioTrack = this._audioTrack;\n    const id3Track = this._id3Track;\n    const textTrack = this._txtTrack;\n    let videoPid = videoTrack.pid;\n    let videoData = videoTrack.pesData;\n    let audioPid = audioTrack.pid;\n    let id3Pid = id3Track.pid;\n    let audioData = audioTrack.pesData;\n    let id3Data = id3Track.pesData;\n    let unknownPID = null;\n    let pmtParsed = this.pmtParsed;\n    let pmtId = this._pmtId;\n    let len = data.length;\n    if (this.remainderData) {\n      data = appendUint8Array(this.remainderData, data);\n      len = data.length;\n      this.remainderData = null;\n    }\n    if (len < PACKET_LENGTH && !flush) {\n      this.remainderData = data;\n      return {\n        audioTrack,\n        videoTrack,\n        id3Track,\n        textTrack\n      };\n    }\n    const syncOffset = Math.max(0, _TSDemuxer.syncOffset(data));\n    len -= (len - syncOffset) % PACKET_LENGTH;\n    if (len < data.byteLength && !flush) {\n      this.remainderData = new Uint8Array(data.buffer, len, data.buffer.byteLength - len);\n    }\n    let tsPacketErrors = 0;\n    for (let start = syncOffset; start < len; start += PACKET_LENGTH) {\n      if (data[start] === 71) {\n        const stt = !!(data[start + 1] & 64);\n        const pid = parsePID(data, start);\n        const atf = (data[start + 3] & 48) >> 4;\n        let offset;\n        if (atf > 1) {\n          offset = start + 5 + data[start + 4];\n          if (offset === start + PACKET_LENGTH) {\n            continue;\n          }\n        } else {\n          offset = start + 4;\n        }\n        switch (pid) {\n          case videoPid:\n            if (stt) {\n              if (videoData && (pes = parsePES(videoData))) {\n                this.videoParser.parseAVCPES(videoTrack, textTrack, pes, false, this._duration);\n              }\n              videoData = {\n                data: [],\n                size: 0\n              };\n            }\n            if (videoData) {\n              videoData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              videoData.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case audioPid:\n            if (stt) {\n              if (audioData && (pes = parsePES(audioData))) {\n                switch (audioTrack.segmentCodec) {\n                  case \"aac\":\n                    this.parseAACPES(audioTrack, pes);\n                    break;\n                  case \"mp3\":\n                    this.parseMPEGPES(audioTrack, pes);\n                    break;\n                  case \"ac3\":\n                    {\n                      this.parseAC3PES(audioTrack, pes);\n                    }\n                    break;\n                }\n              }\n              audioData = {\n                data: [],\n                size: 0\n              };\n            }\n            if (audioData) {\n              audioData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              audioData.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case id3Pid:\n            if (stt) {\n              if (id3Data && (pes = parsePES(id3Data))) {\n                this.parseID3PES(id3Track, pes);\n              }\n              id3Data = {\n                data: [],\n                size: 0\n              };\n            }\n            if (id3Data) {\n              id3Data.data.push(data.subarray(offset, start + PACKET_LENGTH));\n              id3Data.size += start + PACKET_LENGTH - offset;\n            }\n            break;\n          case 0:\n            if (stt) {\n              offset += data[offset] + 1;\n            }\n            pmtId = this._pmtId = parsePAT(data, offset);\n            break;\n          case pmtId: {\n            if (stt) {\n              offset += data[offset] + 1;\n            }\n            const parsedPIDs = parsePMT(data, offset, this.typeSupported, isSampleAes, this.observer);\n            videoPid = parsedPIDs.videoPid;\n            if (videoPid > 0) {\n              videoTrack.pid = videoPid;\n              videoTrack.segmentCodec = parsedPIDs.segmentVideoCodec;\n            }\n            audioPid = parsedPIDs.audioPid;\n            if (audioPid > 0) {\n              audioTrack.pid = audioPid;\n              audioTrack.segmentCodec = parsedPIDs.segmentAudioCodec;\n            }\n            id3Pid = parsedPIDs.id3Pid;\n            if (id3Pid > 0) {\n              id3Track.pid = id3Pid;\n            }\n            if (unknownPID !== null && !pmtParsed) {\n              logger.warn(`MPEG-TS PMT found at ${start} after unknown PID '${unknownPID}'. Backtracking to sync byte @${syncOffset} to parse all TS packets.`);\n              unknownPID = null;\n              start = syncOffset - 188;\n            }\n            pmtParsed = this.pmtParsed = true;\n            break;\n          }\n          case 17:\n          case 8191:\n            break;\n          default:\n            unknownPID = pid;\n            break;\n        }\n      } else {\n        tsPacketErrors++;\n      }\n    }\n    if (tsPacketErrors > 0) {\n      emitParsingError(this.observer, new Error(`Found ${tsPacketErrors} TS packet/s that do not start with 0x47`));\n    }\n    videoTrack.pesData = videoData;\n    audioTrack.pesData = audioData;\n    id3Track.pesData = id3Data;\n    const demuxResult = {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    };\n    if (flush) {\n      this.extractRemainingSamples(demuxResult);\n    }\n    return demuxResult;\n  }\n  flush() {\n    const {\n      remainderData\n    } = this;\n    this.remainderData = null;\n    let result;\n    if (remainderData) {\n      result = this.demux(remainderData, -1, false, true);\n    } else {\n      result = {\n        videoTrack: this._videoTrack,\n        audioTrack: this._audioTrack,\n        id3Track: this._id3Track,\n        textTrack: this._txtTrack\n      };\n    }\n    this.extractRemainingSamples(result);\n    if (this.sampleAes) {\n      return this.decrypt(result, this.sampleAes);\n    }\n    return result;\n  }\n  extractRemainingSamples(demuxResult) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = demuxResult;\n    const videoData = videoTrack.pesData;\n    const audioData = audioTrack.pesData;\n    const id3Data = id3Track.pesData;\n    let pes;\n    if (videoData && (pes = parsePES(videoData))) {\n      this.videoParser.parseAVCPES(videoTrack, textTrack, pes, true, this._duration);\n      videoTrack.pesData = null;\n    } else {\n      videoTrack.pesData = videoData;\n    }\n    if (audioData && (pes = parsePES(audioData))) {\n      switch (audioTrack.segmentCodec) {\n        case \"aac\":\n          this.parseAACPES(audioTrack, pes);\n          break;\n        case \"mp3\":\n          this.parseMPEGPES(audioTrack, pes);\n          break;\n        case \"ac3\":\n          {\n            this.parseAC3PES(audioTrack, pes);\n          }\n          break;\n      }\n      audioTrack.pesData = null;\n    } else {\n      if (audioData != null && audioData.size) {\n        logger.log(\"last AAC PES packet truncated,might overlap between fragments\");\n      }\n      audioTrack.pesData = audioData;\n    }\n    if (id3Data && (pes = parsePES(id3Data))) {\n      this.parseID3PES(id3Track, pes);\n      id3Track.pesData = null;\n    } else {\n      id3Track.pesData = id3Data;\n    }\n  }\n  demuxSampleAes(data, keyData, timeOffset) {\n    const demuxResult = this.demux(data, timeOffset, true, !this.config.progressive);\n    const sampleAes = this.sampleAes = new SampleAesDecrypter(this.observer, this.config, keyData);\n    return this.decrypt(demuxResult, sampleAes);\n  }\n  decrypt(demuxResult, sampleAes) {\n    return new Promise((resolve) => {\n      const {\n        audioTrack,\n        videoTrack\n      } = demuxResult;\n      if (audioTrack.samples && audioTrack.segmentCodec === \"aac\") {\n        sampleAes.decryptAacSamples(audioTrack.samples, 0, () => {\n          if (videoTrack.samples) {\n            sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n              resolve(demuxResult);\n            });\n          } else {\n            resolve(demuxResult);\n          }\n        });\n      } else if (videoTrack.samples) {\n        sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n          resolve(demuxResult);\n        });\n      }\n    });\n  }\n  destroy() {\n    this._duration = 0;\n  }\n  parseAACPES(track, pes) {\n    let startOffset = 0;\n    const aacOverFlow = this.aacOverFlow;\n    let data = pes.data;\n    if (aacOverFlow) {\n      this.aacOverFlow = null;\n      const frameMissingBytes = aacOverFlow.missing;\n      const sampleLength = aacOverFlow.sample.unit.byteLength;\n      if (frameMissingBytes === -1) {\n        data = appendUint8Array(aacOverFlow.sample.unit, data);\n      } else {\n        const frameOverflowBytes = sampleLength - frameMissingBytes;\n        aacOverFlow.sample.unit.set(data.subarray(0, frameMissingBytes), frameOverflowBytes);\n        track.samples.push(aacOverFlow.sample);\n        startOffset = aacOverFlow.missing;\n      }\n    }\n    let offset;\n    let len;\n    for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n      if (isHeader$1(data, offset)) {\n        break;\n      }\n    }\n    if (offset !== startOffset) {\n      let reason;\n      const recoverable = offset < len - 1;\n      if (recoverable) {\n        reason = `AAC PES did not start with ADTS header,offset:${offset}`;\n      } else {\n        reason = \"No ADTS header found in AAC PES\";\n      }\n      emitParsingError(this.observer, new Error(reason), recoverable);\n      if (!recoverable) {\n        return;\n      }\n    }\n    initTrackConfig(track, this.observer, data, offset, this.audioCodec);\n    let pts;\n    if (pes.pts !== void 0) {\n      pts = pes.pts;\n    } else if (aacOverFlow) {\n      const frameDuration = getFrameDuration(track.samplerate);\n      pts = aacOverFlow.sample.pts + frameDuration;\n    } else {\n      logger.warn(\"[tsdemuxer]: AAC PES unknown PTS\");\n      return;\n    }\n    let frameIndex = 0;\n    let frame;\n    while (offset < len) {\n      frame = appendFrame$2(track, data, offset, pts, frameIndex);\n      offset += frame.length;\n      if (!frame.missing) {\n        frameIndex++;\n        for (; offset < len - 1; offset++) {\n          if (isHeader$1(data, offset)) {\n            break;\n          }\n        }\n      } else {\n        this.aacOverFlow = frame;\n        break;\n      }\n    }\n  }\n  parseMPEGPES(track, pes) {\n    const data = pes.data;\n    const length = data.length;\n    let frameIndex = 0;\n    let offset = 0;\n    const pts = pes.pts;\n    if (pts === void 0) {\n      logger.warn(\"[tsdemuxer]: MPEG PES unknown PTS\");\n      return;\n    }\n    while (offset < length) {\n      if (isHeader(data, offset)) {\n        const frame = appendFrame$1(track, data, offset, pts, frameIndex);\n        if (frame) {\n          offset += frame.length;\n          frameIndex++;\n        } else {\n          break;\n        }\n      } else {\n        offset++;\n      }\n    }\n  }\n  parseAC3PES(track, pes) {\n    {\n      const data = pes.data;\n      const pts = pes.pts;\n      if (pts === void 0) {\n        logger.warn(\"[tsdemuxer]: AC3 PES unknown PTS\");\n        return;\n      }\n      const length = data.length;\n      let frameIndex = 0;\n      let offset = 0;\n      let parsed;\n      while (offset < length && (parsed = appendFrame(track, data, offset, pts, frameIndex++)) > 0) {\n        offset += parsed;\n      }\n    }\n  }\n  parseID3PES(id3Track, pes) {\n    if (pes.pts === void 0) {\n      logger.warn(\"[tsdemuxer]: ID3 PES unknown PTS\");\n      return;\n    }\n    const id3Sample = _extends({}, pes, {\n      type: this._videoTrack ? MetadataSchema.emsg : MetadataSchema.audioId3,\n      duration: Number.POSITIVE_INFINITY\n    });\n    id3Track.samples.push(id3Sample);\n  }\n};\nfunction parsePID(data, offset) {\n  return ((data[offset + 1] & 31) << 8) + data[offset + 2];\n}\nfunction parsePAT(data, offset) {\n  return (data[offset + 10] & 31) << 8 | data[offset + 11];\n}\nfunction parsePMT(data, offset, typeSupported, isSampleAes, observer2) {\n  const result = {\n    audioPid: -1,\n    videoPid: -1,\n    id3Pid: -1,\n    segmentVideoCodec: \"avc\",\n    segmentAudioCodec: \"aac\"\n  };\n  const sectionLength = (data[offset + 1] & 15) << 8 | data[offset + 2];\n  const tableEnd = offset + 3 + sectionLength - 4;\n  const programInfoLength = (data[offset + 10] & 15) << 8 | data[offset + 11];\n  offset += 12 + programInfoLength;\n  while (offset < tableEnd) {\n    const pid = parsePID(data, offset);\n    const esInfoLength = (data[offset + 3] & 15) << 8 | data[offset + 4];\n    switch (data[offset]) {\n      case 207:\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream(\"ADTS AAC\");\n          break;\n        }\n      /* falls through */\n      case 15:\n        if (result.audioPid === -1) {\n          result.audioPid = pid;\n        }\n        break;\n      // Packetized metadata (ID3)\n      case 21:\n        if (result.id3Pid === -1) {\n          result.id3Pid = pid;\n        }\n        break;\n      case 219:\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream(\"H.264\");\n          break;\n        }\n      /* falls through */\n      case 27:\n        if (result.videoPid === -1) {\n          result.videoPid = pid;\n          result.segmentVideoCodec = \"avc\";\n        }\n        break;\n      // ISO/IEC 11172-3 (MPEG-1 audio)\n      // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n      case 3:\n      case 4:\n        if (!typeSupported.mpeg && !typeSupported.mp3) {\n          logger.log(\"MPEG audio found, not supported in this browser\");\n        } else if (result.audioPid === -1) {\n          result.audioPid = pid;\n          result.segmentAudioCodec = \"mp3\";\n        }\n        break;\n      case 193:\n        if (!isSampleAes) {\n          logEncryptedSamplesFoundInUnencryptedStream(\"AC-3\");\n          break;\n        }\n      /* falls through */\n      case 129:\n        {\n          if (!typeSupported.ac3) {\n            logger.log(\"AC-3 audio found, not supported in this browser\");\n          } else if (result.audioPid === -1) {\n            result.audioPid = pid;\n            result.segmentAudioCodec = \"ac3\";\n          }\n        }\n        break;\n      case 6:\n        if (result.audioPid === -1 && esInfoLength > 0) {\n          let parsePos = offset + 5;\n          let remaining = esInfoLength;\n          while (remaining > 2) {\n            const descriptorId = data[parsePos];\n            switch (descriptorId) {\n              case 106:\n                {\n                  if (typeSupported.ac3 !== true) {\n                    logger.log(\"AC-3 audio found, not supported in this browser for now\");\n                  } else {\n                    result.audioPid = pid;\n                    result.segmentAudioCodec = \"ac3\";\n                  }\n                }\n                break;\n            }\n            const descriptorLen = data[parsePos + 1] + 2;\n            parsePos += descriptorLen;\n            remaining -= descriptorLen;\n          }\n        }\n        break;\n      case 194:\n      // SAMPLE-AES EC3\n      /* falls through */\n      case 135:\n        emitParsingError(observer2, new Error(\"Unsupported EC-3 in M2TS found\"));\n        return result;\n      case 36:\n        emitParsingError(observer2, new Error(\"Unsupported HEVC in M2TS found\"));\n        return result;\n    }\n    offset += esInfoLength + 5;\n  }\n  return result;\n}\nfunction emitParsingError(observer2, error, levelRetry) {\n  logger.warn(`parsing error: ${error.message}`);\n  observer2.emit(Events.ERROR, Events.ERROR, {\n    type: ErrorTypes.MEDIA_ERROR,\n    details: ErrorDetails.FRAG_PARSING_ERROR,\n    fatal: false,\n    levelRetry,\n    error,\n    reason: error.message\n  });\n}\nfunction logEncryptedSamplesFoundInUnencryptedStream(type) {\n  logger.log(`${type} with AES-128-CBC encryption found in unencrypted stream`);\n}\nfunction parsePES(stream) {\n  let i2 = 0;\n  let frag;\n  let pesLen;\n  let pesHdrLen;\n  let pesPts;\n  let pesDts;\n  const data = stream.data;\n  if (!stream || stream.size === 0) {\n    return null;\n  }\n  while (data[0].length < 19 && data.length > 1) {\n    data[0] = appendUint8Array(data[0], data[1]);\n    data.splice(1, 1);\n  }\n  frag = data[0];\n  const pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n  if (pesPrefix === 1) {\n    pesLen = (frag[4] << 8) + frag[5];\n    if (pesLen && pesLen > stream.size - 6) {\n      return null;\n    }\n    const pesFlags = frag[7];\n    if (pesFlags & 192) {\n      pesPts = (frag[9] & 14) * 536870912 + // 1 << 29\n      (frag[10] & 255) * 4194304 + // 1 << 22\n      (frag[11] & 254) * 16384 + // 1 << 14\n      (frag[12] & 255) * 128 + // 1 << 7\n      (frag[13] & 254) / 2;\n      if (pesFlags & 64) {\n        pesDts = (frag[14] & 14) * 536870912 + // 1 << 29\n        (frag[15] & 255) * 4194304 + // 1 << 22\n        (frag[16] & 254) * 16384 + // 1 << 14\n        (frag[17] & 255) * 128 + // 1 << 7\n        (frag[18] & 254) / 2;\n        if (pesPts - pesDts > 60 * 9e4) {\n          logger.warn(`${Math.round((pesPts - pesDts) / 9e4)}s delta between PTS and DTS, align them`);\n          pesPts = pesDts;\n        }\n      } else {\n        pesDts = pesPts;\n      }\n    }\n    pesHdrLen = frag[8];\n    let payloadStartOffset = pesHdrLen + 9;\n    if (stream.size <= payloadStartOffset) {\n      return null;\n    }\n    stream.size -= payloadStartOffset;\n    const pesData = new Uint8Array(stream.size);\n    for (let j4 = 0, dataLen = data.length; j4 < dataLen; j4++) {\n      frag = data[j4];\n      let len = frag.byteLength;\n      if (payloadStartOffset) {\n        if (payloadStartOffset > len) {\n          payloadStartOffset -= len;\n          continue;\n        } else {\n          frag = frag.subarray(payloadStartOffset);\n          len -= payloadStartOffset;\n          payloadStartOffset = 0;\n        }\n      }\n      pesData.set(frag, i2);\n      i2 += len;\n    }\n    if (pesLen) {\n      pesLen -= pesHdrLen + 3;\n    }\n    return {\n      data: pesData,\n      pts: pesPts,\n      dts: pesDts,\n      len: pesLen\n    };\n  }\n  return null;\n}\nvar MP3Demuxer = class extends BaseAudioDemuxer {\n  resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n    super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n    this._audioTrack = {\n      container: \"audio/mpeg\",\n      type: \"audio\",\n      id: 2,\n      pid: -1,\n      sequenceNumber: 0,\n      segmentCodec: \"mp3\",\n      samples: [],\n      manifestCodec: audioCodec,\n      duration: trackDuration,\n      inputTimeScale: 9e4,\n      dropped: 0\n    };\n  }\n  static probe(data) {\n    if (!data) {\n      return false;\n    }\n    const id3Data = getID3Data(data, 0);\n    let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n    if (id3Data && data[offset] === 11 && data[offset + 1] === 119 && getTimeStamp(id3Data) !== void 0 && // check the bsid to confirm ac-3 or ec-3 (not mp3)\n    getAudioBSID(data, offset) <= 16) {\n      return false;\n    }\n    for (let length = data.length; offset < length; offset++) {\n      if (probe(data, offset)) {\n        logger.log(\"MPEG Audio sync word found !\");\n        return true;\n      }\n    }\n    return false;\n  }\n  canParse(data, offset) {\n    return canParse(data, offset);\n  }\n  appendFrame(track, data, offset) {\n    if (this.basePTS === null) {\n      return;\n    }\n    return appendFrame$1(track, data, offset, this.basePTS, this.frameIndex);\n  }\n};\nvar AAC = class {\n  static getSilentFrame(codec, channelCount) {\n    switch (codec) {\n      case \"mp4a.40.2\":\n        if (channelCount === 1) {\n          return new Uint8Array([0, 200, 0, 128, 35, 128]);\n        } else if (channelCount === 2) {\n          return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]);\n        } else if (channelCount === 3) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]);\n        } else if (channelCount === 4) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]);\n        } else if (channelCount === 5) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]);\n        } else if (channelCount === 6) {\n          return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]);\n        }\n        break;\n      // handle HE-AAC below (mp4a.40.5 / mp4a.40.29)\n      default:\n        if (channelCount === 1) {\n          return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);\n        } else if (channelCount === 2) {\n          return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);\n        } else if (channelCount === 3) {\n          return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);\n        }\n        break;\n    }\n    return void 0;\n  }\n};\nvar UINT32_MAX = Math.pow(2, 32) - 1;\nvar MP4 = class _MP4 {\n  static init() {\n    _MP4.types = {\n      avc1: [],\n      // codingname\n      avcC: [],\n      btrt: [],\n      dinf: [],\n      dref: [],\n      esds: [],\n      ftyp: [],\n      hdlr: [],\n      mdat: [],\n      mdhd: [],\n      mdia: [],\n      mfhd: [],\n      minf: [],\n      moof: [],\n      moov: [],\n      mp4a: [],\n      \".mp3\": [],\n      dac3: [],\n      \"ac-3\": [],\n      mvex: [],\n      mvhd: [],\n      pasp: [],\n      sdtp: [],\n      stbl: [],\n      stco: [],\n      stsc: [],\n      stsd: [],\n      stsz: [],\n      stts: [],\n      tfdt: [],\n      tfhd: [],\n      traf: [],\n      trak: [],\n      trun: [],\n      trex: [],\n      tkhd: [],\n      vmhd: [],\n      smhd: []\n    };\n    let i2;\n    for (i2 in _MP4.types) {\n      if (_MP4.types.hasOwnProperty(i2)) {\n        _MP4.types[i2] = [i2.charCodeAt(0), i2.charCodeAt(1), i2.charCodeAt(2), i2.charCodeAt(3)];\n      }\n    }\n    const videoHdlr = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      // pre_defined\n      118,\n      105,\n      100,\n      101,\n      // handler_type: 'vide'\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      86,\n      105,\n      100,\n      101,\n      111,\n      72,\n      97,\n      110,\n      100,\n      108,\n      101,\n      114,\n      0\n      // name: 'VideoHandler'\n    ]);\n    const audioHdlr = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      // pre_defined\n      115,\n      111,\n      117,\n      110,\n      // handler_type: 'soun'\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      83,\n      111,\n      117,\n      110,\n      100,\n      72,\n      97,\n      110,\n      100,\n      108,\n      101,\n      114,\n      0\n      // name: 'SoundHandler'\n    ]);\n    _MP4.HDLR_TYPES = {\n      video: videoHdlr,\n      audio: audioHdlr\n    };\n    const dref = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      1,\n      // entry_count\n      0,\n      0,\n      0,\n      12,\n      // entry_size\n      117,\n      114,\n      108,\n      32,\n      // 'url' type\n      0,\n      // version 0\n      0,\n      0,\n      1\n      // entry_flags\n    ]);\n    const stco = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0\n      // entry_count\n    ]);\n    _MP4.STTS = _MP4.STSC = _MP4.STCO = stco;\n    _MP4.STSZ = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      // sample_size\n      0,\n      0,\n      0,\n      0\n      // sample_count\n    ]);\n    _MP4.VMHD = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      1,\n      // flags\n      0,\n      0,\n      // graphicsmode\n      0,\n      0,\n      0,\n      0,\n      0,\n      0\n      // opcolor\n    ]);\n    _MP4.SMHD = new Uint8Array([\n      0,\n      // version\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      // balance\n      0,\n      0\n      // reserved\n    ]);\n    _MP4.STSD = new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      1\n    ]);\n    const majorBrand = new Uint8Array([105, 115, 111, 109]);\n    const avc1Brand = new Uint8Array([97, 118, 99, 49]);\n    const minorVersion = new Uint8Array([0, 0, 0, 1]);\n    _MP4.FTYP = _MP4.box(_MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n    _MP4.DINF = _MP4.box(_MP4.types.dinf, _MP4.box(_MP4.types.dref, dref));\n  }\n  static box(type, ...payload) {\n    let size = 8;\n    let i2 = payload.length;\n    const len = i2;\n    while (i2--) {\n      size += payload[i2].byteLength;\n    }\n    const result = new Uint8Array(size);\n    result[0] = size >> 24 & 255;\n    result[1] = size >> 16 & 255;\n    result[2] = size >> 8 & 255;\n    result[3] = size & 255;\n    result.set(type, 4);\n    for (i2 = 0, size = 8; i2 < len; i2++) {\n      result.set(payload[i2], size);\n      size += payload[i2].byteLength;\n    }\n    return result;\n  }\n  static hdlr(type) {\n    return _MP4.box(_MP4.types.hdlr, _MP4.HDLR_TYPES[type]);\n  }\n  static mdat(data) {\n    return _MP4.box(_MP4.types.mdat, data);\n  }\n  static mdhd(timescale, duration) {\n    duration *= timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return _MP4.box(_MP4.types.mdhd, new Uint8Array([\n      1,\n      // version 1\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      2,\n      // creation_time\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      3,\n      // modification_time\n      timescale >> 24 & 255,\n      timescale >> 16 & 255,\n      timescale >> 8 & 255,\n      timescale & 255,\n      // timescale\n      upperWordDuration >> 24,\n      upperWordDuration >> 16 & 255,\n      upperWordDuration >> 8 & 255,\n      upperWordDuration & 255,\n      lowerWordDuration >> 24,\n      lowerWordDuration >> 16 & 255,\n      lowerWordDuration >> 8 & 255,\n      lowerWordDuration & 255,\n      85,\n      196,\n      // 'und' language (undetermined)\n      0,\n      0\n    ]));\n  }\n  static mdia(track) {\n    return _MP4.box(_MP4.types.mdia, _MP4.mdhd(track.timescale, track.duration), _MP4.hdlr(track.type), _MP4.minf(track));\n  }\n  static mfhd(sequenceNumber) {\n    return _MP4.box(_MP4.types.mfhd, new Uint8Array([\n      0,\n      0,\n      0,\n      0,\n      // flags\n      sequenceNumber >> 24,\n      sequenceNumber >> 16 & 255,\n      sequenceNumber >> 8 & 255,\n      sequenceNumber & 255\n      // sequence_number\n    ]));\n  }\n  static minf(track) {\n    if (track.type === \"audio\") {\n      return _MP4.box(_MP4.types.minf, _MP4.box(_MP4.types.smhd, _MP4.SMHD), _MP4.DINF, _MP4.stbl(track));\n    } else {\n      return _MP4.box(_MP4.types.minf, _MP4.box(_MP4.types.vmhd, _MP4.VMHD), _MP4.DINF, _MP4.stbl(track));\n    }\n  }\n  static moof(sn, baseMediaDecodeTime, track) {\n    return _MP4.box(_MP4.types.moof, _MP4.mfhd(sn), _MP4.traf(track, baseMediaDecodeTime));\n  }\n  static moov(tracks) {\n    let i2 = tracks.length;\n    const boxes = [];\n    while (i2--) {\n      boxes[i2] = _MP4.trak(tracks[i2]);\n    }\n    return _MP4.box.apply(null, [_MP4.types.moov, _MP4.mvhd(tracks[0].timescale, tracks[0].duration)].concat(boxes).concat(_MP4.mvex(tracks)));\n  }\n  static mvex(tracks) {\n    let i2 = tracks.length;\n    const boxes = [];\n    while (i2--) {\n      boxes[i2] = _MP4.trex(tracks[i2]);\n    }\n    return _MP4.box.apply(null, [_MP4.types.mvex, ...boxes]);\n  }\n  static mvhd(timescale, duration) {\n    duration *= timescale;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    const bytes = new Uint8Array([\n      1,\n      // version 1\n      0,\n      0,\n      0,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      2,\n      // creation_time\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      3,\n      // modification_time\n      timescale >> 24 & 255,\n      timescale >> 16 & 255,\n      timescale >> 8 & 255,\n      timescale & 255,\n      // timescale\n      upperWordDuration >> 24,\n      upperWordDuration >> 16 & 255,\n      upperWordDuration >> 8 & 255,\n      upperWordDuration & 255,\n      lowerWordDuration >> 24,\n      lowerWordDuration >> 16 & 255,\n      lowerWordDuration >> 8 & 255,\n      lowerWordDuration & 255,\n      0,\n      1,\n      0,\n      0,\n      // 1.0 rate\n      1,\n      0,\n      // 1.0 volume\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      64,\n      0,\n      0,\n      0,\n      // transformation: unity matrix\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      // pre_defined\n      255,\n      255,\n      255,\n      255\n      // next_track_ID\n    ]);\n    return _MP4.box(_MP4.types.mvhd, bytes);\n  }\n  static sdtp(track) {\n    const samples = track.samples || [];\n    const bytes = new Uint8Array(4 + samples.length);\n    let i2;\n    let flags;\n    for (i2 = 0; i2 < samples.length; i2++) {\n      flags = samples[i2].flags;\n      bytes[i2 + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy;\n    }\n    return _MP4.box(_MP4.types.sdtp, bytes);\n  }\n  static stbl(track) {\n    return _MP4.box(_MP4.types.stbl, _MP4.stsd(track), _MP4.box(_MP4.types.stts, _MP4.STTS), _MP4.box(_MP4.types.stsc, _MP4.STSC), _MP4.box(_MP4.types.stsz, _MP4.STSZ), _MP4.box(_MP4.types.stco, _MP4.STCO));\n  }\n  static avc1(track) {\n    let sps = [];\n    let pps = [];\n    let i2;\n    let data;\n    let len;\n    for (i2 = 0; i2 < track.sps.length; i2++) {\n      data = track.sps[i2];\n      len = data.byteLength;\n      sps.push(len >>> 8 & 255);\n      sps.push(len & 255);\n      sps = sps.concat(Array.prototype.slice.call(data));\n    }\n    for (i2 = 0; i2 < track.pps.length; i2++) {\n      data = track.pps[i2];\n      len = data.byteLength;\n      pps.push(len >>> 8 & 255);\n      pps.push(len & 255);\n      pps = pps.concat(Array.prototype.slice.call(data));\n    }\n    const avcc = _MP4.box(_MP4.types.avcC, new Uint8Array([\n      1,\n      // version\n      sps[3],\n      // profile\n      sps[4],\n      // profile compat\n      sps[5],\n      // level\n      252 | 3,\n      // lengthSizeMinusOne, hard-coded to 4 bytes\n      224 | track.sps.length\n      // 3bit reserved (111) + numOfSequenceParameterSets\n    ].concat(sps).concat([\n      track.pps.length\n      // numOfPictureParameterSets\n    ]).concat(pps)));\n    const width = track.width;\n    const height = track.height;\n    const hSpacing = track.pixelRatio[0];\n    const vSpacing = track.pixelRatio[1];\n    return _MP4.box(\n      _MP4.types.avc1,\n      new Uint8Array([\n        0,\n        0,\n        0,\n        // reserved\n        0,\n        0,\n        0,\n        // reserved\n        0,\n        1,\n        // data_reference_index\n        0,\n        0,\n        // pre_defined\n        0,\n        0,\n        // reserved\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        // pre_defined\n        width >> 8 & 255,\n        width & 255,\n        // width\n        height >> 8 & 255,\n        height & 255,\n        // height\n        0,\n        72,\n        0,\n        0,\n        // horizresolution\n        0,\n        72,\n        0,\n        0,\n        // vertresolution\n        0,\n        0,\n        0,\n        0,\n        // reserved\n        0,\n        1,\n        // frame_count\n        18,\n        100,\n        97,\n        105,\n        108,\n        // dailymotion/hls.js\n        121,\n        109,\n        111,\n        116,\n        105,\n        111,\n        110,\n        47,\n        104,\n        108,\n        115,\n        46,\n        106,\n        115,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        0,\n        // compressorname\n        0,\n        24,\n        // depth = 24\n        17,\n        17\n      ]),\n      // pre_defined = -1\n      avcc,\n      _MP4.box(_MP4.types.btrt, new Uint8Array([\n        0,\n        28,\n        156,\n        128,\n        // bufferSizeDB\n        0,\n        45,\n        198,\n        192,\n        // maxBitrate\n        0,\n        45,\n        198,\n        192\n      ])),\n      // avgBitrate\n      _MP4.box(_MP4.types.pasp, new Uint8Array([\n        hSpacing >> 24,\n        // hSpacing\n        hSpacing >> 16 & 255,\n        hSpacing >> 8 & 255,\n        hSpacing & 255,\n        vSpacing >> 24,\n        // vSpacing\n        vSpacing >> 16 & 255,\n        vSpacing >> 8 & 255,\n        vSpacing & 255\n      ]))\n    );\n  }\n  static esds(track) {\n    const configlen = track.config.length;\n    return new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      3,\n      // descriptor_type\n      23 + configlen,\n      // length\n      0,\n      1,\n      // es_id\n      0,\n      // stream_priority\n      4,\n      // descriptor_type\n      15 + configlen,\n      // length\n      64,\n      // codec : mpeg4_audio\n      21,\n      // stream_type\n      0,\n      0,\n      0,\n      // buffer_size\n      0,\n      0,\n      0,\n      0,\n      // maxBitrate\n      0,\n      0,\n      0,\n      0,\n      // avgBitrate\n      5\n      // descriptor_type\n    ].concat([configlen]).concat(track.config).concat([6, 1, 2]));\n  }\n  static audioStsd(track) {\n    const samplerate = track.samplerate;\n    return new Uint8Array([\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      1,\n      // data_reference_index\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      track.channelCount,\n      // channelcount\n      0,\n      16,\n      // sampleSize:16bits\n      0,\n      0,\n      0,\n      0,\n      // reserved2\n      samplerate >> 8 & 255,\n      samplerate & 255,\n      //\n      0,\n      0\n    ]);\n  }\n  static mp4a(track) {\n    return _MP4.box(_MP4.types.mp4a, _MP4.audioStsd(track), _MP4.box(_MP4.types.esds, _MP4.esds(track)));\n  }\n  static mp3(track) {\n    return _MP4.box(_MP4.types[\".mp3\"], _MP4.audioStsd(track));\n  }\n  static ac3(track) {\n    return _MP4.box(_MP4.types[\"ac-3\"], _MP4.audioStsd(track), _MP4.box(_MP4.types.dac3, track.config));\n  }\n  static stsd(track) {\n    if (track.type === \"audio\") {\n      if (track.segmentCodec === \"mp3\" && track.codec === \"mp3\") {\n        return _MP4.box(_MP4.types.stsd, _MP4.STSD, _MP4.mp3(track));\n      }\n      if (track.segmentCodec === \"ac3\") {\n        return _MP4.box(_MP4.types.stsd, _MP4.STSD, _MP4.ac3(track));\n      }\n      return _MP4.box(_MP4.types.stsd, _MP4.STSD, _MP4.mp4a(track));\n    } else {\n      return _MP4.box(_MP4.types.stsd, _MP4.STSD, _MP4.avc1(track));\n    }\n  }\n  static tkhd(track) {\n    const id = track.id;\n    const duration = track.duration * track.timescale;\n    const width = track.width;\n    const height = track.height;\n    const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n    const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n    return _MP4.box(_MP4.types.tkhd, new Uint8Array([\n      1,\n      // version 1\n      0,\n      0,\n      7,\n      // flags\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      2,\n      // creation_time\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      3,\n      // modification_time\n      id >> 24 & 255,\n      id >> 16 & 255,\n      id >> 8 & 255,\n      id & 255,\n      // track_ID\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      upperWordDuration >> 24,\n      upperWordDuration >> 16 & 255,\n      upperWordDuration >> 8 & 255,\n      upperWordDuration & 255,\n      lowerWordDuration >> 24,\n      lowerWordDuration >> 16 & 255,\n      lowerWordDuration >> 8 & 255,\n      lowerWordDuration & 255,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      // reserved\n      0,\n      0,\n      // layer\n      0,\n      0,\n      // alternate_group\n      0,\n      0,\n      // non-audio track volume\n      0,\n      0,\n      // reserved\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      0,\n      64,\n      0,\n      0,\n      0,\n      // transformation: unity matrix\n      width >> 8 & 255,\n      width & 255,\n      0,\n      0,\n      // width\n      height >> 8 & 255,\n      height & 255,\n      0,\n      0\n      // height\n    ]));\n  }\n  static traf(track, baseMediaDecodeTime) {\n    const sampleDependencyTable = _MP4.sdtp(track);\n    const id = track.id;\n    const upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n    const lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n    return _MP4.box(\n      _MP4.types.traf,\n      _MP4.box(_MP4.types.tfhd, new Uint8Array([\n        0,\n        // version 0\n        0,\n        0,\n        0,\n        // flags\n        id >> 24,\n        id >> 16 & 255,\n        id >> 8 & 255,\n        id & 255\n        // track_ID\n      ])),\n      _MP4.box(_MP4.types.tfdt, new Uint8Array([\n        1,\n        // version 1\n        0,\n        0,\n        0,\n        // flags\n        upperWordBaseMediaDecodeTime >> 24,\n        upperWordBaseMediaDecodeTime >> 16 & 255,\n        upperWordBaseMediaDecodeTime >> 8 & 255,\n        upperWordBaseMediaDecodeTime & 255,\n        lowerWordBaseMediaDecodeTime >> 24,\n        lowerWordBaseMediaDecodeTime >> 16 & 255,\n        lowerWordBaseMediaDecodeTime >> 8 & 255,\n        lowerWordBaseMediaDecodeTime & 255\n      ])),\n      _MP4.trun(track, sampleDependencyTable.length + 16 + // tfhd\n      20 + // tfdt\n      8 + // traf header\n      16 + // mfhd\n      8 + // moof header\n      8),\n      // mdat header\n      sampleDependencyTable\n    );\n  }\n  /**\n   * Generate a track box.\n   * @param track a track definition\n   */\n  static trak(track) {\n    track.duration = track.duration || 4294967295;\n    return _MP4.box(_MP4.types.trak, _MP4.tkhd(track), _MP4.mdia(track));\n  }\n  static trex(track) {\n    const id = track.id;\n    return _MP4.box(_MP4.types.trex, new Uint8Array([\n      0,\n      // version 0\n      0,\n      0,\n      0,\n      // flags\n      id >> 24,\n      id >> 16 & 255,\n      id >> 8 & 255,\n      id & 255,\n      // track_ID\n      0,\n      0,\n      0,\n      1,\n      // default_sample_description_index\n      0,\n      0,\n      0,\n      0,\n      // default_sample_duration\n      0,\n      0,\n      0,\n      0,\n      // default_sample_size\n      0,\n      1,\n      0,\n      1\n      // default_sample_flags\n    ]));\n  }\n  static trun(track, offset) {\n    const samples = track.samples || [];\n    const len = samples.length;\n    const arraylen = 12 + 16 * len;\n    const array = new Uint8Array(arraylen);\n    let i2;\n    let sample;\n    let duration;\n    let size;\n    let flags;\n    let cts;\n    offset += 8 + arraylen;\n    array.set([\n      track.type === \"video\" ? 1 : 0,\n      // version 1 for video with signed-int sample_composition_time_offset\n      0,\n      15,\n      1,\n      // flags\n      len >>> 24 & 255,\n      len >>> 16 & 255,\n      len >>> 8 & 255,\n      len & 255,\n      // sample_count\n      offset >>> 24 & 255,\n      offset >>> 16 & 255,\n      offset >>> 8 & 255,\n      offset & 255\n      // data_offset\n    ], 0);\n    for (i2 = 0; i2 < len; i2++) {\n      sample = samples[i2];\n      duration = sample.duration;\n      size = sample.size;\n      flags = sample.flags;\n      cts = sample.cts;\n      array.set([\n        duration >>> 24 & 255,\n        duration >>> 16 & 255,\n        duration >>> 8 & 255,\n        duration & 255,\n        // sample_duration\n        size >>> 24 & 255,\n        size >>> 16 & 255,\n        size >>> 8 & 255,\n        size & 255,\n        // sample_size\n        flags.isLeading << 2 | flags.dependsOn,\n        flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.paddingValue << 1 | flags.isNonSync,\n        flags.degradPrio & 240 << 8,\n        flags.degradPrio & 15,\n        // sample_flags\n        cts >>> 24 & 255,\n        cts >>> 16 & 255,\n        cts >>> 8 & 255,\n        cts & 255\n        // sample_composition_time_offset\n      ], 12 + 16 * i2);\n    }\n    return _MP4.box(_MP4.types.trun, array);\n  }\n  static initSegment(tracks) {\n    if (!_MP4.types) {\n      _MP4.init();\n    }\n    const movie = _MP4.moov(tracks);\n    const result = appendUint8Array(_MP4.FTYP, movie);\n    return result;\n  }\n};\nMP4.types = void 0;\nMP4.HDLR_TYPES = void 0;\nMP4.STTS = void 0;\nMP4.STSC = void 0;\nMP4.STCO = void 0;\nMP4.STSZ = void 0;\nMP4.VMHD = void 0;\nMP4.SMHD = void 0;\nMP4.STSD = void 0;\nMP4.FTYP = void 0;\nMP4.DINF = void 0;\nvar MPEG_TS_CLOCK_FREQ_HZ = 9e4;\nfunction toTimescaleFromBase(baseTime, destScale, srcBase = 1, round = false) {\n  const result = baseTime * destScale * srcBase;\n  return round ? Math.round(result) : result;\n}\nfunction toTimescaleFromScale(baseTime, destScale, srcScale = 1, round = false) {\n  return toTimescaleFromBase(baseTime, destScale, 1 / srcScale, round);\n}\nfunction toMsFromMpegTsClock(baseTime, round = false) {\n  return toTimescaleFromBase(baseTime, 1e3, 1 / MPEG_TS_CLOCK_FREQ_HZ, round);\n}\nfunction toMpegTsClockFromTimescale(baseTime, srcScale = 1) {\n  return toTimescaleFromBase(baseTime, MPEG_TS_CLOCK_FREQ_HZ, 1 / srcScale);\n}\nvar MAX_SILENT_FRAME_DURATION = 10 * 1e3;\nvar AAC_SAMPLES_PER_FRAME = 1024;\nvar MPEG_AUDIO_SAMPLE_PER_FRAME = 1152;\nvar AC3_SAMPLES_PER_FRAME = 1536;\nvar chromeVersion = null;\nvar safariWebkitVersion = null;\nvar MP4Remuxer = class {\n  constructor(observer2, config, typeSupported, vendor = \"\") {\n    this.observer = void 0;\n    this.config = void 0;\n    this.typeSupported = void 0;\n    this.ISGenerated = false;\n    this._initPTS = null;\n    this._initDTS = null;\n    this.nextAvcDts = null;\n    this.nextAudioPts = null;\n    this.videoSampleDuration = null;\n    this.isAudioContiguous = false;\n    this.isVideoContiguous = false;\n    this.videoTrackConfig = void 0;\n    this.observer = observer2;\n    this.config = config;\n    this.typeSupported = typeSupported;\n    this.ISGenerated = false;\n    if (chromeVersion === null) {\n      const userAgent = navigator.userAgent || \"\";\n      const result = userAgent.match(/Chrome\\/(\\d+)/i);\n      chromeVersion = result ? parseInt(result[1]) : 0;\n    }\n    if (safariWebkitVersion === null) {\n      const result = navigator.userAgent.match(/Safari\\/(\\d+)/i);\n      safariWebkitVersion = result ? parseInt(result[1]) : 0;\n    }\n  }\n  destroy() {\n    this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null;\n  }\n  resetTimeStamp(defaultTimeStamp) {\n    logger.log(\"[mp4-remuxer]: initPTS & initDTS reset\");\n    this._initPTS = this._initDTS = defaultTimeStamp;\n  }\n  resetNextTimestamp() {\n    logger.log(\"[mp4-remuxer]: reset next timestamp\");\n    this.isVideoContiguous = false;\n    this.isAudioContiguous = false;\n  }\n  resetInitSegment() {\n    logger.log(\"[mp4-remuxer]: ISGenerated flag reset\");\n    this.ISGenerated = false;\n    this.videoTrackConfig = void 0;\n  }\n  getVideoStartPts(videoSamples) {\n    let rolloverDetected = false;\n    const firstPts = videoSamples[0].pts;\n    const startPTS = videoSamples.reduce((minPTS, sample) => {\n      let pts = sample.pts;\n      let delta = pts - minPTS;\n      if (delta < -4294967296) {\n        rolloverDetected = true;\n        pts = normalizePts(pts, firstPts);\n        delta = pts - minPTS;\n      }\n      if (delta > 0) {\n        return minPTS;\n      }\n      return pts;\n    }, firstPts);\n    if (rolloverDetected) {\n      logger.debug(\"PTS rollover detected\");\n    }\n    return startPTS;\n  }\n  remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, flush, playlistType) {\n    let video;\n    let audio;\n    let initSegment;\n    let text;\n    let id3;\n    let independent;\n    let audioTimeOffset = timeOffset;\n    let videoTimeOffset = timeOffset;\n    const hasAudio = audioTrack.pid > -1;\n    const hasVideo = videoTrack.pid > -1;\n    const length = videoTrack.samples.length;\n    const enoughAudioSamples = audioTrack.samples.length > 0;\n    const enoughVideoSamples = flush && length > 0 || length > 1;\n    const canRemuxAvc = (!hasAudio || enoughAudioSamples) && (!hasVideo || enoughVideoSamples) || this.ISGenerated || flush;\n    if (canRemuxAvc) {\n      if (this.ISGenerated) {\n        var _videoTrack$pixelRati, _config$pixelRatio, _videoTrack$pixelRati2, _config$pixelRatio2;\n        const config = this.videoTrackConfig;\n        if (config && (videoTrack.width !== config.width || videoTrack.height !== config.height || ((_videoTrack$pixelRati = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati[0]) !== ((_config$pixelRatio = config.pixelRatio) == null ? void 0 : _config$pixelRatio[0]) || ((_videoTrack$pixelRati2 = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati2[1]) !== ((_config$pixelRatio2 = config.pixelRatio) == null ? void 0 : _config$pixelRatio2[1]))) {\n          this.resetInitSegment();\n        }\n      } else {\n        initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n      }\n      const isVideoContiguous = this.isVideoContiguous;\n      let firstKeyFrameIndex = -1;\n      let firstKeyFramePTS;\n      if (enoughVideoSamples) {\n        firstKeyFrameIndex = findKeyframeIndex(videoTrack.samples);\n        if (!isVideoContiguous && this.config.forceKeyFrameOnDiscontinuity) {\n          independent = true;\n          if (firstKeyFrameIndex > 0) {\n            logger.warn(`[mp4-remuxer]: Dropped ${firstKeyFrameIndex} out of ${length} video samples due to a missing keyframe`);\n            const startPTS = this.getVideoStartPts(videoTrack.samples);\n            videoTrack.samples = videoTrack.samples.slice(firstKeyFrameIndex);\n            videoTrack.dropped += firstKeyFrameIndex;\n            videoTimeOffset += (videoTrack.samples[0].pts - startPTS) / videoTrack.inputTimeScale;\n            firstKeyFramePTS = videoTimeOffset;\n          } else if (firstKeyFrameIndex === -1) {\n            logger.warn(`[mp4-remuxer]: No keyframe found out of ${length} video samples`);\n            independent = false;\n          }\n        }\n      }\n      if (this.ISGenerated) {\n        if (enoughAudioSamples && enoughVideoSamples) {\n          const startPTS = this.getVideoStartPts(videoTrack.samples);\n          const tsDelta = normalizePts(audioTrack.samples[0].pts, startPTS) - startPTS;\n          const audiovideoTimestampDelta = tsDelta / videoTrack.inputTimeScale;\n          audioTimeOffset += Math.max(0, audiovideoTimestampDelta);\n          videoTimeOffset += Math.max(0, -audiovideoTimestampDelta);\n        }\n        if (enoughAudioSamples) {\n          if (!audioTrack.samplerate) {\n            logger.warn(\"[mp4-remuxer]: regenerate InitSegment as audio detected\");\n            initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n          }\n          audio = this.remuxAudio(audioTrack, audioTimeOffset, this.isAudioContiguous, accurateTimeOffset, hasVideo || enoughVideoSamples || playlistType === PlaylistLevelType.AUDIO ? videoTimeOffset : void 0);\n          if (enoughVideoSamples) {\n            const audioTrackLength = audio ? audio.endPTS - audio.startPTS : 0;\n            if (!videoTrack.inputTimeScale) {\n              logger.warn(\"[mp4-remuxer]: regenerate InitSegment as video detected\");\n              initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n            }\n            video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, audioTrackLength);\n          }\n        } else if (enoughVideoSamples) {\n          video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, 0);\n        }\n        if (video) {\n          video.firstKeyFrame = firstKeyFrameIndex;\n          video.independent = firstKeyFrameIndex !== -1;\n          video.firstKeyFramePTS = firstKeyFramePTS;\n        }\n      }\n    }\n    if (this.ISGenerated && this._initPTS && this._initDTS) {\n      if (id3Track.samples.length) {\n        id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, this._initPTS, this._initDTS);\n      }\n      if (textTrack.samples.length) {\n        text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, this._initPTS);\n      }\n    }\n    return {\n      audio,\n      video,\n      initSegment,\n      independent,\n      text,\n      id3\n    };\n  }\n  generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset) {\n    const audioSamples = audioTrack.samples;\n    const videoSamples = videoTrack.samples;\n    const typeSupported = this.typeSupported;\n    const tracks = {};\n    const _initPTS = this._initPTS;\n    let computePTSDTS = !_initPTS || accurateTimeOffset;\n    let container = \"audio/mp4\";\n    let initPTS;\n    let initDTS;\n    let timescale;\n    if (computePTSDTS) {\n      initPTS = initDTS = Infinity;\n    }\n    if (audioTrack.config && audioSamples.length) {\n      audioTrack.timescale = audioTrack.samplerate;\n      switch (audioTrack.segmentCodec) {\n        case \"mp3\":\n          if (typeSupported.mpeg) {\n            container = \"audio/mpeg\";\n            audioTrack.codec = \"\";\n          } else if (typeSupported.mp3) {\n            audioTrack.codec = \"mp3\";\n          }\n          break;\n        case \"ac3\":\n          audioTrack.codec = \"ac-3\";\n          break;\n      }\n      tracks.audio = {\n        id: \"audio\",\n        container,\n        codec: audioTrack.codec,\n        initSegment: audioTrack.segmentCodec === \"mp3\" && typeSupported.mpeg ? new Uint8Array(0) : MP4.initSegment([audioTrack]),\n        metadata: {\n          channelCount: audioTrack.channelCount\n        }\n      };\n      if (computePTSDTS) {\n        timescale = audioTrack.inputTimeScale;\n        if (!_initPTS || timescale !== _initPTS.timescale) {\n          initPTS = initDTS = audioSamples[0].pts - Math.round(timescale * timeOffset);\n        } else {\n          computePTSDTS = false;\n        }\n      }\n    }\n    if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n      videoTrack.timescale = videoTrack.inputTimeScale;\n      tracks.video = {\n        id: \"main\",\n        container: \"video/mp4\",\n        codec: videoTrack.codec,\n        initSegment: MP4.initSegment([videoTrack]),\n        metadata: {\n          width: videoTrack.width,\n          height: videoTrack.height\n        }\n      };\n      if (computePTSDTS) {\n        timescale = videoTrack.inputTimeScale;\n        if (!_initPTS || timescale !== _initPTS.timescale) {\n          const startPTS = this.getVideoStartPts(videoSamples);\n          const startOffset = Math.round(timescale * timeOffset);\n          initDTS = Math.min(initDTS, normalizePts(videoSamples[0].dts, startPTS) - startOffset);\n          initPTS = Math.min(initPTS, startPTS - startOffset);\n        } else {\n          computePTSDTS = false;\n        }\n      }\n      this.videoTrackConfig = {\n        width: videoTrack.width,\n        height: videoTrack.height,\n        pixelRatio: videoTrack.pixelRatio\n      };\n    }\n    if (Object.keys(tracks).length) {\n      this.ISGenerated = true;\n      if (computePTSDTS) {\n        this._initPTS = {\n          baseTime: initPTS,\n          timescale\n        };\n        this._initDTS = {\n          baseTime: initDTS,\n          timescale\n        };\n      } else {\n        initPTS = timescale = void 0;\n      }\n      return {\n        tracks,\n        initPTS,\n        timescale\n      };\n    }\n  }\n  remuxVideo(track, timeOffset, contiguous, audioTrackLength) {\n    const timeScale = track.inputTimeScale;\n    const inputSamples = track.samples;\n    const outputSamples = [];\n    const nbSamples = inputSamples.length;\n    const initPTS = this._initPTS;\n    let nextAvcDts = this.nextAvcDts;\n    let offset = 8;\n    let mp4SampleDuration = this.videoSampleDuration;\n    let firstDTS;\n    let lastDTS;\n    let minPTS = Number.POSITIVE_INFINITY;\n    let maxPTS = Number.NEGATIVE_INFINITY;\n    let sortSamples = false;\n    if (!contiguous || nextAvcDts === null) {\n      const pts = timeOffset * timeScale;\n      const cts = inputSamples[0].pts - normalizePts(inputSamples[0].dts, inputSamples[0].pts);\n      if (chromeVersion && nextAvcDts !== null && Math.abs(pts - cts - nextAvcDts) < 15e3) {\n        contiguous = true;\n      } else {\n        nextAvcDts = pts - cts;\n      }\n    }\n    const initTime = initPTS.baseTime * timeScale / initPTS.timescale;\n    for (let i2 = 0; i2 < nbSamples; i2++) {\n      const sample = inputSamples[i2];\n      sample.pts = normalizePts(sample.pts - initTime, nextAvcDts);\n      sample.dts = normalizePts(sample.dts - initTime, nextAvcDts);\n      if (sample.dts < inputSamples[i2 > 0 ? i2 - 1 : i2].dts) {\n        sortSamples = true;\n      }\n    }\n    if (sortSamples) {\n      inputSamples.sort(function(a2, b4) {\n        const deltadts = a2.dts - b4.dts;\n        const deltapts = a2.pts - b4.pts;\n        return deltadts || deltapts;\n      });\n    }\n    firstDTS = inputSamples[0].dts;\n    lastDTS = inputSamples[inputSamples.length - 1].dts;\n    const inputDuration = lastDTS - firstDTS;\n    const averageSampleDuration = inputDuration ? Math.round(inputDuration / (nbSamples - 1)) : mp4SampleDuration || track.inputTimeScale / 30;\n    if (contiguous) {\n      const delta = firstDTS - nextAvcDts;\n      const foundHole = delta > averageSampleDuration;\n      const foundOverlap = delta < -1;\n      if (foundHole || foundOverlap) {\n        if (foundHole) {\n          logger.warn(`AVC: ${toMsFromMpegTsClock(delta, true)} ms (${delta}dts) hole between fragments detected at ${timeOffset.toFixed(3)}`);\n        } else {\n          logger.warn(`AVC: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected at ${timeOffset.toFixed(3)}`);\n        }\n        if (!foundOverlap || nextAvcDts >= inputSamples[0].pts || chromeVersion) {\n          firstDTS = nextAvcDts;\n          const firstPTS = inputSamples[0].pts - delta;\n          if (foundHole) {\n            inputSamples[0].dts = firstDTS;\n            inputSamples[0].pts = firstPTS;\n          } else {\n            for (let i2 = 0; i2 < inputSamples.length; i2++) {\n              if (inputSamples[i2].dts > firstPTS) {\n                break;\n              }\n              inputSamples[i2].dts -= delta;\n              inputSamples[i2].pts -= delta;\n            }\n          }\n          logger.log(`Video: Initial PTS/DTS adjusted: ${toMsFromMpegTsClock(firstPTS, true)}/${toMsFromMpegTsClock(firstDTS, true)}, delta: ${toMsFromMpegTsClock(delta, true)} ms`);\n        }\n      }\n    }\n    firstDTS = Math.max(0, firstDTS);\n    let nbNalu = 0;\n    let naluLen = 0;\n    let dtsStep = firstDTS;\n    for (let i2 = 0; i2 < nbSamples; i2++) {\n      const sample = inputSamples[i2];\n      const units = sample.units;\n      const nbUnits = units.length;\n      let sampleLen = 0;\n      for (let j4 = 0; j4 < nbUnits; j4++) {\n        sampleLen += units[j4].data.length;\n      }\n      naluLen += sampleLen;\n      nbNalu += nbUnits;\n      sample.length = sampleLen;\n      if (sample.dts < dtsStep) {\n        sample.dts = dtsStep;\n        dtsStep += averageSampleDuration / 4 | 0 || 1;\n      } else {\n        dtsStep = sample.dts;\n      }\n      minPTS = Math.min(sample.pts, minPTS);\n      maxPTS = Math.max(sample.pts, maxPTS);\n    }\n    lastDTS = inputSamples[nbSamples - 1].dts;\n    const mdatSize = naluLen + 4 * nbNalu + 8;\n    let mdat;\n    try {\n      mdat = new Uint8Array(mdatSize);\n    } catch (err) {\n      this.observer.emit(Events.ERROR, Events.ERROR, {\n        type: ErrorTypes.MUX_ERROR,\n        details: ErrorDetails.REMUX_ALLOC_ERROR,\n        fatal: false,\n        error: err,\n        bytes: mdatSize,\n        reason: `fail allocating video mdat ${mdatSize}`\n      });\n      return;\n    }\n    const view = new DataView(mdat.buffer);\n    view.setUint32(0, mdatSize);\n    mdat.set(MP4.types.mdat, 4);\n    let stretchedLastFrame = false;\n    let minDtsDelta = Number.POSITIVE_INFINITY;\n    let minPtsDelta = Number.POSITIVE_INFINITY;\n    let maxDtsDelta = Number.NEGATIVE_INFINITY;\n    let maxPtsDelta = Number.NEGATIVE_INFINITY;\n    for (let i2 = 0; i2 < nbSamples; i2++) {\n      const VideoSample = inputSamples[i2];\n      const VideoSampleUnits = VideoSample.units;\n      let mp4SampleLength = 0;\n      for (let j4 = 0, nbUnits = VideoSampleUnits.length; j4 < nbUnits; j4++) {\n        const unit = VideoSampleUnits[j4];\n        const unitData = unit.data;\n        const unitDataLen = unit.data.byteLength;\n        view.setUint32(offset, unitDataLen);\n        offset += 4;\n        mdat.set(unitData, offset);\n        offset += unitDataLen;\n        mp4SampleLength += 4 + unitDataLen;\n      }\n      let ptsDelta;\n      if (i2 < nbSamples - 1) {\n        mp4SampleDuration = inputSamples[i2 + 1].dts - VideoSample.dts;\n        ptsDelta = inputSamples[i2 + 1].pts - VideoSample.pts;\n      } else {\n        const config = this.config;\n        const lastFrameDuration = i2 > 0 ? VideoSample.dts - inputSamples[i2 - 1].dts : averageSampleDuration;\n        ptsDelta = i2 > 0 ? VideoSample.pts - inputSamples[i2 - 1].pts : averageSampleDuration;\n        if (config.stretchShortVideoTrack && this.nextAudioPts !== null) {\n          const gapTolerance = Math.floor(config.maxBufferHole * timeScale);\n          const deltaToFrameEnd = (audioTrackLength ? minPTS + audioTrackLength * timeScale : this.nextAudioPts) - VideoSample.pts;\n          if (deltaToFrameEnd > gapTolerance) {\n            mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n            if (mp4SampleDuration < 0) {\n              mp4SampleDuration = lastFrameDuration;\n            } else {\n              stretchedLastFrame = true;\n            }\n            logger.log(`[mp4-remuxer]: It is approximately ${deltaToFrameEnd / 90} ms to the next segment; using duration ${mp4SampleDuration / 90} ms for the last video frame.`);\n          } else {\n            mp4SampleDuration = lastFrameDuration;\n          }\n        } else {\n          mp4SampleDuration = lastFrameDuration;\n        }\n      }\n      const compositionTimeOffset = Math.round(VideoSample.pts - VideoSample.dts);\n      minDtsDelta = Math.min(minDtsDelta, mp4SampleDuration);\n      maxDtsDelta = Math.max(maxDtsDelta, mp4SampleDuration);\n      minPtsDelta = Math.min(minPtsDelta, ptsDelta);\n      maxPtsDelta = Math.max(maxPtsDelta, ptsDelta);\n      outputSamples.push(new Mp4Sample(VideoSample.key, mp4SampleDuration, mp4SampleLength, compositionTimeOffset));\n    }\n    if (outputSamples.length) {\n      if (chromeVersion) {\n        if (chromeVersion < 70) {\n          const flags = outputSamples[0].flags;\n          flags.dependsOn = 2;\n          flags.isNonSync = 0;\n        }\n      } else if (safariWebkitVersion) {\n        if (maxPtsDelta - minPtsDelta < maxDtsDelta - minDtsDelta && averageSampleDuration / maxDtsDelta < 0.025 && outputSamples[0].cts === 0) {\n          logger.warn(\"Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.\");\n          let dts = firstDTS;\n          for (let i2 = 0, len = outputSamples.length; i2 < len; i2++) {\n            const nextDts = dts + outputSamples[i2].duration;\n            const pts = dts + outputSamples[i2].cts;\n            if (i2 < len - 1) {\n              const nextPts = nextDts + outputSamples[i2 + 1].cts;\n              outputSamples[i2].duration = nextPts - pts;\n            } else {\n              outputSamples[i2].duration = i2 ? outputSamples[i2 - 1].duration : averageSampleDuration;\n            }\n            outputSamples[i2].cts = 0;\n            dts = nextDts;\n          }\n        }\n      }\n    }\n    mp4SampleDuration = stretchedLastFrame || !mp4SampleDuration ? averageSampleDuration : mp4SampleDuration;\n    this.nextAvcDts = nextAvcDts = lastDTS + mp4SampleDuration;\n    this.videoSampleDuration = mp4SampleDuration;\n    this.isVideoContiguous = true;\n    const moof = MP4.moof(track.sequenceNumber++, firstDTS, _extends({}, track, {\n      samples: outputSamples\n    }));\n    const type = \"video\";\n    const data = {\n      data1: moof,\n      data2: mdat,\n      startPTS: minPTS / timeScale,\n      endPTS: (maxPTS + mp4SampleDuration) / timeScale,\n      startDTS: firstDTS / timeScale,\n      endDTS: nextAvcDts / timeScale,\n      type,\n      hasAudio: false,\n      hasVideo: true,\n      nb: outputSamples.length,\n      dropped: track.dropped\n    };\n    track.samples = [];\n    track.dropped = 0;\n    return data;\n  }\n  getSamplesPerFrame(track) {\n    switch (track.segmentCodec) {\n      case \"mp3\":\n        return MPEG_AUDIO_SAMPLE_PER_FRAME;\n      case \"ac3\":\n        return AC3_SAMPLES_PER_FRAME;\n      default:\n        return AAC_SAMPLES_PER_FRAME;\n    }\n  }\n  remuxAudio(track, timeOffset, contiguous, accurateTimeOffset, videoTimeOffset) {\n    const inputTimeScale = track.inputTimeScale;\n    const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n    const scaleFactor = inputTimeScale / mp4timeScale;\n    const mp4SampleDuration = this.getSamplesPerFrame(track);\n    const inputSampleDuration = mp4SampleDuration * scaleFactor;\n    const initPTS = this._initPTS;\n    const rawMPEG = track.segmentCodec === \"mp3\" && this.typeSupported.mpeg;\n    const outputSamples = [];\n    const alignedWithVideo = videoTimeOffset !== void 0;\n    let inputSamples = track.samples;\n    let offset = rawMPEG ? 0 : 8;\n    let nextAudioPts = this.nextAudioPts || -1;\n    const timeOffsetMpegTS = timeOffset * inputTimeScale;\n    const initTime = initPTS.baseTime * inputTimeScale / initPTS.timescale;\n    this.isAudioContiguous = contiguous = contiguous || inputSamples.length && nextAudioPts > 0 && (accurateTimeOffset && Math.abs(timeOffsetMpegTS - nextAudioPts) < 9e3 || Math.abs(normalizePts(inputSamples[0].pts - initTime, timeOffsetMpegTS) - nextAudioPts) < 20 * inputSampleDuration);\n    inputSamples.forEach(function(sample) {\n      sample.pts = normalizePts(sample.pts - initTime, timeOffsetMpegTS);\n    });\n    if (!contiguous || nextAudioPts < 0) {\n      inputSamples = inputSamples.filter((sample) => sample.pts >= 0);\n      if (!inputSamples.length) {\n        return;\n      }\n      if (videoTimeOffset === 0) {\n        nextAudioPts = 0;\n      } else if (accurateTimeOffset && !alignedWithVideo) {\n        nextAudioPts = Math.max(0, timeOffsetMpegTS);\n      } else {\n        nextAudioPts = inputSamples[0].pts;\n      }\n    }\n    if (track.segmentCodec === \"aac\") {\n      const maxAudioFramesDrift = this.config.maxAudioFramesDrift;\n      for (let i2 = 0, nextPts = nextAudioPts; i2 < inputSamples.length; i2++) {\n        const sample = inputSamples[i2];\n        const pts = sample.pts;\n        const delta = pts - nextPts;\n        const duration = Math.abs(1e3 * delta / inputTimeScale);\n        if (delta <= -maxAudioFramesDrift * inputSampleDuration && alignedWithVideo) {\n          if (i2 === 0) {\n            logger.warn(`Audio frame @ ${(pts / inputTimeScale).toFixed(3)}s overlaps nextAudioPts by ${Math.round(1e3 * delta / inputTimeScale)} ms.`);\n            this.nextAudioPts = nextAudioPts = nextPts = pts;\n          }\n        } else if (delta >= maxAudioFramesDrift * inputSampleDuration && duration < MAX_SILENT_FRAME_DURATION && alignedWithVideo) {\n          let missing = Math.round(delta / inputSampleDuration);\n          nextPts = pts - missing * inputSampleDuration;\n          if (nextPts < 0) {\n            missing--;\n            nextPts += inputSampleDuration;\n          }\n          if (i2 === 0) {\n            this.nextAudioPts = nextAudioPts = nextPts;\n          }\n          logger.warn(`[mp4-remuxer]: Injecting ${missing} audio frame @ ${(nextPts / inputTimeScale).toFixed(3)}s due to ${Math.round(1e3 * delta / inputTimeScale)} ms gap.`);\n          for (let j4 = 0; j4 < missing; j4++) {\n            const newStamp = Math.max(nextPts, 0);\n            let fillFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n            if (!fillFrame) {\n              logger.log(\"[mp4-remuxer]: Unable to get silent frame for given audio codec; duplicating last frame instead.\");\n              fillFrame = sample.unit.subarray();\n            }\n            inputSamples.splice(i2, 0, {\n              unit: fillFrame,\n              pts: newStamp\n            });\n            nextPts += inputSampleDuration;\n            i2++;\n          }\n        }\n        sample.pts = nextPts;\n        nextPts += inputSampleDuration;\n      }\n    }\n    let firstPTS = null;\n    let lastPTS = null;\n    let mdat;\n    let mdatSize = 0;\n    let sampleLength = inputSamples.length;\n    while (sampleLength--) {\n      mdatSize += inputSamples[sampleLength].unit.byteLength;\n    }\n    for (let j4 = 0, _nbSamples = inputSamples.length; j4 < _nbSamples; j4++) {\n      const audioSample = inputSamples[j4];\n      const unit = audioSample.unit;\n      let pts = audioSample.pts;\n      if (lastPTS !== null) {\n        const prevSample = outputSamples[j4 - 1];\n        prevSample.duration = Math.round((pts - lastPTS) / scaleFactor);\n      } else {\n        if (contiguous && track.segmentCodec === \"aac\") {\n          pts = nextAudioPts;\n        }\n        firstPTS = pts;\n        if (mdatSize > 0) {\n          mdatSize += offset;\n          try {\n            mdat = new Uint8Array(mdatSize);\n          } catch (err) {\n            this.observer.emit(Events.ERROR, Events.ERROR, {\n              type: ErrorTypes.MUX_ERROR,\n              details: ErrorDetails.REMUX_ALLOC_ERROR,\n              fatal: false,\n              error: err,\n              bytes: mdatSize,\n              reason: `fail allocating audio mdat ${mdatSize}`\n            });\n            return;\n          }\n          if (!rawMPEG) {\n            const view = new DataView(mdat.buffer);\n            view.setUint32(0, mdatSize);\n            mdat.set(MP4.types.mdat, 4);\n          }\n        } else {\n          return;\n        }\n      }\n      mdat.set(unit, offset);\n      const unitLen = unit.byteLength;\n      offset += unitLen;\n      outputSamples.push(new Mp4Sample(true, mp4SampleDuration, unitLen, 0));\n      lastPTS = pts;\n    }\n    const nbSamples = outputSamples.length;\n    if (!nbSamples) {\n      return;\n    }\n    const lastSample = outputSamples[outputSamples.length - 1];\n    this.nextAudioPts = nextAudioPts = lastPTS + scaleFactor * lastSample.duration;\n    const moof = rawMPEG ? new Uint8Array(0) : MP4.moof(track.sequenceNumber++, firstPTS / scaleFactor, _extends({}, track, {\n      samples: outputSamples\n    }));\n    track.samples = [];\n    const start = firstPTS / inputTimeScale;\n    const end = nextAudioPts / inputTimeScale;\n    const type = \"audio\";\n    const audioData = {\n      data1: moof,\n      data2: mdat,\n      startPTS: start,\n      endPTS: end,\n      startDTS: start,\n      endDTS: end,\n      type,\n      hasAudio: true,\n      hasVideo: false,\n      nb: nbSamples\n    };\n    this.isAudioContiguous = true;\n    return audioData;\n  }\n  remuxEmptyAudio(track, timeOffset, contiguous, videoData) {\n    const inputTimeScale = track.inputTimeScale;\n    const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n    const scaleFactor = inputTimeScale / mp4timeScale;\n    const nextAudioPts = this.nextAudioPts;\n    const initDTS = this._initDTS;\n    const init90kHz = initDTS.baseTime * 9e4 / initDTS.timescale;\n    const startDTS = (nextAudioPts !== null ? nextAudioPts : videoData.startDTS * inputTimeScale) + init90kHz;\n    const endDTS = videoData.endDTS * inputTimeScale + init90kHz;\n    const frameDuration = scaleFactor * AAC_SAMPLES_PER_FRAME;\n    const nbSamples = Math.ceil((endDTS - startDTS) / frameDuration);\n    const silentFrame = AAC.getSilentFrame(track.manifestCodec || track.codec, track.channelCount);\n    logger.warn(\"[mp4-remuxer]: remux empty Audio\");\n    if (!silentFrame) {\n      logger.trace(\"[mp4-remuxer]: Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec\");\n      return;\n    }\n    const samples = [];\n    for (let i2 = 0; i2 < nbSamples; i2++) {\n      const stamp = startDTS + i2 * frameDuration;\n      samples.push({\n        unit: silentFrame,\n        pts: stamp,\n        dts: stamp\n      });\n    }\n    track.samples = samples;\n    return this.remuxAudio(track, timeOffset, contiguous, false);\n  }\n};\nfunction normalizePts(value, reference) {\n  let offset;\n  if (reference === null) {\n    return value;\n  }\n  if (reference < value) {\n    offset = -8589934592;\n  } else {\n    offset = 8589934592;\n  }\n  while (Math.abs(value - reference) > 4294967296) {\n    value += offset;\n  }\n  return value;\n}\nfunction findKeyframeIndex(samples) {\n  for (let i2 = 0; i2 < samples.length; i2++) {\n    if (samples[i2].key) {\n      return i2;\n    }\n  }\n  return -1;\n}\nfunction flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {\n  const length = track.samples.length;\n  if (!length) {\n    return;\n  }\n  const inputTimeScale = track.inputTimeScale;\n  for (let index = 0; index < length; index++) {\n    const sample = track.samples[index];\n    sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n    sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n  }\n  const samples = track.samples;\n  track.samples = [];\n  return {\n    samples\n  };\n}\nfunction flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {\n  const length = track.samples.length;\n  if (!length) {\n    return;\n  }\n  const inputTimeScale = track.inputTimeScale;\n  for (let index = 0; index < length; index++) {\n    const sample = track.samples[index];\n    sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n  }\n  track.samples.sort((a2, b4) => a2.pts - b4.pts);\n  const samples = track.samples;\n  track.samples = [];\n  return {\n    samples\n  };\n}\nvar Mp4Sample = class {\n  constructor(isKeyframe, duration, size, cts) {\n    this.size = void 0;\n    this.duration = void 0;\n    this.cts = void 0;\n    this.flags = void 0;\n    this.duration = duration;\n    this.size = size;\n    this.cts = cts;\n    this.flags = {\n      isLeading: 0,\n      isDependedOn: 0,\n      hasRedundancy: 0,\n      degradPrio: 0,\n      dependsOn: isKeyframe ? 2 : 1,\n      isNonSync: isKeyframe ? 0 : 1\n    };\n  }\n};\nvar PassThroughRemuxer = class {\n  constructor() {\n    this.emitInitSegment = false;\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this.initData = void 0;\n    this.initPTS = null;\n    this.initTracks = void 0;\n    this.lastEndTime = null;\n  }\n  destroy() {\n  }\n  resetTimeStamp(defaultInitPTS) {\n    this.initPTS = defaultInitPTS;\n    this.lastEndTime = null;\n  }\n  resetNextTimestamp() {\n    this.lastEndTime = null;\n  }\n  resetInitSegment(initSegment, audioCodec, videoCodec, decryptdata) {\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this.generateInitSegment(patchEncyptionData(initSegment, decryptdata));\n    this.emitInitSegment = true;\n  }\n  generateInitSegment(initSegment) {\n    let {\n      audioCodec,\n      videoCodec\n    } = this;\n    if (!(initSegment != null && initSegment.byteLength)) {\n      this.initTracks = void 0;\n      this.initData = void 0;\n      return;\n    }\n    const initData = this.initData = parseInitSegment(initSegment);\n    if (initData.audio) {\n      audioCodec = getParsedTrackCodec(initData.audio, ElementaryStreamTypes.AUDIO);\n    }\n    if (initData.video) {\n      videoCodec = getParsedTrackCodec(initData.video, ElementaryStreamTypes.VIDEO);\n    }\n    const tracks = {};\n    if (initData.audio && initData.video) {\n      tracks.audiovideo = {\n        container: \"video/mp4\",\n        codec: audioCodec + \",\" + videoCodec,\n        initSegment,\n        id: \"main\"\n      };\n    } else if (initData.audio) {\n      tracks.audio = {\n        container: \"audio/mp4\",\n        codec: audioCodec,\n        initSegment,\n        id: \"audio\"\n      };\n    } else if (initData.video) {\n      tracks.video = {\n        container: \"video/mp4\",\n        codec: videoCodec,\n        initSegment,\n        id: \"main\"\n      };\n    } else {\n      logger.warn(\"[passthrough-remuxer.ts]: initSegment does not contain moov or trak boxes.\");\n    }\n    this.initTracks = tracks;\n  }\n  remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset) {\n    var _initData, _initData2;\n    let {\n      initPTS,\n      lastEndTime\n    } = this;\n    const result = {\n      audio: void 0,\n      video: void 0,\n      text: textTrack,\n      id3: id3Track,\n      initSegment: void 0\n    };\n    if (!isFiniteNumber(lastEndTime)) {\n      lastEndTime = this.lastEndTime = timeOffset || 0;\n    }\n    const data = videoTrack.samples;\n    if (!(data != null && data.length)) {\n      return result;\n    }\n    const initSegment = {\n      initPTS: void 0,\n      timescale: 1\n    };\n    let initData = this.initData;\n    if (!((_initData = initData) != null && _initData.length)) {\n      this.generateInitSegment(data);\n      initData = this.initData;\n    }\n    if (!((_initData2 = initData) != null && _initData2.length)) {\n      logger.warn(\"[passthrough-remuxer.ts]: Failed to generate initSegment.\");\n      return result;\n    }\n    if (this.emitInitSegment) {\n      initSegment.tracks = this.initTracks;\n      this.emitInitSegment = false;\n    }\n    const duration = getDuration(data, initData);\n    const startDTS = getStartDTS(initData, data);\n    const decodeTime = startDTS === null ? timeOffset : startDTS;\n    if (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || initSegment.timescale !== initPTS.timescale && accurateTimeOffset) {\n      initSegment.initPTS = decodeTime - timeOffset;\n      if (initPTS && initPTS.timescale === 1) {\n        logger.warn(`Adjusting initPTS by ${initSegment.initPTS - initPTS.baseTime}`);\n      }\n      this.initPTS = initPTS = {\n        baseTime: initSegment.initPTS,\n        timescale: 1\n      };\n    }\n    const startTime = audioTrack ? decodeTime - initPTS.baseTime / initPTS.timescale : lastEndTime;\n    const endTime = startTime + duration;\n    offsetStartDTS(initData, data, initPTS.baseTime / initPTS.timescale);\n    if (duration > 0) {\n      this.lastEndTime = endTime;\n    } else {\n      logger.warn(\"Duration parsed from mp4 should be greater than zero\");\n      this.resetNextTimestamp();\n    }\n    const hasAudio = !!initData.audio;\n    const hasVideo = !!initData.video;\n    let type = \"\";\n    if (hasAudio) {\n      type += \"audio\";\n    }\n    if (hasVideo) {\n      type += \"video\";\n    }\n    const track = {\n      data1: data,\n      startPTS: startTime,\n      startDTS: startTime,\n      endPTS: endTime,\n      endDTS: endTime,\n      type,\n      hasAudio,\n      hasVideo,\n      nb: 1,\n      dropped: 0\n    };\n    result.audio = track.type === \"audio\" ? track : void 0;\n    result.video = track.type !== \"audio\" ? track : void 0;\n    result.initSegment = initSegment;\n    result.id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, initPTS, initPTS);\n    if (textTrack.samples.length) {\n      result.text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, initPTS);\n    }\n    return result;\n  }\n};\nfunction isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {\n  if (initPTS === null) {\n    return true;\n  }\n  const minDuration = Math.max(duration, 1);\n  const startTime = startDTS - initPTS.baseTime / initPTS.timescale;\n  return Math.abs(startTime - timeOffset) > minDuration;\n}\nfunction getParsedTrackCodec(track, type) {\n  const parsedCodec = track == null ? void 0 : track.codec;\n  if (parsedCodec && parsedCodec.length > 4) {\n    return parsedCodec;\n  }\n  if (type === ElementaryStreamTypes.AUDIO) {\n    if (parsedCodec === \"ec-3\" || parsedCodec === \"ac-3\" || parsedCodec === \"alac\") {\n      return parsedCodec;\n    }\n    if (parsedCodec === \"fLaC\" || parsedCodec === \"Opus\") {\n      const preferManagedMediaSource = false;\n      return getCodecCompatibleName(parsedCodec, preferManagedMediaSource);\n    }\n    const result = \"mp4a.40.5\";\n    logger.info(`Parsed audio codec \"${parsedCodec}\" or audio object type not handled. Using \"${result}\"`);\n    return result;\n  }\n  logger.warn(`Unhandled video codec \"${parsedCodec}\"`);\n  if (parsedCodec === \"hvc1\" || parsedCodec === \"hev1\") {\n    return \"hvc1.1.6.L120.90\";\n  }\n  if (parsedCodec === \"av01\") {\n    return \"av01.0.04M.08\";\n  }\n  return \"avc1.42e01e\";\n}\nvar now;\ntry {\n  now = self.performance.now.bind(self.performance);\n} catch (err) {\n  logger.debug(\"Unable to use Performance API on this environment\");\n  now = optionalSelf == null ? void 0 : optionalSelf.Date.now;\n}\nvar muxConfig = [{\n  demux: MP4Demuxer,\n  remux: PassThroughRemuxer\n}, {\n  demux: TSDemuxer,\n  remux: MP4Remuxer\n}, {\n  demux: AACDemuxer,\n  remux: MP4Remuxer\n}, {\n  demux: MP3Demuxer,\n  remux: MP4Remuxer\n}];\n{\n  muxConfig.splice(2, 0, {\n    demux: AC3Demuxer,\n    remux: MP4Remuxer\n  });\n}\nvar Transmuxer = class {\n  constructor(observer2, typeSupported, config, vendor, id) {\n    this.async = false;\n    this.observer = void 0;\n    this.typeSupported = void 0;\n    this.config = void 0;\n    this.vendor = void 0;\n    this.id = void 0;\n    this.demuxer = void 0;\n    this.remuxer = void 0;\n    this.decrypter = void 0;\n    this.probe = void 0;\n    this.decryptionPromise = null;\n    this.transmuxConfig = void 0;\n    this.currentTransmuxState = void 0;\n    this.observer = observer2;\n    this.typeSupported = typeSupported;\n    this.config = config;\n    this.vendor = vendor;\n    this.id = id;\n  }\n  configure(transmuxConfig) {\n    this.transmuxConfig = transmuxConfig;\n    if (this.decrypter) {\n      this.decrypter.reset();\n    }\n  }\n  push(data, decryptdata, chunkMeta, state) {\n    const stats = chunkMeta.transmuxing;\n    stats.executeStart = now();\n    let uintData = new Uint8Array(data);\n    const {\n      currentTransmuxState,\n      transmuxConfig\n    } = this;\n    if (state) {\n      this.currentTransmuxState = state;\n    }\n    const {\n      contiguous,\n      discontinuity,\n      trackSwitch,\n      accurateTimeOffset,\n      timeOffset,\n      initSegmentChange\n    } = state || currentTransmuxState;\n    const {\n      audioCodec,\n      videoCodec,\n      defaultInitPts,\n      duration,\n      initSegmentData\n    } = transmuxConfig;\n    const keyData = getEncryptionType(uintData, decryptdata);\n    if (keyData && keyData.method === \"AES-128\") {\n      const decrypter = this.getDecrypter();\n      if (decrypter.isSync()) {\n        let decryptedData = decrypter.softwareDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer);\n        const loadingParts = chunkMeta.part > -1;\n        if (loadingParts) {\n          decryptedData = decrypter.flush();\n        }\n        if (!decryptedData) {\n          stats.executeEnd = now();\n          return emptyResult(chunkMeta);\n        }\n        uintData = new Uint8Array(decryptedData);\n      } else {\n        this.decryptionPromise = decrypter.webCryptoDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer).then((decryptedData) => {\n          const result2 = this.push(decryptedData, null, chunkMeta);\n          this.decryptionPromise = null;\n          return result2;\n        });\n        return this.decryptionPromise;\n      }\n    }\n    const resetMuxers = this.needsProbing(discontinuity, trackSwitch);\n    if (resetMuxers) {\n      const error = this.configureTransmuxer(uintData);\n      if (error) {\n        logger.warn(`[transmuxer] ${error.message}`);\n        this.observer.emit(Events.ERROR, Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.FRAG_PARSING_ERROR,\n          fatal: false,\n          error,\n          reason: error.message\n        });\n        stats.executeEnd = now();\n        return emptyResult(chunkMeta);\n      }\n    }\n    if (discontinuity || trackSwitch || initSegmentChange || resetMuxers) {\n      this.resetInitSegment(initSegmentData, audioCodec, videoCodec, duration, decryptdata);\n    }\n    if (discontinuity || initSegmentChange || resetMuxers) {\n      this.resetInitialTimestamp(defaultInitPts);\n    }\n    if (!contiguous) {\n      this.resetContiguity();\n    }\n    const result = this.transmux(uintData, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n    const currentState = this.currentTransmuxState;\n    currentState.contiguous = true;\n    currentState.discontinuity = false;\n    currentState.trackSwitch = false;\n    stats.executeEnd = now();\n    return result;\n  }\n  // Due to data caching, flush calls can produce more than one TransmuxerResult (hence the Array type)\n  flush(chunkMeta) {\n    const stats = chunkMeta.transmuxing;\n    stats.executeStart = now();\n    const {\n      decrypter,\n      currentTransmuxState,\n      decryptionPromise\n    } = this;\n    if (decryptionPromise) {\n      return decryptionPromise.then(() => {\n        return this.flush(chunkMeta);\n      });\n    }\n    const transmuxResults = [];\n    const {\n      timeOffset\n    } = currentTransmuxState;\n    if (decrypter) {\n      const decryptedData = decrypter.flush();\n      if (decryptedData) {\n        transmuxResults.push(this.push(decryptedData, null, chunkMeta));\n      }\n    }\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      stats.executeEnd = now();\n      return [emptyResult(chunkMeta)];\n    }\n    const demuxResultOrPromise = demuxer.flush(timeOffset);\n    if (isPromise(demuxResultOrPromise)) {\n      return demuxResultOrPromise.then((demuxResult) => {\n        this.flushRemux(transmuxResults, demuxResult, chunkMeta);\n        return transmuxResults;\n      });\n    }\n    this.flushRemux(transmuxResults, demuxResultOrPromise, chunkMeta);\n    return transmuxResults;\n  }\n  flushRemux(transmuxResults, demuxResult, chunkMeta) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = demuxResult;\n    const {\n      accurateTimeOffset,\n      timeOffset\n    } = this.currentTransmuxState;\n    logger.log(`[transmuxer.ts]: Flushed fragment ${chunkMeta.sn}${chunkMeta.part > -1 ? \" p: \" + chunkMeta.part : \"\"} of level ${chunkMeta.level}`);\n    const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, true, this.id);\n    transmuxResults.push({\n      remuxResult,\n      chunkMeta\n    });\n    chunkMeta.transmuxing.executeEnd = now();\n  }\n  resetInitialTimestamp(defaultInitPts) {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetTimeStamp(defaultInitPts);\n    remuxer.resetTimeStamp(defaultInitPts);\n  }\n  resetContiguity() {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetContiguity();\n    remuxer.resetNextTimestamp();\n  }\n  resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration, decryptdata) {\n    const {\n      demuxer,\n      remuxer\n    } = this;\n    if (!demuxer || !remuxer) {\n      return;\n    }\n    demuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration);\n    remuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, decryptdata);\n  }\n  destroy() {\n    if (this.demuxer) {\n      this.demuxer.destroy();\n      this.demuxer = void 0;\n    }\n    if (this.remuxer) {\n      this.remuxer.destroy();\n      this.remuxer = void 0;\n    }\n  }\n  transmux(data, keyData, timeOffset, accurateTimeOffset, chunkMeta) {\n    let result;\n    if (keyData && keyData.method === \"SAMPLE-AES\") {\n      result = this.transmuxSampleAes(data, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n    } else {\n      result = this.transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta);\n    }\n    return result;\n  }\n  transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta) {\n    const {\n      audioTrack,\n      videoTrack,\n      id3Track,\n      textTrack\n    } = this.demuxer.demux(data, timeOffset, false, !this.config.progressive);\n    const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, false, this.id);\n    return {\n      remuxResult,\n      chunkMeta\n    };\n  }\n  transmuxSampleAes(data, decryptData, timeOffset, accurateTimeOffset, chunkMeta) {\n    return this.demuxer.demuxSampleAes(data, decryptData, timeOffset).then((demuxResult) => {\n      const remuxResult = this.remuxer.remux(demuxResult.audioTrack, demuxResult.videoTrack, demuxResult.id3Track, demuxResult.textTrack, timeOffset, accurateTimeOffset, false, this.id);\n      return {\n        remuxResult,\n        chunkMeta\n      };\n    });\n  }\n  configureTransmuxer(data) {\n    const {\n      config,\n      observer: observer2,\n      typeSupported,\n      vendor\n    } = this;\n    let mux;\n    for (let i2 = 0, len = muxConfig.length; i2 < len; i2++) {\n      var _muxConfig$i$demux;\n      if ((_muxConfig$i$demux = muxConfig[i2].demux) != null && _muxConfig$i$demux.probe(data)) {\n        mux = muxConfig[i2];\n        break;\n      }\n    }\n    if (!mux) {\n      return new Error(\"Failed to find demuxer by probing fragment data\");\n    }\n    const demuxer = this.demuxer;\n    const remuxer = this.remuxer;\n    const Remuxer = mux.remux;\n    const Demuxer = mux.demux;\n    if (!remuxer || !(remuxer instanceof Remuxer)) {\n      this.remuxer = new Remuxer(observer2, config, typeSupported, vendor);\n    }\n    if (!demuxer || !(demuxer instanceof Demuxer)) {\n      this.demuxer = new Demuxer(observer2, config, typeSupported);\n      this.probe = Demuxer.probe;\n    }\n  }\n  needsProbing(discontinuity, trackSwitch) {\n    return !this.demuxer || !this.remuxer || discontinuity || trackSwitch;\n  }\n  getDecrypter() {\n    let decrypter = this.decrypter;\n    if (!decrypter) {\n      decrypter = this.decrypter = new Decrypter(this.config);\n    }\n    return decrypter;\n  }\n};\nfunction getEncryptionType(data, decryptData) {\n  let encryptionType = null;\n  if (data.byteLength > 0 && (decryptData == null ? void 0 : decryptData.key) != null && decryptData.iv !== null && decryptData.method != null) {\n    encryptionType = decryptData;\n  }\n  return encryptionType;\n}\nvar emptyResult = (chunkMeta) => ({\n  remuxResult: {},\n  chunkMeta\n});\nfunction isPromise(p3) {\n  return \"then\" in p3 && p3.then instanceof Function;\n}\nvar TransmuxConfig = class {\n  constructor(audioCodec, videoCodec, initSegmentData, duration, defaultInitPts) {\n    this.audioCodec = void 0;\n    this.videoCodec = void 0;\n    this.initSegmentData = void 0;\n    this.duration = void 0;\n    this.defaultInitPts = void 0;\n    this.audioCodec = audioCodec;\n    this.videoCodec = videoCodec;\n    this.initSegmentData = initSegmentData;\n    this.duration = duration;\n    this.defaultInitPts = defaultInitPts || null;\n  }\n};\nvar TransmuxState = class {\n  constructor(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange) {\n    this.discontinuity = void 0;\n    this.contiguous = void 0;\n    this.accurateTimeOffset = void 0;\n    this.trackSwitch = void 0;\n    this.timeOffset = void 0;\n    this.initSegmentChange = void 0;\n    this.discontinuity = discontinuity;\n    this.contiguous = contiguous;\n    this.accurateTimeOffset = accurateTimeOffset;\n    this.trackSwitch = trackSwitch;\n    this.timeOffset = timeOffset;\n    this.initSegmentChange = initSegmentChange;\n  }\n};\nvar eventemitter3 = { exports: {} };\n(function(module) {\n  var has = Object.prototype.hasOwnProperty, prefix = \"~\";\n  function Events2() {\n  }\n  if (Object.create) {\n    Events2.prototype = /* @__PURE__ */ Object.create(null);\n    if (!new Events2().__proto__) prefix = false;\n  }\n  function EE(fn, context, once) {\n    this.fn = fn;\n    this.context = context;\n    this.once = once || false;\n  }\n  function addListener(emitter, event, fn, context, once) {\n    if (typeof fn !== \"function\") {\n      throw new TypeError(\"The listener must be a function\");\n    }\n    var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;\n    if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n    else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n    else emitter._events[evt] = [emitter._events[evt], listener];\n    return emitter;\n  }\n  function clearEvent(emitter, evt) {\n    if (--emitter._eventsCount === 0) emitter._events = new Events2();\n    else delete emitter._events[evt];\n  }\n  function EventEmitter2() {\n    this._events = new Events2();\n    this._eventsCount = 0;\n  }\n  EventEmitter2.prototype.eventNames = function eventNames() {\n    var names = [], events, name;\n    if (this._eventsCount === 0) return names;\n    for (name in events = this._events) {\n      if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n    }\n    if (Object.getOwnPropertySymbols) {\n      return names.concat(Object.getOwnPropertySymbols(events));\n    }\n    return names;\n  };\n  EventEmitter2.prototype.listeners = function listeners(event) {\n    var evt = prefix ? prefix + event : event, handlers = this._events[evt];\n    if (!handlers) return [];\n    if (handlers.fn) return [handlers.fn];\n    for (var i2 = 0, l = handlers.length, ee6 = new Array(l); i2 < l; i2++) {\n      ee6[i2] = handlers[i2].fn;\n    }\n    return ee6;\n  };\n  EventEmitter2.prototype.listenerCount = function listenerCount(event) {\n    var evt = prefix ? prefix + event : event, listeners = this._events[evt];\n    if (!listeners) return 0;\n    if (listeners.fn) return 1;\n    return listeners.length;\n  };\n  EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n    var evt = prefix ? prefix + event : event;\n    if (!this._events[evt]) return false;\n    var listeners = this._events[evt], len = arguments.length, args, i2;\n    if (listeners.fn) {\n      if (listeners.once) this.removeListener(event, listeners.fn, void 0, true);\n      switch (len) {\n        case 1:\n          return listeners.fn.call(listeners.context), true;\n        case 2:\n          return listeners.fn.call(listeners.context, a1), true;\n        case 3:\n          return listeners.fn.call(listeners.context, a1, a2), true;\n        case 4:\n          return listeners.fn.call(listeners.context, a1, a2, a3), true;\n        case 5:\n          return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n        case 6:\n          return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n      }\n      for (i2 = 1, args = new Array(len - 1); i2 < len; i2++) {\n        args[i2 - 1] = arguments[i2];\n      }\n      listeners.fn.apply(listeners.context, args);\n    } else {\n      var length = listeners.length, j4;\n      for (i2 = 0; i2 < length; i2++) {\n        if (listeners[i2].once) this.removeListener(event, listeners[i2].fn, void 0, true);\n        switch (len) {\n          case 1:\n            listeners[i2].fn.call(listeners[i2].context);\n            break;\n          case 2:\n            listeners[i2].fn.call(listeners[i2].context, a1);\n            break;\n          case 3:\n            listeners[i2].fn.call(listeners[i2].context, a1, a2);\n            break;\n          case 4:\n            listeners[i2].fn.call(listeners[i2].context, a1, a2, a3);\n            break;\n          default:\n            if (!args) for (j4 = 1, args = new Array(len - 1); j4 < len; j4++) {\n              args[j4 - 1] = arguments[j4];\n            }\n            listeners[i2].fn.apply(listeners[i2].context, args);\n        }\n      }\n    }\n    return true;\n  };\n  EventEmitter2.prototype.on = function on(event, fn, context) {\n    return addListener(this, event, fn, context, false);\n  };\n  EventEmitter2.prototype.once = function once(event, fn, context) {\n    return addListener(this, event, fn, context, true);\n  };\n  EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {\n    var evt = prefix ? prefix + event : event;\n    if (!this._events[evt]) return this;\n    if (!fn) {\n      clearEvent(this, evt);\n      return this;\n    }\n    var listeners = this._events[evt];\n    if (listeners.fn) {\n      if (listeners.fn === fn && (!once || listeners.once) && (!context || listeners.context === context)) {\n        clearEvent(this, evt);\n      }\n    } else {\n      for (var i2 = 0, events = [], length = listeners.length; i2 < length; i2++) {\n        if (listeners[i2].fn !== fn || once && !listeners[i2].once || context && listeners[i2].context !== context) {\n          events.push(listeners[i2]);\n        }\n      }\n      if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n      else clearEvent(this, evt);\n    }\n    return this;\n  };\n  EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {\n    var evt;\n    if (event) {\n      evt = prefix ? prefix + event : event;\n      if (this._events[evt]) clearEvent(this, evt);\n    } else {\n      this._events = new Events2();\n      this._eventsCount = 0;\n    }\n    return this;\n  };\n  EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;\n  EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;\n  EventEmitter2.prefixed = prefix;\n  EventEmitter2.EventEmitter = EventEmitter2;\n  {\n    module.exports = EventEmitter2;\n  }\n})(eventemitter3);\nvar eventemitter3Exports = eventemitter3.exports;\nvar EventEmitter = /* @__PURE__ */ getDefaultExportFromCjs(eventemitter3Exports);\nvar TransmuxerInterface = class {\n  constructor(hls, id, onTransmuxComplete, onFlush) {\n    this.error = null;\n    this.hls = void 0;\n    this.id = void 0;\n    this.observer = void 0;\n    this.frag = null;\n    this.part = null;\n    this.useWorker = void 0;\n    this.workerContext = null;\n    this.onwmsg = void 0;\n    this.transmuxer = null;\n    this.onTransmuxComplete = void 0;\n    this.onFlush = void 0;\n    const config = hls.config;\n    this.hls = hls;\n    this.id = id;\n    this.useWorker = !!config.enableWorker;\n    this.onTransmuxComplete = onTransmuxComplete;\n    this.onFlush = onFlush;\n    const forwardMessage = (ev, data) => {\n      data = data || {};\n      data.frag = this.frag;\n      data.id = this.id;\n      if (ev === Events.ERROR) {\n        this.error = data.error;\n      }\n      this.hls.trigger(ev, data);\n    };\n    this.observer = new EventEmitter();\n    this.observer.on(Events.FRAG_DECRYPTED, forwardMessage);\n    this.observer.on(Events.ERROR, forwardMessage);\n    const MediaSource = getMediaSource(config.preferManagedMediaSource) || {\n      isTypeSupported: () => false\n    };\n    const m2tsTypeSupported = {\n      mpeg: MediaSource.isTypeSupported(\"audio/mpeg\"),\n      mp3: MediaSource.isTypeSupported('audio/mp4; codecs=\"mp3\"'),\n      ac3: MediaSource.isTypeSupported('audio/mp4; codecs=\"ac-3\"')\n    };\n    if (this.useWorker && typeof Worker !== \"undefined\") {\n      const canCreateWorker = config.workerPath || hasUMDWorker();\n      if (canCreateWorker) {\n        try {\n          if (config.workerPath) {\n            logger.log(`loading Web Worker ${config.workerPath} for \"${id}\"`);\n            this.workerContext = loadWorker(config.workerPath);\n          } else {\n            logger.log(`injecting Web Worker for \"${id}\"`);\n            this.workerContext = injectWorker();\n          }\n          this.onwmsg = (event) => this.onWorkerMessage(event);\n          const {\n            worker\n          } = this.workerContext;\n          worker.addEventListener(\"message\", this.onwmsg);\n          worker.onerror = (event) => {\n            const error = new Error(`${event.message}  (${event.filename}:${event.lineno})`);\n            config.enableWorker = false;\n            logger.warn(`Error in \"${id}\" Web Worker, fallback to inline`);\n            this.hls.trigger(Events.ERROR, {\n              type: ErrorTypes.OTHER_ERROR,\n              details: ErrorDetails.INTERNAL_EXCEPTION,\n              fatal: false,\n              event: \"demuxerWorker\",\n              error\n            });\n          };\n          worker.postMessage({\n            cmd: \"init\",\n            typeSupported: m2tsTypeSupported,\n            vendor: \"\",\n            id,\n            config: JSON.stringify(config)\n          });\n        } catch (err) {\n          logger.warn(`Error setting up \"${id}\" Web Worker, fallback to inline`, err);\n          this.resetWorker();\n          this.error = null;\n          this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, \"\", id);\n        }\n        return;\n      }\n    }\n    this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, \"\", id);\n  }\n  resetWorker() {\n    if (this.workerContext) {\n      const {\n        worker,\n        objectURL\n      } = this.workerContext;\n      if (objectURL) {\n        self.URL.revokeObjectURL(objectURL);\n      }\n      worker.removeEventListener(\"message\", this.onwmsg);\n      worker.onerror = null;\n      worker.terminate();\n      this.workerContext = null;\n    }\n  }\n  destroy() {\n    if (this.workerContext) {\n      this.resetWorker();\n      this.onwmsg = void 0;\n    } else {\n      const transmuxer = this.transmuxer;\n      if (transmuxer) {\n        transmuxer.destroy();\n        this.transmuxer = null;\n      }\n    }\n    const observer2 = this.observer;\n    if (observer2) {\n      observer2.removeAllListeners();\n    }\n    this.frag = null;\n    this.observer = null;\n    this.hls = null;\n  }\n  push(data, initSegmentData, audioCodec, videoCodec, frag, part, duration, accurateTimeOffset, chunkMeta, defaultInitPTS) {\n    var _frag$initSegment, _lastFrag$initSegment;\n    chunkMeta.transmuxing.start = self.performance.now();\n    const {\n      transmuxer\n    } = this;\n    const timeOffset = part ? part.start : frag.start;\n    const decryptdata = frag.decryptdata;\n    const lastFrag = this.frag;\n    const discontinuity = !(lastFrag && frag.cc === lastFrag.cc);\n    const trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);\n    const snDiff = lastFrag ? chunkMeta.sn - lastFrag.sn : -1;\n    const partDiff = this.part ? chunkMeta.part - this.part.index : -1;\n    const progressive = snDiff === 0 && chunkMeta.id > 1 && chunkMeta.id === (lastFrag == null ? void 0 : lastFrag.stats.chunkCount);\n    const contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && (partDiff === 1 || progressive && partDiff <= 0));\n    const now2 = self.performance.now();\n    if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {\n      frag.stats.parsing.start = now2;\n    }\n    if (part && (partDiff || !contiguous)) {\n      part.stats.parsing.start = now2;\n    }\n    const initSegmentChange = !(lastFrag && ((_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.url) === ((_lastFrag$initSegment = lastFrag.initSegment) == null ? void 0 : _lastFrag$initSegment.url));\n    const state = new TransmuxState(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange);\n    if (!contiguous || discontinuity || initSegmentChange) {\n      logger.log(`[transmuxer-interface, ${frag.type}]: Starting new transmux session for sn: ${chunkMeta.sn} p: ${chunkMeta.part} level: ${chunkMeta.level} id: ${chunkMeta.id}\n        discontinuity: ${discontinuity}\n        trackSwitch: ${trackSwitch}\n        contiguous: ${contiguous}\n        accurateTimeOffset: ${accurateTimeOffset}\n        timeOffset: ${timeOffset}\n        initSegmentChange: ${initSegmentChange}`);\n      const config = new TransmuxConfig(audioCodec, videoCodec, initSegmentData, duration, defaultInitPTS);\n      this.configureTransmuxer(config);\n    }\n    this.frag = frag;\n    this.part = part;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: \"demux\",\n        data,\n        decryptdata,\n        chunkMeta,\n        state\n      }, data instanceof ArrayBuffer ? [data] : []);\n    } else if (transmuxer) {\n      const transmuxResult = transmuxer.push(data, decryptdata, chunkMeta, state);\n      if (isPromise(transmuxResult)) {\n        transmuxer.async = true;\n        transmuxResult.then((data2) => {\n          this.handleTransmuxComplete(data2);\n        }).catch((error) => {\n          this.transmuxerError(error, chunkMeta, \"transmuxer-interface push error\");\n        });\n      } else {\n        transmuxer.async = false;\n        this.handleTransmuxComplete(transmuxResult);\n      }\n    }\n  }\n  flush(chunkMeta) {\n    chunkMeta.transmuxing.start = self.performance.now();\n    const {\n      transmuxer\n    } = this;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: \"flush\",\n        chunkMeta\n      });\n    } else if (transmuxer) {\n      let transmuxResult = transmuxer.flush(chunkMeta);\n      const asyncFlush = isPromise(transmuxResult);\n      if (asyncFlush || transmuxer.async) {\n        if (!isPromise(transmuxResult)) {\n          transmuxResult = Promise.resolve(transmuxResult);\n        }\n        transmuxResult.then((data) => {\n          this.handleFlushResult(data, chunkMeta);\n        }).catch((error) => {\n          this.transmuxerError(error, chunkMeta, \"transmuxer-interface flush error\");\n        });\n      } else {\n        this.handleFlushResult(transmuxResult, chunkMeta);\n      }\n    }\n  }\n  transmuxerError(error, chunkMeta, reason) {\n    if (!this.hls) {\n      return;\n    }\n    this.error = error;\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.FRAG_PARSING_ERROR,\n      chunkMeta,\n      frag: this.frag || void 0,\n      fatal: false,\n      error,\n      err: error,\n      reason\n    });\n  }\n  handleFlushResult(results, chunkMeta) {\n    results.forEach((result) => {\n      this.handleTransmuxComplete(result);\n    });\n    this.onFlush(chunkMeta);\n  }\n  onWorkerMessage(event) {\n    const data = event.data;\n    if (!(data != null && data.event)) {\n      logger.warn(`worker message received with no ${data ? \"event name\" : \"data\"}`);\n      return;\n    }\n    const hls = this.hls;\n    if (!this.hls) {\n      return;\n    }\n    switch (data.event) {\n      case \"init\": {\n        var _this$workerContext;\n        const objectURL = (_this$workerContext = this.workerContext) == null ? void 0 : _this$workerContext.objectURL;\n        if (objectURL) {\n          self.URL.revokeObjectURL(objectURL);\n        }\n        break;\n      }\n      case \"transmuxComplete\": {\n        this.handleTransmuxComplete(data.data);\n        break;\n      }\n      case \"flush\": {\n        this.onFlush(data.data);\n        break;\n      }\n      // pass logs from the worker thread to the main logger\n      case \"workerLog\":\n        if (logger[data.data.logType]) {\n          logger[data.data.logType](data.data.message);\n        }\n        break;\n      default: {\n        data.data = data.data || {};\n        data.data.frag = this.frag;\n        data.data.id = this.id;\n        hls.trigger(data.event, data.data);\n        break;\n      }\n    }\n  }\n  configureTransmuxer(config) {\n    const {\n      transmuxer\n    } = this;\n    if (this.workerContext) {\n      this.workerContext.worker.postMessage({\n        cmd: \"configure\",\n        config\n      });\n    } else if (transmuxer) {\n      transmuxer.configure(config);\n    }\n  }\n  handleTransmuxComplete(result) {\n    result.chunkMeta.transmuxing.end = self.performance.now();\n    this.onTransmuxComplete(result);\n  }\n};\nvar TICK_INTERVAL$2 = 100;\nvar AudioStreamController = class extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, \"[audio-stream-controller]\", PlaylistLevelType.AUDIO);\n    this.videoBuffer = null;\n    this.videoTrackCC = -1;\n    this.waitingVideoCC = -1;\n    this.bufferedTrack = null;\n    this.switchingTrack = null;\n    this.trackId = -1;\n    this.waitingData = null;\n    this.mainDetails = null;\n    this.flushing = false;\n    this.bufferFlushed = false;\n    this.cachedTrackLoadedData = null;\n    this._registerListeners();\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n    this.mainDetails = null;\n    this.bufferedTrack = null;\n    this.switchingTrack = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  // INIT_PTS_FOUND is triggered when the video track parsed in the stream-controller has a new PTS value\n  onInitPtsFound(event, {\n    frag,\n    id,\n    initPTS,\n    timescale\n  }) {\n    if (id === \"main\") {\n      const cc = frag.cc;\n      this.initPTS[frag.cc] = {\n        baseTime: initPTS,\n        timescale\n      };\n      this.log(`InitPTS for cc: ${cc} found from main: ${initPTS}`);\n      this.videoTrackCC = cc;\n      if (this.state === State.WAITING_INIT_PTS) {\n        this.tick();\n      }\n    }\n  }\n  startLoad(startPosition) {\n    if (!this.levels) {\n      this.startPosition = startPosition;\n      this.state = State.STOPPED;\n      return;\n    }\n    const lastCurrentTime = this.lastCurrentTime;\n    this.stopLoad();\n    this.setInterval(TICK_INTERVAL$2);\n    if (lastCurrentTime > 0 && startPosition === -1) {\n      this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n      startPosition = lastCurrentTime;\n      this.state = State.IDLE;\n    } else {\n      this.loadedmetadata = false;\n      this.state = State.WAITING_TRACK;\n    }\n    this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n    this.tick();\n  }\n  doTick() {\n    switch (this.state) {\n      case State.IDLE:\n        this.doTickIdle();\n        break;\n      case State.WAITING_TRACK: {\n        var _levels$trackId;\n        const {\n          levels,\n          trackId\n        } = this;\n        const details = levels == null ? void 0 : (_levels$trackId = levels[trackId]) == null ? void 0 : _levels$trackId.details;\n        if (details) {\n          if (this.waitForCdnTuneIn(details)) {\n            break;\n          }\n          this.state = State.WAITING_INIT_PTS;\n        }\n        break;\n      }\n      case State.FRAG_LOADING_WAITING_RETRY: {\n        var _this$media;\n        const now2 = performance.now();\n        const retryDate = this.retryDate;\n        if (!retryDate || now2 >= retryDate || (_this$media = this.media) != null && _this$media.seeking) {\n          const {\n            levels,\n            trackId\n          } = this;\n          this.log(\"RetryDate reached, switch back to IDLE state\");\n          this.resetStartWhenNotLoaded((levels == null ? void 0 : levels[trackId]) || null);\n          this.state = State.IDLE;\n        }\n        break;\n      }\n      case State.WAITING_INIT_PTS: {\n        const waitingData = this.waitingData;\n        if (waitingData) {\n          const {\n            frag,\n            part,\n            cache,\n            complete\n          } = waitingData;\n          if (this.initPTS[frag.cc] !== void 0) {\n            this.waitingData = null;\n            this.waitingVideoCC = -1;\n            this.state = State.FRAG_LOADING;\n            const payload = cache.flush();\n            const data = {\n              frag,\n              part,\n              payload,\n              networkDetails: null\n            };\n            this._handleFragmentLoadProgress(data);\n            if (complete) {\n              super._handleFragmentLoadComplete(data);\n            }\n          } else if (this.videoTrackCC !== this.waitingVideoCC) {\n            this.log(`Waiting fragment cc (${frag.cc}) cancelled because video is at cc ${this.videoTrackCC}`);\n            this.clearWaitingFragment();\n          } else {\n            const pos = this.getLoadPosition();\n            const bufferInfo = BufferHelper.bufferInfo(this.mediaBuffer, pos, this.config.maxBufferHole);\n            const waitingFragmentAtPosition = fragmentWithinToleranceTest(bufferInfo.end, this.config.maxFragLookUpTolerance, frag);\n            if (waitingFragmentAtPosition < 0) {\n              this.log(`Waiting fragment cc (${frag.cc}) @ ${frag.start} cancelled because another fragment at ${bufferInfo.end} is needed`);\n              this.clearWaitingFragment();\n            }\n          }\n        } else {\n          this.state = State.IDLE;\n        }\n      }\n    }\n    this.onTickEnd();\n  }\n  clearWaitingFragment() {\n    const waitingData = this.waitingData;\n    if (waitingData) {\n      this.fragmentTracker.removeFragment(waitingData.frag);\n      this.waitingData = null;\n      this.waitingVideoCC = -1;\n      this.state = State.IDLE;\n    }\n  }\n  resetLoadingState() {\n    this.clearWaitingFragment();\n    super.resetLoadingState();\n  }\n  onTickEnd() {\n    const {\n      media\n    } = this;\n    if (!(media != null && media.readyState)) {\n      return;\n    }\n    this.lastCurrentTime = media.currentTime;\n  }\n  doTickIdle() {\n    const {\n      hls,\n      levels,\n      media,\n      trackId\n    } = this;\n    const config = hls.config;\n    if (!this.buffering || !media && (this.startFragRequested || !config.startFragPrefetch) || !(levels != null && levels[trackId])) {\n      return;\n    }\n    const levelInfo = levels[trackId];\n    const trackDetails = levelInfo.details;\n    if (!trackDetails || trackDetails.live && this.levelLastLoaded !== levelInfo || this.waitForCdnTuneIn(trackDetails)) {\n      this.state = State.WAITING_TRACK;\n      return;\n    }\n    const bufferable = this.mediaBuffer ? this.mediaBuffer : this.media;\n    if (this.bufferFlushed && bufferable) {\n      this.bufferFlushed = false;\n      this.afterBufferFlushed(bufferable, ElementaryStreamTypes.AUDIO, PlaylistLevelType.AUDIO);\n    }\n    const bufferInfo = this.getFwdBufferInfo(bufferable, PlaylistLevelType.AUDIO);\n    if (bufferInfo === null) {\n      return;\n    }\n    if (!this.switchingTrack && this._streamEnded(bufferInfo, trackDetails)) {\n      hls.trigger(Events.BUFFER_EOS, {\n        type: \"audio\"\n      });\n      this.state = State.ENDED;\n      return;\n    }\n    const mainBufferInfo = this.getFwdBufferInfo(this.videoBuffer ? this.videoBuffer : this.media, PlaylistLevelType.MAIN);\n    const bufferLen = bufferInfo.len;\n    const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len);\n    const fragments = trackDetails.fragments;\n    const start = fragments[0].start;\n    const loadPosition = this.getLoadPosition();\n    const targetBufferTime = this.flushing ? loadPosition : bufferInfo.end;\n    if (this.switchingTrack && media) {\n      const pos = loadPosition;\n      if (trackDetails.PTSKnown && pos < start) {\n        if (bufferInfo.end > start || bufferInfo.nextStart) {\n          this.log(\"Alt audio track ahead of main track, seek to start of alt audio track\");\n          media.currentTime = start + 0.05;\n        }\n      }\n    }\n    if (bufferLen >= maxBufLen && !this.switchingTrack && targetBufferTime < fragments[fragments.length - 1].start) {\n      return;\n    }\n    let frag = this.getNextFragment(targetBufferTime, trackDetails);\n    let atGap = false;\n    if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n      atGap = !!frag.gap;\n      frag = this.getNextFragmentLoopLoading(frag, trackDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n    }\n    if (!frag) {\n      this.bufferFlushed = true;\n      return;\n    }\n    const atBufferSyncLimit = mainBufferInfo && frag.start > mainBufferInfo.end + trackDetails.targetduration;\n    if (atBufferSyncLimit || // Or wait for main buffer after buffing some audio\n    !(mainBufferInfo != null && mainBufferInfo.len) && bufferInfo.len) {\n      const mainFrag = this.getAppendedFrag(frag.start, PlaylistLevelType.MAIN);\n      if (mainFrag === null) {\n        return;\n      }\n      atGap || (atGap = !!mainFrag.gap || !!atBufferSyncLimit && mainBufferInfo.len === 0);\n      if (atBufferSyncLimit && !atGap || atGap && bufferInfo.nextStart && bufferInfo.nextStart < mainFrag.end) {\n        return;\n      }\n    }\n    this.loadFragment(frag, levelInfo, targetBufferTime);\n  }\n  getMaxBufferLength(mainBufferLength) {\n    const maxConfigBuffer = super.getMaxBufferLength();\n    if (!mainBufferLength) {\n      return maxConfigBuffer;\n    }\n    return Math.min(Math.max(maxConfigBuffer, mainBufferLength), this.config.maxMaxBufferLength);\n  }\n  onMediaDetaching() {\n    this.videoBuffer = null;\n    this.bufferFlushed = this.flushing = false;\n    super.onMediaDetaching();\n  }\n  onAudioTracksUpdated(event, {\n    audioTracks\n  }) {\n    this.resetTransmuxer();\n    this.levels = audioTracks.map((mediaPlaylist) => new Level(mediaPlaylist));\n  }\n  onAudioTrackSwitching(event, data) {\n    const altAudio = !!data.url;\n    this.trackId = data.id;\n    const {\n      fragCurrent\n    } = this;\n    if (fragCurrent) {\n      fragCurrent.abortRequests();\n      this.removeUnbufferedFrags(fragCurrent.start);\n    }\n    this.resetLoadingState();\n    if (!altAudio) {\n      this.resetTransmuxer();\n    } else {\n      this.setInterval(TICK_INTERVAL$2);\n    }\n    if (altAudio) {\n      this.switchingTrack = data;\n      this.state = State.IDLE;\n      this.flushAudioIfNeeded(data);\n    } else {\n      this.switchingTrack = null;\n      this.bufferedTrack = data;\n      this.state = State.STOPPED;\n    }\n    this.tick();\n  }\n  onManifestLoading() {\n    this.fragmentTracker.removeAllFragments();\n    this.startPosition = this.lastCurrentTime = 0;\n    this.bufferFlushed = this.flushing = false;\n    this.levels = this.mainDetails = this.waitingData = this.bufferedTrack = this.cachedTrackLoadedData = this.switchingTrack = null;\n    this.startFragRequested = false;\n    this.trackId = this.videoTrackCC = this.waitingVideoCC = -1;\n  }\n  onLevelLoaded(event, data) {\n    this.mainDetails = data.details;\n    if (this.cachedTrackLoadedData !== null) {\n      this.hls.trigger(Events.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData);\n      this.cachedTrackLoadedData = null;\n    }\n  }\n  onAudioTrackLoaded(event, data) {\n    var _track$details;\n    if (this.mainDetails == null) {\n      this.cachedTrackLoadedData = data;\n      return;\n    }\n    const {\n      levels\n    } = this;\n    const {\n      details: newDetails,\n      id: trackId\n    } = data;\n    if (!levels) {\n      this.warn(`Audio tracks were reset while loading level ${trackId}`);\n      return;\n    }\n    this.log(`Audio track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : \"\"},duration:${newDetails.totalduration}`);\n    const track = levels[trackId];\n    let sliding = 0;\n    if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n      this.checkLiveUpdate(newDetails);\n      const mainDetails = this.mainDetails;\n      if (newDetails.deltaUpdateFailed || !mainDetails) {\n        return;\n      }\n      if (!track.details && newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n        alignMediaPlaylistByPDT(newDetails, mainDetails);\n        sliding = newDetails.fragments[0].start;\n      } else {\n        var _this$levelLastLoaded;\n        sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n      }\n    }\n    track.details = newDetails;\n    this.levelLastLoaded = track;\n    if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {\n      this.setStartPosition(this.mainDetails || newDetails, sliding);\n    }\n    if (this.state === State.WAITING_TRACK && !this.waitForCdnTuneIn(newDetails)) {\n      this.state = State.IDLE;\n    }\n    this.tick();\n  }\n  _handleFragmentLoadProgress(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      part,\n      payload\n    } = data;\n    const {\n      config,\n      trackId,\n      levels\n    } = this;\n    if (!levels) {\n      this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n      return;\n    }\n    const track = levels[trackId];\n    if (!track) {\n      this.warn(\"Audio track is undefined on fragment load progress\");\n      return;\n    }\n    const details = track.details;\n    if (!details) {\n      this.warn(\"Audio track details undefined on fragment load progress\");\n      this.removeUnbufferedFrags(frag.start);\n      return;\n    }\n    const audioCodec = config.defaultAudioCodec || track.audioCodec || \"mp4a.40.2\";\n    let transmuxer = this.transmuxer;\n    if (!transmuxer) {\n      transmuxer = this.transmuxer = new TransmuxerInterface(this.hls, PlaylistLevelType.AUDIO, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n    }\n    const initPTS = this.initPTS[frag.cc];\n    const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n    if (initPTS !== void 0) {\n      const accurateTimeOffset = false;\n      const partIndex = part ? part.index : -1;\n      const partial = partIndex !== -1;\n      const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n      transmuxer.push(payload, initSegmentData, audioCodec, \"\", frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n    } else {\n      this.log(`Unknown video PTS for cc ${frag.cc}, waiting for video PTS before demuxing audio frag ${frag.sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n      const {\n        cache\n      } = this.waitingData = this.waitingData || {\n        frag,\n        part,\n        cache: new ChunkCache(),\n        complete: false\n      };\n      cache.push(new Uint8Array(payload));\n      this.waitingVideoCC = this.videoTrackCC;\n      this.state = State.WAITING_INIT_PTS;\n    }\n  }\n  _handleFragmentLoadComplete(fragLoadedData) {\n    if (this.waitingData) {\n      this.waitingData.complete = true;\n      return;\n    }\n    super._handleFragmentLoadComplete(fragLoadedData);\n  }\n  onBufferReset() {\n    this.mediaBuffer = this.videoBuffer = null;\n    this.loadedmetadata = false;\n  }\n  onBufferCreated(event, data) {\n    const audioTrack = data.tracks.audio;\n    if (audioTrack) {\n      this.mediaBuffer = audioTrack.buffer || null;\n    }\n    if (data.tracks.video) {\n      this.videoBuffer = data.tracks.video.buffer || null;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag.type !== PlaylistLevelType.AUDIO) {\n      if (!this.loadedmetadata && frag.type === PlaylistLevelType.MAIN) {\n        const bufferable = this.videoBuffer || this.media;\n        if (bufferable) {\n          const bufferedTimeRanges = BufferHelper.getBuffered(bufferable);\n          if (bufferedTimeRanges.length) {\n            this.loadedmetadata = true;\n          }\n        }\n      }\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      this.warn(`Fragment ${frag.sn}${part ? \" p: \" + part.index : \"\"} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}, audioSwitch: ${this.switchingTrack ? this.switchingTrack.name : \"false\"}`);\n      return;\n    }\n    if (frag.sn !== \"initSegment\") {\n      this.fragPrevious = frag;\n      const track = this.switchingTrack;\n      if (track) {\n        this.bufferedTrack = track;\n        this.switchingTrack = null;\n        this.hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, track));\n      }\n    }\n    this.fragBufferedComplete(frag, part);\n  }\n  onError(event, data) {\n    var _data$context;\n    if (data.fatal) {\n      this.state = State.ERROR;\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_PARSING_ERROR:\n      case ErrorDetails.FRAG_DECRYPT_ERROR:\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        this.onFragmentOrKeyLoadError(PlaylistLevelType.AUDIO, data);\n        break;\n      case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n      case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        if (!data.levelRetry && this.state === State.WAITING_TRACK && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.AUDIO_TRACK) {\n          this.state = State.IDLE;\n        }\n        break;\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n        if (!data.parent || data.parent !== \"audio\") {\n          return;\n        }\n        if (data.details === ErrorDetails.BUFFER_APPEND_ERROR) {\n          this.resetLoadingState();\n          return;\n        }\n        if (this.reduceLengthAndFlushBuffer(data)) {\n          this.bufferedTrack = null;\n          super.flushMainBuffer(0, Number.POSITIVE_INFINITY, \"audio\");\n        }\n        break;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n        this.recoverWorkerError(data);\n        break;\n    }\n  }\n  onBufferFlushing(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.VIDEO) {\n      this.flushing = true;\n    }\n  }\n  onBufferFlushed(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.VIDEO) {\n      this.flushing = false;\n      this.bufferFlushed = true;\n      if (this.state === State.ENDED) {\n        this.state = State.IDLE;\n      }\n      const mediaBuffer = this.mediaBuffer || this.media;\n      if (mediaBuffer) {\n        this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.AUDIO);\n        this.tick();\n      }\n    }\n  }\n  _handleTransmuxComplete(transmuxResult) {\n    var _id3$samples;\n    const id = \"audio\";\n    const {\n      hls\n    } = this;\n    const {\n      remuxResult,\n      chunkMeta\n    } = transmuxResult;\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context) {\n      this.resetWhenMissingContext(chunkMeta);\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const {\n      details\n    } = level;\n    const {\n      audio,\n      text,\n      id3,\n      initSegment\n    } = remuxResult;\n    if (this.fragContextChanged(frag) || !details) {\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    this.state = State.PARSING;\n    if (this.switchingTrack && audio) {\n      this.completeAudioSwitch(this.switchingTrack);\n    }\n    if (initSegment != null && initSegment.tracks) {\n      const mapFragment = frag.initSegment || frag;\n      this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n      hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n        frag: mapFragment,\n        id,\n        tracks: initSegment.tracks\n      });\n    }\n    if (audio) {\n      const {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS\n      } = audio;\n      if (part) {\n        part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        };\n      }\n      frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n      this.bufferFragmentData(audio, frag, part, chunkMeta);\n    }\n    if (id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n      const emittedID3 = _extends({\n        id,\n        frag,\n        details\n      }, id3);\n      hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n    }\n    if (text) {\n      const emittedText = _extends({\n        id,\n        frag,\n        details\n      }, text);\n      hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n    }\n  }\n  _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n    if (this.state !== State.PARSING) {\n      return;\n    }\n    if (tracks.video) {\n      delete tracks.video;\n    }\n    const track = tracks.audio;\n    if (!track) {\n      return;\n    }\n    track.id = \"audio\";\n    const variantAudioCodecs = currentLevel.audioCodec;\n    this.log(`Init audio buffer, container:${track.container}, codecs[level/parsed]=[${variantAudioCodecs}/${track.codec}]`);\n    if (variantAudioCodecs && variantAudioCodecs.split(\",\").length === 1) {\n      track.levelCodec = variantAudioCodecs;\n    }\n    this.hls.trigger(Events.BUFFER_CODECS, tracks);\n    const initSegment = track.initSegment;\n    if (initSegment != null && initSegment.byteLength) {\n      const segment = {\n        type: \"audio\",\n        frag,\n        part: null,\n        chunkMeta,\n        parent: frag.type,\n        data: initSegment\n      };\n      this.hls.trigger(Events.BUFFER_APPENDING, segment);\n    }\n    this.tickImmediate();\n  }\n  loadFragment(frag, track, targetBufferTime) {\n    const fragState = this.fragmentTracker.getState(frag);\n    this.fragCurrent = frag;\n    if (this.switchingTrack || fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n      var _track$details2;\n      if (frag.sn === \"initSegment\") {\n        this._loadInitSegment(frag, track);\n      } else if ((_track$details2 = track.details) != null && _track$details2.live && !this.initPTS[frag.cc]) {\n        this.log(`Waiting for video PTS in continuity counter ${frag.cc} of live stream before loading audio fragment ${frag.sn} of level ${this.trackId}`);\n        this.state = State.WAITING_INIT_PTS;\n        const mainDetails = this.mainDetails;\n        if (mainDetails && mainDetails.fragments[0].start !== track.details.fragments[0].start) {\n          alignMediaPlaylistByPDT(track.details, mainDetails);\n        }\n      } else {\n        this.startFragRequested = true;\n        super.loadFragment(frag, track, targetBufferTime);\n      }\n    } else {\n      this.clearTrackerIfNeeded(frag);\n    }\n  }\n  flushAudioIfNeeded(switchingTrack) {\n    if (this.media && this.bufferedTrack) {\n      const {\n        name,\n        lang,\n        assocLang,\n        characteristics,\n        audioCodec,\n        channels\n      } = this.bufferedTrack;\n      if (!matchesOption({\n        name,\n        lang,\n        assocLang,\n        characteristics,\n        audioCodec,\n        channels\n      }, switchingTrack, audioMatchPredicate)) {\n        this.log(\"Switching audio track : flushing all audio\");\n        super.flushMainBuffer(0, Number.POSITIVE_INFINITY, \"audio\");\n        this.bufferedTrack = null;\n      }\n    }\n  }\n  completeAudioSwitch(switchingTrack) {\n    const {\n      hls\n    } = this;\n    this.flushAudioIfNeeded(switchingTrack);\n    this.bufferedTrack = switchingTrack;\n    this.switchingTrack = null;\n    hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, switchingTrack));\n  }\n};\nfunction subtitleOptionsIdentical(trackList1, trackList2) {\n  if (trackList1.length !== trackList2.length) {\n    return false;\n  }\n  for (let i2 = 0; i2 < trackList1.length; i2++) {\n    if (!mediaAttributesIdentical(trackList1[i2].attrs, trackList2[i2].attrs)) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction mediaAttributesIdentical(attrs1, attrs2, customAttributes) {\n  const stableRenditionId = attrs1[\"STABLE-RENDITION-ID\"];\n  if (stableRenditionId && !customAttributes) {\n    return stableRenditionId === attrs2[\"STABLE-RENDITION-ID\"];\n  }\n  return !(customAttributes || [\"LANGUAGE\", \"NAME\", \"CHARACTERISTICS\", \"AUTOSELECT\", \"DEFAULT\", \"FORCED\", \"ASSOC-LANGUAGE\"]).some((subtitleAttribute) => attrs1[subtitleAttribute] !== attrs2[subtitleAttribute]);\n}\nfunction subtitleTrackMatchesTextTrack(subtitleTrack, textTrack) {\n  return textTrack.label.toLowerCase() === subtitleTrack.name.toLowerCase() && (!textTrack.language || textTrack.language.toLowerCase() === (subtitleTrack.lang || \"\").toLowerCase());\n}\nvar AudioTrackController = class extends BasePlaylistController {\n  constructor(hls) {\n    super(hls, \"[audio-track-controller]\");\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n    this.registerListeners();\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.tracks.length = 0;\n    this.tracksInGroup.length = 0;\n    this.currentTrack = null;\n    super.destroy();\n  }\n  onManifestLoading() {\n    this.tracks = [];\n    this.tracksInGroup = [];\n    this.groupIds = null;\n    this.currentTrack = null;\n    this.trackId = -1;\n    this.selectDefaultTrack = true;\n  }\n  onManifestParsed(event, data) {\n    this.tracks = data.audioTracks || [];\n  }\n  onAudioTrackLoaded(event, data) {\n    const {\n      id,\n      groupId,\n      details\n    } = data;\n    const trackInActiveGroup = this.tracksInGroup[id];\n    if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n      this.warn(`Audio track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n      return;\n    }\n    const curDetails = trackInActiveGroup.details;\n    trackInActiveGroup.details = data.details;\n    this.log(`Audio track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n    if (id === this.trackId) {\n      this.playlistLoaded(id, data, curDetails);\n    }\n  }\n  onLevelLoading(event, data) {\n    this.switchLevel(data.level);\n  }\n  onLevelSwitching(event, data) {\n    this.switchLevel(data.level);\n  }\n  switchLevel(levelIndex) {\n    const levelInfo = this.hls.levels[levelIndex];\n    if (!levelInfo) {\n      return;\n    }\n    const audioGroups = levelInfo.audioGroups || null;\n    const currentGroups = this.groupIds;\n    let currentTrack = this.currentTrack;\n    if (!audioGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (audioGroups == null ? void 0 : audioGroups.length) || audioGroups != null && audioGroups.some((groupId) => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n      this.groupIds = audioGroups;\n      this.trackId = -1;\n      this.currentTrack = null;\n      const audioTracks = this.tracks.filter((track) => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n      if (audioTracks.length) {\n        if (this.selectDefaultTrack && !audioTracks.some((track) => track.default)) {\n          this.selectDefaultTrack = false;\n        }\n        audioTracks.forEach((track, i2) => {\n          track.id = i2;\n        });\n      } else if (!currentTrack && !this.tracksInGroup.length) {\n        return;\n      }\n      this.tracksInGroup = audioTracks;\n      const audioPreference = this.hls.config.audioPreference;\n      if (!currentTrack && audioPreference) {\n        const groupIndex = findMatchingOption(audioPreference, audioTracks, audioMatchPredicate);\n        if (groupIndex > -1) {\n          currentTrack = audioTracks[groupIndex];\n        } else {\n          const allIndex = findMatchingOption(audioPreference, this.tracks);\n          currentTrack = this.tracks[allIndex];\n        }\n      }\n      let trackId = this.findTrackId(currentTrack);\n      if (trackId === -1 && currentTrack) {\n        trackId = this.findTrackId(null);\n      }\n      const audioTracksUpdated = {\n        audioTracks\n      };\n      this.log(`Updating audio tracks, ${audioTracks.length} track(s) found in group(s): ${audioGroups == null ? void 0 : audioGroups.join(\",\")}`);\n      this.hls.trigger(Events.AUDIO_TRACKS_UPDATED, audioTracksUpdated);\n      const selectedTrackId = this.trackId;\n      if (trackId !== -1 && selectedTrackId === -1) {\n        this.setAudioTrack(trackId);\n      } else if (audioTracks.length && selectedTrackId === -1) {\n        var _this$groupIds;\n        const error = new Error(`No audio track selected for current audio group-ID(s): ${(_this$groupIds = this.groupIds) == null ? void 0 : _this$groupIds.join(\",\")} track count: ${audioTracks.length}`);\n        this.warn(error.message);\n        this.hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.AUDIO_TRACK_LOAD_ERROR,\n          fatal: true,\n          error\n        });\n      }\n    } else if (this.shouldReloadPlaylist(currentTrack)) {\n      this.setAudioTrack(this.trackId);\n    }\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.AUDIO_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n      this.requestScheduled = -1;\n      this.checkRetry(data);\n    }\n  }\n  get allAudioTracks() {\n    return this.tracks;\n  }\n  get audioTracks() {\n    return this.tracksInGroup;\n  }\n  get audioTrack() {\n    return this.trackId;\n  }\n  set audioTrack(newId) {\n    this.selectDefaultTrack = false;\n    this.setAudioTrack(newId);\n  }\n  setAudioOption(audioOption) {\n    const hls = this.hls;\n    hls.config.audioPreference = audioOption;\n    if (audioOption) {\n      const allAudioTracks = this.allAudioTracks;\n      this.selectDefaultTrack = false;\n      if (allAudioTracks.length) {\n        const currentTrack = this.currentTrack;\n        if (currentTrack && matchesOption(audioOption, currentTrack, audioMatchPredicate)) {\n          return currentTrack;\n        }\n        const groupIndex = findMatchingOption(audioOption, this.tracksInGroup, audioMatchPredicate);\n        if (groupIndex > -1) {\n          const track = this.tracksInGroup[groupIndex];\n          this.setAudioTrack(groupIndex);\n          return track;\n        } else if (currentTrack) {\n          let searchIndex = hls.loadLevel;\n          if (searchIndex === -1) {\n            searchIndex = hls.firstAutoLevel;\n          }\n          const switchIndex = findClosestLevelWithAudioGroup(audioOption, hls.levels, allAudioTracks, searchIndex, audioMatchPredicate);\n          if (switchIndex === -1) {\n            return null;\n          }\n          hls.nextLoadLevel = switchIndex;\n        }\n        if (audioOption.channels || audioOption.audioCodec) {\n          const withoutCodecAndChannelsMatch = findMatchingOption(audioOption, allAudioTracks);\n          if (withoutCodecAndChannelsMatch > -1) {\n            return allAudioTracks[withoutCodecAndChannelsMatch];\n          }\n        }\n      }\n    }\n    return null;\n  }\n  setAudioTrack(newId) {\n    const tracks = this.tracksInGroup;\n    if (newId < 0 || newId >= tracks.length) {\n      this.warn(`Invalid audio track id: ${newId}`);\n      return;\n    }\n    this.clearTimer();\n    this.selectDefaultTrack = false;\n    const lastTrack = this.currentTrack;\n    const track = tracks[newId];\n    const trackLoaded = track.details && !track.details.live;\n    if (newId === this.trackId && track === lastTrack && trackLoaded) {\n      return;\n    }\n    this.log(`Switching to audio-track ${newId} \"${track.name}\" lang:${track.lang} group:${track.groupId} channels:${track.channels}`);\n    this.trackId = newId;\n    this.currentTrack = track;\n    this.hls.trigger(Events.AUDIO_TRACK_SWITCHING, _objectSpread2({}, track));\n    if (trackLoaded) {\n      return;\n    }\n    const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n    this.loadPlaylist(hlsUrlParameters);\n  }\n  findTrackId(currentTrack) {\n    const audioTracks = this.tracksInGroup;\n    for (let i2 = 0; i2 < audioTracks.length; i2++) {\n      const track = audioTracks[i2];\n      if (this.selectDefaultTrack && !track.default) {\n        continue;\n      }\n      if (!currentTrack || matchesOption(currentTrack, track, audioMatchPredicate)) {\n        return i2;\n      }\n    }\n    if (currentTrack) {\n      const {\n        name,\n        lang,\n        assocLang,\n        characteristics,\n        audioCodec,\n        channels\n      } = currentTrack;\n      for (let i2 = 0; i2 < audioTracks.length; i2++) {\n        const track = audioTracks[i2];\n        if (matchesOption({\n          name,\n          lang,\n          assocLang,\n          characteristics,\n          audioCodec,\n          channels\n        }, track, audioMatchPredicate)) {\n          return i2;\n        }\n      }\n      for (let i2 = 0; i2 < audioTracks.length; i2++) {\n        const track = audioTracks[i2];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\", \"ASSOC-LANGUAGE\", \"CHARACTERISTICS\"])) {\n          return i2;\n        }\n      }\n      for (let i2 = 0; i2 < audioTracks.length; i2++) {\n        const track = audioTracks[i2];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\"])) {\n          return i2;\n        }\n      }\n    }\n    return -1;\n  }\n  loadPlaylist(hlsUrlParameters) {\n    const audioTrack = this.currentTrack;\n    if (this.shouldLoadPlaylist(audioTrack) && audioTrack) {\n      super.loadPlaylist();\n      const id = audioTrack.id;\n      const groupId = audioTrack.groupId;\n      let url = audioTrack.url;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      this.log(`loading audio-track playlist ${id} \"${audioTrack.name}\" lang:${audioTrack.lang} group:${groupId}`);\n      this.clearTimer();\n      this.hls.trigger(Events.AUDIO_TRACK_LOADING, {\n        url,\n        id,\n        groupId,\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n};\nvar TICK_INTERVAL$1 = 500;\nvar SubtitleStreamController = class extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, \"[subtitle-stream-controller]\", PlaylistLevelType.SUBTITLE);\n    this.currentTrackId = -1;\n    this.tracksBuffered = [];\n    this.mainDetails = null;\n    this._registerListeners();\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n    this.mainDetails = null;\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.on(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.on(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.off(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.off(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  startLoad(startPosition) {\n    this.stopLoad();\n    this.state = State.IDLE;\n    this.setInterval(TICK_INTERVAL$1);\n    this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n    this.tick();\n  }\n  onManifestLoading() {\n    this.mainDetails = null;\n    this.fragmentTracker.removeAllFragments();\n  }\n  onMediaDetaching() {\n    this.tracksBuffered = [];\n    super.onMediaDetaching();\n  }\n  onLevelLoaded(event, data) {\n    this.mainDetails = data.details;\n  }\n  onSubtitleFragProcessed(event, data) {\n    const {\n      frag,\n      success\n    } = data;\n    this.fragPrevious = frag;\n    this.state = State.IDLE;\n    if (!success) {\n      return;\n    }\n    const buffered = this.tracksBuffered[this.currentTrackId];\n    if (!buffered) {\n      return;\n    }\n    let timeRange;\n    const fragStart = frag.start;\n    for (let i2 = 0; i2 < buffered.length; i2++) {\n      if (fragStart >= buffered[i2].start && fragStart <= buffered[i2].end) {\n        timeRange = buffered[i2];\n        break;\n      }\n    }\n    const fragEnd = frag.start + frag.duration;\n    if (timeRange) {\n      timeRange.end = fragEnd;\n    } else {\n      timeRange = {\n        start: fragStart,\n        end: fragEnd\n      };\n      buffered.push(timeRange);\n    }\n    this.fragmentTracker.fragBuffered(frag);\n    this.fragBufferedComplete(frag, null);\n  }\n  onBufferFlushing(event, data) {\n    const {\n      startOffset,\n      endOffset\n    } = data;\n    if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {\n      const endOffsetSubtitles = endOffset - 1;\n      if (endOffsetSubtitles <= 0) {\n        return;\n      }\n      data.endOffsetSubtitles = Math.max(0, endOffsetSubtitles);\n      this.tracksBuffered.forEach((buffered) => {\n        for (let i2 = 0; i2 < buffered.length; ) {\n          if (buffered[i2].end <= endOffsetSubtitles) {\n            buffered.shift();\n            continue;\n          } else if (buffered[i2].start < endOffsetSubtitles) {\n            buffered[i2].start = endOffsetSubtitles;\n          } else {\n            break;\n          }\n          i2++;\n        }\n      });\n      this.fragmentTracker.removeFragmentsInRange(startOffset, endOffsetSubtitles, PlaylistLevelType.SUBTITLE);\n    }\n  }\n  onFragBuffered(event, data) {\n    if (!this.loadedmetadata && data.frag.type === PlaylistLevelType.MAIN) {\n      var _this$media;\n      if ((_this$media = this.media) != null && _this$media.buffered.length) {\n        this.loadedmetadata = true;\n      }\n    }\n  }\n  // If something goes wrong, proceed to next frag, if we were processing one.\n  onError(event, data) {\n    const frag = data.frag;\n    if ((frag == null ? void 0 : frag.type) === PlaylistLevelType.SUBTITLE) {\n      if (data.details === ErrorDetails.FRAG_GAP) {\n        this.fragmentTracker.fragBuffered(frag, true);\n      }\n      if (this.fragCurrent) {\n        this.fragCurrent.abortRequests();\n      }\n      if (this.state !== State.STOPPED) {\n        this.state = State.IDLE;\n      }\n    }\n  }\n  // Got all new subtitle levels.\n  onSubtitleTracksUpdated(event, {\n    subtitleTracks\n  }) {\n    if (this.levels && subtitleOptionsIdentical(this.levels, subtitleTracks)) {\n      this.levels = subtitleTracks.map((mediaPlaylist) => new Level(mediaPlaylist));\n      return;\n    }\n    this.tracksBuffered = [];\n    this.levels = subtitleTracks.map((mediaPlaylist) => {\n      const level = new Level(mediaPlaylist);\n      this.tracksBuffered[level.id] = [];\n      return level;\n    });\n    this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, PlaylistLevelType.SUBTITLE);\n    this.fragPrevious = null;\n    this.mediaBuffer = null;\n  }\n  onSubtitleTrackSwitch(event, data) {\n    var _this$levels;\n    this.currentTrackId = data.id;\n    if (!((_this$levels = this.levels) != null && _this$levels.length) || this.currentTrackId === -1) {\n      this.clearInterval();\n      return;\n    }\n    const currentTrack = this.levels[this.currentTrackId];\n    if (currentTrack != null && currentTrack.details) {\n      this.mediaBuffer = this.mediaBufferTimeRanges;\n    } else {\n      this.mediaBuffer = null;\n    }\n    if (currentTrack) {\n      this.setInterval(TICK_INTERVAL$1);\n    }\n  }\n  // Got a new set of subtitle fragments.\n  onSubtitleTrackLoaded(event, data) {\n    var _track$details;\n    const {\n      currentTrackId,\n      levels\n    } = this;\n    const {\n      details: newDetails,\n      id: trackId\n    } = data;\n    if (!levels) {\n      this.warn(`Subtitle tracks were reset while loading level ${trackId}`);\n      return;\n    }\n    const track = levels[trackId];\n    if (trackId >= levels.length || !track) {\n      return;\n    }\n    this.log(`Subtitle track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : \"\"},duration:${newDetails.totalduration}`);\n    this.mediaBuffer = this.mediaBufferTimeRanges;\n    let sliding = 0;\n    if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n      const mainDetails = this.mainDetails;\n      if (newDetails.deltaUpdateFailed || !mainDetails) {\n        return;\n      }\n      const mainSlidingStartFragment = mainDetails.fragments[0];\n      if (!track.details) {\n        if (newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n          alignMediaPlaylistByPDT(newDetails, mainDetails);\n          sliding = newDetails.fragments[0].start;\n        } else if (mainSlidingStartFragment) {\n          sliding = mainSlidingStartFragment.start;\n          addSliding(newDetails, sliding);\n        }\n      } else {\n        var _this$levelLastLoaded;\n        sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n        if (sliding === 0 && mainSlidingStartFragment) {\n          sliding = mainSlidingStartFragment.start;\n          addSliding(newDetails, sliding);\n        }\n      }\n    }\n    track.details = newDetails;\n    this.levelLastLoaded = track;\n    if (trackId !== currentTrackId) {\n      return;\n    }\n    if (!this.startFragRequested && (this.mainDetails || !newDetails.live)) {\n      this.setStartPosition(this.mainDetails || newDetails, sliding);\n    }\n    this.tick();\n    if (newDetails.live && !this.fragCurrent && this.media && this.state === State.IDLE) {\n      const foundFrag = findFragmentByPTS(null, newDetails.fragments, this.media.currentTime, 0);\n      if (!foundFrag) {\n        this.warn(\"Subtitle playlist not aligned with playback\");\n        track.details = void 0;\n      }\n    }\n  }\n  _handleFragmentLoadComplete(fragLoadedData) {\n    const {\n      frag,\n      payload\n    } = fragLoadedData;\n    const decryptData = frag.decryptdata;\n    const hls = this.hls;\n    if (this.fragContextChanged(frag)) {\n      return;\n    }\n    if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && decryptData.method === \"AES-128\") {\n      const startTime = performance.now();\n      this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer).catch((err) => {\n        hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.FRAG_DECRYPT_ERROR,\n          fatal: false,\n          error: err,\n          reason: err.message,\n          frag\n        });\n        throw err;\n      }).then((decryptedData) => {\n        const endTime = performance.now();\n        hls.trigger(Events.FRAG_DECRYPTED, {\n          frag,\n          payload: decryptedData,\n          stats: {\n            tstart: startTime,\n            tdecrypt: endTime\n          }\n        });\n      }).catch((err) => {\n        this.warn(`${err.name}: ${err.message}`);\n        this.state = State.IDLE;\n      });\n    }\n  }\n  doTick() {\n    if (!this.media) {\n      this.state = State.IDLE;\n      return;\n    }\n    if (this.state === State.IDLE) {\n      const {\n        currentTrackId,\n        levels\n      } = this;\n      const track = levels == null ? void 0 : levels[currentTrackId];\n      if (!track || !levels.length || !track.details) {\n        return;\n      }\n      const {\n        config\n      } = this;\n      const currentTime = this.getLoadPosition();\n      const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);\n      const {\n        end: targetBufferTime,\n        len: bufferLen\n      } = bufferedInfo;\n      const mainBufferInfo = this.getFwdBufferInfo(this.media, PlaylistLevelType.MAIN);\n      const trackDetails = track.details;\n      const maxBufLen = this.getMaxBufferLength(mainBufferInfo == null ? void 0 : mainBufferInfo.len) + trackDetails.levelTargetDuration;\n      if (bufferLen > maxBufLen) {\n        return;\n      }\n      const fragments = trackDetails.fragments;\n      const fragLen = fragments.length;\n      const end = trackDetails.edge;\n      let foundFrag = null;\n      const fragPrevious = this.fragPrevious;\n      if (targetBufferTime < end) {\n        const tolerance = config.maxFragLookUpTolerance;\n        const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;\n        foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);\n        if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {\n          foundFrag = fragments[0];\n        }\n      } else {\n        foundFrag = fragments[fragLen - 1];\n      }\n      if (!foundFrag) {\n        return;\n      }\n      foundFrag = this.mapToInitFragWhenRequired(foundFrag);\n      if (foundFrag.sn !== \"initSegment\") {\n        const curSNIdx = foundFrag.sn - trackDetails.startSN;\n        const prevFrag = fragments[curSNIdx - 1];\n        if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {\n          foundFrag = prevFrag;\n        }\n      }\n      if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {\n        this.loadFragment(foundFrag, track, targetBufferTime);\n      }\n    }\n  }\n  getMaxBufferLength(mainBufferLength) {\n    const maxConfigBuffer = super.getMaxBufferLength();\n    if (!mainBufferLength) {\n      return maxConfigBuffer;\n    }\n    return Math.max(maxConfigBuffer, mainBufferLength);\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    this.fragCurrent = frag;\n    if (frag.sn === \"initSegment\") {\n      this._loadInitSegment(frag, level);\n    } else {\n      this.startFragRequested = true;\n      super.loadFragment(frag, level, targetBufferTime);\n    }\n  }\n  get mediaBufferTimeRanges() {\n    return new BufferableInstance(this.tracksBuffered[this.currentTrackId] || []);\n  }\n};\nvar BufferableInstance = class {\n  constructor(timeranges) {\n    this.buffered = void 0;\n    const getRange = (name, index, length) => {\n      index = index >>> 0;\n      if (index > length - 1) {\n        throw new DOMException(`Failed to execute '${name}' on 'TimeRanges': The index provided (${index}) is greater than the maximum bound (${length})`);\n      }\n      return timeranges[index][name];\n    };\n    this.buffered = {\n      get length() {\n        return timeranges.length;\n      },\n      end(index) {\n        return getRange(\"end\", index, timeranges.length);\n      },\n      start(index) {\n        return getRange(\"start\", index, timeranges.length);\n      }\n    };\n  }\n};\nvar SubtitleTrackController = class extends BasePlaylistController {\n  constructor(hls) {\n    super(hls, \"[subtitle-track-controller]\");\n    this.media = null;\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n    this.queuedDefaultTrack = -1;\n    this.asyncPollTrackChange = () => this.pollTrackChange(0);\n    this.useTextTrackPolling = false;\n    this.subtitlePollingInterval = -1;\n    this._subtitleDisplay = true;\n    this.onTextTracksChanged = () => {\n      if (!this.useTextTrackPolling) {\n        self.clearInterval(this.subtitlePollingInterval);\n      }\n      if (!this.media || !this.hls.config.renderTextTracksNatively) {\n        return;\n      }\n      let textTrack = null;\n      const tracks = filterSubtitleTracks(this.media.textTracks);\n      for (let i2 = 0; i2 < tracks.length; i2++) {\n        if (tracks[i2].mode === \"hidden\") {\n          textTrack = tracks[i2];\n        } else if (tracks[i2].mode === \"showing\") {\n          textTrack = tracks[i2];\n          break;\n        }\n      }\n      const trackId = this.findTrackForTextTrack(textTrack);\n      if (this.subtitleTrack !== trackId) {\n        this.setSubtitleTrack(trackId);\n      }\n    };\n    this.registerListeners();\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.tracks.length = 0;\n    this.tracksInGroup.length = 0;\n    this.currentTrack = null;\n    this.onTextTracksChanged = this.asyncPollTrackChange = null;\n    super.destroy();\n  }\n  get subtitleDisplay() {\n    return this._subtitleDisplay;\n  }\n  set subtitleDisplay(value) {\n    this._subtitleDisplay = value;\n    if (this.trackId > -1) {\n      this.toggleTrackModes();\n    }\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n    hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  // Listen for subtitle track change, then extract the current track ID.\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    if (!this.media) {\n      return;\n    }\n    if (this.queuedDefaultTrack > -1) {\n      this.subtitleTrack = this.queuedDefaultTrack;\n      this.queuedDefaultTrack = -1;\n    }\n    this.useTextTrackPolling = !(this.media.textTracks && \"onchange\" in this.media.textTracks);\n    if (this.useTextTrackPolling) {\n      this.pollTrackChange(500);\n    } else {\n      this.media.textTracks.addEventListener(\"change\", this.asyncPollTrackChange);\n    }\n  }\n  pollTrackChange(timeout) {\n    self.clearInterval(this.subtitlePollingInterval);\n    this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, timeout);\n  }\n  onMediaDetaching() {\n    if (!this.media) {\n      return;\n    }\n    self.clearInterval(this.subtitlePollingInterval);\n    if (!this.useTextTrackPolling) {\n      this.media.textTracks.removeEventListener(\"change\", this.asyncPollTrackChange);\n    }\n    if (this.trackId > -1) {\n      this.queuedDefaultTrack = this.trackId;\n    }\n    const textTracks = filterSubtitleTracks(this.media.textTracks);\n    textTracks.forEach((track) => {\n      clearCurrentCues(track);\n    });\n    this.subtitleTrack = -1;\n    this.media = null;\n  }\n  onManifestLoading() {\n    this.tracks = [];\n    this.groupIds = null;\n    this.tracksInGroup = [];\n    this.trackId = -1;\n    this.currentTrack = null;\n    this.selectDefaultTrack = true;\n  }\n  // Fired whenever a new manifest is loaded.\n  onManifestParsed(event, data) {\n    this.tracks = data.subtitleTracks;\n  }\n  onSubtitleTrackLoaded(event, data) {\n    const {\n      id,\n      groupId,\n      details\n    } = data;\n    const trackInActiveGroup = this.tracksInGroup[id];\n    if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n      this.warn(`Subtitle track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n      return;\n    }\n    const curDetails = trackInActiveGroup.details;\n    trackInActiveGroup.details = data.details;\n    this.log(`Subtitle track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n    if (id === this.trackId) {\n      this.playlistLoaded(id, data, curDetails);\n    }\n  }\n  onLevelLoading(event, data) {\n    this.switchLevel(data.level);\n  }\n  onLevelSwitching(event, data) {\n    this.switchLevel(data.level);\n  }\n  switchLevel(levelIndex) {\n    const levelInfo = this.hls.levels[levelIndex];\n    if (!levelInfo) {\n      return;\n    }\n    const subtitleGroups = levelInfo.subtitleGroups || null;\n    const currentGroups = this.groupIds;\n    let currentTrack = this.currentTrack;\n    if (!subtitleGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (subtitleGroups == null ? void 0 : subtitleGroups.length) || subtitleGroups != null && subtitleGroups.some((groupId) => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n      this.groupIds = subtitleGroups;\n      this.trackId = -1;\n      this.currentTrack = null;\n      const subtitleTracks = this.tracks.filter((track) => !subtitleGroups || subtitleGroups.indexOf(track.groupId) !== -1);\n      if (subtitleTracks.length) {\n        if (this.selectDefaultTrack && !subtitleTracks.some((track) => track.default)) {\n          this.selectDefaultTrack = false;\n        }\n        subtitleTracks.forEach((track, i2) => {\n          track.id = i2;\n        });\n      } else if (!currentTrack && !this.tracksInGroup.length) {\n        return;\n      }\n      this.tracksInGroup = subtitleTracks;\n      const subtitlePreference = this.hls.config.subtitlePreference;\n      if (!currentTrack && subtitlePreference) {\n        this.selectDefaultTrack = false;\n        const groupIndex = findMatchingOption(subtitlePreference, subtitleTracks);\n        if (groupIndex > -1) {\n          currentTrack = subtitleTracks[groupIndex];\n        } else {\n          const allIndex = findMatchingOption(subtitlePreference, this.tracks);\n          currentTrack = this.tracks[allIndex];\n        }\n      }\n      let trackId = this.findTrackId(currentTrack);\n      if (trackId === -1 && currentTrack) {\n        trackId = this.findTrackId(null);\n      }\n      const subtitleTracksUpdated = {\n        subtitleTracks\n      };\n      this.log(`Updating subtitle tracks, ${subtitleTracks.length} track(s) found in \"${subtitleGroups == null ? void 0 : subtitleGroups.join(\",\")}\" group-id`);\n      this.hls.trigger(Events.SUBTITLE_TRACKS_UPDATED, subtitleTracksUpdated);\n      if (trackId !== -1 && this.trackId === -1) {\n        this.setSubtitleTrack(trackId);\n      }\n    } else if (this.shouldReloadPlaylist(currentTrack)) {\n      this.setSubtitleTrack(this.trackId);\n    }\n  }\n  findTrackId(currentTrack) {\n    const tracks = this.tracksInGroup;\n    const selectDefault = this.selectDefaultTrack;\n    for (let i2 = 0; i2 < tracks.length; i2++) {\n      const track = tracks[i2];\n      if (selectDefault && !track.default || !selectDefault && !currentTrack) {\n        continue;\n      }\n      if (!currentTrack || matchesOption(track, currentTrack)) {\n        return i2;\n      }\n    }\n    if (currentTrack) {\n      for (let i2 = 0; i2 < tracks.length; i2++) {\n        const track = tracks[i2];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\", \"ASSOC-LANGUAGE\", \"CHARACTERISTICS\"])) {\n          return i2;\n        }\n      }\n      for (let i2 = 0; i2 < tracks.length; i2++) {\n        const track = tracks[i2];\n        if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, [\"LANGUAGE\"])) {\n          return i2;\n        }\n      }\n    }\n    return -1;\n  }\n  findTrackForTextTrack(textTrack) {\n    if (textTrack) {\n      const tracks = this.tracksInGroup;\n      for (let i2 = 0; i2 < tracks.length; i2++) {\n        const track = tracks[i2];\n        if (subtitleTrackMatchesTextTrack(track, textTrack)) {\n          return i2;\n        }\n      }\n    }\n    return -1;\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.SUBTITLE_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n      this.checkRetry(data);\n    }\n  }\n  get allSubtitleTracks() {\n    return this.tracks;\n  }\n  /** get alternate subtitle tracks list from playlist **/\n  get subtitleTracks() {\n    return this.tracksInGroup;\n  }\n  /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/\n  get subtitleTrack() {\n    return this.trackId;\n  }\n  set subtitleTrack(newId) {\n    this.selectDefaultTrack = false;\n    this.setSubtitleTrack(newId);\n  }\n  setSubtitleOption(subtitleOption) {\n    this.hls.config.subtitlePreference = subtitleOption;\n    if (subtitleOption) {\n      const allSubtitleTracks = this.allSubtitleTracks;\n      this.selectDefaultTrack = false;\n      if (allSubtitleTracks.length) {\n        const currentTrack = this.currentTrack;\n        if (currentTrack && matchesOption(subtitleOption, currentTrack)) {\n          return currentTrack;\n        }\n        const groupIndex = findMatchingOption(subtitleOption, this.tracksInGroup);\n        if (groupIndex > -1) {\n          const track = this.tracksInGroup[groupIndex];\n          this.setSubtitleTrack(groupIndex);\n          return track;\n        } else if (currentTrack) {\n          return null;\n        } else {\n          const allIndex = findMatchingOption(subtitleOption, allSubtitleTracks);\n          if (allIndex > -1) {\n            return allSubtitleTracks[allIndex];\n          }\n        }\n      }\n    }\n    return null;\n  }\n  loadPlaylist(hlsUrlParameters) {\n    super.loadPlaylist();\n    const currentTrack = this.currentTrack;\n    if (this.shouldLoadPlaylist(currentTrack) && currentTrack) {\n      const id = currentTrack.id;\n      const groupId = currentTrack.groupId;\n      let url = currentTrack.url;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      this.log(`Loading subtitle playlist for id ${id}`);\n      this.hls.trigger(Events.SUBTITLE_TRACK_LOADING, {\n        url,\n        id,\n        groupId,\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n  /**\n   * Disables the old subtitleTrack and sets current mode on the next subtitleTrack.\n   * This operates on the DOM textTracks.\n   * A value of -1 will disable all subtitle tracks.\n   */\n  toggleTrackModes() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const textTracks = filterSubtitleTracks(media.textTracks);\n    const currentTrack = this.currentTrack;\n    let nextTrack;\n    if (currentTrack) {\n      nextTrack = textTracks.filter((textTrack) => subtitleTrackMatchesTextTrack(currentTrack, textTrack))[0];\n      if (!nextTrack) {\n        this.warn(`Unable to find subtitle TextTrack with name \"${currentTrack.name}\" and language \"${currentTrack.lang}\"`);\n      }\n    }\n    [].slice.call(textTracks).forEach((track) => {\n      if (track.mode !== \"disabled\" && track !== nextTrack) {\n        track.mode = \"disabled\";\n      }\n    });\n    if (nextTrack) {\n      const mode = this.subtitleDisplay ? \"showing\" : \"hidden\";\n      if (nextTrack.mode !== mode) {\n        nextTrack.mode = mode;\n      }\n    }\n  }\n  /**\n   * This method is responsible for validating the subtitle index and periodically reloading if live.\n   * Dispatches the SUBTITLE_TRACK_SWITCH event, which instructs the subtitle-stream-controller to load the selected track.\n   */\n  setSubtitleTrack(newId) {\n    const tracks = this.tracksInGroup;\n    if (!this.media) {\n      this.queuedDefaultTrack = newId;\n      return;\n    }\n    if (newId < -1 || newId >= tracks.length || !isFiniteNumber(newId)) {\n      this.warn(`Invalid subtitle track id: ${newId}`);\n      return;\n    }\n    this.clearTimer();\n    this.selectDefaultTrack = false;\n    const lastTrack = this.currentTrack;\n    const track = tracks[newId] || null;\n    this.trackId = newId;\n    this.currentTrack = track;\n    this.toggleTrackModes();\n    if (!track) {\n      this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n        id: newId\n      });\n      return;\n    }\n    const trackLoaded = !!track.details && !track.details.live;\n    if (newId === this.trackId && track === lastTrack && trackLoaded) {\n      return;\n    }\n    this.log(`Switching to subtitle-track ${newId}` + (track ? ` \"${track.name}\" lang:${track.lang} group:${track.groupId}` : \"\"));\n    const {\n      id,\n      groupId = \"\",\n      name,\n      type,\n      url\n    } = track;\n    this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n      id,\n      groupId,\n      name,\n      type,\n      url\n    });\n    const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n    this.loadPlaylist(hlsUrlParameters);\n  }\n};\nvar BufferOperationQueue = class {\n  constructor(sourceBufferReference) {\n    this.buffers = void 0;\n    this.queues = {\n      video: [],\n      audio: [],\n      audiovideo: []\n    };\n    this.buffers = sourceBufferReference;\n  }\n  append(operation, type, pending) {\n    const queue = this.queues[type];\n    queue.push(operation);\n    if (queue.length === 1 && !pending) {\n      this.executeNext(type);\n    }\n  }\n  insertAbort(operation, type) {\n    const queue = this.queues[type];\n    queue.unshift(operation);\n    this.executeNext(type);\n  }\n  appendBlocker(type) {\n    let execute;\n    const promise = new Promise((resolve) => {\n      execute = resolve;\n    });\n    const operation = {\n      execute,\n      onStart: () => {\n      },\n      onComplete: () => {\n      },\n      onError: () => {\n      }\n    };\n    this.append(operation, type);\n    return promise;\n  }\n  executeNext(type) {\n    const queue = this.queues[type];\n    if (queue.length) {\n      const operation = queue[0];\n      try {\n        operation.execute();\n      } catch (error) {\n        logger.warn(`[buffer-operation-queue]: Exception executing \"${type}\" SourceBuffer operation: ${error}`);\n        operation.onError(error);\n        const sb = this.buffers[type];\n        if (!(sb != null && sb.updating)) {\n          this.shiftAndExecuteNext(type);\n        }\n      }\n    }\n  }\n  shiftAndExecuteNext(type) {\n    this.queues[type].shift();\n    this.executeNext(type);\n  }\n  current(type) {\n    return this.queues[type][0];\n  }\n};\nvar VIDEO_CODEC_PROFILE_REPLACE = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\\.[^.,]+)+/;\nvar BufferController = class {\n  constructor(hls) {\n    this.details = null;\n    this._objectUrl = null;\n    this.operationQueue = void 0;\n    this.listeners = void 0;\n    this.hls = void 0;\n    this.bufferCodecEventsExpected = 0;\n    this._bufferCodecEventsTotal = 0;\n    this.media = null;\n    this.mediaSource = null;\n    this.lastMpegAudioChunk = null;\n    this.appendSource = void 0;\n    this.appendErrors = {\n      audio: 0,\n      video: 0,\n      audiovideo: 0\n    };\n    this.tracks = {};\n    this.pendingTracks = {};\n    this.sourceBuffer = void 0;\n    this.log = void 0;\n    this.warn = void 0;\n    this.error = void 0;\n    this._onEndStreaming = (event) => {\n      if (!this.hls) {\n        return;\n      }\n      this.hls.pauseBuffering();\n    };\n    this._onStartStreaming = (event) => {\n      if (!this.hls) {\n        return;\n      }\n      this.hls.resumeBuffering();\n    };\n    this._onMediaSourceOpen = () => {\n      const {\n        media,\n        mediaSource\n      } = this;\n      this.log(\"Media source opened\");\n      if (media) {\n        media.removeEventListener(\"emptied\", this._onMediaEmptied);\n        this.updateMediaElementDuration();\n        this.hls.trigger(Events.MEDIA_ATTACHED, {\n          media,\n          mediaSource\n        });\n      }\n      if (mediaSource) {\n        mediaSource.removeEventListener(\"sourceopen\", this._onMediaSourceOpen);\n      }\n      this.checkPendingTracks();\n    };\n    this._onMediaSourceClose = () => {\n      this.log(\"Media source closed\");\n    };\n    this._onMediaSourceEnded = () => {\n      this.log(\"Media source ended\");\n    };\n    this._onMediaEmptied = () => {\n      const {\n        mediaSrc,\n        _objectUrl\n      } = this;\n      if (mediaSrc !== _objectUrl) {\n        logger.error(`Media element src was set while attaching MediaSource (${_objectUrl} > ${mediaSrc})`);\n      }\n    };\n    this.hls = hls;\n    const logPrefix = \"[buffer-controller]\";\n    this.appendSource = isManagedMediaSource(getMediaSource(hls.config.preferManagedMediaSource));\n    this.log = logger.log.bind(logger, logPrefix);\n    this.warn = logger.warn.bind(logger, logPrefix);\n    this.error = logger.error.bind(logger, logPrefix);\n    this._initSourceBuffer();\n    this.registerListeners();\n  }\n  hasSourceTypes() {\n    return this.getSourceBufferTypes().length > 0 || Object.keys(this.pendingTracks).length > 0;\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.details = null;\n    this.lastMpegAudioChunk = null;\n    this.hls = null;\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.on(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n    hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.on(Events.BUFFER_EOS, this.onBufferEos, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    hls.on(Events.FRAG_PARSED, this.onFragParsed, this);\n    hls.on(Events.FRAG_CHANGED, this.onFragChanged, this);\n  }\n  unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n    hls.off(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n    hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.off(Events.BUFFER_EOS, this.onBufferEos, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n    hls.off(Events.FRAG_PARSED, this.onFragParsed, this);\n    hls.off(Events.FRAG_CHANGED, this.onFragChanged, this);\n  }\n  _initSourceBuffer() {\n    this.sourceBuffer = {};\n    this.operationQueue = new BufferOperationQueue(this.sourceBuffer);\n    this.listeners = {\n      audio: [],\n      video: [],\n      audiovideo: []\n    };\n    this.appendErrors = {\n      audio: 0,\n      video: 0,\n      audiovideo: 0\n    };\n    this.lastMpegAudioChunk = null;\n  }\n  onManifestLoading() {\n    this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = 0;\n    this.details = null;\n  }\n  onManifestParsed(event, data) {\n    let codecEvents = 2;\n    if (data.audio && !data.video || !data.altAudio || false) {\n      codecEvents = 1;\n    }\n    this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = codecEvents;\n    this.log(`${this.bufferCodecEventsExpected} bufferCodec event(s) expected`);\n  }\n  onMediaAttaching(event, data) {\n    const media = this.media = data.media;\n    const MediaSource = getMediaSource(this.appendSource);\n    if (media && MediaSource) {\n      var _ms$constructor;\n      const ms = this.mediaSource = new MediaSource();\n      this.log(`created media source: ${(_ms$constructor = ms.constructor) == null ? void 0 : _ms$constructor.name}`);\n      ms.addEventListener(\"sourceopen\", this._onMediaSourceOpen);\n      ms.addEventListener(\"sourceended\", this._onMediaSourceEnded);\n      ms.addEventListener(\"sourceclose\", this._onMediaSourceClose);\n      if (this.appendSource) {\n        ms.addEventListener(\"startstreaming\", this._onStartStreaming);\n        ms.addEventListener(\"endstreaming\", this._onEndStreaming);\n      }\n      const objectUrl = this._objectUrl = self.URL.createObjectURL(ms);\n      if (this.appendSource) {\n        try {\n          media.removeAttribute(\"src\");\n          const MMS = self.ManagedMediaSource;\n          media.disableRemotePlayback = media.disableRemotePlayback || MMS && ms instanceof MMS;\n          removeSourceChildren(media);\n          addSource(media, objectUrl);\n          media.load();\n        } catch (error) {\n          media.src = objectUrl;\n        }\n      } else {\n        media.src = objectUrl;\n      }\n      media.addEventListener(\"emptied\", this._onMediaEmptied);\n    }\n  }\n  onMediaDetaching() {\n    const {\n      media,\n      mediaSource,\n      _objectUrl\n    } = this;\n    if (mediaSource) {\n      this.log(\"media source detaching\");\n      if (mediaSource.readyState === \"open\") {\n        try {\n          mediaSource.endOfStream();\n        } catch (err) {\n          this.warn(`onMediaDetaching: ${err.message} while calling endOfStream`);\n        }\n      }\n      this.onBufferReset();\n      mediaSource.removeEventListener(\"sourceopen\", this._onMediaSourceOpen);\n      mediaSource.removeEventListener(\"sourceended\", this._onMediaSourceEnded);\n      mediaSource.removeEventListener(\"sourceclose\", this._onMediaSourceClose);\n      if (this.appendSource) {\n        mediaSource.removeEventListener(\"startstreaming\", this._onStartStreaming);\n        mediaSource.removeEventListener(\"endstreaming\", this._onEndStreaming);\n      }\n      if (media) {\n        media.removeEventListener(\"emptied\", this._onMediaEmptied);\n        if (_objectUrl) {\n          self.URL.revokeObjectURL(_objectUrl);\n        }\n        if (this.mediaSrc === _objectUrl) {\n          media.removeAttribute(\"src\");\n          if (this.appendSource) {\n            removeSourceChildren(media);\n          }\n          media.load();\n        } else {\n          this.warn(\"media|source.src was changed by a third party - skip cleanup\");\n        }\n      }\n      this.mediaSource = null;\n      this.media = null;\n      this._objectUrl = null;\n      this.bufferCodecEventsExpected = this._bufferCodecEventsTotal;\n      this.pendingTracks = {};\n      this.tracks = {};\n    }\n    this.hls.trigger(Events.MEDIA_DETACHED, void 0);\n  }\n  onBufferReset() {\n    this.getSourceBufferTypes().forEach((type) => {\n      this.resetBuffer(type);\n    });\n    this._initSourceBuffer();\n    this.hls.resumeBuffering();\n  }\n  resetBuffer(type) {\n    const sb = this.sourceBuffer[type];\n    try {\n      if (sb) {\n        var _this$mediaSource;\n        this.removeBufferListeners(type);\n        this.sourceBuffer[type] = void 0;\n        if ((_this$mediaSource = this.mediaSource) != null && _this$mediaSource.sourceBuffers.length) {\n          this.mediaSource.removeSourceBuffer(sb);\n        }\n      }\n    } catch (err) {\n      this.warn(`onBufferReset ${type}`, err);\n    }\n  }\n  onBufferCodecs(event, data) {\n    const sourceBufferCount = this.getSourceBufferTypes().length;\n    const trackNames = Object.keys(data);\n    trackNames.forEach((trackName) => {\n      if (sourceBufferCount) {\n        const track = this.tracks[trackName];\n        if (track && typeof track.buffer.changeType === \"function\") {\n          var _trackCodec;\n          const {\n            id,\n            codec,\n            levelCodec,\n            container,\n            metadata\n          } = data[trackName];\n          const currentCodecFull = pickMostCompleteCodecName(track.codec, track.levelCodec);\n          const currentCodec = currentCodecFull == null ? void 0 : currentCodecFull.replace(VIDEO_CODEC_PROFILE_REPLACE, \"$1\");\n          let trackCodec = pickMostCompleteCodecName(codec, levelCodec);\n          const nextCodec = (_trackCodec = trackCodec) == null ? void 0 : _trackCodec.replace(VIDEO_CODEC_PROFILE_REPLACE, \"$1\");\n          if (trackCodec && currentCodec !== nextCodec) {\n            if (trackName.slice(0, 5) === \"audio\") {\n              trackCodec = getCodecCompatibleName(trackCodec, this.appendSource);\n            }\n            const mimeType = `${container};codecs=${trackCodec}`;\n            this.appendChangeType(trackName, mimeType);\n            this.log(`switching codec ${currentCodecFull} to ${trackCodec}`);\n            this.tracks[trackName] = {\n              buffer: track.buffer,\n              codec,\n              container,\n              levelCodec,\n              metadata,\n              id\n            };\n          }\n        }\n      } else {\n        this.pendingTracks[trackName] = data[trackName];\n      }\n    });\n    if (sourceBufferCount) {\n      return;\n    }\n    const bufferCodecEventsExpected = Math.max(this.bufferCodecEventsExpected - 1, 0);\n    if (this.bufferCodecEventsExpected !== bufferCodecEventsExpected) {\n      this.log(`${bufferCodecEventsExpected} bufferCodec event(s) expected ${trackNames.join(\",\")}`);\n      this.bufferCodecEventsExpected = bufferCodecEventsExpected;\n    }\n    if (this.mediaSource && this.mediaSource.readyState === \"open\") {\n      this.checkPendingTracks();\n    }\n  }\n  appendChangeType(type, mimeType) {\n    const {\n      operationQueue\n    } = this;\n    const operation = {\n      execute: () => {\n        const sb = this.sourceBuffer[type];\n        if (sb) {\n          this.log(`changing ${type} sourceBuffer type to ${mimeType}`);\n          sb.changeType(mimeType);\n        }\n        operationQueue.shiftAndExecuteNext(type);\n      },\n      onStart: () => {\n      },\n      onComplete: () => {\n      },\n      onError: (error) => {\n        this.warn(`Failed to change ${type} SourceBuffer type`, error);\n      }\n    };\n    operationQueue.append(operation, type, !!this.pendingTracks[type]);\n  }\n  onBufferAppending(event, eventData) {\n    const {\n      hls,\n      operationQueue,\n      tracks\n    } = this;\n    const {\n      data,\n      type,\n      frag,\n      part,\n      chunkMeta\n    } = eventData;\n    const chunkStats = chunkMeta.buffering[type];\n    const bufferAppendingStart = self.performance.now();\n    chunkStats.start = bufferAppendingStart;\n    const fragBuffering = frag.stats.buffering;\n    const partBuffering = part ? part.stats.buffering : null;\n    if (fragBuffering.start === 0) {\n      fragBuffering.start = bufferAppendingStart;\n    }\n    if (partBuffering && partBuffering.start === 0) {\n      partBuffering.start = bufferAppendingStart;\n    }\n    const audioTrack = tracks.audio;\n    let checkTimestampOffset = false;\n    if (type === \"audio\" && (audioTrack == null ? void 0 : audioTrack.container) === \"audio/mpeg\") {\n      checkTimestampOffset = !this.lastMpegAudioChunk || chunkMeta.id === 1 || this.lastMpegAudioChunk.sn !== chunkMeta.sn;\n      this.lastMpegAudioChunk = chunkMeta;\n    }\n    const fragStart = frag.start;\n    const operation = {\n      execute: () => {\n        chunkStats.executeStart = self.performance.now();\n        if (checkTimestampOffset) {\n          const sb = this.sourceBuffer[type];\n          if (sb) {\n            const delta = fragStart - sb.timestampOffset;\n            if (Math.abs(delta) >= 0.1) {\n              this.log(`Updating audio SourceBuffer timestampOffset to ${fragStart} (delta: ${delta}) sn: ${frag.sn})`);\n              sb.timestampOffset = fragStart;\n            }\n          }\n        }\n        this.appendExecutor(data, type);\n      },\n      onStart: () => {\n      },\n      onComplete: () => {\n        const end = self.performance.now();\n        chunkStats.executeEnd = chunkStats.end = end;\n        if (fragBuffering.first === 0) {\n          fragBuffering.first = end;\n        }\n        if (partBuffering && partBuffering.first === 0) {\n          partBuffering.first = end;\n        }\n        const {\n          sourceBuffer\n        } = this;\n        const timeRanges = {};\n        for (const type2 in sourceBuffer) {\n          timeRanges[type2] = BufferHelper.getBuffered(sourceBuffer[type2]);\n        }\n        this.appendErrors[type] = 0;\n        if (type === \"audio\" || type === \"video\") {\n          this.appendErrors.audiovideo = 0;\n        } else {\n          this.appendErrors.audio = 0;\n          this.appendErrors.video = 0;\n        }\n        this.hls.trigger(Events.BUFFER_APPENDED, {\n          type,\n          frag,\n          part,\n          chunkMeta,\n          parent: frag.type,\n          timeRanges\n        });\n      },\n      onError: (error) => {\n        const event2 = {\n          type: ErrorTypes.MEDIA_ERROR,\n          parent: frag.type,\n          details: ErrorDetails.BUFFER_APPEND_ERROR,\n          sourceBufferName: type,\n          frag,\n          part,\n          chunkMeta,\n          error,\n          err: error,\n          fatal: false\n        };\n        if (error.code === DOMException.QUOTA_EXCEEDED_ERR) {\n          event2.details = ErrorDetails.BUFFER_FULL_ERROR;\n        } else {\n          const appendErrorCount = ++this.appendErrors[type];\n          event2.details = ErrorDetails.BUFFER_APPEND_ERROR;\n          this.warn(`Failed ${appendErrorCount}/${hls.config.appendErrorMaxRetry} times to append segment in \"${type}\" sourceBuffer`);\n          if (appendErrorCount >= hls.config.appendErrorMaxRetry) {\n            event2.fatal = true;\n          }\n        }\n        hls.trigger(Events.ERROR, event2);\n      }\n    };\n    operationQueue.append(operation, type, !!this.pendingTracks[type]);\n  }\n  onBufferFlushing(event, data) {\n    const {\n      operationQueue\n    } = this;\n    const flushOperation = (type) => ({\n      execute: this.removeExecutor.bind(this, type, data.startOffset, data.endOffset),\n      onStart: () => {\n      },\n      onComplete: () => {\n        this.hls.trigger(Events.BUFFER_FLUSHED, {\n          type\n        });\n      },\n      onError: (error) => {\n        this.warn(`Failed to remove from ${type} SourceBuffer`, error);\n      }\n    });\n    if (data.type) {\n      operationQueue.append(flushOperation(data.type), data.type);\n    } else {\n      this.getSourceBufferTypes().forEach((type) => {\n        operationQueue.append(flushOperation(type), type);\n      });\n    }\n  }\n  onFragParsed(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    const buffersAppendedTo = [];\n    const elementaryStreams = part ? part.elementaryStreams : frag.elementaryStreams;\n    if (elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO]) {\n      buffersAppendedTo.push(\"audiovideo\");\n    } else {\n      if (elementaryStreams[ElementaryStreamTypes.AUDIO]) {\n        buffersAppendedTo.push(\"audio\");\n      }\n      if (elementaryStreams[ElementaryStreamTypes.VIDEO]) {\n        buffersAppendedTo.push(\"video\");\n      }\n    }\n    const onUnblocked = () => {\n      const now2 = self.performance.now();\n      frag.stats.buffering.end = now2;\n      if (part) {\n        part.stats.buffering.end = now2;\n      }\n      const stats = part ? part.stats : frag.stats;\n      this.hls.trigger(Events.FRAG_BUFFERED, {\n        frag,\n        part,\n        stats,\n        id: frag.type\n      });\n    };\n    if (buffersAppendedTo.length === 0) {\n      this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${frag.type} level: ${frag.level} sn: ${frag.sn}`);\n    }\n    this.blockBuffers(onUnblocked, buffersAppendedTo);\n  }\n  onFragChanged(event, data) {\n    this.trimBuffers();\n  }\n  // on BUFFER_EOS mark matching sourcebuffer(s) as ended and trigger checkEos()\n  // an undefined data.type will mark all buffers as EOS.\n  onBufferEos(event, data) {\n    const ended = this.getSourceBufferTypes().reduce((acc, type) => {\n      const sb = this.sourceBuffer[type];\n      if (sb && (!data.type || data.type === type)) {\n        sb.ending = true;\n        if (!sb.ended) {\n          sb.ended = true;\n          this.log(`${type} sourceBuffer now EOS`);\n        }\n      }\n      return acc && !!(!sb || sb.ended);\n    }, true);\n    if (ended) {\n      this.log(`Queueing mediaSource.endOfStream()`);\n      this.blockBuffers(() => {\n        this.getSourceBufferTypes().forEach((type) => {\n          const sb = this.sourceBuffer[type];\n          if (sb) {\n            sb.ending = false;\n          }\n        });\n        const {\n          mediaSource\n        } = this;\n        if (!mediaSource || mediaSource.readyState !== \"open\") {\n          if (mediaSource) {\n            this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${mediaSource.readyState}`);\n          }\n          return;\n        }\n        this.log(`Calling mediaSource.endOfStream()`);\n        mediaSource.endOfStream();\n      });\n    }\n  }\n  onLevelUpdated(event, {\n    details\n  }) {\n    if (!details.fragments.length) {\n      return;\n    }\n    this.details = details;\n    if (this.getSourceBufferTypes().length) {\n      this.blockBuffers(this.updateMediaElementDuration.bind(this));\n    } else {\n      this.updateMediaElementDuration();\n    }\n  }\n  trimBuffers() {\n    const {\n      hls,\n      details,\n      media\n    } = this;\n    if (!media || details === null) {\n      return;\n    }\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    if (!sourceBufferTypes.length) {\n      return;\n    }\n    const config = hls.config;\n    const currentTime = media.currentTime;\n    const targetDuration = details.levelTargetDuration;\n    const backBufferLength = details.live && config.liveBackBufferLength !== null ? config.liveBackBufferLength : config.backBufferLength;\n    if (isFiniteNumber(backBufferLength) && backBufferLength > 0) {\n      const maxBackBufferLength = Math.max(backBufferLength, targetDuration);\n      const targetBackBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration - maxBackBufferLength;\n      this.flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition);\n    }\n    if (isFiniteNumber(config.frontBufferFlushThreshold) && config.frontBufferFlushThreshold > 0) {\n      const frontBufferLength = Math.max(config.maxBufferLength, config.frontBufferFlushThreshold);\n      const maxFrontBufferLength = Math.max(frontBufferLength, targetDuration);\n      const targetFrontBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration + maxFrontBufferLength;\n      this.flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition);\n    }\n  }\n  flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition) {\n    const {\n      details,\n      sourceBuffer\n    } = this;\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    sourceBufferTypes.forEach((type) => {\n      const sb = sourceBuffer[type];\n      if (sb) {\n        const buffered = BufferHelper.getBuffered(sb);\n        if (buffered.length > 0 && targetBackBufferPosition > buffered.start(0)) {\n          this.hls.trigger(Events.BACK_BUFFER_REACHED, {\n            bufferEnd: targetBackBufferPosition\n          });\n          if (details != null && details.live) {\n            this.hls.trigger(Events.LIVE_BACK_BUFFER_REACHED, {\n              bufferEnd: targetBackBufferPosition\n            });\n          } else if (sb.ended && buffered.end(buffered.length - 1) - currentTime < targetDuration * 2) {\n            this.log(`Cannot flush ${type} back buffer while SourceBuffer is in ended state`);\n            return;\n          }\n          this.hls.trigger(Events.BUFFER_FLUSHING, {\n            startOffset: 0,\n            endOffset: targetBackBufferPosition,\n            type\n          });\n        }\n      }\n    });\n  }\n  flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition) {\n    const {\n      sourceBuffer\n    } = this;\n    const sourceBufferTypes = this.getSourceBufferTypes();\n    sourceBufferTypes.forEach((type) => {\n      const sb = sourceBuffer[type];\n      if (sb) {\n        const buffered = BufferHelper.getBuffered(sb);\n        const numBufferedRanges = buffered.length;\n        if (numBufferedRanges < 2) {\n          return;\n        }\n        const bufferStart = buffered.start(numBufferedRanges - 1);\n        const bufferEnd = buffered.end(numBufferedRanges - 1);\n        if (targetFrontBufferPosition > bufferStart || currentTime >= bufferStart && currentTime <= bufferEnd) {\n          return;\n        } else if (sb.ended && currentTime - bufferEnd < 2 * targetDuration) {\n          this.log(`Cannot flush ${type} front buffer while SourceBuffer is in ended state`);\n          return;\n        }\n        this.hls.trigger(Events.BUFFER_FLUSHING, {\n          startOffset: bufferStart,\n          endOffset: Infinity,\n          type\n        });\n      }\n    });\n  }\n  /**\n   * Update Media Source duration to current level duration or override to Infinity if configuration parameter\n   * 'liveDurationInfinity` is set to `true`\n   * More details: https://github.com/video-dev/hls.js/issues/355\n   */\n  updateMediaElementDuration() {\n    if (!this.details || !this.media || !this.mediaSource || this.mediaSource.readyState !== \"open\") {\n      return;\n    }\n    const {\n      details,\n      hls,\n      media,\n      mediaSource\n    } = this;\n    const levelDuration = details.fragments[0].start + details.totalduration;\n    const mediaDuration = media.duration;\n    const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : 0;\n    if (details.live && hls.config.liveDurationInfinity) {\n      mediaSource.duration = Infinity;\n      this.updateSeekableRange(details);\n    } else if (levelDuration > msDuration && levelDuration > mediaDuration || !isFiniteNumber(mediaDuration)) {\n      this.log(`Updating Media Source duration to ${levelDuration.toFixed(3)}`);\n      mediaSource.duration = levelDuration;\n    }\n  }\n  updateSeekableRange(levelDetails) {\n    const mediaSource = this.mediaSource;\n    const fragments = levelDetails.fragments;\n    const len = fragments.length;\n    if (len && levelDetails.live && mediaSource != null && mediaSource.setLiveSeekableRange) {\n      const start = Math.max(0, fragments[0].start);\n      const end = Math.max(start, start + levelDetails.totalduration);\n      this.log(`Media Source duration is set to ${mediaSource.duration}. Setting seekable range to ${start}-${end}.`);\n      mediaSource.setLiveSeekableRange(start, end);\n    }\n  }\n  checkPendingTracks() {\n    const {\n      bufferCodecEventsExpected,\n      operationQueue,\n      pendingTracks\n    } = this;\n    const pendingTracksCount = Object.keys(pendingTracks).length;\n    if (pendingTracksCount && (!bufferCodecEventsExpected || pendingTracksCount === 2 || \"audiovideo\" in pendingTracks)) {\n      this.createSourceBuffers(pendingTracks);\n      this.pendingTracks = {};\n      const buffers = this.getSourceBufferTypes();\n      if (buffers.length) {\n        this.hls.trigger(Events.BUFFER_CREATED, {\n          tracks: this.tracks\n        });\n        buffers.forEach((type) => {\n          operationQueue.executeNext(type);\n        });\n      } else {\n        const error = new Error(\"could not create source buffer for media codec(s)\");\n        this.hls.trigger(Events.ERROR, {\n          type: ErrorTypes.MEDIA_ERROR,\n          details: ErrorDetails.BUFFER_INCOMPATIBLE_CODECS_ERROR,\n          fatal: true,\n          error,\n          reason: error.message\n        });\n      }\n    }\n  }\n  createSourceBuffers(tracks) {\n    const {\n      sourceBuffer,\n      mediaSource\n    } = this;\n    if (!mediaSource) {\n      throw Error(\"createSourceBuffers called when mediaSource was null\");\n    }\n    for (const trackName in tracks) {\n      if (!sourceBuffer[trackName]) {\n        var _track$levelCodec;\n        const track = tracks[trackName];\n        if (!track) {\n          throw Error(`source buffer exists for track ${trackName}, however track does not`);\n        }\n        let codec = ((_track$levelCodec = track.levelCodec) == null ? void 0 : _track$levelCodec.indexOf(\",\")) === -1 ? track.levelCodec : track.codec;\n        if (codec) {\n          if (trackName.slice(0, 5) === \"audio\") {\n            codec = getCodecCompatibleName(codec, this.appendSource);\n          }\n        }\n        const mimeType = `${track.container};codecs=${codec}`;\n        this.log(`creating sourceBuffer(${mimeType})`);\n        try {\n          const sb = sourceBuffer[trackName] = mediaSource.addSourceBuffer(mimeType);\n          const sbName = trackName;\n          this.addBufferListener(sbName, \"updatestart\", this._onSBUpdateStart);\n          this.addBufferListener(sbName, \"updateend\", this._onSBUpdateEnd);\n          this.addBufferListener(sbName, \"error\", this._onSBUpdateError);\n          if (this.appendSource) {\n            this.addBufferListener(sbName, \"bufferedchange\", (type, event) => {\n              const removedRanges = event.removedRanges;\n              if (removedRanges != null && removedRanges.length) {\n                this.hls.trigger(Events.BUFFER_FLUSHED, {\n                  type: trackName\n                });\n              }\n            });\n          }\n          this.tracks[trackName] = {\n            buffer: sb,\n            codec,\n            container: track.container,\n            levelCodec: track.levelCodec,\n            metadata: track.metadata,\n            id: track.id\n          };\n        } catch (err) {\n          this.error(`error while trying to add sourceBuffer: ${err.message}`);\n          this.hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.BUFFER_ADD_CODEC_ERROR,\n            fatal: false,\n            error: err,\n            sourceBufferName: trackName,\n            mimeType\n          });\n        }\n      }\n    }\n  }\n  get mediaSrc() {\n    var _this$media, _this$media$querySele;\n    const media = ((_this$media = this.media) == null ? void 0 : (_this$media$querySele = _this$media.querySelector) == null ? void 0 : _this$media$querySele.call(_this$media, \"source\")) || this.media;\n    return media == null ? void 0 : media.src;\n  }\n  _onSBUpdateStart(type) {\n    const {\n      operationQueue\n    } = this;\n    const operation = operationQueue.current(type);\n    operation.onStart();\n  }\n  _onSBUpdateEnd(type) {\n    var _this$mediaSource2;\n    if (((_this$mediaSource2 = this.mediaSource) == null ? void 0 : _this$mediaSource2.readyState) === \"closed\") {\n      this.resetBuffer(type);\n      return;\n    }\n    const {\n      operationQueue\n    } = this;\n    const operation = operationQueue.current(type);\n    operation.onComplete();\n    operationQueue.shiftAndExecuteNext(type);\n  }\n  _onSBUpdateError(type, event) {\n    var _this$mediaSource3;\n    const error = new Error(`${type} SourceBuffer error. MediaSource readyState: ${(_this$mediaSource3 = this.mediaSource) == null ? void 0 : _this$mediaSource3.readyState}`);\n    this.error(`${error}`, event);\n    this.hls.trigger(Events.ERROR, {\n      type: ErrorTypes.MEDIA_ERROR,\n      details: ErrorDetails.BUFFER_APPENDING_ERROR,\n      sourceBufferName: type,\n      error,\n      fatal: false\n    });\n    const operation = this.operationQueue.current(type);\n    if (operation) {\n      operation.onError(error);\n    }\n  }\n  // This method must result in an updateend event; if remove is not called, _onSBUpdateEnd must be called manually\n  removeExecutor(type, startOffset, endOffset) {\n    const {\n      media,\n      mediaSource,\n      operationQueue,\n      sourceBuffer\n    } = this;\n    const sb = sourceBuffer[type];\n    if (!media || !mediaSource || !sb) {\n      this.warn(`Attempting to remove from the ${type} SourceBuffer, but it does not exist`);\n      operationQueue.shiftAndExecuteNext(type);\n      return;\n    }\n    const mediaDuration = isFiniteNumber(media.duration) ? media.duration : Infinity;\n    const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : Infinity;\n    const removeStart = Math.max(0, startOffset);\n    const removeEnd = Math.min(endOffset, mediaDuration, msDuration);\n    if (removeEnd > removeStart && (!sb.ending || sb.ended)) {\n      sb.ended = false;\n      this.log(`Removing [${removeStart},${removeEnd}] from the ${type} SourceBuffer`);\n      sb.remove(removeStart, removeEnd);\n    } else {\n      operationQueue.shiftAndExecuteNext(type);\n    }\n  }\n  // This method must result in an updateend event; if append is not called, _onSBUpdateEnd must be called manually\n  appendExecutor(data, type) {\n    const sb = this.sourceBuffer[type];\n    if (!sb) {\n      if (!this.pendingTracks[type]) {\n        throw new Error(`Attempting to append to the ${type} SourceBuffer, but it does not exist`);\n      }\n      return;\n    }\n    sb.ended = false;\n    sb.appendBuffer(data);\n  }\n  // Enqueues an operation to each SourceBuffer queue which, upon execution, resolves a promise. When all promises\n  // resolve, the onUnblocked function is executed. Functions calling this method do not need to unblock the queue\n  // upon completion, since we already do it here\n  blockBuffers(onUnblocked, buffers = this.getSourceBufferTypes()) {\n    if (!buffers.length) {\n      this.log(\"Blocking operation requested, but no SourceBuffers exist\");\n      Promise.resolve().then(onUnblocked);\n      return;\n    }\n    const {\n      operationQueue\n    } = this;\n    const blockingOperations = buffers.map((type) => operationQueue.appendBlocker(type));\n    Promise.all(blockingOperations).then(() => {\n      onUnblocked();\n      buffers.forEach((type) => {\n        const sb = this.sourceBuffer[type];\n        if (!(sb != null && sb.updating)) {\n          operationQueue.shiftAndExecuteNext(type);\n        }\n      });\n    });\n  }\n  getSourceBufferTypes() {\n    return Object.keys(this.sourceBuffer);\n  }\n  addBufferListener(type, event, fn) {\n    const buffer = this.sourceBuffer[type];\n    if (!buffer) {\n      return;\n    }\n    const listener = fn.bind(this, type);\n    this.listeners[type].push({\n      event,\n      listener\n    });\n    buffer.addEventListener(event, listener);\n  }\n  removeBufferListeners(type) {\n    const buffer = this.sourceBuffer[type];\n    if (!buffer) {\n      return;\n    }\n    this.listeners[type].forEach((l) => {\n      buffer.removeEventListener(l.event, l.listener);\n    });\n  }\n};\nfunction removeSourceChildren(node) {\n  const sourceChildren = node.querySelectorAll(\"source\");\n  [].slice.call(sourceChildren).forEach((source) => {\n    node.removeChild(source);\n  });\n}\nfunction addSource(media, url) {\n  const source = self.document.createElement(\"source\");\n  source.type = \"video/mp4\";\n  source.src = url;\n  media.appendChild(source);\n}\nvar specialCea608CharsCodes = {\n  42: 225,\n  // lowercase a, acute accent\n  92: 233,\n  // lowercase e, acute accent\n  94: 237,\n  // lowercase i, acute accent\n  95: 243,\n  // lowercase o, acute accent\n  96: 250,\n  // lowercase u, acute accent\n  123: 231,\n  // lowercase c with cedilla\n  124: 247,\n  // division symbol\n  125: 209,\n  // uppercase N tilde\n  126: 241,\n  // lowercase n tilde\n  127: 9608,\n  // Full block\n  // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F\n  // THIS MEANS THAT \\x50 MUST BE ADDED TO THE VALUES\n  128: 174,\n  // Registered symbol (R)\n  129: 176,\n  // degree sign\n  130: 189,\n  // 1/2 symbol\n  131: 191,\n  // Inverted (open) question mark\n  132: 8482,\n  // Trademark symbol (TM)\n  133: 162,\n  // Cents symbol\n  134: 163,\n  // Pounds sterling\n  135: 9834,\n  // Music 8'th note\n  136: 224,\n  // lowercase a, grave accent\n  137: 32,\n  // transparent space (regular)\n  138: 232,\n  // lowercase e, grave accent\n  139: 226,\n  // lowercase a, circumflex accent\n  140: 234,\n  // lowercase e, circumflex accent\n  141: 238,\n  // lowercase i, circumflex accent\n  142: 244,\n  // lowercase o, circumflex accent\n  143: 251,\n  // lowercase u, circumflex accent\n  // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F\n  144: 193,\n  // capital letter A with acute\n  145: 201,\n  // capital letter E with acute\n  146: 211,\n  // capital letter O with acute\n  147: 218,\n  // capital letter U with acute\n  148: 220,\n  // capital letter U with diaresis\n  149: 252,\n  // lowercase letter U with diaeresis\n  150: 8216,\n  // opening single quote\n  151: 161,\n  // inverted exclamation mark\n  152: 42,\n  // asterisk\n  153: 8217,\n  // closing single quote\n  154: 9473,\n  // box drawings heavy horizontal\n  155: 169,\n  // copyright sign\n  156: 8480,\n  // Service mark\n  157: 8226,\n  // (round) bullet\n  158: 8220,\n  // Left double quotation mark\n  159: 8221,\n  // Right double quotation mark\n  160: 192,\n  // uppercase A, grave accent\n  161: 194,\n  // uppercase A, circumflex\n  162: 199,\n  // uppercase C with cedilla\n  163: 200,\n  // uppercase E, grave accent\n  164: 202,\n  // uppercase E, circumflex\n  165: 203,\n  // capital letter E with diaresis\n  166: 235,\n  // lowercase letter e with diaresis\n  167: 206,\n  // uppercase I, circumflex\n  168: 207,\n  // uppercase I, with diaresis\n  169: 239,\n  // lowercase i, with diaresis\n  170: 212,\n  // uppercase O, circumflex\n  171: 217,\n  // uppercase U, grave accent\n  172: 249,\n  // lowercase u, grave accent\n  173: 219,\n  // uppercase U, circumflex\n  174: 171,\n  // left-pointing double angle quotation mark\n  175: 187,\n  // right-pointing double angle quotation mark\n  // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n  // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F\n  176: 195,\n  // Uppercase A, tilde\n  177: 227,\n  // Lowercase a, tilde\n  178: 205,\n  // Uppercase I, acute accent\n  179: 204,\n  // Uppercase I, grave accent\n  180: 236,\n  // Lowercase i, grave accent\n  181: 210,\n  // Uppercase O, grave accent\n  182: 242,\n  // Lowercase o, grave accent\n  183: 213,\n  // Uppercase O, tilde\n  184: 245,\n  // Lowercase o, tilde\n  185: 123,\n  // Open curly brace\n  186: 125,\n  // Closing curly brace\n  187: 92,\n  // Backslash\n  188: 94,\n  // Caret\n  189: 95,\n  // Underscore\n  190: 124,\n  // Pipe (vertical line)\n  191: 8764,\n  // Tilde operator\n  192: 196,\n  // Uppercase A, umlaut\n  193: 228,\n  // Lowercase A, umlaut\n  194: 214,\n  // Uppercase O, umlaut\n  195: 246,\n  // Lowercase o, umlaut\n  196: 223,\n  // Esszett (sharp S)\n  197: 165,\n  // Yen symbol\n  198: 164,\n  // Generic currency sign\n  199: 9475,\n  // Box drawings heavy vertical\n  200: 197,\n  // Uppercase A, ring\n  201: 229,\n  // Lowercase A, ring\n  202: 216,\n  // Uppercase O, stroke\n  203: 248,\n  // Lowercase o, strok\n  204: 9487,\n  // Box drawings heavy down and right\n  205: 9491,\n  // Box drawings heavy down and left\n  206: 9495,\n  // Box drawings heavy up and right\n  207: 9499\n  // Box drawings heavy up and left\n};\nvar getCharForByte = (byte) => String.fromCharCode(specialCea608CharsCodes[byte] || byte);\nvar NR_ROWS = 15;\nvar NR_COLS = 100;\nvar rowsLowCh1 = {\n  17: 1,\n  18: 3,\n  21: 5,\n  22: 7,\n  23: 9,\n  16: 11,\n  19: 12,\n  20: 14\n};\nvar rowsHighCh1 = {\n  17: 2,\n  18: 4,\n  21: 6,\n  22: 8,\n  23: 10,\n  19: 13,\n  20: 15\n};\nvar rowsLowCh2 = {\n  25: 1,\n  26: 3,\n  29: 5,\n  30: 7,\n  31: 9,\n  24: 11,\n  27: 12,\n  28: 14\n};\nvar rowsHighCh2 = {\n  25: 2,\n  26: 4,\n  29: 6,\n  30: 8,\n  31: 10,\n  27: 13,\n  28: 15\n};\nvar backgroundColors = [\"white\", \"green\", \"blue\", \"cyan\", \"red\", \"yellow\", \"magenta\", \"black\", \"transparent\"];\nvar CaptionsLogger = class {\n  constructor() {\n    this.time = null;\n    this.verboseLevel = 0;\n  }\n  log(severity, msg) {\n    if (this.verboseLevel >= severity) {\n      const m3 = typeof msg === \"function\" ? msg() : msg;\n      logger.log(`${this.time} [${severity}] ${m3}`);\n    }\n  }\n};\nvar numArrayToHexArray = function numArrayToHexArray2(numArray) {\n  const hexArray = [];\n  for (let j4 = 0; j4 < numArray.length; j4++) {\n    hexArray.push(numArray[j4].toString(16));\n  }\n  return hexArray;\n};\nvar PenState = class {\n  constructor() {\n    this.foreground = \"white\";\n    this.underline = false;\n    this.italics = false;\n    this.background = \"black\";\n    this.flash = false;\n  }\n  reset() {\n    this.foreground = \"white\";\n    this.underline = false;\n    this.italics = false;\n    this.background = \"black\";\n    this.flash = false;\n  }\n  setStyles(styles) {\n    const attribs = [\"foreground\", \"underline\", \"italics\", \"background\", \"flash\"];\n    for (let i2 = 0; i2 < attribs.length; i2++) {\n      const style = attribs[i2];\n      if (styles.hasOwnProperty(style)) {\n        this[style] = styles[style];\n      }\n    }\n  }\n  isDefault() {\n    return this.foreground === \"white\" && !this.underline && !this.italics && this.background === \"black\" && !this.flash;\n  }\n  equals(other) {\n    return this.foreground === other.foreground && this.underline === other.underline && this.italics === other.italics && this.background === other.background && this.flash === other.flash;\n  }\n  copy(newPenState) {\n    this.foreground = newPenState.foreground;\n    this.underline = newPenState.underline;\n    this.italics = newPenState.italics;\n    this.background = newPenState.background;\n    this.flash = newPenState.flash;\n  }\n  toString() {\n    return \"color=\" + this.foreground + \", underline=\" + this.underline + \", italics=\" + this.italics + \", background=\" + this.background + \", flash=\" + this.flash;\n  }\n};\nvar StyledUnicodeChar = class {\n  constructor() {\n    this.uchar = \" \";\n    this.penState = new PenState();\n  }\n  reset() {\n    this.uchar = \" \";\n    this.penState.reset();\n  }\n  setChar(uchar, newPenState) {\n    this.uchar = uchar;\n    this.penState.copy(newPenState);\n  }\n  setPenState(newPenState) {\n    this.penState.copy(newPenState);\n  }\n  equals(other) {\n    return this.uchar === other.uchar && this.penState.equals(other.penState);\n  }\n  copy(newChar) {\n    this.uchar = newChar.uchar;\n    this.penState.copy(newChar.penState);\n  }\n  isEmpty() {\n    return this.uchar === \" \" && this.penState.isDefault();\n  }\n};\nvar Row = class {\n  constructor(logger2) {\n    this.chars = [];\n    this.pos = 0;\n    this.currPenState = new PenState();\n    this.cueStartTime = null;\n    this.logger = void 0;\n    for (let i2 = 0; i2 < NR_COLS; i2++) {\n      this.chars.push(new StyledUnicodeChar());\n    }\n    this.logger = logger2;\n  }\n  equals(other) {\n    for (let i2 = 0; i2 < NR_COLS; i2++) {\n      if (!this.chars[i2].equals(other.chars[i2])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  copy(other) {\n    for (let i2 = 0; i2 < NR_COLS; i2++) {\n      this.chars[i2].copy(other.chars[i2]);\n    }\n  }\n  isEmpty() {\n    let empty = true;\n    for (let i2 = 0; i2 < NR_COLS; i2++) {\n      if (!this.chars[i2].isEmpty()) {\n        empty = false;\n        break;\n      }\n    }\n    return empty;\n  }\n  /**\n   *  Set the cursor to a valid column.\n   */\n  setCursor(absPos) {\n    if (this.pos !== absPos) {\n      this.pos = absPos;\n    }\n    if (this.pos < 0) {\n      this.logger.log(3, \"Negative cursor position \" + this.pos);\n      this.pos = 0;\n    } else if (this.pos > NR_COLS) {\n      this.logger.log(3, \"Too large cursor position \" + this.pos);\n      this.pos = NR_COLS;\n    }\n  }\n  /**\n   * Move the cursor relative to current position.\n   */\n  moveCursor(relPos) {\n    const newPos = this.pos + relPos;\n    if (relPos > 1) {\n      for (let i2 = this.pos + 1; i2 < newPos + 1; i2++) {\n        this.chars[i2].setPenState(this.currPenState);\n      }\n    }\n    this.setCursor(newPos);\n  }\n  /**\n   * Backspace, move one step back and clear character.\n   */\n  backSpace() {\n    this.moveCursor(-1);\n    this.chars[this.pos].setChar(\" \", this.currPenState);\n  }\n  insertChar(byte) {\n    if (byte >= 144) {\n      this.backSpace();\n    }\n    const char = getCharForByte(byte);\n    if (this.pos >= NR_COLS) {\n      this.logger.log(0, () => \"Cannot insert \" + byte.toString(16) + \" (\" + char + \") at position \" + this.pos + \". Skipping it!\");\n      return;\n    }\n    this.chars[this.pos].setChar(char, this.currPenState);\n    this.moveCursor(1);\n  }\n  clearFromPos(startPos) {\n    let i2;\n    for (i2 = startPos; i2 < NR_COLS; i2++) {\n      this.chars[i2].reset();\n    }\n  }\n  clear() {\n    this.clearFromPos(0);\n    this.pos = 0;\n    this.currPenState.reset();\n  }\n  clearToEndOfRow() {\n    this.clearFromPos(this.pos);\n  }\n  getTextString() {\n    const chars = [];\n    let empty = true;\n    for (let i2 = 0; i2 < NR_COLS; i2++) {\n      const char = this.chars[i2].uchar;\n      if (char !== \" \") {\n        empty = false;\n      }\n      chars.push(char);\n    }\n    if (empty) {\n      return \"\";\n    } else {\n      return chars.join(\"\");\n    }\n  }\n  setPenStyles(styles) {\n    this.currPenState.setStyles(styles);\n    const currChar = this.chars[this.pos];\n    currChar.setPenState(this.currPenState);\n  }\n};\nvar CaptionScreen = class {\n  constructor(logger2) {\n    this.rows = [];\n    this.currRow = NR_ROWS - 1;\n    this.nrRollUpRows = null;\n    this.lastOutputScreen = null;\n    this.logger = void 0;\n    for (let i2 = 0; i2 < NR_ROWS; i2++) {\n      this.rows.push(new Row(logger2));\n    }\n    this.logger = logger2;\n  }\n  reset() {\n    for (let i2 = 0; i2 < NR_ROWS; i2++) {\n      this.rows[i2].clear();\n    }\n    this.currRow = NR_ROWS - 1;\n  }\n  equals(other) {\n    let equal = true;\n    for (let i2 = 0; i2 < NR_ROWS; i2++) {\n      if (!this.rows[i2].equals(other.rows[i2])) {\n        equal = false;\n        break;\n      }\n    }\n    return equal;\n  }\n  copy(other) {\n    for (let i2 = 0; i2 < NR_ROWS; i2++) {\n      this.rows[i2].copy(other.rows[i2]);\n    }\n  }\n  isEmpty() {\n    let empty = true;\n    for (let i2 = 0; i2 < NR_ROWS; i2++) {\n      if (!this.rows[i2].isEmpty()) {\n        empty = false;\n        break;\n      }\n    }\n    return empty;\n  }\n  backSpace() {\n    const row = this.rows[this.currRow];\n    row.backSpace();\n  }\n  clearToEndOfRow() {\n    const row = this.rows[this.currRow];\n    row.clearToEndOfRow();\n  }\n  /**\n   * Insert a character (without styling) in the current row.\n   */\n  insertChar(char) {\n    const row = this.rows[this.currRow];\n    row.insertChar(char);\n  }\n  setPen(styles) {\n    const row = this.rows[this.currRow];\n    row.setPenStyles(styles);\n  }\n  moveCursor(relPos) {\n    const row = this.rows[this.currRow];\n    row.moveCursor(relPos);\n  }\n  setCursor(absPos) {\n    this.logger.log(2, \"setCursor: \" + absPos);\n    const row = this.rows[this.currRow];\n    row.setCursor(absPos);\n  }\n  setPAC(pacData) {\n    this.logger.log(2, () => \"pacData = \" + JSON.stringify(pacData));\n    let newRow = pacData.row - 1;\n    if (this.nrRollUpRows && newRow < this.nrRollUpRows - 1) {\n      newRow = this.nrRollUpRows - 1;\n    }\n    if (this.nrRollUpRows && this.currRow !== newRow) {\n      for (let i2 = 0; i2 < NR_ROWS; i2++) {\n        this.rows[i2].clear();\n      }\n      const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n      const lastOutputScreen = this.lastOutputScreen;\n      if (lastOutputScreen) {\n        const prevLineTime = lastOutputScreen.rows[topRowIndex].cueStartTime;\n        const time = this.logger.time;\n        if (prevLineTime !== null && time !== null && prevLineTime < time) {\n          for (let i2 = 0; i2 < this.nrRollUpRows; i2++) {\n            this.rows[newRow - this.nrRollUpRows + i2 + 1].copy(lastOutputScreen.rows[topRowIndex + i2]);\n          }\n        }\n      }\n    }\n    this.currRow = newRow;\n    const row = this.rows[this.currRow];\n    if (pacData.indent !== null) {\n      const indent = pacData.indent;\n      const prevPos = Math.max(indent - 1, 0);\n      row.setCursor(pacData.indent);\n      pacData.color = row.chars[prevPos].penState.foreground;\n    }\n    const styles = {\n      foreground: pacData.color,\n      underline: pacData.underline,\n      italics: pacData.italics,\n      background: \"black\",\n      flash: false\n    };\n    this.setPen(styles);\n  }\n  /**\n   * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).\n   */\n  setBkgData(bkgData) {\n    this.logger.log(2, () => \"bkgData = \" + JSON.stringify(bkgData));\n    this.backSpace();\n    this.setPen(bkgData);\n    this.insertChar(32);\n  }\n  setRollUpRows(nrRows) {\n    this.nrRollUpRows = nrRows;\n  }\n  rollUp() {\n    if (this.nrRollUpRows === null) {\n      this.logger.log(3, \"roll_up but nrRollUpRows not set yet\");\n      return;\n    }\n    this.logger.log(1, () => this.getDisplayText());\n    const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n    const topRow = this.rows.splice(topRowIndex, 1)[0];\n    topRow.clear();\n    this.rows.splice(this.currRow, 0, topRow);\n    this.logger.log(2, \"Rolling up\");\n  }\n  /**\n   * Get all non-empty rows with as unicode text.\n   */\n  getDisplayText(asOneRow) {\n    asOneRow = asOneRow || false;\n    const displayText = [];\n    let text = \"\";\n    let rowNr = -1;\n    for (let i2 = 0; i2 < NR_ROWS; i2++) {\n      const rowText = this.rows[i2].getTextString();\n      if (rowText) {\n        rowNr = i2 + 1;\n        if (asOneRow) {\n          displayText.push(\"Row \" + rowNr + \": '\" + rowText + \"'\");\n        } else {\n          displayText.push(rowText.trim());\n        }\n      }\n    }\n    if (displayText.length > 0) {\n      if (asOneRow) {\n        text = \"[\" + displayText.join(\" | \") + \"]\";\n      } else {\n        text = displayText.join(\"\\n\");\n      }\n    }\n    return text;\n  }\n  getTextAndFormat() {\n    return this.rows;\n  }\n};\nvar Cea608Channel = class {\n  constructor(channelNumber, outputFilter, logger2) {\n    this.chNr = void 0;\n    this.outputFilter = void 0;\n    this.mode = void 0;\n    this.verbose = void 0;\n    this.displayedMemory = void 0;\n    this.nonDisplayedMemory = void 0;\n    this.lastOutputScreen = void 0;\n    this.currRollUpRow = void 0;\n    this.writeScreen = void 0;\n    this.cueStartTime = void 0;\n    this.logger = void 0;\n    this.chNr = channelNumber;\n    this.outputFilter = outputFilter;\n    this.mode = null;\n    this.verbose = 0;\n    this.displayedMemory = new CaptionScreen(logger2);\n    this.nonDisplayedMemory = new CaptionScreen(logger2);\n    this.lastOutputScreen = new CaptionScreen(logger2);\n    this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n    this.writeScreen = this.displayedMemory;\n    this.mode = null;\n    this.cueStartTime = null;\n    this.logger = logger2;\n  }\n  reset() {\n    this.mode = null;\n    this.displayedMemory.reset();\n    this.nonDisplayedMemory.reset();\n    this.lastOutputScreen.reset();\n    this.outputFilter.reset();\n    this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n    this.writeScreen = this.displayedMemory;\n    this.mode = null;\n    this.cueStartTime = null;\n  }\n  getHandler() {\n    return this.outputFilter;\n  }\n  setHandler(newHandler) {\n    this.outputFilter = newHandler;\n  }\n  setPAC(pacData) {\n    this.writeScreen.setPAC(pacData);\n  }\n  setBkgData(bkgData) {\n    this.writeScreen.setBkgData(bkgData);\n  }\n  setMode(newMode) {\n    if (newMode === this.mode) {\n      return;\n    }\n    this.mode = newMode;\n    this.logger.log(2, () => \"MODE=\" + newMode);\n    if (this.mode === \"MODE_POP-ON\") {\n      this.writeScreen = this.nonDisplayedMemory;\n    } else {\n      this.writeScreen = this.displayedMemory;\n      this.writeScreen.reset();\n    }\n    if (this.mode !== \"MODE_ROLL-UP\") {\n      this.displayedMemory.nrRollUpRows = null;\n      this.nonDisplayedMemory.nrRollUpRows = null;\n    }\n    this.mode = newMode;\n  }\n  insertChars(chars) {\n    for (let i2 = 0; i2 < chars.length; i2++) {\n      this.writeScreen.insertChar(chars[i2]);\n    }\n    const screen = this.writeScreen === this.displayedMemory ? \"DISP\" : \"NON_DISP\";\n    this.logger.log(2, () => screen + \": \" + this.writeScreen.getDisplayText(true));\n    if (this.mode === \"MODE_PAINT-ON\" || this.mode === \"MODE_ROLL-UP\") {\n      this.logger.log(1, () => \"DISPLAYED: \" + this.displayedMemory.getDisplayText(true));\n      this.outputDataUpdate();\n    }\n  }\n  ccRCL() {\n    this.logger.log(2, \"RCL - Resume Caption Loading\");\n    this.setMode(\"MODE_POP-ON\");\n  }\n  ccBS() {\n    this.logger.log(2, \"BS - BackSpace\");\n    if (this.mode === \"MODE_TEXT\") {\n      return;\n    }\n    this.writeScreen.backSpace();\n    if (this.writeScreen === this.displayedMemory) {\n      this.outputDataUpdate();\n    }\n  }\n  ccAOF() {\n  }\n  ccAON() {\n  }\n  ccDER() {\n    this.logger.log(2, \"DER- Delete to End of Row\");\n    this.writeScreen.clearToEndOfRow();\n    this.outputDataUpdate();\n  }\n  ccRU(nrRows) {\n    this.logger.log(2, \"RU(\" + nrRows + \") - Roll Up\");\n    this.writeScreen = this.displayedMemory;\n    this.setMode(\"MODE_ROLL-UP\");\n    this.writeScreen.setRollUpRows(nrRows);\n  }\n  ccFON() {\n    this.logger.log(2, \"FON - Flash On\");\n    this.writeScreen.setPen({\n      flash: true\n    });\n  }\n  ccRDC() {\n    this.logger.log(2, \"RDC - Resume Direct Captioning\");\n    this.setMode(\"MODE_PAINT-ON\");\n  }\n  ccTR() {\n    this.logger.log(2, \"TR\");\n    this.setMode(\"MODE_TEXT\");\n  }\n  ccRTD() {\n    this.logger.log(2, \"RTD\");\n    this.setMode(\"MODE_TEXT\");\n  }\n  ccEDM() {\n    this.logger.log(2, \"EDM - Erase Displayed Memory\");\n    this.displayedMemory.reset();\n    this.outputDataUpdate(true);\n  }\n  ccCR() {\n    this.logger.log(2, \"CR - Carriage Return\");\n    this.writeScreen.rollUp();\n    this.outputDataUpdate(true);\n  }\n  ccENM() {\n    this.logger.log(2, \"ENM - Erase Non-displayed Memory\");\n    this.nonDisplayedMemory.reset();\n  }\n  ccEOC() {\n    this.logger.log(2, \"EOC - End Of Caption\");\n    if (this.mode === \"MODE_POP-ON\") {\n      const tmp = this.displayedMemory;\n      this.displayedMemory = this.nonDisplayedMemory;\n      this.nonDisplayedMemory = tmp;\n      this.writeScreen = this.nonDisplayedMemory;\n      this.logger.log(1, () => \"DISP: \" + this.displayedMemory.getDisplayText());\n    }\n    this.outputDataUpdate(true);\n  }\n  ccTO(nrCols) {\n    this.logger.log(2, \"TO(\" + nrCols + \") - Tab Offset\");\n    this.writeScreen.moveCursor(nrCols);\n  }\n  ccMIDROW(secondByte) {\n    const styles = {\n      flash: false\n    };\n    styles.underline = secondByte % 2 === 1;\n    styles.italics = secondByte >= 46;\n    if (!styles.italics) {\n      const colorIndex = Math.floor(secondByte / 2) - 16;\n      const colors = [\"white\", \"green\", \"blue\", \"cyan\", \"red\", \"yellow\", \"magenta\"];\n      styles.foreground = colors[colorIndex];\n    } else {\n      styles.foreground = \"white\";\n    }\n    this.logger.log(2, \"MIDROW: \" + JSON.stringify(styles));\n    this.writeScreen.setPen(styles);\n  }\n  outputDataUpdate(dispatch = false) {\n    const time = this.logger.time;\n    if (time === null) {\n      return;\n    }\n    if (this.outputFilter) {\n      if (this.cueStartTime === null && !this.displayedMemory.isEmpty()) {\n        this.cueStartTime = time;\n      } else {\n        if (!this.displayedMemory.equals(this.lastOutputScreen)) {\n          this.outputFilter.newCue(this.cueStartTime, time, this.lastOutputScreen);\n          if (dispatch && this.outputFilter.dispatchCue) {\n            this.outputFilter.dispatchCue();\n          }\n          this.cueStartTime = this.displayedMemory.isEmpty() ? null : time;\n        }\n      }\n      this.lastOutputScreen.copy(this.displayedMemory);\n    }\n  }\n  cueSplitAtTime(t2) {\n    if (this.outputFilter) {\n      if (!this.displayedMemory.isEmpty()) {\n        if (this.outputFilter.newCue) {\n          this.outputFilter.newCue(this.cueStartTime, t2, this.displayedMemory);\n        }\n        this.cueStartTime = t2;\n      }\n    }\n  }\n};\nvar Cea608Parser = class {\n  constructor(field, out1, out2) {\n    this.channels = void 0;\n    this.currentChannel = 0;\n    this.cmdHistory = createCmdHistory();\n    this.logger = void 0;\n    const logger2 = this.logger = new CaptionsLogger();\n    this.channels = [null, new Cea608Channel(field, out1, logger2), new Cea608Channel(field + 1, out2, logger2)];\n  }\n  getHandler(channel) {\n    return this.channels[channel].getHandler();\n  }\n  setHandler(channel, newHandler) {\n    this.channels[channel].setHandler(newHandler);\n  }\n  /**\n   * Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.\n   */\n  addData(time, byteList) {\n    this.logger.time = time;\n    for (let i2 = 0; i2 < byteList.length; i2 += 2) {\n      const a2 = byteList[i2] & 127;\n      const b4 = byteList[i2 + 1] & 127;\n      let cmdFound = false;\n      let charsFound = null;\n      if (a2 === 0 && b4 === 0) {\n        continue;\n      } else {\n        this.logger.log(3, () => \"[\" + numArrayToHexArray([byteList[i2], byteList[i2 + 1]]) + \"] -> (\" + numArrayToHexArray([a2, b4]) + \")\");\n      }\n      const cmdHistory = this.cmdHistory;\n      const isControlCode = a2 >= 16 && a2 <= 31;\n      if (isControlCode) {\n        if (hasCmdRepeated(a2, b4, cmdHistory)) {\n          setLastCmd(null, null, cmdHistory);\n          this.logger.log(3, () => \"Repeated command (\" + numArrayToHexArray([a2, b4]) + \") is dropped\");\n          continue;\n        }\n        setLastCmd(a2, b4, this.cmdHistory);\n        cmdFound = this.parseCmd(a2, b4);\n        if (!cmdFound) {\n          cmdFound = this.parseMidrow(a2, b4);\n        }\n        if (!cmdFound) {\n          cmdFound = this.parsePAC(a2, b4);\n        }\n        if (!cmdFound) {\n          cmdFound = this.parseBackgroundAttributes(a2, b4);\n        }\n      } else {\n        setLastCmd(null, null, cmdHistory);\n      }\n      if (!cmdFound) {\n        charsFound = this.parseChars(a2, b4);\n        if (charsFound) {\n          const currChNr = this.currentChannel;\n          if (currChNr && currChNr > 0) {\n            const channel = this.channels[currChNr];\n            channel.insertChars(charsFound);\n          } else {\n            this.logger.log(2, \"No channel found yet. TEXT-MODE?\");\n          }\n        }\n      }\n      if (!cmdFound && !charsFound) {\n        this.logger.log(2, () => \"Couldn't parse cleaned data \" + numArrayToHexArray([a2, b4]) + \" orig: \" + numArrayToHexArray([byteList[i2], byteList[i2 + 1]]));\n      }\n    }\n  }\n  /**\n   * Parse Command.\n   * @returns True if a command was found\n   */\n  parseCmd(a2, b4) {\n    const cond1 = (a2 === 20 || a2 === 28 || a2 === 21 || a2 === 29) && b4 >= 32 && b4 <= 47;\n    const cond2 = (a2 === 23 || a2 === 31) && b4 >= 33 && b4 <= 35;\n    if (!(cond1 || cond2)) {\n      return false;\n    }\n    const chNr = a2 === 20 || a2 === 21 || a2 === 23 ? 1 : 2;\n    const channel = this.channels[chNr];\n    if (a2 === 20 || a2 === 21 || a2 === 28 || a2 === 29) {\n      if (b4 === 32) {\n        channel.ccRCL();\n      } else if (b4 === 33) {\n        channel.ccBS();\n      } else if (b4 === 34) {\n        channel.ccAOF();\n      } else if (b4 === 35) {\n        channel.ccAON();\n      } else if (b4 === 36) {\n        channel.ccDER();\n      } else if (b4 === 37) {\n        channel.ccRU(2);\n      } else if (b4 === 38) {\n        channel.ccRU(3);\n      } else if (b4 === 39) {\n        channel.ccRU(4);\n      } else if (b4 === 40) {\n        channel.ccFON();\n      } else if (b4 === 41) {\n        channel.ccRDC();\n      } else if (b4 === 42) {\n        channel.ccTR();\n      } else if (b4 === 43) {\n        channel.ccRTD();\n      } else if (b4 === 44) {\n        channel.ccEDM();\n      } else if (b4 === 45) {\n        channel.ccCR();\n      } else if (b4 === 46) {\n        channel.ccENM();\n      } else if (b4 === 47) {\n        channel.ccEOC();\n      }\n    } else {\n      channel.ccTO(b4 - 32);\n    }\n    this.currentChannel = chNr;\n    return true;\n  }\n  /**\n   * Parse midrow styling command\n   */\n  parseMidrow(a2, b4) {\n    let chNr = 0;\n    if ((a2 === 17 || a2 === 25) && b4 >= 32 && b4 <= 47) {\n      if (a2 === 17) {\n        chNr = 1;\n      } else {\n        chNr = 2;\n      }\n      if (chNr !== this.currentChannel) {\n        this.logger.log(0, \"Mismatch channel in midrow parsing\");\n        return false;\n      }\n      const channel = this.channels[chNr];\n      if (!channel) {\n        return false;\n      }\n      channel.ccMIDROW(b4);\n      this.logger.log(3, () => \"MIDROW (\" + numArrayToHexArray([a2, b4]) + \")\");\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Parse Preable Access Codes (Table 53).\n   * @returns {Boolean} Tells if PAC found\n   */\n  parsePAC(a2, b4) {\n    let row;\n    const case1 = (a2 >= 17 && a2 <= 23 || a2 >= 25 && a2 <= 31) && b4 >= 64 && b4 <= 127;\n    const case2 = (a2 === 16 || a2 === 24) && b4 >= 64 && b4 <= 95;\n    if (!(case1 || case2)) {\n      return false;\n    }\n    const chNr = a2 <= 23 ? 1 : 2;\n    if (b4 >= 64 && b4 <= 95) {\n      row = chNr === 1 ? rowsLowCh1[a2] : rowsLowCh2[a2];\n    } else {\n      row = chNr === 1 ? rowsHighCh1[a2] : rowsHighCh2[a2];\n    }\n    const channel = this.channels[chNr];\n    if (!channel) {\n      return false;\n    }\n    channel.setPAC(this.interpretPAC(row, b4));\n    this.currentChannel = chNr;\n    return true;\n  }\n  /**\n   * Interpret the second byte of the pac, and return the information.\n   * @returns pacData with style parameters\n   */\n  interpretPAC(row, byte) {\n    let pacIndex;\n    const pacData = {\n      color: null,\n      italics: false,\n      indent: null,\n      underline: false,\n      row\n    };\n    if (byte > 95) {\n      pacIndex = byte - 96;\n    } else {\n      pacIndex = byte - 64;\n    }\n    pacData.underline = (pacIndex & 1) === 1;\n    if (pacIndex <= 13) {\n      pacData.color = [\"white\", \"green\", \"blue\", \"cyan\", \"red\", \"yellow\", \"magenta\", \"white\"][Math.floor(pacIndex / 2)];\n    } else if (pacIndex <= 15) {\n      pacData.italics = true;\n      pacData.color = \"white\";\n    } else {\n      pacData.indent = Math.floor((pacIndex - 16) / 2) * 4;\n    }\n    return pacData;\n  }\n  /**\n   * Parse characters.\n   * @returns An array with 1 to 2 codes corresponding to chars, if found. null otherwise.\n   */\n  parseChars(a2, b4) {\n    let channelNr;\n    let charCodes = null;\n    let charCode1 = null;\n    if (a2 >= 25) {\n      channelNr = 2;\n      charCode1 = a2 - 8;\n    } else {\n      channelNr = 1;\n      charCode1 = a2;\n    }\n    if (charCode1 >= 17 && charCode1 <= 19) {\n      let oneCode;\n      if (charCode1 === 17) {\n        oneCode = b4 + 80;\n      } else if (charCode1 === 18) {\n        oneCode = b4 + 112;\n      } else {\n        oneCode = b4 + 144;\n      }\n      this.logger.log(2, () => \"Special char '\" + getCharForByte(oneCode) + \"' in channel \" + channelNr);\n      charCodes = [oneCode];\n    } else if (a2 >= 32 && a2 <= 127) {\n      charCodes = b4 === 0 ? [a2] : [a2, b4];\n    }\n    if (charCodes) {\n      this.logger.log(3, () => \"Char codes =  \" + numArrayToHexArray(charCodes).join(\",\"));\n    }\n    return charCodes;\n  }\n  /**\n   * Parse extended background attributes as well as new foreground color black.\n   * @returns True if background attributes are found\n   */\n  parseBackgroundAttributes(a2, b4) {\n    const case1 = (a2 === 16 || a2 === 24) && b4 >= 32 && b4 <= 47;\n    const case2 = (a2 === 23 || a2 === 31) && b4 >= 45 && b4 <= 47;\n    if (!(case1 || case2)) {\n      return false;\n    }\n    let index;\n    const bkgData = {};\n    if (a2 === 16 || a2 === 24) {\n      index = Math.floor((b4 - 32) / 2);\n      bkgData.background = backgroundColors[index];\n      if (b4 % 2 === 1) {\n        bkgData.background = bkgData.background + \"_semi\";\n      }\n    } else if (b4 === 45) {\n      bkgData.background = \"transparent\";\n    } else {\n      bkgData.foreground = \"black\";\n      if (b4 === 47) {\n        bkgData.underline = true;\n      }\n    }\n    const chNr = a2 <= 23 ? 1 : 2;\n    const channel = this.channels[chNr];\n    channel.setBkgData(bkgData);\n    return true;\n  }\n  /**\n   * Reset state of parser and its channels.\n   */\n  reset() {\n    for (let i2 = 0; i2 < Object.keys(this.channels).length; i2++) {\n      const channel = this.channels[i2];\n      if (channel) {\n        channel.reset();\n      }\n    }\n    setLastCmd(null, null, this.cmdHistory);\n  }\n  /**\n   * Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.\n   */\n  cueSplitAtTime(t2) {\n    for (let i2 = 0; i2 < this.channels.length; i2++) {\n      const channel = this.channels[i2];\n      if (channel) {\n        channel.cueSplitAtTime(t2);\n      }\n    }\n  }\n};\nfunction setLastCmd(a2, b4, cmdHistory) {\n  cmdHistory.a = a2;\n  cmdHistory.b = b4;\n}\nfunction hasCmdRepeated(a2, b4, cmdHistory) {\n  return cmdHistory.a === a2 && cmdHistory.b === b4;\n}\nfunction createCmdHistory() {\n  return {\n    a: null,\n    b: null\n  };\n}\nvar OutputFilter = class {\n  constructor(timelineController, trackName) {\n    this.timelineController = void 0;\n    this.cueRanges = [];\n    this.trackName = void 0;\n    this.startTime = null;\n    this.endTime = null;\n    this.screen = null;\n    this.timelineController = timelineController;\n    this.trackName = trackName;\n  }\n  dispatchCue() {\n    if (this.startTime === null) {\n      return;\n    }\n    this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen, this.cueRanges);\n    this.startTime = null;\n  }\n  newCue(startTime, endTime, screen) {\n    if (this.startTime === null || this.startTime > startTime) {\n      this.startTime = startTime;\n    }\n    this.endTime = endTime;\n    this.screen = screen;\n    this.timelineController.createCaptionsTrack(this.trackName);\n  }\n  reset() {\n    this.cueRanges = [];\n    this.startTime = null;\n  }\n};\nvar VTTCue2 = function() {\n  if (optionalSelf != null && optionalSelf.VTTCue) {\n    return self.VTTCue;\n  }\n  const AllowedDirections = [\"\", \"lr\", \"rl\"];\n  const AllowedAlignments = [\"start\", \"middle\", \"end\", \"left\", \"right\"];\n  function isAllowedValue(allowed, value) {\n    if (typeof value !== \"string\") {\n      return false;\n    }\n    if (!Array.isArray(allowed)) {\n      return false;\n    }\n    const lcValue = value.toLowerCase();\n    if (~allowed.indexOf(lcValue)) {\n      return lcValue;\n    }\n    return false;\n  }\n  function findDirectionSetting(value) {\n    return isAllowedValue(AllowedDirections, value);\n  }\n  function findAlignSetting(value) {\n    return isAllowedValue(AllowedAlignments, value);\n  }\n  function extend(obj, ...rest) {\n    let i2 = 1;\n    for (; i2 < arguments.length; i2++) {\n      const cobj = arguments[i2];\n      for (const p3 in cobj) {\n        obj[p3] = cobj[p3];\n      }\n    }\n    return obj;\n  }\n  function VTTCue3(startTime, endTime, text) {\n    const cue = this;\n    const baseObj = {\n      enumerable: true\n    };\n    cue.hasBeenReset = false;\n    let _id2 = \"\";\n    let _pauseOnExit = false;\n    let _startTime2 = startTime;\n    let _endTime = endTime;\n    let _text = text;\n    let _region = null;\n    let _vertical = \"\";\n    let _snapToLines = true;\n    let _line = \"auto\";\n    let _lineAlign = \"start\";\n    let _position = 50;\n    let _positionAlign = \"middle\";\n    let _size = 50;\n    let _align = \"middle\";\n    Object.defineProperty(cue, \"id\", extend({}, baseObj, {\n      get: function() {\n        return _id2;\n      },\n      set: function(value) {\n        _id2 = \"\" + value;\n      }\n    }));\n    Object.defineProperty(cue, \"pauseOnExit\", extend({}, baseObj, {\n      get: function() {\n        return _pauseOnExit;\n      },\n      set: function(value) {\n        _pauseOnExit = !!value;\n      }\n    }));\n    Object.defineProperty(cue, \"startTime\", extend({}, baseObj, {\n      get: function() {\n        return _startTime2;\n      },\n      set: function(value) {\n        if (typeof value !== \"number\") {\n          throw new TypeError(\"Start time must be set to a number.\");\n        }\n        _startTime2 = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"endTime\", extend({}, baseObj, {\n      get: function() {\n        return _endTime;\n      },\n      set: function(value) {\n        if (typeof value !== \"number\") {\n          throw new TypeError(\"End time must be set to a number.\");\n        }\n        _endTime = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"text\", extend({}, baseObj, {\n      get: function() {\n        return _text;\n      },\n      set: function(value) {\n        _text = \"\" + value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"region\", extend({}, baseObj, {\n      get: function() {\n        return _region;\n      },\n      set: function(value) {\n        _region = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"vertical\", extend({}, baseObj, {\n      get: function() {\n        return _vertical;\n      },\n      set: function(value) {\n        const setting = findDirectionSetting(value);\n        if (setting === false) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _vertical = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"snapToLines\", extend({}, baseObj, {\n      get: function() {\n        return _snapToLines;\n      },\n      set: function(value) {\n        _snapToLines = !!value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"line\", extend({}, baseObj, {\n      get: function() {\n        return _line;\n      },\n      set: function(value) {\n        if (typeof value !== \"number\" && value !== \"auto\") {\n          throw new SyntaxError(\"An invalid number or illegal string was specified.\");\n        }\n        _line = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"lineAlign\", extend({}, baseObj, {\n      get: function() {\n        return _lineAlign;\n      },\n      set: function(value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _lineAlign = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"position\", extend({}, baseObj, {\n      get: function() {\n        return _position;\n      },\n      set: function(value) {\n        if (value < 0 || value > 100) {\n          throw new Error(\"Position must be between 0 and 100.\");\n        }\n        _position = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"positionAlign\", extend({}, baseObj, {\n      get: function() {\n        return _positionAlign;\n      },\n      set: function(value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _positionAlign = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"size\", extend({}, baseObj, {\n      get: function() {\n        return _size;\n      },\n      set: function(value) {\n        if (value < 0 || value > 100) {\n          throw new Error(\"Size must be between 0 and 100.\");\n        }\n        _size = value;\n        this.hasBeenReset = true;\n      }\n    }));\n    Object.defineProperty(cue, \"align\", extend({}, baseObj, {\n      get: function() {\n        return _align;\n      },\n      set: function(value) {\n        const setting = findAlignSetting(value);\n        if (!setting) {\n          throw new SyntaxError(\"An invalid or illegal string was specified.\");\n        }\n        _align = setting;\n        this.hasBeenReset = true;\n      }\n    }));\n    cue.displayState = void 0;\n  }\n  VTTCue3.prototype.getCueAsHTML = function() {\n    const WebVTT = self.WebVTT;\n    return WebVTT.convertCueToDOMTree(self, this.text);\n  };\n  return VTTCue3;\n}();\nvar StringDecoder = class {\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  decode(data, options) {\n    if (!data) {\n      return \"\";\n    }\n    if (typeof data !== \"string\") {\n      throw new Error(\"Error - expected string data.\");\n    }\n    return decodeURIComponent(encodeURIComponent(data));\n  }\n};\nfunction parseTimeStamp(input) {\n  function computeSeconds(h3, m4, s, f) {\n    return (h3 | 0) * 3600 + (m4 | 0) * 60 + (s | 0) + parseFloat(f || 0);\n  }\n  const m3 = input.match(/^(?:(\\d+):)?(\\d{2}):(\\d{2})(\\.\\d+)?/);\n  if (!m3) {\n    return null;\n  }\n  if (parseFloat(m3[2]) > 59) {\n    return computeSeconds(m3[2], m3[3], 0, m3[4]);\n  }\n  return computeSeconds(m3[1], m3[2], m3[3], m3[4]);\n}\nvar Settings = class {\n  constructor() {\n    this.values = /* @__PURE__ */ Object.create(null);\n  }\n  // Only accept the first assignment to any key.\n  set(k3, v4) {\n    if (!this.get(k3) && v4 !== \"\") {\n      this.values[k3] = v4;\n    }\n  }\n  // Return the value for a key, or a default value.\n  // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n  // a number of possible default values as properties where 'defaultKey' is\n  // the key of the property that will be chosen; otherwise it's assumed to be\n  // a single value.\n  get(k3, dflt, defaultKey) {\n    if (defaultKey) {\n      return this.has(k3) ? this.values[k3] : dflt[defaultKey];\n    }\n    return this.has(k3) ? this.values[k3] : dflt;\n  }\n  // Check whether we have a value for a key.\n  has(k3) {\n    return k3 in this.values;\n  }\n  // Accept a setting if its one of the given alternatives.\n  alt(k3, v4, a2) {\n    for (let n2 = 0; n2 < a2.length; ++n2) {\n      if (v4 === a2[n2]) {\n        this.set(k3, v4);\n        break;\n      }\n    }\n  }\n  // Accept a setting if its a valid (signed) integer.\n  integer(k3, v4) {\n    if (/^-?\\d+$/.test(v4)) {\n      this.set(k3, parseInt(v4, 10));\n    }\n  }\n  // Accept a setting if its a valid percentage.\n  percent(k3, v4) {\n    if (/^([\\d]{1,3})(\\.[\\d]*)?%$/.test(v4)) {\n      const percent = parseFloat(v4);\n      if (percent >= 0 && percent <= 100) {\n        this.set(k3, percent);\n        return true;\n      }\n    }\n    return false;\n  }\n};\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n  const groups = groupDelim ? input.split(groupDelim) : [input];\n  for (const i2 in groups) {\n    if (typeof groups[i2] !== \"string\") {\n      continue;\n    }\n    const kv = groups[i2].split(keyValueDelim);\n    if (kv.length !== 2) {\n      continue;\n    }\n    const k3 = kv[0];\n    const v4 = kv[1];\n    callback(k3, v4);\n  }\n}\nvar defaults = new VTTCue2(0, 0, \"\");\nvar center = defaults.align === \"middle\" ? \"middle\" : \"center\";\nfunction parseCue(input, cue, regionList) {\n  const oInput = input;\n  function consumeTimeStamp() {\n    const ts = parseTimeStamp(input);\n    if (ts === null) {\n      throw new Error(\"Malformed timestamp: \" + oInput);\n    }\n    input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n    return ts;\n  }\n  function consumeCueSettings(input2, cue2) {\n    const settings = new Settings();\n    parseOptions(input2, function(k3, v4) {\n      let vals;\n      switch (k3) {\n        case \"region\":\n          for (let i2 = regionList.length - 1; i2 >= 0; i2--) {\n            if (regionList[i2].id === v4) {\n              settings.set(k3, regionList[i2].region);\n              break;\n            }\n          }\n          break;\n        case \"vertical\":\n          settings.alt(k3, v4, [\"rl\", \"lr\"]);\n          break;\n        case \"line\":\n          vals = v4.split(\",\");\n          settings.integer(k3, vals[0]);\n          if (settings.percent(k3, vals[0])) {\n            settings.set(\"snapToLines\", false);\n          }\n          settings.alt(k3, vals[0], [\"auto\"]);\n          if (vals.length === 2) {\n            settings.alt(\"lineAlign\", vals[1], [\"start\", center, \"end\"]);\n          }\n          break;\n        case \"position\":\n          vals = v4.split(\",\");\n          settings.percent(k3, vals[0]);\n          if (vals.length === 2) {\n            settings.alt(\"positionAlign\", vals[1], [\"start\", center, \"end\", \"line-left\", \"line-right\", \"auto\"]);\n          }\n          break;\n        case \"size\":\n          settings.percent(k3, v4);\n          break;\n        case \"align\":\n          settings.alt(k3, v4, [\"start\", center, \"end\", \"left\", \"right\"]);\n          break;\n      }\n    }, /:/, /\\s/);\n    cue2.region = settings.get(\"region\", null);\n    cue2.vertical = settings.get(\"vertical\", \"\");\n    let line = settings.get(\"line\", \"auto\");\n    if (line === \"auto\" && defaults.line === -1) {\n      line = -1;\n    }\n    cue2.line = line;\n    cue2.lineAlign = settings.get(\"lineAlign\", \"start\");\n    cue2.snapToLines = settings.get(\"snapToLines\", true);\n    cue2.size = settings.get(\"size\", 100);\n    cue2.align = settings.get(\"align\", center);\n    let position = settings.get(\"position\", \"auto\");\n    if (position === \"auto\" && defaults.position === 50) {\n      position = cue2.align === \"start\" || cue2.align === \"left\" ? 0 : cue2.align === \"end\" || cue2.align === \"right\" ? 100 : 50;\n    }\n    cue2.position = position;\n  }\n  function skipWhitespace() {\n    input = input.replace(/^\\s+/, \"\");\n  }\n  skipWhitespace();\n  cue.startTime = consumeTimeStamp();\n  skipWhitespace();\n  if (input.slice(0, 3) !== \"-->\") {\n    throw new Error(\"Malformed time stamp (time stamps must be separated by '-->'): \" + oInput);\n  }\n  input = input.slice(3);\n  skipWhitespace();\n  cue.endTime = consumeTimeStamp();\n  skipWhitespace();\n  consumeCueSettings(input, cue);\n}\nfunction fixLineBreaks(input) {\n  return input.replace(/<br(?: \\/)?>/gi, \"\\n\");\n}\nvar VTTParser = class {\n  constructor() {\n    this.state = \"INITIAL\";\n    this.buffer = \"\";\n    this.decoder = new StringDecoder();\n    this.regionList = [];\n    this.cue = null;\n    this.oncue = void 0;\n    this.onparsingerror = void 0;\n    this.onflush = void 0;\n  }\n  parse(data) {\n    const _this = this;\n    if (data) {\n      _this.buffer += _this.decoder.decode(data, {\n        stream: true\n      });\n    }\n    function collectNextLine() {\n      let buffer = _this.buffer;\n      let pos = 0;\n      buffer = fixLineBreaks(buffer);\n      while (pos < buffer.length && buffer[pos] !== \"\\r\" && buffer[pos] !== \"\\n\") {\n        ++pos;\n      }\n      const line = buffer.slice(0, pos);\n      if (buffer[pos] === \"\\r\") {\n        ++pos;\n      }\n      if (buffer[pos] === \"\\n\") {\n        ++pos;\n      }\n      _this.buffer = buffer.slice(pos);\n      return line;\n    }\n    function parseHeader2(input) {\n      parseOptions(input, function(k3, v4) {\n      }, /:/);\n    }\n    try {\n      let line = \"\";\n      if (_this.state === \"INITIAL\") {\n        if (!/\\r\\n|\\n/.test(_this.buffer)) {\n          return this;\n        }\n        line = collectNextLine();\n        const m3 = line.match(/^(ï»¿)?WEBVTT([ \\t].*)?$/);\n        if (!(m3 != null && m3[0])) {\n          throw new Error(\"Malformed WebVTT signature.\");\n        }\n        _this.state = \"HEADER\";\n      }\n      let alreadyCollectedLine = false;\n      while (_this.buffer) {\n        if (!/\\r\\n|\\n/.test(_this.buffer)) {\n          return this;\n        }\n        if (!alreadyCollectedLine) {\n          line = collectNextLine();\n        } else {\n          alreadyCollectedLine = false;\n        }\n        switch (_this.state) {\n          case \"HEADER\":\n            if (/:/.test(line)) {\n              parseHeader2(line);\n            } else if (!line) {\n              _this.state = \"ID\";\n            }\n            continue;\n          case \"NOTE\":\n            if (!line) {\n              _this.state = \"ID\";\n            }\n            continue;\n          case \"ID\":\n            if (/^NOTE($|[ \\t])/.test(line)) {\n              _this.state = \"NOTE\";\n              break;\n            }\n            if (!line) {\n              continue;\n            }\n            _this.cue = new VTTCue2(0, 0, \"\");\n            _this.state = \"CUE\";\n            if (line.indexOf(\"-->\") === -1) {\n              _this.cue.id = line;\n              continue;\n            }\n          // Process line as start of a cue.\n          /* falls through */\n          case \"CUE\":\n            if (!_this.cue) {\n              _this.state = \"BADCUE\";\n              continue;\n            }\n            try {\n              parseCue(line, _this.cue, _this.regionList);\n            } catch (e) {\n              _this.cue = null;\n              _this.state = \"BADCUE\";\n              continue;\n            }\n            _this.state = \"CUETEXT\";\n            continue;\n          case \"CUETEXT\":\n            {\n              const hasSubstring = line.indexOf(\"-->\") !== -1;\n              if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n                if (_this.oncue && _this.cue) {\n                  _this.oncue(_this.cue);\n                }\n                _this.cue = null;\n                _this.state = \"ID\";\n                continue;\n              }\n              if (_this.cue === null) {\n                continue;\n              }\n              if (_this.cue.text) {\n                _this.cue.text += \"\\n\";\n              }\n              _this.cue.text += line;\n            }\n            continue;\n          case \"BADCUE\":\n            if (!line) {\n              _this.state = \"ID\";\n            }\n        }\n      }\n    } catch (e) {\n      if (_this.state === \"CUETEXT\" && _this.cue && _this.oncue) {\n        _this.oncue(_this.cue);\n      }\n      _this.cue = null;\n      _this.state = _this.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n    }\n    return this;\n  }\n  flush() {\n    const _this = this;\n    try {\n      if (_this.cue || _this.state === \"HEADER\") {\n        _this.buffer += \"\\n\\n\";\n        _this.parse();\n      }\n      if (_this.state === \"INITIAL\" || _this.state === \"BADWEBVTT\") {\n        throw new Error(\"Malformed WebVTT signature.\");\n      }\n    } catch (e) {\n      if (_this.onparsingerror) {\n        _this.onparsingerror(e);\n      }\n    }\n    if (_this.onflush) {\n      _this.onflush();\n    }\n    return this;\n  }\n};\nvar LINEBREAKS = /\\r\\n|\\n\\r|\\n|\\r/g;\nvar startsWith = function startsWith2(inputString, searchString, position = 0) {\n  return inputString.slice(position, position + searchString.length) === searchString;\n};\nvar cueString2millis = function cueString2millis2(timeString) {\n  let ts = parseInt(timeString.slice(-3));\n  const secs = parseInt(timeString.slice(-6, -4));\n  const mins = parseInt(timeString.slice(-9, -7));\n  const hours = timeString.length > 9 ? parseInt(timeString.substring(0, timeString.indexOf(\":\"))) : 0;\n  if (!isFiniteNumber(ts) || !isFiniteNumber(secs) || !isFiniteNumber(mins) || !isFiniteNumber(hours)) {\n    throw Error(`Malformed X-TIMESTAMP-MAP: Local:${timeString}`);\n  }\n  ts += 1e3 * secs;\n  ts += 60 * 1e3 * mins;\n  ts += 60 * 60 * 1e3 * hours;\n  return ts;\n};\nvar hash = function hash2(text) {\n  let _hash = 5381;\n  let i2 = text.length;\n  while (i2) {\n    _hash = _hash * 33 ^ text.charCodeAt(--i2);\n  }\n  return (_hash >>> 0).toString();\n};\nfunction generateCueId(startTime, endTime, text) {\n  return hash(startTime.toString()) + hash(endTime.toString()) + hash(text);\n}\nvar calculateOffset = function calculateOffset2(vttCCs, cc, presentationTime) {\n  let currCC = vttCCs[cc];\n  let prevCC = vttCCs[currCC.prevCC];\n  if (!prevCC || !prevCC.new && currCC.new) {\n    vttCCs.ccOffset = vttCCs.presentationOffset = currCC.start;\n    currCC.new = false;\n    return;\n  }\n  while ((_prevCC = prevCC) != null && _prevCC.new) {\n    var _prevCC;\n    vttCCs.ccOffset += currCC.start - prevCC.start;\n    currCC.new = false;\n    currCC = prevCC;\n    prevCC = vttCCs[currCC.prevCC];\n  }\n  vttCCs.presentationOffset = presentationTime;\n};\nfunction parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, errorCallBack) {\n  const parser = new VTTParser();\n  const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, \"\\n\").split(\"\\n\");\n  const cues = [];\n  const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;\n  let cueTime = \"00:00.000\";\n  let timestampMapMPEGTS = 0;\n  let timestampMapLOCAL = 0;\n  let parsingError;\n  let inHeader = true;\n  parser.oncue = function(cue) {\n    const currCC = vttCCs[cc];\n    let cueOffset = vttCCs.ccOffset;\n    const webVttMpegTsMapOffset = (timestampMapMPEGTS - init90kHz) / 9e4;\n    if (currCC != null && currCC.new) {\n      if (timestampMapLOCAL !== void 0) {\n        cueOffset = vttCCs.ccOffset = currCC.start;\n      } else {\n        calculateOffset(vttCCs, cc, webVttMpegTsMapOffset);\n      }\n    }\n    if (webVttMpegTsMapOffset) {\n      if (!initPTS) {\n        parsingError = new Error(\"Missing initPTS for VTT MPEGTS\");\n        return;\n      }\n      cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;\n    }\n    const duration = cue.endTime - cue.startTime;\n    const startTime = normalizePts((cue.startTime + cueOffset - timestampMapLOCAL) * 9e4, timeOffset * 9e4) / 9e4;\n    cue.startTime = Math.max(startTime, 0);\n    cue.endTime = Math.max(startTime + duration, 0);\n    const text = cue.text.trim();\n    cue.text = decodeURIComponent(encodeURIComponent(text));\n    if (!cue.id) {\n      cue.id = generateCueId(cue.startTime, cue.endTime, text);\n    }\n    if (cue.endTime > 0) {\n      cues.push(cue);\n    }\n  };\n  parser.onparsingerror = function(error) {\n    parsingError = error;\n  };\n  parser.onflush = function() {\n    if (parsingError) {\n      errorCallBack(parsingError);\n      return;\n    }\n    callBack(cues);\n  };\n  vttLines.forEach((line) => {\n    if (inHeader) {\n      if (startsWith(line, \"X-TIMESTAMP-MAP=\")) {\n        inHeader = false;\n        line.slice(16).split(\",\").forEach((timestamp) => {\n          if (startsWith(timestamp, \"LOCAL:\")) {\n            cueTime = timestamp.slice(6);\n          } else if (startsWith(timestamp, \"MPEGTS:\")) {\n            timestampMapMPEGTS = parseInt(timestamp.slice(7));\n          }\n        });\n        try {\n          timestampMapLOCAL = cueString2millis(cueTime) / 1e3;\n        } catch (error) {\n          parsingError = error;\n        }\n        return;\n      } else if (line === \"\") {\n        inHeader = false;\n      }\n    }\n    parser.parse(line + \"\\n\");\n  });\n  parser.flush();\n}\nvar IMSC1_CODEC = \"stpp.ttml.im1t\";\nvar HMSF_REGEX = /^(\\d{2,}):(\\d{2}):(\\d{2}):(\\d{2})\\.?(\\d+)?$/;\nvar TIME_UNIT_REGEX = /^(\\d*(?:\\.\\d*)?)(h|m|s|ms|f|t)$/;\nvar textAlignToLineAlign = {\n  left: \"start\",\n  center: \"center\",\n  right: \"end\",\n  start: \"start\",\n  end: \"end\"\n};\nfunction parseIMSC1(payload, initPTS, callBack, errorCallBack) {\n  const results = findBox(new Uint8Array(payload), [\"mdat\"]);\n  if (results.length === 0) {\n    errorCallBack(new Error(\"Could not parse IMSC1 mdat\"));\n    return;\n  }\n  const ttmlList = results.map((mdat) => utf8ArrayToStr(mdat));\n  const syncTime = toTimescaleFromScale(initPTS.baseTime, 1, initPTS.timescale);\n  try {\n    ttmlList.forEach((ttml) => callBack(parseTTML(ttml, syncTime)));\n  } catch (error) {\n    errorCallBack(error);\n  }\n}\nfunction parseTTML(ttml, syncTime) {\n  const parser = new DOMParser();\n  const xmlDoc = parser.parseFromString(ttml, \"text/xml\");\n  const tt4 = xmlDoc.getElementsByTagName(\"tt\")[0];\n  if (!tt4) {\n    throw new Error(\"Invalid ttml\");\n  }\n  const defaultRateInfo = {\n    frameRate: 30,\n    subFrameRate: 1,\n    frameRateMultiplier: 0,\n    tickRate: 0\n  };\n  const rateInfo = Object.keys(defaultRateInfo).reduce((result, key) => {\n    result[key] = tt4.getAttribute(`ttp:${key}`) || defaultRateInfo[key];\n    return result;\n  }, {});\n  const trim = tt4.getAttribute(\"xml:space\") !== \"preserve\";\n  const styleElements = collectionToDictionary(getElementCollection(tt4, \"styling\", \"style\"));\n  const regionElements = collectionToDictionary(getElementCollection(tt4, \"layout\", \"region\"));\n  const cueElements = getElementCollection(tt4, \"body\", \"[begin]\");\n  return [].map.call(cueElements, (cueElement) => {\n    const cueText = getTextContent(cueElement, trim);\n    if (!cueText || !cueElement.hasAttribute(\"begin\")) {\n      return null;\n    }\n    const startTime = parseTtmlTime(cueElement.getAttribute(\"begin\"), rateInfo);\n    const duration = parseTtmlTime(cueElement.getAttribute(\"dur\"), rateInfo);\n    let endTime = parseTtmlTime(cueElement.getAttribute(\"end\"), rateInfo);\n    if (startTime === null) {\n      throw timestampParsingError(cueElement);\n    }\n    if (endTime === null) {\n      if (duration === null) {\n        throw timestampParsingError(cueElement);\n      }\n      endTime = startTime + duration;\n    }\n    const cue = new VTTCue2(startTime - syncTime, endTime - syncTime, cueText);\n    cue.id = generateCueId(cue.startTime, cue.endTime, cue.text);\n    const region = regionElements[cueElement.getAttribute(\"region\")];\n    const style = styleElements[cueElement.getAttribute(\"style\")];\n    const styles = getTtmlStyles(region, style, styleElements);\n    const {\n      textAlign\n    } = styles;\n    if (textAlign) {\n      const lineAlign = textAlignToLineAlign[textAlign];\n      if (lineAlign) {\n        cue.lineAlign = lineAlign;\n      }\n      cue.align = textAlign;\n    }\n    _extends(cue, styles);\n    return cue;\n  }).filter((cue) => cue !== null);\n}\nfunction getElementCollection(fromElement, parentName, childName) {\n  const parent = fromElement.getElementsByTagName(parentName)[0];\n  if (parent) {\n    return [].slice.call(parent.querySelectorAll(childName));\n  }\n  return [];\n}\nfunction collectionToDictionary(elementsWithId) {\n  return elementsWithId.reduce((dict, element) => {\n    const id = element.getAttribute(\"xml:id\");\n    if (id) {\n      dict[id] = element;\n    }\n    return dict;\n  }, {});\n}\nfunction getTextContent(element, trim) {\n  return [].slice.call(element.childNodes).reduce((str, node, i2) => {\n    var _node$childNodes;\n    if (node.nodeName === \"br\" && i2) {\n      return str + \"\\n\";\n    }\n    if ((_node$childNodes = node.childNodes) != null && _node$childNodes.length) {\n      return getTextContent(node, trim);\n    } else if (trim) {\n      return str + node.textContent.trim().replace(/\\s+/g, \" \");\n    }\n    return str + node.textContent;\n  }, \"\");\n}\nfunction getTtmlStyles(region, style, styleElements) {\n  const ttsNs = \"http://www.w3.org/ns/ttml#styling\";\n  let regionStyle = null;\n  const styleAttributes = [\n    \"displayAlign\",\n    \"textAlign\",\n    \"color\",\n    \"backgroundColor\",\n    \"fontSize\",\n    \"fontFamily\"\n    // 'fontWeight',\n    // 'lineHeight',\n    // 'wrapOption',\n    // 'fontStyle',\n    // 'direction',\n    // 'writingMode'\n  ];\n  const regionStyleName = region != null && region.hasAttribute(\"style\") ? region.getAttribute(\"style\") : null;\n  if (regionStyleName && styleElements.hasOwnProperty(regionStyleName)) {\n    regionStyle = styleElements[regionStyleName];\n  }\n  return styleAttributes.reduce((styles, name) => {\n    const value = getAttributeNS(style, ttsNs, name) || getAttributeNS(region, ttsNs, name) || getAttributeNS(regionStyle, ttsNs, name);\n    if (value) {\n      styles[name] = value;\n    }\n    return styles;\n  }, {});\n}\nfunction getAttributeNS(element, ns, name) {\n  if (!element) {\n    return null;\n  }\n  return element.hasAttributeNS(ns, name) ? element.getAttributeNS(ns, name) : null;\n}\nfunction timestampParsingError(node) {\n  return new Error(`Could not parse ttml timestamp ${node}`);\n}\nfunction parseTtmlTime(timeAttributeValue, rateInfo) {\n  if (!timeAttributeValue) {\n    return null;\n  }\n  let seconds = parseTimeStamp(timeAttributeValue);\n  if (seconds === null) {\n    if (HMSF_REGEX.test(timeAttributeValue)) {\n      seconds = parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo);\n    } else if (TIME_UNIT_REGEX.test(timeAttributeValue)) {\n      seconds = parseTimeUnits(timeAttributeValue, rateInfo);\n    }\n  }\n  return seconds;\n}\nfunction parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo) {\n  const m3 = HMSF_REGEX.exec(timeAttributeValue);\n  const frames = (m3[4] | 0) + (m3[5] | 0) / rateInfo.subFrameRate;\n  return (m3[1] | 0) * 3600 + (m3[2] | 0) * 60 + (m3[3] | 0) + frames / rateInfo.frameRate;\n}\nfunction parseTimeUnits(timeAttributeValue, rateInfo) {\n  const m3 = TIME_UNIT_REGEX.exec(timeAttributeValue);\n  const value = Number(m3[1]);\n  const unit = m3[2];\n  switch (unit) {\n    case \"h\":\n      return value * 3600;\n    case \"m\":\n      return value * 60;\n    case \"ms\":\n      return value * 1e3;\n    case \"f\":\n      return value / rateInfo.frameRate;\n    case \"t\":\n      return value / rateInfo.tickRate;\n  }\n  return value;\n}\nvar TimelineController = class {\n  constructor(hls) {\n    this.hls = void 0;\n    this.media = null;\n    this.config = void 0;\n    this.enabled = true;\n    this.Cues = void 0;\n    this.textTracks = [];\n    this.tracks = [];\n    this.initPTS = [];\n    this.unparsedVttFrags = [];\n    this.captionsTracks = {};\n    this.nonNativeCaptionsTracks = {};\n    this.cea608Parser1 = void 0;\n    this.cea608Parser2 = void 0;\n    this.lastCc = -1;\n    this.lastSn = -1;\n    this.lastPartIndex = -1;\n    this.prevCC = -1;\n    this.vttCCs = newVTTCCs();\n    this.captionsProperties = void 0;\n    this.hls = hls;\n    this.config = hls.config;\n    this.Cues = hls.config.cueHandler;\n    this.captionsProperties = {\n      textTrack1: {\n        label: this.config.captionsTextTrack1Label,\n        languageCode: this.config.captionsTextTrack1LanguageCode\n      },\n      textTrack2: {\n        label: this.config.captionsTextTrack2Label,\n        languageCode: this.config.captionsTextTrack2LanguageCode\n      },\n      textTrack3: {\n        label: this.config.captionsTextTrack3Label,\n        languageCode: this.config.captionsTextTrack3LanguageCode\n      },\n      textTrack4: {\n        label: this.config.captionsTextTrack4Label,\n        languageCode: this.config.captionsTextTrack4LanguageCode\n      }\n    };\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.on(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n    hls.on(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n    hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.on(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n    hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n  }\n  destroy() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n    hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n    hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n    hls.off(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n    hls.off(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n    hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n    hls.off(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n    hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n    this.hls = this.config = null;\n    this.cea608Parser1 = this.cea608Parser2 = void 0;\n  }\n  initCea608Parsers() {\n    if (this.config.enableCEA708Captions && (!this.cea608Parser1 || !this.cea608Parser2)) {\n      const channel1 = new OutputFilter(this, \"textTrack1\");\n      const channel2 = new OutputFilter(this, \"textTrack2\");\n      const channel3 = new OutputFilter(this, \"textTrack3\");\n      const channel4 = new OutputFilter(this, \"textTrack4\");\n      this.cea608Parser1 = new Cea608Parser(1, channel1, channel2);\n      this.cea608Parser2 = new Cea608Parser(3, channel3, channel4);\n    }\n  }\n  addCues(trackName, startTime, endTime, screen, cueRanges) {\n    let merged = false;\n    for (let i2 = cueRanges.length; i2--; ) {\n      const cueRange = cueRanges[i2];\n      const overlap = intersection(cueRange[0], cueRange[1], startTime, endTime);\n      if (overlap >= 0) {\n        cueRange[0] = Math.min(cueRange[0], startTime);\n        cueRange[1] = Math.max(cueRange[1], endTime);\n        merged = true;\n        if (overlap / (endTime - startTime) > 0.5) {\n          return;\n        }\n      }\n    }\n    if (!merged) {\n      cueRanges.push([startTime, endTime]);\n    }\n    if (this.config.renderTextTracksNatively) {\n      const track = this.captionsTracks[trackName];\n      this.Cues.newCue(track, startTime, endTime, screen);\n    } else {\n      const cues = this.Cues.newCue(null, startTime, endTime, screen);\n      this.hls.trigger(Events.CUES_PARSED, {\n        type: \"captions\",\n        cues,\n        track: trackName\n      });\n    }\n  }\n  // Triggered when an initial PTS is found; used for synchronisation of WebVTT.\n  onInitPtsFound(event, {\n    frag,\n    id,\n    initPTS,\n    timescale\n  }) {\n    const {\n      unparsedVttFrags\n    } = this;\n    if (id === \"main\") {\n      this.initPTS[frag.cc] = {\n        baseTime: initPTS,\n        timescale\n      };\n    }\n    if (unparsedVttFrags.length) {\n      this.unparsedVttFrags = [];\n      unparsedVttFrags.forEach((frag2) => {\n        this.onFragLoaded(Events.FRAG_LOADED, frag2);\n      });\n    }\n  }\n  getExistingTrack(label, language) {\n    const {\n      media\n    } = this;\n    if (media) {\n      for (let i2 = 0; i2 < media.textTracks.length; i2++) {\n        const textTrack = media.textTracks[i2];\n        if (canReuseVttTextTrack(textTrack, {\n          name: label,\n          lang: language,\n          attrs: {}\n        })) {\n          return textTrack;\n        }\n      }\n    }\n    return null;\n  }\n  createCaptionsTrack(trackName) {\n    if (this.config.renderTextTracksNatively) {\n      this.createNativeTrack(trackName);\n    } else {\n      this.createNonNativeTrack(trackName);\n    }\n  }\n  createNativeTrack(trackName) {\n    if (this.captionsTracks[trackName]) {\n      return;\n    }\n    const {\n      captionsProperties,\n      captionsTracks,\n      media\n    } = this;\n    const {\n      label,\n      languageCode\n    } = captionsProperties[trackName];\n    const existingTrack = this.getExistingTrack(label, languageCode);\n    if (!existingTrack) {\n      const textTrack = this.createTextTrack(\"captions\", label, languageCode);\n      if (textTrack) {\n        textTrack[trackName] = true;\n        captionsTracks[trackName] = textTrack;\n      }\n    } else {\n      captionsTracks[trackName] = existingTrack;\n      clearCurrentCues(captionsTracks[trackName]);\n      sendAddTrackEvent(captionsTracks[trackName], media);\n    }\n  }\n  createNonNativeTrack(trackName) {\n    if (this.nonNativeCaptionsTracks[trackName]) {\n      return;\n    }\n    const trackProperties = this.captionsProperties[trackName];\n    if (!trackProperties) {\n      return;\n    }\n    const label = trackProperties.label;\n    const track = {\n      _id: trackName,\n      label,\n      kind: \"captions\",\n      default: trackProperties.media ? !!trackProperties.media.default : false,\n      closedCaptions: trackProperties.media\n    };\n    this.nonNativeCaptionsTracks[trackName] = track;\n    this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n      tracks: [track]\n    });\n  }\n  createTextTrack(kind, label, lang) {\n    const media = this.media;\n    if (!media) {\n      return;\n    }\n    return media.addTextTrack(kind, label, lang);\n  }\n  onMediaAttaching(event, data) {\n    this.media = data.media;\n    this._cleanTracks();\n  }\n  onMediaDetaching() {\n    const {\n      captionsTracks\n    } = this;\n    Object.keys(captionsTracks).forEach((trackName) => {\n      clearCurrentCues(captionsTracks[trackName]);\n      delete captionsTracks[trackName];\n    });\n    this.nonNativeCaptionsTracks = {};\n  }\n  onManifestLoading() {\n    this.lastCc = -1;\n    this.lastSn = -1;\n    this.lastPartIndex = -1;\n    this.prevCC = -1;\n    this.vttCCs = newVTTCCs();\n    this._cleanTracks();\n    this.tracks = [];\n    this.captionsTracks = {};\n    this.nonNativeCaptionsTracks = {};\n    this.textTracks = [];\n    this.unparsedVttFrags = [];\n    this.initPTS = [];\n    if (this.cea608Parser1 && this.cea608Parser2) {\n      this.cea608Parser1.reset();\n      this.cea608Parser2.reset();\n    }\n  }\n  _cleanTracks() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const textTracks = media.textTracks;\n    if (textTracks) {\n      for (let i2 = 0; i2 < textTracks.length; i2++) {\n        clearCurrentCues(textTracks[i2]);\n      }\n    }\n  }\n  onSubtitleTracksUpdated(event, data) {\n    const tracks = data.subtitleTracks || [];\n    const hasIMSC1 = tracks.some((track) => track.textCodec === IMSC1_CODEC);\n    if (this.config.enableWebVTT || hasIMSC1 && this.config.enableIMSC1) {\n      const listIsIdentical = subtitleOptionsIdentical(this.tracks, tracks);\n      if (listIsIdentical) {\n        this.tracks = tracks;\n        return;\n      }\n      this.textTracks = [];\n      this.tracks = tracks;\n      if (this.config.renderTextTracksNatively) {\n        const media = this.media;\n        const inUseTracks = media ? filterSubtitleTracks(media.textTracks) : null;\n        this.tracks.forEach((track, index) => {\n          let textTrack;\n          if (inUseTracks) {\n            let inUseTrack = null;\n            for (let i2 = 0; i2 < inUseTracks.length; i2++) {\n              if (inUseTracks[i2] && canReuseVttTextTrack(inUseTracks[i2], track)) {\n                inUseTrack = inUseTracks[i2];\n                inUseTracks[i2] = null;\n                break;\n              }\n            }\n            if (inUseTrack) {\n              textTrack = inUseTrack;\n            }\n          }\n          if (textTrack) {\n            clearCurrentCues(textTrack);\n          } else {\n            const textTrackKind = captionsOrSubtitlesFromCharacteristics(track);\n            textTrack = this.createTextTrack(textTrackKind, track.name, track.lang);\n            if (textTrack) {\n              textTrack.mode = \"disabled\";\n            }\n          }\n          if (textTrack) {\n            this.textTracks.push(textTrack);\n          }\n        });\n        if (inUseTracks != null && inUseTracks.length) {\n          const unusedTextTracks = inUseTracks.filter((t2) => t2 !== null).map((t2) => t2.label);\n          if (unusedTextTracks.length) {\n            logger.warn(`Media element contains unused subtitle tracks: ${unusedTextTracks.join(\", \")}. Replace media element for each source to clear TextTracks and captions menu.`);\n          }\n        }\n      } else if (this.tracks.length) {\n        const tracksList = this.tracks.map((track) => {\n          return {\n            label: track.name,\n            kind: track.type.toLowerCase(),\n            default: track.default,\n            subtitleTrack: track\n          };\n        });\n        this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n          tracks: tracksList\n        });\n      }\n    }\n  }\n  onManifestLoaded(event, data) {\n    if (this.config.enableCEA708Captions && data.captions) {\n      data.captions.forEach((captionsTrack) => {\n        const instreamIdMatch = /(?:CC|SERVICE)([1-4])/.exec(captionsTrack.instreamId);\n        if (!instreamIdMatch) {\n          return;\n        }\n        const trackName = `textTrack${instreamIdMatch[1]}`;\n        const trackProperties = this.captionsProperties[trackName];\n        if (!trackProperties) {\n          return;\n        }\n        trackProperties.label = captionsTrack.name;\n        if (captionsTrack.lang) {\n          trackProperties.languageCode = captionsTrack.lang;\n        }\n        trackProperties.media = captionsTrack;\n      });\n    }\n  }\n  closedCaptionsForLevel(frag) {\n    const level = this.hls.levels[frag.level];\n    return level == null ? void 0 : level.attrs[\"CLOSED-CAPTIONS\"];\n  }\n  onFragLoading(event, data) {\n    if (this.enabled && data.frag.type === PlaylistLevelType.MAIN) {\n      var _data$part$index, _data$part;\n      const {\n        cea608Parser1,\n        cea608Parser2,\n        lastSn\n      } = this;\n      const {\n        cc,\n        sn\n      } = data.frag;\n      const partIndex = (_data$part$index = (_data$part = data.part) == null ? void 0 : _data$part.index) != null ? _data$part$index : -1;\n      if (cea608Parser1 && cea608Parser2) {\n        if (sn !== lastSn + 1 || sn === lastSn && partIndex !== this.lastPartIndex + 1 || cc !== this.lastCc) {\n          cea608Parser1.reset();\n          cea608Parser2.reset();\n        }\n      }\n      this.lastCc = cc;\n      this.lastSn = sn;\n      this.lastPartIndex = partIndex;\n    }\n  }\n  onFragLoaded(event, data) {\n    const {\n      frag,\n      payload\n    } = data;\n    if (frag.type === PlaylistLevelType.SUBTITLE) {\n      if (payload.byteLength) {\n        const decryptData = frag.decryptdata;\n        const decrypted = \"stats\" in data;\n        if (decryptData == null || !decryptData.encrypted || decrypted) {\n          const trackPlaylistMedia = this.tracks[frag.level];\n          const vttCCs = this.vttCCs;\n          if (!vttCCs[frag.cc]) {\n            vttCCs[frag.cc] = {\n              start: frag.start,\n              prevCC: this.prevCC,\n              new: true\n            };\n            this.prevCC = frag.cc;\n          }\n          if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {\n            this._parseIMSC1(frag, payload);\n          } else {\n            this._parseVTTs(data);\n          }\n        }\n      } else {\n        this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n          success: false,\n          frag,\n          error: new Error(\"Empty subtitle payload\")\n        });\n      }\n    }\n  }\n  _parseIMSC1(frag, payload) {\n    const hls = this.hls;\n    parseIMSC1(payload, this.initPTS[frag.cc], (cues) => {\n      this._appendCues(cues, frag.level);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: true,\n        frag\n      });\n    }, (error) => {\n      logger.log(`Failed to parse IMSC1: ${error}`);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: false,\n        frag,\n        error\n      });\n    });\n  }\n  _parseVTTs(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      payload\n    } = data;\n    const {\n      initPTS,\n      unparsedVttFrags\n    } = this;\n    const maxAvCC = initPTS.length - 1;\n    if (!initPTS[frag.cc] && maxAvCC === -1) {\n      unparsedVttFrags.push(data);\n      return;\n    }\n    const hls = this.hls;\n    const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)) : payload;\n    parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, (cues) => {\n      this._appendCues(cues, frag.level);\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: true,\n        frag\n      });\n    }, (error) => {\n      const missingInitPTS = error.message === \"Missing initPTS for VTT MPEGTS\";\n      if (missingInitPTS) {\n        unparsedVttFrags.push(data);\n      } else {\n        this._fallbackToIMSC1(frag, payload);\n      }\n      logger.log(`Failed to parse VTT cue: ${error}`);\n      if (missingInitPTS && maxAvCC > frag.cc) {\n        return;\n      }\n      hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n        success: false,\n        frag,\n        error\n      });\n    });\n  }\n  _fallbackToIMSC1(frag, payload) {\n    const trackPlaylistMedia = this.tracks[frag.level];\n    if (!trackPlaylistMedia.textCodec) {\n      parseIMSC1(payload, this.initPTS[frag.cc], () => {\n        trackPlaylistMedia.textCodec = IMSC1_CODEC;\n        this._parseIMSC1(frag, payload);\n      }, () => {\n        trackPlaylistMedia.textCodec = \"wvtt\";\n      });\n    }\n  }\n  _appendCues(cues, fragLevel) {\n    const hls = this.hls;\n    if (this.config.renderTextTracksNatively) {\n      const textTrack = this.textTracks[fragLevel];\n      if (!textTrack || textTrack.mode === \"disabled\") {\n        return;\n      }\n      cues.forEach((cue) => addCueToTrack(textTrack, cue));\n    } else {\n      const currentTrack = this.tracks[fragLevel];\n      if (!currentTrack) {\n        return;\n      }\n      const track = currentTrack.default ? \"default\" : \"subtitles\" + fragLevel;\n      hls.trigger(Events.CUES_PARSED, {\n        type: \"subtitles\",\n        cues,\n        track\n      });\n    }\n  }\n  onFragDecrypted(event, data) {\n    const {\n      frag\n    } = data;\n    if (frag.type === PlaylistLevelType.SUBTITLE) {\n      this.onFragLoaded(Events.FRAG_LOADED, data);\n    }\n  }\n  onSubtitleTracksCleared() {\n    this.tracks = [];\n    this.captionsTracks = {};\n  }\n  onFragParsingUserdata(event, data) {\n    this.initCea608Parsers();\n    const {\n      cea608Parser1,\n      cea608Parser2\n    } = this;\n    if (!this.enabled || !cea608Parser1 || !cea608Parser2) {\n      return;\n    }\n    const {\n      frag,\n      samples\n    } = data;\n    if (frag.type === PlaylistLevelType.MAIN && this.closedCaptionsForLevel(frag) === \"NONE\") {\n      return;\n    }\n    for (let i2 = 0; i2 < samples.length; i2++) {\n      const ccBytes = samples[i2].bytes;\n      if (ccBytes) {\n        const ccdatas = this.extractCea608Data(ccBytes);\n        cea608Parser1.addData(samples[i2].pts, ccdatas[0]);\n        cea608Parser2.addData(samples[i2].pts, ccdatas[1]);\n      }\n    }\n  }\n  onBufferFlushing(event, {\n    startOffset,\n    endOffset,\n    endOffsetSubtitles,\n    type\n  }) {\n    const {\n      media\n    } = this;\n    if (!media || media.currentTime < endOffset) {\n      return;\n    }\n    if (!type || type === \"video\") {\n      const {\n        captionsTracks\n      } = this;\n      Object.keys(captionsTracks).forEach((trackName) => removeCuesInRange(captionsTracks[trackName], startOffset, endOffset));\n    }\n    if (this.config.renderTextTracksNatively) {\n      if (startOffset === 0 && endOffsetSubtitles !== void 0) {\n        const {\n          textTracks\n        } = this;\n        Object.keys(textTracks).forEach((trackName) => removeCuesInRange(textTracks[trackName], startOffset, endOffsetSubtitles));\n      }\n    }\n  }\n  extractCea608Data(byteArray) {\n    const actualCCBytes = [[], []];\n    const count = byteArray[0] & 31;\n    let position = 2;\n    for (let j4 = 0; j4 < count; j4++) {\n      const tmpByte = byteArray[position++];\n      const ccbyte1 = 127 & byteArray[position++];\n      const ccbyte2 = 127 & byteArray[position++];\n      if (ccbyte1 === 0 && ccbyte2 === 0) {\n        continue;\n      }\n      const ccValid = (4 & tmpByte) !== 0;\n      if (ccValid) {\n        const ccType = 3 & tmpByte;\n        if (0 === ccType || 1 === ccType) {\n          actualCCBytes[ccType].push(ccbyte1);\n          actualCCBytes[ccType].push(ccbyte2);\n        }\n      }\n    }\n    return actualCCBytes;\n  }\n};\nfunction captionsOrSubtitlesFromCharacteristics(track) {\n  if (track.characteristics) {\n    if (/transcribes-spoken-dialog/gi.test(track.characteristics) && /describes-music-and-sound/gi.test(track.characteristics)) {\n      return \"captions\";\n    }\n  }\n  return \"subtitles\";\n}\nfunction canReuseVttTextTrack(inUseTrack, manifestTrack) {\n  return !!inUseTrack && inUseTrack.kind === captionsOrSubtitlesFromCharacteristics(manifestTrack) && subtitleTrackMatchesTextTrack(manifestTrack, inUseTrack);\n}\nfunction intersection(x1, x22, y1, y22) {\n  return Math.min(x22, y22) - Math.max(x1, y1);\n}\nfunction newVTTCCs() {\n  return {\n    ccOffset: 0,\n    presentationOffset: 0,\n    0: {\n      start: 0,\n      prevCC: -1,\n      new: true\n    }\n  };\n}\nvar CapLevelController = class _CapLevelController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.autoLevelCapping = void 0;\n    this.firstLevel = void 0;\n    this.media = void 0;\n    this.restrictedLevels = void 0;\n    this.timer = void 0;\n    this.clientRect = void 0;\n    this.streamController = void 0;\n    this.hls = hls;\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    this.firstLevel = -1;\n    this.media = null;\n    this.restrictedLevels = [];\n    this.timer = void 0;\n    this.clientRect = null;\n    this.registerListeners();\n  }\n  setStreamController(streamController) {\n    this.streamController = streamController;\n  }\n  destroy() {\n    if (this.hls) {\n      this.unregisterListener();\n    }\n    if (this.timer) {\n      this.stopCapping();\n    }\n    this.media = null;\n    this.clientRect = null;\n    this.hls = this.streamController = null;\n  }\n  registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n    hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n  }\n  unregisterListener() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n    hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n  }\n  onFpsDropLevelCapping(event, data) {\n    const level = this.hls.levels[data.droppedLevel];\n    if (this.isLevelAllowed(level)) {\n      this.restrictedLevels.push({\n        bitrate: level.bitrate,\n        height: level.height,\n        width: level.width\n      });\n    }\n  }\n  onMediaAttaching(event, data) {\n    this.media = data.media instanceof HTMLVideoElement ? data.media : null;\n    this.clientRect = null;\n    if (this.timer && this.hls.levels.length) {\n      this.detectPlayerSize();\n    }\n  }\n  onManifestParsed(event, data) {\n    const hls = this.hls;\n    this.restrictedLevels = [];\n    this.firstLevel = data.firstLevel;\n    if (hls.config.capLevelToPlayerSize && data.video) {\n      this.startCapping();\n    }\n  }\n  onLevelsUpdated(event, data) {\n    if (this.timer && isFiniteNumber(this.autoLevelCapping)) {\n      this.detectPlayerSize();\n    }\n  }\n  // Only activate capping when playing a video stream; otherwise, multi-bitrate audio-only streams will be restricted\n  // to the first level\n  onBufferCodecs(event, data) {\n    const hls = this.hls;\n    if (hls.config.capLevelToPlayerSize && data.video) {\n      this.startCapping();\n    }\n  }\n  onMediaDetaching() {\n    this.stopCapping();\n  }\n  detectPlayerSize() {\n    if (this.media) {\n      if (this.mediaHeight <= 0 || this.mediaWidth <= 0) {\n        this.clientRect = null;\n        return;\n      }\n      const levels = this.hls.levels;\n      if (levels.length) {\n        const hls = this.hls;\n        const maxLevel = this.getMaxLevel(levels.length - 1);\n        if (maxLevel !== this.autoLevelCapping) {\n          logger.log(`Setting autoLevelCapping to ${maxLevel}: ${levels[maxLevel].height}p@${levels[maxLevel].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`);\n        }\n        hls.autoLevelCapping = maxLevel;\n        if (hls.autoLevelCapping > this.autoLevelCapping && this.streamController) {\n          this.streamController.nextLevelSwitch();\n        }\n        this.autoLevelCapping = hls.autoLevelCapping;\n      }\n    }\n  }\n  /*\n   * returns level should be the one with the dimensions equal or greater than the media (player) dimensions (so the video will be downscaled)\n   */\n  getMaxLevel(capLevelIndex) {\n    const levels = this.hls.levels;\n    if (!levels.length) {\n      return -1;\n    }\n    const validLevels = levels.filter((level, index) => this.isLevelAllowed(level) && index <= capLevelIndex);\n    this.clientRect = null;\n    return _CapLevelController.getMaxLevelByMediaSize(validLevels, this.mediaWidth, this.mediaHeight);\n  }\n  startCapping() {\n    if (this.timer) {\n      return;\n    }\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    self.clearInterval(this.timer);\n    this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1e3);\n    this.detectPlayerSize();\n  }\n  stopCapping() {\n    this.restrictedLevels = [];\n    this.firstLevel = -1;\n    this.autoLevelCapping = Number.POSITIVE_INFINITY;\n    if (this.timer) {\n      self.clearInterval(this.timer);\n      this.timer = void 0;\n    }\n  }\n  getDimensions() {\n    if (this.clientRect) {\n      return this.clientRect;\n    }\n    const media = this.media;\n    const boundsRect = {\n      width: 0,\n      height: 0\n    };\n    if (media) {\n      const clientRect = media.getBoundingClientRect();\n      boundsRect.width = clientRect.width;\n      boundsRect.height = clientRect.height;\n      if (!boundsRect.width && !boundsRect.height) {\n        boundsRect.width = clientRect.right - clientRect.left || media.width || 0;\n        boundsRect.height = clientRect.bottom - clientRect.top || media.height || 0;\n      }\n    }\n    this.clientRect = boundsRect;\n    return boundsRect;\n  }\n  get mediaWidth() {\n    return this.getDimensions().width * this.contentScaleFactor;\n  }\n  get mediaHeight() {\n    return this.getDimensions().height * this.contentScaleFactor;\n  }\n  get contentScaleFactor() {\n    let pixelRatio = 1;\n    if (!this.hls.config.ignoreDevicePixelRatio) {\n      try {\n        pixelRatio = self.devicePixelRatio;\n      } catch (e) {\n      }\n    }\n    return pixelRatio;\n  }\n  isLevelAllowed(level) {\n    const restrictedLevels = this.restrictedLevels;\n    return !restrictedLevels.some((restrictedLevel) => {\n      return level.bitrate === restrictedLevel.bitrate && level.width === restrictedLevel.width && level.height === restrictedLevel.height;\n    });\n  }\n  static getMaxLevelByMediaSize(levels, width, height) {\n    if (!(levels != null && levels.length)) {\n      return -1;\n    }\n    const atGreatestBandwidth = (curLevel, nextLevel) => {\n      if (!nextLevel) {\n        return true;\n      }\n      return curLevel.width !== nextLevel.width || curLevel.height !== nextLevel.height;\n    };\n    let maxLevelIndex = levels.length - 1;\n    const squareSize = Math.max(width, height);\n    for (let i2 = 0; i2 < levels.length; i2 += 1) {\n      const level = levels[i2];\n      if ((level.width >= squareSize || level.height >= squareSize) && atGreatestBandwidth(level, levels[i2 + 1])) {\n        maxLevelIndex = i2;\n        break;\n      }\n    }\n    return maxLevelIndex;\n  }\n};\nvar FPSController = class {\n  constructor(hls) {\n    this.hls = void 0;\n    this.isVideoPlaybackQualityAvailable = false;\n    this.timer = void 0;\n    this.media = null;\n    this.lastTime = void 0;\n    this.lastDroppedFrames = 0;\n    this.lastDecodedFrames = 0;\n    this.streamController = void 0;\n    this.hls = hls;\n    this.registerListeners();\n  }\n  setStreamController(streamController) {\n    this.streamController = streamController;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n  }\n  destroy() {\n    if (this.timer) {\n      clearInterval(this.timer);\n    }\n    this.unregisterListeners();\n    this.isVideoPlaybackQualityAvailable = false;\n    this.media = null;\n  }\n  onMediaAttaching(event, data) {\n    const config = this.hls.config;\n    if (config.capLevelOnFPSDrop) {\n      const media = data.media instanceof self.HTMLVideoElement ? data.media : null;\n      this.media = media;\n      if (media && typeof media.getVideoPlaybackQuality === \"function\") {\n        this.isVideoPlaybackQualityAvailable = true;\n      }\n      self.clearInterval(this.timer);\n      this.timer = self.setInterval(this.checkFPSInterval.bind(this), config.fpsDroppedMonitoringPeriod);\n    }\n  }\n  checkFPS(video, decodedFrames, droppedFrames) {\n    const currentTime = performance.now();\n    if (decodedFrames) {\n      if (this.lastTime) {\n        const currentPeriod = currentTime - this.lastTime;\n        const currentDropped = droppedFrames - this.lastDroppedFrames;\n        const currentDecoded = decodedFrames - this.lastDecodedFrames;\n        const droppedFPS = 1e3 * currentDropped / currentPeriod;\n        const hls = this.hls;\n        hls.trigger(Events.FPS_DROP, {\n          currentDropped,\n          currentDecoded,\n          totalDroppedFrames: droppedFrames\n        });\n        if (droppedFPS > 0) {\n          if (currentDropped > hls.config.fpsDroppedMonitoringThreshold * currentDecoded) {\n            let currentLevel = hls.currentLevel;\n            logger.warn(\"drop FPS ratio greater than max allowed value for currentLevel: \" + currentLevel);\n            if (currentLevel > 0 && (hls.autoLevelCapping === -1 || hls.autoLevelCapping >= currentLevel)) {\n              currentLevel = currentLevel - 1;\n              hls.trigger(Events.FPS_DROP_LEVEL_CAPPING, {\n                level: currentLevel,\n                droppedLevel: hls.currentLevel\n              });\n              hls.autoLevelCapping = currentLevel;\n              this.streamController.nextLevelSwitch();\n            }\n          }\n        }\n      }\n      this.lastTime = currentTime;\n      this.lastDroppedFrames = droppedFrames;\n      this.lastDecodedFrames = decodedFrames;\n    }\n  }\n  checkFPSInterval() {\n    const video = this.media;\n    if (video) {\n      if (this.isVideoPlaybackQualityAvailable) {\n        const videoPlaybackQuality = video.getVideoPlaybackQuality();\n        this.checkFPS(video, videoPlaybackQuality.totalVideoFrames, videoPlaybackQuality.droppedVideoFrames);\n      } else {\n        this.checkFPS(video, video.webkitDecodedFrameCount, video.webkitDroppedFrameCount);\n      }\n    }\n  }\n};\nvar LOGGER_PREFIX = \"[eme]\";\nvar EMEController = class _EMEController {\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = null;\n    this.keyFormatPromise = null;\n    this.keySystemAccessPromises = {};\n    this._requestLicenseFailureCount = 0;\n    this.mediaKeySessions = [];\n    this.keyIdToKeySessionPromise = {};\n    this.setMediaKeysQueue = _EMEController.CDMCleanupPromise ? [_EMEController.CDMCleanupPromise] : [];\n    this.debug = logger.debug.bind(logger, LOGGER_PREFIX);\n    this.log = logger.log.bind(logger, LOGGER_PREFIX);\n    this.warn = logger.warn.bind(logger, LOGGER_PREFIX);\n    this.error = logger.error.bind(logger, LOGGER_PREFIX);\n    this.onMediaEncrypted = (event) => {\n      const {\n        initDataType,\n        initData\n      } = event;\n      const logMessage = `\"${event.type}\" event: init data type: \"${initDataType}\"`;\n      this.debug(logMessage);\n      if (initData === null) {\n        return;\n      }\n      if (!this.keyFormatPromise) {\n        let keySystems = Object.keys(this.keySystemAccessPromises);\n        if (!keySystems.length) {\n          keySystems = getKeySystemsForConfig(this.config);\n        }\n        const keyFormats = keySystems.map(keySystemDomainToKeySystemFormat).filter((k3) => !!k3);\n        this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n      }\n      this.keyFormatPromise.then((keySystemFormat) => {\n        const keySystem = keySystemFormatToKeySystemDomain(keySystemFormat);\n        let keyId;\n        let keySystemDomain;\n        if (initDataType === \"sinf\") {\n          if (keySystem !== KeySystems.FAIRPLAY) {\n            this.warn(`Ignoring unexpected \"${event.type}\" event with init data type: \"${initDataType}\" for selected key-system ${keySystem}`);\n            return;\n          }\n          const json = bin2str(new Uint8Array(initData));\n          try {\n            const sinf = base64Decode(JSON.parse(json).sinf);\n            const tenc = parseSinf(sinf);\n            if (!tenc) {\n              throw new Error(`'schm' box missing or not cbcs/cenc with schi > tenc`);\n            }\n            keyId = tenc.subarray(8, 24);\n            keySystemDomain = KeySystems.FAIRPLAY;\n          } catch (error) {\n            this.warn(`${logMessage} Failed to parse sinf: ${error}`);\n            return;\n          }\n        } else {\n          if (keySystem !== KeySystems.WIDEVINE && keySystem !== KeySystems.PLAYREADY) {\n            this.warn(`Ignoring unexpected \"${event.type}\" event with init data type: \"${initDataType}\" for selected key-system ${keySystem}`);\n            return;\n          }\n          const psshResults = parseMultiPssh(initData);\n          const psshInfos = psshResults.filter((pssh) => !!pssh.systemId && keySystemIdToKeySystemDomain(pssh.systemId) === keySystem);\n          if (psshInfos.length > 1) {\n            this.warn(`${logMessage} Using first of ${psshInfos.length} pssh found for selected key-system ${keySystem}`);\n          }\n          const psshInfo = psshInfos[0];\n          if (!psshInfo) {\n            if (psshResults.length === 0 || psshResults.some((pssh) => !pssh.systemId)) {\n              this.warn(`${logMessage} contains incomplete or invalid pssh data`);\n            } else {\n              this.log(`ignoring ${logMessage} for ${psshResults.map((pssh) => keySystemIdToKeySystemDomain(pssh.systemId)).join(\",\")} pssh data in favor of playlist keys`);\n            }\n            return;\n          }\n          keySystemDomain = keySystemIdToKeySystemDomain(psshInfo.systemId);\n          if (psshInfo.version === 0 && psshInfo.data) {\n            if (keySystemDomain === KeySystems.WIDEVINE) {\n              const offset = psshInfo.data.length - 22;\n              keyId = psshInfo.data.subarray(offset, offset + 16);\n            } else if (keySystemDomain === KeySystems.PLAYREADY) {\n              keyId = parsePlayReadyWRM(psshInfo.data);\n            }\n          }\n        }\n        if (!keySystemDomain || !keyId) {\n          this.log(`Unable to handle ${logMessage} with key-system ${keySystem}`);\n          return;\n        }\n        const keyIdHex = Hex.hexDump(keyId);\n        const {\n          keyIdToKeySessionPromise,\n          mediaKeySessions\n        } = this;\n        let keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex];\n        for (let i2 = 0; i2 < mediaKeySessions.length; i2++) {\n          const keyContext = mediaKeySessions[i2];\n          const decryptdata = keyContext.decryptdata;\n          if (!decryptdata.keyId) {\n            continue;\n          }\n          const oldKeyIdHex = Hex.hexDump(decryptdata.keyId);\n          if (keyIdHex === oldKeyIdHex || decryptdata.uri.replace(/-/g, \"\").indexOf(keyIdHex) !== -1) {\n            keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];\n            if (decryptdata.pssh) {\n              break;\n            }\n            delete keyIdToKeySessionPromise[oldKeyIdHex];\n            decryptdata.pssh = new Uint8Array(initData);\n            decryptdata.keyId = keyId;\n            keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = keySessionContextPromise.then(() => {\n              return this.generateRequestWithPreferredKeySession(keyContext, initDataType, initData, \"encrypted-event-key-match\");\n            });\n            keySessionContextPromise.catch((error) => this.handleError(error));\n            break;\n          }\n        }\n        if (!keySessionContextPromise) {\n          if (keySystemDomain !== keySystem) {\n            this.log(`Ignoring \"${logMessage}\" with ${keySystemDomain} init data for selected key-system ${keySystem}`);\n            return;\n          }\n          keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = this.getKeySystemSelectionPromise([keySystemDomain]).then(({\n            keySystem: keySystem2,\n            mediaKeys\n          }) => {\n            var _keySystemToKeySystem;\n            this.throwIfDestroyed();\n            const decryptdata = new LevelKey(\"ISO-23001-7\", keyIdHex, (_keySystemToKeySystem = keySystemDomainToKeySystemFormat(keySystem2)) != null ? _keySystemToKeySystem : \"\");\n            decryptdata.pssh = new Uint8Array(initData);\n            decryptdata.keyId = keyId;\n            return this.attemptSetMediaKeys(keySystem2, mediaKeys).then(() => {\n              this.throwIfDestroyed();\n              const keySessionContext = this.createMediaKeySessionContext({\n                decryptdata,\n                keySystem: keySystem2,\n                mediaKeys\n              });\n              return this.generateRequestWithPreferredKeySession(keySessionContext, initDataType, initData, \"encrypted-event-no-match\");\n            });\n          });\n          keySessionContextPromise.catch((error) => this.handleError(error));\n        }\n      });\n    };\n    this.onWaitingForKey = (event) => {\n      this.log(`\"${event.type}\" event`);\n    };\n    this.hls = hls;\n    this.config = hls.config;\n    this.registerListeners();\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetached();\n    const config = this.config;\n    config.requestMediaKeySystemAccessFunc = null;\n    config.licenseXhrSetup = config.licenseResponseCallback = void 0;\n    config.drmSystems = config.drmSystemOptions = {};\n    this.hls = this.config = this.keyIdToKeySessionPromise = null;\n    this.onMediaEncrypted = this.onWaitingForKey = null;\n  }\n  registerListeners() {\n    this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  unregisterListeners() {\n    this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    this.hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n  }\n  getLicenseServerUrl(keySystem) {\n    const {\n      drmSystems,\n      widevineLicenseUrl\n    } = this.config;\n    const keySystemConfiguration = drmSystems[keySystem];\n    if (keySystemConfiguration) {\n      return keySystemConfiguration.licenseUrl;\n    }\n    if (keySystem === KeySystems.WIDEVINE && widevineLicenseUrl) {\n      return widevineLicenseUrl;\n    }\n  }\n  getLicenseServerUrlOrThrow(keySystem) {\n    const url = this.getLicenseServerUrl(keySystem);\n    if (url === void 0) {\n      throw new Error(`no license server URL configured for key-system \"${keySystem}\"`);\n    }\n    return url;\n  }\n  getServerCertificateUrl(keySystem) {\n    const {\n      drmSystems\n    } = this.config;\n    const keySystemConfiguration = drmSystems[keySystem];\n    if (keySystemConfiguration) {\n      return keySystemConfiguration.serverCertificateUrl;\n    } else {\n      this.log(`No Server Certificate in config.drmSystems[\"${keySystem}\"]`);\n    }\n  }\n  attemptKeySystemAccess(keySystemsToAttempt) {\n    const levels = this.hls.levels;\n    const uniqueCodec = (value, i2, a2) => !!value && a2.indexOf(value) === i2;\n    const audioCodecs = levels.map((level) => level.audioCodec).filter(uniqueCodec);\n    const videoCodecs = levels.map((level) => level.videoCodec).filter(uniqueCodec);\n    if (audioCodecs.length + videoCodecs.length === 0) {\n      videoCodecs.push(\"avc1.42e01e\");\n    }\n    return new Promise((resolve, reject) => {\n      const attempt = (keySystems) => {\n        const keySystem = keySystems.shift();\n        this.getMediaKeysPromise(keySystem, audioCodecs, videoCodecs).then((mediaKeys) => resolve({\n          keySystem,\n          mediaKeys\n        })).catch((error) => {\n          if (keySystems.length) {\n            attempt(keySystems);\n          } else if (error instanceof EMEKeyError) {\n            reject(error);\n          } else {\n            reject(new EMEKeyError({\n              type: ErrorTypes.KEY_SYSTEM_ERROR,\n              details: ErrorDetails.KEY_SYSTEM_NO_ACCESS,\n              error,\n              fatal: true\n            }, error.message));\n          }\n        });\n      };\n      attempt(keySystemsToAttempt);\n    });\n  }\n  requestMediaKeySystemAccess(keySystem, supportedConfigurations) {\n    const {\n      requestMediaKeySystemAccessFunc\n    } = this.config;\n    if (!(typeof requestMediaKeySystemAccessFunc === \"function\")) {\n      let errMessage = `Configured requestMediaKeySystemAccess is not a function ${requestMediaKeySystemAccessFunc}`;\n      if (requestMediaKeySystemAccess === null && self.location.protocol === \"http:\") {\n        errMessage = `navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`;\n      }\n      return Promise.reject(new Error(errMessage));\n    }\n    return requestMediaKeySystemAccessFunc(keySystem, supportedConfigurations);\n  }\n  getMediaKeysPromise(keySystem, audioCodecs, videoCodecs) {\n    const mediaKeySystemConfigs = getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, this.config.drmSystemOptions);\n    const keySystemAccessPromises = this.keySystemAccessPromises[keySystem];\n    let keySystemAccess = keySystemAccessPromises == null ? void 0 : keySystemAccessPromises.keySystemAccess;\n    if (!keySystemAccess) {\n      this.log(`Requesting encrypted media \"${keySystem}\" key-system access with config: ${JSON.stringify(mediaKeySystemConfigs)}`);\n      keySystemAccess = this.requestMediaKeySystemAccess(keySystem, mediaKeySystemConfigs);\n      const _keySystemAccessPromises = this.keySystemAccessPromises[keySystem] = {\n        keySystemAccess\n      };\n      keySystemAccess.catch((error) => {\n        this.log(`Failed to obtain access to key-system \"${keySystem}\": ${error}`);\n      });\n      return keySystemAccess.then((mediaKeySystemAccess) => {\n        this.log(`Access for key-system \"${mediaKeySystemAccess.keySystem}\" obtained`);\n        const certificateRequest = this.fetchServerCertificate(keySystem);\n        this.log(`Create media-keys for \"${keySystem}\"`);\n        _keySystemAccessPromises.mediaKeys = mediaKeySystemAccess.createMediaKeys().then((mediaKeys) => {\n          this.log(`Media-keys created for \"${keySystem}\"`);\n          return certificateRequest.then((certificate) => {\n            if (certificate) {\n              return this.setMediaKeysServerCertificate(mediaKeys, keySystem, certificate);\n            }\n            return mediaKeys;\n          });\n        });\n        _keySystemAccessPromises.mediaKeys.catch((error) => {\n          this.error(`Failed to create media-keys for \"${keySystem}\"}: ${error}`);\n        });\n        return _keySystemAccessPromises.mediaKeys;\n      });\n    }\n    return keySystemAccess.then(() => keySystemAccessPromises.mediaKeys);\n  }\n  createMediaKeySessionContext({\n    decryptdata,\n    keySystem,\n    mediaKeys\n  }) {\n    this.log(`Creating key-system session \"${keySystem}\" keyId: ${Hex.hexDump(decryptdata.keyId || [])}`);\n    const mediaKeysSession = mediaKeys.createSession();\n    const mediaKeySessionContext = {\n      decryptdata,\n      keySystem,\n      mediaKeys,\n      mediaKeysSession,\n      keyStatus: \"status-pending\"\n    };\n    this.mediaKeySessions.push(mediaKeySessionContext);\n    return mediaKeySessionContext;\n  }\n  renewKeySession(mediaKeySessionContext) {\n    const decryptdata = mediaKeySessionContext.decryptdata;\n    if (decryptdata.pssh) {\n      const keySessionContext = this.createMediaKeySessionContext(mediaKeySessionContext);\n      const keyId = this.getKeyIdString(decryptdata);\n      const scheme = \"cenc\";\n      this.keyIdToKeySessionPromise[keyId] = this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh, \"expired\");\n    } else {\n      this.warn(`Could not renew expired session. Missing pssh initData.`);\n    }\n    this.removeSession(mediaKeySessionContext);\n  }\n  getKeyIdString(decryptdata) {\n    if (!decryptdata) {\n      throw new Error(\"Could not read keyId of undefined decryptdata\");\n    }\n    if (decryptdata.keyId === null) {\n      throw new Error(\"keyId is null\");\n    }\n    return Hex.hexDump(decryptdata.keyId);\n  }\n  updateKeySession(mediaKeySessionContext, data) {\n    var _mediaKeySessionConte;\n    const keySession = mediaKeySessionContext.mediaKeysSession;\n    this.log(`Updating key-session \"${keySession.sessionId}\" for keyID ${Hex.hexDump(((_mediaKeySessionConte = mediaKeySessionContext.decryptdata) == null ? void 0 : _mediaKeySessionConte.keyId) || [])}\n      } (data length: ${data ? data.byteLength : data})`);\n    return keySession.update(data);\n  }\n  selectKeySystemFormat(frag) {\n    const keyFormats = Object.keys(frag.levelkeys || {});\n    if (!this.keyFormatPromise) {\n      this.log(`Selecting key-system from fragment (sn: ${frag.sn} ${frag.type}: ${frag.level}) key formats ${keyFormats.join(\", \")}`);\n      this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n    }\n    return this.keyFormatPromise;\n  }\n  getKeyFormatPromise(keyFormats) {\n    return new Promise((resolve, reject) => {\n      const keySystemsInConfig = getKeySystemsForConfig(this.config);\n      const keySystemsToAttempt = keyFormats.map(keySystemFormatToKeySystemDomain).filter((value) => !!value && keySystemsInConfig.indexOf(value) !== -1);\n      return this.getKeySystemSelectionPromise(keySystemsToAttempt).then(({\n        keySystem\n      }) => {\n        const keySystemFormat = keySystemDomainToKeySystemFormat(keySystem);\n        if (keySystemFormat) {\n          resolve(keySystemFormat);\n        } else {\n          reject(new Error(`Unable to find format for key-system \"${keySystem}\"`));\n        }\n      }).catch(reject);\n    });\n  }\n  loadKey(data) {\n    const decryptdata = data.keyInfo.decryptdata;\n    const keyId = this.getKeyIdString(decryptdata);\n    const keyDetails = `(keyId: ${keyId} format: \"${decryptdata.keyFormat}\" method: ${decryptdata.method} uri: ${decryptdata.uri})`;\n    this.log(`Starting session for key ${keyDetails}`);\n    let keySessionContextPromise = this.keyIdToKeySessionPromise[keyId];\n    if (!keySessionContextPromise) {\n      keySessionContextPromise = this.keyIdToKeySessionPromise[keyId] = this.getKeySystemForKeyPromise(decryptdata).then(({\n        keySystem,\n        mediaKeys\n      }) => {\n        this.throwIfDestroyed();\n        this.log(`Handle encrypted media sn: ${data.frag.sn} ${data.frag.type}: ${data.frag.level} using key ${keyDetails}`);\n        return this.attemptSetMediaKeys(keySystem, mediaKeys).then(() => {\n          this.throwIfDestroyed();\n          const keySessionContext = this.createMediaKeySessionContext({\n            keySystem,\n            mediaKeys,\n            decryptdata\n          });\n          const scheme = \"cenc\";\n          return this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh, \"playlist-key\");\n        });\n      });\n      keySessionContextPromise.catch((error) => this.handleError(error));\n    }\n    return keySessionContextPromise;\n  }\n  throwIfDestroyed(message = \"Invalid state\") {\n    if (!this.hls) {\n      throw new Error(\"invalid state\");\n    }\n  }\n  handleError(error) {\n    if (!this.hls) {\n      return;\n    }\n    this.error(error.message);\n    if (error instanceof EMEKeyError) {\n      this.hls.trigger(Events.ERROR, error.data);\n    } else {\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_KEYS,\n        error,\n        fatal: true\n      });\n    }\n  }\n  getKeySystemForKeyPromise(decryptdata) {\n    const keyId = this.getKeyIdString(decryptdata);\n    const mediaKeySessionContext = this.keyIdToKeySessionPromise[keyId];\n    if (!mediaKeySessionContext) {\n      const keySystem = keySystemFormatToKeySystemDomain(decryptdata.keyFormat);\n      const keySystemsToAttempt = keySystem ? [keySystem] : getKeySystemsForConfig(this.config);\n      return this.attemptKeySystemAccess(keySystemsToAttempt);\n    }\n    return mediaKeySessionContext;\n  }\n  getKeySystemSelectionPromise(keySystemsToAttempt) {\n    if (!keySystemsToAttempt.length) {\n      keySystemsToAttempt = getKeySystemsForConfig(this.config);\n    }\n    if (keySystemsToAttempt.length === 0) {\n      throw new EMEKeyError({\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE,\n        fatal: true\n      }, `Missing key-system license configuration options ${JSON.stringify({\n        drmSystems: this.config.drmSystems\n      })}`);\n    }\n    return this.attemptKeySystemAccess(keySystemsToAttempt);\n  }\n  attemptSetMediaKeys(keySystem, mediaKeys) {\n    const queue = this.setMediaKeysQueue.slice();\n    this.log(`Setting media-keys for \"${keySystem}\"`);\n    const setMediaKeysPromise = Promise.all(queue).then(() => {\n      if (!this.media) {\n        throw new Error(\"Attempted to set mediaKeys without media element attached\");\n      }\n      return this.media.setMediaKeys(mediaKeys);\n    });\n    this.setMediaKeysQueue.push(setMediaKeysPromise);\n    return setMediaKeysPromise.then(() => {\n      this.log(`Media-keys set for \"${keySystem}\"`);\n      queue.push(setMediaKeysPromise);\n      this.setMediaKeysQueue = this.setMediaKeysQueue.filter((p3) => queue.indexOf(p3) === -1);\n    });\n  }\n  generateRequestWithPreferredKeySession(context, initDataType, initData, reason) {\n    var _this$config$drmSyste, _this$config$drmSyste2;\n    const generateRequestFilter = (_this$config$drmSyste = this.config.drmSystems) == null ? void 0 : (_this$config$drmSyste2 = _this$config$drmSyste[context.keySystem]) == null ? void 0 : _this$config$drmSyste2.generateRequest;\n    if (generateRequestFilter) {\n      try {\n        const mappedInitData = generateRequestFilter.call(this.hls, initDataType, initData, context);\n        if (!mappedInitData) {\n          throw new Error(\"Invalid response from configured generateRequest filter\");\n        }\n        initDataType = mappedInitData.initDataType;\n        initData = context.decryptdata.pssh = mappedInitData.initData ? new Uint8Array(mappedInitData.initData) : null;\n      } catch (error) {\n        var _this$hls;\n        this.warn(error.message);\n        if ((_this$hls = this.hls) != null && _this$hls.config.debug) {\n          throw error;\n        }\n      }\n    }\n    if (initData === null) {\n      this.log(`Skipping key-session request for \"${reason}\" (no initData)`);\n      return Promise.resolve(context);\n    }\n    const keyId = this.getKeyIdString(context.decryptdata);\n    this.log(`Generating key-session request for \"${reason}\": ${keyId} (init data type: ${initDataType} length: ${initData ? initData.byteLength : null})`);\n    const licenseStatus = new EventEmitter();\n    const onmessage = context._onmessage = (event) => {\n      const keySession = context.mediaKeysSession;\n      if (!keySession) {\n        licenseStatus.emit(\"error\", new Error(\"invalid state\"));\n        return;\n      }\n      const {\n        messageType,\n        message\n      } = event;\n      this.log(`\"${messageType}\" message event for session \"${keySession.sessionId}\" message size: ${message.byteLength}`);\n      if (messageType === \"license-request\" || messageType === \"license-renewal\") {\n        this.renewLicense(context, message).catch((error) => {\n          this.handleError(error);\n          licenseStatus.emit(\"error\", error);\n        });\n      } else if (messageType === \"license-release\") {\n        if (context.keySystem === KeySystems.FAIRPLAY) {\n          this.updateKeySession(context, strToUtf8array(\"acknowledged\"));\n          this.removeSession(context);\n        }\n      } else {\n        this.warn(`unhandled media key message type \"${messageType}\"`);\n      }\n    };\n    const onkeystatuseschange = context._onkeystatuseschange = (event) => {\n      const keySession = context.mediaKeysSession;\n      if (!keySession) {\n        licenseStatus.emit(\"error\", new Error(\"invalid state\"));\n        return;\n      }\n      this.onKeyStatusChange(context);\n      const keyStatus = context.keyStatus;\n      licenseStatus.emit(\"keyStatus\", keyStatus);\n      if (keyStatus === \"expired\") {\n        this.warn(`${context.keySystem} expired for key ${keyId}`);\n        this.renewKeySession(context);\n      }\n    };\n    context.mediaKeysSession.addEventListener(\"message\", onmessage);\n    context.mediaKeysSession.addEventListener(\"keystatuseschange\", onkeystatuseschange);\n    const keyUsablePromise = new Promise((resolve, reject) => {\n      licenseStatus.on(\"error\", reject);\n      licenseStatus.on(\"keyStatus\", (keyStatus) => {\n        if (keyStatus.startsWith(\"usable\")) {\n          resolve();\n        } else if (keyStatus === \"output-restricted\") {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED,\n            fatal: false\n          }, \"HDCP level output restricted\"));\n        } else if (keyStatus === \"internal-error\") {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR,\n            fatal: true\n          }, `key status changed to \"${keyStatus}\"`));\n        } else if (keyStatus === \"expired\") {\n          reject(new Error(\"key expired while generating request\"));\n        } else {\n          this.warn(`unhandled key status change \"${keyStatus}\"`);\n        }\n      });\n    });\n    return context.mediaKeysSession.generateRequest(initDataType, initData).then(() => {\n      var _context$mediaKeysSes;\n      this.log(`Request generated for key-session \"${(_context$mediaKeysSes = context.mediaKeysSession) == null ? void 0 : _context$mediaKeysSes.sessionId}\" keyId: ${keyId}`);\n    }).catch((error) => {\n      throw new EMEKeyError({\n        type: ErrorTypes.KEY_SYSTEM_ERROR,\n        details: ErrorDetails.KEY_SYSTEM_NO_SESSION,\n        error,\n        fatal: false\n      }, `Error generating key-session request: ${error}`);\n    }).then(() => keyUsablePromise).catch((error) => {\n      licenseStatus.removeAllListeners();\n      this.removeSession(context);\n      throw error;\n    }).then(() => {\n      licenseStatus.removeAllListeners();\n      return context;\n    });\n  }\n  onKeyStatusChange(mediaKeySessionContext) {\n    mediaKeySessionContext.mediaKeysSession.keyStatuses.forEach((status2, keyId) => {\n      this.log(`key status change \"${status2}\" for keyStatuses keyId: ${Hex.hexDump(\"buffer\" in keyId ? new Uint8Array(keyId.buffer, keyId.byteOffset, keyId.byteLength) : new Uint8Array(keyId))} session keyId: ${Hex.hexDump(new Uint8Array(mediaKeySessionContext.decryptdata.keyId || []))} uri: ${mediaKeySessionContext.decryptdata.uri}`);\n      mediaKeySessionContext.keyStatus = status2;\n    });\n  }\n  fetchServerCertificate(keySystem) {\n    const config = this.config;\n    const Loader = config.loader;\n    const certLoader = new Loader(config);\n    const url = this.getServerCertificateUrl(keySystem);\n    if (!url) {\n      return Promise.resolve();\n    }\n    this.log(`Fetching server certificate for \"${keySystem}\"`);\n    return new Promise((resolve, reject) => {\n      const loaderContext = {\n        responseType: \"arraybuffer\",\n        url\n      };\n      const loadPolicy = config.certLoadPolicy.default;\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0\n      };\n      const loaderCallbacks = {\n        onSuccess: (response, stats, context, networkDetails) => {\n          resolve(response.data);\n        },\n        onError: (response, contex, networkDetails, stats) => {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n            fatal: true,\n            networkDetails,\n            response: _objectSpread2({\n              url: loaderContext.url,\n              data: void 0\n            }, response)\n          }, `\"${keySystem}\" certificate request failed (${url}). Status: ${response.code} (${response.text})`));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          reject(new EMEKeyError({\n            type: ErrorTypes.KEY_SYSTEM_ERROR,\n            details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n            fatal: true,\n            networkDetails,\n            response: {\n              url: loaderContext.url,\n              data: void 0\n            }\n          }, `\"${keySystem}\" certificate request timed out (${url})`));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          reject(new Error(\"aborted\"));\n        }\n      };\n      certLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n    });\n  }\n  setMediaKeysServerCertificate(mediaKeys, keySystem, cert) {\n    return new Promise((resolve, reject) => {\n      mediaKeys.setServerCertificate(cert).then((success) => {\n        this.log(`setServerCertificate ${success ? \"success\" : \"not supported by CDM\"} (${cert == null ? void 0 : cert.byteLength}) on \"${keySystem}\"`);\n        resolve(mediaKeys);\n      }).catch((error) => {\n        reject(new EMEKeyError({\n          type: ErrorTypes.KEY_SYSTEM_ERROR,\n          details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,\n          error,\n          fatal: true\n        }, error.message));\n      });\n    });\n  }\n  renewLicense(context, keyMessage) {\n    return this.requestLicense(context, new Uint8Array(keyMessage)).then((data) => {\n      return this.updateKeySession(context, new Uint8Array(data)).catch((error) => {\n        throw new EMEKeyError({\n          type: ErrorTypes.KEY_SYSTEM_ERROR,\n          details: ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED,\n          error,\n          fatal: true\n        }, error.message);\n      });\n    });\n  }\n  unpackPlayReadyKeyMessage(xhr, licenseChallenge) {\n    const xmlString = String.fromCharCode.apply(null, new Uint16Array(licenseChallenge.buffer));\n    if (!xmlString.includes(\"PlayReadyKeyMessage\")) {\n      xhr.setRequestHeader(\"Content-Type\", \"text/xml; charset=utf-8\");\n      return licenseChallenge;\n    }\n    const keyMessageXml = new DOMParser().parseFromString(xmlString, \"application/xml\");\n    const headers = keyMessageXml.querySelectorAll(\"HttpHeader\");\n    if (headers.length > 0) {\n      let header;\n      for (let i2 = 0, len = headers.length; i2 < len; i2++) {\n        var _header$querySelector, _header$querySelector2;\n        header = headers[i2];\n        const name = (_header$querySelector = header.querySelector(\"name\")) == null ? void 0 : _header$querySelector.textContent;\n        const value = (_header$querySelector2 = header.querySelector(\"value\")) == null ? void 0 : _header$querySelector2.textContent;\n        if (name && value) {\n          xhr.setRequestHeader(name, value);\n        }\n      }\n    }\n    const challengeElement = keyMessageXml.querySelector(\"Challenge\");\n    const challengeText = challengeElement == null ? void 0 : challengeElement.textContent;\n    if (!challengeText) {\n      throw new Error(`Cannot find <Challenge> in key message`);\n    }\n    return strToUtf8array(atob(challengeText));\n  }\n  setupLicenseXHR(xhr, url, keysListItem, licenseChallenge) {\n    const licenseXhrSetup = this.config.licenseXhrSetup;\n    if (!licenseXhrSetup) {\n      xhr.open(\"POST\", url, true);\n      return Promise.resolve({\n        xhr,\n        licenseChallenge\n      });\n    }\n    return Promise.resolve().then(() => {\n      if (!keysListItem.decryptdata) {\n        throw new Error(\"Key removed\");\n      }\n      return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n    }).catch((error) => {\n      if (!keysListItem.decryptdata) {\n        throw error;\n      }\n      xhr.open(\"POST\", url, true);\n      return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n    }).then((licenseXhrSetupResult) => {\n      if (!xhr.readyState) {\n        xhr.open(\"POST\", url, true);\n      }\n      const finalLicenseChallenge = licenseXhrSetupResult ? licenseXhrSetupResult : licenseChallenge;\n      return {\n        xhr,\n        licenseChallenge: finalLicenseChallenge\n      };\n    });\n  }\n  requestLicense(keySessionContext, licenseChallenge) {\n    const keyLoadPolicy = this.config.keyLoadPolicy.default;\n    return new Promise((resolve, reject) => {\n      const url = this.getLicenseServerUrlOrThrow(keySessionContext.keySystem);\n      this.log(`Sending license request to URL: ${url}`);\n      const xhr = new XMLHttpRequest();\n      xhr.responseType = \"arraybuffer\";\n      xhr.onreadystatechange = () => {\n        if (!this.hls || !keySessionContext.mediaKeysSession) {\n          return reject(new Error(\"invalid state\"));\n        }\n        if (xhr.readyState === 4) {\n          if (xhr.status === 200) {\n            this._requestLicenseFailureCount = 0;\n            let data = xhr.response;\n            this.log(`License received ${data instanceof ArrayBuffer ? data.byteLength : data}`);\n            const licenseResponseCallback = this.config.licenseResponseCallback;\n            if (licenseResponseCallback) {\n              try {\n                data = licenseResponseCallback.call(this.hls, xhr, url, keySessionContext);\n              } catch (error) {\n                this.error(error);\n              }\n            }\n            resolve(data);\n          } else {\n            const retryConfig = keyLoadPolicy.errorRetry;\n            const maxNumRetry = retryConfig ? retryConfig.maxNumRetry : 0;\n            this._requestLicenseFailureCount++;\n            if (this._requestLicenseFailureCount > maxNumRetry || xhr.status >= 400 && xhr.status < 500) {\n              reject(new EMEKeyError({\n                type: ErrorTypes.KEY_SYSTEM_ERROR,\n                details: ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,\n                fatal: true,\n                networkDetails: xhr,\n                response: {\n                  url,\n                  data: void 0,\n                  code: xhr.status,\n                  text: xhr.statusText\n                }\n              }, `License Request XHR failed (${url}). Status: ${xhr.status} (${xhr.statusText})`));\n            } else {\n              const attemptsLeft = maxNumRetry - this._requestLicenseFailureCount + 1;\n              this.warn(`Retrying license request, ${attemptsLeft} attempts left`);\n              this.requestLicense(keySessionContext, licenseChallenge).then(resolve, reject);\n            }\n          }\n        }\n      };\n      if (keySessionContext.licenseXhr && keySessionContext.licenseXhr.readyState !== XMLHttpRequest.DONE) {\n        keySessionContext.licenseXhr.abort();\n      }\n      keySessionContext.licenseXhr = xhr;\n      this.setupLicenseXHR(xhr, url, keySessionContext, licenseChallenge).then(({\n        xhr: xhr2,\n        licenseChallenge: licenseChallenge2\n      }) => {\n        if (keySessionContext.keySystem == KeySystems.PLAYREADY) {\n          licenseChallenge2 = this.unpackPlayReadyKeyMessage(xhr2, licenseChallenge2);\n        }\n        xhr2.send(licenseChallenge2);\n      });\n    });\n  }\n  onMediaAttached(event, data) {\n    if (!this.config.emeEnabled) {\n      return;\n    }\n    const media = data.media;\n    this.media = media;\n    media.removeEventListener(\"encrypted\", this.onMediaEncrypted);\n    media.removeEventListener(\"waitingforkey\", this.onWaitingForKey);\n    media.addEventListener(\"encrypted\", this.onMediaEncrypted);\n    media.addEventListener(\"waitingforkey\", this.onWaitingForKey);\n  }\n  onMediaDetached() {\n    const media = this.media;\n    const mediaKeysList = this.mediaKeySessions;\n    if (media) {\n      media.removeEventListener(\"encrypted\", this.onMediaEncrypted);\n      media.removeEventListener(\"waitingforkey\", this.onWaitingForKey);\n      this.media = null;\n    }\n    this._requestLicenseFailureCount = 0;\n    this.setMediaKeysQueue = [];\n    this.mediaKeySessions = [];\n    this.keyIdToKeySessionPromise = {};\n    LevelKey.clearKeyUriToKeyIdMap();\n    const keySessionCount = mediaKeysList.length;\n    _EMEController.CDMCleanupPromise = Promise.all(mediaKeysList.map((mediaKeySessionContext) => this.removeSession(mediaKeySessionContext)).concat(media == null ? void 0 : media.setMediaKeys(null).catch((error) => {\n      this.log(`Could not clear media keys: ${error}`);\n    }))).then(() => {\n      if (keySessionCount) {\n        this.log(\"finished closing key sessions and clearing media keys\");\n        mediaKeysList.length = 0;\n      }\n    }).catch((error) => {\n      this.log(`Could not close sessions and clear media keys: ${error}`);\n    });\n  }\n  onManifestLoading() {\n    this.keyFormatPromise = null;\n  }\n  onManifestLoaded(event, {\n    sessionKeys\n  }) {\n    if (!sessionKeys || !this.config.emeEnabled) {\n      return;\n    }\n    if (!this.keyFormatPromise) {\n      const keyFormats = sessionKeys.reduce((formats, sessionKey) => {\n        if (formats.indexOf(sessionKey.keyFormat) === -1) {\n          formats.push(sessionKey.keyFormat);\n        }\n        return formats;\n      }, []);\n      this.log(`Selecting key-system from session-keys ${keyFormats.join(\", \")}`);\n      this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n    }\n  }\n  removeSession(mediaKeySessionContext) {\n    const {\n      mediaKeysSession,\n      licenseXhr\n    } = mediaKeySessionContext;\n    if (mediaKeysSession) {\n      this.log(`Remove licenses and keys and close session ${mediaKeysSession.sessionId}`);\n      if (mediaKeySessionContext._onmessage) {\n        mediaKeysSession.removeEventListener(\"message\", mediaKeySessionContext._onmessage);\n        mediaKeySessionContext._onmessage = void 0;\n      }\n      if (mediaKeySessionContext._onkeystatuseschange) {\n        mediaKeysSession.removeEventListener(\"keystatuseschange\", mediaKeySessionContext._onkeystatuseschange);\n        mediaKeySessionContext._onkeystatuseschange = void 0;\n      }\n      if (licenseXhr && licenseXhr.readyState !== XMLHttpRequest.DONE) {\n        licenseXhr.abort();\n      }\n      mediaKeySessionContext.mediaKeysSession = mediaKeySessionContext.decryptdata = mediaKeySessionContext.licenseXhr = void 0;\n      const index = this.mediaKeySessions.indexOf(mediaKeySessionContext);\n      if (index > -1) {\n        this.mediaKeySessions.splice(index, 1);\n      }\n      return mediaKeysSession.remove().catch((error) => {\n        this.log(`Could not remove session: ${error}`);\n      }).then(() => {\n        return mediaKeysSession.close();\n      }).catch((error) => {\n        this.log(`Could not close session: ${error}`);\n      });\n    }\n  }\n};\nEMEController.CDMCleanupPromise = void 0;\nvar EMEKeyError = class extends Error {\n  constructor(data, message) {\n    super(message);\n    this.data = void 0;\n    data.error || (data.error = new Error(message));\n    this.data = data;\n    data.err = data.error;\n  }\n};\nvar CmObjectType;\n(function(CmObjectType2) {\n  CmObjectType2[\"MANIFEST\"] = \"m\";\n  CmObjectType2[\"AUDIO\"] = \"a\";\n  CmObjectType2[\"VIDEO\"] = \"v\";\n  CmObjectType2[\"MUXED\"] = \"av\";\n  CmObjectType2[\"INIT\"] = \"i\";\n  CmObjectType2[\"CAPTION\"] = \"c\";\n  CmObjectType2[\"TIMED_TEXT\"] = \"tt\";\n  CmObjectType2[\"KEY\"] = \"k\";\n  CmObjectType2[\"OTHER\"] = \"o\";\n})(CmObjectType || (CmObjectType = {}));\nvar CmStreamingFormat;\n(function(CmStreamingFormat2) {\n  CmStreamingFormat2[\"DASH\"] = \"d\";\n  CmStreamingFormat2[\"HLS\"] = \"h\";\n  CmStreamingFormat2[\"SMOOTH\"] = \"s\";\n  CmStreamingFormat2[\"OTHER\"] = \"o\";\n})(CmStreamingFormat || (CmStreamingFormat = {}));\nvar CmcdHeaderField;\n(function(CmcdHeaderField2) {\n  CmcdHeaderField2[\"OBJECT\"] = \"CMCD-Object\";\n  CmcdHeaderField2[\"REQUEST\"] = \"CMCD-Request\";\n  CmcdHeaderField2[\"SESSION\"] = \"CMCD-Session\";\n  CmcdHeaderField2[\"STATUS\"] = \"CMCD-Status\";\n})(CmcdHeaderField || (CmcdHeaderField = {}));\nvar CmcdHeaderMap = {\n  [CmcdHeaderField.OBJECT]: [\"br\", \"d\", \"ot\", \"tb\"],\n  [CmcdHeaderField.REQUEST]: [\"bl\", \"dl\", \"mtp\", \"nor\", \"nrr\", \"su\"],\n  [CmcdHeaderField.SESSION]: [\"cid\", \"pr\", \"sf\", \"sid\", \"st\", \"v\"],\n  [CmcdHeaderField.STATUS]: [\"bs\", \"rtp\"]\n};\nvar SfItem = class _SfItem {\n  constructor(value, params) {\n    this.value = void 0;\n    this.params = void 0;\n    if (Array.isArray(value)) {\n      value = value.map((v4) => v4 instanceof _SfItem ? v4 : new _SfItem(v4));\n    }\n    this.value = value;\n    this.params = params;\n  }\n};\nvar SfToken = class {\n  constructor(description) {\n    this.description = void 0;\n    this.description = description;\n  }\n};\nvar DICT = \"Dict\";\nfunction format(value) {\n  if (Array.isArray(value)) {\n    return JSON.stringify(value);\n  }\n  if (value instanceof Map) {\n    return \"Map{}\";\n  }\n  if (value instanceof Set) {\n    return \"Set{}\";\n  }\n  if (typeof value === \"object\") {\n    return JSON.stringify(value);\n  }\n  return String(value);\n}\nfunction throwError(action, src, type, cause) {\n  return new Error(`failed to ${action} \"${format(src)}\" as ${type}`, {\n    cause\n  });\n}\nvar BARE_ITEM = \"Bare Item\";\nvar BOOLEAN = \"Boolean\";\nvar BYTES = \"Byte Sequence\";\nvar DECIMAL = \"Decimal\";\nvar INTEGER = \"Integer\";\nfunction isInvalidInt(value) {\n  return value < -999999999999999 || 999999999999999 < value;\n}\nvar STRING_REGEX = /[\\x00-\\x1f\\x7f]+/;\nvar TOKEN = \"Token\";\nvar KEY = \"Key\";\nfunction serializeError(src, type, cause) {\n  return throwError(\"serialize\", src, type, cause);\n}\nfunction serializeBoolean(value) {\n  if (typeof value !== \"boolean\") {\n    throw serializeError(value, BOOLEAN);\n  }\n  return value ? \"?1\" : \"?0\";\n}\nfunction base64encode(binary) {\n  return btoa(String.fromCharCode(...binary));\n}\nfunction serializeByteSequence(value) {\n  if (ArrayBuffer.isView(value) === false) {\n    throw serializeError(value, BYTES);\n  }\n  return `:${base64encode(value)}:`;\n}\nfunction serializeInteger(value) {\n  if (isInvalidInt(value)) {\n    throw serializeError(value, INTEGER);\n  }\n  return value.toString();\n}\nfunction serializeDate(value) {\n  return `@${serializeInteger(value.getTime() / 1e3)}`;\n}\nfunction roundToEven(value, precision) {\n  if (value < 0) {\n    return -roundToEven(-value, precision);\n  }\n  const decimalShift = Math.pow(10, precision);\n  const isEquidistant = Math.abs(value * decimalShift % 1 - 0.5) < Number.EPSILON;\n  if (isEquidistant) {\n    const flooredValue = Math.floor(value * decimalShift);\n    return (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift;\n  } else {\n    return Math.round(value * decimalShift) / decimalShift;\n  }\n}\nfunction serializeDecimal(value) {\n  const roundedValue = roundToEven(value, 3);\n  if (Math.floor(Math.abs(roundedValue)).toString().length > 12) {\n    throw serializeError(value, DECIMAL);\n  }\n  const stringValue = roundedValue.toString();\n  return stringValue.includes(\".\") ? stringValue : `${stringValue}.0`;\n}\nvar STRING = \"String\";\nfunction serializeString(value) {\n  if (STRING_REGEX.test(value)) {\n    throw serializeError(value, STRING);\n  }\n  return `\"${value.replace(/\\\\/g, `\\\\\\\\`).replace(/\"/g, `\\\\\"`)}\"`;\n}\nfunction symbolToStr(symbol) {\n  return symbol.description || symbol.toString().slice(7, -1);\n}\nfunction serializeToken(token) {\n  const value = symbolToStr(token);\n  if (/^([a-zA-Z*])([!#$%&'*+\\-.^_`|~\\w:/]*)$/.test(value) === false) {\n    throw serializeError(value, TOKEN);\n  }\n  return value;\n}\nfunction serializeBareItem(value) {\n  switch (typeof value) {\n    case \"number\":\n      if (!isFiniteNumber(value)) {\n        throw serializeError(value, BARE_ITEM);\n      }\n      if (Number.isInteger(value)) {\n        return serializeInteger(value);\n      }\n      return serializeDecimal(value);\n    case \"string\":\n      return serializeString(value);\n    case \"symbol\":\n      return serializeToken(value);\n    case \"boolean\":\n      return serializeBoolean(value);\n    case \"object\":\n      if (value instanceof Date) {\n        return serializeDate(value);\n      }\n      if (value instanceof Uint8Array) {\n        return serializeByteSequence(value);\n      }\n      if (value instanceof SfToken) {\n        return serializeToken(value);\n      }\n    default:\n      throw serializeError(value, BARE_ITEM);\n  }\n}\nfunction serializeKey(value) {\n  if (/^[a-z*][a-z0-9\\-_.*]*$/.test(value) === false) {\n    throw serializeError(value, KEY);\n  }\n  return value;\n}\nfunction serializeParams(params) {\n  if (params == null) {\n    return \"\";\n  }\n  return Object.entries(params).map(([key, value]) => {\n    if (value === true) {\n      return `;${serializeKey(key)}`;\n    }\n    return `;${serializeKey(key)}=${serializeBareItem(value)}`;\n  }).join(\"\");\n}\nfunction serializeItem(value) {\n  if (value instanceof SfItem) {\n    return `${serializeBareItem(value.value)}${serializeParams(value.params)}`;\n  } else {\n    return serializeBareItem(value);\n  }\n}\nfunction serializeInnerList(value) {\n  return `(${value.value.map(serializeItem).join(\" \")})${serializeParams(value.params)}`;\n}\nfunction serializeDict(dict, options = {\n  whitespace: true\n}) {\n  if (typeof dict !== \"object\") {\n    throw serializeError(dict, DICT);\n  }\n  const entries = dict instanceof Map ? dict.entries() : Object.entries(dict);\n  const optionalWhiteSpace = options != null && options.whitespace ? \" \" : \"\";\n  return Array.from(entries).map(([key, item]) => {\n    if (item instanceof SfItem === false) {\n      item = new SfItem(item);\n    }\n    let output = serializeKey(key);\n    if (item.value === true) {\n      output += serializeParams(item.params);\n    } else {\n      output += \"=\";\n      if (Array.isArray(item.value)) {\n        output += serializeInnerList(item);\n      } else {\n        output += serializeItem(item);\n      }\n    }\n    return output;\n  }).join(`,${optionalWhiteSpace}`);\n}\nfunction encodeSfDict(value, options) {\n  return serializeDict(value, options);\n}\nvar isTokenField = (key) => key === \"ot\" || key === \"sf\" || key === \"st\";\nvar isValid = (value) => {\n  if (typeof value === \"number\") {\n    return isFiniteNumber(value);\n  }\n  return value != null && value !== \"\" && value !== false;\n};\nfunction urlToRelativePath(url, base) {\n  const to = new URL(url);\n  const from = new URL(base);\n  if (to.origin !== from.origin) {\n    return url;\n  }\n  const toPath = to.pathname.split(\"/\").slice(1);\n  const fromPath = from.pathname.split(\"/\").slice(1, -1);\n  while (toPath[0] === fromPath[0]) {\n    toPath.shift();\n    fromPath.shift();\n  }\n  while (fromPath.length) {\n    fromPath.shift();\n    toPath.unshift(\"..\");\n  }\n  return toPath.join(\"/\");\n}\nfunction uuid() {\n  try {\n    return crypto.randomUUID();\n  } catch (error) {\n    try {\n      const url = URL.createObjectURL(new Blob());\n      const uuid2 = url.toString();\n      URL.revokeObjectURL(url);\n      return uuid2.slice(uuid2.lastIndexOf(\"/\") + 1);\n    } catch (error2) {\n      let dt5 = (/* @__PURE__ */ new Date()).getTime();\n      const uuid2 = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c4) => {\n        const r10 = (dt5 + Math.random() * 16) % 16 | 0;\n        dt5 = Math.floor(dt5 / 16);\n        return (c4 == \"x\" ? r10 : r10 & 3 | 8).toString(16);\n      });\n      return uuid2;\n    }\n  }\n}\nvar toRounded = (value) => Math.round(value);\nvar toUrlSafe = (value, options) => {\n  if (options != null && options.baseUrl) {\n    value = urlToRelativePath(value, options.baseUrl);\n  }\n  return encodeURIComponent(value);\n};\nvar toHundred = (value) => toRounded(value / 100) * 100;\nvar CmcdFormatters = {\n  /**\n   * Bitrate (kbps) rounded integer\n   */\n  br: toRounded,\n  /**\n   * Duration (milliseconds) rounded integer\n   */\n  d: toRounded,\n  /**\n   * Buffer Length (milliseconds) rounded nearest 100ms\n   */\n  bl: toHundred,\n  /**\n   * Deadline (milliseconds) rounded nearest 100ms\n   */\n  dl: toHundred,\n  /**\n   * Measured Throughput (kbps) rounded nearest 100kbps\n   */\n  mtp: toHundred,\n  /**\n   * Next Object Request URL encoded\n   */\n  nor: toUrlSafe,\n  /**\n   * Requested maximum throughput (kbps) rounded nearest 100kbps\n   */\n  rtp: toHundred,\n  /**\n   * Top Bitrate (kbps) rounded integer\n   */\n  tb: toRounded\n};\nfunction processCmcd(obj, options) {\n  const results = {};\n  if (obj == null || typeof obj !== \"object\") {\n    return results;\n  }\n  const keys = Object.keys(obj).sort();\n  const formatters = _extends({}, CmcdFormatters, options == null ? void 0 : options.formatters);\n  const filter = options == null ? void 0 : options.filter;\n  keys.forEach((key) => {\n    if (filter != null && filter(key)) {\n      return;\n    }\n    let value = obj[key];\n    const formatter = formatters[key];\n    if (formatter) {\n      value = formatter(value, options);\n    }\n    if (key === \"v\" && value === 1) {\n      return;\n    }\n    if (key == \"pr\" && value === 1) {\n      return;\n    }\n    if (!isValid(value)) {\n      return;\n    }\n    if (isTokenField(key) && typeof value === \"string\") {\n      value = new SfToken(value);\n    }\n    results[key] = value;\n  });\n  return results;\n}\nfunction encodeCmcd(cmcd, options = {}) {\n  if (!cmcd) {\n    return \"\";\n  }\n  return encodeSfDict(processCmcd(cmcd, options), _extends({\n    whitespace: false\n  }, options));\n}\nfunction toCmcdHeaders(cmcd, options = {}) {\n  if (!cmcd) {\n    return {};\n  }\n  const entries = Object.entries(cmcd);\n  const headerMap = Object.entries(CmcdHeaderMap).concat(Object.entries((options == null ? void 0 : options.customHeaderMap) || {}));\n  const shards = entries.reduce((acc, entry) => {\n    var _headerMap$find, _acc$field;\n    const [key, value] = entry;\n    const field = ((_headerMap$find = headerMap.find((entry2) => entry2[1].includes(key))) == null ? void 0 : _headerMap$find[0]) || CmcdHeaderField.REQUEST;\n    (_acc$field = acc[field]) != null ? _acc$field : acc[field] = {};\n    acc[field][key] = value;\n    return acc;\n  }, {});\n  return Object.entries(shards).reduce((acc, [field, value]) => {\n    acc[field] = encodeCmcd(value, options);\n    return acc;\n  }, {});\n}\nfunction appendCmcdHeaders(headers, cmcd, options) {\n  return _extends(headers, toCmcdHeaders(cmcd, options));\n}\nvar CMCD_PARAM = \"CMCD\";\nfunction toCmcdQuery(cmcd, options = {}) {\n  if (!cmcd) {\n    return \"\";\n  }\n  const params = encodeCmcd(cmcd, options);\n  return `${CMCD_PARAM}=${encodeURIComponent(params)}`;\n}\nvar REGEX = /CMCD=[^&#]+/;\nfunction appendCmcdQuery(url, cmcd, options) {\n  const query = toCmcdQuery(cmcd, options);\n  if (!query) {\n    return url;\n  }\n  if (REGEX.test(url)) {\n    return url.replace(REGEX, query);\n  }\n  const separator = url.includes(\"?\") ? \"&\" : \"?\";\n  return `${url}${separator}${query}`;\n}\nvar CMCDController = class {\n  // eslint-disable-line no-restricted-globals\n  constructor(hls) {\n    this.hls = void 0;\n    this.config = void 0;\n    this.media = void 0;\n    this.sid = void 0;\n    this.cid = void 0;\n    this.useHeaders = false;\n    this.includeKeys = void 0;\n    this.initialized = false;\n    this.starved = false;\n    this.buffering = true;\n    this.audioBuffer = void 0;\n    this.videoBuffer = void 0;\n    this.onWaiting = () => {\n      if (this.initialized) {\n        this.starved = true;\n      }\n      this.buffering = true;\n    };\n    this.onPlaying = () => {\n      if (!this.initialized) {\n        this.initialized = true;\n      }\n      this.buffering = false;\n    };\n    this.applyPlaylistData = (context) => {\n      try {\n        this.apply(context, {\n          ot: CmObjectType.MANIFEST,\n          su: !this.initialized\n        });\n      } catch (error) {\n        logger.warn(\"Could not generate manifest CMCD data.\", error);\n      }\n    };\n    this.applyFragmentData = (context) => {\n      try {\n        const fragment = context.frag;\n        const level = this.hls.levels[fragment.level];\n        const ot4 = this.getObjectType(fragment);\n        const data = {\n          d: fragment.duration * 1e3,\n          ot: ot4\n        };\n        if (ot4 === CmObjectType.VIDEO || ot4 === CmObjectType.AUDIO || ot4 == CmObjectType.MUXED) {\n          data.br = level.bitrate / 1e3;\n          data.tb = this.getTopBandwidth(ot4) / 1e3;\n          data.bl = this.getBufferLength(ot4);\n        }\n        this.apply(context, data);\n      } catch (error) {\n        logger.warn(\"Could not generate segment CMCD data.\", error);\n      }\n    };\n    this.hls = hls;\n    const config = this.config = hls.config;\n    const {\n      cmcd\n    } = config;\n    if (cmcd != null) {\n      config.pLoader = this.createPlaylistLoader();\n      config.fLoader = this.createFragmentLoader();\n      this.sid = cmcd.sessionId || uuid();\n      this.cid = cmcd.contentId;\n      this.useHeaders = cmcd.useHeaders === true;\n      this.includeKeys = cmcd.includeKeys;\n      this.registerListeners();\n    }\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.onMediaDetached();\n    this.hls = this.config = this.audioBuffer = this.videoBuffer = null;\n    this.onWaiting = this.onPlaying = null;\n  }\n  onMediaAttached(event, data) {\n    this.media = data.media;\n    this.media.addEventListener(\"waiting\", this.onWaiting);\n    this.media.addEventListener(\"playing\", this.onPlaying);\n  }\n  onMediaDetached() {\n    if (!this.media) {\n      return;\n    }\n    this.media.removeEventListener(\"waiting\", this.onWaiting);\n    this.media.removeEventListener(\"playing\", this.onPlaying);\n    this.media = null;\n  }\n  onBufferCreated(event, data) {\n    var _data$tracks$audio, _data$tracks$video;\n    this.audioBuffer = (_data$tracks$audio = data.tracks.audio) == null ? void 0 : _data$tracks$audio.buffer;\n    this.videoBuffer = (_data$tracks$video = data.tracks.video) == null ? void 0 : _data$tracks$video.buffer;\n  }\n  /**\n   * Create baseline CMCD data\n   */\n  createData() {\n    var _this$media;\n    return {\n      v: 1,\n      sf: CmStreamingFormat.HLS,\n      sid: this.sid,\n      cid: this.cid,\n      pr: (_this$media = this.media) == null ? void 0 : _this$media.playbackRate,\n      mtp: this.hls.bandwidthEstimate / 1e3\n    };\n  }\n  /**\n   * Apply CMCD data to a request.\n   */\n  apply(context, data = {}) {\n    _extends(data, this.createData());\n    const isVideo = data.ot === CmObjectType.INIT || data.ot === CmObjectType.VIDEO || data.ot === CmObjectType.MUXED;\n    if (this.starved && isVideo) {\n      data.bs = true;\n      data.su = true;\n      this.starved = false;\n    }\n    if (data.su == null) {\n      data.su = this.buffering;\n    }\n    const {\n      includeKeys\n    } = this;\n    if (includeKeys) {\n      data = Object.keys(data).reduce((acc, key) => {\n        includeKeys.includes(key) && (acc[key] = data[key]);\n        return acc;\n      }, {});\n    }\n    if (this.useHeaders) {\n      if (!context.headers) {\n        context.headers = {};\n      }\n      appendCmcdHeaders(context.headers, data);\n    } else {\n      context.url = appendCmcdQuery(context.url, data);\n    }\n  }\n  /**\n   * The CMCD object type.\n   */\n  getObjectType(fragment) {\n    const {\n      type\n    } = fragment;\n    if (type === \"subtitle\") {\n      return CmObjectType.TIMED_TEXT;\n    }\n    if (fragment.sn === \"initSegment\") {\n      return CmObjectType.INIT;\n    }\n    if (type === \"audio\") {\n      return CmObjectType.AUDIO;\n    }\n    if (type === \"main\") {\n      if (!this.hls.audioTracks.length) {\n        return CmObjectType.MUXED;\n      }\n      return CmObjectType.VIDEO;\n    }\n    return void 0;\n  }\n  /**\n   * Get the highest bitrate.\n   */\n  getTopBandwidth(type) {\n    let bitrate = 0;\n    let levels;\n    const hls = this.hls;\n    if (type === CmObjectType.AUDIO) {\n      levels = hls.audioTracks;\n    } else {\n      const max = hls.maxAutoLevel;\n      const len = max > -1 ? max + 1 : hls.levels.length;\n      levels = hls.levels.slice(0, len);\n    }\n    for (const level of levels) {\n      if (level.bitrate > bitrate) {\n        bitrate = level.bitrate;\n      }\n    }\n    return bitrate > 0 ? bitrate : NaN;\n  }\n  /**\n   * Get the buffer length for a media type in milliseconds\n   */\n  getBufferLength(type) {\n    const media = this.hls.media;\n    const buffer = type === CmObjectType.AUDIO ? this.audioBuffer : this.videoBuffer;\n    if (!buffer || !media) {\n      return NaN;\n    }\n    const info = BufferHelper.bufferInfo(buffer, media.currentTime, this.config.maxBufferHole);\n    return info.len * 1e3;\n  }\n  /**\n   * Create a playlist loader\n   */\n  createPlaylistLoader() {\n    const {\n      pLoader\n    } = this.config;\n    const apply = this.applyPlaylistData;\n    const Ctor = pLoader || this.config.loader;\n    return class CmcdPlaylistLoader {\n      constructor(config) {\n        this.loader = void 0;\n        this.loader = new Ctor(config);\n      }\n      get stats() {\n        return this.loader.stats;\n      }\n      get context() {\n        return this.loader.context;\n      }\n      destroy() {\n        this.loader.destroy();\n      }\n      abort() {\n        this.loader.abort();\n      }\n      load(context, config, callbacks) {\n        apply(context);\n        this.loader.load(context, config, callbacks);\n      }\n    };\n  }\n  /**\n   * Create a playlist loader\n   */\n  createFragmentLoader() {\n    const {\n      fLoader\n    } = this.config;\n    const apply = this.applyFragmentData;\n    const Ctor = fLoader || this.config.loader;\n    return class CmcdFragmentLoader {\n      constructor(config) {\n        this.loader = void 0;\n        this.loader = new Ctor(config);\n      }\n      get stats() {\n        return this.loader.stats;\n      }\n      get context() {\n        return this.loader.context;\n      }\n      destroy() {\n        this.loader.destroy();\n      }\n      abort() {\n        this.loader.abort();\n      }\n      load(context, config, callbacks) {\n        apply(context);\n        this.loader.load(context, config, callbacks);\n      }\n    };\n  }\n};\nvar PATHWAY_PENALTY_DURATION_MS = 3e5;\nvar ContentSteeringController = class {\n  constructor(hls) {\n    this.hls = void 0;\n    this.log = void 0;\n    this.loader = null;\n    this.uri = null;\n    this.pathwayId = \".\";\n    this.pathwayPriority = null;\n    this.timeToLoad = 300;\n    this.reloadTimer = -1;\n    this.updated = 0;\n    this.started = false;\n    this.enabled = true;\n    this.levels = null;\n    this.audioTracks = null;\n    this.subtitleTracks = null;\n    this.penalizedPathways = {};\n    this.hls = hls;\n    this.log = logger.log.bind(logger, `[content-steering]:`);\n    this.registerListeners();\n  }\n  registerListeners() {\n    const hls = this.hls;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  unregisterListeners() {\n    const hls = this.hls;\n    if (!hls) {\n      return;\n    }\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  startLoad() {\n    this.started = true;\n    this.clearTimeout();\n    if (this.enabled && this.uri) {\n      if (this.updated) {\n        const ttl = this.timeToLoad * 1e3 - (performance.now() - this.updated);\n        if (ttl > 0) {\n          this.scheduleRefresh(this.uri, ttl);\n          return;\n        }\n      }\n      this.loadSteeringManifest(this.uri);\n    }\n  }\n  stopLoad() {\n    this.started = false;\n    if (this.loader) {\n      this.loader.destroy();\n      this.loader = null;\n    }\n    this.clearTimeout();\n  }\n  clearTimeout() {\n    if (this.reloadTimer !== -1) {\n      self.clearTimeout(this.reloadTimer);\n      this.reloadTimer = -1;\n    }\n  }\n  destroy() {\n    this.unregisterListeners();\n    this.stopLoad();\n    this.hls = null;\n    this.levels = this.audioTracks = this.subtitleTracks = null;\n  }\n  removeLevel(levelToRemove) {\n    const levels = this.levels;\n    if (levels) {\n      this.levels = levels.filter((level) => level !== levelToRemove);\n    }\n  }\n  onManifestLoading() {\n    this.stopLoad();\n    this.enabled = true;\n    this.timeToLoad = 300;\n    this.updated = 0;\n    this.uri = null;\n    this.pathwayId = \".\";\n    this.levels = this.audioTracks = this.subtitleTracks = null;\n  }\n  onManifestLoaded(event, data) {\n    const {\n      contentSteering\n    } = data;\n    if (contentSteering === null) {\n      return;\n    }\n    this.pathwayId = contentSteering.pathwayId;\n    this.uri = contentSteering.uri;\n    if (this.started) {\n      this.startLoad();\n    }\n  }\n  onManifestParsed(event, data) {\n    this.audioTracks = data.audioTracks;\n    this.subtitleTracks = data.subtitleTracks;\n  }\n  onError(event, data) {\n    const {\n      errorAction\n    } = data;\n    if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox && errorAction.flags === ErrorActionFlags.MoveAllAlternatesMatchingHost) {\n      const levels = this.levels;\n      let pathwayPriority = this.pathwayPriority;\n      let errorPathway = this.pathwayId;\n      if (data.context) {\n        const {\n          groupId,\n          pathwayId,\n          type\n        } = data.context;\n        if (groupId && levels) {\n          errorPathway = this.getPathwayForGroupId(groupId, type, errorPathway);\n        } else if (pathwayId) {\n          errorPathway = pathwayId;\n        }\n      }\n      if (!(errorPathway in this.penalizedPathways)) {\n        this.penalizedPathways[errorPathway] = performance.now();\n      }\n      if (!pathwayPriority && levels) {\n        pathwayPriority = levels.reduce((pathways, level) => {\n          if (pathways.indexOf(level.pathwayId) === -1) {\n            pathways.push(level.pathwayId);\n          }\n          return pathways;\n        }, []);\n      }\n      if (pathwayPriority && pathwayPriority.length > 1) {\n        this.updatePathwayPriority(pathwayPriority);\n        errorAction.resolved = this.pathwayId !== errorPathway;\n      }\n      if (!errorAction.resolved) {\n        logger.warn(`Could not resolve ${data.details} (\"${data.error.message}\") with content-steering for Pathway: ${errorPathway} levels: ${levels ? levels.length : levels} priorities: ${JSON.stringify(pathwayPriority)} penalized: ${JSON.stringify(this.penalizedPathways)}`);\n      }\n    }\n  }\n  filterParsedLevels(levels) {\n    this.levels = levels;\n    let pathwayLevels = this.getLevelsForPathway(this.pathwayId);\n    if (pathwayLevels.length === 0) {\n      const pathwayId = levels[0].pathwayId;\n      this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to \"${pathwayId}\"`);\n      pathwayLevels = this.getLevelsForPathway(pathwayId);\n      this.pathwayId = pathwayId;\n    }\n    if (pathwayLevels.length !== levels.length) {\n      this.log(`Found ${pathwayLevels.length}/${levels.length} levels in Pathway \"${this.pathwayId}\"`);\n    }\n    return pathwayLevels;\n  }\n  getLevelsForPathway(pathwayId) {\n    if (this.levels === null) {\n      return [];\n    }\n    return this.levels.filter((level) => pathwayId === level.pathwayId);\n  }\n  updatePathwayPriority(pathwayPriority) {\n    this.pathwayPriority = pathwayPriority;\n    let levels;\n    const penalizedPathways = this.penalizedPathways;\n    const now2 = performance.now();\n    Object.keys(penalizedPathways).forEach((pathwayId) => {\n      if (now2 - penalizedPathways[pathwayId] > PATHWAY_PENALTY_DURATION_MS) {\n        delete penalizedPathways[pathwayId];\n      }\n    });\n    for (let i2 = 0; i2 < pathwayPriority.length; i2++) {\n      const pathwayId = pathwayPriority[i2];\n      if (pathwayId in penalizedPathways) {\n        continue;\n      }\n      if (pathwayId === this.pathwayId) {\n        return;\n      }\n      const selectedIndex = this.hls.nextLoadLevel;\n      const selectedLevel = this.hls.levels[selectedIndex];\n      levels = this.getLevelsForPathway(pathwayId);\n      if (levels.length > 0) {\n        this.log(`Setting Pathway to \"${pathwayId}\"`);\n        this.pathwayId = pathwayId;\n        reassignFragmentLevelIndexes(levels);\n        this.hls.trigger(Events.LEVELS_UPDATED, {\n          levels\n        });\n        const levelAfterChange = this.hls.levels[selectedIndex];\n        if (selectedLevel && levelAfterChange && this.levels) {\n          if (levelAfterChange.attrs[\"STABLE-VARIANT-ID\"] !== selectedLevel.attrs[\"STABLE-VARIANT-ID\"] && levelAfterChange.bitrate !== selectedLevel.bitrate) {\n            this.log(`Unstable Pathways change from bitrate ${selectedLevel.bitrate} to ${levelAfterChange.bitrate}`);\n          }\n          this.hls.nextLoadLevel = selectedIndex;\n        }\n        break;\n      }\n    }\n  }\n  getPathwayForGroupId(groupId, type, defaultPathway) {\n    const levels = this.getLevelsForPathway(defaultPathway).concat(this.levels || []);\n    for (let i2 = 0; i2 < levels.length; i2++) {\n      if (type === PlaylistContextType.AUDIO_TRACK && levels[i2].hasAudioGroup(groupId) || type === PlaylistContextType.SUBTITLE_TRACK && levels[i2].hasSubtitleGroup(groupId)) {\n        return levels[i2].pathwayId;\n      }\n    }\n    return defaultPathway;\n  }\n  clonePathways(pathwayClones) {\n    const levels = this.levels;\n    if (!levels) {\n      return;\n    }\n    const audioGroupCloneMap = {};\n    const subtitleGroupCloneMap = {};\n    pathwayClones.forEach((pathwayClone) => {\n      const {\n        ID: cloneId,\n        \"BASE-ID\": baseId,\n        \"URI-REPLACEMENT\": uriReplacement\n      } = pathwayClone;\n      if (levels.some((level) => level.pathwayId === cloneId)) {\n        return;\n      }\n      const clonedVariants = this.getLevelsForPathway(baseId).map((baseLevel) => {\n        const attributes = new AttrList(baseLevel.attrs);\n        attributes[\"PATHWAY-ID\"] = cloneId;\n        const clonedAudioGroupId = attributes.AUDIO && `${attributes.AUDIO}_clone_${cloneId}`;\n        const clonedSubtitleGroupId = attributes.SUBTITLES && `${attributes.SUBTITLES}_clone_${cloneId}`;\n        if (clonedAudioGroupId) {\n          audioGroupCloneMap[attributes.AUDIO] = clonedAudioGroupId;\n          attributes.AUDIO = clonedAudioGroupId;\n        }\n        if (clonedSubtitleGroupId) {\n          subtitleGroupCloneMap[attributes.SUBTITLES] = clonedSubtitleGroupId;\n          attributes.SUBTITLES = clonedSubtitleGroupId;\n        }\n        const url = performUriReplacement(baseLevel.uri, attributes[\"STABLE-VARIANT-ID\"], \"PER-VARIANT-URIS\", uriReplacement);\n        const clonedLevel = new Level({\n          attrs: attributes,\n          audioCodec: baseLevel.audioCodec,\n          bitrate: baseLevel.bitrate,\n          height: baseLevel.height,\n          name: baseLevel.name,\n          url,\n          videoCodec: baseLevel.videoCodec,\n          width: baseLevel.width\n        });\n        if (baseLevel.audioGroups) {\n          for (let i2 = 1; i2 < baseLevel.audioGroups.length; i2++) {\n            clonedLevel.addGroupId(\"audio\", `${baseLevel.audioGroups[i2]}_clone_${cloneId}`);\n          }\n        }\n        if (baseLevel.subtitleGroups) {\n          for (let i2 = 1; i2 < baseLevel.subtitleGroups.length; i2++) {\n            clonedLevel.addGroupId(\"text\", `${baseLevel.subtitleGroups[i2]}_clone_${cloneId}`);\n          }\n        }\n        return clonedLevel;\n      });\n      levels.push(...clonedVariants);\n      cloneRenditionGroups(this.audioTracks, audioGroupCloneMap, uriReplacement, cloneId);\n      cloneRenditionGroups(this.subtitleTracks, subtitleGroupCloneMap, uriReplacement, cloneId);\n    });\n  }\n  loadSteeringManifest(uri) {\n    const config = this.hls.config;\n    const Loader = config.loader;\n    if (this.loader) {\n      this.loader.destroy();\n    }\n    this.loader = new Loader(config);\n    let url;\n    try {\n      url = new self.URL(uri);\n    } catch (error) {\n      this.enabled = false;\n      this.log(`Failed to parse Steering Manifest URI: ${uri}`);\n      return;\n    }\n    if (url.protocol !== \"data:\") {\n      const throughput = (this.hls.bandwidthEstimate || config.abrEwmaDefaultEstimate) | 0;\n      url.searchParams.set(\"_HLS_pathway\", this.pathwayId);\n      url.searchParams.set(\"_HLS_throughput\", \"\" + throughput);\n    }\n    const context = {\n      responseType: \"json\",\n      url: url.href\n    };\n    const loadPolicy = config.steeringManifestLoadPolicy.default;\n    const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n    const loaderConfig = {\n      loadPolicy,\n      timeout: loadPolicy.maxLoadTimeMs,\n      maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n      retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n      maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n    };\n    const callbacks = {\n      onSuccess: (response, stats, context2, networkDetails) => {\n        this.log(`Loaded steering manifest: \"${url}\"`);\n        const steeringData = response.data;\n        if (steeringData.VERSION !== 1) {\n          this.log(`Steering VERSION ${steeringData.VERSION} not supported!`);\n          return;\n        }\n        this.updated = performance.now();\n        this.timeToLoad = steeringData.TTL;\n        const {\n          \"RELOAD-URI\": reloadUri,\n          \"PATHWAY-CLONES\": pathwayClones,\n          \"PATHWAY-PRIORITY\": pathwayPriority\n        } = steeringData;\n        if (reloadUri) {\n          try {\n            this.uri = new self.URL(reloadUri, url).href;\n          } catch (error) {\n            this.enabled = false;\n            this.log(`Failed to parse Steering Manifest RELOAD-URI: ${reloadUri}`);\n            return;\n          }\n        }\n        this.scheduleRefresh(this.uri || context2.url);\n        if (pathwayClones) {\n          this.clonePathways(pathwayClones);\n        }\n        const loadedSteeringData = {\n          steeringManifest: steeringData,\n          url: url.toString()\n        };\n        this.hls.trigger(Events.STEERING_MANIFEST_LOADED, loadedSteeringData);\n        if (pathwayPriority) {\n          this.updatePathwayPriority(pathwayPriority);\n        }\n      },\n      onError: (error, context2, networkDetails, stats) => {\n        this.log(`Error loading steering manifest: ${error.code} ${error.text} (${context2.url})`);\n        this.stopLoad();\n        if (error.code === 410) {\n          this.enabled = false;\n          this.log(`Steering manifest ${context2.url} no longer available`);\n          return;\n        }\n        let ttl = this.timeToLoad * 1e3;\n        if (error.code === 429) {\n          const loader = this.loader;\n          if (typeof (loader == null ? void 0 : loader.getResponseHeader) === \"function\") {\n            const retryAfter = loader.getResponseHeader(\"Retry-After\");\n            if (retryAfter) {\n              ttl = parseFloat(retryAfter) * 1e3;\n            }\n          }\n          this.log(`Steering manifest ${context2.url} rate limited`);\n          return;\n        }\n        this.scheduleRefresh(this.uri || context2.url, ttl);\n      },\n      onTimeout: (stats, context2, networkDetails) => {\n        this.log(`Timeout loading steering manifest (${context2.url})`);\n        this.scheduleRefresh(this.uri || context2.url);\n      }\n    };\n    this.log(`Requesting steering manifest: ${url}`);\n    this.loader.load(context, loaderConfig, callbacks);\n  }\n  scheduleRefresh(uri, ttlMs = this.timeToLoad * 1e3) {\n    this.clearTimeout();\n    this.reloadTimer = self.setTimeout(() => {\n      var _this$hls;\n      const media = (_this$hls = this.hls) == null ? void 0 : _this$hls.media;\n      if (media && !media.ended) {\n        this.loadSteeringManifest(uri);\n        return;\n      }\n      this.scheduleRefresh(uri, this.timeToLoad * 1e3);\n    }, ttlMs);\n  }\n};\nfunction cloneRenditionGroups(tracks, groupCloneMap, uriReplacement, cloneId) {\n  if (!tracks) {\n    return;\n  }\n  Object.keys(groupCloneMap).forEach((audioGroupId) => {\n    const clonedTracks = tracks.filter((track) => track.groupId === audioGroupId).map((track) => {\n      const clonedTrack = _extends({}, track);\n      clonedTrack.details = void 0;\n      clonedTrack.attrs = new AttrList(clonedTrack.attrs);\n      clonedTrack.url = clonedTrack.attrs.URI = performUriReplacement(track.url, track.attrs[\"STABLE-RENDITION-ID\"], \"PER-RENDITION-URIS\", uriReplacement);\n      clonedTrack.groupId = clonedTrack.attrs[\"GROUP-ID\"] = groupCloneMap[audioGroupId];\n      clonedTrack.attrs[\"PATHWAY-ID\"] = cloneId;\n      return clonedTrack;\n    });\n    tracks.push(...clonedTracks);\n  });\n}\nfunction performUriReplacement(uri, stableId, perOptionKey, uriReplacement) {\n  const {\n    HOST: host,\n    PARAMS: params,\n    [perOptionKey]: perOptionUris\n  } = uriReplacement;\n  let perVariantUri;\n  if (stableId) {\n    perVariantUri = perOptionUris == null ? void 0 : perOptionUris[stableId];\n    if (perVariantUri) {\n      uri = perVariantUri;\n    }\n  }\n  const url = new self.URL(uri);\n  if (host && !perVariantUri) {\n    url.host = host;\n  }\n  if (params) {\n    Object.keys(params).sort().forEach((key) => {\n      if (key) {\n        url.searchParams.set(key, params[key]);\n      }\n    });\n  }\n  return url.href;\n}\nvar AGE_HEADER_LINE_REGEX = /^age:\\s*[\\d.]+\\s*$/im;\nvar XhrLoader = class {\n  constructor(config) {\n    this.xhrSetup = void 0;\n    this.requestTimeout = void 0;\n    this.retryTimeout = void 0;\n    this.retryDelay = void 0;\n    this.config = null;\n    this.callbacks = null;\n    this.context = null;\n    this.loader = null;\n    this.stats = void 0;\n    this.xhrSetup = config ? config.xhrSetup || null : null;\n    this.stats = new LoadStats();\n    this.retryDelay = 0;\n  }\n  destroy() {\n    this.callbacks = null;\n    this.abortInternal();\n    this.loader = null;\n    this.config = null;\n    this.context = null;\n    this.xhrSetup = null;\n  }\n  abortInternal() {\n    const loader = this.loader;\n    self.clearTimeout(this.requestTimeout);\n    self.clearTimeout(this.retryTimeout);\n    if (loader) {\n      loader.onreadystatechange = null;\n      loader.onprogress = null;\n      if (loader.readyState !== 4) {\n        this.stats.aborted = true;\n        loader.abort();\n      }\n    }\n  }\n  abort() {\n    var _this$callbacks;\n    this.abortInternal();\n    if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n      this.callbacks.onAbort(this.stats, this.context, this.loader);\n    }\n  }\n  load(context, config, callbacks) {\n    if (this.stats.loading.start) {\n      throw new Error(\"Loader can only be used once.\");\n    }\n    this.stats.loading.start = self.performance.now();\n    this.context = context;\n    this.config = config;\n    this.callbacks = callbacks;\n    this.loadInternal();\n  }\n  loadInternal() {\n    const {\n      config,\n      context\n    } = this;\n    if (!config || !context) {\n      return;\n    }\n    const xhr = this.loader = new self.XMLHttpRequest();\n    const stats = this.stats;\n    stats.loading.first = 0;\n    stats.loaded = 0;\n    stats.aborted = false;\n    const xhrSetup = this.xhrSetup;\n    if (xhrSetup) {\n      Promise.resolve().then(() => {\n        if (this.loader !== xhr || this.stats.aborted) return;\n        return xhrSetup(xhr, context.url);\n      }).catch((error) => {\n        if (this.loader !== xhr || this.stats.aborted) return;\n        xhr.open(\"GET\", context.url, true);\n        return xhrSetup(xhr, context.url);\n      }).then(() => {\n        if (this.loader !== xhr || this.stats.aborted) return;\n        this.openAndSendXhr(xhr, context, config);\n      }).catch((error) => {\n        this.callbacks.onError({\n          code: xhr.status,\n          text: error.message\n        }, context, xhr, stats);\n        return;\n      });\n    } else {\n      this.openAndSendXhr(xhr, context, config);\n    }\n  }\n  openAndSendXhr(xhr, context, config) {\n    if (!xhr.readyState) {\n      xhr.open(\"GET\", context.url, true);\n    }\n    const headers = context.headers;\n    const {\n      maxTimeToFirstByteMs,\n      maxLoadTimeMs\n    } = config.loadPolicy;\n    if (headers) {\n      for (const header in headers) {\n        xhr.setRequestHeader(header, headers[header]);\n      }\n    }\n    if (context.rangeEnd) {\n      xhr.setRequestHeader(\"Range\", \"bytes=\" + context.rangeStart + \"-\" + (context.rangeEnd - 1));\n    }\n    xhr.onreadystatechange = this.readystatechange.bind(this);\n    xhr.onprogress = this.loadprogress.bind(this);\n    xhr.responseType = context.responseType;\n    self.clearTimeout(this.requestTimeout);\n    config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n    this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.timeout);\n    xhr.send();\n  }\n  readystatechange() {\n    const {\n      context,\n      loader: xhr,\n      stats\n    } = this;\n    if (!context || !xhr) {\n      return;\n    }\n    const readyState = xhr.readyState;\n    const config = this.config;\n    if (stats.aborted) {\n      return;\n    }\n    if (readyState >= 2) {\n      if (stats.loading.first === 0) {\n        stats.loading.first = Math.max(self.performance.now(), stats.loading.start);\n        if (config.timeout !== config.loadPolicy.maxLoadTimeMs) {\n          self.clearTimeout(this.requestTimeout);\n          config.timeout = config.loadPolicy.maxLoadTimeMs;\n          this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.loadPolicy.maxLoadTimeMs - (stats.loading.first - stats.loading.start));\n        }\n      }\n      if (readyState === 4) {\n        self.clearTimeout(this.requestTimeout);\n        xhr.onreadystatechange = null;\n        xhr.onprogress = null;\n        const status2 = xhr.status;\n        const useResponseText = xhr.responseType === \"text\" ? xhr.responseText : null;\n        if (status2 >= 200 && status2 < 300) {\n          const data = useResponseText != null ? useResponseText : xhr.response;\n          if (data != null) {\n            stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n            const len = xhr.responseType === \"arraybuffer\" ? data.byteLength : data.length;\n            stats.loaded = stats.total = len;\n            stats.bwEstimate = stats.total * 8e3 / (stats.loading.end - stats.loading.first);\n            if (!this.callbacks) {\n              return;\n            }\n            const onProgress = this.callbacks.onProgress;\n            if (onProgress) {\n              onProgress(stats, context, data, xhr);\n            }\n            if (!this.callbacks) {\n              return;\n            }\n            const _response = {\n              url: xhr.responseURL,\n              data,\n              code: status2\n            };\n            this.callbacks.onSuccess(_response, stats, context, xhr);\n            return;\n          }\n        }\n        const retryConfig = config.loadPolicy.errorRetry;\n        const retryCount = stats.retry;\n        const response = {\n          url: context.url,\n          data: void 0,\n          code: status2\n        };\n        if (shouldRetry(retryConfig, retryCount, false, response)) {\n          this.retry(retryConfig);\n        } else {\n          logger.error(`${status2} while loading ${context.url}`);\n          this.callbacks.onError({\n            code: status2,\n            text: xhr.statusText\n          }, context, xhr, stats);\n        }\n      }\n    }\n  }\n  loadtimeout() {\n    if (!this.config) return;\n    const retryConfig = this.config.loadPolicy.timeoutRetry;\n    const retryCount = this.stats.retry;\n    if (shouldRetry(retryConfig, retryCount, true)) {\n      this.retry(retryConfig);\n    } else {\n      var _this$context;\n      logger.warn(`timeout while loading ${(_this$context = this.context) == null ? void 0 : _this$context.url}`);\n      const callbacks = this.callbacks;\n      if (callbacks) {\n        this.abortInternal();\n        callbacks.onTimeout(this.stats, this.context, this.loader);\n      }\n    }\n  }\n  retry(retryConfig) {\n    const {\n      context,\n      stats\n    } = this;\n    this.retryDelay = getRetryDelay(retryConfig, stats.retry);\n    stats.retry++;\n    logger.warn(`${status ? \"HTTP Status \" + status : \"Timeout\"} while loading ${context == null ? void 0 : context.url}, retrying ${stats.retry}/${retryConfig.maxNumRetry} in ${this.retryDelay}ms`);\n    this.abortInternal();\n    this.loader = null;\n    self.clearTimeout(this.retryTimeout);\n    this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay);\n  }\n  loadprogress(event) {\n    const stats = this.stats;\n    stats.loaded = event.loaded;\n    if (event.lengthComputable) {\n      stats.total = event.total;\n    }\n  }\n  getCacheAge() {\n    let result = null;\n    if (this.loader && AGE_HEADER_LINE_REGEX.test(this.loader.getAllResponseHeaders())) {\n      const ageHeader = this.loader.getResponseHeader(\"age\");\n      result = ageHeader ? parseFloat(ageHeader) : null;\n    }\n    return result;\n  }\n  getResponseHeader(name) {\n    if (this.loader && new RegExp(`^${name}:\\\\s*[\\\\d.]+\\\\s*$`, \"im\").test(this.loader.getAllResponseHeaders())) {\n      return this.loader.getResponseHeader(name);\n    }\n    return null;\n  }\n};\nfunction fetchSupported() {\n  if (\n    // @ts-ignore\n    self.fetch && self.AbortController && self.ReadableStream && self.Request\n  ) {\n    try {\n      new self.ReadableStream({});\n      return true;\n    } catch (e) {\n    }\n  }\n  return false;\n}\nvar BYTERANGE = /(\\d+)-(\\d+)\\/(\\d+)/;\nvar FetchLoader = class {\n  constructor(config) {\n    this.fetchSetup = void 0;\n    this.requestTimeout = void 0;\n    this.request = null;\n    this.response = null;\n    this.controller = void 0;\n    this.context = null;\n    this.config = null;\n    this.callbacks = null;\n    this.stats = void 0;\n    this.loader = null;\n    this.fetchSetup = config.fetchSetup || getRequest;\n    this.controller = new self.AbortController();\n    this.stats = new LoadStats();\n  }\n  destroy() {\n    this.loader = this.callbacks = this.context = this.config = this.request = null;\n    this.abortInternal();\n    this.response = null;\n    this.fetchSetup = this.controller = this.stats = null;\n  }\n  abortInternal() {\n    if (this.controller && !this.stats.loading.end) {\n      this.stats.aborted = true;\n      this.controller.abort();\n    }\n  }\n  abort() {\n    var _this$callbacks;\n    this.abortInternal();\n    if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n      this.callbacks.onAbort(this.stats, this.context, this.response);\n    }\n  }\n  load(context, config, callbacks) {\n    const stats = this.stats;\n    if (stats.loading.start) {\n      throw new Error(\"Loader can only be used once.\");\n    }\n    stats.loading.start = self.performance.now();\n    const initParams = getRequestParameters(context, this.controller.signal);\n    const onProgress = callbacks.onProgress;\n    const isArrayBuffer = context.responseType === \"arraybuffer\";\n    const LENGTH = isArrayBuffer ? \"byteLength\" : \"length\";\n    const {\n      maxTimeToFirstByteMs,\n      maxLoadTimeMs\n    } = config.loadPolicy;\n    this.context = context;\n    this.config = config;\n    this.callbacks = callbacks;\n    this.request = this.fetchSetup(context, initParams);\n    self.clearTimeout(this.requestTimeout);\n    config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n    this.requestTimeout = self.setTimeout(() => {\n      this.abortInternal();\n      callbacks.onTimeout(stats, context, this.response);\n    }, config.timeout);\n    self.fetch(this.request).then((response) => {\n      this.response = this.loader = response;\n      const first = Math.max(self.performance.now(), stats.loading.start);\n      self.clearTimeout(this.requestTimeout);\n      config.timeout = maxLoadTimeMs;\n      this.requestTimeout = self.setTimeout(() => {\n        this.abortInternal();\n        callbacks.onTimeout(stats, context, this.response);\n      }, maxLoadTimeMs - (first - stats.loading.start));\n      if (!response.ok) {\n        const {\n          status: status2,\n          statusText\n        } = response;\n        throw new FetchError(statusText || \"fetch, bad network response\", status2, response);\n      }\n      stats.loading.first = first;\n      stats.total = getContentLength(response.headers) || stats.total;\n      if (onProgress && isFiniteNumber(config.highWaterMark)) {\n        return this.loadProgressively(response, stats, context, config.highWaterMark, onProgress);\n      }\n      if (isArrayBuffer) {\n        return response.arrayBuffer();\n      }\n      if (context.responseType === \"json\") {\n        return response.json();\n      }\n      return response.text();\n    }).then((responseData) => {\n      const response = this.response;\n      if (!response) {\n        throw new Error(\"loader destroyed\");\n      }\n      self.clearTimeout(this.requestTimeout);\n      stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n      const total = responseData[LENGTH];\n      if (total) {\n        stats.loaded = stats.total = total;\n      }\n      const loaderResponse = {\n        url: response.url,\n        data: responseData,\n        code: response.status\n      };\n      if (onProgress && !isFiniteNumber(config.highWaterMark)) {\n        onProgress(stats, context, responseData, response);\n      }\n      callbacks.onSuccess(loaderResponse, stats, context, response);\n    }).catch((error) => {\n      self.clearTimeout(this.requestTimeout);\n      if (stats.aborted) {\n        return;\n      }\n      const code = !error ? 0 : error.code || 0;\n      const text = !error ? null : error.message;\n      callbacks.onError({\n        code,\n        text\n      }, context, error ? error.details : null, stats);\n    });\n  }\n  getCacheAge() {\n    let result = null;\n    if (this.response) {\n      const ageHeader = this.response.headers.get(\"age\");\n      result = ageHeader ? parseFloat(ageHeader) : null;\n    }\n    return result;\n  }\n  getResponseHeader(name) {\n    return this.response ? this.response.headers.get(name) : null;\n  }\n  loadProgressively(response, stats, context, highWaterMark = 0, onProgress) {\n    const chunkCache = new ChunkCache();\n    const reader = response.body.getReader();\n    const pump = () => {\n      return reader.read().then((data) => {\n        if (data.done) {\n          if (chunkCache.dataLength) {\n            onProgress(stats, context, chunkCache.flush(), response);\n          }\n          return Promise.resolve(new ArrayBuffer(0));\n        }\n        const chunk = data.value;\n        const len = chunk.length;\n        stats.loaded += len;\n        if (len < highWaterMark || chunkCache.dataLength) {\n          chunkCache.push(chunk);\n          if (chunkCache.dataLength >= highWaterMark) {\n            onProgress(stats, context, chunkCache.flush(), response);\n          }\n        } else {\n          onProgress(stats, context, chunk, response);\n        }\n        return pump();\n      }).catch(() => {\n        return Promise.reject();\n      });\n    };\n    return pump();\n  }\n};\nfunction getRequestParameters(context, signal) {\n  const initParams = {\n    method: \"GET\",\n    mode: \"cors\",\n    credentials: \"same-origin\",\n    signal,\n    headers: new self.Headers(_extends({}, context.headers))\n  };\n  if (context.rangeEnd) {\n    initParams.headers.set(\"Range\", \"bytes=\" + context.rangeStart + \"-\" + String(context.rangeEnd - 1));\n  }\n  return initParams;\n}\nfunction getByteRangeLength(byteRangeHeader) {\n  const result = BYTERANGE.exec(byteRangeHeader);\n  if (result) {\n    return parseInt(result[2]) - parseInt(result[1]) + 1;\n  }\n}\nfunction getContentLength(headers) {\n  const contentRange = headers.get(\"Content-Range\");\n  if (contentRange) {\n    const byteRangeLength = getByteRangeLength(contentRange);\n    if (isFiniteNumber(byteRangeLength)) {\n      return byteRangeLength;\n    }\n  }\n  const contentLength = headers.get(\"Content-Length\");\n  if (contentLength) {\n    return parseInt(contentLength);\n  }\n}\nfunction getRequest(context, initParams) {\n  return new self.Request(context.url, initParams);\n}\nvar FetchError = class extends Error {\n  constructor(message, code, details) {\n    super(message);\n    this.code = void 0;\n    this.details = void 0;\n    this.code = code;\n    this.details = details;\n  }\n};\nvar WHITESPACE_CHAR = /\\s/;\nvar Cues = {\n  newCue(track, startTime, endTime, captionScreen) {\n    const result = [];\n    let row;\n    let cue;\n    let indenting;\n    let indent;\n    let text;\n    const Cue = self.VTTCue || self.TextTrackCue;\n    for (let r10 = 0; r10 < captionScreen.rows.length; r10++) {\n      row = captionScreen.rows[r10];\n      indenting = true;\n      indent = 0;\n      text = \"\";\n      if (!row.isEmpty()) {\n        var _track$cues;\n        for (let c4 = 0; c4 < row.chars.length; c4++) {\n          if (WHITESPACE_CHAR.test(row.chars[c4].uchar) && indenting) {\n            indent++;\n          } else {\n            text += row.chars[c4].uchar;\n            indenting = false;\n          }\n        }\n        row.cueStartTime = startTime;\n        if (startTime === endTime) {\n          endTime += 1e-4;\n        }\n        if (indent >= 16) {\n          indent--;\n        } else {\n          indent++;\n        }\n        const cueText = fixLineBreaks(text.trim());\n        const id = generateCueId(startTime, endTime, cueText);\n        if (!(track != null && (_track$cues = track.cues) != null && _track$cues.getCueById(id))) {\n          cue = new Cue(startTime, endTime, cueText);\n          cue.id = id;\n          cue.line = r10 + 1;\n          cue.align = \"left\";\n          cue.position = 10 + Math.min(80, Math.floor(indent * 8 / 32) * 10);\n          result.push(cue);\n        }\n      }\n    }\n    if (track && result.length) {\n      result.sort((cueA, cueB) => {\n        if (cueA.line === \"auto\" || cueB.line === \"auto\") {\n          return 0;\n        }\n        if (cueA.line > 8 && cueB.line > 8) {\n          return cueB.line - cueA.line;\n        }\n        return cueA.line - cueB.line;\n      });\n      result.forEach((cue2) => addCueToTrack(track, cue2));\n    }\n    return result;\n  }\n};\nvar defaultLoadPolicy = {\n  maxTimeToFirstByteMs: 8e3,\n  maxLoadTimeMs: 2e4,\n  timeoutRetry: null,\n  errorRetry: null\n};\nvar hlsDefaultConfig = _objectSpread2(_objectSpread2({\n  autoStartLoad: true,\n  // used by stream-controller\n  startPosition: -1,\n  // used by stream-controller\n  defaultAudioCodec: void 0,\n  // used by stream-controller\n  debug: false,\n  // used by logger\n  capLevelOnFPSDrop: false,\n  // used by fps-controller\n  capLevelToPlayerSize: false,\n  // used by cap-level-controller\n  ignoreDevicePixelRatio: false,\n  // used by cap-level-controller\n  preferManagedMediaSource: true,\n  initialLiveManifestSize: 1,\n  // used by stream-controller\n  maxBufferLength: 30,\n  // used by stream-controller\n  backBufferLength: Infinity,\n  // used by buffer-controller\n  frontBufferFlushThreshold: Infinity,\n  maxBufferSize: 60 * 1e3 * 1e3,\n  // used by stream-controller\n  maxBufferHole: 0.1,\n  // used by stream-controller\n  highBufferWatchdogPeriod: 2,\n  // used by stream-controller\n  nudgeOffset: 0.1,\n  // used by stream-controller\n  nudgeMaxRetry: 3,\n  // used by stream-controller\n  maxFragLookUpTolerance: 0.25,\n  // used by stream-controller\n  liveSyncDurationCount: 3,\n  // used by latency-controller\n  liveMaxLatencyDurationCount: Infinity,\n  // used by latency-controller\n  liveSyncDuration: void 0,\n  // used by latency-controller\n  liveMaxLatencyDuration: void 0,\n  // used by latency-controller\n  maxLiveSyncPlaybackRate: 1,\n  // used by latency-controller\n  liveDurationInfinity: false,\n  // used by buffer-controller\n  /**\n   * @deprecated use backBufferLength\n   */\n  liveBackBufferLength: null,\n  // used by buffer-controller\n  maxMaxBufferLength: 600,\n  // used by stream-controller\n  enableWorker: true,\n  // used by transmuxer\n  workerPath: null,\n  // used by transmuxer\n  enableSoftwareAES: true,\n  // used by decrypter\n  startLevel: void 0,\n  // used by level-controller\n  startFragPrefetch: false,\n  // used by stream-controller\n  fpsDroppedMonitoringPeriod: 5e3,\n  // used by fps-controller\n  fpsDroppedMonitoringThreshold: 0.2,\n  // used by fps-controller\n  appendErrorMaxRetry: 3,\n  // used by buffer-controller\n  loader: XhrLoader,\n  // loader: FetchLoader,\n  fLoader: void 0,\n  // used by fragment-loader\n  pLoader: void 0,\n  // used by playlist-loader\n  xhrSetup: void 0,\n  // used by xhr-loader\n  licenseXhrSetup: void 0,\n  // used by eme-controller\n  licenseResponseCallback: void 0,\n  // used by eme-controller\n  abrController: AbrController,\n  bufferController: BufferController,\n  capLevelController: CapLevelController,\n  errorController: ErrorController,\n  fpsController: FPSController,\n  stretchShortVideoTrack: false,\n  // used by mp4-remuxer\n  maxAudioFramesDrift: 1,\n  // used by mp4-remuxer\n  forceKeyFrameOnDiscontinuity: true,\n  // used by ts-demuxer\n  abrEwmaFastLive: 3,\n  // used by abr-controller\n  abrEwmaSlowLive: 9,\n  // used by abr-controller\n  abrEwmaFastVoD: 3,\n  // used by abr-controller\n  abrEwmaSlowVoD: 9,\n  // used by abr-controller\n  abrEwmaDefaultEstimate: 5e5,\n  // 500 kbps  // used by abr-controller\n  abrEwmaDefaultEstimateMax: 5e6,\n  // 5 mbps\n  abrBandWidthFactor: 0.95,\n  // used by abr-controller\n  abrBandWidthUpFactor: 0.7,\n  // used by abr-controller\n  abrMaxWithRealBitrate: false,\n  // used by abr-controller\n  maxStarvationDelay: 4,\n  // used by abr-controller\n  maxLoadingDelay: 4,\n  // used by abr-controller\n  minAutoBitrate: 0,\n  // used by hls\n  emeEnabled: false,\n  // used by eme-controller\n  widevineLicenseUrl: void 0,\n  // used by eme-controller\n  drmSystems: {},\n  // used by eme-controller\n  drmSystemOptions: {},\n  // used by eme-controller\n  requestMediaKeySystemAccessFunc: requestMediaKeySystemAccess,\n  // used by eme-controller\n  testBandwidth: true,\n  progressive: false,\n  lowLatencyMode: true,\n  cmcd: void 0,\n  enableDateRangeMetadataCues: true,\n  enableEmsgMetadataCues: true,\n  enableID3MetadataCues: true,\n  useMediaCapabilities: true,\n  certLoadPolicy: {\n    default: defaultLoadPolicy\n  },\n  keyLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 8e3,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 2e4,\n        backoff: \"linear\"\n      },\n      errorRetry: {\n        maxNumRetry: 8,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 2e4,\n        backoff: \"linear\"\n      }\n    }\n  },\n  manifestLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: Infinity,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  playlistLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 1e4,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  fragLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 1e4,\n      maxLoadTimeMs: 12e4,\n      timeoutRetry: {\n        maxNumRetry: 4,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 6,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  steeringManifestLoadPolicy: {\n    default: {\n      maxTimeToFirstByteMs: 1e4,\n      maxLoadTimeMs: 2e4,\n      timeoutRetry: {\n        maxNumRetry: 2,\n        retryDelayMs: 0,\n        maxRetryDelayMs: 0\n      },\n      errorRetry: {\n        maxNumRetry: 1,\n        retryDelayMs: 1e3,\n        maxRetryDelayMs: 8e3\n      }\n    }\n  },\n  // These default settings are deprecated in favor of the above policies\n  // and are maintained for backwards compatibility\n  manifestLoadingTimeOut: 1e4,\n  manifestLoadingMaxRetry: 1,\n  manifestLoadingRetryDelay: 1e3,\n  manifestLoadingMaxRetryTimeout: 64e3,\n  levelLoadingTimeOut: 1e4,\n  levelLoadingMaxRetry: 4,\n  levelLoadingRetryDelay: 1e3,\n  levelLoadingMaxRetryTimeout: 64e3,\n  fragLoadingTimeOut: 2e4,\n  fragLoadingMaxRetry: 6,\n  fragLoadingRetryDelay: 1e3,\n  fragLoadingMaxRetryTimeout: 64e3\n}, timelineConfig()), {}, {\n  subtitleStreamController: SubtitleStreamController,\n  subtitleTrackController: SubtitleTrackController,\n  timelineController: TimelineController,\n  audioStreamController: AudioStreamController,\n  audioTrackController: AudioTrackController,\n  emeController: EMEController,\n  cmcdController: CMCDController,\n  contentSteeringController: ContentSteeringController\n});\nfunction timelineConfig() {\n  return {\n    cueHandler: Cues,\n    // used by timeline-controller\n    enableWebVTT: true,\n    // used by timeline-controller\n    enableIMSC1: true,\n    // used by timeline-controller\n    enableCEA708Captions: true,\n    // used by timeline-controller\n    captionsTextTrack1Label: \"English\",\n    // used by timeline-controller\n    captionsTextTrack1LanguageCode: \"en\",\n    // used by timeline-controller\n    captionsTextTrack2Label: \"Spanish\",\n    // used by timeline-controller\n    captionsTextTrack2LanguageCode: \"es\",\n    // used by timeline-controller\n    captionsTextTrack3Label: \"Unknown CC\",\n    // used by timeline-controller\n    captionsTextTrack3LanguageCode: \"\",\n    // used by timeline-controller\n    captionsTextTrack4Label: \"Unknown CC\",\n    // used by timeline-controller\n    captionsTextTrack4LanguageCode: \"\",\n    // used by timeline-controller\n    renderTextTracksNatively: true\n  };\n}\nfunction mergeConfig(defaultConfig, userConfig) {\n  if ((userConfig.liveSyncDurationCount || userConfig.liveMaxLatencyDurationCount) && (userConfig.liveSyncDuration || userConfig.liveMaxLatencyDuration)) {\n    throw new Error(\"Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration\");\n  }\n  if (userConfig.liveMaxLatencyDurationCount !== void 0 && (userConfig.liveSyncDurationCount === void 0 || userConfig.liveMaxLatencyDurationCount <= userConfig.liveSyncDurationCount)) {\n    throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be greater than \"liveSyncDurationCount\"');\n  }\n  if (userConfig.liveMaxLatencyDuration !== void 0 && (userConfig.liveSyncDuration === void 0 || userConfig.liveMaxLatencyDuration <= userConfig.liveSyncDuration)) {\n    throw new Error('Illegal hls.js config: \"liveMaxLatencyDuration\" must be greater than \"liveSyncDuration\"');\n  }\n  const defaultsCopy = deepCpy(defaultConfig);\n  const deprecatedSettingTypes = [\"manifest\", \"level\", \"frag\"];\n  const deprecatedSettings = [\"TimeOut\", \"MaxRetry\", \"RetryDelay\", \"MaxRetryTimeout\"];\n  deprecatedSettingTypes.forEach((type) => {\n    const policyName = `${type === \"level\" ? \"playlist\" : type}LoadPolicy`;\n    const policyNotSet = userConfig[policyName] === void 0;\n    const report = [];\n    deprecatedSettings.forEach((setting) => {\n      const deprecatedSetting = `${type}Loading${setting}`;\n      const value = userConfig[deprecatedSetting];\n      if (value !== void 0 && policyNotSet) {\n        report.push(deprecatedSetting);\n        const settings = defaultsCopy[policyName].default;\n        userConfig[policyName] = {\n          default: settings\n        };\n        switch (setting) {\n          case \"TimeOut\":\n            settings.maxLoadTimeMs = value;\n            settings.maxTimeToFirstByteMs = value;\n            break;\n          case \"MaxRetry\":\n            settings.errorRetry.maxNumRetry = value;\n            settings.timeoutRetry.maxNumRetry = value;\n            break;\n          case \"RetryDelay\":\n            settings.errorRetry.retryDelayMs = value;\n            settings.timeoutRetry.retryDelayMs = value;\n            break;\n          case \"MaxRetryTimeout\":\n            settings.errorRetry.maxRetryDelayMs = value;\n            settings.timeoutRetry.maxRetryDelayMs = value;\n            break;\n        }\n      }\n    });\n    if (report.length) {\n      logger.warn(`hls.js config: \"${report.join('\", \"')}\" setting(s) are deprecated, use \"${policyName}\": ${JSON.stringify(userConfig[policyName])}`);\n    }\n  });\n  return _objectSpread2(_objectSpread2({}, defaultsCopy), userConfig);\n}\nfunction deepCpy(obj) {\n  if (obj && typeof obj === \"object\") {\n    if (Array.isArray(obj)) {\n      return obj.map(deepCpy);\n    }\n    return Object.keys(obj).reduce((result, key) => {\n      result[key] = deepCpy(obj[key]);\n      return result;\n    }, {});\n  }\n  return obj;\n}\nfunction enableStreamingMode(config) {\n  const currentLoader = config.loader;\n  if (currentLoader !== FetchLoader && currentLoader !== XhrLoader) {\n    logger.log(\"[config]: Custom loader detected, cannot enable progressive streaming\");\n    config.progressive = false;\n  } else {\n    const canStreamProgressively = fetchSupported();\n    if (canStreamProgressively) {\n      config.loader = FetchLoader;\n      config.progressive = true;\n      config.enableSoftwareAES = true;\n      logger.log(\"[config]: Progressive streaming enabled, using FetchLoader\");\n    }\n  }\n}\nvar chromeOrFirefox;\nvar LevelController = class extends BasePlaylistController {\n  constructor(hls, contentSteeringController) {\n    super(hls, \"[level-controller]\");\n    this._levels = [];\n    this._firstLevel = -1;\n    this._maxAutoLevel = -1;\n    this._startLevel = void 0;\n    this.currentLevel = null;\n    this.currentLevelIndex = -1;\n    this.manualLevelIndex = -1;\n    this.steering = void 0;\n    this.onParsedComplete = void 0;\n    this.steering = contentSteeringController;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.on(Events.ERROR, this.onError, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n    hls.off(Events.ERROR, this.onError, this);\n  }\n  destroy() {\n    this._unregisterListeners();\n    this.steering = null;\n    this.resetLevels();\n    super.destroy();\n  }\n  stopLoad() {\n    const levels = this._levels;\n    levels.forEach((level) => {\n      level.loadError = 0;\n      level.fragmentError = 0;\n    });\n    super.stopLoad();\n  }\n  resetLevels() {\n    this._startLevel = void 0;\n    this.manualLevelIndex = -1;\n    this.currentLevelIndex = -1;\n    this.currentLevel = null;\n    this._levels = [];\n    this._maxAutoLevel = -1;\n  }\n  onManifestLoading(event, data) {\n    this.resetLevels();\n  }\n  onManifestLoaded(event, data) {\n    const preferManagedMediaSource = this.hls.config.preferManagedMediaSource;\n    const levels = [];\n    const redundantSet = {};\n    const generatePathwaySet = {};\n    let resolutionFound = false;\n    let videoCodecFound = false;\n    let audioCodecFound = false;\n    data.levels.forEach((levelParsed) => {\n      var _audioCodec, _videoCodec;\n      const attributes = levelParsed.attrs;\n      let {\n        audioCodec,\n        videoCodec\n      } = levelParsed;\n      if (((_audioCodec = audioCodec) == null ? void 0 : _audioCodec.indexOf(\"mp4a.40.34\")) !== -1) {\n        chromeOrFirefox || (chromeOrFirefox = /chrome|firefox/i.test(navigator.userAgent));\n        if (chromeOrFirefox) {\n          levelParsed.audioCodec = audioCodec = void 0;\n        }\n      }\n      if (audioCodec) {\n        levelParsed.audioCodec = audioCodec = getCodecCompatibleName(audioCodec, preferManagedMediaSource);\n      }\n      if (((_videoCodec = videoCodec) == null ? void 0 : _videoCodec.indexOf(\"avc1\")) === 0) {\n        videoCodec = levelParsed.videoCodec = convertAVC1ToAVCOTI(videoCodec);\n      }\n      const {\n        width,\n        height,\n        unknownCodecs\n      } = levelParsed;\n      resolutionFound || (resolutionFound = !!(width && height));\n      videoCodecFound || (videoCodecFound = !!videoCodec);\n      audioCodecFound || (audioCodecFound = !!audioCodec);\n      if (unknownCodecs != null && unknownCodecs.length || audioCodec && !areCodecsMediaSourceSupported(audioCodec, \"audio\", preferManagedMediaSource) || videoCodec && !areCodecsMediaSourceSupported(videoCodec, \"video\", preferManagedMediaSource)) {\n        return;\n      }\n      const {\n        CODECS,\n        \"FRAME-RATE\": FRAMERATE,\n        \"HDCP-LEVEL\": HDCP,\n        \"PATHWAY-ID\": PATHWAY,\n        RESOLUTION,\n        \"VIDEO-RANGE\": VIDEO_RANGE\n      } = attributes;\n      const contentSteeringPrefix = `${PATHWAY || \".\"}-`;\n      const levelKey = `${contentSteeringPrefix}${levelParsed.bitrate}-${RESOLUTION}-${FRAMERATE}-${CODECS}-${VIDEO_RANGE}-${HDCP}`;\n      if (!redundantSet[levelKey]) {\n        const level = new Level(levelParsed);\n        redundantSet[levelKey] = level;\n        generatePathwaySet[levelKey] = 1;\n        levels.push(level);\n      } else if (redundantSet[levelKey].uri !== levelParsed.url && !levelParsed.attrs[\"PATHWAY-ID\"]) {\n        const pathwayCount = generatePathwaySet[levelKey] += 1;\n        levelParsed.attrs[\"PATHWAY-ID\"] = new Array(pathwayCount + 1).join(\".\");\n        const level = new Level(levelParsed);\n        redundantSet[levelKey] = level;\n        levels.push(level);\n      } else {\n        redundantSet[levelKey].addGroupId(\"audio\", attributes.AUDIO);\n        redundantSet[levelKey].addGroupId(\"text\", attributes.SUBTITLES);\n      }\n    });\n    this.filterAndSortMediaOptions(levels, data, resolutionFound, videoCodecFound, audioCodecFound);\n  }\n  filterAndSortMediaOptions(filteredLevels, data, resolutionFound, videoCodecFound, audioCodecFound) {\n    let audioTracks = [];\n    let subtitleTracks = [];\n    let levels = filteredLevels;\n    if ((resolutionFound || videoCodecFound) && audioCodecFound) {\n      levels = levels.filter(({\n        videoCodec,\n        videoRange,\n        width,\n        height\n      }) => (!!videoCodec || !!(width && height)) && isVideoRange(videoRange));\n    }\n    if (levels.length === 0) {\n      Promise.resolve().then(() => {\n        if (this.hls) {\n          if (data.levels.length) {\n            this.warn(`One or more CODECS in variant not supported: ${JSON.stringify(data.levels[0].attrs)}`);\n          }\n          const error = new Error(\"no level with compatible codecs found in manifest\");\n          this.hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,\n            fatal: true,\n            url: data.url,\n            error,\n            reason: error.message\n          });\n        }\n      });\n      return;\n    }\n    if (data.audioTracks) {\n      const {\n        preferManagedMediaSource\n      } = this.hls.config;\n      audioTracks = data.audioTracks.filter((track) => !track.audioCodec || areCodecsMediaSourceSupported(track.audioCodec, \"audio\", preferManagedMediaSource));\n      assignTrackIdsByGroup(audioTracks);\n    }\n    if (data.subtitles) {\n      subtitleTracks = data.subtitles;\n      assignTrackIdsByGroup(subtitleTracks);\n    }\n    const unsortedLevels = levels.slice(0);\n    levels.sort((a2, b4) => {\n      if (a2.attrs[\"HDCP-LEVEL\"] !== b4.attrs[\"HDCP-LEVEL\"]) {\n        return (a2.attrs[\"HDCP-LEVEL\"] || \"\") > (b4.attrs[\"HDCP-LEVEL\"] || \"\") ? 1 : -1;\n      }\n      if (resolutionFound && a2.height !== b4.height) {\n        return a2.height - b4.height;\n      }\n      if (a2.frameRate !== b4.frameRate) {\n        return a2.frameRate - b4.frameRate;\n      }\n      if (a2.videoRange !== b4.videoRange) {\n        return VideoRangeValues.indexOf(a2.videoRange) - VideoRangeValues.indexOf(b4.videoRange);\n      }\n      if (a2.videoCodec !== b4.videoCodec) {\n        const valueA = videoCodecPreferenceValue(a2.videoCodec);\n        const valueB = videoCodecPreferenceValue(b4.videoCodec);\n        if (valueA !== valueB) {\n          return valueB - valueA;\n        }\n      }\n      if (a2.uri === b4.uri && a2.codecSet !== b4.codecSet) {\n        const valueA = codecsSetSelectionPreferenceValue(a2.codecSet);\n        const valueB = codecsSetSelectionPreferenceValue(b4.codecSet);\n        if (valueA !== valueB) {\n          return valueB - valueA;\n        }\n      }\n      if (a2.averageBitrate !== b4.averageBitrate) {\n        return a2.averageBitrate - b4.averageBitrate;\n      }\n      return 0;\n    });\n    let firstLevelInPlaylist = unsortedLevels[0];\n    if (this.steering) {\n      levels = this.steering.filterParsedLevels(levels);\n      if (levels.length !== unsortedLevels.length) {\n        for (let i2 = 0; i2 < unsortedLevels.length; i2++) {\n          if (unsortedLevels[i2].pathwayId === levels[0].pathwayId) {\n            firstLevelInPlaylist = unsortedLevels[i2];\n            break;\n          }\n        }\n      }\n    }\n    this._levels = levels;\n    for (let i2 = 0; i2 < levels.length; i2++) {\n      if (levels[i2] === firstLevelInPlaylist) {\n        var _this$hls$userConfig;\n        this._firstLevel = i2;\n        const firstLevelBitrate = firstLevelInPlaylist.bitrate;\n        const bandwidthEstimate = this.hls.bandwidthEstimate;\n        this.log(`manifest loaded, ${levels.length} level(s) found, first bitrate: ${firstLevelBitrate}`);\n        if (((_this$hls$userConfig = this.hls.userConfig) == null ? void 0 : _this$hls$userConfig.abrEwmaDefaultEstimate) === void 0) {\n          const startingBwEstimate = Math.min(firstLevelBitrate, this.hls.config.abrEwmaDefaultEstimateMax);\n          if (startingBwEstimate > bandwidthEstimate && bandwidthEstimate === hlsDefaultConfig.abrEwmaDefaultEstimate) {\n            this.hls.bandwidthEstimate = startingBwEstimate;\n          }\n        }\n        break;\n      }\n    }\n    const audioOnly = audioCodecFound && !videoCodecFound;\n    const edata = {\n      levels,\n      audioTracks,\n      subtitleTracks,\n      sessionData: data.sessionData,\n      sessionKeys: data.sessionKeys,\n      firstLevel: this._firstLevel,\n      stats: data.stats,\n      audio: audioCodecFound,\n      video: videoCodecFound,\n      altAudio: !audioOnly && audioTracks.some((t2) => !!t2.url)\n    };\n    this.hls.trigger(Events.MANIFEST_PARSED, edata);\n    if (this.hls.config.autoStartLoad || this.hls.forceStartLoad) {\n      this.hls.startLoad(this.hls.config.startPosition);\n    }\n  }\n  get levels() {\n    if (this._levels.length === 0) {\n      return null;\n    }\n    return this._levels;\n  }\n  get level() {\n    return this.currentLevelIndex;\n  }\n  set level(newLevel) {\n    const levels = this._levels;\n    if (levels.length === 0) {\n      return;\n    }\n    if (newLevel < 0 || newLevel >= levels.length) {\n      const error = new Error(\"invalid level idx\");\n      const fatal = newLevel < 0;\n      this.hls.trigger(Events.ERROR, {\n        type: ErrorTypes.OTHER_ERROR,\n        details: ErrorDetails.LEVEL_SWITCH_ERROR,\n        level: newLevel,\n        fatal,\n        error,\n        reason: error.message\n      });\n      if (fatal) {\n        return;\n      }\n      newLevel = Math.min(newLevel, levels.length - 1);\n    }\n    const lastLevelIndex = this.currentLevelIndex;\n    const lastLevel = this.currentLevel;\n    const lastPathwayId = lastLevel ? lastLevel.attrs[\"PATHWAY-ID\"] : void 0;\n    const level = levels[newLevel];\n    const pathwayId = level.attrs[\"PATHWAY-ID\"];\n    this.currentLevelIndex = newLevel;\n    this.currentLevel = level;\n    if (lastLevelIndex === newLevel && level.details && lastLevel && lastPathwayId === pathwayId) {\n      return;\n    }\n    this.log(`Switching to level ${newLevel} (${level.height ? level.height + \"p \" : \"\"}${level.videoRange ? level.videoRange + \" \" : \"\"}${level.codecSet ? level.codecSet + \" \" : \"\"}@${level.bitrate})${pathwayId ? \" with Pathway \" + pathwayId : \"\"} from level ${lastLevelIndex}${lastPathwayId ? \" with Pathway \" + lastPathwayId : \"\"}`);\n    const levelSwitchingData = {\n      level: newLevel,\n      attrs: level.attrs,\n      details: level.details,\n      bitrate: level.bitrate,\n      averageBitrate: level.averageBitrate,\n      maxBitrate: level.maxBitrate,\n      realBitrate: level.realBitrate,\n      width: level.width,\n      height: level.height,\n      codecSet: level.codecSet,\n      audioCodec: level.audioCodec,\n      videoCodec: level.videoCodec,\n      audioGroups: level.audioGroups,\n      subtitleGroups: level.subtitleGroups,\n      loaded: level.loaded,\n      loadError: level.loadError,\n      fragmentError: level.fragmentError,\n      name: level.name,\n      id: level.id,\n      uri: level.uri,\n      url: level.url,\n      urlId: 0,\n      audioGroupIds: level.audioGroupIds,\n      textGroupIds: level.textGroupIds\n    };\n    this.hls.trigger(Events.LEVEL_SWITCHING, levelSwitchingData);\n    const levelDetails = level.details;\n    if (!levelDetails || levelDetails.live) {\n      const hlsUrlParameters = this.switchParams(level.uri, lastLevel == null ? void 0 : lastLevel.details, levelDetails);\n      this.loadPlaylist(hlsUrlParameters);\n    }\n  }\n  get manualLevel() {\n    return this.manualLevelIndex;\n  }\n  set manualLevel(newLevel) {\n    this.manualLevelIndex = newLevel;\n    if (this._startLevel === void 0) {\n      this._startLevel = newLevel;\n    }\n    if (newLevel !== -1) {\n      this.level = newLevel;\n    }\n  }\n  get firstLevel() {\n    return this._firstLevel;\n  }\n  set firstLevel(newLevel) {\n    this._firstLevel = newLevel;\n  }\n  get startLevel() {\n    if (this._startLevel === void 0) {\n      const configStartLevel = this.hls.config.startLevel;\n      if (configStartLevel !== void 0) {\n        return configStartLevel;\n      }\n      return this.hls.firstAutoLevel;\n    }\n    return this._startLevel;\n  }\n  set startLevel(newLevel) {\n    this._startLevel = newLevel;\n  }\n  onError(event, data) {\n    if (data.fatal || !data.context) {\n      return;\n    }\n    if (data.context.type === PlaylistContextType.LEVEL && data.context.level === this.level) {\n      this.checkRetry(data);\n    }\n  }\n  // reset errors on the successful load of a fragment\n  onFragBuffered(event, {\n    frag\n  }) {\n    if (frag !== void 0 && frag.type === PlaylistLevelType.MAIN) {\n      const el = frag.elementaryStreams;\n      if (!Object.keys(el).some((type) => !!el[type])) {\n        return;\n      }\n      const level = this._levels[frag.level];\n      if (level != null && level.loadError) {\n        this.log(`Resetting level error count of ${level.loadError} on frag buffered`);\n        level.loadError = 0;\n      }\n    }\n  }\n  onLevelLoaded(event, data) {\n    var _data$deliveryDirecti2;\n    const {\n      level,\n      details\n    } = data;\n    const curLevel = this._levels[level];\n    if (!curLevel) {\n      var _data$deliveryDirecti;\n      this.warn(`Invalid level index ${level}`);\n      if ((_data$deliveryDirecti = data.deliveryDirectives) != null && _data$deliveryDirecti.skip) {\n        details.deltaUpdateFailed = true;\n      }\n      return;\n    }\n    if (level === this.currentLevelIndex) {\n      if (curLevel.fragmentError === 0) {\n        curLevel.loadError = 0;\n      }\n      this.playlistLoaded(level, data, curLevel.details);\n    } else if ((_data$deliveryDirecti2 = data.deliveryDirectives) != null && _data$deliveryDirecti2.skip) {\n      details.deltaUpdateFailed = true;\n    }\n  }\n  loadPlaylist(hlsUrlParameters) {\n    super.loadPlaylist();\n    const currentLevelIndex = this.currentLevelIndex;\n    const currentLevel = this.currentLevel;\n    if (currentLevel && this.shouldLoadPlaylist(currentLevel)) {\n      let url = currentLevel.uri;\n      if (hlsUrlParameters) {\n        try {\n          url = hlsUrlParameters.addDirectives(url);\n        } catch (error) {\n          this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n        }\n      }\n      const pathwayId = currentLevel.attrs[\"PATHWAY-ID\"];\n      this.log(`Loading level index ${currentLevelIndex}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== void 0 ? \" at sn \" + hlsUrlParameters.msn + \" part \" + hlsUrlParameters.part : \"\"} with${pathwayId ? \" Pathway \" + pathwayId : \"\"} ${url}`);\n      this.clearTimer();\n      this.hls.trigger(Events.LEVEL_LOADING, {\n        url,\n        level: currentLevelIndex,\n        pathwayId: currentLevel.attrs[\"PATHWAY-ID\"],\n        id: 0,\n        // Deprecated Level urlId\n        deliveryDirectives: hlsUrlParameters || null\n      });\n    }\n  }\n  get nextLoadLevel() {\n    if (this.manualLevelIndex !== -1) {\n      return this.manualLevelIndex;\n    } else {\n      return this.hls.nextAutoLevel;\n    }\n  }\n  set nextLoadLevel(nextLevel) {\n    this.level = nextLevel;\n    if (this.manualLevelIndex === -1) {\n      this.hls.nextAutoLevel = nextLevel;\n    }\n  }\n  removeLevel(levelIndex) {\n    var _this$currentLevel;\n    const levels = this._levels.filter((level, index) => {\n      if (index !== levelIndex) {\n        return true;\n      }\n      if (this.steering) {\n        this.steering.removeLevel(level);\n      }\n      if (level === this.currentLevel) {\n        this.currentLevel = null;\n        this.currentLevelIndex = -1;\n        if (level.details) {\n          level.details.fragments.forEach((f) => f.level = -1);\n        }\n      }\n      return false;\n    });\n    reassignFragmentLevelIndexes(levels);\n    this._levels = levels;\n    if (this.currentLevelIndex > -1 && (_this$currentLevel = this.currentLevel) != null && _this$currentLevel.details) {\n      this.currentLevelIndex = this.currentLevel.details.fragments[0].level;\n    }\n    this.hls.trigger(Events.LEVELS_UPDATED, {\n      levels\n    });\n  }\n  onLevelsUpdated(event, {\n    levels\n  }) {\n    this._levels = levels;\n  }\n  checkMaxAutoUpdated() {\n    const {\n      autoLevelCapping,\n      maxAutoLevel,\n      maxHdcpLevel\n    } = this.hls;\n    if (this._maxAutoLevel !== maxAutoLevel) {\n      this._maxAutoLevel = maxAutoLevel;\n      this.hls.trigger(Events.MAX_AUTO_LEVEL_UPDATED, {\n        autoLevelCapping,\n        levels: this.levels,\n        maxAutoLevel,\n        minAutoLevel: this.hls.minAutoLevel,\n        maxHdcpLevel\n      });\n    }\n  }\n};\nfunction assignTrackIdsByGroup(tracks) {\n  const groups = {};\n  tracks.forEach((track) => {\n    const groupId = track.groupId || \"\";\n    track.id = groups[groupId] = groups[groupId] || 0;\n    groups[groupId]++;\n  });\n}\nvar KeyLoader = class {\n  constructor(config) {\n    this.config = void 0;\n    this.keyUriToKeyInfo = {};\n    this.emeController = null;\n    this.config = config;\n  }\n  abort(type) {\n    for (const uri in this.keyUriToKeyInfo) {\n      const loader = this.keyUriToKeyInfo[uri].loader;\n      if (loader) {\n        var _loader$context;\n        if (type && type !== ((_loader$context = loader.context) == null ? void 0 : _loader$context.frag.type)) {\n          return;\n        }\n        loader.abort();\n      }\n    }\n  }\n  detach() {\n    for (const uri in this.keyUriToKeyInfo) {\n      const keyInfo = this.keyUriToKeyInfo[uri];\n      if (keyInfo.mediaKeySessionContext || keyInfo.decryptdata.isCommonEncryption) {\n        delete this.keyUriToKeyInfo[uri];\n      }\n    }\n  }\n  destroy() {\n    this.detach();\n    for (const uri in this.keyUriToKeyInfo) {\n      const loader = this.keyUriToKeyInfo[uri].loader;\n      if (loader) {\n        loader.destroy();\n      }\n    }\n    this.keyUriToKeyInfo = {};\n  }\n  createKeyLoadError(frag, details = ErrorDetails.KEY_LOAD_ERROR, error, networkDetails, response) {\n    return new LoadError({\n      type: ErrorTypes.NETWORK_ERROR,\n      details,\n      fatal: false,\n      frag,\n      response,\n      error,\n      networkDetails\n    });\n  }\n  loadClear(loadingFrag, encryptedFragments) {\n    if (this.emeController && this.config.emeEnabled) {\n      const {\n        sn,\n        cc\n      } = loadingFrag;\n      for (let i2 = 0; i2 < encryptedFragments.length; i2++) {\n        const frag = encryptedFragments[i2];\n        if (cc <= frag.cc && (sn === \"initSegment\" || frag.sn === \"initSegment\" || sn < frag.sn)) {\n          this.emeController.selectKeySystemFormat(frag).then((keySystemFormat) => {\n            frag.setKeyFormat(keySystemFormat);\n          });\n          break;\n        }\n      }\n    }\n  }\n  load(frag) {\n    if (!frag.decryptdata && frag.encrypted && this.emeController && this.config.emeEnabled) {\n      return this.emeController.selectKeySystemFormat(frag).then((keySystemFormat) => {\n        return this.loadInternal(frag, keySystemFormat);\n      });\n    }\n    return this.loadInternal(frag);\n  }\n  loadInternal(frag, keySystemFormat) {\n    var _keyInfo, _keyInfo2;\n    if (keySystemFormat) {\n      frag.setKeyFormat(keySystemFormat);\n    }\n    const decryptdata = frag.decryptdata;\n    if (!decryptdata) {\n      const error = new Error(keySystemFormat ? `Expected frag.decryptdata to be defined after setting format ${keySystemFormat}` : \"Missing decryption data on fragment in onKeyLoading\");\n      return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, error));\n    }\n    const uri = decryptdata.uri;\n    if (!uri) {\n      return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Invalid key URI: \"${uri}\"`)));\n    }\n    let keyInfo = this.keyUriToKeyInfo[uri];\n    if ((_keyInfo = keyInfo) != null && _keyInfo.decryptdata.key) {\n      decryptdata.key = keyInfo.decryptdata.key;\n      return Promise.resolve({\n        frag,\n        keyInfo\n      });\n    }\n    if ((_keyInfo2 = keyInfo) != null && _keyInfo2.keyLoadPromise) {\n      var _keyInfo$mediaKeySess;\n      switch ((_keyInfo$mediaKeySess = keyInfo.mediaKeySessionContext) == null ? void 0 : _keyInfo$mediaKeySess.keyStatus) {\n        case void 0:\n        case \"status-pending\":\n        case \"usable\":\n        case \"usable-in-future\":\n          return keyInfo.keyLoadPromise.then((keyLoadedData) => {\n            decryptdata.key = keyLoadedData.keyInfo.decryptdata.key;\n            return {\n              frag,\n              keyInfo\n            };\n          });\n      }\n    }\n    keyInfo = this.keyUriToKeyInfo[uri] = {\n      decryptdata,\n      keyLoadPromise: null,\n      loader: null,\n      mediaKeySessionContext: null\n    };\n    switch (decryptdata.method) {\n      case \"ISO-23001-7\":\n      case \"SAMPLE-AES\":\n      case \"SAMPLE-AES-CENC\":\n      case \"SAMPLE-AES-CTR\":\n        if (decryptdata.keyFormat === \"identity\") {\n          return this.loadKeyHTTP(keyInfo, frag);\n        }\n        return this.loadKeyEME(keyInfo, frag);\n      case \"AES-128\":\n        return this.loadKeyHTTP(keyInfo, frag);\n      default:\n        return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Key supplied with unsupported METHOD: \"${decryptdata.method}\"`)));\n    }\n  }\n  loadKeyEME(keyInfo, frag) {\n    const keyLoadedData = {\n      frag,\n      keyInfo\n    };\n    if (this.emeController && this.config.emeEnabled) {\n      const keySessionContextPromise = this.emeController.loadKey(keyLoadedData);\n      if (keySessionContextPromise) {\n        return (keyInfo.keyLoadPromise = keySessionContextPromise.then((keySessionContext) => {\n          keyInfo.mediaKeySessionContext = keySessionContext;\n          return keyLoadedData;\n        })).catch((error) => {\n          keyInfo.keyLoadPromise = null;\n          throw error;\n        });\n      }\n    }\n    return Promise.resolve(keyLoadedData);\n  }\n  loadKeyHTTP(keyInfo, frag) {\n    const config = this.config;\n    const Loader = config.loader;\n    const keyLoader = new Loader(config);\n    frag.keyLoader = keyInfo.loader = keyLoader;\n    return keyInfo.keyLoadPromise = new Promise((resolve, reject) => {\n      const loaderContext = {\n        keyInfo,\n        frag,\n        responseType: \"arraybuffer\",\n        url: keyInfo.decryptdata.uri\n      };\n      const loadPolicy = config.keyLoadPolicy.default;\n      const loaderConfig = {\n        loadPolicy,\n        timeout: loadPolicy.maxLoadTimeMs,\n        maxRetry: 0,\n        retryDelay: 0,\n        maxRetryDelay: 0\n      };\n      const loaderCallbacks = {\n        onSuccess: (response, stats, context, networkDetails) => {\n          const {\n            frag: frag2,\n            keyInfo: keyInfo2,\n            url: uri\n          } = context;\n          if (!frag2.decryptdata || keyInfo2 !== this.keyUriToKeyInfo[uri]) {\n            return reject(this.createKeyLoadError(frag2, ErrorDetails.KEY_LOAD_ERROR, new Error(\"after key load, decryptdata unset or changed\"), networkDetails));\n          }\n          keyInfo2.decryptdata.key = frag2.decryptdata.key = new Uint8Array(response.data);\n          frag2.keyLoader = null;\n          keyInfo2.loader = null;\n          resolve({\n            frag: frag2,\n            keyInfo: keyInfo2\n          });\n        },\n        onError: (response, context, networkDetails, stats) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`HTTP Error ${response.code} loading key ${response.text}`), networkDetails, _objectSpread2({\n            url: loaderContext.url,\n            data: void 0\n          }, response)));\n        },\n        onTimeout: (stats, context, networkDetails) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_TIMEOUT, new Error(\"key loading timed out\"), networkDetails));\n        },\n        onAbort: (stats, context, networkDetails) => {\n          this.resetLoader(context);\n          reject(this.createKeyLoadError(frag, ErrorDetails.INTERNAL_ABORTED, new Error(\"key loading aborted\"), networkDetails));\n        }\n      };\n      keyLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n    });\n  }\n  resetLoader(context) {\n    const {\n      frag,\n      keyInfo,\n      url: uri\n    } = context;\n    const loader = keyInfo.loader;\n    if (frag.keyLoader === loader) {\n      frag.keyLoader = null;\n      keyInfo.loader = null;\n    }\n    delete this.keyUriToKeyInfo[uri];\n    if (loader) {\n      loader.destroy();\n    }\n  }\n};\nfunction getSourceBuffer() {\n  return self.SourceBuffer || self.WebKitSourceBuffer;\n}\nfunction isMSESupported() {\n  const mediaSource = getMediaSource();\n  if (!mediaSource) {\n    return false;\n  }\n  const sourceBuffer = getSourceBuffer();\n  return !sourceBuffer || sourceBuffer.prototype && typeof sourceBuffer.prototype.appendBuffer === \"function\" && typeof sourceBuffer.prototype.remove === \"function\";\n}\nfunction isSupported() {\n  if (!isMSESupported()) {\n    return false;\n  }\n  const mediaSource = getMediaSource();\n  return typeof (mediaSource == null ? void 0 : mediaSource.isTypeSupported) === \"function\" && ([\"avc1.42E01E,mp4a.40.2\", \"av01.0.01M.08\", \"vp09.00.50.08\"].some((codecsForVideoContainer) => mediaSource.isTypeSupported(mimeTypeForCodec(codecsForVideoContainer, \"video\"))) || [\"mp4a.40.2\", \"fLaC\"].some((codecForAudioContainer) => mediaSource.isTypeSupported(mimeTypeForCodec(codecForAudioContainer, \"audio\"))));\n}\nfunction changeTypeSupported() {\n  var _sourceBuffer$prototy;\n  const sourceBuffer = getSourceBuffer();\n  return typeof (sourceBuffer == null ? void 0 : (_sourceBuffer$prototy = sourceBuffer.prototype) == null ? void 0 : _sourceBuffer$prototy.changeType) === \"function\";\n}\nvar STALL_MINIMUM_DURATION_MS = 250;\nvar MAX_START_GAP_JUMP = 2;\nvar SKIP_BUFFER_HOLE_STEP_SECONDS = 0.1;\nvar SKIP_BUFFER_RANGE_START = 0.05;\nvar GapController = class {\n  constructor(config, media, fragmentTracker, hls) {\n    this.config = void 0;\n    this.media = null;\n    this.fragmentTracker = void 0;\n    this.hls = void 0;\n    this.nudgeRetry = 0;\n    this.stallReported = false;\n    this.stalled = null;\n    this.moved = false;\n    this.seeking = false;\n    this.config = config;\n    this.media = media;\n    this.fragmentTracker = fragmentTracker;\n    this.hls = hls;\n  }\n  destroy() {\n    this.media = null;\n    this.hls = this.fragmentTracker = null;\n  }\n  /**\n   * Checks if the playhead is stuck within a gap, and if so, attempts to free it.\n   * A gap is an unbuffered range between two buffered ranges (or the start and the first buffered range).\n   *\n   * @param lastCurrentTime - Previously read playhead position\n   */\n  poll(lastCurrentTime, activeFrag) {\n    const {\n      config,\n      media,\n      stalled\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const {\n      currentTime,\n      seeking\n    } = media;\n    const seeked = this.seeking && !seeking;\n    const beginSeek = !this.seeking && seeking;\n    this.seeking = seeking;\n    if (currentTime !== lastCurrentTime) {\n      this.moved = true;\n      if (!seeking) {\n        this.nudgeRetry = 0;\n      }\n      if (stalled !== null) {\n        if (this.stallReported) {\n          const _stalledDuration = self.performance.now() - stalled;\n          logger.warn(`playback not stuck anymore @${currentTime}, after ${Math.round(_stalledDuration)}ms`);\n          this.stallReported = false;\n        }\n        this.stalled = null;\n      }\n      return;\n    }\n    if (beginSeek || seeked) {\n      this.stalled = null;\n      return;\n    }\n    if (media.paused && !seeking || media.ended || media.playbackRate === 0 || !BufferHelper.getBuffered(media).length) {\n      this.nudgeRetry = 0;\n      return;\n    }\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const nextStart = bufferInfo.nextStart || 0;\n    if (seeking) {\n      const hasEnoughBuffer = bufferInfo.len > MAX_START_GAP_JUMP;\n      const noBufferGap = !nextStart || activeFrag && activeFrag.start <= currentTime || nextStart - currentTime > MAX_START_GAP_JUMP && !this.fragmentTracker.getPartialFragment(currentTime);\n      if (hasEnoughBuffer || noBufferGap) {\n        return;\n      }\n      this.moved = false;\n    }\n    if (!this.moved && this.stalled !== null) {\n      var _level$details;\n      const isBuffered = bufferInfo.len > 0;\n      if (!isBuffered && !nextStart) {\n        return;\n      }\n      const startJump = Math.max(nextStart, bufferInfo.start || 0) - currentTime;\n      const level = this.hls.levels ? this.hls.levels[this.hls.currentLevel] : null;\n      const isLive = level == null ? void 0 : (_level$details = level.details) == null ? void 0 : _level$details.live;\n      const maxStartGapJump = isLive ? level.details.targetduration * 2 : MAX_START_GAP_JUMP;\n      const partialOrGap = this.fragmentTracker.getPartialFragment(currentTime);\n      if (startJump > 0 && (startJump <= maxStartGapJump || partialOrGap)) {\n        if (!media.paused) {\n          this._trySkipBufferHole(partialOrGap);\n        }\n        return;\n      }\n    }\n    const tnow = self.performance.now();\n    if (stalled === null) {\n      this.stalled = tnow;\n      return;\n    }\n    const stalledDuration = tnow - stalled;\n    if (!seeking && stalledDuration >= STALL_MINIMUM_DURATION_MS) {\n      this._reportStall(bufferInfo);\n      if (!this.media) {\n        return;\n      }\n    }\n    const bufferedWithHoles = BufferHelper.bufferInfo(media, currentTime, config.maxBufferHole);\n    this._tryFixBufferStall(bufferedWithHoles, stalledDuration);\n  }\n  /**\n   * Detects and attempts to fix known buffer stalling issues.\n   * @param bufferInfo - The properties of the current buffer.\n   * @param stalledDurationMs - The amount of time Hls.js has been stalling for.\n   * @private\n   */\n  _tryFixBufferStall(bufferInfo, stalledDurationMs) {\n    const {\n      config,\n      fragmentTracker,\n      media\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    const partial = fragmentTracker.getPartialFragment(currentTime);\n    if (partial) {\n      const targetTime = this._trySkipBufferHole(partial);\n      if (targetTime || !this.media) {\n        return;\n      }\n    }\n    if ((bufferInfo.len > config.maxBufferHole || bufferInfo.nextStart && bufferInfo.nextStart - currentTime < config.maxBufferHole) && stalledDurationMs > config.highBufferWatchdogPeriod * 1e3) {\n      logger.warn(\"Trying to nudge playhead over buffer-hole\");\n      this.stalled = null;\n      this._tryNudgeBuffer();\n    }\n  }\n  /**\n   * Triggers a BUFFER_STALLED_ERROR event, but only once per stall period.\n   * @param bufferLen - The playhead distance from the end of the current buffer segment.\n   * @private\n   */\n  _reportStall(bufferInfo) {\n    const {\n      hls,\n      media,\n      stallReported\n    } = this;\n    if (!stallReported && media) {\n      this.stallReported = true;\n      const error = new Error(`Playback stalling at @${media.currentTime} due to low buffer (${JSON.stringify(bufferInfo)})`);\n      logger.warn(error.message);\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_STALLED_ERROR,\n        fatal: false,\n        error,\n        buffer: bufferInfo.len\n      });\n    }\n  }\n  /**\n   * Attempts to fix buffer stalls by jumping over known gaps caused by partial fragments\n   * @param partial - The partial fragment found at the current time (where playback is stalling).\n   * @private\n   */\n  _trySkipBufferHole(partial) {\n    const {\n      config,\n      hls,\n      media\n    } = this;\n    if (media === null) {\n      return 0;\n    }\n    const currentTime = media.currentTime;\n    const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n    const startTime = currentTime < bufferInfo.start ? bufferInfo.start : bufferInfo.nextStart;\n    if (startTime) {\n      const bufferStarved = bufferInfo.len <= config.maxBufferHole;\n      const waiting = bufferInfo.len > 0 && bufferInfo.len < 1 && media.readyState < 3;\n      const gapLength = startTime - currentTime;\n      if (gapLength > 0 && (bufferStarved || waiting)) {\n        if (gapLength > config.maxBufferHole) {\n          const {\n            fragmentTracker\n          } = this;\n          let startGap = false;\n          if (currentTime === 0) {\n            const startFrag = fragmentTracker.getAppendedFrag(0, PlaylistLevelType.MAIN);\n            if (startFrag && startTime < startFrag.end) {\n              startGap = true;\n            }\n          }\n          if (!startGap) {\n            const startProvisioned = partial || fragmentTracker.getAppendedFrag(currentTime, PlaylistLevelType.MAIN);\n            if (startProvisioned) {\n              let moreToLoad = false;\n              let pos = startProvisioned.end;\n              while (pos < startTime) {\n                const provisioned = fragmentTracker.getPartialFragment(pos);\n                if (provisioned) {\n                  pos += provisioned.duration;\n                } else {\n                  moreToLoad = true;\n                  break;\n                }\n              }\n              if (moreToLoad) {\n                return 0;\n              }\n            }\n          }\n        }\n        const targetTime = Math.max(startTime + SKIP_BUFFER_RANGE_START, currentTime + SKIP_BUFFER_HOLE_STEP_SECONDS);\n        logger.warn(`skipping hole, adjusting currentTime from ${currentTime} to ${targetTime}`);\n        this.moved = true;\n        this.stalled = null;\n        media.currentTime = targetTime;\n        if (partial && !partial.gap) {\n          const error = new Error(`fragment loaded with buffer holes, seeking from ${currentTime} to ${targetTime}`);\n          hls.trigger(Events.ERROR, {\n            type: ErrorTypes.MEDIA_ERROR,\n            details: ErrorDetails.BUFFER_SEEK_OVER_HOLE,\n            fatal: false,\n            error,\n            reason: error.message,\n            frag: partial\n          });\n        }\n        return targetTime;\n      }\n    }\n    return 0;\n  }\n  /**\n   * Attempts to fix buffer stalls by advancing the mediaElement's current time by a small amount.\n   * @private\n   */\n  _tryNudgeBuffer() {\n    const {\n      config,\n      hls,\n      media,\n      nudgeRetry\n    } = this;\n    if (media === null) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    this.nudgeRetry++;\n    if (nudgeRetry < config.nudgeMaxRetry) {\n      const targetTime = currentTime + (nudgeRetry + 1) * config.nudgeOffset;\n      const error = new Error(`Nudging 'currentTime' from ${currentTime} to ${targetTime}`);\n      logger.warn(error.message);\n      media.currentTime = targetTime;\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_NUDGE_ON_STALL,\n        error,\n        fatal: false\n      });\n    } else {\n      const error = new Error(`Playhead still not moving while enough data buffered @${currentTime} after ${config.nudgeMaxRetry} nudges`);\n      logger.error(error.message);\n      hls.trigger(Events.ERROR, {\n        type: ErrorTypes.MEDIA_ERROR,\n        details: ErrorDetails.BUFFER_STALLED_ERROR,\n        error,\n        fatal: true\n      });\n    }\n  }\n};\nvar TICK_INTERVAL = 100;\nvar StreamController = class extends BaseStreamController {\n  constructor(hls, fragmentTracker, keyLoader) {\n    super(hls, fragmentTracker, keyLoader, \"[stream-controller]\", PlaylistLevelType.MAIN);\n    this.audioCodecSwap = false;\n    this.gapController = null;\n    this.level = -1;\n    this._forceStartLoad = false;\n    this.altAudio = false;\n    this.audioOnly = false;\n    this.fragPlaying = null;\n    this.onvplaying = null;\n    this.onvseeked = null;\n    this.fragLastKbps = 0;\n    this.couldBacktrack = false;\n    this.backtrackFragment = null;\n    this.audioCodecSwitch = false;\n    this.videoBuffer = null;\n    this._registerListeners();\n  }\n  _registerListeners() {\n    const {\n      hls\n    } = this;\n    hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n    hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.on(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n    hls.on(Events.ERROR, this.onError, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.on(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n    hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  _unregisterListeners() {\n    const {\n      hls\n    } = this;\n    hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n    hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n    hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n    hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n    hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n    hls.off(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n    hls.off(Events.ERROR, this.onError, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n    hls.off(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n    hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n    hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n    hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n    hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n  }\n  onHandlerDestroying() {\n    this._unregisterListeners();\n    super.onHandlerDestroying();\n  }\n  startLoad(startPosition) {\n    if (this.levels) {\n      const {\n        lastCurrentTime,\n        hls\n      } = this;\n      this.stopLoad();\n      this.setInterval(TICK_INTERVAL);\n      this.level = -1;\n      if (!this.startFragRequested) {\n        let startLevel = hls.startLevel;\n        if (startLevel === -1) {\n          if (hls.config.testBandwidth && this.levels.length > 1) {\n            startLevel = 0;\n            this.bitrateTest = true;\n          } else {\n            startLevel = hls.firstAutoLevel;\n          }\n        }\n        hls.nextLoadLevel = startLevel;\n        this.level = hls.loadLevel;\n        this.loadedmetadata = false;\n      }\n      if (lastCurrentTime > 0 && startPosition === -1) {\n        this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n        startPosition = lastCurrentTime;\n      }\n      this.state = State.IDLE;\n      this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;\n      this.tick();\n    } else {\n      this._forceStartLoad = true;\n      this.state = State.STOPPED;\n    }\n  }\n  stopLoad() {\n    this._forceStartLoad = false;\n    super.stopLoad();\n  }\n  doTick() {\n    switch (this.state) {\n      case State.WAITING_LEVEL: {\n        const {\n          levels,\n          level\n        } = this;\n        const currentLevel = levels == null ? void 0 : levels[level];\n        const details = currentLevel == null ? void 0 : currentLevel.details;\n        if (details && (!details.live || this.levelLastLoaded === currentLevel)) {\n          if (this.waitForCdnTuneIn(details)) {\n            break;\n          }\n          this.state = State.IDLE;\n          break;\n        } else if (this.hls.nextLoadLevel !== this.level) {\n          this.state = State.IDLE;\n          break;\n        }\n        break;\n      }\n      case State.FRAG_LOADING_WAITING_RETRY:\n        {\n          var _this$media;\n          const now2 = self.performance.now();\n          const retryDate = this.retryDate;\n          if (!retryDate || now2 >= retryDate || (_this$media = this.media) != null && _this$media.seeking) {\n            const {\n              levels,\n              level\n            } = this;\n            const currentLevel = levels == null ? void 0 : levels[level];\n            this.resetStartWhenNotLoaded(currentLevel || null);\n            this.state = State.IDLE;\n          }\n        }\n        break;\n    }\n    if (this.state === State.IDLE) {\n      this.doTickIdle();\n    }\n    this.onTickEnd();\n  }\n  onTickEnd() {\n    super.onTickEnd();\n    this.checkBuffer();\n    this.checkFragmentChanged();\n  }\n  doTickIdle() {\n    const {\n      hls,\n      levelLastLoaded,\n      levels,\n      media\n    } = this;\n    if (levelLastLoaded === null || !media && (this.startFragRequested || !hls.config.startFragPrefetch)) {\n      return;\n    }\n    if (this.altAudio && this.audioOnly) {\n      return;\n    }\n    const level = this.buffering ? hls.nextLoadLevel : hls.loadLevel;\n    if (!(levels != null && levels[level])) {\n      return;\n    }\n    const levelInfo = levels[level];\n    const bufferInfo = this.getMainFwdBufferInfo();\n    if (bufferInfo === null) {\n      return;\n    }\n    const lastDetails = this.getLevelDetails();\n    if (lastDetails && this._streamEnded(bufferInfo, lastDetails)) {\n      const data = {};\n      if (this.altAudio) {\n        data.type = \"video\";\n      }\n      this.hls.trigger(Events.BUFFER_EOS, data);\n      this.state = State.ENDED;\n      return;\n    }\n    if (!this.buffering) {\n      return;\n    }\n    if (hls.loadLevel !== level && hls.manualLevel === -1) {\n      this.log(`Adapting to level ${level} from level ${this.level}`);\n    }\n    this.level = hls.nextLoadLevel = level;\n    const levelDetails = levelInfo.details;\n    if (!levelDetails || this.state === State.WAITING_LEVEL || levelDetails.live && this.levelLastLoaded !== levelInfo) {\n      this.level = level;\n      this.state = State.WAITING_LEVEL;\n      return;\n    }\n    const bufferLen = bufferInfo.len;\n    const maxBufLen = this.getMaxBufferLength(levelInfo.maxBitrate);\n    if (bufferLen >= maxBufLen) {\n      return;\n    }\n    if (this.backtrackFragment && this.backtrackFragment.start > bufferInfo.end) {\n      this.backtrackFragment = null;\n    }\n    const targetBufferTime = this.backtrackFragment ? this.backtrackFragment.start : bufferInfo.end;\n    let frag = this.getNextFragment(targetBufferTime, levelDetails);\n    if (this.couldBacktrack && !this.fragPrevious && frag && frag.sn !== \"initSegment\" && this.fragmentTracker.getState(frag) !== FragmentState.OK) {\n      var _this$backtrackFragme;\n      const backtrackSn = ((_this$backtrackFragme = this.backtrackFragment) != null ? _this$backtrackFragme : frag).sn;\n      const fragIdx = backtrackSn - levelDetails.startSN;\n      const backtrackFrag = levelDetails.fragments[fragIdx - 1];\n      if (backtrackFrag && frag.cc === backtrackFrag.cc) {\n        frag = backtrackFrag;\n        this.fragmentTracker.removeFragment(backtrackFrag);\n      }\n    } else if (this.backtrackFragment && bufferInfo.len) {\n      this.backtrackFragment = null;\n    }\n    if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n      const gapStart = frag.gap;\n      if (!gapStart) {\n        const type = this.audioOnly && !this.altAudio ? ElementaryStreamTypes.AUDIO : ElementaryStreamTypes.VIDEO;\n        const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n        if (mediaBuffer) {\n          this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n        }\n      }\n      frag = this.getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n    }\n    if (!frag) {\n      return;\n    }\n    if (frag.initSegment && !frag.initSegment.data && !this.bitrateTest) {\n      frag = frag.initSegment;\n    }\n    this.loadFragment(frag, levelInfo, targetBufferTime);\n  }\n  loadFragment(frag, level, targetBufferTime) {\n    const fragState = this.fragmentTracker.getState(frag);\n    this.fragCurrent = frag;\n    if (fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n      if (frag.sn === \"initSegment\") {\n        this._loadInitSegment(frag, level);\n      } else if (this.bitrateTest) {\n        this.log(`Fragment ${frag.sn} of level ${frag.level} is being downloaded to test bitrate and will not be buffered`);\n        this._loadBitrateTestFrag(frag, level);\n      } else {\n        this.startFragRequested = true;\n        super.loadFragment(frag, level, targetBufferTime);\n      }\n    } else {\n      this.clearTrackerIfNeeded(frag);\n    }\n  }\n  getBufferedFrag(position) {\n    return this.fragmentTracker.getBufferedFrag(position, PlaylistLevelType.MAIN);\n  }\n  followingBufferedFrag(frag) {\n    if (frag) {\n      return this.getBufferedFrag(frag.end + 0.5);\n    }\n    return null;\n  }\n  /*\n    on immediate level switch :\n     - pause playback if playing\n     - cancel any pending load request\n     - and trigger a buffer flush\n  */\n  immediateLevelSwitch() {\n    this.abortCurrentFrag();\n    this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n  }\n  /**\n   * try to switch ASAP without breaking video playback:\n   * in order to ensure smooth but quick level switching,\n   * we need to find the next flushable buffer range\n   * we should take into account new segment fetch time\n   */\n  nextLevelSwitch() {\n    const {\n      levels,\n      media\n    } = this;\n    if (media != null && media.readyState) {\n      let fetchdelay;\n      const fragPlayingCurrent = this.getAppendedFrag(media.currentTime);\n      if (fragPlayingCurrent && fragPlayingCurrent.start > 1) {\n        this.flushMainBuffer(0, fragPlayingCurrent.start - 1);\n      }\n      const levelDetails = this.getLevelDetails();\n      if (levelDetails != null && levelDetails.live) {\n        const bufferInfo = this.getMainFwdBufferInfo();\n        if (!bufferInfo || bufferInfo.len < levelDetails.targetduration * 2) {\n          return;\n        }\n      }\n      if (!media.paused && levels) {\n        const nextLevelId = this.hls.nextLoadLevel;\n        const nextLevel = levels[nextLevelId];\n        const fragLastKbps = this.fragLastKbps;\n        if (fragLastKbps && this.fragCurrent) {\n          fetchdelay = this.fragCurrent.duration * nextLevel.maxBitrate / (1e3 * fragLastKbps) + 1;\n        } else {\n          fetchdelay = 0;\n        }\n      } else {\n        fetchdelay = 0;\n      }\n      const bufferedFrag = this.getBufferedFrag(media.currentTime + fetchdelay);\n      if (bufferedFrag) {\n        const nextBufferedFrag = this.followingBufferedFrag(bufferedFrag);\n        if (nextBufferedFrag) {\n          this.abortCurrentFrag();\n          const maxStart = nextBufferedFrag.maxStartPTS ? nextBufferedFrag.maxStartPTS : nextBufferedFrag.start;\n          const fragDuration = nextBufferedFrag.duration;\n          const startPts = Math.max(bufferedFrag.end, maxStart + Math.min(Math.max(fragDuration - this.config.maxFragLookUpTolerance, fragDuration * (this.couldBacktrack ? 0.5 : 0.125)), fragDuration * (this.couldBacktrack ? 0.75 : 0.25)));\n          this.flushMainBuffer(startPts, Number.POSITIVE_INFINITY);\n        }\n      }\n    }\n  }\n  abortCurrentFrag() {\n    const fragCurrent = this.fragCurrent;\n    this.fragCurrent = null;\n    this.backtrackFragment = null;\n    if (fragCurrent) {\n      fragCurrent.abortRequests();\n      this.fragmentTracker.removeFragment(fragCurrent);\n    }\n    switch (this.state) {\n      case State.KEY_LOADING:\n      case State.FRAG_LOADING:\n      case State.FRAG_LOADING_WAITING_RETRY:\n      case State.PARSING:\n      case State.PARSED:\n        this.state = State.IDLE;\n        break;\n    }\n    this.nextLoadPosition = this.getLoadPosition();\n  }\n  flushMainBuffer(startOffset, endOffset) {\n    super.flushMainBuffer(startOffset, endOffset, this.altAudio ? \"video\" : null);\n  }\n  onMediaAttached(event, data) {\n    super.onMediaAttached(event, data);\n    const media = data.media;\n    this.onvplaying = this.onMediaPlaying.bind(this);\n    this.onvseeked = this.onMediaSeeked.bind(this);\n    media.addEventListener(\"playing\", this.onvplaying);\n    media.addEventListener(\"seeked\", this.onvseeked);\n    this.gapController = new GapController(this.config, media, this.fragmentTracker, this.hls);\n  }\n  onMediaDetaching() {\n    const {\n      media\n    } = this;\n    if (media && this.onvplaying && this.onvseeked) {\n      media.removeEventListener(\"playing\", this.onvplaying);\n      media.removeEventListener(\"seeked\", this.onvseeked);\n      this.onvplaying = this.onvseeked = null;\n      this.videoBuffer = null;\n    }\n    this.fragPlaying = null;\n    if (this.gapController) {\n      this.gapController.destroy();\n      this.gapController = null;\n    }\n    super.onMediaDetaching();\n  }\n  onMediaPlaying() {\n    this.tick();\n  }\n  onMediaSeeked() {\n    const media = this.media;\n    const currentTime = media ? media.currentTime : null;\n    if (isFiniteNumber(currentTime)) {\n      this.log(`Media seeked to ${currentTime.toFixed(3)}`);\n    }\n    const bufferInfo = this.getMainFwdBufferInfo();\n    if (bufferInfo === null || bufferInfo.len === 0) {\n      this.warn(`Main forward buffer length on \"seeked\" event ${bufferInfo ? bufferInfo.len : \"empty\"})`);\n      return;\n    }\n    this.tick();\n  }\n  onManifestLoading() {\n    this.log(\"Trigger BUFFER_RESET\");\n    this.hls.trigger(Events.BUFFER_RESET, void 0);\n    this.fragmentTracker.removeAllFragments();\n    this.couldBacktrack = false;\n    this.startPosition = this.lastCurrentTime = this.fragLastKbps = 0;\n    this.levels = this.fragPlaying = this.backtrackFragment = this.levelLastLoaded = null;\n    this.altAudio = this.audioOnly = this.startFragRequested = false;\n  }\n  onManifestParsed(event, data) {\n    let aac = false;\n    let heaac = false;\n    data.levels.forEach((level) => {\n      const codec = level.audioCodec;\n      if (codec) {\n        aac = aac || codec.indexOf(\"mp4a.40.2\") !== -1;\n        heaac = heaac || codec.indexOf(\"mp4a.40.5\") !== -1;\n      }\n    });\n    this.audioCodecSwitch = aac && heaac && !changeTypeSupported();\n    if (this.audioCodecSwitch) {\n      this.log(\"Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC\");\n    }\n    this.levels = data.levels;\n    this.startFragRequested = false;\n  }\n  onLevelLoading(event, data) {\n    const {\n      levels\n    } = this;\n    if (!levels || this.state !== State.IDLE) {\n      return;\n    }\n    const level = levels[data.level];\n    if (!level.details || level.details.live && this.levelLastLoaded !== level || this.waitForCdnTuneIn(level.details)) {\n      this.state = State.WAITING_LEVEL;\n    }\n  }\n  onLevelLoaded(event, data) {\n    var _curLevel$details;\n    const {\n      levels\n    } = this;\n    const newLevelId = data.level;\n    const newDetails = data.details;\n    const duration = newDetails.totalduration;\n    if (!levels) {\n      this.warn(`Levels were reset while loading level ${newLevelId}`);\n      return;\n    }\n    this.log(`Level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : \"\"}, cc [${newDetails.startCC}, ${newDetails.endCC}] duration:${duration}`);\n    const curLevel = levels[newLevelId];\n    const fragCurrent = this.fragCurrent;\n    if (fragCurrent && (this.state === State.FRAG_LOADING || this.state === State.FRAG_LOADING_WAITING_RETRY)) {\n      if (fragCurrent.level !== data.level && fragCurrent.loader) {\n        this.abortCurrentFrag();\n      }\n    }\n    let sliding = 0;\n    if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {\n      var _this$levelLastLoaded;\n      this.checkLiveUpdate(newDetails);\n      if (newDetails.deltaUpdateFailed) {\n        return;\n      }\n      sliding = this.alignPlaylists(newDetails, curLevel.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n    }\n    curLevel.details = newDetails;\n    this.levelLastLoaded = curLevel;\n    this.hls.trigger(Events.LEVEL_UPDATED, {\n      details: newDetails,\n      level: newLevelId\n    });\n    if (this.state === State.WAITING_LEVEL) {\n      if (this.waitForCdnTuneIn(newDetails)) {\n        return;\n      }\n      this.state = State.IDLE;\n    }\n    if (!this.startFragRequested) {\n      this.setStartPosition(newDetails, sliding);\n    } else if (newDetails.live) {\n      this.synchronizeToLiveEdge(newDetails);\n    }\n    this.tick();\n  }\n  _handleFragmentLoadProgress(data) {\n    var _frag$initSegment;\n    const {\n      frag,\n      part,\n      payload\n    } = data;\n    const {\n      levels\n    } = this;\n    if (!levels) {\n      this.warn(`Levels were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n      return;\n    }\n    const currentLevel = levels[frag.level];\n    const details = currentLevel.details;\n    if (!details) {\n      this.warn(`Dropping fragment ${frag.sn} of level ${frag.level} after level details were reset`);\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    const videoCodec = currentLevel.videoCodec;\n    const accurateTimeOffset = details.PTSKnown || !details.live;\n    const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n    const audioCodec = this._getAudioCodec(currentLevel);\n    const transmuxer = this.transmuxer = this.transmuxer || new TransmuxerInterface(this.hls, PlaylistLevelType.MAIN, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n    const partIndex = part ? part.index : -1;\n    const partial = partIndex !== -1;\n    const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n    const initPTS = this.initPTS[frag.cc];\n    transmuxer.push(payload, initSegmentData, audioCodec, videoCodec, frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n  }\n  onAudioTrackSwitching(event, data) {\n    const fromAltAudio = this.altAudio;\n    const altAudio = !!data.url;\n    if (!altAudio) {\n      if (this.mediaBuffer !== this.media) {\n        this.log(\"Switching on main audio, use media.buffered to schedule main fragment loading\");\n        this.mediaBuffer = this.media;\n        const fragCurrent = this.fragCurrent;\n        if (fragCurrent) {\n          this.log(\"Switching to main audio track, cancel main fragment load\");\n          fragCurrent.abortRequests();\n          this.fragmentTracker.removeFragment(fragCurrent);\n        }\n        this.resetTransmuxer();\n        this.resetLoadingState();\n      } else if (this.audioOnly) {\n        this.resetTransmuxer();\n      }\n      const hls = this.hls;\n      if (fromAltAudio) {\n        hls.trigger(Events.BUFFER_FLUSHING, {\n          startOffset: 0,\n          endOffset: Number.POSITIVE_INFINITY,\n          type: null\n        });\n        this.fragmentTracker.removeAllFragments();\n      }\n      hls.trigger(Events.AUDIO_TRACK_SWITCHED, data);\n    }\n  }\n  onAudioTrackSwitched(event, data) {\n    const trackId = data.id;\n    const altAudio = !!this.hls.audioTracks[trackId].url;\n    if (altAudio) {\n      const videoBuffer = this.videoBuffer;\n      if (videoBuffer && this.mediaBuffer !== videoBuffer) {\n        this.log(\"Switching on alternate audio, use video.buffered to schedule main fragment loading\");\n        this.mediaBuffer = videoBuffer;\n      }\n    }\n    this.altAudio = altAudio;\n    this.tick();\n  }\n  onBufferCreated(event, data) {\n    const tracks = data.tracks;\n    let mediaTrack;\n    let name;\n    let alternate = false;\n    for (const type in tracks) {\n      const track = tracks[type];\n      if (track.id === \"main\") {\n        name = type;\n        mediaTrack = track;\n        if (type === \"video\") {\n          const videoTrack = tracks[type];\n          if (videoTrack) {\n            this.videoBuffer = videoTrack.buffer;\n          }\n        }\n      } else {\n        alternate = true;\n      }\n    }\n    if (alternate && mediaTrack) {\n      this.log(`Alternate track found, use ${name}.buffered to schedule main fragment loading`);\n      this.mediaBuffer = mediaTrack.buffer;\n    } else {\n      this.mediaBuffer = this.media;\n    }\n  }\n  onFragBuffered(event, data) {\n    const {\n      frag,\n      part\n    } = data;\n    if (frag && frag.type !== PlaylistLevelType.MAIN) {\n      return;\n    }\n    if (this.fragContextChanged(frag)) {\n      this.warn(`Fragment ${frag.sn}${part ? \" p: \" + part.index : \"\"} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}`);\n      if (this.state === State.PARSED) {\n        this.state = State.IDLE;\n      }\n      return;\n    }\n    const stats = part ? part.stats : frag.stats;\n    this.fragLastKbps = Math.round(8 * stats.total / (stats.buffering.end - stats.loading.first));\n    if (frag.sn !== \"initSegment\") {\n      this.fragPrevious = frag;\n    }\n    this.fragBufferedComplete(frag, part);\n  }\n  onError(event, data) {\n    var _data$context;\n    if (data.fatal) {\n      this.state = State.ERROR;\n      return;\n    }\n    switch (data.details) {\n      case ErrorDetails.FRAG_GAP:\n      case ErrorDetails.FRAG_PARSING_ERROR:\n      case ErrorDetails.FRAG_DECRYPT_ERROR:\n      case ErrorDetails.FRAG_LOAD_ERROR:\n      case ErrorDetails.FRAG_LOAD_TIMEOUT:\n      case ErrorDetails.KEY_LOAD_ERROR:\n      case ErrorDetails.KEY_LOAD_TIMEOUT:\n        this.onFragmentOrKeyLoadError(PlaylistLevelType.MAIN, data);\n        break;\n      case ErrorDetails.LEVEL_LOAD_ERROR:\n      case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n      case ErrorDetails.LEVEL_PARSING_ERROR:\n        if (!data.levelRetry && this.state === State.WAITING_LEVEL && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.LEVEL) {\n          this.state = State.IDLE;\n        }\n        break;\n      case ErrorDetails.BUFFER_APPEND_ERROR:\n      case ErrorDetails.BUFFER_FULL_ERROR:\n        if (!data.parent || data.parent !== \"main\") {\n          return;\n        }\n        if (data.details === ErrorDetails.BUFFER_APPEND_ERROR) {\n          this.resetLoadingState();\n          return;\n        }\n        if (this.reduceLengthAndFlushBuffer(data)) {\n          this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n        }\n        break;\n      case ErrorDetails.INTERNAL_EXCEPTION:\n        this.recoverWorkerError(data);\n        break;\n    }\n  }\n  // Checks the health of the buffer and attempts to resolve playback stalls.\n  checkBuffer() {\n    const {\n      media,\n      gapController\n    } = this;\n    if (!media || !gapController || !media.readyState) {\n      return;\n    }\n    if (this.loadedmetadata || !BufferHelper.getBuffered(media).length) {\n      const activeFrag = this.state !== State.IDLE ? this.fragCurrent : null;\n      gapController.poll(this.lastCurrentTime, activeFrag);\n    }\n    this.lastCurrentTime = media.currentTime;\n  }\n  onFragLoadEmergencyAborted() {\n    this.state = State.IDLE;\n    if (!this.loadedmetadata) {\n      this.startFragRequested = false;\n      this.nextLoadPosition = this.startPosition;\n    }\n    this.tickImmediate();\n  }\n  onBufferFlushed(event, {\n    type\n  }) {\n    if (type !== ElementaryStreamTypes.AUDIO || this.audioOnly && !this.altAudio) {\n      const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n      this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n      this.tick();\n    }\n  }\n  onLevelsUpdated(event, data) {\n    if (this.level > -1 && this.fragCurrent) {\n      this.level = this.fragCurrent.level;\n    }\n    this.levels = data.levels;\n  }\n  swapAudioCodec() {\n    this.audioCodecSwap = !this.audioCodecSwap;\n  }\n  /**\n   * Seeks to the set startPosition if not equal to the mediaElement's current time.\n   */\n  seekToStartPos() {\n    const {\n      media\n    } = this;\n    if (!media) {\n      return;\n    }\n    const currentTime = media.currentTime;\n    let startPosition = this.startPosition;\n    if (startPosition >= 0 && currentTime < startPosition) {\n      if (media.seeking) {\n        this.log(`could not seek to ${startPosition}, already seeking at ${currentTime}`);\n        return;\n      }\n      const buffered = BufferHelper.getBuffered(media);\n      const bufferStart = buffered.length ? buffered.start(0) : 0;\n      const delta = bufferStart - startPosition;\n      if (delta > 0 && (delta < this.config.maxBufferHole || delta < this.config.maxFragLookUpTolerance)) {\n        this.log(`adjusting start position by ${delta} to match buffer start`);\n        startPosition += delta;\n        this.startPosition = startPosition;\n      }\n      this.log(`seek to target start position ${startPosition} from current time ${currentTime}`);\n      media.currentTime = startPosition;\n    }\n  }\n  _getAudioCodec(currentLevel) {\n    let audioCodec = this.config.defaultAudioCodec || currentLevel.audioCodec;\n    if (this.audioCodecSwap && audioCodec) {\n      this.log(\"Swapping audio codec\");\n      if (audioCodec.indexOf(\"mp4a.40.5\") !== -1) {\n        audioCodec = \"mp4a.40.2\";\n      } else {\n        audioCodec = \"mp4a.40.5\";\n      }\n    }\n    return audioCodec;\n  }\n  _loadBitrateTestFrag(frag, level) {\n    frag.bitrateTest = true;\n    this._doFragLoad(frag, level).then((data) => {\n      const {\n        hls\n      } = this;\n      if (!data || this.fragContextChanged(frag)) {\n        return;\n      }\n      level.fragmentError = 0;\n      this.state = State.IDLE;\n      this.startFragRequested = false;\n      this.bitrateTest = false;\n      const stats = frag.stats;\n      stats.parsing.start = stats.parsing.end = stats.buffering.start = stats.buffering.end = self.performance.now();\n      hls.trigger(Events.FRAG_LOADED, data);\n      frag.bitrateTest = false;\n    });\n  }\n  _handleTransmuxComplete(transmuxResult) {\n    var _id3$samples;\n    const id = \"main\";\n    const {\n      hls\n    } = this;\n    const {\n      remuxResult,\n      chunkMeta\n    } = transmuxResult;\n    const context = this.getCurrentContext(chunkMeta);\n    if (!context) {\n      this.resetWhenMissingContext(chunkMeta);\n      return;\n    }\n    const {\n      frag,\n      part,\n      level\n    } = context;\n    const {\n      video,\n      text,\n      id3,\n      initSegment\n    } = remuxResult;\n    const {\n      details\n    } = level;\n    const audio = this.altAudio ? void 0 : remuxResult.audio;\n    if (this.fragContextChanged(frag)) {\n      this.fragmentTracker.removeFragment(frag);\n      return;\n    }\n    this.state = State.PARSING;\n    if (initSegment) {\n      if (initSegment != null && initSegment.tracks) {\n        const mapFragment = frag.initSegment || frag;\n        this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n        hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n          frag: mapFragment,\n          id,\n          tracks: initSegment.tracks\n        });\n      }\n      const initPTS = initSegment.initPTS;\n      const timescale = initSegment.timescale;\n      if (isFiniteNumber(initPTS)) {\n        this.initPTS[frag.cc] = {\n          baseTime: initPTS,\n          timescale\n        };\n        hls.trigger(Events.INIT_PTS_FOUND, {\n          frag,\n          id,\n          initPTS,\n          timescale\n        });\n      }\n    }\n    if (video && details && frag.sn !== \"initSegment\") {\n      const prevFrag = details.fragments[frag.sn - 1 - details.startSN];\n      const isFirstFragment = frag.sn === details.startSN;\n      const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;\n      if (remuxResult.independent !== false) {\n        const {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        } = video;\n        if (part) {\n          part.elementaryStreams[video.type] = {\n            startPTS,\n            endPTS,\n            startDTS,\n            endDTS\n          };\n        } else {\n          if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {\n            this.couldBacktrack = true;\n          }\n          if (video.dropped && video.independent) {\n            const bufferInfo = this.getMainFwdBufferInfo();\n            const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;\n            const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;\n            if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {\n              this.backtrack(frag);\n              return;\n            } else if (isFirstInDiscontinuity) {\n              frag.gap = true;\n            }\n            frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);\n          } else if (isFirstFragment && startPTS > MAX_START_GAP_JUMP) {\n            frag.gap = true;\n          }\n        }\n        frag.setElementaryStreamInfo(video.type, startPTS, endPTS, startDTS, endDTS);\n        if (this.backtrackFragment) {\n          this.backtrackFragment = frag;\n        }\n        this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);\n      } else if (isFirstFragment || isFirstInDiscontinuity) {\n        frag.gap = true;\n      } else {\n        this.backtrack(frag);\n        return;\n      }\n    }\n    if (audio) {\n      const {\n        startPTS,\n        endPTS,\n        startDTS,\n        endDTS\n      } = audio;\n      if (part) {\n        part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n          startPTS,\n          endPTS,\n          startDTS,\n          endDTS\n        };\n      }\n      frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n      this.bufferFragmentData(audio, frag, part, chunkMeta);\n    }\n    if (details && id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n      const emittedID3 = {\n        id,\n        frag,\n        details,\n        samples: id3.samples\n      };\n      hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n    }\n    if (details && text) {\n      const emittedText = {\n        id,\n        frag,\n        details,\n        samples: text.samples\n      };\n      hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n    }\n  }\n  _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n    if (this.state !== State.PARSING) {\n      return;\n    }\n    this.audioOnly = !!tracks.audio && !tracks.video;\n    if (this.altAudio && !this.audioOnly) {\n      delete tracks.audio;\n    }\n    const {\n      audio,\n      video,\n      audiovideo\n    } = tracks;\n    if (audio) {\n      let audioCodec = currentLevel.audioCodec;\n      const ua2 = navigator.userAgent.toLowerCase();\n      if (this.audioCodecSwitch) {\n        if (audioCodec) {\n          if (audioCodec.indexOf(\"mp4a.40.5\") !== -1) {\n            audioCodec = \"mp4a.40.2\";\n          } else {\n            audioCodec = \"mp4a.40.5\";\n          }\n        }\n        const audioMetadata = audio.metadata;\n        if (audioMetadata && \"channelCount\" in audioMetadata && (audioMetadata.channelCount || 1) !== 1 && ua2.indexOf(\"firefox\") === -1) {\n          audioCodec = \"mp4a.40.5\";\n        }\n      }\n      if (audioCodec && audioCodec.indexOf(\"mp4a.40.5\") !== -1 && ua2.indexOf(\"android\") !== -1 && audio.container !== \"audio/mpeg\") {\n        audioCodec = \"mp4a.40.2\";\n        this.log(`Android: force audio codec to ${audioCodec}`);\n      }\n      if (currentLevel.audioCodec && currentLevel.audioCodec !== audioCodec) {\n        this.log(`Swapping manifest audio codec \"${currentLevel.audioCodec}\" for \"${audioCodec}\"`);\n      }\n      audio.levelCodec = audioCodec;\n      audio.id = \"main\";\n      this.log(`Init audio buffer, container:${audio.container}, codecs[selected/level/parsed]=[${audioCodec || \"\"}/${currentLevel.audioCodec || \"\"}/${audio.codec}]`);\n    }\n    if (video) {\n      video.levelCodec = currentLevel.videoCodec;\n      video.id = \"main\";\n      this.log(`Init video buffer, container:${video.container}, codecs[level/parsed]=[${currentLevel.videoCodec || \"\"}/${video.codec}]`);\n    }\n    if (audiovideo) {\n      this.log(`Init audiovideo buffer, container:${audiovideo.container}, codecs[level/parsed]=[${currentLevel.codecs}/${audiovideo.codec}]`);\n    }\n    this.hls.trigger(Events.BUFFER_CODECS, tracks);\n    Object.keys(tracks).forEach((trackName) => {\n      const track = tracks[trackName];\n      const initSegment = track.initSegment;\n      if (initSegment != null && initSegment.byteLength) {\n        this.hls.trigger(Events.BUFFER_APPENDING, {\n          type: trackName,\n          data: initSegment,\n          frag,\n          part: null,\n          chunkMeta,\n          parent: frag.type\n        });\n      }\n    });\n    this.tickImmediate();\n  }\n  getMainFwdBufferInfo() {\n    return this.getFwdBufferInfo(this.mediaBuffer ? this.mediaBuffer : this.media, PlaylistLevelType.MAIN);\n  }\n  backtrack(frag) {\n    this.couldBacktrack = true;\n    this.backtrackFragment = frag;\n    this.resetTransmuxer();\n    this.flushBufferGap(frag);\n    this.fragmentTracker.removeFragment(frag);\n    this.fragPrevious = null;\n    this.nextLoadPosition = frag.start;\n    this.state = State.IDLE;\n  }\n  checkFragmentChanged() {\n    const video = this.media;\n    let fragPlayingCurrent = null;\n    if (video && video.readyState > 1 && video.seeking === false) {\n      const currentTime = video.currentTime;\n      if (BufferHelper.isBuffered(video, currentTime)) {\n        fragPlayingCurrent = this.getAppendedFrag(currentTime);\n      } else if (BufferHelper.isBuffered(video, currentTime + 0.1)) {\n        fragPlayingCurrent = this.getAppendedFrag(currentTime + 0.1);\n      }\n      if (fragPlayingCurrent) {\n        this.backtrackFragment = null;\n        const fragPlaying = this.fragPlaying;\n        const fragCurrentLevel = fragPlayingCurrent.level;\n        if (!fragPlaying || fragPlayingCurrent.sn !== fragPlaying.sn || fragPlaying.level !== fragCurrentLevel) {\n          this.fragPlaying = fragPlayingCurrent;\n          this.hls.trigger(Events.FRAG_CHANGED, {\n            frag: fragPlayingCurrent\n          });\n          if (!fragPlaying || fragPlaying.level !== fragCurrentLevel) {\n            this.hls.trigger(Events.LEVEL_SWITCHED, {\n              level: fragCurrentLevel\n            });\n          }\n        }\n      }\n    }\n  }\n  get nextLevel() {\n    const frag = this.nextBufferedFrag;\n    if (frag) {\n      return frag.level;\n    }\n    return -1;\n  }\n  get currentFrag() {\n    const media = this.media;\n    if (media) {\n      return this.fragPlaying || this.getAppendedFrag(media.currentTime);\n    }\n    return null;\n  }\n  get currentProgramDateTime() {\n    const media = this.media;\n    if (media) {\n      const currentTime = media.currentTime;\n      const frag = this.currentFrag;\n      if (frag && isFiniteNumber(currentTime) && isFiniteNumber(frag.programDateTime)) {\n        const epocMs = frag.programDateTime + (currentTime - frag.start) * 1e3;\n        return new Date(epocMs);\n      }\n    }\n    return null;\n  }\n  get currentLevel() {\n    const frag = this.currentFrag;\n    if (frag) {\n      return frag.level;\n    }\n    return -1;\n  }\n  get nextBufferedFrag() {\n    const frag = this.currentFrag;\n    if (frag) {\n      return this.followingBufferedFrag(frag);\n    }\n    return null;\n  }\n  get forceStartLoad() {\n    return this._forceStartLoad;\n  }\n};\nvar Hls = class _Hls {\n  /**\n   * Get the video-dev/hls.js package version.\n   */\n  static get version() {\n    return \"1.5.20\";\n  }\n  /**\n   * Check if the required MediaSource Extensions are available.\n   */\n  static isMSESupported() {\n    return isMSESupported();\n  }\n  /**\n   * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.\n   */\n  static isSupported() {\n    return isSupported();\n  }\n  /**\n   * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).\n   */\n  static getMediaSource() {\n    return getMediaSource();\n  }\n  static get Events() {\n    return Events;\n  }\n  static get ErrorTypes() {\n    return ErrorTypes;\n  }\n  static get ErrorDetails() {\n    return ErrorDetails;\n  }\n  /**\n   * Get the default configuration applied to new instances.\n   */\n  static get DefaultConfig() {\n    if (!_Hls.defaultConfig) {\n      return hlsDefaultConfig;\n    }\n    return _Hls.defaultConfig;\n  }\n  /**\n   * Replace the default configuration applied to new instances.\n   */\n  static set DefaultConfig(defaultConfig) {\n    _Hls.defaultConfig = defaultConfig;\n  }\n  /**\n   * Creates an instance of an HLS client that can attach to exactly one `HTMLMediaElement`.\n   * @param userConfig - Configuration options applied over `Hls.DefaultConfig`\n   */\n  constructor(userConfig = {}) {\n    this.config = void 0;\n    this.userConfig = void 0;\n    this.coreComponents = void 0;\n    this.networkControllers = void 0;\n    this.started = false;\n    this._emitter = new EventEmitter();\n    this._autoLevelCapping = -1;\n    this._maxHdcpLevel = null;\n    this.abrController = void 0;\n    this.bufferController = void 0;\n    this.capLevelController = void 0;\n    this.latencyController = void 0;\n    this.levelController = void 0;\n    this.streamController = void 0;\n    this.audioTrackController = void 0;\n    this.subtitleTrackController = void 0;\n    this.emeController = void 0;\n    this.cmcdController = void 0;\n    this._media = null;\n    this.url = null;\n    this.triggeringException = void 0;\n    enableLogs(userConfig.debug || false, \"Hls instance\");\n    const config = this.config = mergeConfig(_Hls.DefaultConfig, userConfig);\n    this.userConfig = userConfig;\n    if (config.progressive) {\n      enableStreamingMode(config);\n    }\n    const {\n      abrController: ConfigAbrController,\n      bufferController: ConfigBufferController,\n      capLevelController: ConfigCapLevelController,\n      errorController: ConfigErrorController,\n      fpsController: ConfigFpsController\n    } = config;\n    const errorController = new ConfigErrorController(this);\n    const abrController = this.abrController = new ConfigAbrController(this);\n    const bufferController = this.bufferController = new ConfigBufferController(this);\n    const capLevelController = this.capLevelController = new ConfigCapLevelController(this);\n    const fpsController = new ConfigFpsController(this);\n    const playListLoader = new PlaylistLoader(this);\n    const id3TrackController = new ID3TrackController(this);\n    const ConfigContentSteeringController = config.contentSteeringController;\n    const contentSteering = ConfigContentSteeringController ? new ConfigContentSteeringController(this) : null;\n    const levelController = this.levelController = new LevelController(this, contentSteering);\n    const fragmentTracker = new FragmentTracker(this);\n    const keyLoader = new KeyLoader(this.config);\n    const streamController = this.streamController = new StreamController(this, fragmentTracker, keyLoader);\n    capLevelController.setStreamController(streamController);\n    fpsController.setStreamController(streamController);\n    const networkControllers = [playListLoader, levelController, streamController];\n    if (contentSteering) {\n      networkControllers.splice(1, 0, contentSteering);\n    }\n    this.networkControllers = networkControllers;\n    const coreComponents = [abrController, bufferController, capLevelController, fpsController, id3TrackController, fragmentTracker];\n    this.audioTrackController = this.createController(config.audioTrackController, networkControllers);\n    const AudioStreamControllerClass = config.audioStreamController;\n    if (AudioStreamControllerClass) {\n      networkControllers.push(new AudioStreamControllerClass(this, fragmentTracker, keyLoader));\n    }\n    this.subtitleTrackController = this.createController(config.subtitleTrackController, networkControllers);\n    const SubtitleStreamControllerClass = config.subtitleStreamController;\n    if (SubtitleStreamControllerClass) {\n      networkControllers.push(new SubtitleStreamControllerClass(this, fragmentTracker, keyLoader));\n    }\n    this.createController(config.timelineController, coreComponents);\n    keyLoader.emeController = this.emeController = this.createController(config.emeController, coreComponents);\n    this.cmcdController = this.createController(config.cmcdController, coreComponents);\n    this.latencyController = this.createController(LatencyController, coreComponents);\n    this.coreComponents = coreComponents;\n    networkControllers.push(errorController);\n    const onErrorOut = errorController.onErrorOut;\n    if (typeof onErrorOut === \"function\") {\n      this.on(Events.ERROR, onErrorOut, errorController);\n    }\n  }\n  createController(ControllerClass, components) {\n    if (ControllerClass) {\n      const controllerInstance = new ControllerClass(this);\n      if (components) {\n        components.push(controllerInstance);\n      }\n      return controllerInstance;\n    }\n    return null;\n  }\n  // Delegate the EventEmitter through the public API of Hls.js\n  on(event, listener, context = this) {\n    this._emitter.on(event, listener, context);\n  }\n  once(event, listener, context = this) {\n    this._emitter.once(event, listener, context);\n  }\n  removeAllListeners(event) {\n    this._emitter.removeAllListeners(event);\n  }\n  off(event, listener, context = this, once) {\n    this._emitter.off(event, listener, context, once);\n  }\n  listeners(event) {\n    return this._emitter.listeners(event);\n  }\n  emit(event, name, eventObject) {\n    return this._emitter.emit(event, name, eventObject);\n  }\n  trigger(event, eventObject) {\n    if (this.config.debug) {\n      return this.emit(event, event, eventObject);\n    } else {\n      try {\n        return this.emit(event, event, eventObject);\n      } catch (error) {\n        logger.error(\"An internal error happened while handling event \" + event + '. Error message: \"' + error.message + '\". Here is a stacktrace:', error);\n        if (!this.triggeringException) {\n          this.triggeringException = true;\n          const fatal = event === Events.ERROR;\n          this.trigger(Events.ERROR, {\n            type: ErrorTypes.OTHER_ERROR,\n            details: ErrorDetails.INTERNAL_EXCEPTION,\n            fatal,\n            event,\n            error\n          });\n          this.triggeringException = false;\n        }\n      }\n    }\n    return false;\n  }\n  listenerCount(event) {\n    return this._emitter.listenerCount(event);\n  }\n  /**\n   * Dispose of the instance\n   */\n  destroy() {\n    logger.log(\"destroy\");\n    this.trigger(Events.DESTROYING, void 0);\n    this.detachMedia();\n    this.removeAllListeners();\n    this._autoLevelCapping = -1;\n    this.url = null;\n    this.networkControllers.forEach((component) => component.destroy());\n    this.networkControllers.length = 0;\n    this.coreComponents.forEach((component) => component.destroy());\n    this.coreComponents.length = 0;\n    const config = this.config;\n    config.xhrSetup = config.fetchSetup = void 0;\n    this.userConfig = null;\n  }\n  /**\n   * Attaches Hls.js to a media element\n   */\n  attachMedia(media) {\n    logger.log(\"attachMedia\");\n    this._media = media;\n    this.trigger(Events.MEDIA_ATTACHING, {\n      media\n    });\n  }\n  /**\n   * Detach Hls.js from the media\n   */\n  detachMedia() {\n    logger.log(\"detachMedia\");\n    this.trigger(Events.MEDIA_DETACHING, void 0);\n    this._media = null;\n  }\n  /**\n   * Set the source URL. Can be relative or absolute.\n   */\n  loadSource(url) {\n    this.stopLoad();\n    const media = this.media;\n    const loadedSource = this.url;\n    const loadingSource = this.url = urlToolkitExports.buildAbsoluteURL(self.location.href, url, {\n      alwaysNormalize: true\n    });\n    this._autoLevelCapping = -1;\n    this._maxHdcpLevel = null;\n    logger.log(`loadSource:${loadingSource}`);\n    if (media && loadedSource && (loadedSource !== loadingSource || this.bufferController.hasSourceTypes())) {\n      this.detachMedia();\n      this.attachMedia(media);\n    }\n    this.trigger(Events.MANIFEST_LOADING, {\n      url\n    });\n  }\n  /**\n   * Start loading data from the stream source.\n   * Depending on default config, client starts loading automatically when a source is set.\n   *\n   * @param startPosition - Set the start position to stream from.\n   * Defaults to -1 (None: starts from earliest point)\n   */\n  startLoad(startPosition = -1) {\n    logger.log(`startLoad(${startPosition})`);\n    this.started = true;\n    this.resumeBuffering();\n    for (let i2 = 0; i2 < this.networkControllers.length; i2++) {\n      this.networkControllers[i2].startLoad(startPosition);\n      if (!this.started || !this.networkControllers) {\n        break;\n      }\n    }\n  }\n  /**\n   * Stop loading of any stream data.\n   */\n  stopLoad() {\n    logger.log(\"stopLoad\");\n    this.started = false;\n    for (let i2 = 0; i2 < this.networkControllers.length; i2++) {\n      this.networkControllers[i2].stopLoad();\n      if (this.started || !this.networkControllers) {\n        break;\n      }\n    }\n  }\n  /**\n   * Resumes stream controller segment loading after `pauseBuffering` has been called.\n   */\n  resumeBuffering() {\n    logger.log(`resume buffering`);\n    this.networkControllers.forEach((controller) => {\n      if (controller.resumeBuffering) {\n        controller.resumeBuffering();\n      }\n    });\n  }\n  /**\n   * Prevents stream controller from loading new segments until `resumeBuffering` is called.\n   * This allows for media buffering to be paused without interupting playlist loading.\n   */\n  pauseBuffering() {\n    logger.log(`pause buffering`);\n    this.networkControllers.forEach((controller) => {\n      if (controller.pauseBuffering) {\n        controller.pauseBuffering();\n      }\n    });\n  }\n  /**\n   * Swap through possible audio codecs in the stream (for example to switch from stereo to 5.1)\n   */\n  swapAudioCodec() {\n    logger.log(\"swapAudioCodec\");\n    this.streamController.swapAudioCodec();\n  }\n  /**\n   * When the media-element fails, this allows to detach and then re-attach it\n   * as one call (convenience method).\n   *\n   * Automatic recovery of media-errors by this process is configurable.\n   */\n  recoverMediaError() {\n    logger.log(\"recoverMediaError\");\n    const media = this._media;\n    this.detachMedia();\n    if (media) {\n      this.attachMedia(media);\n    }\n  }\n  removeLevel(levelIndex) {\n    this.levelController.removeLevel(levelIndex);\n  }\n  /**\n   * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH\n   */\n  get levels() {\n    const levels = this.levelController.levels;\n    return levels ? levels : [];\n  }\n  /**\n   * Index of quality level (variant) currently played\n   */\n  get currentLevel() {\n    return this.streamController.currentLevel;\n  }\n  /**\n   * Set quality level index immediately. This will flush the current buffer to replace the quality asap. That means playback will interrupt at least shortly to re-buffer and re-sync eventually. Set to -1 for automatic level selection.\n   */\n  set currentLevel(newLevel) {\n    logger.log(`set currentLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n    this.streamController.immediateLevelSwitch();\n  }\n  /**\n   * Index of next quality level loaded as scheduled by stream controller.\n   */\n  get nextLevel() {\n    return this.streamController.nextLevel;\n  }\n  /**\n   * Set quality level index for next loaded data.\n   * This will switch the video quality asap, without interrupting playback.\n   * May abort current loading of data, and flush parts of buffer (outside currently played fragment region).\n   * @param newLevel - Pass -1 for automatic level selection\n   */\n  set nextLevel(newLevel) {\n    logger.log(`set nextLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n    this.streamController.nextLevelSwitch();\n  }\n  /**\n   * Return the quality level of the currently or last (of none is loaded currently) segment\n   */\n  get loadLevel() {\n    return this.levelController.level;\n  }\n  /**\n   * Set quality level index for next loaded data in a conservative way.\n   * This will switch the quality without flushing, but interrupt current loading.\n   * Thus the moment when the quality switch will appear in effect will only be after the already existing buffer.\n   * @param newLevel - Pass -1 for automatic level selection\n   */\n  set loadLevel(newLevel) {\n    logger.log(`set loadLevel:${newLevel}`);\n    this.levelController.manualLevel = newLevel;\n  }\n  /**\n   * get next quality level loaded\n   */\n  get nextLoadLevel() {\n    return this.levelController.nextLoadLevel;\n  }\n  /**\n   * Set quality level of next loaded segment in a fully \"non-destructive\" way.\n   * Same as `loadLevel` but will wait for next switch (until current loading is done).\n   */\n  set nextLoadLevel(level) {\n    this.levelController.nextLoadLevel = level;\n  }\n  /**\n   * Return \"first level\": like a default level, if not set,\n   * falls back to index of first level referenced in manifest\n   */\n  get firstLevel() {\n    return Math.max(this.levelController.firstLevel, this.minAutoLevel);\n  }\n  /**\n   * Sets \"first-level\", see getter.\n   */\n  set firstLevel(newLevel) {\n    logger.log(`set firstLevel:${newLevel}`);\n    this.levelController.firstLevel = newLevel;\n  }\n  /**\n   * Return the desired start level for the first fragment that will be loaded.\n   * The default value of -1 indicates automatic start level selection.\n   * Setting hls.nextAutoLevel without setting a startLevel will result in\n   * the nextAutoLevel value being used for one fragment load.\n   */\n  get startLevel() {\n    const startLevel = this.levelController.startLevel;\n    if (startLevel === -1 && this.abrController.forcedAutoLevel > -1) {\n      return this.abrController.forcedAutoLevel;\n    }\n    return startLevel;\n  }\n  /**\n   * set  start level (level of first fragment that will be played back)\n   * if not overrided by user, first level appearing in manifest will be used as start level\n   * if -1 : automatic start level selection, playback will start from level matching download bandwidth\n   * (determined from download of first segment)\n   */\n  set startLevel(newLevel) {\n    logger.log(`set startLevel:${newLevel}`);\n    if (newLevel !== -1) {\n      newLevel = Math.max(newLevel, this.minAutoLevel);\n    }\n    this.levelController.startLevel = newLevel;\n  }\n  /**\n   * Whether level capping is enabled.\n   * Default value is set via `config.capLevelToPlayerSize`.\n   */\n  get capLevelToPlayerSize() {\n    return this.config.capLevelToPlayerSize;\n  }\n  /**\n   * Enables or disables level capping. If disabled after previously enabled, `nextLevelSwitch` will be immediately called.\n   */\n  set capLevelToPlayerSize(shouldStartCapping) {\n    const newCapLevelToPlayerSize = !!shouldStartCapping;\n    if (newCapLevelToPlayerSize !== this.config.capLevelToPlayerSize) {\n      if (newCapLevelToPlayerSize) {\n        this.capLevelController.startCapping();\n      } else {\n        this.capLevelController.stopCapping();\n        this.autoLevelCapping = -1;\n        this.streamController.nextLevelSwitch();\n      }\n      this.config.capLevelToPlayerSize = newCapLevelToPlayerSize;\n    }\n  }\n  /**\n   * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n   */\n  get autoLevelCapping() {\n    return this._autoLevelCapping;\n  }\n  /**\n   * Returns the current bandwidth estimate in bits per second, when available. Otherwise, `NaN` is returned.\n   */\n  get bandwidthEstimate() {\n    const {\n      bwEstimator\n    } = this.abrController;\n    if (!bwEstimator) {\n      return NaN;\n    }\n    return bwEstimator.getEstimate();\n  }\n  set bandwidthEstimate(abrEwmaDefaultEstimate) {\n    this.abrController.resetEstimator(abrEwmaDefaultEstimate);\n  }\n  /**\n   * get time to first byte estimate\n   * @type {number}\n   */\n  get ttfbEstimate() {\n    const {\n      bwEstimator\n    } = this.abrController;\n    if (!bwEstimator) {\n      return NaN;\n    }\n    return bwEstimator.getEstimateTTFB();\n  }\n  /**\n   * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n   */\n  set autoLevelCapping(newLevel) {\n    if (this._autoLevelCapping !== newLevel) {\n      logger.log(`set autoLevelCapping:${newLevel}`);\n      this._autoLevelCapping = newLevel;\n      this.levelController.checkMaxAutoUpdated();\n    }\n  }\n  get maxHdcpLevel() {\n    return this._maxHdcpLevel;\n  }\n  set maxHdcpLevel(value) {\n    if (isHdcpLevel(value) && this._maxHdcpLevel !== value) {\n      this._maxHdcpLevel = value;\n      this.levelController.checkMaxAutoUpdated();\n    }\n  }\n  /**\n   * True when automatic level selection enabled\n   */\n  get autoLevelEnabled() {\n    return this.levelController.manualLevel === -1;\n  }\n  /**\n   * Level set manually (if any)\n   */\n  get manualLevel() {\n    return this.levelController.manualLevel;\n  }\n  /**\n   * min level selectable in auto mode according to config.minAutoBitrate\n   */\n  get minAutoLevel() {\n    const {\n      levels,\n      config: {\n        minAutoBitrate\n      }\n    } = this;\n    if (!levels) return 0;\n    const len = levels.length;\n    for (let i2 = 0; i2 < len; i2++) {\n      if (levels[i2].maxBitrate >= minAutoBitrate) {\n        return i2;\n      }\n    }\n    return 0;\n  }\n  /**\n   * max level selectable in auto mode according to autoLevelCapping\n   */\n  get maxAutoLevel() {\n    const {\n      levels,\n      autoLevelCapping,\n      maxHdcpLevel\n    } = this;\n    let maxAutoLevel;\n    if (autoLevelCapping === -1 && levels != null && levels.length) {\n      maxAutoLevel = levels.length - 1;\n    } else {\n      maxAutoLevel = autoLevelCapping;\n    }\n    if (maxHdcpLevel) {\n      for (let i2 = maxAutoLevel; i2--; ) {\n        const hdcpLevel = levels[i2].attrs[\"HDCP-LEVEL\"];\n        if (hdcpLevel && hdcpLevel <= maxHdcpLevel) {\n          return i2;\n        }\n      }\n    }\n    return maxAutoLevel;\n  }\n  get firstAutoLevel() {\n    return this.abrController.firstAutoLevel;\n  }\n  /**\n   * next automatically selected quality level\n   */\n  get nextAutoLevel() {\n    return this.abrController.nextAutoLevel;\n  }\n  /**\n   * this setter is used to force next auto level.\n   * this is useful to force a switch down in auto mode:\n   * in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)\n   * forced value is valid for one fragment. upon successful frag loading at forced level,\n   * this value will be resetted to -1 by ABR controller.\n   */\n  set nextAutoLevel(nextLevel) {\n    this.abrController.nextAutoLevel = nextLevel;\n  }\n  /**\n   * get the datetime value relative to media.currentTime for the active level Program Date Time if present\n   */\n  get playingDate() {\n    return this.streamController.currentProgramDateTime;\n  }\n  get mainForwardBufferInfo() {\n    return this.streamController.getMainFwdBufferInfo();\n  }\n  /**\n   * Find and select the best matching audio track, making a level switch when a Group change is necessary.\n   * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.\n   */\n  setAudioOption(audioOption) {\n    var _this$audioTrackContr;\n    return (_this$audioTrackContr = this.audioTrackController) == null ? void 0 : _this$audioTrackContr.setAudioOption(audioOption);\n  }\n  /**\n   * Find and select the best matching subtitle track, making a level switch when a Group change is necessary.\n   * Updates `hls.config.subtitlePreference`. Returns the selected track, or null when no matching track is found.\n   */\n  setSubtitleOption(subtitleOption) {\n    var _this$subtitleTrackCo;\n    (_this$subtitleTrackCo = this.subtitleTrackController) == null ? void 0 : _this$subtitleTrackCo.setSubtitleOption(subtitleOption);\n    return null;\n  }\n  /**\n   * Get the complete list of audio tracks across all media groups\n   */\n  get allAudioTracks() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.allAudioTracks : [];\n  }\n  /**\n   * Get the list of selectable audio tracks\n   */\n  get audioTracks() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTracks : [];\n  }\n  /**\n   * index of the selected audio track (index in audio track lists)\n   */\n  get audioTrack() {\n    const audioTrackController = this.audioTrackController;\n    return audioTrackController ? audioTrackController.audioTrack : -1;\n  }\n  /**\n   * selects an audio track, based on its index in audio track lists\n   */\n  set audioTrack(audioTrackId) {\n    const audioTrackController = this.audioTrackController;\n    if (audioTrackController) {\n      audioTrackController.audioTrack = audioTrackId;\n    }\n  }\n  /**\n   * get the complete list of subtitle tracks across all media groups\n   */\n  get allSubtitleTracks() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.allSubtitleTracks : [];\n  }\n  /**\n   * get alternate subtitle tracks list from playlist\n   */\n  get subtitleTracks() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTracks : [];\n  }\n  /**\n   * index of the selected subtitle track (index in subtitle track lists)\n   */\n  get subtitleTrack() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleTrack : -1;\n  }\n  get media() {\n    return this._media;\n  }\n  /**\n   * select an subtitle track, based on its index in subtitle track lists\n   */\n  set subtitleTrack(subtitleTrackId) {\n    const subtitleTrackController = this.subtitleTrackController;\n    if (subtitleTrackController) {\n      subtitleTrackController.subtitleTrack = subtitleTrackId;\n    }\n  }\n  /**\n   * Whether subtitle display is enabled or not\n   */\n  get subtitleDisplay() {\n    const subtitleTrackController = this.subtitleTrackController;\n    return subtitleTrackController ? subtitleTrackController.subtitleDisplay : false;\n  }\n  /**\n   * Enable/disable subtitle display rendering\n   */\n  set subtitleDisplay(value) {\n    const subtitleTrackController = this.subtitleTrackController;\n    if (subtitleTrackController) {\n      subtitleTrackController.subtitleDisplay = value;\n    }\n  }\n  /**\n   * get mode for Low-Latency HLS loading\n   */\n  get lowLatencyMode() {\n    return this.config.lowLatencyMode;\n  }\n  /**\n   * Enable/disable Low-Latency HLS part playlist and segment loading, and start live streams at playlist PART-HOLD-BACK rather than HOLD-BACK.\n   */\n  set lowLatencyMode(mode) {\n    this.config.lowLatencyMode = mode;\n  }\n  /**\n   * Position (in seconds) of live sync point (ie edge of live position minus safety delay defined by ```hls.config.liveSyncDuration```)\n   * @returns null prior to loading live Playlist\n   */\n  get liveSyncPosition() {\n    return this.latencyController.liveSyncPosition;\n  }\n  /**\n   * Estimated position (in seconds) of live edge (ie edge of live playlist plus time sync playlist advanced)\n   * @returns 0 before first playlist is loaded\n   */\n  get latency() {\n    return this.latencyController.latency;\n  }\n  /**\n   * maximum distance from the edge before the player seeks forward to ```hls.liveSyncPosition```\n   * configured using ```liveMaxLatencyDurationCount``` (multiple of target duration) or ```liveMaxLatencyDuration```\n   * @returns 0 before first playlist is loaded\n   */\n  get maxLatency() {\n    return this.latencyController.maxLatency;\n  }\n  /**\n   * target distance from the edge as calculated by the latency controller\n   */\n  get targetLatency() {\n    return this.latencyController.targetLatency;\n  }\n  /**\n   * the rate at which the edge of the current live playlist is advancing or 1 if there is none\n   */\n  get drift() {\n    return this.latencyController.drift;\n  }\n  /**\n   * set to true when startLoad is called before MANIFEST_PARSED event\n   */\n  get forceStartLoad() {\n    return this.streamController.forceStartLoad;\n  }\n};\nHls.defaultConfig = void 0;\n\n// node_modules/.pnpm/@mux+playback-core@0.25.2/node_modules/@mux/playback-core/dist/index.mjs\nvar T = Hls;\nvar v = class v2 extends Error {\n  constructor(n2, a2 = v2.MEDIA_ERR_CUSTOM, r10, o) {\n    var s;\n    super(n2);\n    this.name = \"MediaError\", this.code = a2, this.context = o, this.fatal = r10 != null ? r10 : a2 >= v2.MEDIA_ERR_NETWORK && a2 <= v2.MEDIA_ERR_ENCRYPTED, this.message || (this.message = (s = v2.defaultMessages[this.code]) != null ? s : \"\");\n  }\n};\nv.MEDIA_ERR_ABORTED = 1, v.MEDIA_ERR_NETWORK = 2, v.MEDIA_ERR_DECODE = 3, v.MEDIA_ERR_SRC_NOT_SUPPORTED = 4, v.MEDIA_ERR_ENCRYPTED = 5, v.MEDIA_ERR_CUSTOM = 100, v.defaultMessages = { 1: \"You aborted the media playback\", 2: \"A network error caused the media download to fail.\", 3: \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\", 4: \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\", 5: \"The media is encrypted and there are no keys to decrypt it.\" };\nvar x = v;\nvar we = (e) => e == null;\nvar N = (e, t2) => we(t2) ? false : e in t2;\nvar w = { ANY: \"any\", MUTED: \"muted\" };\nvar g = { ON_DEMAND: \"on-demand\", LIVE: \"live\", UNKNOWN: \"unknown\" };\nvar _ = { MSE: \"mse\", NATIVE: \"native\" };\nvar h = { HEADER: \"header\", QUERY: \"query\", NONE: \"none\" };\nvar dt2 = Object.values(h);\nvar b2 = { M3U8: \"application/vnd.apple.mpegurl\", MP4: \"video/mp4\" };\nvar D = { HLS: b2.M3U8 };\nvar lt2 = Object.keys(D);\nvar pt2 = [...Object.values(b2), \"hls\", \"HLS\"];\nvar y = (e, t2, n2, a2, r10 = e) => {\n  r10.addEventListener(t2, n2, a2), e.addEventListener(\"teardown\", () => {\n    r10.removeEventListener(t2, n2);\n  }, { once: true });\n};\nfunction Q(e, t2, n2) {\n  t2 && n2 > t2 && (n2 = t2);\n  for (let a2 = 0; a2 < e.length; a2++) if (e.start(a2) <= n2 && e.end(a2) >= n2) return true;\n  return false;\n}\nvar Z2 = (e) => {\n  let t2 = e.indexOf(\"?\");\n  if (t2 < 0) return [e];\n  let n2 = e.slice(0, t2), a2 = e.slice(t2);\n  return [n2, a2];\n};\nvar C2 = (e) => {\n  let t2 = e.type;\n  if (t2) {\n    let a2 = t2.toUpperCase();\n    return N(a2, D) ? D[a2] : t2;\n  }\n  let { src: n2 } = e;\n  return n2 ? De2(n2) : \"\";\n};\nvar O2 = (e) => e === \"VOD\" ? g.ON_DEMAND : g.LIVE;\nvar V = (e) => e === \"EVENT\" ? Number.POSITIVE_INFINITY : e === \"VOD\" ? Number.NaN : 0;\nvar De2 = (e) => {\n  let t2 = \"\";\n  try {\n    t2 = new URL(e).pathname;\n  } catch (e2) {\n    console.error(\"invalid url\");\n  }\n  let n2 = t2.lastIndexOf(\".\");\n  if (n2 < 0) return \"\";\n  let r10 = t2.slice(n2 + 1).toUpperCase();\n  return N(r10, b2) ? b2[r10] : \"\";\n};\nvar Ie2 = Object.values(w);\nvar ee2 = (e) => typeof e == \"boolean\" || typeof e == \"string\" && Ie2.includes(e);\nvar te2 = (e, t2, n2) => {\n  let { autoplay: a2 } = e, r10 = false, o = false, s = ee2(a2) ? a2 : !!a2, i2 = () => {\n    r10 || y(t2, \"playing\", () => {\n      r10 = true;\n    }, { once: true });\n  };\n  if (i2(), y(t2, \"loadstart\", () => {\n    r10 = false, i2(), U2(t2, s);\n  }, { once: true }), y(t2, \"loadstart\", () => {\n    n2 || (e.streamType && e.streamType !== g.UNKNOWN ? o = e.streamType === g.LIVE : o = !Number.isFinite(t2.duration)), U2(t2, s);\n  }, { once: true }), n2 && n2.once(T.Events.LEVEL_LOADED, (u3, d4) => {\n    var c4;\n    e.streamType && e.streamType !== g.UNKNOWN ? o = e.streamType === g.LIVE : o = (c4 = d4.details.live) != null ? c4 : false;\n  }), !s) {\n    let u3 = () => {\n      !o || Number.isFinite(e.startTime) || (n2 != null && n2.liveSyncPosition ? t2.currentTime = n2.liveSyncPosition : Number.isFinite(t2.seekable.end(0)) && (t2.currentTime = t2.seekable.end(0)));\n    };\n    n2 && y(t2, \"play\", () => {\n      t2.preload === \"metadata\" ? n2.once(T.Events.LEVEL_UPDATED, u3) : u3();\n    }, { once: true });\n  }\n  return (u3) => {\n    r10 || (s = ee2(u3) ? u3 : !!u3, U2(t2, s));\n  };\n};\nvar U2 = (e, t2) => {\n  if (!t2) return;\n  let n2 = e.muted, a2 = () => e.muted = n2;\n  switch (t2) {\n    case w.ANY:\n      e.play().catch(() => {\n        e.muted = true, e.play().catch(a2);\n      });\n      break;\n    case w.MUTED:\n      e.muted = true, e.play().catch(a2);\n      break;\n    default:\n      e.play().catch(() => {\n      });\n      break;\n  }\n};\nvar ne2 = ({ preload: e, src: t2 }, n2, a2) => {\n  let r10 = (c4) => {\n    c4 != null && [\"\", \"none\", \"metadata\", \"auto\"].includes(c4) ? n2.setAttribute(\"preload\", c4) : n2.removeAttribute(\"preload\");\n  };\n  if (!a2) return r10(e), r10;\n  let o = false, s = false, i2 = a2.config.maxBufferLength, l = a2.config.maxBufferSize, u3 = (c4) => {\n    r10(c4);\n    let p3 = c4 != null ? c4 : n2.preload;\n    s || p3 === \"none\" || (p3 === \"metadata\" ? (a2.config.maxBufferLength = 1, a2.config.maxBufferSize = 1) : (a2.config.maxBufferLength = i2, a2.config.maxBufferSize = l), d4());\n  }, d4 = () => {\n    !o && t2 && (o = true, a2.loadSource(t2));\n  };\n  return y(n2, \"play\", () => {\n    s = true, a2.config.maxBufferLength = i2, a2.config.maxBufferSize = l, d4();\n  }, { once: true }), u3(e), u3;\n};\nfunction re(e, t2) {\n  var l;\n  if (!(\"videoTracks\" in e)) return;\n  let n2 = /* @__PURE__ */ new WeakMap();\n  t2.on(T.Events.MANIFEST_PARSED, function(u3, d4) {\n    i2();\n    let c4 = e.addVideoTrack(\"main\");\n    c4.selected = true;\n    for (let [p3, f] of d4.levels.entries()) {\n      let m3 = c4.addRendition(f.url[0], f.width, f.height, f.videoCodec, f.bitrate);\n      n2.set(f, `${p3}`), m3.id = `${p3}`;\n    }\n  }), t2.on(T.Events.AUDIO_TRACKS_UPDATED, function(u3, d4) {\n    s();\n    for (let c4 of d4.audioTracks) {\n      let p3 = c4.default ? \"main\" : \"alternative\", f = e.addAudioTrack(p3, c4.name, c4.lang);\n      f.id = `${c4.id}`, c4.default && (f.enabled = true);\n    }\n  }), e.audioTracks.addEventListener(\"change\", () => {\n    var c4;\n    let u3 = +((c4 = [...e.audioTracks].find((p3) => p3.enabled)) == null ? void 0 : c4.id), d4 = t2.audioTracks.map((p3) => p3.id);\n    u3 != t2.audioTrack && d4.includes(u3) && (t2.audioTrack = u3);\n  }), t2.on(T.Events.LEVELS_UPDATED, function(u3, d4) {\n    var f;\n    let c4 = e.videoTracks[(f = e.videoTracks.selectedIndex) != null ? f : 0];\n    if (!c4) return;\n    let p3 = d4.levels.map((m3) => n2.get(m3));\n    for (let m3 of e.videoRenditions) m3.id && !p3.includes(m3.id) && c4.removeRendition(m3);\n  });\n  let a2 = (u3) => {\n    let d4 = u3.target.selectedIndex;\n    d4 != t2.nextLevel && r10(d4);\n  }, r10 = (u3) => {\n    let d4 = e.currentTime, c4 = false, p3 = (f, m3) => {\n      c4 || (c4 = !Number.isFinite(m3.endOffset));\n    };\n    t2.on(T.Events.BUFFER_FLUSHING, p3), t2.nextLevel = u3, t2.off(T.Events.BUFFER_FLUSHING, p3), c4 || t2.trigger(T.Events.BUFFER_FLUSHING, { startOffset: d4 + 10, endOffset: 1 / 0, type: \"video\" });\n  };\n  (l = e.videoRenditions) == null || l.addEventListener(\"change\", a2);\n  let o = () => {\n    for (let u3 of e.videoTracks) e.removeVideoTrack(u3);\n  }, s = () => {\n    for (let u3 of e.audioTracks) e.removeAudioTrack(u3);\n  }, i2 = () => {\n    o(), s();\n  };\n  t2.once(T.Events.DESTROYING, i2);\n}\nvar F2 = (e) => \"time\" in e ? e.time : e.startTime;\nfunction ae(e, t2) {\n  t2.on(T.Events.NON_NATIVE_TEXT_TRACKS_FOUND, (r10, { tracks: o }) => {\n    o.forEach((s) => {\n      var u3;\n      let i2 = (u3 = s.subtitleTrack) != null ? u3 : s.closedCaptions, l = t2.subtitleTracks.findIndex(({ lang: d4, name: c4, type: p3 }) => d4 == (i2 == null ? void 0 : i2.lang) && c4 === s.label && p3.toLowerCase() === s.kind);\n      W(e, s.kind, s.label, i2 == null ? void 0 : i2.lang, `${s.kind}${l}`);\n    });\n  });\n  let n2 = () => {\n    var s;\n    if (!t2.subtitleTracks.length) return;\n    let r10 = Array.from(e.textTracks).find((i2) => i2.id && i2.mode === \"showing\" && [\"subtitles\", \"captions\"].includes(i2.kind)), o = `${(s = t2.subtitleTracks[t2.subtitleTrack]) == null ? void 0 : s.type.toLowerCase()}${t2.subtitleTrack}`;\n    if (r10 && (t2.subtitleTrack < 0 || (r10 == null ? void 0 : r10.id) !== o)) {\n      let i2 = t2.subtitleTracks.findIndex(({ lang: l, name: u3, type: d4 }) => l == r10.language && u3 === r10.label && d4.toLowerCase() === r10.kind);\n      t2.subtitleTrack = i2;\n    }\n    r10 && (r10 == null ? void 0 : r10.id) === o && r10.cues && Array.from(r10.cues).forEach((i2) => {\n      r10.addCue(i2);\n    });\n  };\n  e.textTracks.addEventListener(\"change\", n2), t2.on(T.Events.CUES_PARSED, (r10, { track: o, cues: s }) => {\n    let i2 = e.textTracks.getTrackById(o);\n    if (!i2) return;\n    let l = i2.mode === \"disabled\";\n    l && (i2.mode = \"hidden\"), s.forEach((u3) => {\n      var d4;\n      (d4 = i2.cues) != null && d4.getCueById(u3.id) || i2.addCue(u3);\n    }), l && (i2.mode = \"disabled\");\n  }), t2.once(T.Events.DESTROYING, () => {\n    e.textTracks.removeEventListener(\"change\", n2), e.querySelectorAll(\"track[data-removeondestroy]\").forEach((o) => {\n      o.remove();\n    });\n  });\n  let a2 = () => {\n    Array.from(e.textTracks).forEach((r10) => {\n      var o, s;\n      if (![\"subtitles\", \"caption\"].includes(r10.kind) && r10.label === \"thumbnails\") {\n        if (!((o = r10.cues) != null && o.length)) {\n          let i2 = e.querySelector('track[label=\"thumbnails\"]'), l = (s = i2 == null ? void 0 : i2.getAttribute(\"src\")) != null ? s : \"\";\n          i2 == null || i2.removeAttribute(\"src\"), setTimeout(() => {\n            i2 == null || i2.setAttribute(\"src\", l);\n          }, 0);\n        }\n        r10.mode !== \"hidden\" && (r10.mode = \"hidden\");\n      }\n    });\n  };\n  t2.once(T.Events.MANIFEST_LOADED, a2), t2.once(T.Events.MEDIA_ATTACHED, a2);\n}\nfunction W(e, t2, n2, a2, r10) {\n  let o = document.createElement(\"track\");\n  return o.kind = t2, o.label = n2, a2 && (o.srclang = a2), r10 && (o.id = r10), o.track.mode = [\"subtitles\", \"captions\"].includes(t2) ? \"disabled\" : \"hidden\", o.setAttribute(\"data-removeondestroy\", \"\"), e.append(o), o.track;\n}\nfunction Re(e, t2) {\n  let n2 = Array.prototype.find.call(e.querySelectorAll(\"track\"), (a2) => a2.track === t2);\n  n2 == null || n2.remove();\n}\nfunction E(e, t2, n2) {\n  var a2;\n  return (a2 = Array.from(e.querySelectorAll(\"track\")).find((r10) => r10.track.label === t2 && r10.track.kind === n2)) == null ? void 0 : a2.track;\n}\nfunction oe2(e, t2, n2, a2) {\n  return __async(this, null, function* () {\n    let r10 = E(e, n2, a2);\n    return r10 || (r10 = W(e, a2, n2), r10.mode = \"hidden\", yield new Promise((o) => setTimeout(() => o(void 0), 0))), r10.mode !== \"hidden\" && (r10.mode = \"hidden\"), [...t2].sort((o, s) => F2(s) - F2(o)).forEach((o) => {\n      var l, u3;\n      let s = o.value, i2 = F2(o);\n      if (\"endTime\" in o && o.endTime != null) r10 == null || r10.addCue(new VTTCue(i2, o.endTime, a2 === \"chapters\" ? s : JSON.stringify(s != null ? s : null)));\n      else {\n        let d4 = Array.prototype.findIndex.call(r10 == null ? void 0 : r10.cues, (m3) => m3.startTime >= i2), c4 = (l = r10 == null ? void 0 : r10.cues) == null ? void 0 : l[d4], p3 = c4 ? c4.startTime : Number.isFinite(e.duration) ? e.duration : Number.MAX_SAFE_INTEGER, f = (u3 = r10 == null ? void 0 : r10.cues) == null ? void 0 : u3[d4 - 1];\n        f && (f.endTime = i2), r10 == null || r10.addCue(new VTTCue(i2, p3, a2 === \"chapters\" ? s : JSON.stringify(s != null ? s : null)));\n      }\n    }), e.textTracks.dispatchEvent(new Event(\"change\", { bubbles: true, composed: true })), r10;\n  });\n}\nvar K2 = \"cuepoints\";\nvar se2 = Object.freeze({ label: K2 });\nfunction ie2(_0, _1) {\n  return __async(this, arguments, function* (e, t2, n2 = se2) {\n    return oe2(e, t2, n2.label, \"metadata\");\n  });\n}\nvar I2 = (e) => ({ time: e.startTime, value: JSON.parse(e.text) });\nfunction He(e, t2 = { label: K2 }) {\n  let n2 = E(e, t2.label, \"metadata\");\n  return n2 != null && n2.cues ? Array.from(n2.cues, (a2) => I2(a2)) : [];\n}\nfunction ce2(e, t2 = { label: K2 }) {\n  var o, s;\n  let n2 = E(e, t2.label, \"metadata\");\n  if (!((o = n2 == null ? void 0 : n2.activeCues) != null && o.length)) return;\n  if (n2.activeCues.length === 1) return I2(n2.activeCues[0]);\n  let { currentTime: a2 } = e, r10 = Array.prototype.find.call((s = n2.activeCues) != null ? s : [], ({ startTime: i2, endTime: l }) => i2 <= a2 && l > a2);\n  return I2(r10 || n2.activeCues[0]);\n}\nfunction ue2(_0) {\n  return __async(this, arguments, function* (e, t2 = se2) {\n    return new Promise((n2) => {\n      y(e, \"loadstart\", () => __async(null, null, function* () {\n        let a2 = yield ie2(e, [], t2);\n        y(e, \"cuechange\", () => {\n          let r10 = ce2(e);\n          if (r10) {\n            let o = new CustomEvent(\"cuepointchange\", { composed: true, bubbles: true, detail: r10 });\n            e.dispatchEvent(o);\n          }\n        }, {}, a2), n2(a2);\n      }));\n    });\n  });\n}\nvar B2 = \"chapters\";\nvar de2 = Object.freeze({ label: B2 });\nvar R = (e) => ({ startTime: e.startTime, endTime: e.endTime, value: e.text });\nfunction le2(_0, _1) {\n  return __async(this, arguments, function* (e, t2, n2 = de2) {\n    return oe2(e, t2, n2.label, \"chapters\");\n  });\n}\nfunction Ne2(e, t2 = { label: B2 }) {\n  var a2;\n  let n2 = E(e, t2.label, \"chapters\");\n  return (a2 = n2 == null ? void 0 : n2.cues) != null && a2.length ? Array.from(n2.cues, (r10) => R(r10)) : [];\n}\nfunction pe(e, t2 = { label: B2 }) {\n  var o, s;\n  let n2 = E(e, t2.label, \"chapters\");\n  if (!((o = n2 == null ? void 0 : n2.activeCues) != null && o.length)) return;\n  if (n2.activeCues.length === 1) return R(n2.activeCues[0]);\n  let { currentTime: a2 } = e, r10 = Array.prototype.find.call((s = n2.activeCues) != null ? s : [], ({ startTime: i2, endTime: l }) => i2 <= a2 && l > a2);\n  return R(r10 || n2.activeCues[0]);\n}\nfunction fe2(_0) {\n  return __async(this, arguments, function* (e, t2 = de2) {\n    return new Promise((n2) => {\n      y(e, \"loadstart\", () => __async(null, null, function* () {\n        let a2 = yield le2(e, [], t2);\n        y(e, \"cuechange\", () => {\n          let r10 = pe(e);\n          if (r10) {\n            let o = new CustomEvent(\"chapterchange\", { composed: true, bubbles: true, detail: r10 });\n            e.dispatchEvent(o);\n          }\n        }, {}, a2), n2(a2);\n      }));\n    });\n  });\n}\nfunction _e2(e, t2) {\n  if (t2) {\n    let n2 = t2.playingDate;\n    if (n2 != null) return new Date(n2.getTime() - e.currentTime * 1e3);\n  }\n  return typeof e.getStartDate == \"function\" ? e.getStartDate() : /* @__PURE__ */ new Date(NaN);\n}\nfunction Oe2(e, t2) {\n  if (t2 && t2.playingDate) return t2.playingDate;\n  if (typeof e.getStartDate == \"function\") {\n    let n2 = e.getStartDate();\n    return new Date(n2.getTime() + e.currentTime * 1e3);\n  }\n  return /* @__PURE__ */ new Date(NaN);\n}\nvar Ve = (e) => __async(null, null, function* () {\n  return fetch(e).then((t2) => t2.text()).then((t2) => {\n    let n2 = t2.split(`\n`).find((a2, r10, o) => r10 && o[r10 - 1].startsWith(\"#EXT-X-STREAM-INF\"));\n    return fetch(n2).then((a2) => a2.text()).then((a2) => a2.split(`\n`));\n  });\n});\nvar Ue = (e) => {\n  var s, i2, l;\n  let n2 = (i2 = ((s = e.find((u3) => u3.startsWith(\"#EXT-X-PLAYLIST-TYPE\"))) != null ? s : \"\").split(\":\")[1]) == null ? void 0 : i2.trim(), a2 = O2(n2), r10 = V(n2), o;\n  if (a2 === g.LIVE) {\n    let u3 = e.find((c4) => c4.startsWith(\"#EXT-X-PART-INF\"));\n    if (!!u3) o = +u3.split(\":\")[1].split(\"=\")[1] * 2;\n    else {\n      let c4 = e.find((m3) => m3.startsWith(\"#EXT-X-TARGETDURATION\")), p3 = (l = c4 == null ? void 0 : c4.split(\":\")) == null ? void 0 : l[1];\n      o = +(p3 != null ? p3 : 6) * 3;\n    }\n  }\n  return { streamType: a2, targetLiveWindow: r10, liveEdgeStartOffset: o };\n};\nvar Fe = (e, t2) => __async(null, null, function* () {\n  if (t2 === b2.MP4) return { streamType: g.ON_DEMAND, targetLiveWindow: Number.NaN, liveEdgeStartOffset: void 0 };\n  if (t2 === b2.M3U8) {\n    let n2 = yield Ve(e);\n    return Ue(n2);\n  }\n  return console.error(`Media type ${t2} is an unrecognized or unsupported type for src ${e}.`), { streamType: void 0, targetLiveWindow: void 0, liveEdgeStartOffset: void 0 };\n});\nvar $2 = (_0, _1, ..._22) => __async(null, [_0, _1, ..._22], function* (e, t2, n2 = C2({ src: e })) {\n  var s, i2, l;\n  let { streamType: a2, targetLiveWindow: r10, liveEdgeStartOffset: o } = yield Fe(e, n2);\n  ((s = M2.get(t2)) != null ? s : {}).liveEdgeStartOffset = o, ((i2 = M2.get(t2)) != null ? i2 : {}).targetLiveWindow = r10, t2.dispatchEvent(new CustomEvent(\"targetlivewindowchange\", { composed: true, bubbles: true })), ((l = M2.get(t2)) != null ? l : {}).streamType = a2, t2.dispatchEvent(new CustomEvent(\"streamtypechange\", { composed: true, bubbles: true }));\n});\nvar We2 = (e) => {\n  var s;\n  let t2 = e.type, n2 = O2(t2), a2 = V(t2), r10, o = !!((s = e.partList) != null && s.length);\n  return n2 === g.LIVE && (r10 = o ? e.partTarget * 2 : e.targetduration * 3), { streamType: n2, targetLiveWindow: a2, liveEdgeStartOffset: r10, lowLatency: o };\n};\nvar Ke2 = (e, t2, n2) => {\n  var i2, l, u3, d4, c4, p3, f, m3;\n  let { streamType: a2, targetLiveWindow: r10, liveEdgeStartOffset: o, lowLatency: s } = We2(e);\n  if (a2 === g.LIVE) {\n    s ? (n2.config.backBufferLength = (i2 = n2.userConfig.backBufferLength) != null ? i2 : 4, n2.config.maxFragLookUpTolerance = (l = n2.userConfig.maxFragLookUpTolerance) != null ? l : 1e-3, n2.config.abrBandWidthUpFactor = (u3 = n2.userConfig.abrBandWidthUpFactor) != null ? u3 : n2.config.abrBandWidthFactor) : n2.config.backBufferLength = (d4 = n2.userConfig.backBufferLength) != null ? d4 : 8;\n    let P2 = Object.freeze({ get length() {\n      return t2.seekable.length;\n    }, start(L2) {\n      return t2.seekable.start(L2);\n    }, end(L2) {\n      var A3;\n      return L2 > this.length || L2 < 0 || Number.isFinite(t2.duration) ? t2.seekable.end(L2) : (A3 = n2.liveSyncPosition) != null ? A3 : t2.seekable.end(L2);\n    } });\n    ((c4 = M2.get(t2)) != null ? c4 : {}).seekable = P2;\n  }\n  ((p3 = M2.get(t2)) != null ? p3 : {}).liveEdgeStartOffset = o, ((f = M2.get(t2)) != null ? f : {}).targetLiveWindow = r10, t2.dispatchEvent(new CustomEvent(\"targetlivewindowchange\", { composed: true, bubbles: true })), ((m3 = M2.get(t2)) != null ? m3 : {}).streamType = a2, t2.dispatchEvent(new CustomEvent(\"streamtypechange\", { composed: true, bubbles: true }));\n};\nvar ye2;\nvar me2;\nvar Be2 = (me2 = (ye2 = globalThis == null ? void 0 : globalThis.navigator) == null ? void 0 : ye2.userAgent) != null ? me2 : \"\";\nvar $e2 = Be2.toLowerCase().indexOf(\"android\") !== -1;\nvar M2 = /* @__PURE__ */ new WeakMap();\nvar k = \"mux.com\";\nvar ge;\nvar Me2;\nvar ve2 = (Me2 = (ge = T).isSupported) == null ? void 0 : Me2.call(ge);\nvar qe2 = $e2;\nvar Xt2 = () => od.utils.now();\nvar Ye2 = od.utils.generateUUID;\nvar Gt2 = ({ playbackId: e, customDomain: t2 = k, maxResolution: n2, minResolution: a2, renditionOrder: r10, programStartTime: o, programEndTime: s, tokens: { playback: i2 } = {}, extraSourceParams: l = {} } = {}) => {\n  if (!e) return;\n  let [u3, d4 = \"\"] = Z2(e), c4 = new URL(`https://stream.${t2}/${u3}.m3u8${d4}`);\n  return i2 || c4.searchParams.has(\"token\") ? (c4.searchParams.forEach((p3, f) => {\n    f != \"token\" && c4.searchParams.delete(f);\n  }), i2 && c4.searchParams.set(\"token\", i2)) : (n2 && c4.searchParams.set(\"max_resolution\", n2), a2 && (c4.searchParams.set(\"min_resolution\", a2), n2 && +n2.slice(0, -1) < +a2.slice(0, -1) && console.error(\"minResolution must be <= maxResolution\", \"minResolution\", a2, \"maxResolution\", n2)), r10 && c4.searchParams.set(\"rendition_order\", r10), o && c4.searchParams.set(\"program_start_time\", `${o}`), s && c4.searchParams.set(\"program_end_time\", `${s}`), Object.entries(l).forEach(([p3, f]) => {\n    f != null && c4.searchParams.set(p3, f);\n  })), c4.toString();\n};\nvar ze2 = (e) => {\n  if (!e) return;\n  let [t2] = e.split(\"?\");\n  return t2 || void 0;\n};\nvar be = (e) => {\n  if (!e || !e.startsWith(\"https://stream.\")) return;\n  let [t2] = new URL(e).pathname.slice(1).split(\".m3u8\");\n  return t2 || void 0;\n};\nvar Xe2 = (e) => {\n  var t2, n2, a2;\n  return (t2 = e == null ? void 0 : e.metadata) != null && t2.video_id ? e.metadata.video_id : Ee2(e) && (a2 = (n2 = ze2(e.playbackId)) != null ? n2 : be(e.src)) != null ? a2 : e.src;\n};\nvar jt2 = (e) => {\n  var t2;\n  return (t2 = M2.get(e)) == null ? void 0 : t2.error;\n};\nvar Te = (e) => {\n  var t2, n2;\n  return (n2 = (t2 = M2.get(e)) == null ? void 0 : t2.streamType) != null ? n2 : g.UNKNOWN;\n};\nvar Jt2 = (e) => {\n  var t2, n2;\n  return (n2 = (t2 = M2.get(e)) == null ? void 0 : t2.targetLiveWindow) != null ? n2 : Number.NaN;\n};\nvar q = (e) => {\n  var t2, n2;\n  return (n2 = (t2 = M2.get(e)) == null ? void 0 : t2.seekable) != null ? n2 : e.seekable;\n};\nvar Qt2 = (e) => {\n  var a2;\n  let t2 = (a2 = M2.get(e)) == null ? void 0 : a2.liveEdgeStartOffset;\n  if (typeof t2 != \"number\") return Number.NaN;\n  let n2 = q(e);\n  return n2.length ? n2.end(n2.length - 1) - t2 : Number.NaN;\n};\nvar X2 = 0.034;\nvar Ge = (e, t2, n2 = X2) => Math.abs(e - t2) <= n2;\nvar xe2 = (e, t2, n2 = X2) => e > t2 || Ge(e, t2, n2);\nvar je2 = (e, t2 = X2) => e.paused && xe2(e.currentTime, e.duration, t2);\nvar Le2 = (e, t2) => {\n  var u3, d4, c4;\n  if (!t2 || !e.buffered.length) return;\n  if (e.readyState > 2) return false;\n  let n2 = t2.currentLevel >= 0 ? (d4 = (u3 = t2.levels) == null ? void 0 : u3[t2.currentLevel]) == null ? void 0 : d4.details : (c4 = t2.levels.find((p3) => !!p3.details)) == null ? void 0 : c4.details;\n  if (!n2 || n2.live) return;\n  let { fragments: a2 } = n2;\n  if (!(a2 != null && a2.length)) return;\n  if (e.currentTime < e.duration - (n2.targetduration + 0.5)) return false;\n  let r10 = a2[a2.length - 1];\n  if (e.currentTime <= r10.start) return false;\n  let o = r10.start + r10.duration / 2, s = e.buffered.start(e.buffered.length - 1), i2 = e.buffered.end(e.buffered.length - 1);\n  return o > s && o < i2;\n};\nvar Je2 = (e, t2) => e.ended || e.loop ? e.ended : t2 && Le2(e, t2) ? true : je2(e);\nvar Zt = (e, t2, n2) => {\n  Qe2(t2, n2);\n  let { metadata: a2 = {} } = e, { view_session_id: r10 = Ye2() } = a2, o = Xe2(e);\n  a2.view_session_id = r10, a2.video_id = o, e.metadata = a2, M2.set(t2, {});\n  let s = Ze(e, t2), i2 = ne2(e, t2, s);\n  ot2(e, t2, s), st2(e, t2, s), ue2(t2), fe2(t2);\n  let l = te2(e, t2, s);\n  return { engine: s, setAutoplay: l, setPreload: i2 };\n};\nvar Qe2 = (e, t2) => {\n  let n2 = t2 == null ? void 0 : t2.engine;\n  n2 && (n2.detachMedia(), n2.destroy()), e != null && e.mux && !e.mux.deleted && (e.mux.destroy(), delete e.mux), e && (e.removeAttribute(\"src\"), e.load(), e.removeEventListener(\"error\", Ce2), e.removeEventListener(\"error\", Y), e.removeEventListener(\"durationchange\", he2), M2.delete(e), e.dispatchEvent(new Event(\"teardown\")));\n};\nfunction ke2(e, t2) {\n  var u3;\n  let n2 = C2(e);\n  if (!(n2 === b2.M3U8)) return true;\n  let r10 = !n2 || ((u3 = t2.canPlayType(n2)) != null ? u3 : true), { preferPlayback: o } = e, s = o === _.MSE, i2 = o === _.NATIVE;\n  return r10 && (i2 || !(ve2 && (s || qe2)));\n}\nvar Ze = (e, t2) => {\n  let { debug: n2, streamType: a2, startTime: r10 = -1, metadata: o, preferCmcd: s, _hlsConfig: i2 = {} } = e, u3 = C2(e) === b2.M3U8, d4 = ke2(e, t2);\n  if (u3 && !d4 && ve2) {\n    let c4 = { backBufferLength: 30, renderTextTracksNatively: false, liveDurationInfinity: true, capLevelToPlayerSize: true, capLevelOnFPSDrop: true }, p3 = et(a2), f = tt2(e), m3 = s !== h.NONE ? { useHeaders: s === h.HEADER, sessionId: o == null ? void 0 : o.view_session_id, contentId: o == null ? void 0 : o.video_id } : void 0;\n    return new T(__spreadValues(__spreadValues(__spreadValues(__spreadValues({ debug: n2, startPosition: r10, cmcd: m3, xhrSetup: (L2, A3) => {\n      var G4, j4;\n      if (s && s !== h.QUERY) return;\n      let S4 = new URL(A3);\n      if (!S4.searchParams.has(\"CMCD\")) return;\n      let Ae4 = ((j4 = (G4 = S4.searchParams.get(\"CMCD\")) == null ? void 0 : G4.split(\",\")) != null ? j4 : []).filter((J4) => J4.startsWith(\"sid\") || J4.startsWith(\"cid\")).join(\",\");\n      S4.searchParams.set(\"CMCD\", Ae4), L2.open(\"GET\", S4);\n    } }, c4), p3), f), i2));\n  }\n};\nvar et = (e) => e === g.LIVE ? { backBufferLength: 8 } : {};\nvar tt2 = (e) => {\n  let { drmToken: t2, src: n2, playbackId: a2 = be(n2) } = e;\n  return !t2 || !a2 ? {} : { emeEnabled: true, drmSystems: { \"com.apple.fps\": { licenseUrl: H2(e, \"fairplay\"), serverCertificateUrl: Pe2(e, \"fairplay\") }, \"com.widevine.alpha\": { licenseUrl: H2(e, \"widevine\") }, \"com.microsoft.playready\": { licenseUrl: H2(e, \"playready\") } }, requestMediaKeySystemAccessFunc: (r10, o) => (r10 === \"com.widevine.alpha\" && (o = [...o.map((s) => {\n    var l;\n    let i2 = (l = s.videoCapabilities) == null ? void 0 : l.map((u3) => __spreadProps(__spreadValues({}, u3), { robustness: \"HW_SECURE_ALL\" }));\n    return __spreadProps(__spreadValues({}, s), { videoCapabilities: i2 });\n  }), ...o]), navigator.requestMediaKeySystemAccess(r10, o)) };\n};\nvar nt2 = (e) => __async(null, null, function* () {\n  return yield (yield fetch(e)).arrayBuffer();\n});\nvar rt = (e, t2) => __async(null, null, function* () {\n  let a2 = yield (yield fetch(t2, { method: \"POST\", headers: { \"Content-type\": \"application/octet-stream\" }, body: e })).arrayBuffer();\n  return new Uint8Array(a2);\n});\nvar at2 = (e, t2) => {\n  y(t2, \"encrypted\", (a2) => __async(null, null, function* () {\n    try {\n      let r10 = a2.initDataType;\n      if (r10 !== \"skd\") {\n        console.error(`Received unexpected initialization data type \"${r10}\"`);\n        return;\n      }\n      if (!t2.mediaKeys) {\n        let d4 = yield (yield navigator.requestMediaKeySystemAccess(\"com.apple.fps\", [{ initDataTypes: [r10], videoCapabilities: [{ contentType: \"application/vnd.apple.mpegurl\", robustness: \"\" }], distinctiveIdentifier: \"not-allowed\", persistentState: \"not-allowed\", sessionTypes: [\"temporary\"] }])).createMediaKeys(), c4 = yield nt2(Pe2(e, \"fairplay\"));\n        yield d4.setServerCertificate(c4), yield t2.setMediaKeys(d4);\n      }\n      let o = a2.initData;\n      if (o == null) {\n        console.error(`Could not start encrypted playback due to missing initData in ${a2.type} event`);\n        return;\n      }\n      let s = t2.mediaKeys.createSession();\n      s.generateRequest(r10, o);\n      let i2 = yield new Promise((u3) => {\n        s.addEventListener(\"message\", (d4) => {\n          u3(d4.message);\n        }, { once: true });\n      }), l = yield rt(i2, H2(e, \"fairplay\"));\n      return yield s.update(l), s;\n    } catch (r10) {\n      console.error(`Could not start encrypted playback due to exception \"${r10}\"`);\n    }\n  }));\n};\nvar H2 = ({ playbackId: e, drmToken: t2, customDomain: n2 = k }, a2) => `https://license.${n2.toLocaleLowerCase().endsWith(k) ? n2 : k}/license/${a2}/${e}?token=${t2}`;\nvar Pe2 = ({ playbackId: e, drmToken: t2, customDomain: n2 = k }, a2) => `https://license.${n2.toLocaleLowerCase().endsWith(k) ? n2 : k}/appcert/${a2}/${e}?token=${t2}`;\nvar Ee2 = ({ playbackId: e, src: t2, customDomain: n2 }) => {\n  if (e) return true;\n  if (typeof t2 != \"string\") return false;\n  let a2 = window == null ? void 0 : window.location.href, r10 = new URL(t2, a2).hostname.toLocaleLowerCase();\n  return r10.includes(k) || !!n2 && r10.includes(n2.toLocaleLowerCase());\n};\nvar ot2 = (e, t2, n2) => {\n  var s;\n  let { envKey: a2, disableTracking: r10 } = e, o = Ee2(e);\n  if (!r10 && (a2 || o)) {\n    let { playerInitTime: i2, playerSoftwareName: l, playerSoftwareVersion: u3, beaconCollectionDomain: d4, debug: c4, disableCookies: p3 } = e, f = __spreadProps(__spreadValues({}, e.metadata), { video_title: ((s = e == null ? void 0 : e.metadata) == null ? void 0 : s.video_title) || void 0 }), m3 = (P2) => typeof P2.player_error_code == \"string\" ? false : typeof e.errorTranslator == \"function\" ? e.errorTranslator(P2) : P2;\n    od.monitor(t2, { debug: c4, beaconCollectionDomain: d4, hlsjs: n2, Hls: n2 ? T : void 0, automaticErrorTracking: false, errorTranslator: m3, disableCookies: p3, data: __spreadValues(__spreadProps(__spreadValues({}, a2 ? { env_key: a2 } : {}), { player_software_name: l, player_software: l, player_software_version: u3, player_init_time: i2 }), f) });\n  }\n};\nvar st2 = (e, t2, n2) => {\n  var u3;\n  let a2 = ke2(e, t2), { src: r10 } = e, o = () => {\n    t2.ended || !Je2(t2, n2) || (Le2(t2, n2) ? t2.currentTime = t2.buffered.end(t2.buffered.length - 1) : t2.dispatchEvent(new Event(\"ended\")));\n  }, s, i2, l = () => {\n    var p3, f;\n    let d4 = (p3 = q(t2)) == null ? void 0 : p3.start(0), c4 = (f = q(t2)) == null ? void 0 : f.end(0);\n    (i2 !== c4 || s !== d4) && t2.dispatchEvent(new CustomEvent(\"seekablechange\", { composed: true })), s = d4, i2 = c4;\n  };\n  if (y(t2, \"durationchange\", l), t2 && a2) {\n    let d4 = C2(e);\n    if (typeof r10 == \"string\") {\n      let c4 = () => {\n        if (Te(t2) !== g.LIVE || Number.isFinite(t2.duration)) return;\n        let p3 = setInterval(l, 1e3);\n        t2.addEventListener(\"teardown\", () => {\n          clearInterval(p3);\n        }, { once: true }), y(t2, \"durationchange\", () => {\n          Number.isFinite(t2.duration) && clearInterval(p3);\n        });\n      };\n      if (t2.preload === \"none\") {\n        let p3 = () => {\n          $2(r10, t2, d4).then(c4), t2.removeEventListener(\"loadedmetadata\", f);\n        }, f = () => {\n          $2(r10, t2, d4).then(c4), t2.removeEventListener(\"play\", p3);\n        };\n        y(t2, \"play\", p3, { once: true }), y(t2, \"loadedmetadata\", f, { once: true });\n      } else $2(r10, t2, d4).then(c4);\n      e.drmToken && at2(e, t2), t2.setAttribute(\"src\", r10), e.startTime && (((u3 = M2.get(t2)) != null ? u3 : {}).startTime = e.startTime, t2.addEventListener(\"durationchange\", he2, { once: true }));\n    } else t2.removeAttribute(\"src\");\n    t2.addEventListener(\"error\", Ce2), t2.addEventListener(\"error\", Y), t2.addEventListener(\"emptied\", () => {\n      t2.querySelectorAll(\"track[data-removeondestroy]\").forEach((p3) => {\n        p3.remove();\n      });\n    }, { once: true }), y(t2, \"pause\", o), y(t2, \"seeked\", o), y(t2, \"play\", () => {\n      t2.ended || xe2(t2.currentTime, t2.duration) && (t2.currentTime = t2.seekable.length ? t2.seekable.start(0) : 0);\n    });\n  } else n2 && r10 ? (n2.once(T.Events.LEVEL_LOADED, (d4, c4) => {\n    Ke2(c4.details, t2, n2), l(), Te(t2) === g.LIVE && !Number.isFinite(t2.duration) && (n2.on(T.Events.LEVEL_UPDATED, l), y(t2, \"durationchange\", () => {\n      Number.isFinite(t2.duration) && n2.off(T.Events.LEVELS_UPDATED, l);\n    }));\n  }), n2.on(T.Events.ERROR, (d4, c4) => {\n    let p3 = { [T.ErrorTypes.NETWORK_ERROR]: x.MEDIA_ERR_NETWORK, [T.ErrorTypes.MEDIA_ERROR]: x.MEDIA_ERR_DECODE }, f = new x(\"\", p3[c4.type]);\n    f.fatal = c4.fatal, f.data = c4, t2.dispatchEvent(new CustomEvent(\"error\", { detail: f }));\n  }), t2.addEventListener(\"error\", Y), y(t2, \"waiting\", o), re(e, n2), ae(t2, n2), n2.attachMedia(t2)) : console.error(\"It looks like the video you're trying to play will not work on this system! If possible, try upgrading to the newest versions of your browser or software.\");\n};\nfunction he2(e) {\n  var a2;\n  let t2 = e.target, n2 = (a2 = M2.get(t2)) == null ? void 0 : a2.startTime;\n  if (n2 && Q(t2.seekable, t2.duration, n2)) {\n    let r10 = t2.preload === \"auto\";\n    r10 && (t2.preload = \"none\"), t2.currentTime = n2, r10 && (t2.preload = \"auto\");\n  }\n}\nfunction Ce2(e) {\n  return __async(this, null, function* () {\n    if (!e.isTrusted) return;\n    e.stopImmediatePropagation();\n    let t2 = e.target;\n    if (!(t2 != null && t2.error)) return;\n    let { message: n2, code: a2 } = t2.error, r10 = new x(n2, a2);\n    if (t2.src && (a2 !== x.MEDIA_ERR_DECODE || a2 !== void 0)) try {\n      let { status: o } = yield fetch(t2.src);\n      r10.data = { response: { code: o } };\n    } catch (e2) {\n    }\n    t2.dispatchEvent(new CustomEvent(\"error\", { detail: r10 }));\n  });\n}\nfunction Y(e) {\n  var a2, r10;\n  if (!(e instanceof CustomEvent) || !(e.detail instanceof x)) return;\n  let t2 = e.target, n2 = e.detail;\n  !n2 || !n2.fatal || (((a2 = M2.get(t2)) != null ? a2 : {}).error = n2, (r10 = t2.mux) == null || r10.emit(\"error\", { player_error_code: n2.code, player_error_message: n2.message, player_error_context: n2.context }));\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/constants.js\nvar MediaUIEvents = {\n  MEDIA_PLAY_REQUEST: \"mediaplayrequest\",\n  MEDIA_PAUSE_REQUEST: \"mediapauserequest\",\n  MEDIA_MUTE_REQUEST: \"mediamuterequest\",\n  MEDIA_UNMUTE_REQUEST: \"mediaunmuterequest\",\n  MEDIA_VOLUME_REQUEST: \"mediavolumerequest\",\n  MEDIA_SEEK_REQUEST: \"mediaseekrequest\",\n  MEDIA_AIRPLAY_REQUEST: \"mediaairplayrequest\",\n  MEDIA_ENTER_FULLSCREEN_REQUEST: \"mediaenterfullscreenrequest\",\n  MEDIA_EXIT_FULLSCREEN_REQUEST: \"mediaexitfullscreenrequest\",\n  MEDIA_PREVIEW_REQUEST: \"mediapreviewrequest\",\n  MEDIA_ENTER_PIP_REQUEST: \"mediaenterpiprequest\",\n  MEDIA_EXIT_PIP_REQUEST: \"mediaexitpiprequest\",\n  MEDIA_ENTER_CAST_REQUEST: \"mediaentercastrequest\",\n  MEDIA_EXIT_CAST_REQUEST: \"mediaexitcastrequest\",\n  MEDIA_SHOW_TEXT_TRACKS_REQUEST: \"mediashowtexttracksrequest\",\n  MEDIA_HIDE_TEXT_TRACKS_REQUEST: \"mediahidetexttracksrequest\",\n  MEDIA_SHOW_SUBTITLES_REQUEST: \"mediashowsubtitlesrequest\",\n  MEDIA_DISABLE_SUBTITLES_REQUEST: \"mediadisablesubtitlesrequest\",\n  MEDIA_TOGGLE_SUBTITLES_REQUEST: \"mediatogglesubtitlesrequest\",\n  MEDIA_PLAYBACK_RATE_REQUEST: \"mediaplaybackraterequest\",\n  MEDIA_RENDITION_REQUEST: \"mediarenditionrequest\",\n  MEDIA_AUDIO_TRACK_REQUEST: \"mediaaudiotrackrequest\",\n  MEDIA_SEEK_TO_LIVE_REQUEST: \"mediaseektoliverequest\",\n  REGISTER_MEDIA_STATE_RECEIVER: \"registermediastatereceiver\",\n  UNREGISTER_MEDIA_STATE_RECEIVER: \"unregistermediastatereceiver\"\n};\nvar MediaStateReceiverAttributes = {\n  MEDIA_CHROME_ATTRIBUTES: \"mediachromeattributes\",\n  MEDIA_CONTROLLER: \"mediacontroller\"\n};\nvar MediaUIProps = {\n  MEDIA_AIRPLAY_UNAVAILABLE: \"mediaAirplayUnavailable\",\n  MEDIA_FULLSCREEN_UNAVAILABLE: \"mediaFullscreenUnavailable\",\n  MEDIA_PIP_UNAVAILABLE: \"mediaPipUnavailable\",\n  MEDIA_CAST_UNAVAILABLE: \"mediaCastUnavailable\",\n  MEDIA_RENDITION_UNAVAILABLE: \"mediaRenditionUnavailable\",\n  MEDIA_AUDIO_TRACK_UNAVAILABLE: \"mediaAudioTrackUnavailable\",\n  MEDIA_PAUSED: \"mediaPaused\",\n  MEDIA_HAS_PLAYED: \"mediaHasPlayed\",\n  MEDIA_ENDED: \"mediaEnded\",\n  MEDIA_MUTED: \"mediaMuted\",\n  MEDIA_VOLUME_LEVEL: \"mediaVolumeLevel\",\n  MEDIA_VOLUME: \"mediaVolume\",\n  MEDIA_VOLUME_UNAVAILABLE: \"mediaVolumeUnavailable\",\n  MEDIA_IS_PIP: \"mediaIsPip\",\n  MEDIA_IS_CASTING: \"mediaIsCasting\",\n  MEDIA_IS_AIRPLAYING: \"mediaIsAirplaying\",\n  MEDIA_SUBTITLES_LIST: \"mediaSubtitlesList\",\n  MEDIA_SUBTITLES_SHOWING: \"mediaSubtitlesShowing\",\n  MEDIA_IS_FULLSCREEN: \"mediaIsFullscreen\",\n  MEDIA_PLAYBACK_RATE: \"mediaPlaybackRate\",\n  MEDIA_CURRENT_TIME: \"mediaCurrentTime\",\n  MEDIA_DURATION: \"mediaDuration\",\n  MEDIA_SEEKABLE: \"mediaSeekable\",\n  MEDIA_PREVIEW_TIME: \"mediaPreviewTime\",\n  MEDIA_PREVIEW_IMAGE: \"mediaPreviewImage\",\n  MEDIA_PREVIEW_COORDS: \"mediaPreviewCoords\",\n  MEDIA_PREVIEW_CHAPTER: \"mediaPreviewChapter\",\n  MEDIA_LOADING: \"mediaLoading\",\n  MEDIA_BUFFERED: \"mediaBuffered\",\n  MEDIA_STREAM_TYPE: \"mediaStreamType\",\n  MEDIA_TARGET_LIVE_WINDOW: \"mediaTargetLiveWindow\",\n  MEDIA_TIME_IS_LIVE: \"mediaTimeIsLive\",\n  MEDIA_RENDITION_LIST: \"mediaRenditionList\",\n  MEDIA_RENDITION_SELECTED: \"mediaRenditionSelected\",\n  MEDIA_AUDIO_TRACK_LIST: \"mediaAudioTrackList\",\n  MEDIA_AUDIO_TRACK_ENABLED: \"mediaAudioTrackEnabled\",\n  MEDIA_CHAPTERS_CUES: \"mediaChaptersCues\"\n};\nvar MediaUIPropsEntries = (\n  /** @type {[keyof MediaUIProps, string][]} */\n  Object.entries(MediaUIProps)\n);\nvar MediaUIAttributes = (\n  /** @type {{ [k in keyof MediaUIProps]: string }} */\n  MediaUIPropsEntries.reduce(\n    (dictObj, [key, propName]) => {\n      dictObj[key] = `${propName.toLowerCase()}`;\n      return dictObj;\n    },\n    /** @type {Partial<{ [k in keyof MediaUIProps]: string }>} */\n    {}\n  )\n);\nvar MediaStateChangeEvents = (\n  /** @type {{ [k in keyof MediaUIProps | 'USER_INACTIVE' | 'BREAKPOINTS_CHANGE' | 'BREAKPOINTS_COMPUTED']: string }} */\n  MediaUIPropsEntries.reduce(\n    (dictObj, [key, propName]) => {\n      dictObj[key] = `${propName.toLowerCase()}`;\n      return dictObj;\n    },\n    /** @type {Partial<{ [k in keyof MediaUIProps | 'USER_INACTIVE' | 'BREAKPOINTS_CHANGE' | 'BREAKPOINTS_COMPUTED']: string  }>} */\n    {\n      USER_INACTIVE: \"userinactivechange\",\n      BREAKPOINTS_CHANGE: \"breakpointchange\",\n      BREAKPOINTS_COMPUTED: \"breakpointscomputed\"\n    }\n  )\n);\nvar StateChangeEventToAttributeMap = Object.entries(\n  MediaStateChangeEvents\n).reduce(\n  (mapObj, [key, eventType]) => {\n    const attrName = MediaUIAttributes[key];\n    if (attrName) {\n      mapObj[eventType] = attrName;\n    }\n    return mapObj;\n  },\n  { userinactivechange: \"userinactive\" }\n);\nvar AttributeToStateChangeEventMap = Object.entries(\n  MediaUIAttributes\n).reduce(\n  (mapObj, [key, attrName]) => {\n    const evtType = MediaStateChangeEvents[key];\n    if (evtType) {\n      mapObj[attrName] = evtType;\n    }\n    return mapObj;\n  },\n  { userinactive: \"userinactivechange\" }\n);\nvar TextTrackKinds = {\n  SUBTITLES: \"subtitles\",\n  CAPTIONS: \"captions\",\n  DESCRIPTIONS: \"descriptions\",\n  CHAPTERS: \"chapters\",\n  METADATA: \"metadata\"\n};\nvar TextTrackModes = {\n  DISABLED: \"disabled\",\n  HIDDEN: \"hidden\",\n  SHOWING: \"showing\"\n};\nvar PointerTypes = {\n  MOUSE: \"mouse\",\n  PEN: \"pen\",\n  TOUCH: \"touch\"\n};\nvar AvailabilityStates = {\n  UNAVAILABLE: \"unavailable\",\n  UNSUPPORTED: \"unsupported\"\n};\nvar StreamTypes = {\n  LIVE: \"live\",\n  ON_DEMAND: \"on-demand\",\n  UNKNOWN: \"unknown\"\n};\nvar WebkitPresentationModes = {\n  INLINE: \"inline\",\n  FULLSCREEN: \"fullscreen\",\n  PICTURE_IN_PICTURE: \"picture-in-picture\"\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/labels/labels.js\nvar nouns = {\n  AUDIO_PLAYER: () => \"audio player\",\n  VIDEO_PLAYER: () => \"video player\",\n  VOLUME: () => \"volume\",\n  SEEK: () => \"seek\",\n  CLOSED_CAPTIONS: () => \"closed captions\",\n  PLAYBACK_RATE: ({ playbackRate = 1 } = {}) => `current playback rate ${playbackRate}`,\n  PLAYBACK_TIME: () => `playback time`,\n  MEDIA_LOADING: () => `media loading`,\n  SETTINGS: () => `settings`,\n  AUDIO_TRACKS: () => `audio tracks`,\n  QUALITY: () => `quality`\n};\nvar verbs = {\n  PLAY: () => \"play\",\n  PAUSE: () => \"pause\",\n  MUTE: () => \"mute\",\n  UNMUTE: () => \"unmute\",\n  ENTER_AIRPLAY: () => \"start airplay\",\n  EXIT_AIRPLAY: () => \"stop airplay\",\n  ENTER_CAST: () => \"start casting\",\n  EXIT_CAST: () => \"stop casting\",\n  ENTER_FULLSCREEN: () => \"enter fullscreen mode\",\n  EXIT_FULLSCREEN: () => \"exit fullscreen mode\",\n  ENTER_PIP: () => \"enter picture in picture mode\",\n  EXIT_PIP: () => \"exit picture in picture mode\",\n  SEEK_FORWARD_N_SECS: ({ seekOffset = 30 } = {}) => `seek forward ${seekOffset} seconds`,\n  SEEK_BACK_N_SECS: ({ seekOffset = 30 } = {}) => `seek back ${seekOffset} seconds`,\n  SEEK_LIVE: () => \"seek to live\",\n  PLAYING_LIVE: () => \"playing live\"\n};\nvar labels_default = __spreadValues(__spreadValues({}, nouns), verbs);\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/utils.js\nfunction stringifyRenditionList(renditions) {\n  return renditions == null ? void 0 : renditions.map(stringifyRendition).join(\" \");\n}\nfunction parseRenditionList(renditions) {\n  return renditions == null ? void 0 : renditions.split(/\\s+/).map(parseRendition);\n}\nfunction stringifyRendition(rendition) {\n  if (rendition) {\n    const { id, width, height } = rendition;\n    return [id, width, height].filter((a2) => a2 != null).join(\":\");\n  }\n}\nfunction parseRendition(rendition) {\n  if (rendition) {\n    const [id, width, height] = rendition.split(\":\");\n    return { id, width, height };\n  }\n}\nfunction stringifyAudioTrackList(audioTracks) {\n  return audioTracks == null ? void 0 : audioTracks.map(stringifyAudioTrack).join(\" \");\n}\nfunction parseAudioTrackList(audioTracks) {\n  return audioTracks == null ? void 0 : audioTracks.split(/\\s+/).map(parseAudioTrack);\n}\nfunction stringifyAudioTrack(audioTrack) {\n  if (audioTrack) {\n    const { id, kind, language, label } = audioTrack;\n    return [id, kind, language, label].filter((a2) => a2 != null).join(\":\");\n  }\n}\nfunction parseAudioTrack(audioTrack) {\n  if (audioTrack) {\n    const [id, kind, language, label] = audioTrack.split(\":\");\n    return { id, kind, language, label };\n  }\n}\nfunction camelCase(name) {\n  return name.replace(/[-_]([a-z])/g, ($0, $1) => $1.toUpperCase());\n}\nfunction isValidNumber(x4) {\n  return typeof x4 === \"number\" && !Number.isNaN(x4) && Number.isFinite(x4);\n}\nfunction isNumericString(str) {\n  if (typeof str != \"string\")\n    return false;\n  return !isNaN(str) && !isNaN(parseFloat(str));\n}\nvar delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/time.js\nvar UnitLabels = [\n  {\n    singular: \"hour\",\n    plural: \"hours\"\n  },\n  {\n    singular: \"minute\",\n    plural: \"minutes\"\n  },\n  {\n    singular: \"second\",\n    plural: \"seconds\"\n  }\n];\nvar toTimeUnitPhrase = (timeUnitValue, unitIndex) => {\n  const unitLabel = timeUnitValue === 1 ? UnitLabels[unitIndex].singular : UnitLabels[unitIndex].plural;\n  return `${timeUnitValue} ${unitLabel}`;\n};\nvar formatAsTimePhrase = (seconds) => {\n  if (!isValidNumber(seconds))\n    return \"\";\n  const positiveSeconds = Math.abs(seconds);\n  const negative = positiveSeconds !== seconds;\n  const secondsDateTime = new Date(0, 0, 0, 0, 0, positiveSeconds, 0);\n  const timeParts = [\n    secondsDateTime.getHours(),\n    secondsDateTime.getMinutes(),\n    secondsDateTime.getSeconds()\n  ];\n  const timeString = timeParts.map(\n    (timeUnitValue, index) => timeUnitValue && toTimeUnitPhrase(timeUnitValue, index)\n  ).filter((x4) => x4).join(\", \");\n  const negativeSuffix = negative ? \" remaining\" : \"\";\n  return `${timeString}${negativeSuffix}`;\n};\nfunction formatTime(seconds, guide) {\n  let negative = false;\n  if (seconds < 0) {\n    negative = true;\n    seconds = 0 - seconds;\n  }\n  seconds = seconds < 0 ? 0 : seconds;\n  let s = Math.floor(seconds % 60);\n  let m3 = Math.floor(seconds / 60 % 60);\n  let h3 = Math.floor(seconds / 3600);\n  const gm = Math.floor(guide / 60 % 60);\n  const gh = Math.floor(guide / 3600);\n  if (isNaN(seconds) || seconds === Infinity) {\n    h3 = m3 = s = \"0\";\n  }\n  h3 = h3 > 0 || gh > 0 ? h3 + \":\" : \"\";\n  m3 = ((h3 || gm >= 10) && m3 < 10 ? \"0\" + m3 : m3) + \":\";\n  s = s < 10 ? \"0\" + s : s;\n  return (negative ? \"-\" : \"\") + h3 + m3 + s;\n}\nvar emptyTimeRanges = Object.freeze({\n  length: 0,\n  start(index) {\n    const unsignedIdx = index >>> 0;\n    if (unsignedIdx >= this.length) {\n      throw new DOMException(\n        `Failed to execute 'start' on 'TimeRanges': The index provided (${unsignedIdx}) is greater than or equal to the maximum bound (${this.length}).`\n      );\n    }\n    return 0;\n  },\n  end(index) {\n    const unsignedIdx = index >>> 0;\n    if (unsignedIdx >= this.length) {\n      throw new DOMException(\n        `Failed to execute 'end' on 'TimeRanges': The index provided (${unsignedIdx}) is greater than or equal to the maximum bound (${this.length}).`\n      );\n    }\n    return 0;\n  }\n});\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/server-safe-globals.js\nvar EventTarget2 = class {\n  addEventListener() {\n  }\n  removeEventListener() {\n  }\n  dispatchEvent() {\n    return true;\n  }\n};\nvar Node = class extends EventTarget2 {\n};\nvar ResizeObserver = class {\n  observe() {\n  }\n  unobserve() {\n  }\n  disconnect() {\n  }\n};\nvar documentShim = {\n  createElement: function() {\n    return new globalThisShim.HTMLElement();\n  },\n  createElementNS: function() {\n    return new globalThisShim.HTMLElement();\n  },\n  addEventListener() {\n  },\n  removeEventListener() {\n  },\n  /**\n   *\n   * @param {Event} event\n   * @returns {boolean}\n   */\n  dispatchEvent(event) {\n    return false;\n  }\n};\nvar globalThisShim = {\n  ResizeObserver,\n  document: documentShim,\n  Node,\n  HTMLElement: class HTMLElement2 extends Node {\n  },\n  DocumentFragment: class DocumentFragment2 extends EventTarget2 {\n  },\n  customElements: {\n    get: function() {\n    },\n    define: function() {\n    },\n    whenDefined: function() {\n    }\n  },\n  localStorage: {\n    /**\n     * @param {string} key\n     * @returns {string|null}\n     */\n    getItem(key) {\n      return null;\n    },\n    /**\n     * @param {string} key\n     * @param {string} value\n     */\n    setItem(key, value) {\n    },\n    // eslint-disable-line no-unused-vars\n    /**\n     * @param {string} key\n     */\n    removeItem(key) {\n    }\n    // eslint-disable-line no-unused-vars\n  },\n  CustomEvent: function CustomEvent2() {\n  },\n  getComputedStyle: function() {\n  },\n  navigator: {\n    languages: [],\n    get userAgent() {\n      return \"\";\n    }\n  },\n  /**\n   * @param {string} media\n   */\n  matchMedia(media) {\n    return {\n      matches: false,\n      media\n    };\n  }\n};\nvar isServer = typeof window === \"undefined\" || typeof window.customElements === \"undefined\";\nvar isShimmed = Object.keys(globalThisShim).every((key) => key in globalThis);\nvar GlobalThis = isServer && !isShimmed ? globalThisShim : globalThis;\nvar Document2 = isServer && !isShimmed ? documentShim : globalThis.document;\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/resize-observer.js\nvar callbacksMap = /* @__PURE__ */ new WeakMap();\nvar getCallbacks = (element) => {\n  let callbacks = callbacksMap.get(element);\n  if (!callbacks)\n    callbacksMap.set(element, callbacks = /* @__PURE__ */ new Set());\n  return callbacks;\n};\nvar observer = new GlobalThis.ResizeObserver((entries) => {\n  for (let entry of entries) {\n    for (let callback of getCallbacks(entry.target)) {\n      callback(entry);\n    }\n  }\n});\nfunction observeResize(element, callback) {\n  getCallbacks(element).add(callback);\n  observer.observe(element);\n}\nfunction unobserveResize(element, callback) {\n  const callbacks = getCallbacks(element);\n  callbacks.delete(callback);\n  if (!callbacks.size) {\n    observer.unobserve(element);\n  }\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/element-utils.js\nfunction getMediaController(host) {\n  var _a3;\n  return (_a3 = getAttributeMediaController(host)) != null ? _a3 : closestComposedNode(host, \"media-controller\");\n}\nfunction getAttributeMediaController(host) {\n  var _a3;\n  const { MEDIA_CONTROLLER } = MediaStateReceiverAttributes;\n  const mediaControllerId = host.getAttribute(MEDIA_CONTROLLER);\n  if (mediaControllerId) {\n    return (\n      /** @type MediaController */\n      /** @type {unknown} */\n      (_a3 = getDocumentOrShadowRoot(host)) == null ? void 0 : _a3.getElementById(mediaControllerId)\n    );\n  }\n}\nvar updateIconText = (svg, value, selector = \".value\") => {\n  const node = svg.querySelector(selector);\n  if (!node)\n    return;\n  node.textContent = value;\n};\nvar getAllSlotted = (el, name) => {\n  const slotSelector = `slot[name=\"${name}\"]`;\n  const slot = el.shadowRoot.querySelector(slotSelector);\n  if (!slot)\n    return [];\n  return slot.children;\n};\nvar getSlotted = (el, name) => getAllSlotted(el, name)[0];\nvar containsComposedNode = (rootNode, childNode) => {\n  if (!rootNode || !childNode)\n    return false;\n  if (rootNode == null ? void 0 : rootNode.contains(childNode))\n    return true;\n  return containsComposedNode(\n    rootNode,\n    /** @type {ShadowRoot} */\n    childNode.getRootNode().host\n  );\n};\nvar closestComposedNode = (childNode, selector) => {\n  if (!childNode)\n    return null;\n  const closest = childNode.closest(selector);\n  if (closest)\n    return closest;\n  return closestComposedNode(childNode.getRootNode().host, selector);\n};\nfunction getActiveElement(root = document) {\n  var _a3;\n  const activeEl = root == null ? void 0 : root.activeElement;\n  if (!activeEl)\n    return null;\n  return (_a3 = getActiveElement(activeEl.shadowRoot)) != null ? _a3 : activeEl;\n}\nfunction getDocumentOrShadowRoot(node) {\n  var _a3;\n  const rootNode = (_a3 = node == null ? void 0 : node.getRootNode) == null ? void 0 : _a3.call(node);\n  if (rootNode instanceof ShadowRoot || rootNode instanceof Document) {\n    return rootNode;\n  }\n  return null;\n}\nfunction isElementVisible(element, depth = 3) {\n  if (element.checkVisibility) {\n    return element.checkVisibility({\n      checkOpacity: true,\n      checkVisibilityCSS: true\n    });\n  }\n  let el = element;\n  while (el && depth > 0) {\n    const style = getComputedStyle(el);\n    if (style.opacity === \"0\" || style.visibility === \"hidden\" || style.display === \"none\") {\n      return false;\n    }\n    el = el.parentElement;\n    depth--;\n  }\n  return true;\n}\nfunction getPointProgressOnLine(x4, y5, p1, p22) {\n  const segment = distance(p1, p22);\n  const toStart = distance(p1, { x: x4, y: y5 });\n  const toEnd = distance(p22, { x: x4, y: y5 });\n  if (toStart > segment || toEnd > segment) {\n    return toStart > toEnd ? 1 : 0;\n  }\n  return toStart / segment;\n}\nfunction distance(p1, p22) {\n  return Math.sqrt(Math.pow(p22.x - p1.x, 2) + Math.pow(p22.y - p1.y, 2));\n}\nfunction getOrInsertCSSRule(styleParent, selectorText) {\n  const cssRule = getCSSRule(styleParent, (st4) => st4 === selectorText);\n  if (cssRule)\n    return cssRule;\n  return insertCSSRule(styleParent, selectorText);\n}\nfunction getCSSRule(styleParent, predicate) {\n  var _a3;\n  let style;\n  for (style of styleParent.querySelectorAll(\"style\")) {\n    let cssRules;\n    try {\n      cssRules = (_a3 = style.sheet) == null ? void 0 : _a3.cssRules;\n    } catch (e) {\n      continue;\n    }\n    for (let rule of cssRules != null ? cssRules : []) {\n      if (predicate(rule.selectorText))\n        return rule;\n    }\n  }\n}\nfunction insertCSSRule(styleParent, selectorText) {\n  var _a3, _b;\n  const styles = (_a3 = styleParent.querySelectorAll(\"style\")) != null ? _a3 : [];\n  const style = styles == null ? void 0 : styles[styles.length - 1];\n  if (!(style == null ? void 0 : style.sheet)) {\n    console.warn(\n      \"Media Chrome: No style sheet found on style tag of\",\n      styleParent\n    );\n    return {\n      // @ts-ignore\n      style: {\n        setProperty: () => {\n        },\n        removeProperty: () => \"\",\n        getPropertyValue: () => \"\"\n      }\n    };\n  }\n  style == null ? void 0 : style.sheet.insertRule(`${selectorText}{}`, style.sheet.cssRules.length);\n  return (\n    /** @type {CSSStyleRule} */\n    (_b = style.sheet.cssRules) == null ? void 0 : _b[style.sheet.cssRules.length - 1]\n  );\n}\nfunction getNumericAttr(el, attrName, defaultValue = Number.NaN) {\n  const attrVal = el.getAttribute(attrName);\n  return attrVal != null ? +attrVal : defaultValue;\n}\nfunction setNumericAttr(el, attrName, value) {\n  const nextNumericValue = +value;\n  if (value == null || Number.isNaN(nextNumericValue)) {\n    if (el.hasAttribute(attrName)) {\n      el.removeAttribute(attrName);\n    }\n    return;\n  }\n  if (getNumericAttr(el, attrName, void 0) === nextNumericValue)\n    return;\n  el.setAttribute(attrName, `${nextNumericValue}`);\n}\nfunction getBooleanAttr(el, attrName) {\n  return el.hasAttribute(attrName);\n}\nfunction setBooleanAttr(el, attrName, value) {\n  if (value == null) {\n    if (el.hasAttribute(attrName)) {\n      el.removeAttribute(attrName);\n    }\n    return;\n  }\n  if (getBooleanAttr(el, attrName) == value)\n    return;\n  el.toggleAttribute(attrName, value);\n}\nfunction getStringAttr(el, attrName, defaultValue = null) {\n  var _a3;\n  return (_a3 = el.getAttribute(attrName)) != null ? _a3 : defaultValue;\n}\nfunction setStringAttr(el, attrName, value) {\n  if (value == null) {\n    if (el.hasAttribute(attrName)) {\n      el.removeAttribute(attrName);\n    }\n    return;\n  }\n  const nextValue = `${value}`;\n  if (getStringAttr(el, attrName, void 0) === nextValue)\n    return;\n  el.setAttribute(attrName, nextValue);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-gesture-receiver.js\nvar __accessCheck = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n  __accessCheck(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n  __accessCheck(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController;\nvar template = Document2.createElement(\"template\");\ntemplate.innerHTML = /*html*/\n`\n<style>\n  :host {\n    display: var(--media-control-display, var(--media-gesture-receiver-display, inline-block));\n    box-sizing: border-box;\n  }\n</style>\n`;\nvar MediaGestureReceiver = class extends GlobalThis.HTMLElement {\n  constructor(options = {}) {\n    super();\n    __privateAdd(this, _mediaController, void 0);\n    if (!this.shadowRoot) {\n      const shadow = this.attachShadow({ mode: \"open\" });\n      const buttonHTML = template.content.cloneNode(true);\n      this.nativeEl = buttonHTML;\n      let slotTemplate20 = options.slotTemplate;\n      if (!slotTemplate20) {\n        slotTemplate20 = Document2.createElement(\"template\");\n        slotTemplate20.innerHTML = `<slot>${options.defaultContent || \"\"}</slot>`;\n      }\n      this.nativeEl.appendChild(slotTemplate20.content.cloneNode(true));\n      shadow.appendChild(buttonHTML);\n    }\n  }\n  // NOTE: Currently \"baking in\" actions + attrs until we come up with\n  // a more robust architecture (CJP)\n  static get observedAttributes() {\n    return [\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n      MediaUIAttributes.MEDIA_PAUSED\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet(this, _mediaController)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet(this, _mediaController, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet(this, _mediaController, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c, _d;\n    this.tabIndex = -1;\n    this.setAttribute(\"aria-hidden\", \"true\");\n    __privateSet(this, _mediaController, getMediaControllerEl(this));\n    if (this.getAttribute(MediaStateReceiverAttributes.MEDIA_CONTROLLER)) {\n      (_b = (_a3 = __privateGet(this, _mediaController)) == null ? void 0 : _a3.associateElement) == null ? void 0 : _b.call(_a3, this);\n    }\n    (_c = __privateGet(this, _mediaController)) == null ? void 0 : _c.addEventListener(\"pointerdown\", this);\n    (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.addEventListener(\"click\", this);\n  }\n  disconnectedCallback() {\n    var _a3, _b, _c, _d;\n    if (this.getAttribute(MediaStateReceiverAttributes.MEDIA_CONTROLLER)) {\n      (_b = (_a3 = __privateGet(this, _mediaController)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    }\n    (_c = __privateGet(this, _mediaController)) == null ? void 0 : _c.removeEventListener(\"pointerdown\", this);\n    (_d = __privateGet(this, _mediaController)) == null ? void 0 : _d.removeEventListener(\"click\", this);\n    __privateSet(this, _mediaController, null);\n  }\n  handleEvent(event) {\n    var _a3;\n    const composedTarget = (_a3 = event.composedPath()) == null ? void 0 : _a3[0];\n    const allowList = [\"video\", \"media-controller\"];\n    if (!allowList.includes(composedTarget == null ? void 0 : composedTarget.localName))\n      return;\n    if (event.type === \"pointerdown\") {\n      this._pointerType = event.pointerType;\n    } else if (event.type === \"click\") {\n      const { clientX, clientY } = event;\n      const { left, top, width, height } = this.getBoundingClientRect();\n      const x4 = clientX - left;\n      const y5 = clientY - top;\n      if (x4 < 0 || y5 < 0 || x4 > width || y5 > height || // In case this element has no dimensions (or display: none) return.\n      width === 0 && height === 0) {\n        return;\n      }\n      const { pointerType = this._pointerType } = event;\n      this._pointerType = void 0;\n      if (pointerType === PointerTypes.TOUCH) {\n        this.handleTap(event);\n        return;\n      } else if (pointerType === PointerTypes.MOUSE) {\n        this.handleMouseClick(event);\n        return;\n      }\n    }\n  }\n  /**\n   * @type {boolean} Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  // NOTE: Currently \"baking in\" actions + attrs until we come up with\n  // a more robust architecture (CJP)\n  /**\n   * @abstract\n   * @argument {Event} e\n   */\n  handleTap(e) {\n  }\n  // eslint-disable-line\n  // eslint-disable-next-line\n  handleMouseClick(e) {\n    const eventName = this.mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n};\n_mediaController = /* @__PURE__ */ new WeakMap();\nfunction getMediaControllerEl(controlEl) {\n  var _a3;\n  const mediaControllerId = controlEl.getAttribute(\n    MediaStateReceiverAttributes.MEDIA_CONTROLLER\n  );\n  if (mediaControllerId) {\n    return (_a3 = controlEl.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId);\n  }\n  return closestComposedNode(controlEl, \"media-controller\");\n}\nif (!GlobalThis.customElements.get(\"media-gesture-receiver\")) {\n  GlobalThis.customElements.define(\n    \"media-gesture-receiver\",\n    MediaGestureReceiver\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-container.js\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n  __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck2 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet2 = (obj, member, getter) => {\n  __accessCheck2(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd2 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet2 = (obj, member, value, setter) => {\n  __accessCheck2(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod = (obj, member, method) => {\n  __accessCheck2(obj, member, \"access private method\");\n  return method;\n};\nvar _pointerDownTimeStamp;\nvar _currentMedia;\nvar _handlePointerMove;\nvar handlePointerMove_fn;\nvar _handlePointerUp;\nvar handlePointerUp_fn;\nvar _setInactive;\nvar setInactive_fn;\nvar _setActive;\nvar setActive_fn;\nvar _scheduleInactive;\nvar scheduleInactive_fn;\nvar Attributes = {\n  AUDIO: \"audio\",\n  AUTOHIDE: \"autohide\",\n  BREAKPOINTS: \"breakpoints\",\n  GESTURES_DISABLED: \"gesturesdisabled\",\n  KEYBOARD_CONTROL: \"keyboardcontrol\",\n  NO_AUTOHIDE: \"noautohide\",\n  USER_INACTIVE: \"userinactive\"\n};\nvar template2 = Document2.createElement(\"template\");\ntemplate2.innerHTML = /*html*/\n`\n  <style>\n    ${/*\n* outline on media is turned off because it is allowed to get focus to faciliate hotkeys.\n* However, on keyboard interactions, the focus outline is shown,\n* which is particularly noticeable when going fullscreen via hotkeys.\n*/\n\"\"}\n    :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) ::slotted([slot=media]) {\n      outline: none;\n    }\n\n    :host {\n      box-sizing: border-box;\n      position: relative;\n      display: inline-block;\n      line-height: 0;\n      background-color: var(--media-background-color, #000);\n    }\n\n    :host(:not([${Attributes.AUDIO}])) [part~=layer]:not([part~=media-layer]) {\n      position: absolute;\n      top: 0;\n      left: 0;\n      bottom: 0;\n      right: 0;\n      display: flex;\n      flex-flow: column nowrap;\n      align-items: start;\n      pointer-events: none;\n      background: none;\n    }\n\n    slot[name=media] {\n      display: var(--media-slot-display, contents);\n    }\n\n    ${/*\n* when in audio mode, hide the slotted media element by default\n*/\n\"\"}\n    :host([${Attributes.AUDIO}]) slot[name=media] {\n      display: var(--media-slot-display, none);\n    }\n\n    ${/*\n* when in audio mode, hide the gesture-layer which causes media-controller to be taller than the control bar\n*/\n\"\"}\n    :host([${Attributes.AUDIO}]) [part~=layer][part~=gesture-layer] {\n      height: 0;\n      display: block;\n    }\n\n    ${/*\n* if gestures are disabled, don't accept pointer-events\n*/\n\"\"}\n    :host(:not([${Attributes.AUDIO}])[${Attributes.GESTURES_DISABLED}]) ::slotted([slot=gestures-chrome]),\n    :host(:not([${Attributes.AUDIO}])[${Attributes.GESTURES_DISABLED}]) media-gesture-receiver[slot=gestures-chrome] {\n      display: none;\n    }\n\n    ${/*\n* any slotted element that isn't a poster or media slot should be pointer-events auto\n* we'll want to add here any slotted elements that shouldn't get pointer-events by default when slotted\n*/\n\"\"}\n    ::slotted(:not([slot=media]):not([slot=poster]):not(media-loading-indicator):not([hidden])) {\n      pointer-events: auto;\n    }\n\n    :host(:not([${Attributes.AUDIO}])) *[part~=layer][part~=centered-layer] {\n      align-items: center;\n      justify-content: center;\n    }\n\n    :host(:not([${Attributes.AUDIO}])) ::slotted(media-gesture-receiver[slot=gestures-chrome]),\n    :host(:not([${Attributes.AUDIO}])) media-gesture-receiver[slot=gestures-chrome] {\n      align-self: stretch;\n      flex-grow: 1;\n    }\n\n    slot[name=middle-chrome] {\n      display: inline;\n      flex-grow: 1;\n      pointer-events: none;\n      background: none;\n    }\n\n    ${/* Position the media and poster elements to fill the container */\n\"\"}\n    ::slotted([slot=media]),\n    ::slotted([slot=poster]) {\n      width: 100%;\n      height: 100%;\n    }\n\n    ${/* Video specific styles */\n\"\"}\n    :host(:not([${Attributes.AUDIO}])) .spacer {\n      flex-grow: 1;\n    }\n\n    ${/* Safari needs this to actually make the element fill the window */\n\"\"}\n    :host(:-webkit-full-screen) {\n      ${/* Needs to use !important otherwise easy to break */\n\"\"}\n      width: 100% !important;\n      height: 100% !important;\n    }\n\n    ${/* Only add these if auto hide is not disabled */\n\"\"}\n    ::slotted(:not([slot=media]):not([slot=poster]):not([${Attributes.NO_AUTOHIDE}]):not([hidden])) {\n      opacity: 1;\n      transition: opacity 0.25s;\n    }\n\n    ${/* Hide controls when inactive, not paused, not audio and auto hide not disabled */\n\"\"}\n    :host([${Attributes.USER_INACTIVE}]:not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) ::slotted(:not([slot=media]):not([slot=poster]):not([${Attributes.NO_AUTOHIDE}])) {\n      opacity: 0;\n      transition: opacity 1s;\n    }\n\n    :host([${Attributes.USER_INACTIVE}]:not([${MediaUIAttributes.MEDIA_PAUSED}]):not([${MediaUIAttributes.MEDIA_IS_CASTING}]):not([${Attributes.AUDIO}])) ::slotted([slot=media]) {\n      cursor: none;\n    }\n\n    ::slotted(media-control-bar)  {\n      align-self: stretch;\n    }\n\n    ${/* ::slotted([slot=poster]) doesn't work for slot fallback content so hide parent slot instead */\n\"\"}\n    :host(:not([${Attributes.AUDIO}])[${MediaUIAttributes.MEDIA_HAS_PLAYED}]) slot[name=poster] {\n      display: none;\n    }\n\n    ::slotted([role=\"menu\"]) {\n      align-self: end;\n    }\n\n    ::slotted([role=\"dialog\"]) {\n      align-self: center;\n    }\n  </style>\n\n  <slot name=\"media\" part=\"layer media-layer\"></slot>\n  <slot name=\"poster\" part=\"layer poster-layer\"></slot>\n  <slot name=\"gestures-chrome\" part=\"layer gesture-layer\">\n    <media-gesture-receiver slot=\"gestures-chrome\"></media-gesture-receiver>\n  </slot>\n  <span part=\"layer vertical-layer\">\n    <slot name=\"top-chrome\" part=\"top chrome\"></slot>\n    <slot name=\"middle-chrome\" part=\"middle chrome\"></slot>\n    <slot name=\"centered-chrome\" part=\"layer centered-layer center centered chrome\"></slot>\n    ${/* default, effectively \"bottom-chrome\" */\n\"\"}\n    <slot part=\"bottom chrome\"></slot>\n  </span>\n`;\nvar MEDIA_UI_ATTRIBUTE_NAMES = Object.values(MediaUIAttributes);\nvar defaultBreakpoints = \"sm:384 md:576 lg:768 xl:960\";\nfunction resizeCallback(entry) {\n  setBreakpoints(entry.target, entry.contentRect.width);\n}\nfunction setBreakpoints(container, width) {\n  var _a3;\n  if (!container.isConnected)\n    return;\n  const breakpoints = (_a3 = container.getAttribute(Attributes.BREAKPOINTS)) != null ? _a3 : defaultBreakpoints;\n  const ranges = createBreakpointMap(breakpoints);\n  const activeBreakpoints = getBreakpoints(ranges, width);\n  let changed = false;\n  Object.keys(ranges).forEach((name) => {\n    if (activeBreakpoints.includes(name)) {\n      if (!container.hasAttribute(`breakpoint${name}`)) {\n        container.setAttribute(`breakpoint${name}`, \"\");\n        changed = true;\n      }\n      return;\n    }\n    if (container.hasAttribute(`breakpoint${name}`)) {\n      container.removeAttribute(`breakpoint${name}`);\n      changed = true;\n    }\n  });\n  if (changed) {\n    const evt = new CustomEvent(MediaStateChangeEvents.BREAKPOINTS_CHANGE, {\n      detail: activeBreakpoints\n    });\n    container.dispatchEvent(evt);\n  }\n}\nfunction createBreakpointMap(breakpoints) {\n  const pairs = breakpoints.split(/\\s+/);\n  return Object.fromEntries(pairs.map((pair) => pair.split(\":\")));\n}\nfunction getBreakpoints(breakpoints, width) {\n  return Object.keys(breakpoints).filter((name) => {\n    return width >= breakpoints[name];\n  });\n}\nvar MediaContainer = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd2(this, _handlePointerMove);\n    __privateAdd2(this, _handlePointerUp);\n    __privateAdd2(this, _setInactive);\n    __privateAdd2(this, _setActive);\n    __privateAdd2(this, _scheduleInactive);\n    __privateAdd2(this, _pointerDownTimeStamp, 0);\n    __privateAdd2(this, _currentMedia, void 0);\n    __publicField(this, \"breakpointsComputed\", false);\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template2.content.cloneNode(true));\n    }\n    const mutationCallback = (mutationsList) => {\n      const media = this.media;\n      for (let mutation of mutationsList) {\n        if (mutation.type === \"childList\") {\n          mutation.removedNodes.forEach((node) => {\n            if (node.slot == \"media\" && mutation.target == this) {\n              let previousSibling = mutation.previousSibling && mutation.previousSibling.previousElementSibling;\n              if (!previousSibling || !media) {\n                this.mediaUnsetCallback(node);\n              } else {\n                let wasFirst = previousSibling.slot !== \"media\";\n                while ((previousSibling = previousSibling.previousSibling) !== null) {\n                  if (previousSibling.slot == \"media\")\n                    wasFirst = false;\n                }\n                if (wasFirst)\n                  this.mediaUnsetCallback(node);\n              }\n            }\n          });\n          if (media) {\n            mutation.addedNodes.forEach((node) => {\n              if (node === media) {\n                this.handleMediaUpdated(media);\n              }\n            });\n          }\n        }\n      }\n    };\n    const mutationObserver = new MutationObserver(mutationCallback);\n    mutationObserver.observe(this, { childList: true, subtree: true });\n    let pendingResizeCb = false;\n    const deferResizeCallback = (entry) => {\n      if (pendingResizeCb)\n        return;\n      setTimeout(() => {\n        resizeCallback(entry);\n        pendingResizeCb = false;\n        if (!this.breakpointsComputed) {\n          this.breakpointsComputed = true;\n          this.dispatchEvent(\n            new CustomEvent(MediaStateChangeEvents.BREAKPOINTS_COMPUTED, {\n              bubbles: true,\n              composed: true\n            })\n          );\n        }\n      }, 0);\n      pendingResizeCb = true;\n    };\n    observeResize(this, deferResizeCallback);\n    let chainedSlot = this.querySelector(\":scope > slot[slot=media]\");\n    if (chainedSlot) {\n      chainedSlot.addEventListener(\"slotchange\", () => {\n        const slotEls = chainedSlot.assignedElements({ flatten: true });\n        if (!slotEls.length) {\n          if (__privateGet2(this, _currentMedia)) {\n            this.mediaUnsetCallback(__privateGet2(this, _currentMedia));\n          }\n          return;\n        }\n        this.handleMediaUpdated(this.media);\n      });\n    }\n  }\n  static get observedAttributes() {\n    return [Attributes.AUTOHIDE, Attributes.GESTURES_DISABLED].concat(MEDIA_UI_ATTRIBUTE_NAMES).filter(\n      (name) => ![\n        MediaUIAttributes.MEDIA_RENDITION_LIST,\n        MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST,\n        MediaUIAttributes.MEDIA_CHAPTERS_CUES\n      ].includes(name)\n    );\n  }\n  // Could share this code with media-chrome-html-element instead\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName.toLowerCase() == Attributes.AUTOHIDE) {\n      this.autohide = newValue;\n    }\n  }\n  // First direct child with slot=media, or null\n  /**\n   * @returns {HTMLVideoElement &\n   * {buffered,\n   * webkitEnterFullscreen?,\n   * webkitExitFullscreen?,\n   * requestCast?,\n   * webkitShowPlaybackTargetPicker?,\n   * videoTracks?,\n   * }}\n   */\n  get media() {\n    let media = this.querySelector(\":scope > [slot=media]\");\n    if ((media == null ? void 0 : media.nodeName) == \"SLOT\")\n      media = media.assignedElements({ flatten: true })[0];\n    return media;\n  }\n  /**\n   * @param {HTMLMediaElement} media\n   */\n  handleMediaUpdated(media) {\n    return __async(this, null, function* () {\n      if (!media)\n        return;\n      __privateSet2(this, _currentMedia, media);\n      if (media.localName.includes(\"-\")) {\n        yield GlobalThis.customElements.whenDefined(media.localName);\n      }\n      this.mediaSetCallback(media);\n    });\n  }\n  connectedCallback() {\n    var _a3;\n    const isAudioChrome = this.getAttribute(Attributes.AUDIO) != null;\n    const label = isAudioChrome ? nouns.AUDIO_PLAYER() : nouns.VIDEO_PLAYER();\n    this.setAttribute(\"role\", \"region\");\n    this.setAttribute(\"aria-label\", label);\n    this.handleMediaUpdated(this.media);\n    this.setAttribute(Attributes.USER_INACTIVE, \"\");\n    this.addEventListener(\"pointerdown\", this);\n    this.addEventListener(\"pointermove\", this);\n    this.addEventListener(\"pointerup\", this);\n    this.addEventListener(\"mouseleave\", this);\n    this.addEventListener(\"keyup\", this);\n    (_a3 = GlobalThis.window) == null ? void 0 : _a3.addEventListener(\"mouseup\", this);\n  }\n  disconnectedCallback() {\n    var _a3;\n    if (this.media) {\n      this.mediaUnsetCallback(this.media);\n    }\n    (_a3 = GlobalThis.window) == null ? void 0 : _a3.removeEventListener(\"mouseup\", this);\n  }\n  /**\n   * @abstract\n   * @param {HTMLMediaElement} media\n   */\n  mediaSetCallback(media) {\n  }\n  // eslint-disable-line\n  /**\n   * @param {HTMLMediaElement} media\n   */\n  mediaUnsetCallback(media) {\n    __privateSet2(this, _currentMedia, null);\n  }\n  handleEvent(event) {\n    switch (event.type) {\n      case \"pointerdown\":\n        __privateSet2(this, _pointerDownTimeStamp, event.timeStamp);\n        break;\n      case \"pointermove\":\n        __privateMethod(this, _handlePointerMove, handlePointerMove_fn).call(this, event);\n        break;\n      case \"pointerup\":\n        __privateMethod(this, _handlePointerUp, handlePointerUp_fn).call(this, event);\n        break;\n      case \"mouseleave\":\n        __privateMethod(this, _setInactive, setInactive_fn).call(this);\n        break;\n      case \"mouseup\":\n        this.removeAttribute(Attributes.KEYBOARD_CONTROL);\n        break;\n      case \"keyup\":\n        __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n        this.setAttribute(Attributes.KEYBOARD_CONTROL, \"\");\n        break;\n    }\n  }\n  set autohide(seconds) {\n    seconds = Number(seconds);\n    this._autohide = isNaN(seconds) ? 0 : seconds;\n  }\n  get autohide() {\n    return this._autohide === void 0 ? 2 : this._autohide;\n  }\n};\n_pointerDownTimeStamp = /* @__PURE__ */ new WeakMap();\n_currentMedia = /* @__PURE__ */ new WeakMap();\n_handlePointerMove = /* @__PURE__ */ new WeakSet();\nhandlePointerMove_fn = function(event) {\n  if (event.pointerType !== \"mouse\") {\n    const MAX_TAP_DURATION = 250;\n    if (event.timeStamp - __privateGet2(this, _pointerDownTimeStamp) < MAX_TAP_DURATION)\n      return;\n  }\n  __privateMethod(this, _setActive, setActive_fn).call(this);\n  clearTimeout(this._inactiveTimeout);\n  if ([this, this.media].includes(event.target)) {\n    __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n  }\n};\n_handlePointerUp = /* @__PURE__ */ new WeakSet();\nhandlePointerUp_fn = function(event) {\n  if (event.pointerType === \"touch\") {\n    const controlsVisible = !this.hasAttribute(Attributes.USER_INACTIVE);\n    if ([this, this.media].includes(event.target) && controlsVisible) {\n      __privateMethod(this, _setInactive, setInactive_fn).call(this);\n    } else {\n      __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n    }\n  } else if (event.composedPath().some(\n    (el) => [\"media-play-button\", \"media-fullscreen-button\"].includes(\n      el == null ? void 0 : el.localName\n    )\n  )) {\n    __privateMethod(this, _scheduleInactive, scheduleInactive_fn).call(this);\n  }\n};\n_setInactive = /* @__PURE__ */ new WeakSet();\nsetInactive_fn = function() {\n  if (this.autohide < 0)\n    return;\n  if (this.hasAttribute(Attributes.USER_INACTIVE))\n    return;\n  this.setAttribute(Attributes.USER_INACTIVE, \"\");\n  const evt = new GlobalThis.CustomEvent(\n    MediaStateChangeEvents.USER_INACTIVE,\n    { composed: true, bubbles: true, detail: true }\n  );\n  this.dispatchEvent(evt);\n};\n_setActive = /* @__PURE__ */ new WeakSet();\nsetActive_fn = function() {\n  if (!this.hasAttribute(Attributes.USER_INACTIVE))\n    return;\n  this.removeAttribute(Attributes.USER_INACTIVE);\n  const evt = new GlobalThis.CustomEvent(\n    MediaStateChangeEvents.USER_INACTIVE,\n    { composed: true, bubbles: true, detail: false }\n  );\n  this.dispatchEvent(evt);\n};\n_scheduleInactive = /* @__PURE__ */ new WeakSet();\nscheduleInactive_fn = function() {\n  __privateMethod(this, _setActive, setActive_fn).call(this);\n  clearTimeout(this._inactiveTimeout);\n  if (this.autohide < 0)\n    return;\n  this._inactiveTimeout = setTimeout(() => {\n    __privateMethod(this, _setInactive, setInactive_fn).call(this);\n  }, this.autohide * 1e3);\n};\nif (!GlobalThis.customElements.get(\"media-container\")) {\n  GlobalThis.customElements.define(\"media-container\", MediaContainer);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/attribute-token-list.js\nvar __accessCheck3 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet3 = (obj, member, getter) => {\n  __accessCheck3(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd3 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet3 = (obj, member, value, setter) => {\n  __accessCheck3(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _el;\nvar _attr;\nvar _defaultSet;\nvar _tokenSet;\nvar _tokens;\nvar tokens_get;\nvar AttributeTokenList = class {\n  constructor(el, attr, { defaultValue } = { defaultValue: void 0 }) {\n    __privateAdd3(this, _tokens);\n    __privateAdd3(this, _el, void 0);\n    __privateAdd3(this, _attr, void 0);\n    __privateAdd3(this, _defaultSet, void 0);\n    __privateAdd3(this, _tokenSet, /* @__PURE__ */ new Set());\n    __privateSet3(this, _el, el);\n    __privateSet3(this, _attr, attr);\n    __privateSet3(this, _defaultSet, new Set(defaultValue));\n  }\n  [Symbol.iterator]() {\n    return __privateGet3(this, _tokens, tokens_get).values();\n  }\n  get length() {\n    return __privateGet3(this, _tokens, tokens_get).size;\n  }\n  get value() {\n    var _a3;\n    return (_a3 = [...__privateGet3(this, _tokens, tokens_get)].join(\" \")) != null ? _a3 : \"\";\n  }\n  set value(val) {\n    var _a3;\n    if (val === this.value)\n      return;\n    __privateSet3(this, _tokenSet, /* @__PURE__ */ new Set());\n    this.add(...(_a3 = val == null ? void 0 : val.split(\" \")) != null ? _a3 : []);\n  }\n  toString() {\n    return this.value;\n  }\n  item(index) {\n    return [...__privateGet3(this, _tokens, tokens_get)][index];\n  }\n  values() {\n    return __privateGet3(this, _tokens, tokens_get).values();\n  }\n  forEach(callback) {\n    __privateGet3(this, _tokens, tokens_get).forEach(callback);\n  }\n  add(...tokens) {\n    var _a3, _b;\n    tokens.forEach((t2) => __privateGet3(this, _tokenSet).add(t2));\n    if (this.value === \"\" && !((_a3 = __privateGet3(this, _el)) == null ? void 0 : _a3.hasAttribute(`${__privateGet3(this, _attr)}`))) {\n      return;\n    }\n    (_b = __privateGet3(this, _el)) == null ? void 0 : _b.setAttribute(`${__privateGet3(this, _attr)}`, `${this.value}`);\n  }\n  remove(...tokens) {\n    var _a3;\n    tokens.forEach((t2) => __privateGet3(this, _tokenSet).delete(t2));\n    (_a3 = __privateGet3(this, _el)) == null ? void 0 : _a3.setAttribute(`${__privateGet3(this, _attr)}`, `${this.value}`);\n  }\n  contains(token) {\n    return __privateGet3(this, _tokens, tokens_get).has(token);\n  }\n  toggle(token, force) {\n    if (typeof force !== \"undefined\") {\n      if (force) {\n        this.add(token);\n        return true;\n      } else {\n        this.remove(token);\n        return false;\n      }\n    }\n    if (this.contains(token)) {\n      this.remove(token);\n      return false;\n    }\n    this.add(token);\n    return true;\n  }\n  replace(oldToken, newToken) {\n    this.remove(oldToken);\n    this.add(newToken);\n    return oldToken === newToken;\n  }\n};\n_el = /* @__PURE__ */ new WeakMap();\n_attr = /* @__PURE__ */ new WeakMap();\n_defaultSet = /* @__PURE__ */ new WeakMap();\n_tokenSet = /* @__PURE__ */ new WeakMap();\n_tokens = /* @__PURE__ */ new WeakSet();\ntokens_get = function() {\n  return __privateGet3(this, _tokenSet).size ? __privateGet3(this, _tokenSet) : __privateGet3(this, _defaultSet);\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/captions.js\nvar splitTextTracksStr = (textTracksStr = \"\") => textTracksStr.split(/\\s+/);\nvar parseTextTrackStr = (textTrackStr = \"\") => {\n  let [kind, language, encodedLabel] = textTrackStr.split(\":\");\n  const label = encodedLabel ? decodeURIComponent(encodedLabel) : void 0;\n  kind = kind === \"cc\" ? \"captions\" : \"subtitles\";\n  return {\n    kind,\n    language,\n    label\n  };\n};\nvar parseTextTracksStr = (textTracksStr = \"\", textTrackLikeObj = {}) => {\n  return splitTextTracksStr(textTracksStr).map((textTrackStr) => {\n    const textTrackObj = parseTextTrackStr(textTrackStr);\n    return __spreadValues(__spreadValues({}, textTrackLikeObj), textTrackObj);\n  });\n};\nvar parseTracks = (trackOrTracks) => {\n  if (!trackOrTracks)\n    return [];\n  if (Array.isArray(trackOrTracks)) {\n    return trackOrTracks.map((trackObjOrStr) => {\n      if (typeof trackObjOrStr === \"string\") {\n        return parseTextTrackStr(trackObjOrStr);\n      }\n      return trackObjOrStr;\n    });\n  }\n  if (typeof trackOrTracks === \"string\") {\n    return parseTextTracksStr(trackOrTracks);\n  }\n  return [trackOrTracks];\n};\nvar formatTextTrackObj = ({ kind, label, language } = { kind: \"subtitles\" }) => {\n  if (!label)\n    return language;\n  return `${kind === \"captions\" ? \"cc\" : \"sb\"}:${language}:${encodeURIComponent(\n    label\n  )}`;\n};\nvar stringifyTextTrackList = (textTracks = []) => {\n  return Array.prototype.map.call(textTracks, formatTextTrackObj).join(\" \");\n};\nvar isMatchingPropOf = (key, value) => (obj) => obj[key] === value;\nvar textTrackObjAsPred = (filterObj) => {\n  const preds = Object.entries(filterObj).map(([key, value]) => {\n    return isMatchingPropOf(key, value);\n  });\n  return (textTrack) => preds.every((pred) => pred(textTrack));\n};\nvar updateTracksModeTo = (mode, tracks = [], tracksToUpdate = []) => {\n  const preds = parseTracks(tracksToUpdate).map(textTrackObjAsPred);\n  const isTrackToUpdate = (textTrack) => {\n    return preds.some((pred) => pred(textTrack));\n  };\n  Array.from(tracks).filter(isTrackToUpdate).forEach((textTrack) => {\n    textTrack.mode = mode;\n  });\n};\nvar getTextTracksList = (media, filterPredOrObj = () => true) => {\n  if (!(media == null ? void 0 : media.textTracks))\n    return [];\n  const filterPred = typeof filterPredOrObj === \"function\" ? filterPredOrObj : textTrackObjAsPred(filterPredOrObj);\n  return Array.from(media.textTracks).filter(filterPred);\n};\nvar areSubsOn = (el) => {\n  var _a3;\n  const showingSubtitles = !!((_a3 = el.mediaSubtitlesShowing) == null ? void 0 : _a3.length) || el.hasAttribute(MediaUIAttributes.MEDIA_SUBTITLES_SHOWING);\n  return showingSubtitles;\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/fullscreen-api.js\nvar enterFullscreen = (stateOwners) => {\n  var _a3;\n  const { media, fullscreenElement } = stateOwners;\n  const enterFullscreenKey = fullscreenElement && \"requestFullscreen\" in fullscreenElement ? \"requestFullscreen\" : fullscreenElement && \"webkitRequestFullScreen\" in fullscreenElement ? \"webkitRequestFullScreen\" : void 0;\n  if (enterFullscreenKey) {\n    const maybePromise = (_a3 = fullscreenElement[enterFullscreenKey]) == null ? void 0 : _a3.call(fullscreenElement);\n    if (maybePromise instanceof Promise) {\n      return maybePromise.catch(() => {\n      });\n    }\n  } else if (media == null ? void 0 : media.webkitEnterFullscreen) {\n    media.webkitEnterFullscreen();\n  } else if (media == null ? void 0 : media.requestFullscreen) {\n    media.requestFullscreen();\n  }\n};\nvar exitFullscreenKey = \"exitFullscreen\" in Document2 ? \"exitFullscreen\" : \"webkitExitFullscreen\" in Document2 ? \"webkitExitFullscreen\" : \"webkitCancelFullScreen\" in Document2 ? \"webkitCancelFullScreen\" : void 0;\nvar exitFullscreen = (stateOwners) => {\n  var _a3;\n  const { documentElement } = stateOwners;\n  if (exitFullscreenKey) {\n    const maybePromise = (_a3 = documentElement == null ? void 0 : documentElement[exitFullscreenKey]) == null ? void 0 : _a3.call(documentElement);\n    if (maybePromise instanceof Promise) {\n      return maybePromise.catch(() => {\n      });\n    }\n  }\n};\nvar fullscreenElementKey = \"fullscreenElement\" in Document2 ? \"fullscreenElement\" : \"webkitFullscreenElement\" in Document2 ? \"webkitFullscreenElement\" : void 0;\nvar getFullscreenElement = (stateOwners) => {\n  const { documentElement, media } = stateOwners;\n  const docFullscreenElement = documentElement == null ? void 0 : documentElement[fullscreenElementKey];\n  if (!docFullscreenElement && \"webkitDisplayingFullscreen\" in media && \"webkitPresentationMode\" in media && media.webkitDisplayingFullscreen && media.webkitPresentationMode === WebkitPresentationModes.FULLSCREEN) {\n    return media;\n  }\n  return docFullscreenElement;\n};\nvar isFullscreen = (stateOwners) => {\n  var _a3;\n  const { media, documentElement, fullscreenElement = media } = stateOwners;\n  if (!media || !documentElement)\n    return false;\n  const currentFullscreenElement = getFullscreenElement(stateOwners);\n  if (!currentFullscreenElement)\n    return false;\n  if (currentFullscreenElement === fullscreenElement || currentFullscreenElement === media) {\n    return true;\n  }\n  if (currentFullscreenElement.localName.includes(\"-\")) {\n    let currentRoot = currentFullscreenElement.shadowRoot;\n    if (!(fullscreenElementKey in currentRoot)) {\n      return containsComposedNode(\n        currentFullscreenElement,\n        /** @TODO clean up type assumptions (e.g. Node) (CJP) */\n        // @ts-ignore\n        fullscreenElement\n      );\n    }\n    while (currentRoot == null ? void 0 : currentRoot[fullscreenElementKey]) {\n      if (currentRoot[fullscreenElementKey] === fullscreenElement)\n        return true;\n      currentRoot = (_a3 = currentRoot[fullscreenElementKey]) == null ? void 0 : _a3.shadowRoot;\n    }\n  }\n  return false;\n};\nvar fullscreenEnabledKey = \"fullscreenEnabled\" in Document2 ? \"fullscreenEnabled\" : \"webkitFullscreenEnabled\" in Document2 ? \"webkitFullscreenEnabled\" : void 0;\nvar isFullscreenEnabled = (stateOwners) => {\n  const { documentElement, media } = stateOwners;\n  return !!(documentElement == null ? void 0 : documentElement[fullscreenEnabledKey]) || media && \"webkitSupportsFullscreen\" in media;\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/platform-tests.js\nvar testMediaEl;\nvar getTestMediaEl = () => {\n  var _a3, _b;\n  if (testMediaEl)\n    return testMediaEl;\n  testMediaEl = (_b = (_a3 = Document2) == null ? void 0 : _a3.createElement) == null ? void 0 : _b.call(_a3, \"video\");\n  return testMediaEl;\n};\nvar hasVolumeSupportAsync = (..._0) => __async(null, [..._0], function* (mediaEl = getTestMediaEl()) {\n  if (!mediaEl)\n    return false;\n  const prevVolume = mediaEl.volume;\n  mediaEl.volume = prevVolume / 2 + 0.1;\n  yield delay(0);\n  return mediaEl.volume !== prevVolume;\n});\nvar isSafari = /.*Version\\/.*Safari\\/.*/.test(GlobalThis.navigator.userAgent);\nvar hasPipSupport = (mediaEl = getTestMediaEl()) => {\n  if (GlobalThis.matchMedia(\"(display-mode: standalone)\").matches && isSafari)\n    return false;\n  return typeof (mediaEl == null ? void 0 : mediaEl.requestPictureInPicture) === \"function\";\n};\nvar hasFullscreenSupport = (mediaEl = getTestMediaEl()) => {\n  return isFullscreenEnabled({ documentElement: Document2, media: mediaEl });\n};\nvar fullscreenSupported = hasFullscreenSupport();\nvar pipSupported = hasPipSupport();\nvar airplaySupported = !!GlobalThis.WebKitPlaybackTargetAvailabilityEvent;\nvar castSupported = !!GlobalThis.chrome;\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-store/util.js\nvar getSubtitleTracks = (stateOwners) => {\n  return getTextTracksList(stateOwners.media, (textTrack) => {\n    return [TextTrackKinds.SUBTITLES, TextTrackKinds.CAPTIONS].includes(\n      textTrack.kind\n    );\n  }).sort((a2, b4) => a2.kind >= b4.kind ? 1 : -1);\n};\nvar getShowingSubtitleTracks = (stateOwners) => {\n  return getTextTracksList(stateOwners.media, (textTrack) => {\n    return textTrack.mode === TextTrackModes.SHOWING && [TextTrackKinds.SUBTITLES, TextTrackKinds.CAPTIONS].includes(\n      textTrack.kind\n    );\n  });\n};\nvar toggleSubtitleTracks = (stateOwners, force) => {\n  const tracks = getSubtitleTracks(stateOwners);\n  const showingSubitleTracks = getShowingSubtitleTracks(stateOwners);\n  const subtitlesShowing = !!showingSubitleTracks.length;\n  if (!tracks.length)\n    return;\n  if (force === false || subtitlesShowing && force !== true) {\n    updateTracksModeTo(TextTrackModes.DISABLED, tracks, showingSubitleTracks);\n  } else if (force === true || !subtitlesShowing && force !== false) {\n    let subTrack = tracks[0];\n    const { options } = stateOwners;\n    if (!(options == null ? void 0 : options.noSubtitlesLangPref)) {\n      const subtitlesPref = globalThis.localStorage.getItem(\n        \"media-chrome-pref-subtitles-lang\"\n      );\n      const userLangPrefs = subtitlesPref ? [subtitlesPref, ...globalThis.navigator.languages] : globalThis.navigator.languages;\n      const preferredAvailableSubs = tracks.filter((textTrack) => {\n        return userLangPrefs.some(\n          (lang) => textTrack.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n        );\n      }).sort((textTrackA, textTrackB) => {\n        const idxA = userLangPrefs.findIndex(\n          (lang) => textTrackA.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n        );\n        const idxB = userLangPrefs.findIndex(\n          (lang) => textTrackB.language.toLowerCase().startsWith(lang.split(\"-\")[0])\n        );\n        return idxA - idxB;\n      });\n      if (preferredAvailableSubs[0]) {\n        subTrack = preferredAvailableSubs[0];\n      }\n    }\n    const { language, label, kind } = subTrack;\n    updateTracksModeTo(TextTrackModes.DISABLED, tracks, showingSubitleTracks);\n    updateTracksModeTo(TextTrackModes.SHOWING, tracks, [\n      { language, label, kind }\n    ]);\n  }\n};\nvar areValuesEq = (x4, y5) => {\n  if (x4 === y5)\n    return true;\n  if (typeof x4 !== typeof y5)\n    return false;\n  if (typeof x4 === \"number\" && Number.isNaN(x4) && Number.isNaN(y5))\n    return true;\n  if (typeof x4 !== \"object\")\n    return false;\n  if (Array.isArray(x4))\n    return areArraysEq(x4, y5);\n  return Object.entries(x4).every(\n    // NOTE: Checking key in y to disambiguate between between missing keys and keys whose value are undefined (CJP)\n    ([key, value]) => key in y5 && areValuesEq(value, y5[key])\n  );\n};\nvar areArraysEq = (xs, ys) => {\n  const xIsArray = Array.isArray(xs);\n  const yIsArray = Array.isArray(ys);\n  if (xIsArray !== yIsArray)\n    return false;\n  if (!(xIsArray || yIsArray))\n    return true;\n  if (xs.length !== ys.length)\n    return false;\n  return xs.every((x4, i2) => areValuesEq(x4, ys[i2]));\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-store/state-mediator.js\nvar StreamTypeValues = (\n  /** @type {StreamTypeValue[]} */\n  Object.values(StreamTypes)\n);\nvar volumeSupported;\nvar volumeSupportPromise = hasVolumeSupportAsync().then(\n  (supported) => {\n    volumeSupported = supported;\n    return volumeSupported;\n  }\n);\nvar prepareStateOwners = (...stateOwners) => __async(null, null, function* () {\n  yield Promise.all(\n    stateOwners.filter((x4) => x4).map((stateOwner) => __async(null, null, function* () {\n      if (!(\"localName\" in stateOwner && stateOwner instanceof GlobalThis.HTMLElement)) {\n        return;\n      }\n      const name = stateOwner.localName;\n      if (!name.includes(\"-\"))\n        return;\n      const classDef = GlobalThis.customElements.get(name);\n      if (classDef && stateOwner instanceof classDef)\n        return;\n      yield GlobalThis.customElements.whenDefined(name);\n      GlobalThis.customElements.upgrade(stateOwner);\n    }))\n  );\n});\nvar stateMediator = {\n  mediaPaused: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return (_a3 = media == null ? void 0 : media.paused) != null ? _a3 : true;\n    },\n    set(value, stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (value) {\n        media.pause();\n      } else {\n        (_a3 = media.play()) == null ? void 0 : _a3.catch(() => {\n        });\n      }\n    },\n    mediaEvents: [\"play\", \"playing\", \"pause\", \"emptied\"]\n  },\n  mediaHasPlayed: {\n    // We want to let the user know that the media started playing at any point (`media-has-played`).\n    // Since these propagators are all called when boostrapping state, let's verify this is\n    // a real playing event by checking that 1) there's media and 2) it isn't currently paused.\n    get(stateOwners, event) {\n      const { media } = stateOwners;\n      if (!media)\n        return false;\n      if (!event)\n        return !media.paused;\n      return event.type === \"playing\";\n    },\n    mediaEvents: [\"playing\", \"emptied\"]\n  },\n  mediaEnded: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return (_a3 = media == null ? void 0 : media.ended) != null ? _a3 : false;\n    },\n    mediaEvents: [\"seeked\", \"ended\", \"emptied\"]\n  },\n  mediaPlaybackRate: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return (_a3 = media == null ? void 0 : media.playbackRate) != null ? _a3 : 1;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (!Number.isFinite(+value))\n        return;\n      media.playbackRate = +value;\n    },\n    mediaEvents: [\"ratechange\", \"loadstart\"]\n  },\n  mediaMuted: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return (_a3 = media == null ? void 0 : media.muted) != null ? _a3 : false;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      media.muted = value;\n    },\n    mediaEvents: [\"volumechange\"]\n  },\n  mediaVolume: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return (_a3 = media == null ? void 0 : media.volume) != null ? _a3 : 1;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      try {\n        if (value == null) {\n          GlobalThis.localStorage.removeItem(\"media-chrome-pref-volume\");\n        } else {\n          GlobalThis.localStorage.setItem(\n            \"media-chrome-pref-volume\",\n            value.toString()\n          );\n        }\n      } catch (err) {\n      }\n      if (!Number.isFinite(+value))\n        return;\n      media.volume = +value;\n    },\n    mediaEvents: [\"volumechange\"],\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        const {\n          options: { noVolumePref }\n        } = stateOwners;\n        if (noVolumePref)\n          return;\n        try {\n          const volumePref = GlobalThis.localStorage.getItem(\n            \"media-chrome-pref-volume\"\n          );\n          if (volumePref == null)\n            return;\n          stateMediator.mediaVolume.set(+volumePref, stateOwners);\n          handler(volumePref);\n        } catch (e) {\n          console.debug(\"Error getting volume pref\", e);\n        }\n      }\n    ]\n  },\n  // NOTE: Keeping this roughly equivalent to prior impl to reduce number of changes,\n  // however we may want to model \"derived\" state differently from \"primary\" state\n  // (in this case, derived === mediaVolumeLevel, primary === mediaMuted, mediaVolume) (CJP)\n  mediaVolumeLevel: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (typeof (media == null ? void 0 : media.volume) == \"undefined\")\n        return \"high\";\n      if (media.muted || media.volume === 0)\n        return \"off\";\n      if (media.volume < 0.5)\n        return \"low\";\n      if (media.volume < 0.75)\n        return \"medium\";\n      return \"high\";\n    },\n    mediaEvents: [\"volumechange\"]\n  },\n  mediaCurrentTime: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return (_a3 = media == null ? void 0 : media.currentTime) != null ? _a3 : 0;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media || media.readyState === 0)\n        return;\n      media.currentTime = value;\n    },\n    mediaEvents: [\"timeupdate\", \"loadedmetadata\"]\n  },\n  mediaDuration: {\n    get(stateOwners) {\n      const { media, options: { defaultDuration } = {} } = stateOwners;\n      if (defaultDuration && (!media || !media.duration || Number.isNaN(media.duration) || !Number.isFinite(media.duration))) {\n        return defaultDuration;\n      }\n      return Number.isFinite(media == null ? void 0 : media.duration) ? media.duration : Number.NaN;\n    },\n    mediaEvents: [\"durationchange\", \"loadedmetadata\", \"emptied\"]\n  },\n  mediaLoading: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      return (media == null ? void 0 : media.readyState) < 3;\n    },\n    mediaEvents: [\"waiting\", \"playing\", \"emptied\"]\n  },\n  mediaSeekable: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      if (!((_a3 = media == null ? void 0 : media.seekable) == null ? void 0 : _a3.length))\n        return void 0;\n      const start = media.seekable.start(0);\n      const end = media.seekable.end(media.seekable.length - 1);\n      if (!start && !end)\n        return void 0;\n      return [Number(start.toFixed(3)), Number(end.toFixed(3))];\n    },\n    mediaEvents: [\"loadedmetadata\", \"emptied\", \"progress\", \"seekablechange\"]\n  },\n  mediaBuffered: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      const timeRanges = (\n        /** @type {TimeRanges} */\n        (_a3 = media == null ? void 0 : media.buffered) != null ? _a3 : []\n      );\n      return Array.from(\n        /** @type {ArrayLike<any>} */\n        /** @type unknown */\n        timeRanges\n      ).map((_3, i2) => [\n        Number(timeRanges.start(i2).toFixed(3)),\n        Number(timeRanges.end(i2).toFixed(3))\n      ]);\n    },\n    mediaEvents: [\"progress\", \"emptied\"]\n  },\n  mediaStreamType: {\n    get(stateOwners) {\n      const { media, options: { defaultStreamType } = {} } = stateOwners;\n      const usedDefaultStreamType = [\n        StreamTypes.LIVE,\n        StreamTypes.ON_DEMAND\n      ].includes(\n        /** @type {'live'|'on-demand'} */\n        defaultStreamType\n      ) ? defaultStreamType : void 0;\n      if (!media)\n        return usedDefaultStreamType;\n      const { streamType } = media;\n      if (StreamTypeValues.includes(streamType)) {\n        if (streamType === StreamTypes.UNKNOWN) {\n          return usedDefaultStreamType;\n        }\n        return streamType;\n      }\n      const duration = media.duration;\n      if (duration === Infinity) {\n        return StreamTypes.LIVE;\n      } else if (Number.isFinite(duration)) {\n        return StreamTypes.ON_DEMAND;\n      }\n      return usedDefaultStreamType;\n    },\n    mediaEvents: [\n      \"emptied\",\n      \"durationchange\",\n      \"loadedmetadata\",\n      \"streamtypechange\"\n    ]\n  },\n  mediaTargetLiveWindow: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return Number.NaN;\n      const { targetLiveWindow } = media;\n      const streamType = stateMediator.mediaStreamType.get(stateOwners);\n      if ((targetLiveWindow == null || Number.isNaN(targetLiveWindow)) && streamType === StreamTypes.LIVE) {\n        return 0;\n      }\n      return targetLiveWindow;\n    },\n    mediaEvents: [\n      \"emptied\",\n      \"durationchange\",\n      \"loadedmetadata\",\n      \"streamtypechange\",\n      \"targetlivewindowchange\"\n    ]\n  },\n  mediaTimeIsLive: {\n    get(stateOwners) {\n      const {\n        media,\n        // Default to 10 seconds\n        options: { liveEdgeOffset = 10 } = {}\n      } = stateOwners;\n      if (!media)\n        return false;\n      if (typeof media.liveEdgeStart === \"number\") {\n        if (Number.isNaN(media.liveEdgeStart))\n          return false;\n        return media.currentTime >= media.liveEdgeStart;\n      }\n      const live = stateMediator.mediaStreamType.get(stateOwners) === StreamTypes.LIVE;\n      if (!live)\n        return false;\n      const seekable = media.seekable;\n      if (!seekable)\n        return true;\n      if (!seekable.length)\n        return false;\n      const liveEdgeStart = seekable.end(seekable.length - 1) - liveEdgeOffset;\n      return media.currentTime >= liveEdgeStart;\n    },\n    mediaEvents: [\"playing\", \"timeupdate\", \"progress\", \"waiting\", \"emptied\"]\n  },\n  // Text Tracks modeling\n  mediaSubtitlesList: {\n    get(stateOwners) {\n      return getSubtitleTracks(stateOwners).map(\n        ({ kind, label, language }) => ({ kind, label, language })\n      );\n    },\n    mediaEvents: [\"loadstart\"],\n    textTracksEvents: [\"addtrack\", \"removetrack\"]\n  },\n  mediaSubtitlesShowing: {\n    get(stateOwners) {\n      return getShowingSubtitleTracks(stateOwners).map(\n        ({ kind, label, language }) => ({ kind, label, language })\n      );\n    },\n    mediaEvents: [\"loadstart\"],\n    textTracksEvents: [\"addtrack\", \"removetrack\", \"change\"],\n    stateOwnersUpdateHandlers: [\n      (_handler, stateOwners) => {\n        var _a3, _b;\n        const { media, options } = stateOwners;\n        if (!media)\n          return;\n        const updateDefaultSubtitlesCallback = (event) => {\n          var _a22;\n          if (!options.defaultSubtitles)\n            return;\n          const nonSubsEvent = event && ![TextTrackKinds.CAPTIONS, TextTrackKinds.SUBTITLES].includes(\n            // @ts-ignore\n            (_a22 = event == null ? void 0 : event.track) == null ? void 0 : _a22.kind\n          );\n          if (nonSubsEvent)\n            return;\n          toggleSubtitleTracks(stateOwners, true);\n        };\n        (_a3 = media.textTracks) == null ? void 0 : _a3.addEventListener(\n          \"addtrack\",\n          updateDefaultSubtitlesCallback\n        );\n        (_b = media.textTracks) == null ? void 0 : _b.addEventListener(\n          \"removetrack\",\n          updateDefaultSubtitlesCallback\n        );\n        updateDefaultSubtitlesCallback();\n        return () => {\n          var _a22, _b2;\n          (_a22 = media.textTracks) == null ? void 0 : _a22.removeEventListener(\n            \"addtrack\",\n            updateDefaultSubtitlesCallback\n          );\n          (_b2 = media.textTracks) == null ? void 0 : _b2.removeEventListener(\n            \"removetrack\",\n            updateDefaultSubtitlesCallback\n          );\n        };\n      }\n    ]\n  },\n  mediaChaptersCues: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      if (!media)\n        return [];\n      const [chaptersTrack] = getTextTracksList(media, {\n        kind: TextTrackKinds.CHAPTERS\n      });\n      return Array.from((_a3 = chaptersTrack == null ? void 0 : chaptersTrack.cues) != null ? _a3 : []).map(\n        ({ text, startTime, endTime }) => ({\n          text,\n          startTime,\n          endTime\n        })\n      );\n    },\n    mediaEvents: [\"loadstart\", \"loadedmetadata\"],\n    textTracksEvents: [\"addtrack\", \"removetrack\", \"change\"],\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        const { media } = stateOwners;\n        if (!media)\n          return;\n        const chaptersTrack = media.querySelector(\n          'track[kind=\"chapters\"][default][src]'\n        );\n        chaptersTrack == null ? void 0 : chaptersTrack.addEventListener(\"load\", handler);\n        return () => {\n          chaptersTrack == null ? void 0 : chaptersTrack.removeEventListener(\"load\", handler);\n        };\n      }\n    ]\n  },\n  // Modeling state tied to root node\n  mediaIsPip: {\n    get(stateOwners) {\n      var _a3, _b;\n      const { media, documentElement } = stateOwners;\n      if (!media || !documentElement)\n        return false;\n      if (!documentElement.pictureInPictureElement)\n        return false;\n      if (documentElement.pictureInPictureElement === media)\n        return true;\n      if (documentElement.pictureInPictureElement instanceof HTMLMediaElement) {\n        if (!((_a3 = media.localName) == null ? void 0 : _a3.includes(\"-\")))\n          return false;\n        return containsComposedNode(\n          media,\n          documentElement.pictureInPictureElement\n        );\n      }\n      if (documentElement.pictureInPictureElement.localName.includes(\"-\")) {\n        let currentRoot = documentElement.pictureInPictureElement.shadowRoot;\n        while (currentRoot == null ? void 0 : currentRoot.pictureInPictureElement) {\n          if (currentRoot.pictureInPictureElement === media)\n            return true;\n          currentRoot = (_b = currentRoot.pictureInPictureElement) == null ? void 0 : _b.shadowRoot;\n        }\n      }\n      return false;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (value) {\n        if (!Document2.pictureInPictureEnabled) {\n          console.warn(\"MediaChrome: Picture-in-picture is not enabled\");\n          return;\n        }\n        if (!media.requestPictureInPicture) {\n          console.warn(\n            \"MediaChrome: The current media does not support picture-in-picture\"\n          );\n          return;\n        }\n        const warnNotReady = () => {\n          console.warn(\n            \"MediaChrome: The media is not ready for picture-in-picture. It must have a readyState > 0.\"\n          );\n        };\n        media.requestPictureInPicture().catch((err) => {\n          if (err.code === 11) {\n            if (!media.src) {\n              console.warn(\n                \"MediaChrome: The media is not ready for picture-in-picture. It must have a src set.\"\n              );\n              return;\n            }\n            if (media.readyState === 0 && media.preload === \"none\") {\n              const cleanup = () => {\n                media.removeEventListener(\"loadedmetadata\", tryPip);\n                media.preload = \"none\";\n              };\n              const tryPip = () => {\n                media.requestPictureInPicture().catch(warnNotReady);\n                cleanup();\n              };\n              media.addEventListener(\"loadedmetadata\", tryPip);\n              media.preload = \"metadata\";\n              setTimeout(() => {\n                if (media.readyState === 0)\n                  warnNotReady();\n                cleanup();\n              }, 1e3);\n            } else {\n              throw err;\n            }\n          } else {\n            throw err;\n          }\n        });\n      } else if (Document2.pictureInPictureElement) {\n        Document2.exitPictureInPicture();\n      }\n    },\n    mediaEvents: [\"enterpictureinpicture\", \"leavepictureinpicture\"]\n  },\n  mediaRenditionList: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return [...(_a3 = media == null ? void 0 : media.videoRenditions) != null ? _a3 : []].map((videoRendition) => __spreadValues({}, videoRendition));\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    videoRenditionsEvents: [\"addrendition\", \"removerendition\"]\n  },\n  /** @TODO Model this as a derived value? (CJP) */\n  mediaRenditionSelected: {\n    get(stateOwners) {\n      var _a3, _b, _c;\n      const { media } = stateOwners;\n      return (_c = (_b = media == null ? void 0 : media.videoRenditions) == null ? void 0 : _b[(_a3 = media.videoRenditions) == null ? void 0 : _a3.selectedIndex]) == null ? void 0 : _c.id;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.videoRenditions)) {\n        console.warn(\n          \"MediaController: Rendition selection not supported by this media.\"\n        );\n        return;\n      }\n      const renditionId = value;\n      const index = Array.prototype.findIndex.call(\n        media.videoRenditions,\n        (r10) => r10.id == renditionId\n      );\n      if (media.videoRenditions.selectedIndex != index) {\n        media.videoRenditions.selectedIndex = index;\n      }\n    },\n    mediaEvents: [\"emptied\"],\n    videoRenditionsEvents: [\"addrendition\", \"removerendition\", \"change\"]\n  },\n  mediaAudioTrackList: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      return [...(_a3 = media == null ? void 0 : media.audioTracks) != null ? _a3 : []];\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    audioTracksEvents: [\"addtrack\", \"removetrack\"]\n  },\n  mediaAudioTrackEnabled: {\n    get(stateOwners) {\n      var _a3, _b;\n      const { media } = stateOwners;\n      return (_b = [...(_a3 = media == null ? void 0 : media.audioTracks) != null ? _a3 : []].find(\n        (audioTrack) => audioTrack.enabled\n      )) == null ? void 0 : _b.id;\n    },\n    set(value, stateOwners) {\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.audioTracks)) {\n        console.warn(\n          \"MediaChrome: Audio track selection not supported by this media.\"\n        );\n        return;\n      }\n      const audioTrackId = value;\n      for (let track of media.audioTracks) {\n        track.enabled = audioTrackId == track.id;\n      }\n    },\n    mediaEvents: [\"emptied\"],\n    audioTracksEvents: [\"addtrack\", \"removetrack\", \"change\"]\n  },\n  mediaIsFullscreen: {\n    get(stateOwners) {\n      return isFullscreen(stateOwners);\n    },\n    set(value, stateOwners) {\n      if (!value) {\n        exitFullscreen(stateOwners);\n      } else {\n        enterFullscreen(stateOwners);\n      }\n    },\n    // older Safari version may require webkit-specific events\n    rootEvents: [\"fullscreenchange\", \"webkitfullscreenchange\"],\n    // iOS requires webkit-specific events on the video.\n    mediaEvents: [\"webkitbeginfullscreen\", \"webkitendfullscreen\", \"webkitpresentationmodechanged\"]\n  },\n  mediaIsCasting: {\n    // Note this relies on a customized castable-video element.\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.remote) || ((_a3 = media.remote) == null ? void 0 : _a3.state) === \"disconnected\")\n        return false;\n      return !!media.remote.state;\n    },\n    set(value, stateOwners) {\n      var _a3, _b;\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (value && ((_a3 = media.remote) == null ? void 0 : _a3.state) !== \"disconnected\")\n        return;\n      if (!value && ((_b = media.remote) == null ? void 0 : _b.state) !== \"connected\")\n        return;\n      if (typeof media.remote.prompt !== \"function\") {\n        console.warn(\n          \"MediaChrome: Casting is not supported in this environment\"\n        );\n        return;\n      }\n      media.remote.prompt().catch(() => {\n      });\n    },\n    remoteEvents: [\"connect\", \"connecting\", \"disconnect\"]\n  },\n  // NOTE: Newly added state for tracking airplaying\n  mediaIsAirplaying: {\n    // NOTE: Cannot know if airplaying since Safari doesn't fully support HTMLMediaElement::remote yet (e.g. remote::state) (CJP)\n    get() {\n      return false;\n    },\n    set(_value2, stateOwners) {\n      const { media } = stateOwners;\n      if (!media)\n        return;\n      if (!(media.webkitShowPlaybackTargetPicker && GlobalThis.WebKitPlaybackTargetAvailabilityEvent)) {\n        console.warn(\n          \"MediaChrome: received a request to select AirPlay but AirPlay is not supported in this environment\"\n        );\n        return;\n      }\n      media.webkitShowPlaybackTargetPicker();\n    },\n    mediaEvents: [\"webkitcurrentplaybacktargetiswirelesschanged\"]\n  },\n  mediaFullscreenUnavailable: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (!fullscreenSupported || !hasFullscreenSupport(media))\n        return AvailabilityStates.UNSUPPORTED;\n      return void 0;\n    }\n  },\n  mediaPipUnavailable: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (!pipSupported || !hasPipSupport(media))\n        return AvailabilityStates.UNSUPPORTED;\n    }\n  },\n  mediaVolumeUnavailable: {\n    get(stateOwners) {\n      const { media } = stateOwners;\n      if (volumeSupported === false || (media == null ? void 0 : media.volume) == void 0) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      return void 0;\n    },\n    // NOTE: Slightly different impl here. Added generic support for\n    // \"stateOwnersUpdateHandlers\" since the original impl had to hack around\n    // race conditions. (CJP)\n    stateOwnersUpdateHandlers: [\n      (handler) => {\n        if (volumeSupported == null) {\n          volumeSupportPromise.then(\n            (supported) => handler(supported ? void 0 : AvailabilityStates.UNSUPPORTED)\n          );\n        }\n      }\n    ]\n  },\n  mediaCastUnavailable: {\n    // @ts-ignore\n    get(stateOwners, { availability = \"not-available\" } = {}) {\n      var _a3;\n      const { media } = stateOwners;\n      if (!castSupported || !((_a3 = media == null ? void 0 : media.remote) == null ? void 0 : _a3.state)) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      if (availability == null || availability === \"available\")\n        return void 0;\n      return AvailabilityStates.UNAVAILABLE;\n    },\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        var _a3;\n        const { media } = stateOwners;\n        if (!media)\n          return;\n        const remotePlaybackDisabled = media.disableRemotePlayback || media.hasAttribute(\"disableremoteplayback\");\n        if (!remotePlaybackDisabled) {\n          (_a3 = media == null ? void 0 : media.remote) == null ? void 0 : _a3.watchAvailability((availabilityBool) => {\n            const availability = availabilityBool ? \"available\" : \"not-available\";\n            handler({ availability });\n          }).catch((error) => {\n            if (error.name === \"NotSupportedError\") {\n              handler({ availability: null });\n            } else {\n              handler({ availability: \"not-available\" });\n            }\n          });\n        }\n        return () => {\n          var _a22;\n          (_a22 = media == null ? void 0 : media.remote) == null ? void 0 : _a22.cancelWatchAvailability().catch(() => {\n          });\n        };\n      }\n    ]\n  },\n  mediaAirplayUnavailable: {\n    get(_stateOwners, event) {\n      if (!airplaySupported)\n        return AvailabilityStates.UNSUPPORTED;\n      if ((event == null ? void 0 : event.availability) === \"not-available\") {\n        return AvailabilityStates.UNAVAILABLE;\n      }\n      return void 0;\n    },\n    // NOTE: Keeping this event, as it's still the documented way of monitoring\n    // for AirPlay availability from Apple.\n    // See: https://developer.apple.com/documentation/webkitjs/adding_an_airplay_button_to_your_safari_media_controls#2940021 (CJP)\n    mediaEvents: [\"webkitplaybacktargetavailabilitychanged\"],\n    stateOwnersUpdateHandlers: [\n      (handler, stateOwners) => {\n        var _a3;\n        const { media } = stateOwners;\n        if (!media)\n          return;\n        const remotePlaybackDisabled = media.disableRemotePlayback || media.hasAttribute(\"disableremoteplayback\");\n        if (!remotePlaybackDisabled) {\n          (_a3 = media == null ? void 0 : media.remote) == null ? void 0 : _a3.watchAvailability((availabilityBool) => {\n            const availability = availabilityBool ? \"available\" : \"not-available\";\n            handler({ availability });\n          }).catch((error) => {\n            if (error.name === \"NotSupportedError\") {\n              handler({ availability: null });\n            } else {\n              handler({ availability: \"not-available\" });\n            }\n          });\n        }\n        return () => {\n          var _a22;\n          (_a22 = media == null ? void 0 : media.remote) == null ? void 0 : _a22.cancelWatchAvailability().catch(() => {\n          });\n        };\n      }\n    ]\n  },\n  mediaRenditionUnavailable: {\n    get(stateOwners) {\n      var _a3;\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.videoRenditions)) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      if (!((_a3 = media.videoRenditions) == null ? void 0 : _a3.length)) {\n        return AvailabilityStates.UNAVAILABLE;\n      }\n      return void 0;\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    videoRenditionsEvents: [\"addrendition\", \"removerendition\"]\n  },\n  mediaAudioTrackUnavailable: {\n    get(stateOwners) {\n      var _a3, _b;\n      const { media } = stateOwners;\n      if (!(media == null ? void 0 : media.audioTracks)) {\n        return AvailabilityStates.UNSUPPORTED;\n      }\n      if (((_b = (_a3 = media.audioTracks) == null ? void 0 : _a3.length) != null ? _b : 0) <= 1) {\n        return AvailabilityStates.UNAVAILABLE;\n      }\n      return void 0;\n    },\n    mediaEvents: [\"emptied\", \"loadstart\"],\n    audioTracksEvents: [\"addtrack\", \"removetrack\"]\n  }\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-store/request-map.js\nvar requestMap = {\n  /**\n   * @TODO Consider adding state to `StateMediator` for e.g. `mediaThumbnailCues` and use that for derived state here (CJP)\n   */\n  [MediaUIEvents.MEDIA_PREVIEW_REQUEST](stateMediator2, stateOwners, { detail }) {\n    var _a3, _b, _c;\n    const { media } = stateOwners;\n    const mediaPreviewTime = detail != null ? detail : void 0;\n    let mediaPreviewImage = void 0;\n    let mediaPreviewCoords = void 0;\n    if (media && mediaPreviewTime != null) {\n      const [track] = getTextTracksList(media, {\n        kind: TextTrackKinds.METADATA,\n        label: \"thumbnails\"\n      });\n      const cue = Array.prototype.find.call((_a3 = track == null ? void 0 : track.cues) != null ? _a3 : [], (c4, i2, cs) => {\n        if (i2 === 0)\n          return c4.endTime > mediaPreviewTime;\n        if (i2 === cs.length - 1)\n          return c4.startTime <= mediaPreviewTime;\n        return c4.startTime <= mediaPreviewTime && c4.endTime > mediaPreviewTime;\n      });\n      if (cue) {\n        const base = !/'^(?:[a-z]+:)?\\/\\//i.test(cue.text) ? (\n          /** @type {HTMLTrackElement | null} */\n          (_b = media == null ? void 0 : media.querySelector('track[label=\"thumbnails\"]')) == null ? void 0 : _b.src\n        ) : void 0;\n        const url = new URL(cue.text, base);\n        const previewCoordsStr = new URLSearchParams(url.hash).get(\"#xywh\");\n        mediaPreviewCoords = /** @type {[number, number, number, number]} */\n        previewCoordsStr.split(\",\").map((numStr) => +numStr);\n        mediaPreviewImage = url.href;\n      }\n    }\n    const mediaDuration = stateMediator2.mediaDuration.get(stateOwners);\n    const mediaChaptersCues = stateMediator2.mediaChaptersCues.get(stateOwners);\n    let mediaPreviewChapter = (_c = mediaChaptersCues.find((c4, i2, cs) => {\n      if (i2 === cs.length - 1 && mediaDuration === c4.endTime) {\n        return c4.startTime <= mediaPreviewTime && c4.endTime >= mediaPreviewTime;\n      }\n      return c4.startTime <= mediaPreviewTime && c4.endTime > mediaPreviewTime;\n    })) == null ? void 0 : _c.text;\n    if (detail != null && mediaPreviewChapter == null) {\n      mediaPreviewChapter = \"\";\n    }\n    return {\n      mediaPreviewTime,\n      mediaPreviewImage,\n      mediaPreviewCoords,\n      mediaPreviewChapter\n    };\n  },\n  [MediaUIEvents.MEDIA_PAUSE_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaPaused\";\n    const value = true;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_PLAY_REQUEST](stateMediator2, stateOwners) {\n    var _a3;\n    const key = \"mediaPaused\";\n    const value = false;\n    const live = stateMediator2.mediaStreamType.get(stateOwners) === StreamTypes.LIVE;\n    if (live) {\n      const notDvr = !(stateMediator2.mediaTargetLiveWindow.get(stateOwners) > 0);\n      const liveEdgeTime = (_a3 = stateMediator2.mediaSeekable.get(stateOwners)) == null ? void 0 : _a3[1];\n      if (notDvr && liveEdgeTime) {\n        stateMediator2.mediaCurrentTime.set(liveEdgeTime, stateOwners);\n      }\n    }\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST](stateMediator2, stateOwners, { detail }) {\n    const key = \"mediaPlaybackRate\";\n    const value = detail;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_MUTE_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaMuted\";\n    const value = true;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_UNMUTE_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaMuted\";\n    const value = false;\n    if (!stateMediator2.mediaVolume.get(stateOwners)) {\n      stateMediator2.mediaVolume.set(0.25, stateOwners);\n    }\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_VOLUME_REQUEST](stateMediator2, stateOwners, { detail }) {\n    const key = \"mediaVolume\";\n    const value = detail;\n    if (value && stateMediator2.mediaMuted.get(stateOwners)) {\n      stateMediator2.mediaMuted.set(false, stateOwners);\n    }\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_SEEK_REQUEST](stateMediator2, stateOwners, { detail }) {\n    const key = \"mediaCurrentTime\";\n    const value = detail;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_SEEK_TO_LIVE_REQUEST](stateMediator2, stateOwners) {\n    var _a3;\n    const key = \"mediaCurrentTime\";\n    const value = (_a3 = stateMediator2.mediaSeekable.get(stateOwners)) == null ? void 0 : _a3[1];\n    if (!Number.isNaN(Number(value)))\n      return;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  // Text Tracks state change requests\n  [MediaUIEvents.MEDIA_SHOW_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n    var _a3;\n    const { options } = stateOwners;\n    const tracks = getSubtitleTracks(stateOwners);\n    const tracksToUpdate = parseTracks(detail);\n    const preferredLanguage = (_a3 = tracksToUpdate[0]) == null ? void 0 : _a3.language;\n    if (preferredLanguage && !options.noSubtitlesLangPref) {\n      GlobalThis.localStorage.setItem(\n        \"media-chrome-pref-subtitles-lang\",\n        preferredLanguage\n      );\n    }\n    updateTracksModeTo(TextTrackModes.SHOWING, tracks, tracksToUpdate);\n  },\n  [MediaUIEvents.MEDIA_DISABLE_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n    const tracks = getSubtitleTracks(stateOwners);\n    const tracksToUpdate = detail != null ? detail : [];\n    updateTracksModeTo(TextTrackModes.DISABLED, tracks, tracksToUpdate);\n  },\n  [MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST](_stateMediator, stateOwners, { detail }) {\n    toggleSubtitleTracks(stateOwners, detail);\n  },\n  // Renditions/Tracks state change requests\n  [MediaUIEvents.MEDIA_RENDITION_REQUEST](stateMediator2, stateOwners, { detail }) {\n    const key = \"mediaRenditionSelected\";\n    const value = detail;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_AUDIO_TRACK_REQUEST](stateMediator2, stateOwners, { detail }) {\n    const key = \"mediaAudioTrackEnabled\";\n    const value = detail;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  // State change requests dependent on root node\n  [MediaUIEvents.MEDIA_ENTER_PIP_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaIsPip\";\n    const value = true;\n    if (stateMediator2.mediaIsFullscreen.get(stateOwners)) {\n      stateMediator2.mediaIsFullscreen.set(false, stateOwners);\n    }\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_EXIT_PIP_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaIsPip\";\n    const value = false;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaIsFullscreen\";\n    const value = true;\n    if (stateMediator2.mediaIsPip.get(stateOwners)) {\n      stateMediator2.mediaIsPip.set(false, stateOwners);\n    }\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaIsFullscreen\";\n    const value = false;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_ENTER_CAST_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaIsCasting\";\n    const value = true;\n    if (stateMediator2.mediaIsFullscreen.get(stateOwners)) {\n      stateMediator2.mediaIsFullscreen.set(false, stateOwners);\n    }\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_EXIT_CAST_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaIsCasting\";\n    const value = false;\n    stateMediator2[key].set(value, stateOwners);\n  },\n  [MediaUIEvents.MEDIA_AIRPLAY_REQUEST](stateMediator2, stateOwners) {\n    const key = \"mediaIsAirplaying\";\n    const value = true;\n    stateMediator2[key].set(value, stateOwners);\n  }\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-store/media-store.js\nvar createMediaStore = ({\n  media,\n  fullscreenElement,\n  documentElement,\n  stateMediator: stateMediator2 = stateMediator,\n  requestMap: requestMap2 = requestMap,\n  options = {},\n  monitorStateOwnersOnlyWithSubscriptions = true\n}) => {\n  const callbacks = [];\n  const stateOwners = {\n    // Spreading options here since folks should not rely on holding onto references\n    // for any app-level logic wrt options.\n    options: __spreadValues({}, options)\n  };\n  let state = Object.freeze({\n    mediaPreviewTime: void 0,\n    mediaPreviewImage: void 0,\n    mediaPreviewCoords: void 0,\n    mediaPreviewChapter: void 0\n  });\n  const updateState = (nextStateDelta) => {\n    if (nextStateDelta == void 0)\n      return;\n    if (areValuesEq(nextStateDelta, state)) {\n      return;\n    }\n    state = Object.freeze(__spreadValues(__spreadValues({}, state), nextStateDelta));\n    callbacks.forEach((cb) => cb(state));\n  };\n  const updateStateFromFacade = () => {\n    const nextState = Object.entries(stateMediator2).reduce(\n      (nextState2, [stateName, { get }]) => {\n        nextState2[stateName] = get(stateOwners);\n        return nextState2;\n      },\n      {}\n    );\n    updateState(nextState);\n  };\n  const stateUpdateHandlers = {};\n  let nextStateOwners = void 0;\n  const updateStateOwners = (nextStateOwnersDelta, nextSubscriberCount) => __async(null, null, function* () {\n    var _a3, _b, _c, _d, _e5, _f, _g, _h, _i2, _j, _k, _l, _m, _n, _o, _p;\n    const pendingUpdate = !!nextStateOwners;\n    nextStateOwners = __spreadValues(__spreadValues(__spreadValues({}, stateOwners), nextStateOwners != null ? nextStateOwners : {}), nextStateOwnersDelta);\n    if (pendingUpdate)\n      return;\n    yield prepareStateOwners(...Object.values(nextStateOwnersDelta));\n    const shouldTeardownFromSubscriberCount = callbacks.length > 0 && nextSubscriberCount === 0 && monitorStateOwnersOnlyWithSubscriptions;\n    const mediaChanged = stateOwners.media !== nextStateOwners.media;\n    const textTracksChanged = ((_a3 = stateOwners.media) == null ? void 0 : _a3.textTracks) !== ((_b = nextStateOwners.media) == null ? void 0 : _b.textTracks);\n    const videoRenditionsChanged = ((_c = stateOwners.media) == null ? void 0 : _c.videoRenditions) !== ((_d = nextStateOwners.media) == null ? void 0 : _d.videoRenditions);\n    const audioTracksChanged = ((_e5 = stateOwners.media) == null ? void 0 : _e5.audioTracks) !== ((_f = nextStateOwners.media) == null ? void 0 : _f.audioTracks);\n    const remoteChanged = ((_g = stateOwners.media) == null ? void 0 : _g.remote) !== ((_h = nextStateOwners.media) == null ? void 0 : _h.remote);\n    const rootNodeChanged = stateOwners.documentElement !== nextStateOwners.documentElement;\n    const teardownMedia = !!stateOwners.media && (mediaChanged || shouldTeardownFromSubscriberCount);\n    const teardownTextTracks = !!((_i2 = stateOwners.media) == null ? void 0 : _i2.textTracks) && (textTracksChanged || shouldTeardownFromSubscriberCount);\n    const teardownVideoRenditions = !!((_j = stateOwners.media) == null ? void 0 : _j.videoRenditions) && (videoRenditionsChanged || shouldTeardownFromSubscriberCount);\n    const teardownAudioTracks = !!((_k = stateOwners.media) == null ? void 0 : _k.audioTracks) && (audioTracksChanged || shouldTeardownFromSubscriberCount);\n    const teardownRemote = !!((_l = stateOwners.media) == null ? void 0 : _l.remote) && (remoteChanged || shouldTeardownFromSubscriberCount);\n    const teardownRootNode = !!stateOwners.documentElement && (rootNodeChanged || shouldTeardownFromSubscriberCount);\n    const teardownSomething = teardownMedia || teardownTextTracks || teardownVideoRenditions || teardownAudioTracks || teardownRemote || teardownRootNode;\n    const shouldSetupFromSubscriberCount = callbacks.length === 0 && nextSubscriberCount === 1 && monitorStateOwnersOnlyWithSubscriptions;\n    const setupMedia = !!nextStateOwners.media && (mediaChanged || shouldSetupFromSubscriberCount);\n    const setupTextTracks = !!((_m = nextStateOwners.media) == null ? void 0 : _m.textTracks) && (textTracksChanged || shouldSetupFromSubscriberCount);\n    const setupVideoRenditions = !!((_n = nextStateOwners.media) == null ? void 0 : _n.videoRenditions) && (videoRenditionsChanged || shouldSetupFromSubscriberCount);\n    const setupAudioTracks = !!((_o = nextStateOwners.media) == null ? void 0 : _o.audioTracks) && (audioTracksChanged || shouldSetupFromSubscriberCount);\n    const setupRemote = !!((_p = nextStateOwners.media) == null ? void 0 : _p.remote) && (remoteChanged || shouldSetupFromSubscriberCount);\n    const setupRootNode = !!nextStateOwners.documentElement && (rootNodeChanged || shouldSetupFromSubscriberCount);\n    const setupSomething = setupMedia || setupTextTracks || setupVideoRenditions || setupAudioTracks || setupRemote || setupRootNode;\n    const somethingToDo = teardownSomething || setupSomething;\n    if (!somethingToDo) {\n      Object.entries(nextStateOwners).forEach(\n        ([stateOwnerName, stateOwner]) => {\n          stateOwners[stateOwnerName] = stateOwner;\n        }\n      );\n      updateStateFromFacade();\n      nextStateOwners = void 0;\n      return;\n    }\n    Object.entries(stateMediator2).forEach(\n      ([\n        stateName,\n        {\n          get,\n          mediaEvents = [],\n          textTracksEvents = [],\n          videoRenditionsEvents = [],\n          audioTracksEvents = [],\n          remoteEvents = [],\n          rootEvents = [],\n          stateOwnersUpdateHandlers = []\n        }\n      ]) => {\n        if (!stateUpdateHandlers[stateName]) {\n          stateUpdateHandlers[stateName] = {};\n        }\n        const handler = (event) => {\n          const nextValue = get(stateOwners, event);\n          updateState({ [stateName]: nextValue });\n        };\n        let prevHandler;\n        prevHandler = stateUpdateHandlers[stateName].mediaEvents;\n        mediaEvents.forEach((eventType) => {\n          if (prevHandler && teardownMedia) {\n            stateOwners.media.removeEventListener(eventType, prevHandler);\n            stateUpdateHandlers[stateName].mediaEvents = void 0;\n          }\n          if (setupMedia) {\n            nextStateOwners.media.addEventListener(eventType, handler);\n            stateUpdateHandlers[stateName].mediaEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].textTracksEvents;\n        textTracksEvents.forEach((eventType) => {\n          var _a22, _b2;\n          if (prevHandler && teardownTextTracks) {\n            (_a22 = stateOwners.media.textTracks) == null ? void 0 : _a22.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].textTracksEvents = void 0;\n          }\n          if (setupTextTracks) {\n            (_b2 = nextStateOwners.media.textTracks) == null ? void 0 : _b2.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].textTracksEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].videoRenditionsEvents;\n        videoRenditionsEvents.forEach((eventType) => {\n          var _a22, _b2;\n          if (prevHandler && teardownVideoRenditions) {\n            (_a22 = stateOwners.media.videoRenditions) == null ? void 0 : _a22.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].videoRenditionsEvents = void 0;\n          }\n          if (setupVideoRenditions) {\n            (_b2 = nextStateOwners.media.videoRenditions) == null ? void 0 : _b2.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].videoRenditionsEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].audioTracksEvents;\n        audioTracksEvents.forEach((eventType) => {\n          var _a22, _b2;\n          if (prevHandler && teardownAudioTracks) {\n            (_a22 = stateOwners.media.audioTracks) == null ? void 0 : _a22.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].audioTracksEvents = void 0;\n          }\n          if (setupAudioTracks) {\n            (_b2 = nextStateOwners.media.audioTracks) == null ? void 0 : _b2.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].audioTracksEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].remoteEvents;\n        remoteEvents.forEach((eventType) => {\n          var _a22, _b2;\n          if (prevHandler && teardownRemote) {\n            (_a22 = stateOwners.media.remote) == null ? void 0 : _a22.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].remoteEvents = void 0;\n          }\n          if (setupRemote) {\n            (_b2 = nextStateOwners.media.remote) == null ? void 0 : _b2.addEventListener(eventType, handler);\n            stateUpdateHandlers[stateName].remoteEvents = handler;\n          }\n        });\n        prevHandler = stateUpdateHandlers[stateName].rootEvents;\n        rootEvents.forEach((eventType) => {\n          if (prevHandler && teardownRootNode) {\n            stateOwners.documentElement.removeEventListener(\n              eventType,\n              prevHandler\n            );\n            stateUpdateHandlers[stateName].rootEvents = void 0;\n          }\n          if (setupRootNode) {\n            nextStateOwners.documentElement.addEventListener(\n              eventType,\n              handler\n            );\n            stateUpdateHandlers[stateName].rootEvents = handler;\n          }\n        });\n        const prevHandlerTeardown = stateUpdateHandlers[stateName].stateOwnersUpdateHandlers;\n        stateOwnersUpdateHandlers.forEach((fn) => {\n          if (prevHandlerTeardown && teardownSomething) {\n            prevHandlerTeardown();\n          }\n          if (setupSomething) {\n            stateUpdateHandlers[stateName].stateOwnersUpdateHandlers = fn(\n              handler,\n              nextStateOwners\n            );\n          }\n        });\n      }\n    );\n    Object.entries(nextStateOwners).forEach(([stateOwnerName, stateOwner]) => {\n      stateOwners[stateOwnerName] = stateOwner;\n    });\n    updateStateFromFacade();\n    nextStateOwners = void 0;\n  });\n  updateStateOwners({ media, fullscreenElement, documentElement, options });\n  return {\n    // note that none of these cases directly interact with the media element, root node, full screen element, etc.\n    // note these \"actions\" could just be the events if we wanted, especially if we normalize on \"detail\" for\n    // any payload-relevant values\n    // This is roughly equivalent to our used to be in our state requests dictionary object, though much of the\n    // \"heavy lifting\" is now moved into the facade `set()`\n    dispatch(action) {\n      const { type, detail } = action;\n      if (requestMap2[type]) {\n        updateState(requestMap2[type](stateMediator2, stateOwners, action));\n        return;\n      }\n      if (type === \"mediaelementchangerequest\") {\n        updateStateOwners({ media: detail });\n      } else if (type === \"fullscreenelementchangerequest\") {\n        updateStateOwners({ fullscreenElement: detail });\n      } else if (type === \"documentelementchangerequest\") {\n        updateStateOwners({ documentElement: detail });\n      } else if (type === \"optionschangerequest\") {\n        Object.entries(detail != null ? detail : {}).forEach(([optionName, optionValue]) => {\n          stateOwners.options[optionName] = optionValue;\n        });\n      }\n    },\n    getState() {\n      return state;\n    },\n    subscribe(callback) {\n      updateStateOwners({}, callbacks.length + 1);\n      callbacks.push(callback);\n      callback(state);\n      return () => {\n        const idx = callbacks.indexOf(callback);\n        if (idx >= 0) {\n          updateStateOwners({}, callbacks.length - 1);\n          callbacks.splice(idx, 1);\n        }\n      };\n    }\n  };\n};\nvar media_store_default = createMediaStore;\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-controller.js\nvar __accessCheck4 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet4 = (obj, member, getter) => {\n  __accessCheck4(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd4 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet4 = (obj, member, value, setter) => {\n  __accessCheck4(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod2 = (obj, member, method) => {\n  __accessCheck4(obj, member, \"access private method\");\n  return method;\n};\nvar _hotKeys;\nvar _fullscreenElement;\nvar _mediaStore;\nvar _mediaStateCallback;\nvar _mediaStoreUnsubscribe;\nvar _mediaStateEventHandler;\nvar _setupDefaultStore;\nvar setupDefaultStore_fn;\nvar _keyUpHandler;\nvar keyUpHandler_fn;\nvar _keyDownHandler;\nvar keyDownHandler_fn;\nvar ButtonPressedKeys = [\n  \"ArrowLeft\",\n  \"ArrowRight\",\n  \"Enter\",\n  \" \",\n  \"f\",\n  \"m\",\n  \"k\",\n  \"c\"\n];\nvar DEFAULT_SEEK_OFFSET = 10;\nvar Attributes2 = {\n  DEFAULT_SUBTITLES: \"defaultsubtitles\",\n  DEFAULT_STREAM_TYPE: \"defaultstreamtype\",\n  DEFAULT_DURATION: \"defaultduration\",\n  FULLSCREEN_ELEMENT: \"fullscreenelement\",\n  HOTKEYS: \"hotkeys\",\n  KEYS_USED: \"keysused\",\n  LIVE_EDGE_OFFSET: \"liveedgeoffset\",\n  NO_AUTO_SEEK_TO_LIVE: \"noautoseektolive\",\n  NO_HOTKEYS: \"nohotkeys\",\n  NO_VOLUME_PREF: \"novolumepref\",\n  NO_SUBTITLES_LANG_PREF: \"nosubtitleslangpref\",\n  NO_DEFAULT_STORE: \"nodefaultstore\",\n  KEYBOARD_FORWARD_SEEK_OFFSET: \"keyboardforwardseekoffset\",\n  KEYBOARD_BACKWARD_SEEK_OFFSET: \"keyboardbackwardseekoffset\"\n};\nvar MediaController = class extends MediaContainer {\n  constructor() {\n    super();\n    __privateAdd4(this, _setupDefaultStore);\n    __privateAdd4(this, _keyUpHandler);\n    __privateAdd4(this, _keyDownHandler);\n    __privateAdd4(this, _hotKeys, new AttributeTokenList(this, Attributes2.HOTKEYS));\n    __privateAdd4(this, _fullscreenElement, void 0);\n    __privateAdd4(this, _mediaStore, void 0);\n    __privateAdd4(this, _mediaStateCallback, void 0);\n    __privateAdd4(this, _mediaStoreUnsubscribe, void 0);\n    __privateAdd4(this, _mediaStateEventHandler, (event) => {\n      var _a3;\n      (_a3 = __privateGet4(this, _mediaStore)) == null ? void 0 : _a3.dispatch(event);\n    });\n    this.mediaStateReceivers = [];\n    this.associatedElementSubscriptions = /* @__PURE__ */ new Map();\n    this.associateElement(this);\n    let prevState = {};\n    __privateSet4(this, _mediaStateCallback, (nextState) => {\n      Object.entries(nextState).forEach(([stateName, stateValue]) => {\n        if (stateName in prevState && prevState[stateName] === stateValue)\n          return;\n        this.propagateMediaState(stateName, stateValue);\n        const attrName = stateName.toLowerCase();\n        const evt = new GlobalThis.CustomEvent(\n          AttributeToStateChangeEventMap[attrName],\n          { composed: true, detail: stateValue }\n        );\n        this.dispatchEvent(evt);\n      });\n      prevState = nextState;\n    });\n    this.enableHotkeys();\n  }\n  static get observedAttributes() {\n    return super.observedAttributes.concat(\n      Attributes2.NO_HOTKEYS,\n      Attributes2.HOTKEYS,\n      Attributes2.DEFAULT_STREAM_TYPE,\n      Attributes2.DEFAULT_SUBTITLES,\n      Attributes2.DEFAULT_DURATION\n    );\n  }\n  get mediaStore() {\n    return __privateGet4(this, _mediaStore);\n  }\n  set mediaStore(value) {\n    var _a3, _b;\n    if (__privateGet4(this, _mediaStore)) {\n      (_a3 = __privateGet4(this, _mediaStoreUnsubscribe)) == null ? void 0 : _a3.call(this);\n      __privateSet4(this, _mediaStoreUnsubscribe, void 0);\n    }\n    __privateSet4(this, _mediaStore, value);\n    if (!__privateGet4(this, _mediaStore) && !this.hasAttribute(Attributes2.NO_DEFAULT_STORE)) {\n      __privateMethod2(this, _setupDefaultStore, setupDefaultStore_fn).call(this);\n      return;\n    }\n    __privateSet4(this, _mediaStoreUnsubscribe, (_b = __privateGet4(this, _mediaStore)) == null ? void 0 : _b.subscribe(\n      __privateGet4(this, _mediaStateCallback)\n    ));\n  }\n  get fullscreenElement() {\n    var _a3;\n    return (_a3 = __privateGet4(this, _fullscreenElement)) != null ? _a3 : this;\n  }\n  set fullscreenElement(element) {\n    var _a3;\n    if (this.hasAttribute(Attributes2.FULLSCREEN_ELEMENT)) {\n      this.removeAttribute(Attributes2.FULLSCREEN_ELEMENT);\n    }\n    __privateSet4(this, _fullscreenElement, element);\n    (_a3 = __privateGet4(this, _mediaStore)) == null ? void 0 : _a3.dispatch({\n      type: \"fullscreenelementchangerequest\",\n      detail: this.fullscreenElement\n    });\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5, _f;\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === Attributes2.NO_HOTKEYS) {\n      if (newValue !== oldValue && newValue === \"\") {\n        if (this.hasAttribute(Attributes2.HOTKEYS)) {\n          console.warn(\n            \"Media Chrome: Both `hotkeys` and `nohotkeys` have been set. All hotkeys will be disabled.\"\n          );\n        }\n        this.disableHotkeys();\n      } else if (newValue !== oldValue && newValue === null) {\n        this.enableHotkeys();\n      }\n    } else if (attrName === Attributes2.HOTKEYS) {\n      __privateGet4(this, _hotKeys).value = newValue;\n    } else if (attrName === Attributes2.DEFAULT_SUBTITLES && newValue !== oldValue) {\n      (_a3 = __privateGet4(this, _mediaStore)) == null ? void 0 : _a3.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          defaultSubtitles: this.hasAttribute(Attributes2.DEFAULT_SUBTITLES)\n        }\n      });\n    } else if (attrName === Attributes2.DEFAULT_STREAM_TYPE) {\n      (_c = __privateGet4(this, _mediaStore)) == null ? void 0 : _c.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          defaultStreamType: (_b = this.getAttribute(Attributes2.DEFAULT_STREAM_TYPE)) != null ? _b : void 0\n        }\n      });\n    } else if (attrName === Attributes2.LIVE_EDGE_OFFSET) {\n      (_d = __privateGet4(this, _mediaStore)) == null ? void 0 : _d.dispatch({\n        type: \"optionschangerequest\",\n        detail: {\n          liveEdgeOffset: this.hasAttribute(Attributes2.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes2.LIVE_EDGE_OFFSET) : void 0\n        }\n      });\n    } else if (attrName === Attributes2.FULLSCREEN_ELEMENT) {\n      const el = newValue ? (\n        /** @type {Document|ShadowRoot} */\n        /** @type {unknown} */\n        (_e5 = this.getRootNode()) == null ? void 0 : _e5.getElementById(newValue)\n      ) : void 0;\n      __privateSet4(this, _fullscreenElement, el);\n      (_f = __privateGet4(this, _mediaStore)) == null ? void 0 : _f.dispatch({\n        type: \"fullscreenelementchangerequest\",\n        detail: this.fullscreenElement\n      });\n    }\n  }\n  connectedCallback() {\n    var _a3, _b;\n    if (!__privateGet4(this, _mediaStore) && !this.hasAttribute(Attributes2.NO_DEFAULT_STORE)) {\n      __privateMethod2(this, _setupDefaultStore, setupDefaultStore_fn).call(this);\n    }\n    (_a3 = __privateGet4(this, _mediaStore)) == null ? void 0 : _a3.dispatch({\n      type: \"documentelementchangerequest\",\n      detail: Document2\n    });\n    super.connectedCallback();\n    if (__privateGet4(this, _mediaStore) && !__privateGet4(this, _mediaStoreUnsubscribe)) {\n      __privateSet4(this, _mediaStoreUnsubscribe, (_b = __privateGet4(this, _mediaStore)) == null ? void 0 : _b.subscribe(\n        __privateGet4(this, _mediaStateCallback)\n      ));\n    }\n    this.enableHotkeys();\n  }\n  disconnectedCallback() {\n    var _a3, _b, _c, _d;\n    (_a3 = super.disconnectedCallback) == null ? void 0 : _a3.call(this);\n    if (__privateGet4(this, _mediaStore)) {\n      (_b = __privateGet4(this, _mediaStore)) == null ? void 0 : _b.dispatch({\n        type: \"documentelementchangerequest\",\n        detail: void 0\n      });\n      (_c = __privateGet4(this, _mediaStore)) == null ? void 0 : _c.dispatch({\n        type: MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,\n        detail: false\n      });\n    }\n    if (__privateGet4(this, _mediaStoreUnsubscribe)) {\n      (_d = __privateGet4(this, _mediaStoreUnsubscribe)) == null ? void 0 : _d.call(this);\n      __privateSet4(this, _mediaStoreUnsubscribe, void 0);\n    }\n  }\n  /**\n   * @override\n   * @param {HTMLMediaElement} media\n   */\n  mediaSetCallback(media) {\n    var _a3;\n    super.mediaSetCallback(media);\n    (_a3 = __privateGet4(this, _mediaStore)) == null ? void 0 : _a3.dispatch({\n      type: \"mediaelementchangerequest\",\n      detail: media\n    });\n    if (!media.hasAttribute(\"tabindex\")) {\n      media.tabIndex = -1;\n    }\n  }\n  /**\n   * @override\n   * @param {HTMLMediaElement} media\n   */\n  mediaUnsetCallback(media) {\n    var _a3;\n    super.mediaUnsetCallback(media);\n    (_a3 = __privateGet4(this, _mediaStore)) == null ? void 0 : _a3.dispatch({\n      type: \"mediaelementchangerequest\",\n      detail: void 0\n    });\n  }\n  propagateMediaState(stateName, state) {\n    propagateMediaState(this.mediaStateReceivers, stateName, state);\n  }\n  associateElement(element) {\n    if (!element)\n      return;\n    const { associatedElementSubscriptions } = this;\n    if (associatedElementSubscriptions.has(element))\n      return;\n    const registerMediaStateReceiver = this.registerMediaStateReceiver.bind(this);\n    const unregisterMediaStateReceiver = this.unregisterMediaStateReceiver.bind(this);\n    const unsubscribe = monitorForMediaStateReceivers(\n      element,\n      registerMediaStateReceiver,\n      unregisterMediaStateReceiver\n    );\n    Object.values(MediaUIEvents).forEach((eventName) => {\n      element.addEventListener(eventName, __privateGet4(this, _mediaStateEventHandler));\n    });\n    associatedElementSubscriptions.set(element, unsubscribe);\n  }\n  unassociateElement(element) {\n    if (!element)\n      return;\n    const { associatedElementSubscriptions } = this;\n    if (!associatedElementSubscriptions.has(element))\n      return;\n    const unsubscribe = associatedElementSubscriptions.get(element);\n    unsubscribe();\n    associatedElementSubscriptions.delete(element);\n    Object.values(MediaUIEvents).forEach((eventName) => {\n      element.removeEventListener(eventName, __privateGet4(this, _mediaStateEventHandler));\n    });\n  }\n  registerMediaStateReceiver(el) {\n    if (!el)\n      return;\n    const els = this.mediaStateReceivers;\n    const index = els.indexOf(el);\n    if (index > -1)\n      return;\n    els.push(el);\n    if (__privateGet4(this, _mediaStore)) {\n      Object.entries(__privateGet4(this, _mediaStore).getState()).forEach(\n        ([stateName, stateValue]) => {\n          propagateMediaState([el], stateName, stateValue);\n        }\n      );\n    }\n  }\n  unregisterMediaStateReceiver(el) {\n    const els = this.mediaStateReceivers;\n    const index = els.indexOf(el);\n    if (index < 0)\n      return;\n    els.splice(index, 1);\n  }\n  enableHotkeys() {\n    this.addEventListener(\"keydown\", __privateMethod2(this, _keyDownHandler, keyDownHandler_fn));\n  }\n  disableHotkeys() {\n    this.removeEventListener(\"keydown\", __privateMethod2(this, _keyDownHandler, keyDownHandler_fn));\n    this.removeEventListener(\"keyup\", __privateMethod2(this, _keyUpHandler, keyUpHandler_fn));\n  }\n  get hotkeys() {\n    return __privateGet4(this, _hotKeys);\n  }\n  keyboardShortcutHandler(e) {\n    var _a3, _b, _c, _d, _e5, _f;\n    const keysUsed = ((_d = (_c = (_a3 = e.target.getAttribute(Attributes2.KEYS_USED)) == null ? void 0 : _a3.split(\" \")) != null ? _c : (_b = e.target) == null ? void 0 : _b.keysUsed) != null ? _d : []).map((key) => key === \"Space\" ? \" \" : key).filter(Boolean);\n    if (keysUsed.includes(e.key)) {\n      return;\n    }\n    let eventName, detail, evt;\n    if (__privateGet4(this, _hotKeys).contains(`no${e.key.toLowerCase()}`))\n      return;\n    if (e.key === \" \" && __privateGet4(this, _hotKeys).contains(`nospace`))\n      return;\n    switch (e.key) {\n      case \" \":\n      case \"k\":\n        eventName = __privateGet4(this, _mediaStore).getState().mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n        this.dispatchEvent(\n          new GlobalThis.CustomEvent(eventName, {\n            composed: true,\n            bubbles: true\n          })\n        );\n        break;\n      case \"m\":\n        eventName = this.mediaStore.getState().mediaVolumeLevel === \"off\" ? MediaUIEvents.MEDIA_UNMUTE_REQUEST : MediaUIEvents.MEDIA_MUTE_REQUEST;\n        this.dispatchEvent(\n          new GlobalThis.CustomEvent(eventName, {\n            composed: true,\n            bubbles: true\n          })\n        );\n        break;\n      case \"f\":\n        eventName = this.mediaStore.getState().mediaIsFullscreen ? MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST : MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST;\n        this.dispatchEvent(\n          new GlobalThis.CustomEvent(eventName, {\n            composed: true,\n            bubbles: true\n          })\n        );\n        break;\n      case \"c\":\n        this.dispatchEvent(\n          new GlobalThis.CustomEvent(\n            MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST,\n            { composed: true, bubbles: true }\n          )\n        );\n        break;\n      case \"ArrowLeft\": {\n        const offsetValue = this.hasAttribute(\n          Attributes2.KEYBOARD_BACKWARD_SEEK_OFFSET\n        ) ? +this.getAttribute(Attributes2.KEYBOARD_BACKWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;\n        detail = Math.max(\n          ((_e5 = this.mediaStore.getState().mediaCurrentTime) != null ? _e5 : 0) - offsetValue,\n          0\n        );\n        evt = new GlobalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      case \"ArrowRight\": {\n        const offsetValue = this.hasAttribute(\n          Attributes2.KEYBOARD_FORWARD_SEEK_OFFSET\n        ) ? +this.getAttribute(Attributes2.KEYBOARD_FORWARD_SEEK_OFFSET) : DEFAULT_SEEK_OFFSET;\n        detail = Math.max(\n          ((_f = this.mediaStore.getState().mediaCurrentTime) != null ? _f : 0) + offsetValue,\n          0\n        );\n        evt = new GlobalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n          composed: true,\n          bubbles: true,\n          detail\n        });\n        this.dispatchEvent(evt);\n        break;\n      }\n      default:\n        break;\n    }\n  }\n};\n_hotKeys = /* @__PURE__ */ new WeakMap();\n_fullscreenElement = /* @__PURE__ */ new WeakMap();\n_mediaStore = /* @__PURE__ */ new WeakMap();\n_mediaStateCallback = /* @__PURE__ */ new WeakMap();\n_mediaStoreUnsubscribe = /* @__PURE__ */ new WeakMap();\n_mediaStateEventHandler = /* @__PURE__ */ new WeakMap();\n_setupDefaultStore = /* @__PURE__ */ new WeakSet();\nsetupDefaultStore_fn = function() {\n  var _a3;\n  this.mediaStore = media_store_default({\n    media: this.media,\n    fullscreenElement: this.fullscreenElement,\n    options: {\n      defaultSubtitles: this.hasAttribute(Attributes2.DEFAULT_SUBTITLES),\n      defaultDuration: this.hasAttribute(Attributes2.DEFAULT_DURATION) ? +this.getAttribute(Attributes2.DEFAULT_DURATION) : void 0,\n      defaultStreamType: (\n        /** @type {import('./media-store/state-mediator.js').StreamTypeValue} */\n        (_a3 = this.getAttribute(Attributes2.DEFAULT_STREAM_TYPE)) != null ? _a3 : void 0\n      ),\n      liveEdgeOffset: this.hasAttribute(Attributes2.LIVE_EDGE_OFFSET) ? +this.getAttribute(Attributes2.LIVE_EDGE_OFFSET) : void 0,\n      // NOTE: This wasn't updated if it was changed later. Should it be? (CJP)\n      noVolumePref: this.hasAttribute(Attributes2.NO_VOLUME_PREF),\n      noSubtitlesLangPref: this.hasAttribute(\n        Attributes2.NO_SUBTITLES_LANG_PREF\n      )\n    }\n  });\n};\n_keyUpHandler = /* @__PURE__ */ new WeakSet();\nkeyUpHandler_fn = function(e) {\n  const { key } = e;\n  if (!ButtonPressedKeys.includes(key)) {\n    this.removeEventListener(\"keyup\", __privateMethod2(this, _keyUpHandler, keyUpHandler_fn));\n    return;\n  }\n  this.keyboardShortcutHandler(e);\n};\n_keyDownHandler = /* @__PURE__ */ new WeakSet();\nkeyDownHandler_fn = function(e) {\n  const { metaKey, altKey, key } = e;\n  if (metaKey || altKey || !ButtonPressedKeys.includes(key)) {\n    this.removeEventListener(\"keyup\", __privateMethod2(this, _keyUpHandler, keyUpHandler_fn));\n    return;\n  }\n  if ([\" \", \"ArrowLeft\", \"ArrowRight\"].includes(key) && !(__privateGet4(this, _hotKeys).contains(`no${key.toLowerCase()}`) || key === \" \" && __privateGet4(this, _hotKeys).contains(\"nospace\"))) {\n    e.preventDefault();\n  }\n  this.addEventListener(\"keyup\", __privateMethod2(this, _keyUpHandler, keyUpHandler_fn), { once: true });\n};\nvar MEDIA_UI_ATTRIBUTE_NAMES2 = Object.values(MediaUIAttributes);\nvar MEDIA_UI_PROP_NAMES = Object.values(MediaUIProps);\nvar getMediaUIAttributesFrom = (child) => {\n  var _a3, _b, _c, _d;\n  let { observedAttributes } = child.constructor;\n  if (!observedAttributes && ((_a3 = child.nodeName) == null ? void 0 : _a3.includes(\"-\"))) {\n    GlobalThis.customElements.upgrade(child);\n    ({ observedAttributes } = child.constructor);\n  }\n  const mediaChromeAttributesList = (_d = (_c = (_b = child == null ? void 0 : child.getAttribute) == null ? void 0 : _b.call(child, MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES)) == null ? void 0 : _c.split) == null ? void 0 : _d.call(_c, /\\s+/);\n  if (!Array.isArray(observedAttributes || mediaChromeAttributesList))\n    return [];\n  return (observedAttributes || mediaChromeAttributesList).filter(\n    (attrName) => MEDIA_UI_ATTRIBUTE_NAMES2.includes(attrName)\n  );\n};\nvar hasMediaUIProps = (mediaStateReceiverCandidate) => {\n  var _a3, _b;\n  if (((_a3 = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _a3.includes(\"-\")) && !!GlobalThis.customElements.get(\n    (_b = mediaStateReceiverCandidate.nodeName) == null ? void 0 : _b.toLowerCase()\n  ) && !(mediaStateReceiverCandidate instanceof GlobalThis.customElements.get(\n    mediaStateReceiverCandidate.nodeName.toLowerCase()\n  ))) {\n    GlobalThis.customElements.upgrade(mediaStateReceiverCandidate);\n  }\n  return MEDIA_UI_PROP_NAMES.some(\n    (propName) => propName in mediaStateReceiverCandidate\n  );\n};\nvar isMediaStateReceiver = (child) => {\n  return hasMediaUIProps(child) || !!getMediaUIAttributesFrom(child).length;\n};\nvar serializeTuple = (tuple) => {\n  var _a3;\n  return (_a3 = tuple == null ? void 0 : tuple.join) == null ? void 0 : _a3.call(tuple, \":\");\n};\nvar CustomAttrSerializer = {\n  [MediaUIAttributes.MEDIA_SUBTITLES_LIST]: stringifyTextTrackList,\n  [MediaUIAttributes.MEDIA_SUBTITLES_SHOWING]: stringifyTextTrackList,\n  [MediaUIAttributes.MEDIA_SEEKABLE]: serializeTuple,\n  [MediaUIAttributes.MEDIA_BUFFERED]: (tuples) => tuples == null ? void 0 : tuples.map(serializeTuple).join(\" \"),\n  [MediaUIAttributes.MEDIA_PREVIEW_COORDS]: (coords) => coords == null ? void 0 : coords.join(\" \"),\n  [MediaUIAttributes.MEDIA_RENDITION_LIST]: stringifyRenditionList,\n  [MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST]: stringifyAudioTrackList\n};\nvar setAttr = (child, attrName, attrValue) => __async(null, null, function* () {\n  var _a3, _b;\n  if (!child.isConnected) {\n    yield delay(0);\n  }\n  if (typeof attrValue === \"boolean\" || attrValue == null) {\n    return setBooleanAttr(child, attrName, attrValue);\n  }\n  if (typeof attrValue === \"number\") {\n    return setNumericAttr(child, attrName, attrValue);\n  }\n  if (typeof attrValue === \"string\") {\n    return setStringAttr(child, attrName, attrValue);\n  }\n  if (Array.isArray(attrValue) && !attrValue.length) {\n    return child.removeAttribute(attrName);\n  }\n  const val = (_b = (_a3 = CustomAttrSerializer[attrName]) == null ? void 0 : _a3.call(CustomAttrSerializer, attrValue)) != null ? _b : attrValue;\n  return child.setAttribute(attrName, val);\n});\nvar isMediaSlotElementDescendant = (el) => {\n  var _a3;\n  return !!((_a3 = el.closest) == null ? void 0 : _a3.call(el, '*[slot=\"media\"]'));\n};\nvar traverseForMediaStateReceivers = (rootNode, mediaStateReceiverCallback) => {\n  if (isMediaSlotElementDescendant(rootNode)) {\n    return;\n  }\n  const traverseForMediaStateReceiversSync = (rootNode2, mediaStateReceiverCallback2) => {\n    var _a3, _b;\n    if (isMediaStateReceiver(rootNode2)) {\n      mediaStateReceiverCallback2(rootNode2);\n    }\n    const { children = [] } = rootNode2 != null ? rootNode2 : {};\n    const shadowChildren = (_b = (_a3 = rootNode2 == null ? void 0 : rootNode2.shadowRoot) == null ? void 0 : _a3.children) != null ? _b : [];\n    const allChildren = [...children, ...shadowChildren];\n    allChildren.forEach(\n      (child) => traverseForMediaStateReceivers(child, mediaStateReceiverCallback2)\n    );\n  };\n  const name = rootNode == null ? void 0 : rootNode.nodeName.toLowerCase();\n  if (name.includes(\"-\") && !isMediaStateReceiver(rootNode)) {\n    GlobalThis.customElements.whenDefined(name).then(() => {\n      traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);\n    });\n    return;\n  }\n  traverseForMediaStateReceiversSync(rootNode, mediaStateReceiverCallback);\n};\nvar propagateMediaState = (els, stateName, val) => {\n  els.forEach((el) => {\n    if (stateName in el) {\n      el[stateName] = val;\n      return;\n    }\n    const relevantAttrs = getMediaUIAttributesFrom(el);\n    const attrName = stateName.toLowerCase();\n    if (!relevantAttrs.includes(attrName))\n      return;\n    setAttr(el, attrName, val);\n  });\n};\nvar monitorForMediaStateReceivers = (rootNode, registerMediaStateReceiver, unregisterMediaStateReceiver) => {\n  traverseForMediaStateReceivers(rootNode, registerMediaStateReceiver);\n  const registerMediaStateReceiverHandler = (evt) => {\n    var _a3;\n    const el = (_a3 = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a3 : evt.target;\n    registerMediaStateReceiver(el);\n  };\n  const unregisterMediaStateReceiverHandler = (evt) => {\n    var _a3;\n    const el = (_a3 = evt == null ? void 0 : evt.composedPath()[0]) != null ? _a3 : evt.target;\n    unregisterMediaStateReceiver(el);\n  };\n  rootNode.addEventListener(\n    MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,\n    registerMediaStateReceiverHandler\n  );\n  rootNode.addEventListener(\n    MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,\n    unregisterMediaStateReceiverHandler\n  );\n  const mutationCallback = (mutationsList) => {\n    mutationsList.forEach((mutationRecord) => {\n      const {\n        addedNodes = [],\n        removedNodes = [],\n        type,\n        target,\n        attributeName\n      } = mutationRecord;\n      if (type === \"childList\") {\n        Array.prototype.forEach.call(\n          addedNodes,\n          (node) => traverseForMediaStateReceivers(node, registerMediaStateReceiver)\n        );\n        Array.prototype.forEach.call(\n          removedNodes,\n          (node) => traverseForMediaStateReceivers(node, unregisterMediaStateReceiver)\n        );\n      } else if (type === \"attributes\" && attributeName === MediaStateReceiverAttributes.MEDIA_CHROME_ATTRIBUTES) {\n        if (isMediaStateReceiver(target)) {\n          registerMediaStateReceiver(target);\n        } else {\n          unregisterMediaStateReceiver(target);\n        }\n      }\n    });\n  };\n  let prevSlotted = [];\n  const slotChangeHandler = (event) => {\n    const slotEl = (\n      /** @type {HTMLSlotElement} */\n      event.target\n    );\n    if (slotEl.name === \"media\")\n      return;\n    prevSlotted.forEach(\n      (node) => traverseForMediaStateReceivers(node, unregisterMediaStateReceiver)\n    );\n    prevSlotted = /** @type {HTMLElement[]} */\n    [\n      ...slotEl.assignedElements({ flatten: true })\n    ];\n    prevSlotted.forEach(\n      (node) => traverseForMediaStateReceivers(node, registerMediaStateReceiver)\n    );\n  };\n  rootNode.addEventListener(\"slotchange\", slotChangeHandler);\n  const observer2 = new MutationObserver(mutationCallback);\n  observer2.observe(rootNode, {\n    childList: true,\n    attributes: true,\n    subtree: true\n  });\n  const unsubscribe = () => {\n    traverseForMediaStateReceivers(rootNode, unregisterMediaStateReceiver);\n    rootNode.removeEventListener(\"slotchange\", slotChangeHandler);\n    observer2.disconnect();\n    rootNode.removeEventListener(\n      MediaUIEvents.REGISTER_MEDIA_STATE_RECEIVER,\n      registerMediaStateReceiverHandler\n    );\n    rootNode.removeEventListener(\n      MediaUIEvents.UNREGISTER_MEDIA_STATE_RECEIVER,\n      unregisterMediaStateReceiverHandler\n    );\n  };\n  return unsubscribe;\n};\nif (!GlobalThis.customElements.get(\"media-controller\")) {\n  GlobalThis.customElements.define(\"media-controller\", MediaController);\n}\nvar media_controller_default = MediaController;\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-chrome-button.js\nvar __defProp2 = Object.defineProperty;\nvar __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField2 = (obj, key, value) => {\n  __defNormalProp2(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck5 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet5 = (obj, member, getter) => {\n  __accessCheck5(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd5 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet5 = (obj, member, value, setter) => {\n  __accessCheck5(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController2;\nvar _clickListener;\nvar _keyupListener;\nvar _keydownListener;\nvar template3 = Document2.createElement(\"template\");\ntemplate3.innerHTML = /*html*/\n`\n<style>\n  :host {\n    font: var(--media-font,\n      var(--media-font-weight, bold)\n      var(--media-font-size, 14px) /\n      var(--media-text-content-height, var(--media-control-height, 24px))\n      var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n    color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n    background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n    padding: var(--media-button-padding, var(--media-control-padding, 10px));\n    justify-content: var(--media-button-justify-content, center);\n    display: inline-flex;\n    align-items: center;\n    vertical-align: middle;\n    box-sizing: border-box;\n    transition: background .15s linear;\n    pointer-events: auto;\n    cursor: pointer;\n    -webkit-tap-highlight-color: transparent;\n  }\n\n  ${/*\n  Only show outline when keyboard focusing.\n  https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo\n*/\n\"\"}\n  :host(:focus-visible) {\n    box-shadow: inset 0 0 0 2px rgb(27 127 204 / .9);\n    outline: 0;\n  }\n  ${/*\n* hide default focus ring, particularly when using mouse\n*/\n\"\"}\n  :host(:where(:focus)) {\n    box-shadow: none;\n    outline: 0;\n  }\n\n  :host(:hover) {\n    background: var(--media-control-hover-background, rgba(50 50 70 / .7));\n  }\n\n  svg, img, ::slotted(svg), ::slotted(img) {\n    width: var(--media-button-icon-width);\n    height: var(--media-button-icon-height, var(--media-control-height, 24px));\n    transform: var(--media-button-icon-transform);\n    transition: var(--media-button-icon-transition);\n    fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n    vertical-align: middle;\n    max-width: 100%;\n    max-height: 100%;\n    min-width: 100%;\n  }\n</style>\n`;\nvar MediaChromeButton = class extends GlobalThis.HTMLElement {\n  constructor(options = {}) {\n    super();\n    __privateAdd5(this, _mediaController2, void 0);\n    __publicField2(this, \"preventClick\", false);\n    __privateAdd5(this, _clickListener, (e) => {\n      if (!this.preventClick) {\n        this.handleClick(e);\n      }\n    });\n    __privateAdd5(this, _keyupListener, (e) => {\n      const { key } = e;\n      if (!this.keysUsed.includes(key)) {\n        this.removeEventListener(\"keyup\", __privateGet5(this, _keyupListener));\n        return;\n      }\n      if (!this.preventClick) {\n        this.handleClick(e);\n      }\n    });\n    __privateAdd5(this, _keydownListener, (e) => {\n      const { metaKey, altKey, key } = e;\n      if (metaKey || altKey || !this.keysUsed.includes(key)) {\n        this.removeEventListener(\"keyup\", __privateGet5(this, _keyupListener));\n        return;\n      }\n      this.addEventListener(\"keyup\", __privateGet5(this, _keyupListener), { once: true });\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      const buttonHTML = template3.content.cloneNode(true);\n      this.nativeEl = buttonHTML;\n      let slotTemplate20 = options.slotTemplate;\n      if (!slotTemplate20) {\n        slotTemplate20 = Document2.createElement(\"template\");\n        slotTemplate20.innerHTML = `<slot>${options.defaultContent || \"\"}</slot>`;\n      }\n      this.nativeEl.appendChild(slotTemplate20.content.cloneNode(true));\n      this.shadowRoot.appendChild(buttonHTML);\n    }\n  }\n  static get observedAttributes() {\n    return [\"disabled\", MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n  }\n  enable() {\n    this.addEventListener(\"click\", __privateGet5(this, _clickListener));\n    this.addEventListener(\"keydown\", __privateGet5(this, _keydownListener));\n    this.tabIndex = 0;\n  }\n  disable() {\n    this.removeEventListener(\"click\", __privateGet5(this, _clickListener));\n    this.removeEventListener(\"keydown\", __privateGet5(this, _keydownListener));\n    this.removeEventListener(\"keyup\", __privateGet5(this, _keyupListener));\n    this.tabIndex = -1;\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet5(this, _mediaController2)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet5(this, _mediaController2, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet5(this, _mediaController2, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet5(this, _mediaController2)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    } else if (attrName === \"disabled\" && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"display\",\n      `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n    );\n    if (!this.hasAttribute(\"disabled\")) {\n      this.enable();\n    }\n    this.setAttribute(\"role\", \"button\");\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet5(\n        this,\n        _mediaController2,\n        // @ts-ignore\n        (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId)\n      );\n      (_c = (_b = __privateGet5(this, _mediaController2)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    this.disable();\n    (_b = (_a3 = __privateGet5(this, _mediaController2)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet5(this, _mediaController2, null);\n  }\n  get keysUsed() {\n    return [\"Enter\", \" \"];\n  }\n  /**\n   * @abstract\n   * @argument {Event} e\n   */\n  handleClick(e) {\n  }\n  // eslint-disable-line\n};\n_mediaController2 = /* @__PURE__ */ new WeakMap();\n_clickListener = /* @__PURE__ */ new WeakMap();\n_keyupListener = /* @__PURE__ */ new WeakMap();\n_keydownListener = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-chrome-button\")) {\n  GlobalThis.customElements.define(\"media-chrome-button\", MediaChromeButton);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-airplay-button.js\nvar airplayIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M22.13 3H3.87a.87.87 0 0 0-.87.87v13.26a.87.87 0 0 0 .87.87h3.4L9 16H5V5h16v11h-4l1.72 2h3.4a.87.87 0 0 0 .87-.87V3.87a.87.87 0 0 0-.86-.87Zm-8.75 11.44a.5.5 0 0 0-.76 0l-4.91 5.73a.5.5 0 0 0 .38.83h9.82a.501.501 0 0 0 .38-.83l-4.91-5.73Z\"/>\n</svg>\n`;\nvar slotTemplate = Document2.createElement(\"template\");\nslotTemplate.innerHTML = /*html*/\n`\n  <style>\n  :host([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}]) slot:not([name=exit]):not([name=icon]) {\n    display: none !important;\n  }\n\n  ${/* Double negative, but safer if display doesn't equal 'block' */\n\"\"}\n  :host(:not([${MediaUIAttributes.MEDIA_IS_AIRPLAYING}])) slot:not([name=enter]):not([name=icon]) {\n    display: none !important;\n  }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"enter\">${airplayIcon}</slot>\n    <slot name=\"exit\">${airplayIcon}</slot>\n  </slot>\n`;\nvar updateAriaLabel = (el) => {\n  const label = el.mediaIsAirplaying ? verbs.EXIT_AIRPLAY() : verbs.ENTER_AIRPLAY();\n  el.setAttribute(\"aria-label\", label);\n};\nvar MediaAirplayButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_AIRPLAYING,\n      MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate }, options));\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_IS_AIRPLAYING) {\n      updateAriaLabel(this);\n    }\n  }\n  /**\n   * @type {boolean} Are we currently airplaying\n   */\n  get mediaIsAirplaying() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_AIRPLAYING);\n  }\n  set mediaIsAirplaying(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_AIRPLAYING, value);\n  }\n  /**\n   * @type {string | undefined} Airplay unavailability state\n   */\n  get mediaAirplayUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE);\n  }\n  set mediaAirplayUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_AIRPLAY_UNAVAILABLE, value);\n  }\n  handleClick() {\n    const evt = new GlobalThis.CustomEvent(\n      MediaUIEvents.MEDIA_AIRPLAY_REQUEST,\n      {\n        composed: true,\n        bubbles: true\n      }\n    );\n    this.dispatchEvent(evt);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-airplay-button\")) {\n  GlobalThis.customElements.define(\"media-airplay-button\", MediaAirplayButton);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/anchor-utils.js\nfunction computePosition({ anchor, floating, placement }) {\n  let rects = getElementRects({ anchor, floating });\n  let { x: x4, y: y5 } = computeCoordsFromPlacement(rects, placement);\n  return { x: x4, y: y5 };\n}\nfunction getElementRects({ anchor, floating }) {\n  return {\n    anchor: getRectRelativeToOffsetParent(anchor, floating.offsetParent),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floating.offsetWidth,\n      height: floating.offsetHeight\n    }\n  };\n}\nfunction getRectRelativeToOffsetParent(element, offsetParent) {\n  let rect = element.getBoundingClientRect();\n  let offsetRect = offsetParent.getBoundingClientRect();\n  return {\n    x: rect.x - offsetRect.x,\n    y: rect.y - offsetRect.y,\n    width: rect.width,\n    height: rect.height\n  };\n}\nfunction computeCoordsFromPlacement({ anchor, floating }, placement) {\n  const alignmentAxis = getSideAxis(placement) === \"x\" ? \"y\" : \"x\";\n  const alignLength = alignmentAxis === \"y\" ? \"height\" : \"width\";\n  const side = getSide(placement);\n  const commonX = anchor.x + anchor.width / 2 - floating.width / 2;\n  const commonY = anchor.y + anchor.height / 2 - floating.height / 2;\n  const commonAlign = anchor[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case \"top\":\n      coords = { x: commonX, y: anchor.y - floating.height };\n      break;\n    case \"bottom\":\n      coords = { x: commonX, y: anchor.y + anchor.height };\n      break;\n    case \"right\":\n      coords = { x: anchor.x + anchor.width, y: commonY };\n      break;\n    case \"left\":\n      coords = { x: anchor.x - floating.width, y: commonY };\n      break;\n    default:\n      coords = { x: anchor.x, y: anchor.y };\n  }\n  switch (placement.split(\"-\")[1]) {\n    case \"start\":\n      coords[alignmentAxis] -= commonAlign;\n      break;\n    case \"end\":\n      coords[alignmentAxis] += commonAlign;\n      break;\n  }\n  return coords;\n}\nfunction getSide(placement) {\n  return placement.split(\"-\")[0];\n}\nfunction getSideAxis(placement) {\n  return [\"top\", \"bottom\"].includes(getSide(placement)) ? \"y\" : \"x\";\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/events.js\nvar __defProp3 = Object.defineProperty;\nvar __defNormalProp3 = (obj, key, value) => key in obj ? __defProp3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField3 = (obj, key, value) => {\n  __defNormalProp3(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar InvokeEvent = class extends Event {\n  /** @param  {EventInit & { action?: string, relatedTarget: Element }} init */\n  constructor(_a3) {\n    var _b = _a3, { action = \"auto\", relatedTarget } = _b, options = __objRest(_b, [\"action\", \"relatedTarget\"]);\n    super(\"invoke\", options);\n    __publicField3(this, \"action\");\n    __publicField3(this, \"relatedTarget\");\n    this.action = action;\n    this.relatedTarget = relatedTarget;\n  }\n};\nvar ToggleEvent = class extends Event {\n  /**\n   * @param  {EventInit & { newState: 'open' | 'closed', oldState: 'open' | 'closed' }} init\n   */\n  constructor(_a3) {\n    var _b = _a3, { newState, oldState } = _b, options = __objRest(_b, [\"newState\", \"oldState\"]);\n    super(\"toggle\", options);\n    __publicField3(this, \"newState\");\n    __publicField3(this, \"oldState\");\n    this.newState = newState;\n    this.oldState = oldState;\n  }\n};\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-chrome-menu.js\nvar __defProp4 = Object.defineProperty;\nvar __defNormalProp4 = (obj, key, value) => key in obj ? __defProp4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField4 = (obj, key, value) => {\n  __defNormalProp4(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck6 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet6 = (obj, member, getter) => {\n  __accessCheck6(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd6 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet6 = (obj, member, value, setter) => {\n  __accessCheck6(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod3 = (obj, member, method) => {\n  __accessCheck6(obj, member, \"access private method\");\n  return method;\n};\nvar _mediaController3;\nvar _previouslyFocused;\nvar _invokerElement;\nvar _keysSoFar;\nvar _clearKeysTimeout;\nvar _previousItems;\nvar _mutationObserver;\nvar _isPopover;\nvar _handleSlotChange;\nvar handleSlotChange_fn;\nvar _handleMenuItems;\nvar _updateLayoutStyle;\nvar updateLayoutStyle_fn;\nvar _handleInvoke;\nvar handleInvoke_fn;\nvar _handleOpen;\nvar handleOpen_fn;\nvar _handleClosed;\nvar handleClosed_fn;\nvar _handleBoundsResize;\nvar _handleMenuResize;\nvar _positionMenu;\nvar positionMenu_fn;\nvar _resizeMenu;\nvar resizeMenu_fn;\nvar _handleClick;\nvar handleClick_fn;\nvar _backButtonElement;\nvar backButtonElement_get;\nvar _handleToggle;\nvar handleToggle_fn;\nvar _checkSubmenuHasExpanded;\nvar checkSubmenuHasExpanded_fn;\nvar _handleFocusOut;\nvar handleFocusOut_fn;\nvar _handleKeyDown;\nvar handleKeyDown_fn;\nvar _getItem;\nvar getItem_fn;\nvar _getTabItem;\nvar getTabItem_fn;\nvar _setTabItem;\nvar setTabItem_fn;\nvar _selectItem;\nvar selectItem_fn;\nfunction createMenuItem({ type, text, value, checked }) {\n  const item = Document2.createElement(\"media-chrome-menu-item\");\n  item.type = type != null ? type : \"\";\n  item.part.add(\"menu-item\");\n  if (type)\n    item.part.add(type);\n  item.value = value;\n  item.checked = checked;\n  const label = Document2.createElement(\"span\");\n  label.textContent = text;\n  item.append(label);\n  return item;\n}\nfunction createIndicator(el, name) {\n  let customIndicator = el.querySelector(`:scope > [slot=\"${name}\"]`);\n  if ((customIndicator == null ? void 0 : customIndicator.nodeName) == \"SLOT\")\n    customIndicator = customIndicator.assignedElements({ flatten: true })[0];\n  if (customIndicator) {\n    customIndicator = customIndicator.cloneNode(true);\n    return customIndicator;\n  }\n  let fallbackIndicator = el.shadowRoot.querySelector(`[name=\"${name}\"] > svg`);\n  if (fallbackIndicator) {\n    return fallbackIndicator.cloneNode(true);\n  }\n  return \"\";\n}\nvar template4 = Document2.createElement(\"template\");\ntemplate4.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      font: var(--media-font,\n        var(--media-font-weight, normal)\n        var(--media-font-size, 14px) /\n        var(--media-text-content-height, var(--media-control-height, 24px))\n        var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n      color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n      background: var(--media-menu-background, var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .8))));\n      border-radius: var(--media-menu-border-radius);\n      border: var(--media-menu-border, none);\n      display: var(--media-menu-display, inline-flex);\n      transition: var(--media-menu-transition-in,\n        visibility 0s,\n        opacity .2s ease-out,\n        transform .15s ease-out,\n        left .2s ease-in-out,\n        min-width .2s ease-in-out,\n        min-height .2s ease-in-out\n      ) !important;\n      ${/* ^^Prevent transition override by media-container */\n\"\"}\n      visibility: var(--media-menu-visibility, visible);\n      opacity: var(--media-menu-opacity, 1);\n      max-height: var(--media-menu-max-height, var(--_menu-max-height, 300px));\n      transform: var(--media-menu-transform-in, translateY(0) scale(1));\n      flex-direction: column;\n      ${/* Prevent overflowing a flex container */\n\"\"}\n      min-height: 0;\n      position: relative;\n      box-sizing: border-box;\n    }\n\n    :host([hidden]) {\n      transition: var(--media-menu-transition-out,\n        visibility .15s ease-in,\n        opacity .15s ease-in,\n        transform .15s ease-in\n      ) !important;\n      visibility: var(--media-menu-hidden-visibility, hidden);\n      opacity: var(--media-menu-hidden-opacity, 0);\n      max-height: var(--media-menu-hidden-max-height,\n        var(--media-menu-max-height, var(--_menu-max-height, 300px)));\n      transform: var(--media-menu-transform-out, translateY(2px) scale(.99));\n      pointer-events: none;\n    }\n\n    :host([slot=\"submenu\"]) {\n      background: none;\n      width: 100%;\n      min-height: 100%;\n      position: absolute;\n      bottom: 0;\n      right: -100%;\n    }\n\n    #container {\n      display: flex;\n      flex-direction: column;\n      min-height: 0;\n      transition: transform .2s ease-out;\n      transform: translate(0, 0);\n    }\n\n    #container.has-expanded {\n      transition: transform .2s ease-in;\n      transform: translate(-100%, 0);\n    }\n\n    slot[name=\"header\"] {\n      display: flex;\n      padding: .4em .7em;\n      border-bottom: 1px solid rgb(255 255 255 / .25);\n      cursor: default;\n    }\n\n    slot[name=\"header\"][hidden] {\n      display: none;\n    }\n\n    button[part~=\"back\"] {\n      background: none;\n      color: inherit;\n      border: none;\n      padding: 0;\n      font: inherit;\n      cursor: pointer;\n      outline: inherit;\n      display: inline-flex;\n      align-items: center;\n      cursor: pointer;\n    }\n\n    svg[part~=\"back\"] {\n      height: var(--media-menu-icon-height, var(--media-control-height, 24px));\n      fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n      display: block;\n      margin-right: .5ch;\n    }\n\n    slot:not([name]) {\n      gap: var(--media-menu-gap);\n      flex-direction: var(--media-menu-flex-direction, column);\n      overflow: var(--media-menu-overflow, hidden auto);\n      display: flex;\n      min-height: 0;\n    }\n\n    :host([role=\"menu\"]) slot:not([name]) {\n      padding-block: .4em;\n    }\n\n    slot:not([name])::slotted([role=\"menu\"]) {\n      background: none;\n    }\n\n    media-chrome-menu-item > span {\n      margin-right: .5ch;\n      max-width: var(--media-menu-item-max-width);\n      text-overflow: ellipsis;\n      overflow: hidden;\n    }\n  </style>\n  <style id=\"layout-row\" media=\"width:0\">\n\n    slot[name=\"header\"] {\n      padding: .4em .5em;\n    }\n\n    slot:not([name]) {\n      gap: var(--media-menu-gap, .25em);\n      flex-direction: var(--media-menu-flex-direction, row);\n      padding-inline: .5em;\n    }\n\n    media-chrome-menu-item {\n      padding: .3em .5em;\n    }\n\n    media-chrome-menu-item[aria-checked=\"true\"] {\n      background: var(--media-menu-item-checked-background, rgb(255 255 255 / .2));\n    }\n\n    ${/* In row layout hide the checked indicator completely. */\n\"\"}\n    media-chrome-menu-item::part(checked-indicator) {\n      display: var(--media-menu-item-checked-indicator-display, none);\n    }\n  </style>\n  <div id=\"container\">\n    <slot name=\"header\" hidden>\n      <button part=\"back button\" aria-label=\"Back to previous menu\">\n        <slot name=\"back-icon\">\n          <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\" part=\"back indicator\">\n            <path d=\"m11.88 17.585.742-.669-4.2-4.665 4.2-4.666-.743-.669-4.803 5.335 4.803 5.334Z\"/>\n          </svg>\n        </slot>\n        <slot name=\"title\"></slot>\n      </button>\n    </slot>\n    <slot></slot>\n  </div>\n  <slot name=\"checked-indicator\" hidden></slot>\n`;\nvar Attributes3 = {\n  STYLE: \"style\",\n  HIDDEN: \"hidden\",\n  DISABLED: \"disabled\",\n  ANCHOR: \"anchor\"\n};\nvar MediaChromeMenu = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd6(this, _handleSlotChange);\n    __privateAdd6(this, _updateLayoutStyle);\n    __privateAdd6(this, _handleInvoke);\n    __privateAdd6(this, _handleOpen);\n    __privateAdd6(this, _handleClosed);\n    __privateAdd6(this, _positionMenu);\n    __privateAdd6(this, _resizeMenu);\n    __privateAdd6(this, _handleClick);\n    __privateAdd6(this, _backButtonElement);\n    __privateAdd6(this, _handleToggle);\n    __privateAdd6(this, _checkSubmenuHasExpanded);\n    __privateAdd6(this, _handleFocusOut);\n    __privateAdd6(this, _handleKeyDown);\n    __privateAdd6(this, _getItem);\n    __privateAdd6(this, _getTabItem);\n    __privateAdd6(this, _setTabItem);\n    __privateAdd6(this, _selectItem);\n    __privateAdd6(this, _mediaController3, void 0);\n    __privateAdd6(this, _previouslyFocused, void 0);\n    __privateAdd6(this, _invokerElement, void 0);\n    __privateAdd6(this, _keysSoFar, \"\");\n    __privateAdd6(this, _clearKeysTimeout, null);\n    __privateAdd6(this, _previousItems, /* @__PURE__ */ new Set());\n    __privateAdd6(this, _mutationObserver, void 0);\n    __privateAdd6(this, _isPopover, false);\n    __privateAdd6(this, _handleMenuItems, () => {\n      const previousItems = __privateGet6(this, _previousItems);\n      const currentItems = new Set(this.items);\n      for (const item of previousItems) {\n        if (!currentItems.has(item)) {\n          this.dispatchEvent(new CustomEvent(\"removemenuitem\", { detail: item }));\n        }\n      }\n      for (const item of currentItems) {\n        if (!previousItems.has(item)) {\n          this.dispatchEvent(new CustomEvent(\"addmenuitem\", { detail: item }));\n        }\n      }\n      __privateSet6(this, _previousItems, currentItems);\n    });\n    __privateAdd6(this, _handleBoundsResize, () => {\n      __privateMethod3(this, _positionMenu, positionMenu_fn).call(this, false);\n      __privateMethod3(this, _resizeMenu, resizeMenu_fn).call(this, false);\n    });\n    __privateAdd6(this, _handleMenuResize, () => {\n      __privateMethod3(this, _positionMenu, positionMenu_fn).call(this, false);\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.nativeEl = this.constructor.template.content.cloneNode(true);\n      this.shadowRoot.append(this.nativeEl);\n    }\n    this.container = this.shadowRoot.querySelector(\"#container\");\n    this.defaultSlot = this.shadowRoot.querySelector(\"slot:not([name])\");\n    this.shadowRoot.addEventListener(\"slotchange\", this);\n    __privateSet6(this, _mutationObserver, new MutationObserver(__privateGet6(this, _handleMenuItems)));\n    __privateGet6(this, _mutationObserver).observe(this.defaultSlot, { childList: true });\n  }\n  static get observedAttributes() {\n    return [\n      Attributes3.DISABLED,\n      Attributes3.HIDDEN,\n      Attributes3.STYLE,\n      Attributes3.ANCHOR,\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    ];\n  }\n  static formatMenuItemText(text) {\n    return text;\n  }\n  enable() {\n    this.addEventListener(\"click\", this);\n    this.addEventListener(\"focusout\", this);\n    this.addEventListener(\"keydown\", this);\n    this.addEventListener(\"invoke\", this);\n    this.addEventListener(\"toggle\", this);\n  }\n  disable() {\n    this.removeEventListener(\"click\", this);\n    this.removeEventListener(\"focusout\", this);\n    this.removeEventListener(\"keyup\", this);\n    this.removeEventListener(\"invoke\", this);\n    this.removeEventListener(\"toggle\", this);\n  }\n  handleEvent(event) {\n    switch (event.type) {\n      case \"slotchange\":\n        __privateMethod3(this, _handleSlotChange, handleSlotChange_fn).call(this, event);\n        break;\n      case \"invoke\":\n        __privateMethod3(this, _handleInvoke, handleInvoke_fn).call(this, event);\n        break;\n      case \"click\":\n        __privateMethod3(this, _handleClick, handleClick_fn).call(this, event);\n        break;\n      case \"toggle\":\n        __privateMethod3(this, _handleToggle, handleToggle_fn).call(this, event);\n        break;\n      case \"focusout\":\n        __privateMethod3(this, _handleFocusOut, handleFocusOut_fn).call(this, event);\n        break;\n      case \"keydown\":\n        __privateMethod3(this, _handleKeyDown, handleKeyDown_fn).call(this, event);\n        break;\n    }\n  }\n  connectedCallback() {\n    var _a3, _b;\n    __privateMethod3(this, _updateLayoutStyle, updateLayoutStyle_fn).call(this);\n    if (!this.hasAttribute(\"disabled\")) {\n      this.enable();\n    }\n    if (!this.role) {\n      this.role = \"menu\";\n    }\n    __privateSet6(this, _mediaController3, getAttributeMediaController(this));\n    (_b = (_a3 = __privateGet6(this, _mediaController3)) == null ? void 0 : _a3.associateElement) == null ? void 0 : _b.call(_a3, this);\n    if (!this.hidden) {\n      observeResize(getBoundsElement(this), __privateGet6(this, _handleBoundsResize));\n      observeResize(this, __privateGet6(this, _handleMenuResize));\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    unobserveResize(getBoundsElement(this), __privateGet6(this, _handleBoundsResize));\n    unobserveResize(this, __privateGet6(this, _handleMenuResize));\n    this.disable();\n    (_b = (_a3 = __privateGet6(this, _mediaController3)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet6(this, _mediaController3, null);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d;\n    if (attrName === Attributes3.HIDDEN && newValue !== oldValue) {\n      if (!__privateGet6(this, _isPopover))\n        __privateSet6(this, _isPopover, true);\n      if (this.hidden) {\n        __privateMethod3(this, _handleClosed, handleClosed_fn).call(this);\n      } else {\n        __privateMethod3(this, _handleOpen, handleOpen_fn).call(this);\n      }\n      this.dispatchEvent(\n        new ToggleEvent({\n          oldState: this.hidden ? \"open\" : \"closed\",\n          newState: this.hidden ? \"closed\" : \"open\",\n          bubbles: true\n        })\n      );\n    } else if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet6(this, _mediaController3)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet6(this, _mediaController3, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet6(this, _mediaController3, getAttributeMediaController(this));\n        (_d = (_c = __privateGet6(this, _mediaController3)) == null ? void 0 : _c.associateElement) == null ? void 0 : _d.call(_c, this);\n      }\n    } else if (attrName === Attributes3.DISABLED && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    } else if (attrName === Attributes3.STYLE && newValue !== oldValue) {\n      __privateMethod3(this, _updateLayoutStyle, updateLayoutStyle_fn).call(this);\n    }\n  }\n  formatMenuItemText(text, data) {\n    return this.constructor.formatMenuItemText(text, data);\n  }\n  get anchor() {\n    return this.getAttribute(\"anchor\");\n  }\n  set anchor(value) {\n    this.setAttribute(\"anchor\", `${value}`);\n  }\n  /**\n   * Returns the anchor element when it is a floating menu.\n   * @return {HTMLElement}\n   */\n  get anchorElement() {\n    var _a3;\n    if (this.anchor) {\n      return (_a3 = getDocumentOrShadowRoot(this)) == null ? void 0 : _a3.querySelector(`#${this.anchor}`);\n    }\n    return null;\n  }\n  /**\n   * Returns the menu items.\n   */\n  get items() {\n    return (\n      /** @type {MediaChromeMenuItem[] | null} */\n      this.defaultSlot.assignedElements({ flatten: true }).filter(isMenuItem)\n    );\n  }\n  get radioGroupItems() {\n    return this.items.filter((item) => item.role === \"menuitemradio\");\n  }\n  get checkedItems() {\n    return this.items.filter((item) => item.checked);\n  }\n  get value() {\n    var _a3, _b;\n    return (_b = (_a3 = this.checkedItems[0]) == null ? void 0 : _a3.value) != null ? _b : \"\";\n  }\n  set value(newValue) {\n    const item = this.items.find((item2) => item2.value === newValue);\n    if (!item)\n      return;\n    __privateMethod3(this, _selectItem, selectItem_fn).call(this, item);\n  }\n  focus() {\n    __privateSet6(this, _previouslyFocused, getActiveElement());\n    if (this.items.length) {\n      __privateMethod3(this, _setTabItem, setTabItem_fn).call(this, this.items[0]);\n      this.items[0].focus();\n      return;\n    }\n    const focusable = this.querySelector(\n      '[autofocus], [tabindex]:not([tabindex=\"-1\"]), [role=\"menu\"]'\n    );\n    focusable == null ? void 0 : focusable.focus();\n  }\n  handleSelect(event) {\n    var _a3;\n    const item = __privateMethod3(this, _getItem, getItem_fn).call(this, event);\n    if (!item)\n      return;\n    __privateMethod3(this, _selectItem, selectItem_fn).call(this, item, item.type === \"checkbox\");\n    if (__privateGet6(this, _invokerElement) && !this.hidden) {\n      (_a3 = __privateGet6(this, _previouslyFocused)) == null ? void 0 : _a3.focus();\n      this.hidden = true;\n    }\n  }\n  get keysUsed() {\n    return [\n      \"Enter\",\n      \"Escape\",\n      \"Tab\",\n      \" \",\n      \"ArrowDown\",\n      \"ArrowUp\",\n      \"Home\",\n      \"End\"\n    ];\n  }\n  handleMove(event) {\n    var _a3, _b;\n    const { key } = event;\n    const items = this.items;\n    const currentItem = (_b = (_a3 = __privateMethod3(this, _getItem, getItem_fn).call(this, event)) != null ? _a3 : __privateMethod3(this, _getTabItem, getTabItem_fn).call(this)) != null ? _b : items[0];\n    const currentIndex = items.indexOf(currentItem);\n    let index = Math.max(0, currentIndex);\n    if (key === \"ArrowDown\") {\n      index++;\n    } else if (key === \"ArrowUp\") {\n      index--;\n    } else if (event.key === \"Home\") {\n      index = 0;\n    } else if (event.key === \"End\") {\n      index = items.length - 1;\n    }\n    if (index < 0) {\n      index = items.length - 1;\n    }\n    if (index > items.length - 1) {\n      index = 0;\n    }\n    __privateMethod3(this, _setTabItem, setTabItem_fn).call(this, items[index]);\n    items[index].focus();\n  }\n};\n_mediaController3 = /* @__PURE__ */ new WeakMap();\n_previouslyFocused = /* @__PURE__ */ new WeakMap();\n_invokerElement = /* @__PURE__ */ new WeakMap();\n_keysSoFar = /* @__PURE__ */ new WeakMap();\n_clearKeysTimeout = /* @__PURE__ */ new WeakMap();\n_previousItems = /* @__PURE__ */ new WeakMap();\n_mutationObserver = /* @__PURE__ */ new WeakMap();\n_isPopover = /* @__PURE__ */ new WeakMap();\n_handleSlotChange = /* @__PURE__ */ new WeakSet();\nhandleSlotChange_fn = function(event) {\n  const slot = event.target;\n  for (let node of slot.assignedNodes({ flatten: true })) {\n    if (node.nodeType === 3 && node.textContent.trim() === \"\") {\n      node.remove();\n    }\n  }\n  if ([\"header\", \"title\"].includes(slot.name)) {\n    const header = this.shadowRoot.querySelector('slot[name=\"header\"]');\n    header.hidden = slot.assignedNodes().length === 0;\n  }\n  if (!slot.name) {\n    __privateGet6(this, _handleMenuItems).call(this);\n  }\n};\n_handleMenuItems = /* @__PURE__ */ new WeakMap();\n_updateLayoutStyle = /* @__PURE__ */ new WeakSet();\nupdateLayoutStyle_fn = function() {\n  var _a3;\n  const layoutRowStyle = this.shadowRoot.querySelector(\"#layout-row\");\n  const menuLayout = (_a3 = getComputedStyle(this).getPropertyValue(\"--media-menu-layout\")) == null ? void 0 : _a3.trim();\n  layoutRowStyle.setAttribute(\"media\", menuLayout === \"row\" ? \"\" : \"width:0\");\n};\n_handleInvoke = /* @__PURE__ */ new WeakSet();\nhandleInvoke_fn = function(event) {\n  __privateSet6(this, _invokerElement, event.relatedTarget);\n  if (!containsComposedNode(this, event.relatedTarget)) {\n    this.hidden = !this.hidden;\n  }\n};\n_handleOpen = /* @__PURE__ */ new WeakSet();\nhandleOpen_fn = function() {\n  var _a3;\n  (_a3 = __privateGet6(this, _invokerElement)) == null ? void 0 : _a3.setAttribute(\"aria-expanded\", \"true\");\n  requestAnimationFrame(() => __privateMethod3(this, _positionMenu, positionMenu_fn).call(this, false));\n  this.addEventListener(\"transitionend\", () => this.focus(), { once: true });\n  observeResize(getBoundsElement(this), __privateGet6(this, _handleBoundsResize));\n  observeResize(this, __privateGet6(this, _handleMenuResize));\n};\n_handleClosed = /* @__PURE__ */ new WeakSet();\nhandleClosed_fn = function() {\n  var _a3;\n  (_a3 = __privateGet6(this, _invokerElement)) == null ? void 0 : _a3.setAttribute(\"aria-expanded\", \"false\");\n  unobserveResize(getBoundsElement(this), __privateGet6(this, _handleBoundsResize));\n  unobserveResize(this, __privateGet6(this, _handleMenuResize));\n};\n_handleBoundsResize = /* @__PURE__ */ new WeakMap();\n_handleMenuResize = /* @__PURE__ */ new WeakMap();\n_positionMenu = /* @__PURE__ */ new WeakSet();\npositionMenu_fn = function(animate, menuWidth) {\n  if (this.hasAttribute(\"mediacontroller\") && !this.anchor)\n    return;\n  if (this.hidden || !this.anchorElement)\n    return;\n  const { x: x4, y: y5 } = computePosition({\n    anchor: this.anchorElement,\n    floating: this,\n    placement: \"top-start\"\n  });\n  menuWidth != null ? menuWidth : menuWidth = this.offsetWidth;\n  const bounds = getBoundsElement(this);\n  const boundsRect = bounds.getBoundingClientRect();\n  const anchorRect = this.anchorElement.getBoundingClientRect();\n  const right = boundsRect.width - x4 - menuWidth;\n  const bottom = boundsRect.height - y5 - this.offsetHeight;\n  const maxHeight = boundsRect.height - anchorRect.height;\n  const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n  if (!animate) {\n    style.setProperty(\"--media-menu-transition-in\", \"none\");\n  }\n  style.setProperty(\"position\", \"absolute\");\n  style.setProperty(\"right\", `${Math.max(0, right)}px`);\n  style.setProperty(\"bottom\", `${bottom}px`);\n  style.setProperty(\"--_menu-max-height\", `${maxHeight}px`);\n  style.removeProperty(\"--media-menu-transition-in\");\n};\n_resizeMenu = /* @__PURE__ */ new WeakSet();\nresizeMenu_fn = function(animate) {\n  const expandedMenuItem = this.querySelector(\n    '[role=\"menuitem\"][aria-haspopup][aria-expanded=\"true\"]'\n  );\n  const expandedSubmenu = expandedMenuItem == null ? void 0 : expandedMenuItem.querySelector('[role=\"menu\"]');\n  const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n  if (!animate) {\n    style.setProperty(\"--media-menu-transition-in\", \"none\");\n  }\n  if (expandedSubmenu) {\n    const height = expandedSubmenu.offsetHeight;\n    const width = Math.max(\n      expandedSubmenu.offsetWidth,\n      expandedMenuItem.offsetWidth\n    );\n    this.style.setProperty(\"min-width\", `${width}px`);\n    this.style.setProperty(\"min-height\", `${height}px`);\n    __privateMethod3(this, _positionMenu, positionMenu_fn).call(this, animate, width);\n  } else {\n    this.style.removeProperty(\"min-width\");\n    this.style.removeProperty(\"min-height\");\n    __privateMethod3(this, _positionMenu, positionMenu_fn).call(this, animate);\n  }\n  style.removeProperty(\"--media-menu-transition-in\");\n};\n_handleClick = /* @__PURE__ */ new WeakSet();\nhandleClick_fn = function(event) {\n  var _a3;\n  event.stopPropagation();\n  if (event.composedPath().includes(__privateGet6(this, _backButtonElement, backButtonElement_get))) {\n    (_a3 = __privateGet6(this, _previouslyFocused)) == null ? void 0 : _a3.focus();\n    this.hidden = true;\n    return;\n  }\n  const item = __privateMethod3(this, _getItem, getItem_fn).call(this, event);\n  if (!item || item.hasAttribute(\"disabled\"))\n    return;\n  __privateMethod3(this, _setTabItem, setTabItem_fn).call(this, item);\n  this.handleSelect(event);\n};\n_backButtonElement = /* @__PURE__ */ new WeakSet();\nbackButtonElement_get = function() {\n  var _a3;\n  const headerSlot = this.shadowRoot.querySelector('slot[name=\"header\"]');\n  return (_a3 = headerSlot.assignedElements({ flatten: true })) == null ? void 0 : _a3.find((el) => el.part.contains(\"back\") && el.part.contains(\"button\"));\n};\n_handleToggle = /* @__PURE__ */ new WeakSet();\nhandleToggle_fn = function(event) {\n  if (event.target === this)\n    return;\n  __privateMethod3(this, _checkSubmenuHasExpanded, checkSubmenuHasExpanded_fn).call(this);\n  const menuItemsWithSubmenu = Array.from(\n    this.querySelectorAll('[role=\"menuitem\"][aria-haspopup]')\n  );\n  for (const item of menuItemsWithSubmenu) {\n    if (item.invokeTargetElement == event.target)\n      continue;\n    if (event.newState == \"open\" && item.getAttribute(\"aria-expanded\") == \"true\" && !item.invokeTargetElement.hidden) {\n      item.invokeTargetElement.dispatchEvent(\n        new InvokeEvent({ relatedTarget: item })\n      );\n    }\n  }\n  for (const item of menuItemsWithSubmenu) {\n    item.setAttribute(\"aria-expanded\", `${!item.submenuElement.hidden}`);\n  }\n  __privateMethod3(this, _resizeMenu, resizeMenu_fn).call(this, true);\n};\n_checkSubmenuHasExpanded = /* @__PURE__ */ new WeakSet();\ncheckSubmenuHasExpanded_fn = function() {\n  const selector = '[role=\"menuitem\"] > [role=\"menu\"]:not([hidden])';\n  const expandedMenuItem = this.querySelector(selector);\n  this.container.classList.toggle(\"has-expanded\", !!expandedMenuItem);\n};\n_handleFocusOut = /* @__PURE__ */ new WeakSet();\nhandleFocusOut_fn = function(event) {\n  var _a3;\n  if (!containsComposedNode(this, event.relatedTarget)) {\n    if (__privateGet6(this, _isPopover)) {\n      (_a3 = __privateGet6(this, _previouslyFocused)) == null ? void 0 : _a3.focus();\n    }\n    if (__privateGet6(this, _invokerElement) && __privateGet6(this, _invokerElement) !== event.relatedTarget && !this.hidden) {\n      this.hidden = true;\n    }\n  }\n};\n_handleKeyDown = /* @__PURE__ */ new WeakSet();\nhandleKeyDown_fn = function(event) {\n  var _a3, _b, _c, _d, _e5;\n  const { key, ctrlKey, altKey, metaKey } = event;\n  if (ctrlKey || altKey || metaKey) {\n    return;\n  }\n  if (!this.keysUsed.includes(key)) {\n    return;\n  }\n  event.preventDefault();\n  event.stopPropagation();\n  if (key === \"Tab\") {\n    if (__privateGet6(this, _isPopover)) {\n      this.hidden = true;\n      return;\n    }\n    if (event.shiftKey) {\n      (_b = (_a3 = this.previousElementSibling) == null ? void 0 : _a3.focus) == null ? void 0 : _b.call(_a3);\n    } else {\n      (_d = (_c = this.nextElementSibling) == null ? void 0 : _c.focus) == null ? void 0 : _d.call(_c);\n    }\n    this.blur();\n  } else if (key === \"Escape\") {\n    (_e5 = __privateGet6(this, _previouslyFocused)) == null ? void 0 : _e5.focus();\n    if (__privateGet6(this, _isPopover)) {\n      this.hidden = true;\n    }\n  } else if (key === \"Enter\" || key === \" \") {\n    this.handleSelect(event);\n  } else {\n    this.handleMove(event);\n  }\n};\n_getItem = /* @__PURE__ */ new WeakSet();\ngetItem_fn = function(event) {\n  return event.composedPath().find((el) => {\n    return [\"menuitemradio\", \"menuitemcheckbox\"].includes(el.role);\n  });\n};\n_getTabItem = /* @__PURE__ */ new WeakSet();\ngetTabItem_fn = function() {\n  return this.items.find((item) => item.tabIndex === 0);\n};\n_setTabItem = /* @__PURE__ */ new WeakSet();\nsetTabItem_fn = function(tabItem) {\n  for (const item of this.items) {\n    item.tabIndex = item === tabItem ? 0 : -1;\n  }\n};\n_selectItem = /* @__PURE__ */ new WeakSet();\nselectItem_fn = function(item, toggle) {\n  const oldCheckedItems = [...this.checkedItems];\n  if (item.type === \"radio\") {\n    this.radioGroupItems.forEach((el) => el.checked = false);\n  }\n  if (toggle) {\n    item.checked = !item.checked;\n  } else {\n    item.checked = true;\n  }\n  if (this.checkedItems.some((opt, i2) => opt != oldCheckedItems[i2])) {\n    this.dispatchEvent(\n      new Event(\"change\", { bubbles: true, composed: true })\n    );\n  }\n};\n__publicField4(MediaChromeMenu, \"template\", template4);\nfunction isMenuItem(element) {\n  return [\"menuitem\", \"menuitemradio\", \"menuitemcheckbox\"].includes(\n    element == null ? void 0 : element.role\n  );\n}\nfunction getBoundsElement(host) {\n  var _a3;\n  return (_a3 = host.getAttribute(\"bounds\") ? closestComposedNode(host, `#${host.getAttribute(\"bounds\")}`) : getMediaController(host) || host.parentElement) != null ? _a3 : host;\n}\nif (!GlobalThis.customElements.get(\"media-chrome-menu\")) {\n  GlobalThis.customElements.define(\"media-chrome-menu\", MediaChromeMenu);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-audio-track-menu.js\nvar __accessCheck7 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet7 = (obj, member, getter) => {\n  __accessCheck7(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd7 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet7 = (obj, member, value, setter) => {\n  __accessCheck7(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod4 = (obj, member, method) => {\n  __accessCheck7(obj, member, \"access private method\");\n  return method;\n};\nvar _audioTrackList;\nvar _prevState;\nvar _render;\nvar render_fn;\nvar _onChange;\nvar onChange_fn;\nvar MediaAudioTrackMenu = class extends MediaChromeMenu {\n  constructor() {\n    super(...arguments);\n    __privateAdd7(this, _render);\n    __privateAdd7(this, _onChange);\n    __privateAdd7(this, _audioTrackList, []);\n    __privateAdd7(this, _prevState, void 0);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_UNAVAILABLE\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED && oldValue !== newValue) {\n      this.value = newValue;\n    } else if (attrName === MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST && oldValue !== newValue) {\n      __privateSet7(this, _audioTrackList, parseAudioTrackList(newValue));\n      __privateMethod4(this, _render, render_fn).call(this);\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod4(this, _onChange, onChange_fn));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod4(this, _onChange, onChange_fn));\n  }\n  /**\n   * Returns the anchor element when it is a floating menu.\n   * @return {HTMLElement}\n   */\n  get anchorElement() {\n    if (this.anchor !== \"auto\")\n      return super.anchorElement;\n    return getMediaController(this).querySelector(\n      \"media-audio-track-menu-button\"\n    );\n  }\n  get mediaAudioTrackList() {\n    return __privateGet7(this, _audioTrackList);\n  }\n  set mediaAudioTrackList(list) {\n    __privateSet7(this, _audioTrackList, list);\n    __privateMethod4(this, _render, render_fn).call(this);\n  }\n  /**\n   * Get enabled audio track id.\n   * @return {string}\n   */\n  get mediaAudioTrackEnabled() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED);\n  }\n  set mediaAudioTrackEnabled(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED, id);\n  }\n};\n_audioTrackList = /* @__PURE__ */ new WeakMap();\n_prevState = /* @__PURE__ */ new WeakMap();\n_render = /* @__PURE__ */ new WeakSet();\nrender_fn = function() {\n  if (__privateGet7(this, _prevState) === JSON.stringify(this.mediaAudioTrackList))\n    return;\n  __privateSet7(this, _prevState, JSON.stringify(this.mediaAudioTrackList));\n  const audioTrackList = this.mediaAudioTrackList;\n  this.defaultSlot.textContent = \"\";\n  for (const audioTrack of audioTrackList) {\n    const text = this.formatMenuItemText(audioTrack.label, audioTrack);\n    const item = createMenuItem({\n      type: \"radio\",\n      text,\n      value: `${audioTrack.id}`,\n      checked: audioTrack.enabled\n    });\n    item.prepend(createIndicator(this, \"checked-indicator\"));\n    this.defaultSlot.append(item);\n  }\n};\n_onChange = /* @__PURE__ */ new WeakSet();\nonChange_fn = function() {\n  if (this.value == null)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_AUDIO_TRACK_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\nif (!GlobalThis.customElements.get(\"media-audio-track-menu\")) {\n  GlobalThis.customElements.define(\n    \"media-audio-track-menu\",\n    MediaAudioTrackMenu\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-chrome-menu-button.js\nvar MediaChromeMenuButton = class extends MediaChromeButton {\n  connectedCallback() {\n    super.connectedCallback();\n    if (this.invokeTargetElement) {\n      this.setAttribute(\"aria-haspopup\", \"menu\");\n    }\n  }\n  get invokeTarget() {\n    return this.getAttribute(\"invoketarget\");\n  }\n  set invokeTarget(value) {\n    this.setAttribute(\"invoketarget\", `${value}`);\n  }\n  /**\n   * Returns the element with the id specified by the `invoketarget` attribute.\n   * @return {HTMLElement | null}\n   */\n  get invokeTargetElement() {\n    var _a3;\n    if (this.invokeTarget) {\n      return (_a3 = getDocumentOrShadowRoot(this)) == null ? void 0 : _a3.querySelector(\n        `#${this.invokeTarget}`\n      );\n    }\n    return null;\n  }\n  handleClick() {\n    this.invokeTargetElement.dispatchEvent(\n      new InvokeEvent({ relatedTarget: this })\n    );\n  }\n};\nif (!GlobalThis.customElements.get(\"media-chrome-menu-button\")) {\n  GlobalThis.customElements.define(\n    \"media-chrome-menu-button\",\n    MediaChromeMenuButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-audio-track-menu-button.js\nvar audioTrackIcon = (\n  /*html*/\n  `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M11 17H9.5V7H11v10Zm-3-3H6.5v-4H8v4Zm6-5h-1.5v6H14V9Zm3 7h-1.5V8H17v8Z\"/>\n  <path d=\"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Zm-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0Z\"/>\n</svg>`\n);\nvar slotTemplate2 = Document2.createElement(\"template\");\nslotTemplate2.innerHTML = /*html*/\n`\n  <slot name=\"icon\">${audioTrackIcon}</slot>\n`;\nvar MediaAudioTrackMenuButton = class extends MediaChromeMenuButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_UNAVAILABLE\n    ];\n  }\n  constructor() {\n    super({ slotTemplate: slotTemplate2 });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"aria-label\", nouns.AUDIO_TRACKS());\n  }\n  /**\n   * Returns the element with the id specified by the `invoketarget` attribute.\n   * @return {HTMLElement | null}\n   */\n  get invokeTargetElement() {\n    if (this.invokeTarget != void 0)\n      return super.invokeTargetElement;\n    return getMediaController(this).querySelector(\"media-audio-track-menu\");\n  }\n  /**\n   * Get enabled audio track id.\n   * @return {string}\n   */\n  get mediaAudioTrackEnabled() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED);\n  }\n  set mediaAudioTrackEnabled(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED, id);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-audio-track-menu-button\")) {\n  GlobalThis.customElements.define(\n    \"media-audio-track-menu-button\",\n    MediaAudioTrackMenuButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-captions-button.js\nvar ccIconOn = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n</svg>`;\nvar ccIconOff = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M17.73 14.09a1.4 1.4 0 0 1-1 .37 1.579 1.579 0 0 1-1.27-.58A3 3 0 0 1 15 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34A2.89 2.89 0 0 0 19 9.07a3 3 0 0 0-2.14-.78 3.14 3.14 0 0 0-2.42 1 3.91 3.91 0 0 0-.93 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.17 3.17 0 0 0 1.07-1.74l-1.4-.45c-.083.43-.3.822-.62 1.12Zm-7.22 0a1.43 1.43 0 0 1-1 .37 1.58 1.58 0 0 1-1.27-.58A3 3 0 0 1 7.76 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34a2.81 2.81 0 0 0-.74-1.32 2.94 2.94 0 0 0-2.13-.78 3.18 3.18 0 0 0-2.43 1 4 4 0 0 0-.92 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.23 3.23 0 0 0 1.07-1.74l-1.4-.45a2.06 2.06 0 0 1-.6 1.07Zm12.32-8.41a2.59 2.59 0 0 0-2.3-2.51C18.72 3.05 15.86 3 13 3c-2.86 0-5.72.05-7.53.17a2.59 2.59 0 0 0-2.3 2.51c-.23 4.207-.23 8.423 0 12.63a2.57 2.57 0 0 0 2.3 2.5c1.81.13 4.67.19 7.53.19 2.86 0 5.72-.06 7.53-.19a2.57 2.57 0 0 0 2.3-2.5c.23-4.207.23-8.423 0-12.63Zm-1.49 12.53a1.11 1.11 0 0 1-.91 1.11c-1.67.11-4.45.18-7.43.18-2.98 0-5.76-.07-7.43-.18a1.11 1.11 0 0 1-.91-1.11c-.21-4.14-.21-8.29 0-12.43a1.11 1.11 0 0 1 .91-1.11C7.24 4.56 10 4.49 13 4.49s5.76.07 7.43.18a1.11 1.11 0 0 1 .91 1.11c.21 4.14.21 8.29 0 12.43Z\"/>\n</svg>`;\nvar slotTemplate3 = Document2.createElement(\"template\");\nslotTemplate3.innerHTML = /*html*/\n`\n  <style>\n    :host([aria-checked=\"true\"]) slot[name=off] {\n      display: none !important;\n    }\n\n    ${/* Double negative, but safer if display doesn't equal 'block' */\n\"\"}\n    :host(:not([aria-checked=\"true\"])) slot[name=on] {\n      display: none !important;\n    }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"on\">${ccIconOn}</slot>\n    <slot name=\"off\">${ccIconOff}</slot>\n  </slot>\n`;\nvar updateAriaChecked = (el) => {\n  el.setAttribute(\"aria-checked\", areSubsOn(el));\n};\nvar MediaCaptionsButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate3 }, options));\n    this._captionsReady = false;\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"role\", \"switch\");\n    this.setAttribute(\"aria-label\", nouns.CLOSED_CAPTIONS());\n    updateAriaChecked(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING) {\n      updateAriaChecked(this);\n    }\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesList() {\n    return getSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n  }\n  set mediaSubtitlesList(list) {\n    setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesShowing() {\n    return getSubtitlesListAttr(\n      this,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    );\n  }\n  set mediaSubtitlesShowing(list) {\n    setSubtitlesListAttr(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n  }\n  handleClick() {\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(MediaUIEvents.MEDIA_TOGGLE_SUBTITLES_REQUEST, {\n        composed: true,\n        bubbles: true\n      })\n    );\n  }\n};\nvar getSubtitlesListAttr = (el, attrName) => {\n  const attrVal = el.getAttribute(attrName);\n  return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nvar setSubtitlesListAttr = (el, attrName, list) => {\n  if (!(list == null ? void 0 : list.length)) {\n    el.removeAttribute(attrName);\n    return;\n  }\n  const newValStr = stringifyTextTrackList(list);\n  const oldVal = el.getAttribute(attrName);\n  if (oldVal === newValStr)\n    return;\n  el.setAttribute(attrName, newValStr);\n};\nif (!GlobalThis.customElements.get(\"media-captions-button\")) {\n  GlobalThis.customElements.define(\n    \"media-captions-button\",\n    MediaCaptionsButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-captions-menu.js\nvar __defProp5 = Object.defineProperty;\nvar __defNormalProp5 = (obj, key, value) => key in obj ? __defProp5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField5 = (obj, key, value) => {\n  __defNormalProp5(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck8 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet8 = (obj, member, getter) => {\n  __accessCheck8(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd8 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet8 = (obj, member, value, setter) => {\n  __accessCheck8(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod5 = (obj, member, method) => {\n  __accessCheck8(obj, member, \"access private method\");\n  return method;\n};\nvar _prevState2;\nvar _render2;\nvar render_fn2;\nvar _onChange2;\nvar onChange_fn2;\nvar ccIcon = (\n  /*html*/\n  `\n  <svg aria-hidden=\"true\" viewBox=\"0 0 26 24\" part=\"captions-indicator indicator\">\n    <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n  </svg>`\n);\nvar template5 = Document2.createElement(\"template\");\ntemplate5.innerHTML = MediaChromeMenu.template.innerHTML + /*html*/\n`\n  <slot name=\"captions-indicator\" hidden>${ccIcon}</slot>`;\nvar MediaCaptionsMenu = class extends MediaChromeMenu {\n  constructor() {\n    super(...arguments);\n    __privateAdd8(this, _render2);\n    __privateAdd8(this, _onChange2);\n    __privateAdd8(this, _prevState2, void 0);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_LIST && oldValue !== newValue) {\n      __privateMethod5(this, _render2, render_fn2).call(this);\n    } else if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING && oldValue !== newValue) {\n      this.value = newValue;\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod5(this, _onChange2, onChange_fn2));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod5(this, _onChange2, onChange_fn2));\n  }\n  /**\n   * Returns the anchor element when it is a floating menu.\n   * @return {HTMLElement}\n   */\n  get anchorElement() {\n    if (this.anchor !== \"auto\")\n      return super.anchorElement;\n    return getMediaController(this).querySelector(\"media-captions-menu-button\");\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesList() {\n    return getSubtitlesListAttr2(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n  }\n  set mediaSubtitlesList(list) {\n    setSubtitlesListAttr2(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesShowing() {\n    return getSubtitlesListAttr2(\n      this,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    );\n  }\n  set mediaSubtitlesShowing(list) {\n    setSubtitlesListAttr2(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n  }\n};\n_prevState2 = /* @__PURE__ */ new WeakMap();\n_render2 = /* @__PURE__ */ new WeakSet();\nrender_fn2 = function() {\n  var _a3;\n  if (__privateGet8(this, _prevState2) === JSON.stringify(this.mediaSubtitlesList))\n    return;\n  __privateSet8(this, _prevState2, JSON.stringify(this.mediaSubtitlesList));\n  this.defaultSlot.textContent = \"\";\n  const isOff = !this.value;\n  const item = createMenuItem({\n    type: \"radio\",\n    text: this.formatMenuItemText(\"Off\"),\n    value: \"off\",\n    checked: isOff\n  });\n  item.prepend(createIndicator(this, \"checked-indicator\"));\n  this.defaultSlot.append(item);\n  const subtitlesList = this.mediaSubtitlesList;\n  for (const subs of subtitlesList) {\n    const item2 = createMenuItem({\n      type: \"radio\",\n      text: this.formatMenuItemText(subs.label, subs),\n      value: formatTextTrackObj(subs),\n      checked: this.value == formatTextTrackObj(subs)\n    });\n    item2.prepend(createIndicator(this, \"checked-indicator\"));\n    const type = (_a3 = subs.kind) != null ? _a3 : \"subs\";\n    if (type === \"captions\") {\n      item2.append(createIndicator(this, \"captions-indicator\"));\n    }\n    this.defaultSlot.append(item2);\n  }\n};\n_onChange2 = /* @__PURE__ */ new WeakSet();\nonChange_fn2 = function() {\n  const showingSubs = this.mediaSubtitlesShowing;\n  const showingSubsStr = this.getAttribute(\n    MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n  );\n  const localStateChange = this.value !== showingSubsStr;\n  if ((showingSubs == null ? void 0 : showingSubs.length) && localStateChange) {\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(\n        MediaUIEvents.MEDIA_DISABLE_SUBTITLES_REQUEST,\n        {\n          composed: true,\n          bubbles: true,\n          detail: showingSubs\n        }\n      )\n    );\n  }\n  if (!this.value || !localStateChange)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_SHOW_SUBTITLES_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\n__publicField5(MediaCaptionsMenu, \"template\", template5);\nvar getSubtitlesListAttr2 = (el, attrName) => {\n  const attrVal = el.getAttribute(attrName);\n  return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nvar setSubtitlesListAttr2 = (el, attrName, list) => {\n  if (!(list == null ? void 0 : list.length)) {\n    el.removeAttribute(attrName);\n    return;\n  }\n  const newValStr = stringifyTextTrackList(list);\n  const oldVal = el.getAttribute(attrName);\n  if (oldVal === newValStr)\n    return;\n  el.setAttribute(attrName, newValStr);\n};\nif (!GlobalThis.customElements.get(\"media-captions-menu\")) {\n  GlobalThis.customElements.define(\"media-captions-menu\", MediaCaptionsMenu);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-captions-menu-button.js\nvar ccIconOn2 = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n</svg>`;\nvar ccIconOff2 = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M17.73 14.09a1.4 1.4 0 0 1-1 .37 1.579 1.579 0 0 1-1.27-.58A3 3 0 0 1 15 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34A2.89 2.89 0 0 0 19 9.07a3 3 0 0 0-2.14-.78 3.14 3.14 0 0 0-2.42 1 3.91 3.91 0 0 0-.93 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.17 3.17 0 0 0 1.07-1.74l-1.4-.45c-.083.43-.3.822-.62 1.12Zm-7.22 0a1.43 1.43 0 0 1-1 .37 1.58 1.58 0 0 1-1.27-.58A3 3 0 0 1 7.76 12a2.8 2.8 0 0 1 .5-1.85 1.63 1.63 0 0 1 1.29-.57 1.47 1.47 0 0 1 1.51 1.2l1.43-.34a2.81 2.81 0 0 0-.74-1.32 2.94 2.94 0 0 0-2.13-.78 3.18 3.18 0 0 0-2.43 1 4 4 0 0 0-.92 2.78 3.74 3.74 0 0 0 .92 2.66 3.07 3.07 0 0 0 2.34 1 3.07 3.07 0 0 0 1.91-.57 3.23 3.23 0 0 0 1.07-1.74l-1.4-.45a2.06 2.06 0 0 1-.6 1.07Zm12.32-8.41a2.59 2.59 0 0 0-2.3-2.51C18.72 3.05 15.86 3 13 3c-2.86 0-5.72.05-7.53.17a2.59 2.59 0 0 0-2.3 2.51c-.23 4.207-.23 8.423 0 12.63a2.57 2.57 0 0 0 2.3 2.5c1.81.13 4.67.19 7.53.19 2.86 0 5.72-.06 7.53-.19a2.57 2.57 0 0 0 2.3-2.5c.23-4.207.23-8.423 0-12.63Zm-1.49 12.53a1.11 1.11 0 0 1-.91 1.11c-1.67.11-4.45.18-7.43.18-2.98 0-5.76-.07-7.43-.18a1.11 1.11 0 0 1-.91-1.11c-.21-4.14-.21-8.29 0-12.43a1.11 1.11 0 0 1 .91-1.11C7.24 4.56 10 4.49 13 4.49s5.76.07 7.43.18a1.11 1.11 0 0 1 .91 1.11c.21 4.14.21 8.29 0 12.43Z\"/>\n</svg>`;\nvar slotTemplate4 = Document2.createElement(\"template\");\nslotTemplate4.innerHTML = /*html*/\n`\n  <style>\n    :host([aria-checked=\"true\"]) slot[name=off] {\n      display: none !important;\n    }\n\n    ${/* Double negative, but safer if display doesn't equal 'block' */\n\"\"}\n    :host(:not([aria-checked=\"true\"])) slot[name=on] {\n      display: none !important;\n    }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"on\">${ccIconOn2}</slot>\n    <slot name=\"off\">${ccIconOff2}</slot>\n  </slot>\n`;\nvar updateAriaChecked2 = (el) => {\n  el.setAttribute(\"aria-checked\", areSubsOn(el));\n};\nvar MediaCaptionsMenuButton = class extends MediaChromeMenuButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate4 }, options));\n    this._captionsReady = false;\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"aria-label\", nouns.CLOSED_CAPTIONS());\n    updateAriaChecked2(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING) {\n      updateAriaChecked2(this);\n    }\n  }\n  /**\n   * Returns the element with the id specified by the `invoketarget` attribute.\n   * @return {HTMLElement | null}\n   */\n  get invokeTargetElement() {\n    if (this.invokeTarget != void 0)\n      return super.invokeTargetElement;\n    return getMediaController(this).querySelector(\"media-captions-menu\");\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesList() {\n    return getSubtitlesListAttr3(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n  }\n  set mediaSubtitlesList(list) {\n    setSubtitlesListAttr3(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesShowing() {\n    return getSubtitlesListAttr3(\n      this,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    );\n  }\n  set mediaSubtitlesShowing(list) {\n    setSubtitlesListAttr3(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n  }\n};\nvar getSubtitlesListAttr3 = (el, attrName) => {\n  const attrVal = el.getAttribute(attrName);\n  return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nvar setSubtitlesListAttr3 = (el, attrName, list) => {\n  if (!(list == null ? void 0 : list.length)) {\n    el.removeAttribute(attrName);\n    return;\n  }\n  const newValStr = stringifyTextTrackList(list);\n  const oldVal = el.getAttribute(attrName);\n  if (oldVal === newValStr)\n    return;\n  el.setAttribute(attrName, newValStr);\n};\nif (!GlobalThis.customElements.get(\"media-captions-menu-button\")) {\n  GlobalThis.customElements.define(\n    \"media-captions-menu-button\",\n    MediaCaptionsMenuButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-cast-button.js\nvar enterIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><g><path class=\"cast_caf_icon_arch0\" d=\"M1,18 L1,21 L4,21 C4,19.3 2.66,18 1,18 L1,18 Z\"/><path class=\"cast_caf_icon_arch1\" d=\"M1,14 L1,16 C3.76,16 6,18.2 6,21 L8,21 C8,17.13 4.87,14 1,14 L1,14 Z\"/><path class=\"cast_caf_icon_arch2\" d=\"M1,10 L1,12 C5.97,12 10,16.0 10,21 L12,21 C12,14.92 7.07,10 1,10 L1,10 Z\"/><path class=\"cast_caf_icon_box\" d=\"M21,3 L3,3 C1.9,3 1,3.9 1,5 L1,8 L3,8 L3,5 L21,5 L21,19 L14,19 L14,21 L21,21 C22.1,21 23,20.1 23,19 L23,5 C23,3.9 22.1,3 21,3 L21,3 Z\"/></g></svg>`;\nvar exitIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><g><path class=\"cast_caf_icon_arch0\" d=\"M1,18 L1,21 L4,21 C4,19.3 2.66,18 1,18 L1,18 Z\"/><path class=\"cast_caf_icon_arch1\" d=\"M1,14 L1,16 C3.76,16 6,18.2 6,21 L8,21 C8,17.13 4.87,14 1,14 L1,14 Z\"/><path class=\"cast_caf_icon_arch2\" d=\"M1,10 L1,12 C5.97,12 10,16.0 10,21 L12,21 C12,14.92 7.07,10 1,10 L1,10 Z\"/><path class=\"cast_caf_icon_box\" d=\"M21,3 L3,3 C1.9,3 1,3.9 1,5 L1,8 L3,8 L3,5 L21,5 L21,19 L14,19 L14,21 L21,21 C22.1,21 23,20.1 23,19 L23,5 C23,3.9 22.1,3 21,3 L21,3 Z\"/><path class=\"cast_caf_icon_boxfill\" d=\"M5,7 L5,8.63 C8,8.6 13.37,14 13.37,17 L19,17 L19,7 Z\"/></g></svg>`;\nvar slotTemplate5 = Document2.createElement(\"template\");\nslotTemplate5.innerHTML = /*html*/\n`\n  <style>\n  :host([${MediaUIAttributes.MEDIA_IS_CASTING}]) slot:not([name=exit]):not([name=icon]) {\n    display: none !important;\n  }\n\n  ${/* Double negative, but safer if display doesn't equal 'block' */\n\"\"}\n  :host(:not([${MediaUIAttributes.MEDIA_IS_CASTING}])) slot:not([name=enter]):not([name=icon]) {\n    display: none !important;\n  }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"enter\">${enterIcon}</slot>\n    <slot name=\"exit\">${exitIcon}</slot>\n  </slot>\n`;\nvar updateAriaLabel2 = (el) => {\n  const label = el.mediaIsCasting ? verbs.EXIT_CAST() : verbs.ENTER_CAST();\n  el.setAttribute(\"aria-label\", label);\n};\nvar MediaCastButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_CASTING,\n      MediaUIAttributes.MEDIA_CAST_UNAVAILABLE\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate5 }, options));\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel2(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_IS_CASTING) {\n      updateAriaLabel2(this);\n    }\n  }\n  /**\n   * @type {boolean} Are we currently casting\n   */\n  get mediaIsCasting() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_CASTING);\n  }\n  set mediaIsCasting(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_CASTING, value);\n  }\n  /**\n   * @type {string | undefined} Cast unavailability state\n   */\n  get mediaCastUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_CAST_UNAVAILABLE);\n  }\n  set mediaCastUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_CAST_UNAVAILABLE, value);\n  }\n  handleClick() {\n    const eventName = this.mediaIsCasting ? MediaUIEvents.MEDIA_EXIT_CAST_REQUEST : MediaUIEvents.MEDIA_ENTER_CAST_REQUEST;\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n};\nif (!GlobalThis.customElements.get(\"media-cast-button\")) {\n  GlobalThis.customElements.define(\"media-cast-button\", MediaCastButton);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-chrome-dialog.js\nvar __defProp6 = Object.defineProperty;\nvar __defNormalProp6 = (obj, key, value) => key in obj ? __defProp6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField6 = (obj, key, value) => {\n  __defNormalProp6(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck9 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet9 = (obj, member, getter) => {\n  __accessCheck9(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd9 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet9 = (obj, member, value, setter) => {\n  __accessCheck9(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod6 = (obj, member, method) => {\n  __accessCheck9(obj, member, \"access private method\");\n  return method;\n};\nvar _previouslyFocused2;\nvar _invokerElement2;\nvar _handleOpen2;\nvar handleOpen_fn2;\nvar _handleClosed2;\nvar handleClosed_fn2;\nvar _handleInvoke2;\nvar handleInvoke_fn2;\nvar _handleFocusOut2;\nvar handleFocusOut_fn2;\nvar _handleKeyDown2;\nvar handleKeyDown_fn2;\nvar template6 = Document2.createElement(\"template\");\ntemplate6.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      font: var(--media-font,\n        var(--media-font-weight, normal)\n        var(--media-font-size, 14px) /\n        var(--media-text-content-height, var(--media-control-height, 24px))\n        var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n      color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n      background: var(--media-dialog-background, var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .8))));\n      border-radius: var(--media-dialog-border-radius);\n      border: var(--media-dialog-border, none);\n      display: var(--media-dialog-display, inline-flex);\n      transition: var(--media-dialog-transition-in,\n        visibility 0s,\n        opacity .2s ease-out,\n        transform .15s ease-out\n      ) !important;\n      ${/* ^^Prevent transition override by media-container */\n\"\"}\n      visibility: var(--media-dialog-visibility, visible);\n      opacity: var(--media-dialog-opacity, 1);\n      transform: var(--media-dialog-transform-in, translateY(0) scale(1));\n    }\n\n    :host([hidden]) {\n      transition: var(--media-dialog-transition-out,\n        visibility .15s ease-in,\n        opacity .15s ease-in,\n        transform .15s ease-in\n      ) !important;\n      visibility: var(--media-dialog-hidden-visibility, hidden);\n      opacity: var(--media-dialog-hidden-opacity, 0);\n      transform: var(--media-dialog-transform-out, translateY(2px) scale(.99));\n      pointer-events: none;\n    }\n  </style>\n  <slot></slot>\n`;\nvar Attributes4 = {\n  HIDDEN: \"hidden\",\n  ANCHOR: \"anchor\"\n};\nvar MediaChromeDialog = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd9(this, _handleOpen2);\n    __privateAdd9(this, _handleClosed2);\n    __privateAdd9(this, _handleInvoke2);\n    __privateAdd9(this, _handleFocusOut2);\n    __privateAdd9(this, _handleKeyDown2);\n    __privateAdd9(this, _previouslyFocused2, void 0);\n    __privateAdd9(this, _invokerElement2, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.nativeEl = this.constructor.template.content.cloneNode(true);\n      this.shadowRoot.append(this.nativeEl);\n    }\n    this.addEventListener(\"invoke\", this);\n    this.addEventListener(\"focusout\", this);\n    this.addEventListener(\"keydown\", this);\n  }\n  static get observedAttributes() {\n    return [Attributes4.HIDDEN, Attributes4.ANCHOR];\n  }\n  handleEvent(event) {\n    switch (event.type) {\n      case \"invoke\":\n        __privateMethod6(this, _handleInvoke2, handleInvoke_fn2).call(this, event);\n        break;\n      case \"focusout\":\n        __privateMethod6(this, _handleFocusOut2, handleFocusOut_fn2).call(this, event);\n        break;\n      case \"keydown\":\n        __privateMethod6(this, _handleKeyDown2, handleKeyDown_fn2).call(this, event);\n        break;\n    }\n  }\n  connectedCallback() {\n    if (!this.role) {\n      this.role = \"dialog\";\n    }\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === Attributes4.HIDDEN && newValue !== oldValue) {\n      if (this.hidden) {\n        __privateMethod6(this, _handleClosed2, handleClosed_fn2).call(this);\n      } else {\n        __privateMethod6(this, _handleOpen2, handleOpen_fn2).call(this);\n      }\n    }\n  }\n  focus() {\n    __privateSet9(this, _previouslyFocused2, getActiveElement());\n    const focusable = this.querySelector(\n      '[autofocus], [tabindex]:not([tabindex=\"-1\"]), [role=\"menu\"]'\n    );\n    focusable == null ? void 0 : focusable.focus();\n  }\n  get keysUsed() {\n    return [\"Escape\", \"Tab\"];\n  }\n};\n_previouslyFocused2 = /* @__PURE__ */ new WeakMap();\n_invokerElement2 = /* @__PURE__ */ new WeakMap();\n_handleOpen2 = /* @__PURE__ */ new WeakSet();\nhandleOpen_fn2 = function() {\n  var _a3;\n  (_a3 = __privateGet9(this, _invokerElement2)) == null ? void 0 : _a3.setAttribute(\"aria-expanded\", \"true\");\n  this.addEventListener(\"transitionend\", () => this.focus(), { once: true });\n};\n_handleClosed2 = /* @__PURE__ */ new WeakSet();\nhandleClosed_fn2 = function() {\n  var _a3;\n  (_a3 = __privateGet9(this, _invokerElement2)) == null ? void 0 : _a3.setAttribute(\"aria-expanded\", \"false\");\n};\n_handleInvoke2 = /* @__PURE__ */ new WeakSet();\nhandleInvoke_fn2 = function(event) {\n  __privateSet9(this, _invokerElement2, event.relatedTarget);\n  if (!containsComposedNode(this, event.relatedTarget)) {\n    this.hidden = !this.hidden;\n  }\n};\n_handleFocusOut2 = /* @__PURE__ */ new WeakSet();\nhandleFocusOut_fn2 = function(event) {\n  var _a3;\n  if (!containsComposedNode(this, event.relatedTarget)) {\n    (_a3 = __privateGet9(this, _previouslyFocused2)) == null ? void 0 : _a3.focus();\n    if (__privateGet9(this, _invokerElement2) && __privateGet9(this, _invokerElement2) !== event.relatedTarget && !this.hidden) {\n      this.hidden = true;\n    }\n  }\n};\n_handleKeyDown2 = /* @__PURE__ */ new WeakSet();\nhandleKeyDown_fn2 = function(event) {\n  var _a3, _b, _c, _d, _e5;\n  const { key, ctrlKey, altKey, metaKey } = event;\n  if (ctrlKey || altKey || metaKey) {\n    return;\n  }\n  if (!this.keysUsed.includes(key)) {\n    return;\n  }\n  event.preventDefault();\n  event.stopPropagation();\n  if (key === \"Tab\") {\n    if (event.shiftKey) {\n      (_b = (_a3 = this.previousElementSibling) == null ? void 0 : _a3.focus) == null ? void 0 : _b.call(_a3);\n    } else {\n      (_d = (_c = this.nextElementSibling) == null ? void 0 : _c.focus) == null ? void 0 : _d.call(_c);\n    }\n    this.blur();\n  } else if (key === \"Escape\") {\n    (_e5 = __privateGet9(this, _previouslyFocused2)) == null ? void 0 : _e5.focus();\n    this.hidden = true;\n  }\n};\n__publicField6(MediaChromeDialog, \"template\", template6);\nif (!GlobalThis.customElements.get(\"media-chrome-dialog\")) {\n  GlobalThis.customElements.define(\"media-chrome-dialog\", MediaChromeDialog);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-chrome-menu-item.js\nvar __defProp7 = Object.defineProperty;\nvar __defNormalProp7 = (obj, key, value) => key in obj ? __defProp7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField7 = (obj, key, value) => {\n  __defNormalProp7(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck10 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet10 = (obj, member, getter) => {\n  __accessCheck10(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd10 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet10 = (obj, member, value, setter) => {\n  __accessCheck10(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod7 = (obj, member, method) => {\n  __accessCheck10(obj, member, \"access private method\");\n  return method;\n};\nvar _dirty;\nvar _ownerElement;\nvar _handleSlotChange2;\nvar handleSlotChange_fn2;\nvar _submenuConnected;\nvar submenuConnected_fn;\nvar _submenuDisconnected;\nvar submenuDisconnected_fn;\nvar _handleMenuItem;\nvar _handleKeyUp;\nvar handleKeyUp_fn;\nvar _handleKeyDown3;\nvar handleKeyDown_fn3;\nvar _reset;\nvar reset_fn;\nvar template7 = Document2.createElement(\"template\");\ntemplate7.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      transition: var(--media-menu-item-transition,\n        background .15s linear,\n        opacity .2s ease-in-out\n      );\n      outline: var(--media-menu-item-outline, 0);\n      outline-offset: var(--media-menu-item-outline-offset, -1px);\n      cursor: pointer;\n      display: flex;\n      align-items: center;\n      align-self: stretch;\n      justify-self: stretch;\n      white-space: nowrap;\n      white-space-collapse: collapse;\n      text-wrap: nowrap;\n      padding: .4em .8em .4em 1em;\n    }\n\n    :host(:focus-visible) {\n      box-shadow: var(--media-menu-item-focus-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n      outline: var(--media-menu-item-hover-outline, 0);\n      outline-offset: var(--media-menu-item-hover-outline-offset,  var(--media-menu-item-outline-offset, -1px));\n    }\n\n    :host(:hover) {\n      cursor: pointer;\n      background: var(--media-menu-item-hover-background, rgb(92 92 102 / .5));\n      outline: var(--media-menu-item-hover-outline);\n      outline-offset: var(--media-menu-item-hover-outline-offset,  var(--media-menu-item-outline-offset, -1px));\n    }\n\n    :host([aria-checked=\"true\"]) {\n      background: var(--media-menu-item-checked-background);\n    }\n\n    :host([hidden]) {\n      display: none;\n    }\n\n    :host([disabled]) {\n      pointer-events: none;\n      color: rgba(255, 255, 255, .3);\n    }\n\n    slot:not([name]) {\n      width: 100%;\n    }\n\n    slot:not([name=\"submenu\"]) {\n      display: inline-flex;\n      align-items: center;\n      transition: inherit;\n      opacity: var(--media-menu-item-opacity, 1);\n    }\n\n    slot[name=\"description\"] {\n      justify-content: end;\n    }\n\n    slot[name=\"description\"] > span {\n      display: inline-block;\n      margin-inline: 1em .2em;\n      max-width: var(--media-menu-item-description-max-width, 100px);\n      text-overflow: ellipsis;\n      overflow: hidden;\n      font-size: .8em;\n      font-weight: 400;\n      text-align: right;\n      position: relative;\n      top: .04em;\n    }\n\n    slot[name=\"checked-indicator\"] {\n      display: none;\n    }\n\n    :host(:is([role=\"menuitemradio\"],[role=\"menuitemcheckbox\"])) slot[name=\"checked-indicator\"] {\n      display: var(--media-menu-item-checked-indicator-display, inline-block);\n    }\n\n    ${/* For all slotted icons in prefix and suffix. */\n\"\"}\n    svg, img, ::slotted(svg), ::slotted(img) {\n      height: var(--media-menu-item-icon-height, var(--media-control-height, 24px));\n      fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n      display: block;\n    }\n\n    ${/* Only for indicator icons like checked-indicator or captions-indicator. */\n\"\"}\n    [part~=\"indicator\"],\n    ::slotted([part~=\"indicator\"]) {\n      fill: var(--media-menu-item-indicator-fill,\n        var(--media-icon-color, var(--media-primary-color, rgb(238 238 238))));\n      height: var(--media-menu-item-indicator-height, 1.25em);\n      margin-right: .5ch;\n    }\n\n    [part~=\"checked-indicator\"] {\n      visibility: hidden;\n    }\n\n    :host([aria-checked=\"true\"]) [part~=\"checked-indicator\"] {\n      visibility: visible;\n    }\n  </style>\n  <slot name=\"checked-indicator\">\n    <svg aria-hidden=\"true\" viewBox=\"0 1 24 24\" part=\"checked-indicator indicator\">\n      <path d=\"m10 15.17 9.193-9.191 1.414 1.414-10.606 10.606-6.364-6.364 1.414-1.414 4.95 4.95Z\"/>\n    </svg>\n  </slot>\n  <slot name=\"prefix\"></slot>\n  <slot></slot>\n  <slot name=\"description\"></slot>\n  <slot name=\"suffix\"></slot>\n  <slot name=\"submenu\"></slot>\n`;\nvar Attributes5 = {\n  TYPE: \"type\",\n  VALUE: \"value\",\n  CHECKED: \"checked\",\n  DISABLED: \"disabled\"\n};\nvar MediaChromeMenuItem = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd10(this, _handleSlotChange2);\n    __privateAdd10(this, _submenuConnected);\n    __privateAdd10(this, _submenuDisconnected);\n    __privateAdd10(this, _handleKeyUp);\n    __privateAdd10(this, _handleKeyDown3);\n    __privateAdd10(this, _reset);\n    __privateAdd10(this, _dirty, false);\n    __privateAdd10(this, _ownerElement, void 0);\n    __privateAdd10(this, _handleMenuItem, () => {\n      var _a3, _b;\n      this.setAttribute(\"submenusize\", `${this.submenuElement.items.length}`);\n      const descriptionSlot = this.shadowRoot.querySelector(\n        'slot[name=\"description\"]'\n      );\n      const description = (_b = (_a3 = this.submenuElement.checkedItems) == null ? void 0 : _a3[0]) == null ? void 0 : _b.text;\n      const span = Document2.createElement(\"span\");\n      span.textContent = description != null ? description : \"\";\n      descriptionSlot.replaceChildren(span);\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.append(this.constructor.template.content.cloneNode(true));\n    }\n    this.shadowRoot.addEventListener(\"slotchange\", this);\n  }\n  static get observedAttributes() {\n    return [\n      Attributes5.TYPE,\n      Attributes5.DISABLED,\n      Attributes5.CHECKED,\n      Attributes5.VALUE\n    ];\n  }\n  enable() {\n    if (!this.hasAttribute(\"tabindex\")) {\n      this.setAttribute(\"tabindex\", \"-1\");\n    }\n    if (isCheckable(this) && !this.hasAttribute(\"aria-checked\")) {\n      this.setAttribute(\"aria-checked\", \"false\");\n    }\n    this.addEventListener(\"click\", this);\n    this.addEventListener(\"keydown\", this);\n  }\n  disable() {\n    this.removeAttribute(\"tabindex\");\n    this.removeEventListener(\"click\", this);\n    this.removeEventListener(\"keydown\", this);\n    this.removeEventListener(\"keyup\", this);\n  }\n  handleEvent(event) {\n    switch (event.type) {\n      case \"slotchange\":\n        __privateMethod7(this, _handleSlotChange2, handleSlotChange_fn2).call(this, event);\n        break;\n      case \"click\":\n        this.handleClick(event);\n        break;\n      case \"keydown\":\n        __privateMethod7(this, _handleKeyDown3, handleKeyDown_fn3).call(this, event);\n        break;\n      case \"keyup\":\n        __privateMethod7(this, _handleKeyUp, handleKeyUp_fn).call(this, event);\n        break;\n    }\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === Attributes5.CHECKED && isCheckable(this) && !__privateGet10(this, _dirty)) {\n      this.setAttribute(\"aria-checked\", newValue != null ? \"true\" : \"false\");\n    } else if (attrName === Attributes5.TYPE && newValue !== oldValue) {\n      this.role = \"menuitem\" + newValue;\n    } else if (attrName === Attributes5.DISABLED && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    }\n  }\n  connectedCallback() {\n    if (!this.hasAttribute(Attributes5.DISABLED)) {\n      this.enable();\n    }\n    this.role = \"menuitem\" + this.type;\n    __privateSet10(this, _ownerElement, closestMenuItemsContainer(this, this.parentNode));\n    __privateMethod7(this, _reset, reset_fn).call(this);\n  }\n  disconnectedCallback() {\n    this.disable();\n    __privateMethod7(this, _reset, reset_fn).call(this);\n    __privateSet10(this, _ownerElement, null);\n  }\n  get invokeTarget() {\n    return this.getAttribute(\"invoketarget\");\n  }\n  set invokeTarget(value) {\n    this.setAttribute(\"invoketarget\", `${value}`);\n  }\n  /**\n   * Returns the element with the id specified by the `invoketarget` attribute\n   * or the slotted submenu element.\n   * @return {MediaChromeMenu | null}\n   */\n  get invokeTargetElement() {\n    var _a3;\n    if (this.invokeTarget) {\n      return (_a3 = getDocumentOrShadowRoot(this)) == null ? void 0 : _a3.querySelector(\n        `#${this.invokeTarget}`\n      );\n    }\n    return this.submenuElement;\n  }\n  /**\n   * Returns the slotted submenu element.\n   */\n  get submenuElement() {\n    const submenuSlot = this.shadowRoot.querySelector('slot[name=\"submenu\"]');\n    return (\n      /** @type {MediaChromeMenu | null} */\n      submenuSlot.assignedElements({ flatten: true })[0]\n    );\n  }\n  get type() {\n    var _a3;\n    return (_a3 = this.getAttribute(Attributes5.TYPE)) != null ? _a3 : \"\";\n  }\n  set type(val) {\n    this.setAttribute(Attributes5.TYPE, `${val}`);\n  }\n  get value() {\n    var _a3;\n    return (_a3 = this.getAttribute(Attributes5.VALUE)) != null ? _a3 : this.text;\n  }\n  set value(val) {\n    this.setAttribute(Attributes5.VALUE, val);\n  }\n  get text() {\n    var _a3;\n    return ((_a3 = this.textContent) != null ? _a3 : \"\").trim();\n  }\n  get checked() {\n    if (!isCheckable(this))\n      return void 0;\n    return this.getAttribute(\"aria-checked\") === \"true\";\n  }\n  set checked(value) {\n    if (!isCheckable(this))\n      return;\n    __privateSet10(this, _dirty, true);\n    this.setAttribute(\"aria-checked\", value ? \"true\" : \"false\");\n    if (value) {\n      this.part.add(\"checked\");\n    } else {\n      this.part.remove(\"checked\");\n    }\n  }\n  handleClick(event) {\n    if (isCheckable(this))\n      return;\n    if (this.invokeTargetElement && containsComposedNode(this, event.target)) {\n      this.invokeTargetElement.dispatchEvent(\n        new InvokeEvent({ relatedTarget: this })\n      );\n    }\n  }\n  get keysUsed() {\n    return [\"Enter\", \" \"];\n  }\n};\n_dirty = /* @__PURE__ */ new WeakMap();\n_ownerElement = /* @__PURE__ */ new WeakMap();\n_handleSlotChange2 = /* @__PURE__ */ new WeakSet();\nhandleSlotChange_fn2 = function(event) {\n  const slot = event.target;\n  const isDefaultSlot = !(slot == null ? void 0 : slot.name);\n  if (isDefaultSlot) {\n    for (let node of slot.assignedNodes({ flatten: true })) {\n      if (node instanceof Text && node.textContent.trim() === \"\") {\n        node.remove();\n      }\n    }\n  }\n  if (slot.name === \"submenu\") {\n    if (this.submenuElement) {\n      __privateMethod7(this, _submenuConnected, submenuConnected_fn).call(this);\n    } else {\n      __privateMethod7(this, _submenuDisconnected, submenuDisconnected_fn).call(this);\n    }\n  }\n};\n_submenuConnected = /* @__PURE__ */ new WeakSet();\nsubmenuConnected_fn = function() {\n  return __async(this, null, function* () {\n    this.setAttribute(\"aria-haspopup\", \"menu\");\n    this.setAttribute(\"aria-expanded\", `${!this.submenuElement.hidden}`);\n    this.submenuElement.addEventListener(\"change\", __privateGet10(this, _handleMenuItem));\n    this.submenuElement.addEventListener(\"addmenuitem\", __privateGet10(this, _handleMenuItem));\n    this.submenuElement.addEventListener(\n      \"removemenuitem\",\n      __privateGet10(this, _handleMenuItem)\n    );\n    __privateGet10(this, _handleMenuItem).call(this);\n  });\n};\n_submenuDisconnected = /* @__PURE__ */ new WeakSet();\nsubmenuDisconnected_fn = function() {\n  this.removeAttribute(\"aria-haspopup\");\n  this.removeAttribute(\"aria-expanded\");\n  this.submenuElement.removeEventListener(\"change\", __privateGet10(this, _handleMenuItem));\n  this.submenuElement.removeEventListener(\n    \"addmenuitem\",\n    __privateGet10(this, _handleMenuItem)\n  );\n  this.submenuElement.removeEventListener(\n    \"removemenuitem\",\n    __privateGet10(this, _handleMenuItem)\n  );\n  __privateGet10(this, _handleMenuItem).call(this);\n};\n_handleMenuItem = /* @__PURE__ */ new WeakMap();\n_handleKeyUp = /* @__PURE__ */ new WeakSet();\nhandleKeyUp_fn = function(event) {\n  const { key } = event;\n  if (!this.keysUsed.includes(key)) {\n    this.removeEventListener(\"keyup\", __privateMethod7(this, _handleKeyUp, handleKeyUp_fn));\n    return;\n  }\n  this.handleClick(event);\n};\n_handleKeyDown3 = /* @__PURE__ */ new WeakSet();\nhandleKeyDown_fn3 = function(event) {\n  const { metaKey, altKey, key } = event;\n  if (metaKey || altKey || !this.keysUsed.includes(key)) {\n    this.removeEventListener(\"keyup\", __privateMethod7(this, _handleKeyUp, handleKeyUp_fn));\n    return;\n  }\n  this.addEventListener(\"keyup\", __privateMethod7(this, _handleKeyUp, handleKeyUp_fn), { once: true });\n};\n_reset = /* @__PURE__ */ new WeakSet();\nreset_fn = function() {\n  var _a3;\n  const items = (_a3 = __privateGet10(this, _ownerElement)) == null ? void 0 : _a3.radioGroupItems;\n  if (!items)\n    return;\n  let checkedItem = items.filter((item) => item.getAttribute(\"aria-checked\") === \"true\").pop();\n  if (!checkedItem)\n    checkedItem = items[0];\n  for (const item of items) {\n    item.setAttribute(\"aria-checked\", \"false\");\n  }\n  checkedItem == null ? void 0 : checkedItem.setAttribute(\"aria-checked\", \"true\");\n};\n__publicField7(MediaChromeMenuItem, \"template\", template7);\nfunction isCheckable(item) {\n  return item.type === \"radio\" || item.type === \"checkbox\";\n}\nfunction closestMenuItemsContainer(childNode, parentNode) {\n  if (!childNode)\n    return null;\n  const { host } = childNode.getRootNode();\n  if (!parentNode && host)\n    return closestMenuItemsContainer(childNode, host);\n  if (parentNode == null ? void 0 : parentNode.items)\n    return parentNode;\n  return closestMenuItemsContainer(parentNode, parentNode == null ? void 0 : parentNode.parentNode);\n}\nif (!GlobalThis.customElements.get(\"media-chrome-menu-item\")) {\n  GlobalThis.customElements.define(\n    \"media-chrome-menu-item\",\n    MediaChromeMenuItem\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-chrome-range.js\nvar __accessCheck11 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet11 = (obj, member, getter) => {\n  __accessCheck11(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd11 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet11 = (obj, member, value, setter) => {\n  __accessCheck11(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod8 = (obj, member, method) => {\n  __accessCheck11(obj, member, \"access private method\");\n  return method;\n};\nvar _mediaController4;\nvar _isInputTarget;\nvar _startpoint;\nvar _endpoint;\nvar _cssRules;\nvar _segments;\nvar _onFocusIn;\nvar _onFocusOut;\nvar _updateComputedStyles;\nvar _updateActiveSegment;\nvar updateActiveSegment_fn;\nvar _enableUserEvents;\nvar enableUserEvents_fn;\nvar _disableUserEvents;\nvar disableUserEvents_fn;\nvar _handlePointerDown;\nvar handlePointerDown_fn;\nvar _handlePointerEnter;\nvar handlePointerEnter_fn;\nvar _handlePointerUp2;\nvar handlePointerUp_fn2;\nvar _handlePointerLeave;\nvar handlePointerLeave_fn;\nvar _handlePointerMove2;\nvar handlePointerMove_fn2;\nvar template8 = Document2.createElement(\"template\");\ntemplate8.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      --_focus-box-shadow: var(--media-focus-box-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n      --_media-range-padding: var(--media-range-padding, var(--media-control-padding, 10px));\n\n      box-shadow: var(--_focus-visible-box-shadow, none);\n      background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n      height: calc(var(--media-control-height, 24px) + 2 * var(--_media-range-padding));\n      display: inline-flex;\n      align-items: center;\n      ${/* Don't horizontal align w/ justify-content! #container can go negative on the x-axis w/ small width. */\n\"\"}\n      vertical-align: middle;\n      box-sizing: border-box;\n      position: relative;\n      width: 100px;\n      transition: background .15s linear;\n      cursor: pointer;\n      pointer-events: auto;\n      touch-action: none; ${/* Prevent scrolling when dragging on mobile. */\n\"\"}\n      z-index: 1; ${/* Apply z-index to overlap buttons below. */\n\"\"}\n    }\n\n    ${/* Reset before `outline` on track could be set by a CSS var */\n\"\"}\n    input[type=range]:focus {\n      outline: 0;\n    }\n    input[type=range]:focus::-webkit-slider-runnable-track {\n      outline: 0;\n    }\n\n    :host(:hover) {\n      background: var(--media-control-hover-background, rgb(50 50 70 / .7));\n    }\n\n    #leftgap {\n      padding-left: var(--media-range-padding-left, var(--_media-range-padding));\n    }\n\n    #rightgap {\n      padding-right: var(--media-range-padding-right, var(--_media-range-padding));\n    }\n\n    #startpoint,\n    #endpoint {\n      position: absolute;\n    }\n\n    #endpoint {\n      right: 0;\n    }\n\n    #container {\n      ${/* Not using the CSS `padding` prop makes it easier for slide open volume ranges so the width can be zero. */\n\"\"}\n      width: var(--media-range-track-width, 100%);\n      transform: translate(var(--media-range-track-translate-x, 0px), var(--media-range-track-translate-y, 0px));\n      position: relative;\n      height: 100%;\n      display: flex;\n      align-items: center;\n      min-width: 40px;\n    }\n\n    #range {\n      ${/* The input range acts as a hover and hit zone for input events. */\n\"\"}\n      display: var(--media-time-range-hover-display, block);\n      bottom: var(--media-time-range-hover-bottom, -7px);\n      height: var(--media-time-range-hover-height, max(100% + 7px, 25px));\n      width: 100%;\n      position: absolute;\n      cursor: pointer;\n\n      -webkit-appearance: none; ${/* Hides the slider so that custom slider can be made */\n\"\"}\n      -webkit-tap-highlight-color: transparent;\n      background: transparent; ${/* Otherwise white in Chrome */\n\"\"}\n      margin: 0;\n      z-index: 1;\n    }\n\n    @media (hover: hover) {\n      #range {\n        bottom: var(--media-time-range-hover-bottom, -5px);\n        height: var(--media-time-range-hover-height, max(100% + 5px, 20px));\n      }\n    }\n\n    ${/* Special styling for WebKit/Blink */\n\"\"}\n    ${/* Make thumb width/height small so it has no effect on range click position. */\n\"\"}\n    #range::-webkit-slider-thumb {\n      -webkit-appearance: none;\n      background: transparent;\n      width: .1px;\n      height: .1px;\n    }\n\n    ${/* The thumb is not positioned relative to the track in Firefox */\n\"\"}\n    #range::-moz-range-thumb {\n      background: transparent;\n      border: transparent;\n      width: .1px;\n      height: .1px;\n    }\n\n    #appearance {\n      height: var(--media-range-track-height, 4px);\n      display: flex;\n      flex-direction: column;\n      justify-content: center;\n      width: 100%;\n      position: absolute;\n      ${/* Required for Safari to stop glitching track height on hover */\n\"\"}\n      will-change: transform;\n    }\n\n    #background,\n    #track {\n      border-radius: var(--media-range-track-border-radius, 1px);\n      position: absolute;\n      width: 100%;\n      height: 100%;\n    }\n\n    #background {\n      background: var(--media-range-track-background, rgb(255 255 255 / .2));\n      backdrop-filter: var(--media-range-track-background-backdrop-filter);\n      -webkit-backdrop-filter: var(--media-range-track-background-backdrop-filter);\n    }\n\n    #track {\n      border: var(--media-range-track-border, none);\n      outline: var(--media-range-track-outline);\n      outline-offset: var(--media-range-track-outline-offset);\n      backdrop-filter: var(--media-range-track-backdrop-filter);\n      -webkit-backdrop-filter: var(--media-range-track-backdrop-filter);\n      box-shadow: var(--media-range-track-box-shadow, none);\n      overflow: hidden;\n    }\n\n    #progress,\n    #highlight,\n    #pointer {\n      position: absolute;\n      height: 100%;\n      will-change: width;\n    }\n\n    #progress {\n      background: var(--media-range-bar-color, var(--media-primary-color, rgb(238 238 238)));\n      transition: var(--media-range-track-transition);\n    }\n\n    #pointer {\n      background: var(--media-range-track-pointer-background);\n      border-right: var(--media-range-track-pointer-border-right);\n      transition: visibility .25s, opacity .25s;\n      visibility: hidden;\n      opacity: 0;\n    }\n\n    @media (hover: hover) {\n      :host(:hover) #pointer {\n        transition: visibility .5s, opacity .5s;\n        visibility: visible;\n        opacity: 1;\n      }\n    }\n\n    #thumb {\n      width: var(--media-range-thumb-width, 10px);\n      height: var(--media-range-thumb-height, 10px);\n      margin-left: calc(var(--media-range-thumb-width, 10px) / -2);\n      border: var(--media-range-thumb-border, none);\n      border-radius: var(--media-range-thumb-border-radius, 10px);\n      background: var(--media-range-thumb-background, var(--media-primary-color, rgb(238 238 238)));\n      box-shadow: var(--media-range-thumb-box-shadow, 1px 1px 1px transparent);\n      transition: var(--media-range-thumb-transition);\n      transform: var(--media-range-thumb-transform, none);\n      opacity: var(--media-range-thumb-opacity, 1);\n      position: absolute;\n      left: 0;\n      cursor: pointer;\n    }\n\n    :host([disabled]) #thumb {\n      background-color: #777;\n    }\n\n    .segments #appearance {\n      height: var(--media-range-segment-hover-height, 7px);\n    }\n\n    #background,\n    #track {\n      clip-path: url(#segments-clipping);\n    }\n\n    #segments {\n      --segments-gap: var(--media-range-segments-gap, 2px);\n      position: absolute;\n      width: 100%;\n      height: 100%;\n    }\n\n    #segments-clipping {\n      transform: translateX(calc(var(--segments-gap) / 2));\n    }\n\n    #segments-clipping:empty {\n      display: none;\n    }\n\n    #segments-clipping rect {\n      height: var(--media-range-track-height, 4px);\n      y: calc((var(--media-range-segment-hover-height, 7px) - var(--media-range-track-height, 4px)) / 2);\n      transition: var(--media-range-segment-transition, transform .1s ease-in-out);\n      transform: var(--media-range-segment-transform, scaleY(1));\n      transform-origin: center;\n    }\n  </style>\n  <div id=\"leftgap\"></div>\n  <div id=\"container\">\n    <div id=\"startpoint\"></div>\n    <div id=\"endpoint\"></div>\n    <div id=\"appearance\" part=\"appearance\">\n      <div id=\"background\"></div>\n      <div id=\"track\">\n        <div id=\"highlight\"></div>\n        <div id=\"pointer\"></div>\n        <div id=\"progress\"></div>\n      </div>\n      <div id=\"thumb\"></div>\n      <svg id=\"segments\"><clipPath id=\"segments-clipping\"></clipPath></svg>\n    </div>\n    <input id=\"range\" type=\"range\" min=\"0\" max=\"1\" step=\"any\" value=\"0\">\n  </div>\n  <div id=\"rightgap\"></div>\n`;\nvar MediaChromeRange = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd11(this, _updateActiveSegment);\n    __privateAdd11(this, _enableUserEvents);\n    __privateAdd11(this, _disableUserEvents);\n    __privateAdd11(this, _handlePointerDown);\n    __privateAdd11(this, _handlePointerEnter);\n    __privateAdd11(this, _handlePointerUp2);\n    __privateAdd11(this, _handlePointerLeave);\n    __privateAdd11(this, _handlePointerMove2);\n    __privateAdd11(this, _mediaController4, void 0);\n    __privateAdd11(this, _isInputTarget, void 0);\n    __privateAdd11(this, _startpoint, void 0);\n    __privateAdd11(this, _endpoint, void 0);\n    __privateAdd11(this, _cssRules, {});\n    __privateAdd11(this, _segments, []);\n    __privateAdd11(this, _onFocusIn, () => {\n      if (this.range.matches(\":focus-visible\")) {\n        const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n        style.setProperty(\n          \"--_focus-visible-box-shadow\",\n          \"var(--_focus-box-shadow)\"\n        );\n      }\n    });\n    __privateAdd11(this, _onFocusOut, () => {\n      const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n      style.removeProperty(\"--_focus-visible-box-shadow\");\n    });\n    __privateAdd11(this, _updateComputedStyles, () => {\n      const clipping = this.shadowRoot.querySelector(\"#segments-clipping\");\n      if (clipping)\n        clipping.parentNode.append(clipping);\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template8.content.cloneNode(true));\n    }\n    this.container = this.shadowRoot.querySelector(\"#container\");\n    __privateSet11(this, _startpoint, this.shadowRoot.querySelector(\"#startpoint\"));\n    __privateSet11(this, _endpoint, this.shadowRoot.querySelector(\"#endpoint\"));\n    this.range = this.shadowRoot.querySelector(\"#range\");\n    this.appearance = this.shadowRoot.querySelector(\"#appearance\");\n  }\n  static get observedAttributes() {\n    return [\n      \"disabled\",\n      \"aria-disabled\",\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet11(this, _mediaController4)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet11(this, _mediaController4, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet11(this, _mediaController4, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet11(this, _mediaController4)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    } else if (attrName === \"disabled\" || attrName === \"aria-disabled\" && oldValue !== newValue) {\n      if (newValue == null) {\n        this.range.removeAttribute(attrName);\n        __privateMethod8(this, _enableUserEvents, enableUserEvents_fn).call(this);\n      } else {\n        this.range.setAttribute(attrName, newValue);\n        __privateMethod8(this, _disableUserEvents, disableUserEvents_fn).call(this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"display\",\n      `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n    );\n    __privateGet11(this, _cssRules).pointer = getOrInsertCSSRule(this.shadowRoot, \"#pointer\");\n    __privateGet11(this, _cssRules).progress = getOrInsertCSSRule(this.shadowRoot, \"#progress\");\n    __privateGet11(this, _cssRules).thumb = getOrInsertCSSRule(this.shadowRoot, \"#thumb\");\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet11(\n        this,\n        _mediaController4,\n        // @ts-ignore\n        (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId)\n      );\n      (_c = (_b = __privateGet11(this, _mediaController4)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n    this.updateBar();\n    this.shadowRoot.addEventListener(\"focusin\", __privateGet11(this, _onFocusIn));\n    this.shadowRoot.addEventListener(\"focusout\", __privateGet11(this, _onFocusOut));\n    __privateMethod8(this, _enableUserEvents, enableUserEvents_fn).call(this);\n    observeResize(this.container, __privateGet11(this, _updateComputedStyles));\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    __privateMethod8(this, _disableUserEvents, disableUserEvents_fn).call(this);\n    (_b = (_a3 = __privateGet11(this, _mediaController4)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet11(this, _mediaController4, null);\n    this.shadowRoot.removeEventListener(\"focusin\", __privateGet11(this, _onFocusIn));\n    this.shadowRoot.removeEventListener(\"focusout\", __privateGet11(this, _onFocusOut));\n    unobserveResize(this.container, __privateGet11(this, _updateComputedStyles));\n  }\n  updatePointerBar(evt) {\n    var _a3;\n    (_a3 = __privateGet11(this, _cssRules).pointer) == null ? void 0 : _a3.style.setProperty(\n      \"width\",\n      `${this.getPointerRatio(evt) * 100}%`\n    );\n  }\n  updateBar() {\n    var _a3, _b;\n    const rangePercent = this.range.valueAsNumber * 100;\n    (_a3 = __privateGet11(this, _cssRules).progress) == null ? void 0 : _a3.style.setProperty(\"width\", `${rangePercent}%`);\n    (_b = __privateGet11(this, _cssRules).thumb) == null ? void 0 : _b.style.setProperty(\"left\", `${rangePercent}%`);\n  }\n  updateSegments(segments) {\n    const clipping = this.shadowRoot.querySelector(\"#segments-clipping\");\n    clipping.textContent = \"\";\n    this.container.classList.toggle(\"segments\", !!(segments == null ? void 0 : segments.length));\n    if (!(segments == null ? void 0 : segments.length))\n      return;\n    __privateGet11(this, _cssRules).activeSegment = insertCSSRule(\n      this.shadowRoot,\n      \"#segments-clipping rect:nth-child(0)\"\n    );\n    const normalized = [\n      .../* @__PURE__ */ new Set([\n        +this.range.min,\n        ...segments.flatMap((s) => [s.start, s.end]),\n        +this.range.max\n      ])\n    ];\n    __privateSet11(this, _segments, [...normalized]);\n    const lastMarker = normalized.pop();\n    for (const [i2, marker] of normalized.entries()) {\n      const [isFirst, isLast] = [i2 === 0, i2 === normalized.length - 1];\n      const x4 = isFirst ? \"calc(var(--segments-gap) / -1)\" : `${marker * 100}%`;\n      const x22 = isLast ? lastMarker : normalized[i2 + 1];\n      const width = `calc(${(x22 - marker) * 100}%${isFirst || isLast ? \"\" : ` - var(--segments-gap)`})`;\n      const segmentEl = Document2.createElementNS(\n        \"http://www.w3.org/2000/svg\",\n        \"rect\"\n      );\n      const cssRule = getOrInsertCSSRule(\n        this.shadowRoot,\n        `#segments-clipping rect:nth-child(${i2 + 1})`\n      );\n      cssRule.style.setProperty(\"x\", x4);\n      cssRule.style.setProperty(\"width\", width);\n      clipping.append(segmentEl);\n    }\n  }\n  getPointerRatio(evt) {\n    let pointerRatio = getPointProgressOnLine(\n      evt.clientX,\n      evt.clientY,\n      __privateGet11(this, _startpoint).getBoundingClientRect(),\n      __privateGet11(this, _endpoint).getBoundingClientRect()\n    );\n    return Math.max(0, Math.min(1, pointerRatio));\n  }\n  get dragging() {\n    return this.hasAttribute(\"dragging\");\n  }\n  handleEvent(evt) {\n    switch (evt.type) {\n      case \"pointermove\":\n        __privateMethod8(this, _handlePointerMove2, handlePointerMove_fn2).call(this, evt);\n        break;\n      case \"input\":\n        this.updateBar();\n        break;\n      case \"pointerenter\":\n        __privateMethod8(this, _handlePointerEnter, handlePointerEnter_fn).call(this, evt);\n        break;\n      case \"pointerdown\":\n        __privateMethod8(this, _handlePointerDown, handlePointerDown_fn).call(this, evt);\n        break;\n      case \"pointerup\":\n        __privateMethod8(this, _handlePointerUp2, handlePointerUp_fn2).call(this);\n        break;\n      case \"pointerleave\":\n        __privateMethod8(this, _handlePointerLeave, handlePointerLeave_fn).call(this);\n        break;\n    }\n  }\n  get keysUsed() {\n    return [\"ArrowUp\", \"ArrowRight\", \"ArrowDown\", \"ArrowLeft\"];\n  }\n};\n_mediaController4 = /* @__PURE__ */ new WeakMap();\n_isInputTarget = /* @__PURE__ */ new WeakMap();\n_startpoint = /* @__PURE__ */ new WeakMap();\n_endpoint = /* @__PURE__ */ new WeakMap();\n_cssRules = /* @__PURE__ */ new WeakMap();\n_segments = /* @__PURE__ */ new WeakMap();\n_onFocusIn = /* @__PURE__ */ new WeakMap();\n_onFocusOut = /* @__PURE__ */ new WeakMap();\n_updateComputedStyles = /* @__PURE__ */ new WeakMap();\n_updateActiveSegment = /* @__PURE__ */ new WeakSet();\nupdateActiveSegment_fn = function(evt) {\n  const rule = __privateGet11(this, _cssRules).activeSegment;\n  if (!rule)\n    return;\n  const pointerRatio = this.getPointerRatio(evt);\n  const segmentIndex = __privateGet11(this, _segments).findIndex((start, i2, arr) => {\n    const end = arr[i2 + 1];\n    return end != null && pointerRatio >= start && pointerRatio <= end;\n  });\n  const selectorText = `#segments-clipping rect:nth-child(${segmentIndex + 1})`;\n  if (rule.selectorText != selectorText || !rule.style.transform) {\n    rule.selectorText = selectorText;\n    rule.style.setProperty(\n      \"transform\",\n      \"var(--media-range-segment-hover-transform, scaleY(2))\"\n    );\n  }\n};\n_enableUserEvents = /* @__PURE__ */ new WeakSet();\nenableUserEvents_fn = function() {\n  if (this.hasAttribute(\"disabled\"))\n    return;\n  this.addEventListener(\"input\", this);\n  this.addEventListener(\"pointerdown\", this);\n  this.addEventListener(\"pointerenter\", this);\n};\n_disableUserEvents = /* @__PURE__ */ new WeakSet();\ndisableUserEvents_fn = function() {\n  var _a3, _b;\n  this.removeEventListener(\"input\", this);\n  this.removeEventListener(\"pointerdown\", this);\n  this.removeEventListener(\"pointerenter\", this);\n  (_a3 = GlobalThis.window) == null ? void 0 : _a3.removeEventListener(\"pointerup\", this);\n  (_b = GlobalThis.window) == null ? void 0 : _b.removeEventListener(\"pointermove\", this);\n};\n_handlePointerDown = /* @__PURE__ */ new WeakSet();\nhandlePointerDown_fn = function(evt) {\n  var _a3;\n  __privateSet11(this, _isInputTarget, evt.composedPath().includes(this.range));\n  (_a3 = GlobalThis.window) == null ? void 0 : _a3.addEventListener(\"pointerup\", this);\n};\n_handlePointerEnter = /* @__PURE__ */ new WeakSet();\nhandlePointerEnter_fn = function(evt) {\n  var _a3;\n  if (evt.pointerType !== \"mouse\")\n    __privateMethod8(this, _handlePointerDown, handlePointerDown_fn).call(this, evt);\n  this.addEventListener(\"pointerleave\", this);\n  (_a3 = GlobalThis.window) == null ? void 0 : _a3.addEventListener(\"pointermove\", this);\n};\n_handlePointerUp2 = /* @__PURE__ */ new WeakSet();\nhandlePointerUp_fn2 = function() {\n  var _a3;\n  (_a3 = GlobalThis.window) == null ? void 0 : _a3.removeEventListener(\"pointerup\", this);\n  this.toggleAttribute(\"dragging\", false);\n  this.range.disabled = this.hasAttribute(\"disabled\");\n};\n_handlePointerLeave = /* @__PURE__ */ new WeakSet();\nhandlePointerLeave_fn = function() {\n  var _a3, _b;\n  this.removeEventListener(\"pointerleave\", this);\n  (_a3 = GlobalThis.window) == null ? void 0 : _a3.removeEventListener(\"pointermove\", this);\n  this.toggleAttribute(\"dragging\", false);\n  this.range.disabled = this.hasAttribute(\"disabled\");\n  (_b = __privateGet11(this, _cssRules).activeSegment) == null ? void 0 : _b.style.removeProperty(\"transform\");\n};\n_handlePointerMove2 = /* @__PURE__ */ new WeakSet();\nhandlePointerMove_fn2 = function(evt) {\n  this.toggleAttribute(\n    \"dragging\",\n    evt.buttons === 1 || evt.pointerType !== \"mouse\"\n  );\n  this.updatePointerBar(evt);\n  __privateMethod8(this, _updateActiveSegment, updateActiveSegment_fn).call(this, evt);\n  if (this.dragging && (evt.pointerType !== \"mouse\" || !__privateGet11(this, _isInputTarget))) {\n    this.range.disabled = true;\n    this.range.valueAsNumber = this.getPointerRatio(evt);\n    this.range.dispatchEvent(\n      new Event(\"input\", { bubbles: true, composed: true })\n    );\n  }\n};\nif (!GlobalThis.customElements.get(\"media-chrome-range\")) {\n  GlobalThis.customElements.define(\"media-chrome-range\", MediaChromeRange);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-control-bar.js\nvar __accessCheck12 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet12 = (obj, member, getter) => {\n  __accessCheck12(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd12 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet12 = (obj, member, value, setter) => {\n  __accessCheck12(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController5;\nvar template9 = Document2.createElement(\"template\");\ntemplate9.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      ${/* Need position to display above video for some reason */\n\"\"}\n      box-sizing: border-box;\n      display: var(--media-control-display, var(--media-control-bar-display, inline-flex));\n      color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n      --media-loading-indicator-icon-height: 44px;\n    }\n\n    ::slotted(media-time-range),\n    ::slotted(media-volume-range) {\n      min-height: 100%;\n    }\n\n    ::slotted(media-time-range),\n    ::slotted(media-clip-selector) {\n      flex-grow: 1;\n    }\n  </style>\n\n  <slot></slot>\n`;\nvar MediaControlBar = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd12(this, _mediaController5, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template9.content.cloneNode(true));\n    }\n  }\n  static get observedAttributes() {\n    return [MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet12(this, _mediaController5)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet12(this, _mediaController5, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet12(this, _mediaController5, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet12(this, _mediaController5)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet12(this, _mediaController5, (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId));\n      (_c = (_b = __privateGet12(this, _mediaController5)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    (_b = (_a3 = __privateGet12(this, _mediaController5)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet12(this, _mediaController5, null);\n  }\n};\n_mediaController5 = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-control-bar\")) {\n  GlobalThis.customElements.define(\"media-control-bar\", MediaControlBar);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-text-display.js\nvar __accessCheck13 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet13 = (obj, member, getter) => {\n  __accessCheck13(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd13 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet13 = (obj, member, value, setter) => {\n  __accessCheck13(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController6;\nvar template10 = Document2.createElement(\"template\");\ntemplate10.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      font: var(--media-font,\n        var(--media-font-weight, normal)\n        var(--media-font-size, 14px) /\n        var(--media-text-content-height, var(--media-control-height, 24px))\n        var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n      color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n      background: var(--media-text-background, var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7))));\n      padding: var(--media-control-padding, 10px);\n      display: inline-flex;\n      justify-content: center;\n      align-items: center;\n      vertical-align: middle;\n      box-sizing: border-box;\n      text-align: center;\n      pointer-events: auto;\n    }\n\n    ${/*\n  Only show outline when keyboard focusing.\n  https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo\n*/\n\"\"}\n    :host(:focus-visible) {\n      box-shadow: inset 0 0 0 2px rgb(27 127 204 / .9);\n      outline: 0;\n    }\n\n    ${/*\n* hide default focus ring, particularly when using mouse\n*/\n\"\"}\n    :host(:where(:focus)) {\n      box-shadow: none;\n      outline: 0;\n    }\n  </style>\n  <slot></slot>\n`;\nvar MediaTextDisplay = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd13(this, _mediaController6, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template10.content.cloneNode(true));\n    }\n  }\n  static get observedAttributes() {\n    return [MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet13(this, _mediaController6)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet13(this, _mediaController6, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet13(this, _mediaController6, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet13(this, _mediaController6)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"display\",\n      `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n    );\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet13(this, _mediaController6, (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId));\n      (_c = (_b = __privateGet13(this, _mediaController6)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    (_b = (_a3 = __privateGet13(this, _mediaController6)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet13(this, _mediaController6, null);\n  }\n};\n_mediaController6 = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-text-display\")) {\n  GlobalThis.customElements.define(\"media-text-display\", MediaTextDisplay);\n}\nvar media_text_display_default = MediaTextDisplay;\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-duration-display.js\nvar __accessCheck14 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet14 = (obj, member, getter) => {\n  __accessCheck14(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd14 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet14 = (obj, member, value, setter) => {\n  __accessCheck14(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot;\nvar MediaDurationDisplay = class extends MediaTextDisplay {\n  constructor() {\n    super();\n    __privateAdd14(this, _slot, void 0);\n    __privateSet14(this, _slot, this.shadowRoot.querySelector(\"slot\"));\n    __privateGet14(this, _slot).textContent = formatTime(0);\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, MediaUIAttributes.MEDIA_DURATION];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === MediaUIAttributes.MEDIA_DURATION) {\n      __privateGet14(this, _slot).textContent = formatTime(+newValue);\n    }\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n  }\n  /**\n   * @type {number | undefined} In seconds\n   */\n  get mediaDuration() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n  }\n  set mediaDuration(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, time);\n  }\n};\n_slot = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-duration-display\")) {\n  GlobalThis.customElements.define(\n    \"media-duration-display\",\n    MediaDurationDisplay\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-fullscreen-button.js\nvar enterFullscreenIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M16 3v2.5h3.5V9H22V3h-6ZM4 9h2.5V5.5H10V3H4v6Zm15.5 9.5H16V21h6v-6h-2.5v3.5ZM6.5 15H4v6h6v-2.5H6.5V15Z\"/>\n</svg>`;\nvar exitFullscreenIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\">\n  <path d=\"M18.5 6.5V3H16v6h6V6.5h-3.5ZM16 21h2.5v-3.5H22V15h-6v6ZM4 17.5h3.5V21H10v-6H4v2.5Zm3.5-11H4V9h6V3H7.5v3.5Z\"/>\n</svg>`;\nvar slotTemplate6 = Document2.createElement(\"template\");\nslotTemplate6.innerHTML = /*html*/\n`\n  <style>\n  :host([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}]) slot:not([name=exit]):not([name=icon]) {\n    display: none !important;\n  }\n\n  ${/* Double negative, but safer if display doesn't equal 'block' */\n\"\"}\n  :host(:not([${MediaUIAttributes.MEDIA_IS_FULLSCREEN}])) slot:not([name=enter]):not([name=icon]) {\n    display: none !important;\n  }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"enter\">${enterFullscreenIcon}</slot>\n    <slot name=\"exit\">${exitFullscreenIcon}</slot>\n  </slot>\n`;\nvar updateAriaLabel3 = (el) => {\n  const label = el.mediaIsFullscreen ? verbs.EXIT_FULLSCREEN() : verbs.ENTER_FULLSCREEN();\n  el.setAttribute(\"aria-label\", label);\n};\nvar MediaFullscreenButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_FULLSCREEN,\n      MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate6 }, options));\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    updateAriaLabel3(this);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_IS_FULLSCREEN) {\n      updateAriaLabel3(this);\n    }\n  }\n  /**\n   * @type {string | undefined} Fullscreen unavailability state\n   */\n  get mediaFullscreenUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE);\n  }\n  set mediaFullscreenUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_FULLSCREEN_UNAVAILABLE, value);\n  }\n  /**\n   * @type {boolean} Whether fullscreen is available\n   */\n  get mediaIsFullscreen() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_FULLSCREEN);\n  }\n  set mediaIsFullscreen(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_FULLSCREEN, value);\n  }\n  handleClick() {\n    const eventName = this.mediaIsFullscreen ? MediaUIEvents.MEDIA_EXIT_FULLSCREEN_REQUEST : MediaUIEvents.MEDIA_ENTER_FULLSCREEN_REQUEST;\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n};\nif (!GlobalThis.customElements.get(\"media-fullscreen-button\")) {\n  GlobalThis.customElements.define(\n    \"media-fullscreen-button\",\n    MediaFullscreenButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-live-button.js\nvar { MEDIA_TIME_IS_LIVE, MEDIA_PAUSED } = MediaUIAttributes;\nvar { MEDIA_SEEK_TO_LIVE_REQUEST, MEDIA_PLAY_REQUEST } = MediaUIEvents;\nvar indicatorSVG = '<svg viewBox=\"0 0 6 12\"><circle cx=\"3\" cy=\"6\" r=\"2\"></circle></svg>';\nvar slotTemplate7 = Document2.createElement(\"template\");\nslotTemplate7.innerHTML = /*html*/\n`\n  <style>\n\n  slot[name=indicator] > *,\n  :host ::slotted([slot=indicator]) {\n    ${/* Override styles for icon-only buttons */\n\"\"}\n    min-width: auto;\n    fill: var(--media-live-button-icon-color, rgb(140, 140, 140));\n    color: var(--media-live-button-icon-color, rgb(140, 140, 140));\n  }\n\n  :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) slot[name=indicator] > *,\n  :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) ::slotted([slot=indicator]) {\n    fill: var(--media-live-button-indicator-color, rgb(255, 0, 0));\n    color: var(--media-live-button-indicator-color, rgb(255, 0, 0));\n  }\n\n  :host([${MEDIA_TIME_IS_LIVE}]:not([${MEDIA_PAUSED}])) {\n    cursor: not-allowed;\n  }\n\n  </style>\n\n  <slot name=\"indicator\">${indicatorSVG}</slot>\n  ${/*\n  A new line between spacer and text creates inconsistent spacing\n  between slotted items and default slots.\n*/\n\"\"}\n  <slot name=\"spacer\">&nbsp;</slot><slot name=\"text\">LIVE</slot>\n`;\nvar updateAriaAttributes = (el) => {\n  const isPausedOrNotLive = el.mediaPaused || !el.mediaTimeIsLive;\n  const label = isPausedOrNotLive ? verbs.SEEK_LIVE() : verbs.PLAYING_LIVE();\n  el.setAttribute(\"aria-label\", label);\n  isPausedOrNotLive ? el.removeAttribute(\"aria-disabled\") : el.setAttribute(\"aria-disabled\", \"true\");\n};\nvar MediaLiveButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [...super.observedAttributes, MEDIA_PAUSED, MEDIA_TIME_IS_LIVE];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate7 }, options));\n  }\n  connectedCallback() {\n    updateAriaAttributes(this);\n    super.connectedCallback();\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    updateAriaAttributes(this);\n  }\n  /**\n   * @type {boolean} Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  /**\n   * @type {boolean} Is the media playback currently live\n   */\n  get mediaTimeIsLive() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_TIME_IS_LIVE);\n  }\n  set mediaTimeIsLive(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_TIME_IS_LIVE, value);\n  }\n  handleClick() {\n    if (!this.mediaPaused && this.mediaTimeIsLive)\n      return;\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(MEDIA_SEEK_TO_LIVE_REQUEST, {\n        composed: true,\n        bubbles: true\n      })\n    );\n    if (this.hasAttribute(MEDIA_PAUSED)) {\n      this.dispatchEvent(\n        new GlobalThis.CustomEvent(MEDIA_PLAY_REQUEST, {\n          composed: true,\n          bubbles: true\n        })\n      );\n    }\n  }\n};\nif (!GlobalThis.customElements.get(\"media-live-button\")) {\n  GlobalThis.customElements.define(\"media-live-button\", MediaLiveButton);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-loading-indicator.js\nvar __accessCheck15 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet15 = (obj, member, getter) => {\n  __accessCheck15(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd15 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet15 = (obj, member, value, setter) => {\n  __accessCheck15(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController7;\nvar _delay;\nvar Attributes6 = {\n  LOADING_DELAY: \"loadingdelay\"\n};\nvar DEFAULT_LOADING_DELAY = 500;\nvar template11 = Document2.createElement(\"template\");\nvar loadingIndicatorIcon = `\n<svg aria-hidden=\"true\" viewBox=\"0 0 100 100\">\n  <path d=\"M73,50c0-12.7-10.3-23-23-23S27,37.3,27,50 M30.9,50c0-10.5,8.5-19.1,19.1-19.1S69.1,39.5,69.1,50\">\n    <animateTransform\n       attributeName=\"transform\"\n       attributeType=\"XML\"\n       type=\"rotate\"\n       dur=\"1s\"\n       from=\"0 50 50\"\n       to=\"360 50 50\"\n       repeatCount=\"indefinite\" />\n  </path>\n</svg>\n`;\ntemplate11.innerHTML = /*html*/\n`\n<style>\n:host {\n  display: var(--media-control-display, var(--media-loading-indicator-display, inline-block));\n  vertical-align: middle;\n  box-sizing: border-box;\n  --_loading-indicator-delay: var(--media-loading-indicator-transition-delay, ${DEFAULT_LOADING_DELAY}ms);\n}\n\n#status {\n  color: rgba(0,0,0,0);\n  width: 0px;\n  height: 0px;\n}\n\n:host slot[name=icon] > *,\n:host ::slotted([slot=icon]) {\n  opacity: var(--media-loading-indicator-opacity, 0);\n  transition: opacity 0.15s;\n}\n\n:host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=icon] > *,\n:host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) ::slotted([slot=icon]) {\n  opacity: var(--media-loading-indicator-opacity, 1);\n  transition: opacity 0.15s var(--_loading-indicator-delay);\n}\n\n:host #status {\n  visibility: var(--media-loading-indicator-opacity, hidden);\n  transition: visibility 0.15s;\n}\n\n:host([${MediaUIAttributes.MEDIA_LOADING}]:not([${MediaUIAttributes.MEDIA_PAUSED}])) #status {\n  visibility: var(--media-loading-indicator-opacity, visible);\n  transition: visibility 0.15s var(--_loading-indicator-delay);\n}\n\nsvg, img, ::slotted(svg), ::slotted(img) {\n  width: var(--media-loading-indicator-icon-width);\n  height: var(--media-loading-indicator-icon-height, 100px);\n  fill: var(--media-icon-color, var(--media-primary-color, rgb(238 238 238)));\n  vertical-align: middle;\n}\n</style>\n\n<slot name=\"icon\">${loadingIndicatorIcon}</slot>\n<div id=\"status\" role=\"status\" aria-live=\"polite\">${nouns.MEDIA_LOADING()}</div>\n`;\nvar MediaLoadingIndicator = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd15(this, _mediaController7, void 0);\n    __privateAdd15(this, _delay, DEFAULT_LOADING_DELAY);\n    if (!this.shadowRoot) {\n      const shadow = this.attachShadow({ mode: \"open\" });\n      const indicatorHTML = template11.content.cloneNode(true);\n      shadow.appendChild(indicatorHTML);\n    }\n  }\n  static get observedAttributes() {\n    return [\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n      MediaUIAttributes.MEDIA_PAUSED,\n      MediaUIAttributes.MEDIA_LOADING,\n      Attributes6.LOADING_DELAY\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === Attributes6.LOADING_DELAY && oldValue !== newValue) {\n      this.loadingDelay = Number(newValue);\n    } else if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet15(this, _mediaController7)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet15(this, _mediaController7, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet15(this, _mediaController7, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet15(this, _mediaController7)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet15(this, _mediaController7, (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId));\n      (_c = (_b = __privateGet15(this, _mediaController7)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    (_b = (_a3 = __privateGet15(this, _mediaController7)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet15(this, _mediaController7, null);\n  }\n  /**\n   * @type {number} Delay in ms\n   */\n  get loadingDelay() {\n    return __privateGet15(this, _delay);\n  }\n  set loadingDelay(delay2) {\n    __privateSet15(this, _delay, delay2);\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"--_loading-indicator-delay\",\n      `var(--media-loading-indicator-transition-delay, ${delay2}ms)`\n    );\n  }\n  /**\n   * @type {boolean} Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  /**\n   * @type {boolean} Is the media loading\n   */\n  get mediaLoading() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING);\n  }\n  set mediaLoading(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING, value);\n  }\n};\n_mediaController7 = /* @__PURE__ */ new WeakMap();\n_delay = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-loading-indicator\")) {\n  GlobalThis.customElements.define(\n    \"media-loading-indicator\",\n    MediaLoadingIndicator\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-mute-button.js\nvar { MEDIA_VOLUME_LEVEL } = MediaUIAttributes;\nvar offIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M16.5 12A4.5 4.5 0 0 0 14 8v2.18l2.45 2.45a4.22 4.22 0 0 0 .05-.63Zm2.5 0a6.84 6.84 0 0 1-.54 2.64L20 16.15A8.8 8.8 0 0 0 21 12a9 9 0 0 0-7-8.77v2.06A7 7 0 0 1 19 12ZM4.27 3 3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25A6.92 6.92 0 0 1 14 18.7v2.06A9 9 0 0 0 17.69 19l2 2.05L21 19.73l-9-9L4.27 3ZM12 4 9.91 6.09 12 8.18V4Z\"/>\n</svg>`;\nvar lowIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M3 9v6h4l5 5V4L7 9H3Zm13.5 3A4.5 4.5 0 0 0 14 8v8a4.47 4.47 0 0 0 2.5-4Z\"/>\n</svg>`;\nvar highIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M3 9v6h4l5 5V4L7 9H3Zm13.5 3A4.5 4.5 0 0 0 14 8v8a4.47 4.47 0 0 0 2.5-4ZM14 3.23v2.06a7 7 0 0 1 0 13.42v2.06a9 9 0 0 0 0-17.54Z\"/>\n</svg>`;\nvar slotTemplate8 = Document2.createElement(\"template\");\nslotTemplate8.innerHTML = /*html*/\n`\n  <style>\n  ${/* Default to High slot/icon. */\n\"\"}\n  :host(:not([${MEDIA_VOLUME_LEVEL}])) slot:not([name=high]):not([name=icon]), \n  :host([${MEDIA_VOLUME_LEVEL}=high]) slot:not([name=high]):not([name=icon]) {\n    display: none !important;\n  }\n\n  :host([${MEDIA_VOLUME_LEVEL}=off]) slot:not([name=off]):not([name=icon]) {\n    display: none !important;\n  }\n\n  :host([${MEDIA_VOLUME_LEVEL}=low]) slot:not([name=low]):not([name=icon]) {\n    display: none !important;\n  }\n\n  :host([${MEDIA_VOLUME_LEVEL}=medium]) slot:not([name=medium]):not([name=icon]) {\n    display: none !important;\n  }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"off\">${offIcon}</slot>\n    <slot name=\"low\">${lowIcon}</slot>\n    <slot name=\"medium\">${lowIcon}</slot>\n    <slot name=\"high\">${highIcon}</slot>\n  </slot>\n`;\nvar updateAriaLabel4 = (el) => {\n  const muted = el.mediaVolumeLevel === \"off\";\n  const label = muted ? verbs.UNMUTE() : verbs.MUTE();\n  el.setAttribute(\"aria-label\", label);\n};\nvar MediaMuteButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [...super.observedAttributes, MediaUIAttributes.MEDIA_VOLUME_LEVEL];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate8 }, options));\n  }\n  connectedCallback() {\n    updateAriaLabel4(this);\n    super.connectedCallback();\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === MediaUIAttributes.MEDIA_VOLUME_LEVEL) {\n      updateAriaLabel4(this);\n    }\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n  }\n  /**\n   * @type {string | undefined}\n   */\n  get mediaVolumeLevel() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_LEVEL);\n  }\n  set mediaVolumeLevel(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_LEVEL, value);\n  }\n  handleClick() {\n    const eventName = this.mediaVolumeLevel === \"off\" ? MediaUIEvents.MEDIA_UNMUTE_REQUEST : MediaUIEvents.MEDIA_MUTE_REQUEST;\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n};\nif (!GlobalThis.customElements.get(\"media-mute-button\")) {\n  GlobalThis.customElements.define(\"media-mute-button\", MediaMuteButton);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-pip-button.js\nvar pipIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 28 24\">\n  <path d=\"M24 3H4a1 1 0 0 0-1 1v16a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1V4a1 1 0 0 0-1-1Zm-1 16H5V5h18v14Zm-3-8h-7v5h7v-5Z\"/>\n</svg>`;\nvar slotTemplate9 = Document2.createElement(\"template\");\nslotTemplate9.innerHTML = /*html*/\n`\n  <style>\n  :host([${MediaUIAttributes.MEDIA_IS_PIP}]) slot:not([name=exit]):not([name=icon]) {\n    display: none !important;\n  }\n\n  ${/* Double negative, but safer if display doesn't equal 'block' */\n\"\"}\n  :host(:not([${MediaUIAttributes.MEDIA_IS_PIP}])) slot:not([name=enter]):not([name=icon]) {\n    display: none !important;\n  }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"enter\">${pipIcon}</slot>\n    <slot name=\"exit\">${pipIcon}</slot>\n  </slot>\n`;\nvar updateAriaLabel5 = (el) => {\n  const label = el.mediaIsPip ? verbs.EXIT_PIP() : verbs.ENTER_PIP();\n  el.setAttribute(\"aria-label\", label);\n};\nvar MediaPipButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_IS_PIP,\n      MediaUIAttributes.MEDIA_PIP_UNAVAILABLE\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate9 }, options));\n  }\n  connectedCallback() {\n    updateAriaLabel5(this);\n    super.connectedCallback();\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === MediaUIAttributes.MEDIA_IS_PIP) {\n      updateAriaLabel5(this);\n    }\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n  }\n  /**\n   * @type {string | undefined} Pip unavailability state\n   */\n  get mediaPipUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PIP_UNAVAILABLE);\n  }\n  set mediaPipUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PIP_UNAVAILABLE, value);\n  }\n  /**\n   * @type {boolean} Is the media currently playing picture-in-picture\n   */\n  get mediaIsPip() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_IS_PIP);\n  }\n  set mediaIsPip(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_IS_PIP, value);\n  }\n  handleClick() {\n    const eventName = this.mediaIsPip ? MediaUIEvents.MEDIA_EXIT_PIP_REQUEST : MediaUIEvents.MEDIA_ENTER_PIP_REQUEST;\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n};\nif (!GlobalThis.customElements.get(\"media-pip-button\")) {\n  GlobalThis.customElements.define(\"media-pip-button\", MediaPipButton);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-playback-rate-button.js\nvar __accessCheck16 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet16 = (obj, member, getter) => {\n  __accessCheck16(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd16 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar _rates;\nvar Attributes7 = {\n  RATES: \"rates\"\n};\nvar DEFAULT_RATES = [1, 1.2, 1.5, 1.7, 2];\nvar DEFAULT_RATE = 1;\nvar slotTemplate10 = Document2.createElement(\"template\");\nslotTemplate10.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      min-width: 5ch;\n      padding: var(--media-button-padding, var(--media-control-padding, 10px 5px));\n    }\n  </style>\n  <slot name=\"icon\"></slot>\n`;\nvar MediaPlaybackRateButton = class extends MediaChromeButton {\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate10 }, options));\n    __privateAdd16(this, _rates, new AttributeTokenList(this, Attributes7.RATES, {\n      defaultValue: DEFAULT_RATES\n    }));\n    this.container = this.shadowRoot.querySelector('slot[name=\"icon\"]');\n    this.container.innerHTML = `${DEFAULT_RATE}x`;\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      Attributes7.RATES\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === Attributes7.RATES) {\n      __privateGet16(this, _rates).value = newValue;\n    }\n    if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE) {\n      const newPlaybackRate = newValue ? +newValue : Number.NaN;\n      const playbackRate = !Number.isNaN(newPlaybackRate) ? newPlaybackRate : DEFAULT_RATE;\n      this.container.innerHTML = `${playbackRate}x`;\n      this.setAttribute(\"aria-label\", nouns.PLAYBACK_RATE({ playbackRate }));\n    }\n  }\n  /**\n   * @type { AttributeTokenList | Array<number> | undefined} Will return a DOMTokenList.\n   * Setting a value will accept an array of numbers.\n   */\n  get rates() {\n    return __privateGet16(this, _rates);\n  }\n  set rates(value) {\n    if (!value) {\n      __privateGet16(this, _rates).value = \"\";\n    } else if (Array.isArray(value)) {\n      __privateGet16(this, _rates).value = value.join(\" \");\n    }\n  }\n  /**\n   * @type {number} The current playback rate\n   */\n  get mediaPlaybackRate() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      DEFAULT_RATE\n    );\n  }\n  set mediaPlaybackRate(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n  }\n  handleClick() {\n    var _a3, _b;\n    const availableRates = Array.from(this.rates.values(), (str) => +str).sort(\n      (a2, b4) => a2 - b4\n    );\n    const detail = (_b = (_a3 = availableRates.find((r10) => r10 > this.mediaPlaybackRate)) != null ? _a3 : availableRates[0]) != null ? _b : DEFAULT_RATE;\n    const evt = new GlobalThis.CustomEvent(\n      MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST,\n      { composed: true, bubbles: true, detail }\n    );\n    this.dispatchEvent(evt);\n  }\n};\n_rates = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-playback-rate-button\")) {\n  GlobalThis.customElements.define(\n    \"media-playback-rate-button\",\n    MediaPlaybackRateButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-playback-rate-menu.js\nvar __accessCheck17 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet17 = (obj, member, getter) => {\n  __accessCheck17(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd17 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateMethod9 = (obj, member, method) => {\n  __accessCheck17(obj, member, \"access private method\");\n  return method;\n};\nvar _rates2;\nvar _render3;\nvar render_fn3;\nvar _onChange3;\nvar onChange_fn3;\nvar Attributes8 = {\n  RATES: \"rates\"\n};\nvar MediaPlaybackRateMenu = class extends MediaChromeMenu {\n  constructor() {\n    super();\n    __privateAdd17(this, _render3);\n    __privateAdd17(this, _onChange3);\n    __privateAdd17(this, _rates2, new AttributeTokenList(this, Attributes8.RATES, {\n      defaultValue: DEFAULT_RATES\n    }));\n    __privateMethod9(this, _render3, render_fn3).call(this);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      Attributes8.RATES\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE && oldValue != newValue) {\n      this.value = newValue;\n    } else if (attrName === Attributes8.RATES && oldValue != newValue) {\n      __privateGet17(this, _rates2).value = newValue;\n      __privateMethod9(this, _render3, render_fn3).call(this);\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod9(this, _onChange3, onChange_fn3));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod9(this, _onChange3, onChange_fn3));\n  }\n  /**\n   * Returns the anchor element when it is a floating menu.\n   * @return {HTMLElement}\n   */\n  get anchorElement() {\n    if (this.anchor !== \"auto\")\n      return super.anchorElement;\n    return getMediaController(this).querySelector(\n      \"media-playback-rate-menu-button\"\n    );\n  }\n  /**\n   * @type { AttributeTokenList | Array<number> | undefined} Will return a DOMTokenList.\n   * Setting a value will accept an array of numbers.\n   */\n  get rates() {\n    return __privateGet17(this, _rates2);\n  }\n  set rates(value) {\n    if (!value) {\n      __privateGet17(this, _rates2).value = \"\";\n    } else if (Array.isArray(value)) {\n      __privateGet17(this, _rates2).value = value.join(\" \");\n    }\n    __privateMethod9(this, _render3, render_fn3).call(this);\n  }\n  /**\n   * @type {number} The current playback rate\n   */\n  get mediaPlaybackRate() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      DEFAULT_RATE\n    );\n  }\n  set mediaPlaybackRate(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n  }\n};\n_rates2 = /* @__PURE__ */ new WeakMap();\n_render3 = /* @__PURE__ */ new WeakSet();\nrender_fn3 = function() {\n  this.defaultSlot.textContent = \"\";\n  for (const rate of this.rates) {\n    const item = createMenuItem({\n      type: \"radio\",\n      text: this.formatMenuItemText(`${rate}x`, rate),\n      value: rate,\n      checked: this.mediaPlaybackRate == rate\n    });\n    item.prepend(createIndicator(this, \"checked-indicator\"));\n    this.defaultSlot.append(item);\n  }\n};\n_onChange3 = /* @__PURE__ */ new WeakSet();\nonChange_fn3 = function() {\n  if (!this.value)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\nif (!GlobalThis.customElements.get(\"media-playback-rate-menu\")) {\n  GlobalThis.customElements.define(\n    \"media-playback-rate-menu\",\n    MediaPlaybackRateMenu\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-playback-rate-menu-button.js\nvar __accessCheck18 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet18 = (obj, member, getter) => {\n  __accessCheck18(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd18 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar _rates3;\nvar Attributes9 = {\n  RATES: \"rates\"\n};\nvar DEFAULT_RATES2 = [1, 1.2, 1.5, 1.7, 2];\nvar DEFAULT_RATE2 = 1;\nvar slotTemplate11 = Document2.createElement(\"template\");\nslotTemplate11.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      min-width: 5ch;\n      padding: var(--media-button-padding, var(--media-control-padding, 10px 5px));\n    }\n  </style>\n  <slot name=\"icon\"></slot>\n`;\nvar MediaPlaybackRateMenuButton = class extends MediaChromeMenuButton {\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate11 }, options));\n    __privateAdd18(this, _rates3, new AttributeTokenList(this, Attributes9.RATES, {\n      defaultValue: DEFAULT_RATES2\n    }));\n    this.container = this.shadowRoot.querySelector('slot[name=\"icon\"]');\n    this.container.innerHTML = `${DEFAULT_RATE2}x`;\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      Attributes9.RATES\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === Attributes9.RATES) {\n      __privateGet18(this, _rates3).value = newValue;\n    }\n    if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE) {\n      const newPlaybackRate = newValue ? +newValue : Number.NaN;\n      const playbackRate = !Number.isNaN(newPlaybackRate) ? newPlaybackRate : DEFAULT_RATE2;\n      this.container.innerHTML = `${playbackRate}x`;\n      this.setAttribute(\"aria-label\", nouns.PLAYBACK_RATE({ playbackRate }));\n    }\n  }\n  /**\n   * Returns the element with the id specified by the `invoketarget` attribute.\n   * @return {HTMLElement | null}\n   */\n  get invokeTargetElement() {\n    if (this.invokeTarget != void 0)\n      return super.invokeTargetElement;\n    return getMediaController(this).querySelector(\"media-playback-rate-menu\");\n  }\n  /**\n   * @type { AttributeTokenList | Array<number> | undefined} Will return a DOMTokenList.\n   * Setting a value will accept an array of numbers.\n   */\n  get rates() {\n    return __privateGet18(this, _rates3);\n  }\n  set rates(value) {\n    if (!value) {\n      __privateGet18(this, _rates3).value = \"\";\n    } else if (Array.isArray(value)) {\n      __privateGet18(this, _rates3).value = value.join(\" \");\n    }\n  }\n  /**\n   * @type {number} The current playback rate\n   */\n  get mediaPlaybackRate() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      DEFAULT_RATE2\n    );\n  }\n  set mediaPlaybackRate(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n  }\n};\n_rates3 = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-playback-rate-menu-button\")) {\n  GlobalThis.customElements.define(\n    \"media-playback-rate-menu-button\",\n    MediaPlaybackRateMenuButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-play-button.js\nvar playIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"m6 21 15-9L6 3v18Z\"/>\n</svg>`;\nvar pauseIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M6 20h4V4H6v16Zm8-16v16h4V4h-4Z\"/>\n</svg>`;\nvar slotTemplate12 = Document2.createElement(\"template\");\nslotTemplate12.innerHTML = /*html*/\n`\n  <style>\n  :host([${MediaUIAttributes.MEDIA_PAUSED}]) slot[name=pause] {\n    display: none !important;\n  }\n\n  :host(:not([${MediaUIAttributes.MEDIA_PAUSED}])) slot[name=play] {\n    display: none !important;\n  }\n  </style>\n\n  <slot name=\"icon\">\n    <slot name=\"play\">${playIcon}</slot>\n    <slot name=\"pause\">${pauseIcon}</slot>\n  </slot>\n`;\nvar updateAriaLabel6 = (el) => {\n  const label = el.mediaPaused ? verbs.PLAY() : verbs.PAUSE();\n  el.setAttribute(\"aria-label\", label);\n};\nvar MediaPlayButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PAUSED,\n      MediaUIAttributes.MEDIA_ENDED\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate12 }, options));\n  }\n  connectedCallback() {\n    updateAriaLabel6(this);\n    super.connectedCallback();\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === MediaUIAttributes.MEDIA_PAUSED) {\n      updateAriaLabel6(this);\n    }\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n  }\n  /**\n   * @type {boolean} Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  handleClick() {\n    const eventName = this.mediaPaused ? MediaUIEvents.MEDIA_PLAY_REQUEST : MediaUIEvents.MEDIA_PAUSE_REQUEST;\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(eventName, { composed: true, bubbles: true })\n    );\n  }\n};\nif (!GlobalThis.customElements.get(\"media-play-button\")) {\n  GlobalThis.customElements.define(\"media-play-button\", MediaPlayButton);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-poster-image.js\nvar Attributes10 = {\n  PLACEHOLDER_SRC: \"placeholdersrc\",\n  SRC: \"src\"\n};\nvar template12 = Document2.createElement(\"template\");\ntemplate12.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      pointer-events: none;\n      display: var(--media-poster-image-display, inline-block);\n      box-sizing: border-box;\n    }\n\n    img {\n      max-width: 100%;\n      max-height: 100%;\n      min-width: 100%;\n      min-height: 100%;\n      background-repeat: no-repeat;\n      background-position: var(--media-poster-image-background-position, var(--media-object-position, center));\n      background-size: var(--media-poster-image-background-size, var(--media-object-fit, contain));\n      object-fit: var(--media-object-fit, contain);\n      object-position: var(--media-object-position, center);\n    }\n  </style>\n\n  <img part=\"poster img\" aria-hidden=\"true\" id=\"image\"/>\n`;\nvar unsetBackgroundImage = (el) => {\n  el.style.removeProperty(\"background-image\");\n};\nvar setBackgroundImage = (el, image) => {\n  el.style[\"background-image\"] = `url('${image}')`;\n};\nvar MediaPosterImage = class extends GlobalThis.HTMLElement {\n  static get observedAttributes() {\n    return [Attributes10.PLACEHOLDER_SRC, Attributes10.SRC];\n  }\n  constructor() {\n    super();\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template12.content.cloneNode(true));\n    }\n    this.image = this.shadowRoot.querySelector(\"#image\");\n  }\n  attributeChangedCallback(attrName, _oldValue, newValue) {\n    if (attrName === Attributes10.SRC) {\n      if (newValue == null) {\n        this.image.removeAttribute(Attributes10.SRC);\n      } else {\n        this.image.setAttribute(Attributes10.SRC, newValue);\n      }\n    }\n    if (attrName === Attributes10.PLACEHOLDER_SRC) {\n      if (newValue == null) {\n        unsetBackgroundImage(this.image);\n      } else {\n        setBackgroundImage(this.image, newValue);\n      }\n    }\n  }\n  /**\n   * @type {string | undefined}\n   */\n  get placeholderSrc() {\n    return getStringAttr(this, Attributes10.PLACEHOLDER_SRC);\n  }\n  set placeholderSrc(value) {\n    setStringAttr(this, Attributes10.SRC, value);\n  }\n  /**\n   * @type {string | undefined}\n   */\n  get src() {\n    return getStringAttr(this, Attributes10.SRC);\n  }\n  set src(value) {\n    setStringAttr(this, Attributes10.SRC, value);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-poster-image\")) {\n  GlobalThis.customElements.define(\"media-poster-image\", MediaPosterImage);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-preview-chapter-display.js\nvar __accessCheck19 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet19 = (obj, member, getter) => {\n  __accessCheck19(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd19 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet16 = (obj, member, value, setter) => {\n  __accessCheck19(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot2;\nvar MediaPreviewChapterDisplay = class extends media_text_display_default {\n  constructor() {\n    super();\n    __privateAdd19(this, _slot2, void 0);\n    __privateSet16(this, _slot2, this.shadowRoot.querySelector(\"slot\"));\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PREVIEW_CHAPTER\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_PREVIEW_CHAPTER) {\n      if (newValue !== oldValue && newValue != null) {\n        __privateGet19(this, _slot2).textContent = newValue;\n        if (newValue !== \"\") {\n          this.setAttribute(\"aria-valuetext\", `chapter: ${newValue}`);\n        } else {\n          this.removeAttribute(\"aria-valuetext\");\n        }\n      }\n    }\n  }\n  /**\n   * @type {string | undefined} Timeline preview chapter\n   */\n  get mediaPreviewChapter() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_CHAPTER);\n  }\n  set mediaPreviewChapter(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_CHAPTER, value);\n  }\n};\n_slot2 = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-preview-chapter-display\")) {\n  GlobalThis.customElements.define(\n    \"media-preview-chapter-display\",\n    MediaPreviewChapterDisplay\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-preview-thumbnail.js\nvar __accessCheck20 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet20 = (obj, member, getter) => {\n  __accessCheck20(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd20 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet17 = (obj, member, value, setter) => {\n  __accessCheck20(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _mediaController8;\nvar template13 = Document2.createElement(\"template\");\ntemplate13.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      box-sizing: border-box;\n      display: var(--media-control-display, var(--media-preview-thumbnail-display, inline-block));\n      overflow: hidden;\n    }\n\n    img {\n      display: none;\n      position: relative;\n    }\n  </style>\n  <img crossorigin loading=\"eager\" decoding=\"async\">\n`;\nvar MediaPreviewThumbnail = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd20(this, _mediaController8, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template13.content.cloneNode(true));\n    }\n  }\n  static get observedAttributes() {\n    return [\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n      MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n      MediaUIAttributes.MEDIA_PREVIEW_COORDS\n    ];\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet17(\n        this,\n        _mediaController8,\n        // @ts-ignore\n        (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId)\n      );\n      (_c = (_b = __privateGet20(this, _mediaController8)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    (_b = (_a3 = __privateGet20(this, _mediaController8)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet17(this, _mediaController8, null);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if ([\n      MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n      MediaUIAttributes.MEDIA_PREVIEW_COORDS\n    ].includes(attrName)) {\n      this.update();\n    }\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet20(this, _mediaController8)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet17(this, _mediaController8, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet17(this, _mediaController8, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet20(this, _mediaController8)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    }\n  }\n  /**\n   * @type {string | undefined} The url of the preview image\n   */\n  get mediaPreviewImage() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE);\n  }\n  set mediaPreviewImage(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE, value);\n  }\n  /**\n   * @type {Array<number> | undefined} Fixed length array [x, y, width, height] or undefined\n   */\n  get mediaPreviewCoords() {\n    const attrVal = this.getAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS);\n    if (!attrVal)\n      return void 0;\n    return attrVal.split(/\\s+/).map((coord) => +coord);\n  }\n  set mediaPreviewCoords(value) {\n    if (!value) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS);\n      return;\n    }\n    this.setAttribute(MediaUIAttributes.MEDIA_PREVIEW_COORDS, value.join(\" \"));\n  }\n  update() {\n    const coords = this.mediaPreviewCoords;\n    const previewImage = this.mediaPreviewImage;\n    if (!(coords && previewImage))\n      return;\n    const [x4, y5, w2, h3] = coords;\n    const src = previewImage.split(\"#\")[0];\n    const computedStyle = getComputedStyle(this);\n    const { maxWidth, maxHeight, minWidth, minHeight } = computedStyle;\n    const maxRatio = Math.min(parseInt(maxWidth) / w2, parseInt(maxHeight) / h3);\n    const minRatio = Math.max(parseInt(minWidth) / w2, parseInt(minHeight) / h3);\n    const isScalingDown = maxRatio < 1;\n    const scale = isScalingDown ? maxRatio : minRatio > 1 ? minRatio : 1;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    const imgStyle = getOrInsertCSSRule(this.shadowRoot, \"img\").style;\n    const img = this.shadowRoot.querySelector(\"img\");\n    const extremum = isScalingDown ? \"min\" : \"max\";\n    style.setProperty(`${extremum}-width`, \"initial\", \"important\");\n    style.setProperty(`${extremum}-height`, \"initial\", \"important\");\n    style.width = `${w2 * scale}px`;\n    style.height = `${h3 * scale}px`;\n    const resize = () => {\n      imgStyle.width = `${this.imgWidth * scale}px`;\n      imgStyle.height = `${this.imgHeight * scale}px`;\n      imgStyle.display = \"block\";\n    };\n    if (img.src !== src) {\n      img.onload = () => {\n        this.imgWidth = img.naturalWidth;\n        this.imgHeight = img.naturalHeight;\n        resize();\n      };\n      img.src = src;\n      resize();\n    }\n    resize();\n    imgStyle.transform = `translate(-${x4 * scale}px, -${y5 * scale}px)`;\n  }\n};\n_mediaController8 = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-preview-thumbnail\")) {\n  GlobalThis.customElements.define(\n    \"media-preview-thumbnail\",\n    MediaPreviewThumbnail\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-preview-time-display.js\nvar __accessCheck21 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet21 = (obj, member, getter) => {\n  __accessCheck21(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd21 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet18 = (obj, member, value, setter) => {\n  __accessCheck21(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot3;\nvar MediaPreviewTimeDisplay = class extends MediaTextDisplay {\n  constructor() {\n    super();\n    __privateAdd21(this, _slot3, void 0);\n    __privateSet18(this, _slot3, this.shadowRoot.querySelector(\"slot\"));\n    __privateGet21(this, _slot3).textContent = formatTime(0);\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, MediaUIAttributes.MEDIA_PREVIEW_TIME];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_PREVIEW_TIME && newValue != null) {\n      __privateGet21(this, _slot3).textContent = formatTime(newValue);\n    }\n  }\n  /**\n   * @type {number | undefined} Timeline preview time\n   */\n  get mediaPreviewTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME);\n  }\n  set mediaPreviewTime(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME, value);\n  }\n};\n_slot3 = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-preview-time-display\")) {\n  GlobalThis.customElements.define(\n    \"media-preview-time-display\",\n    MediaPreviewTimeDisplay\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-rendition-menu.js\nvar __accessCheck22 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet22 = (obj, member, getter) => {\n  __accessCheck22(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd22 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet19 = (obj, member, value, setter) => {\n  __accessCheck22(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod10 = (obj, member, method) => {\n  __accessCheck22(obj, member, \"access private method\");\n  return method;\n};\nvar _renditionList;\nvar _prevState3;\nvar _render4;\nvar render_fn4;\nvar _onChange4;\nvar onChange_fn4;\nvar MediaRenditionMenu = class extends MediaChromeMenu {\n  constructor() {\n    super(...arguments);\n    __privateAdd22(this, _render4);\n    __privateAdd22(this, _onChange4);\n    __privateAdd22(this, _renditionList, []);\n    __privateAdd22(this, _prevState3, void 0);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_RENDITION_LIST,\n      MediaUIAttributes.MEDIA_RENDITION_SELECTED,\n      MediaUIAttributes.MEDIA_RENDITION_UNAVAILABLE\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_RENDITION_SELECTED && oldValue !== newValue) {\n      this.value = newValue != null ? newValue : \"auto\";\n    } else if (attrName === MediaUIAttributes.MEDIA_RENDITION_LIST && oldValue !== newValue) {\n      __privateSet19(this, _renditionList, parseRenditionList(newValue));\n      __privateMethod10(this, _render4, render_fn4).call(this);\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod10(this, _onChange4, onChange_fn4));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod10(this, _onChange4, onChange_fn4));\n  }\n  /**\n   * Returns the anchor element when it is a floating menu.\n   * @return {HTMLElement}\n   */\n  get anchorElement() {\n    if (this.anchor !== \"auto\")\n      return super.anchorElement;\n    return getMediaController(this).querySelector(\n      \"media-rendition-menu-button\"\n    );\n  }\n  get mediaRenditionList() {\n    return __privateGet22(this, _renditionList);\n  }\n  set mediaRenditionList(list) {\n    __privateSet19(this, _renditionList, list);\n    __privateMethod10(this, _render4, render_fn4).call(this);\n  }\n  /**\n   * Get selected rendition id.\n   * @return {string}\n   */\n  get mediaRenditionSelected() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED);\n  }\n  set mediaRenditionSelected(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED, id);\n  }\n};\n_renditionList = /* @__PURE__ */ new WeakMap();\n_prevState3 = /* @__PURE__ */ new WeakMap();\n_render4 = /* @__PURE__ */ new WeakSet();\nrender_fn4 = function() {\n  if (__privateGet22(this, _prevState3) === JSON.stringify(this.mediaRenditionList))\n    return;\n  __privateSet19(this, _prevState3, JSON.stringify(this.mediaRenditionList));\n  const renditionList = this.mediaRenditionList.sort(\n    (a2, b4) => b4.height - a2.height\n  );\n  this.defaultSlot.textContent = \"\";\n  let isAuto = !this.mediaRenditionSelected;\n  for (const rendition of renditionList) {\n    const text = this.formatMenuItemText(\n      `${Math.min(rendition.width, rendition.height)}p`,\n      rendition\n    );\n    const item2 = createMenuItem({\n      type: \"radio\",\n      text,\n      value: `${rendition.id}`,\n      checked: rendition.selected && !isAuto\n    });\n    item2.prepend(createIndicator(this, \"checked-indicator\"));\n    this.defaultSlot.append(item2);\n  }\n  const item = createMenuItem({\n    type: \"radio\",\n    text: this.formatMenuItemText(\"Auto\"),\n    value: \"auto\",\n    checked: isAuto\n  });\n  item.prepend(createIndicator(this, \"checked-indicator\"));\n  this.defaultSlot.append(item);\n};\n_onChange4 = /* @__PURE__ */ new WeakSet();\nonChange_fn4 = function() {\n  if (this.value == null)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_RENDITION_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\nif (!GlobalThis.customElements.get(\"media-rendition-menu\")) {\n  GlobalThis.customElements.define(\"media-rendition-menu\", MediaRenditionMenu);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-rendition-menu-button.js\nvar renditionIcon = (\n  /*html*/\n  `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M13.5 2.5h2v6h-2v-2h-11v-2h11v-2Zm4 2h4v2h-4v-2Zm-12 4h2v6h-2v-2h-3v-2h3v-2Zm4 2h12v2h-12v-2Zm1 4h2v6h-2v-2h-8v-2h8v-2Zm4 2h7v2h-7v-2Z\" />\n</svg>`\n);\nvar slotTemplate13 = Document2.createElement(\"template\");\nslotTemplate13.innerHTML = /*html*/\n`\n  <slot name=\"icon\">${renditionIcon}</slot>\n`;\nvar MediaRenditionMenuButton = class extends MediaChromeMenuButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_RENDITION_SELECTED,\n      MediaUIAttributes.MEDIA_RENDITION_UNAVAILABLE\n    ];\n  }\n  constructor() {\n    super({ slotTemplate: slotTemplate13 });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"aria-label\", nouns.QUALITY());\n  }\n  /**\n   * Returns the element with the id specified by the `invoketarget` attribute.\n   * @return {HTMLElement | null}\n   */\n  get invokeTargetElement() {\n    if (this.invokeTarget != void 0)\n      return super.invokeTargetElement;\n    return getMediaController(this).querySelector(\"media-rendition-menu\");\n  }\n  /**\n   * Get selected rendition id.\n   * @return {string}\n   */\n  get mediaRenditionSelected() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED);\n  }\n  set mediaRenditionSelected(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED, id);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-rendition-menu-button\")) {\n  GlobalThis.customElements.define(\n    \"media-rendition-menu-button\",\n    MediaRenditionMenuButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-seek-backward-button.js\nvar Attributes11 = {\n  SEEK_OFFSET: \"seekoffset\"\n};\nvar DEFAULT_SEEK_OFFSET2 = 30;\nvar backwardIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 20 24\"><defs><style>.text{font-size:8px;font-family:Arial-BoldMT, Arial;font-weight:700;}</style></defs><text class=\"text value\" transform=\"translate(2.18 19.87)\">${DEFAULT_SEEK_OFFSET2}</text><path d=\"M10 6V3L4.37 7 10 10.94V8a5.54 5.54 0 0 1 1.9 10.48v2.12A7.5 7.5 0 0 0 10 6Z\"/></svg>`;\nvar slotTemplate14 = Document2.createElement(\"template\");\nslotTemplate14.innerHTML = `\n  <slot name=\"icon\">${backwardIcon}</slot>\n`;\nvar DEFAULT_TIME = 0;\nvar MediaSeekBackwardButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      Attributes11.SEEK_OFFSET\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate14 }, options));\n  }\n  connectedCallback() {\n    this.seekOffset = getNumericAttr(\n      this,\n      Attributes11.SEEK_OFFSET,\n      DEFAULT_SEEK_OFFSET2\n    );\n    super.connectedCallback();\n  }\n  attributeChangedCallback(attrName, _oldValue, newValue) {\n    if (attrName === Attributes11.SEEK_OFFSET) {\n      this.seekOffset = getNumericAttr(\n        this,\n        Attributes11.SEEK_OFFSET,\n        DEFAULT_SEEK_OFFSET2\n      );\n    }\n    super.attributeChangedCallback(attrName, _oldValue, newValue);\n  }\n  // Own props\n  /**\n   * @type {number | undefined} Seek amount in seconds\n   */\n  get seekOffset() {\n    return getNumericAttr(this, Attributes11.SEEK_OFFSET, DEFAULT_SEEK_OFFSET2);\n  }\n  set seekOffset(value) {\n    setNumericAttr(this, Attributes11.SEEK_OFFSET, value);\n    this.setAttribute(\n      \"aria-label\",\n      verbs.SEEK_BACK_N_SECS({ seekOffset: this.seekOffset })\n    );\n    updateIconText(getSlotted(this, \"icon\"), this.seekOffset);\n  }\n  // Props derived from Media UI Attributes\n  /**\n   * The current time\n   * @type {number | undefined} In seconds\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      DEFAULT_TIME\n    );\n  }\n  set mediaCurrentTime(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n  }\n  handleClick() {\n    const detail = Math.max(this.mediaCurrentTime - this.seekOffset, 0);\n    const evt = new GlobalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    });\n    this.dispatchEvent(evt);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-seek-backward-button\")) {\n  GlobalThis.customElements.define(\n    \"media-seek-backward-button\",\n    MediaSeekBackwardButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-seek-forward-button.js\nvar Attributes12 = {\n  SEEK_OFFSET: \"seekoffset\"\n};\nvar DEFAULT_SEEK_OFFSET3 = 30;\nvar forwardIcon = `<svg aria-hidden=\"true\" viewBox=\"0 0 20 24\"><defs><style>.text{font-size:8px;font-family:Arial-BoldMT, Arial;font-weight:700;}</style></defs><text class=\"text value\" transform=\"translate(8.9 19.87)\">${DEFAULT_SEEK_OFFSET3}</text><path d=\"M10 6V3l5.61 4L10 10.94V8a5.54 5.54 0 0 0-1.9 10.48v2.12A7.5 7.5 0 0 1 10 6Z\"/></svg>`;\nvar slotTemplate15 = Document2.createElement(\"template\");\nslotTemplate15.innerHTML = `\n  <slot name=\"icon\">${forwardIcon}</slot>\n`;\nvar DEFAULT_TIME2 = 0;\nvar MediaSeekForwardButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      Attributes12.SEEK_OFFSET\n    ];\n  }\n  constructor(options = {}) {\n    super(__spreadValues({ slotTemplate: slotTemplate15 }, options));\n  }\n  connectedCallback() {\n    this.seekOffset = getNumericAttr(\n      this,\n      Attributes12.SEEK_OFFSET,\n      DEFAULT_SEEK_OFFSET3\n    );\n    super.connectedCallback();\n  }\n  attributeChangedCallback(attrName, _oldValue, newValue) {\n    if (attrName === Attributes12.SEEK_OFFSET) {\n      this.seekOffset = getNumericAttr(\n        this,\n        Attributes12.SEEK_OFFSET,\n        DEFAULT_SEEK_OFFSET3\n      );\n    }\n    super.attributeChangedCallback(attrName, _oldValue, newValue);\n  }\n  // Own props\n  /**\n   * @type {number | undefined} Seek amount in seconds\n   */\n  get seekOffset() {\n    return getNumericAttr(this, Attributes12.SEEK_OFFSET, DEFAULT_SEEK_OFFSET3);\n  }\n  set seekOffset(value) {\n    setNumericAttr(this, Attributes12.SEEK_OFFSET, value);\n    this.setAttribute(\n      \"aria-label\",\n      verbs.SEEK_FORWARD_N_SECS({ seekOffset: this.seekOffset })\n    );\n    updateIconText(getSlotted(this, \"icon\"), this.seekOffset);\n  }\n  // Props derived from Media UI Attributes\n  /**\n   * The current time\n   * @type {number | undefined} In seconds\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      DEFAULT_TIME2\n    );\n  }\n  set mediaCurrentTime(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n  }\n  handleClick() {\n    const detail = this.mediaCurrentTime + this.seekOffset;\n    const evt = new GlobalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    });\n    this.dispatchEvent(evt);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-seek-forward-button\")) {\n  GlobalThis.customElements.define(\n    \"media-seek-forward-button\",\n    MediaSeekForwardButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-settings-menu.js\nvar __defProp8 = Object.defineProperty;\nvar __defNormalProp8 = (obj, key, value) => key in obj ? __defProp8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField8 = (obj, key, value) => {\n  __defNormalProp8(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar template14 = Document2.createElement(\"template\");\ntemplate14.innerHTML = MediaChromeMenu.template.innerHTML + /*html*/\n`\n  <style>\n    :host {\n      background: var(--media-settings-menu-background,\n        var(--media-menu-background,\n        var(--media-control-background,\n        var(--media-secondary-color, rgb(20 20 30 / .8)))));\n      min-width: var(--media-settings-menu-min-width, 160px);\n      border-radius: 2px 2px 0 0;\n      overflow: hidden;\n    }\n\n    :host([role=\"menu\"]) {\n      ${/* Bottom fix setting menu items for animation when the height expands. */\n\"\"}\n      justify-content: end;\n    }\n\n    slot:not([name]) {\n      justify-content: var(--media-settings-menu-justify-content);\n      flex-direction: var(--media-settings-menu-flex-direction, column);\n      overflow: visible;\n    }\n\n    #container.has-expanded {\n      --media-settings-menu-item-opacity: 0;\n    }\n  </style>\n`;\nvar MediaSettingsMenu = class extends MediaChromeMenu {\n  /**\n   * Returns the anchor element when it is a floating menu.\n   * @return {HTMLElement}\n   */\n  get anchorElement() {\n    if (this.anchor !== \"auto\")\n      return super.anchorElement;\n    return getMediaController(this).querySelector(\"media-settings-menu-button\");\n  }\n};\n__publicField8(MediaSettingsMenu, \"template\", template14);\nif (!GlobalThis.customElements.get(\"media-settings-menu\")) {\n  GlobalThis.customElements.define(\"media-settings-menu\", MediaSettingsMenu);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-settings-menu-button.js\nvar slotTemplate16 = Document2.createElement(\"template\");\nslotTemplate16.innerHTML = /*html*/\n`\n  <slot name=\"icon\">\n    <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n      <path d=\"M4.5 14.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Zm7.5 0a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Zm7.5 0a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\"/>\n    </svg>\n  </slot>\n`;\nvar MediaSettingsMenuButton = class extends MediaChromeMenuButton {\n  static get observedAttributes() {\n    return [...super.observedAttributes, \"target\"];\n  }\n  constructor() {\n    super({ slotTemplate: slotTemplate16 });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.setAttribute(\"aria-label\", nouns.SETTINGS());\n  }\n  /**\n   * Returns the element with the id specified by the `invoketarget` attribute.\n   * @return {HTMLElement | null}\n   */\n  get invokeTargetElement() {\n    if (this.invokeTarget != void 0)\n      return super.invokeTargetElement;\n    return getMediaController(this).querySelector(\"media-settings-menu\");\n  }\n};\nif (!GlobalThis.customElements.get(\"media-settings-menu-button\")) {\n  GlobalThis.customElements.define(\n    \"media-settings-menu-button\",\n    MediaSettingsMenuButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-settings-menu-item.js\nvar __defProp9 = Object.defineProperty;\nvar __defNormalProp9 = (obj, key, value) => key in obj ? __defProp9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField9 = (obj, key, value) => {\n  __defNormalProp9(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar _a;\nvar template15 = Document2.createElement(\"template\");\ntemplate15.innerHTML = MediaChromeMenuItem.template.innerHTML + /*html*/\n`\n  <style>\n    slot:not([name=\"submenu\"]) {\n      opacity: var(--media-settings-menu-item-opacity, var(--media-menu-item-opacity));\n    }\n\n    :host([aria-expanded=\"true\"]:hover) {\n      background: transparent;\n    }\n  </style>\n`;\nif ((_a = template15.content) == null ? void 0 : _a.querySelector) {\n  template15.content.querySelector('slot[name=\"suffix\"]').innerHTML = /*html*/\n  `\n    <svg aria-hidden=\"true\" viewBox=\"0 0 20 24\">\n      <path d=\"m8.12 17.585-.742-.669 4.2-4.665-4.2-4.666.743-.669 4.803 5.335-4.803 5.334Z\"/>\n    </svg>\n  `;\n}\nvar MediaSettingsMenuItem = class extends MediaChromeMenuItem {\n};\n__publicField9(MediaSettingsMenuItem, \"template\", template15);\nif (!GlobalThis.customElements.get(\"media-settings-menu-item\")) {\n  GlobalThis.customElements.define(\n    \"media-settings-menu-item\",\n    MediaSettingsMenuItem\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-time-display.js\nvar __accessCheck23 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet23 = (obj, member, getter) => {\n  __accessCheck23(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd23 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet20 = (obj, member, value, setter) => {\n  __accessCheck23(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _slot4;\nvar Attributes13 = {\n  REMAINING: \"remaining\",\n  SHOW_DURATION: \"showduration\",\n  NO_TOGGLE: \"notoggle\"\n};\nvar CombinedAttributes = [\n  ...Object.values(Attributes13),\n  MediaUIAttributes.MEDIA_CURRENT_TIME,\n  MediaUIAttributes.MEDIA_DURATION,\n  MediaUIAttributes.MEDIA_SEEKABLE\n];\nvar ButtonPressedKeys2 = [\"Enter\", \" \"];\nvar DEFAULT_TIMES_SEP = \"&nbsp;/&nbsp;\";\nvar formatTimesLabel = (el, { timesSep = DEFAULT_TIMES_SEP } = {}) => {\n  var _a3, _b;\n  const showRemaining = el.hasAttribute(Attributes13.REMAINING);\n  const showDuration = el.hasAttribute(Attributes13.SHOW_DURATION);\n  const currentTime = (_a3 = el.mediaCurrentTime) != null ? _a3 : 0;\n  const [, seekableEnd] = (_b = el.mediaSeekable) != null ? _b : [];\n  let endTime = 0;\n  if (Number.isFinite(el.mediaDuration)) {\n    endTime = el.mediaDuration;\n  } else if (Number.isFinite(seekableEnd)) {\n    endTime = seekableEnd;\n  }\n  const timeLabel = showRemaining ? formatTime(0 - (endTime - currentTime)) : formatTime(currentTime);\n  if (!showDuration)\n    return timeLabel;\n  return `${timeLabel}${timesSep}${formatTime(endTime)}`;\n};\nvar DEFAULT_MISSING_TIME_PHRASE = \"video not loaded, unknown time.\";\nvar updateAriaValueText = (el) => {\n  var _a3;\n  const currentTime = el.mediaCurrentTime;\n  const [, seekableEnd] = (_a3 = el.mediaSeekable) != null ? _a3 : [];\n  let endTime = null;\n  if (Number.isFinite(el.mediaDuration)) {\n    endTime = el.mediaDuration;\n  } else if (Number.isFinite(seekableEnd)) {\n    endTime = seekableEnd;\n  }\n  if (currentTime == null || endTime === null) {\n    el.setAttribute(\"aria-valuetext\", DEFAULT_MISSING_TIME_PHRASE);\n    return;\n  }\n  const showRemaining = el.hasAttribute(Attributes13.REMAINING);\n  const showDuration = el.hasAttribute(Attributes13.SHOW_DURATION);\n  const currentTimePhrase = showRemaining ? formatAsTimePhrase(0 - (endTime - currentTime)) : formatAsTimePhrase(currentTime);\n  if (!showDuration) {\n    el.setAttribute(\"aria-valuetext\", currentTimePhrase);\n    return;\n  }\n  const totalTimePhrase = formatAsTimePhrase(endTime);\n  const fullPhrase = `${currentTimePhrase} of ${totalTimePhrase}`;\n  el.setAttribute(\"aria-valuetext\", fullPhrase);\n};\nvar MediaTimeDisplay = class extends MediaTextDisplay {\n  constructor() {\n    super();\n    __privateAdd23(this, _slot4, void 0);\n    __privateSet20(this, _slot4, this.shadowRoot.querySelector(\"slot\"));\n    __privateGet23(this, _slot4).innerHTML = `${formatTimesLabel(this)}`;\n  }\n  static get observedAttributes() {\n    return [...super.observedAttributes, ...CombinedAttributes, \"disabled\"];\n  }\n  connectedCallback() {\n    const { style } = getOrInsertCSSRule(\n      this.shadowRoot,\n      \":host(:hover:not([notoggle]))\"\n    );\n    style.setProperty(\"cursor\", \"pointer\");\n    style.setProperty(\n      \"background\",\n      \"var(--media-control-hover-background, rgba(50 50 70 / .7))\"\n    );\n    if (!this.hasAttribute(\"disabled\")) {\n      this.enable();\n    }\n    this.setAttribute(\"role\", \"progressbar\");\n    this.setAttribute(\"aria-label\", nouns.PLAYBACK_TIME());\n    const keyUpHandler = (evt) => {\n      const { key } = evt;\n      if (!ButtonPressedKeys2.includes(key)) {\n        this.removeEventListener(\"keyup\", keyUpHandler);\n        return;\n      }\n      this.toggleTimeDisplay();\n    };\n    this.addEventListener(\"keydown\", (evt) => {\n      const { metaKey, altKey, key } = evt;\n      if (metaKey || altKey || !ButtonPressedKeys2.includes(key)) {\n        this.removeEventListener(\"keyup\", keyUpHandler);\n        return;\n      }\n      this.addEventListener(\"keyup\", keyUpHandler);\n    });\n    this.addEventListener(\"click\", this.toggleTimeDisplay);\n    super.connectedCallback();\n  }\n  toggleTimeDisplay() {\n    if (this.noToggle) {\n      return;\n    }\n    if (this.hasAttribute(\"remaining\")) {\n      this.removeAttribute(\"remaining\");\n    } else {\n      this.setAttribute(\"remaining\", \"\");\n    }\n  }\n  disconnectedCallback() {\n    this.disable();\n    super.disconnectedCallback();\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (CombinedAttributes.includes(attrName)) {\n      this.update();\n    } else if (attrName === \"disabled\" && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    }\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n  }\n  enable() {\n    this.tabIndex = 0;\n  }\n  disable() {\n    this.tabIndex = -1;\n  }\n  // Own props\n  /**\n   * Whether to show the remaining time\n   * @type {boolean}\n   */\n  get remaining() {\n    return getBooleanAttr(this, Attributes13.REMAINING);\n  }\n  set remaining(show) {\n    setBooleanAttr(this, Attributes13.REMAINING, show);\n  }\n  /**\n   * Whether to show the duration\n   * @type {boolean}\n   */\n  get showDuration() {\n    return getBooleanAttr(this, Attributes13.SHOW_DURATION);\n  }\n  set showDuration(show) {\n    setBooleanAttr(this, Attributes13.SHOW_DURATION, show);\n  }\n  /**\n   * Disable the default behavior that toggles between current and remaining time\n   * @type {boolean}\n   */\n  get noToggle() {\n    return getBooleanAttr(this, Attributes13.NO_TOGGLE);\n  }\n  set noToggle(notoggle) {\n    setBooleanAttr(this, Attributes13.NO_TOGGLE, notoggle);\n  }\n  // Props derived from media UI attributes\n  /**\n   * Get the duration\n   * @type {number | undefined} In seconds\n   */\n  get mediaDuration() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n  }\n  set mediaDuration(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, time);\n  }\n  /**\n   * The current time\n   * @type {number | undefined} In seconds\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME);\n  }\n  set mediaCurrentTime(time) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, time);\n  }\n  /**\n   * Range of values that can be seeked to\n   * @type {[number, number] | undefined} An array of two numbers [start, end]\n   */\n  get mediaSeekable() {\n    const seekable = this.getAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n    if (!seekable)\n      return void 0;\n    return seekable.split(\":\").map((time) => +time);\n  }\n  set mediaSeekable(range) {\n    if (range == null) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n      return;\n    }\n    this.setAttribute(MediaUIAttributes.MEDIA_SEEKABLE, range.join(\":\"));\n  }\n  update() {\n    const timesLabel = formatTimesLabel(this);\n    updateAriaValueText(this);\n    if (timesLabel !== __privateGet23(this, _slot4).innerHTML) {\n      __privateGet23(this, _slot4).innerHTML = timesLabel;\n    }\n  }\n};\n_slot4 = /* @__PURE__ */ new WeakMap();\nif (!GlobalThis.customElements.get(\"media-time-display\")) {\n  GlobalThis.customElements.define(\"media-time-display\", MediaTimeDisplay);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/range-animation.js\nvar __accessCheck24 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet24 = (obj, member, getter) => {\n  __accessCheck24(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd24 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet21 = (obj, member, value, setter) => {\n  __accessCheck24(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateWrapper = (obj, member, setter, getter) => ({\n  set _(value) {\n    __privateSet21(obj, member, value, setter);\n  },\n  get _() {\n    return __privateGet24(obj, member, getter);\n  }\n});\nvar _range;\nvar _startTime;\nvar _previousTime;\nvar _deltaTime;\nvar _frameCount;\nvar _updateTimestamp;\nvar _updateStartValue;\nvar _lastRangeIncrease;\nvar _id;\nvar _animate;\nvar RangeAnimation = class {\n  constructor(range, callback, fps) {\n    __privateAdd24(this, _range, void 0);\n    __privateAdd24(this, _startTime, void 0);\n    __privateAdd24(this, _previousTime, void 0);\n    __privateAdd24(this, _deltaTime, void 0);\n    __privateAdd24(this, _frameCount, void 0);\n    __privateAdd24(this, _updateTimestamp, void 0);\n    __privateAdd24(this, _updateStartValue, void 0);\n    __privateAdd24(this, _lastRangeIncrease, void 0);\n    __privateAdd24(this, _id, 0);\n    __privateAdd24(this, _animate, (now2 = performance.now()) => {\n      __privateSet21(this, _id, requestAnimationFrame(__privateGet24(this, _animate)));\n      __privateSet21(this, _deltaTime, performance.now() - __privateGet24(this, _previousTime));\n      const fpsInterval = 1e3 / this.fps;\n      if (__privateGet24(this, _deltaTime) > fpsInterval) {\n        __privateSet21(this, _previousTime, now2 - __privateGet24(this, _deltaTime) % fpsInterval);\n        const fps2 = 1e3 / ((now2 - __privateGet24(this, _startTime)) / ++__privateWrapper(this, _frameCount)._);\n        const delta = (now2 - __privateGet24(this, _updateTimestamp)) / 1e3 / this.duration;\n        let value = __privateGet24(this, _updateStartValue) + delta * this.playbackRate;\n        const increase = value - __privateGet24(this, _range).valueAsNumber;\n        if (increase > 0) {\n          __privateSet21(this, _lastRangeIncrease, this.playbackRate / this.duration / fps2);\n        } else {\n          __privateSet21(this, _lastRangeIncrease, 0.995 * __privateGet24(this, _lastRangeIncrease));\n          value = __privateGet24(this, _range).valueAsNumber + __privateGet24(this, _lastRangeIncrease);\n        }\n        this.callback(value);\n      }\n    });\n    __privateSet21(this, _range, range);\n    this.callback = callback;\n    this.fps = fps;\n  }\n  start() {\n    if (__privateGet24(this, _id) !== 0)\n      return;\n    __privateSet21(this, _previousTime, performance.now());\n    __privateSet21(this, _startTime, __privateGet24(this, _previousTime));\n    __privateSet21(this, _frameCount, 0);\n    __privateGet24(this, _animate).call(this);\n  }\n  stop() {\n    if (__privateGet24(this, _id) === 0)\n      return;\n    cancelAnimationFrame(__privateGet24(this, _id));\n    __privateSet21(this, _id, 0);\n  }\n  update({ start, duration, playbackRate }) {\n    const increase = start - __privateGet24(this, _range).valueAsNumber;\n    const durationDelta = Math.abs(duration - this.duration);\n    if (increase > 0 || increase < -0.03 || durationDelta >= 0.5) {\n      this.callback(start);\n    }\n    __privateSet21(this, _updateStartValue, start);\n    __privateSet21(this, _updateTimestamp, performance.now());\n    this.duration = duration;\n    this.playbackRate = playbackRate;\n  }\n};\n_range = /* @__PURE__ */ new WeakMap();\n_startTime = /* @__PURE__ */ new WeakMap();\n_previousTime = /* @__PURE__ */ new WeakMap();\n_deltaTime = /* @__PURE__ */ new WeakMap();\n_frameCount = /* @__PURE__ */ new WeakMap();\n_updateTimestamp = /* @__PURE__ */ new WeakMap();\n_updateStartValue = /* @__PURE__ */ new WeakMap();\n_lastRangeIncrease = /* @__PURE__ */ new WeakMap();\n_id = /* @__PURE__ */ new WeakMap();\n_animate = /* @__PURE__ */ new WeakMap();\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-time-range.js\nvar __accessCheck25 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet25 = (obj, member, getter) => {\n  __accessCheck25(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd25 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet22 = (obj, member, value, setter) => {\n  __accessCheck25(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod11 = (obj, member, method) => {\n  __accessCheck25(obj, member, \"access private method\");\n  return method;\n};\nvar _rootNode;\nvar _animation;\nvar _boxes;\nvar _previewTime;\nvar _previewBox;\nvar _currentBox;\nvar _boxPaddingLeft;\nvar _boxPaddingRight;\nvar _mediaChaptersCues;\nvar _toggleRangeAnimation;\nvar toggleRangeAnimation_fn;\nvar _shouldRangeAnimate;\nvar shouldRangeAnimate_fn;\nvar _updateRange;\nvar _getElementRects;\nvar getElementRects_fn;\nvar _getBoxPosition;\nvar getBoxPosition_fn;\nvar _getBoxShiftPosition;\nvar getBoxShiftPosition_fn;\nvar _handlePointerMove3;\nvar handlePointerMove_fn3;\nvar _previewRequest;\nvar previewRequest_fn;\nvar _seekRequest;\nvar seekRequest_fn;\nvar DEFAULT_MISSING_TIME_PHRASE2 = \"video not loaded, unknown time.\";\nvar updateAriaValueText2 = (el) => {\n  const range = el.range;\n  const currentTimePhrase = formatAsTimePhrase(+calcTimeFromRangeValue(el));\n  const totalTimePhrase = formatAsTimePhrase(+el.mediaSeekableEnd);\n  const fullPhrase = !(currentTimePhrase && totalTimePhrase) ? DEFAULT_MISSING_TIME_PHRASE2 : `${currentTimePhrase} of ${totalTimePhrase}`;\n  range.setAttribute(\"aria-valuetext\", fullPhrase);\n};\nvar template16 = Document2.createElement(\"template\");\ntemplate16.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      --media-box-border-radius: 4px;\n      --media-box-padding-left: 10px;\n      --media-box-padding-right: 10px;\n      --media-preview-border-radius: var(--media-box-border-radius);\n      --media-box-arrow-offset: var(--media-box-border-radius);\n      --_control-background: var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .7)));\n      --_preview-background: var(--media-preview-background, var(--_control-background));\n\n      ${/* 1% rail width trick was off in Safari, contain: layout seems to\nprevent the horizontal overflow as well. */\n\"\"}\n      contain: layout;\n    }\n\n    #highlight {\n      background: var(--media-time-range-buffered-color, rgb(255 255 255 / .4));\n    }\n\n    #preview-rail,\n    #current-rail {\n      width: 100%;\n      position: absolute;\n      left: 0;\n      bottom: 100%;\n      pointer-events: none;\n      will-change: transform;\n    }\n\n    [part~=\"box\"] {\n      width: min-content;\n      ${/* absolute position is needed here so the box doesn't overflow the bounds */\n\"\"}\n      position: absolute;\n      bottom: 100%;\n      flex-direction: column;\n      align-items: center;\n      transform: translateX(-50%);\n    }\n\n    [part~=\"current-box\"] {\n      display: var(--media-current-box-display, var(--media-box-display, flex));\n      margin: var(--media-current-box-margin, var(--media-box-margin, 0 0 5px));\n      visibility: hidden;\n    }\n\n    [part~=\"preview-box\"] {\n      display: var(--media-preview-box-display, var(--media-box-display, flex));\n      margin: var(--media-preview-box-margin, var(--media-box-margin, 0 0 5px));\n      transition-property: var(--media-preview-transition-property, visibility, opacity);\n      transition-duration: var(--media-preview-transition-duration-out, .25s);\n      transition-delay: var(--media-preview-transition-delay-out, 0s);\n      visibility: hidden;\n      opacity: 0;\n    }\n\n    :host(:is([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}], [${MediaUIAttributes.MEDIA_PREVIEW_TIME}])[dragging]) [part~=\"preview-box\"] {\n      transition-duration: var(--media-preview-transition-duration-in, .5s);\n      transition-delay: var(--media-preview-transition-delay-in, .25s);\n      visibility: visible;\n      opacity: 1;\n    }\n\n    @media (hover: hover) {\n      :host(:is([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}], [${MediaUIAttributes.MEDIA_PREVIEW_TIME}]):hover) [part~=\"preview-box\"] {\n        transition-duration: var(--media-preview-transition-duration-in, .5s);\n        transition-delay: var(--media-preview-transition-delay-in, .25s);\n        visibility: visible;\n        opacity: 1;\n      }\n    }\n\n    media-preview-thumbnail,\n    ::slotted(media-preview-thumbnail) {\n      visibility: hidden;\n      ${/* delay changing these CSS props until the preview box transition is ended */\n\"\"}\n      transition: visibility 0s .25s;\n      transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n      background: var(--media-preview-thumbnail-background, var(--_preview-background));\n      box-shadow: var(--media-preview-thumbnail-box-shadow, 0 0 4px rgb(0 0 0 / .2));\n      max-width: var(--media-preview-thumbnail-max-width, 180px);\n      max-height: var(--media-preview-thumbnail-max-height, 160px);\n      min-width: var(--media-preview-thumbnail-min-width, 120px);\n      min-height: var(--media-preview-thumbnail-min-height, 80px);\n      border: var(--media-preview-thumbnail-border);\n      border-radius: var(--media-preview-thumbnail-border-radius,\n        var(--media-preview-border-radius) var(--media-preview-border-radius) 0 0);\n    }\n\n    :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}][dragging]) media-preview-thumbnail,\n    :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}][dragging]) ::slotted(media-preview-thumbnail) {\n      transition-delay: var(--media-preview-transition-delay-in, .25s);\n      visibility: visible;\n    }\n\n    @media (hover: hover) {\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]:hover) media-preview-thumbnail,\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]:hover) ::slotted(media-preview-thumbnail) {\n        transition-delay: var(--media-preview-transition-delay-in, .25s);\n        visibility: visible;\n      }\n\n      :host([${MediaUIAttributes.MEDIA_PREVIEW_TIME}]:hover) {\n        --media-time-range-hover-display: block;\n      }\n    }\n\n    media-preview-chapter-display,\n    ::slotted(media-preview-chapter-display) {\n      font-size: var(--media-font-size, 13px);\n      line-height: 17px;\n      min-width: 0;\n      visibility: hidden;\n      ${/* delay changing these CSS props until the preview box transition is ended */\n\"\"}\n      transition: min-width 0s, border-radius 0s, margin 0s, padding 0s, visibility 0s;\n      transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n      background: var(--media-preview-chapter-background, var(--_preview-background));\n      border-radius: var(--media-preview-chapter-border-radius,\n        var(--media-preview-border-radius) var(--media-preview-border-radius)\n        var(--media-preview-border-radius) var(--media-preview-border-radius));\n      padding: var(--media-preview-chapter-padding, 3.5px 9px);\n      margin: var(--media-preview-chapter-margin, 0 0 5px);\n      text-shadow: var(--media-preview-chapter-text-shadow, 0 0 4px rgb(0 0 0 / .75));\n    }\n\n    :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) media-preview-chapter-display,\n    :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) ::slotted(media-preview-chapter-display) {\n      transition-delay: var(--media-preview-transition-delay-in, .25s);\n      border-radius: var(--media-preview-chapter-border-radius, 0);\n      padding: var(--media-preview-chapter-padding, 3.5px 9px 0);\n      margin: var(--media-preview-chapter-margin, 0);\n      min-width: 100%;\n    }\n\n    media-preview-chapter-display[${MediaUIAttributes.MEDIA_PREVIEW_CHAPTER}],\n    ::slotted(media-preview-chapter-display[${MediaUIAttributes.MEDIA_PREVIEW_CHAPTER}]) {\n      visibility: visible;\n    }\n\n    media-preview-chapter-display:not([aria-valuetext]),\n    ::slotted(media-preview-chapter-display:not([aria-valuetext])) {\n      display: none;\n    }\n\n    media-preview-time-display,\n    ::slotted(media-preview-time-display),\n    media-time-display,\n    ::slotted(media-time-display) {\n      font-size: var(--media-font-size, 13px);\n      line-height: 17px;\n      min-width: 0;\n      ${/* delay changing these CSS props until the preview box transition is ended */\n\"\"}\n      transition: min-width 0s, border-radius 0s;\n      transition-delay: calc(var(--media-preview-transition-delay-out, 0s) + var(--media-preview-transition-duration-out, .25s));\n      background: var(--media-preview-time-background, var(--_preview-background));\n      border-radius: var(--media-preview-time-border-radius,\n        var(--media-preview-border-radius) var(--media-preview-border-radius)\n        var(--media-preview-border-radius) var(--media-preview-border-radius));\n      padding: var(--media-preview-time-padding, 3.5px 9px);\n      margin: var(--media-preview-time-margin, 0);\n      text-shadow: var(--media-preview-time-text-shadow, 0 0 4px rgb(0 0 0 / .75));\n      transform: translateX(min(\n        max(calc(50% - var(--_box-width) / 2),\n        calc(var(--_box-shift, 0))),\n        calc(var(--_box-width) / 2 - 50%)\n      ));\n    }\n\n    :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) media-preview-time-display,\n    :host([${MediaUIAttributes.MEDIA_PREVIEW_IMAGE}]) ::slotted(media-preview-time-display) {\n      transition-delay: var(--media-preview-transition-delay-in, .25s);\n      border-radius: var(--media-preview-time-border-radius,\n        0 0 var(--media-preview-border-radius) var(--media-preview-border-radius));\n      min-width: 100%;\n    }\n\n    :host([${MediaUIAttributes.MEDIA_PREVIEW_TIME}]:hover) {\n      --media-time-range-hover-display: block;\n    }\n\n    [part~=\"arrow\"],\n    ::slotted([part~=\"arrow\"]) {\n      display: var(--media-box-arrow-display, inline-block);\n      transform: translateX(min(\n        max(calc(50% - var(--_box-width) / 2 + var(--media-box-arrow-offset)),\n        calc(var(--_box-shift, 0))),\n        calc(var(--_box-width) / 2 - 50% - var(--media-box-arrow-offset))\n      ));\n      ${/* border-color has to come before border-top-color! */\n\"\"}\n      border-color: transparent;\n      border-top-color: var(--media-box-arrow-background, var(--_control-background));\n      border-width: var(--media-box-arrow-border-width,\n        var(--media-box-arrow-height, 5px) var(--media-box-arrow-width, 6px) 0);\n      border-style: solid;\n      justify-content: center;\n      height: 0;\n    }\n  </style>\n  <div id=\"preview-rail\">\n    <slot name=\"preview\" part=\"box preview-box\">\n      <media-preview-thumbnail></media-preview-thumbnail>\n      <media-preview-chapter-display></media-preview-chapter-display>\n      <media-preview-time-display></media-preview-time-display>\n      <slot name=\"preview-arrow\"><div part=\"arrow\"></div></slot>\n    </slot>\n  </div>\n  <div id=\"current-rail\">\n    <slot name=\"current\" part=\"box current-box\">\n      ${/* Example: add the current time w/ arrow to the playhead\n<media-time-display slot=\"current\"></media-time-display>\n<div part=\"arrow\" slot=\"current\"></div> */\n\"\"}\n    </slot>\n  </div>\n`;\nvar calcRangeValueFromTime = (el, time = el.mediaCurrentTime) => {\n  const startTime = Number.isFinite(el.mediaSeekableStart) ? el.mediaSeekableStart : 0;\n  const endTime = Number.isFinite(el.mediaDuration) ? el.mediaDuration : el.mediaSeekableEnd;\n  if (Number.isNaN(endTime))\n    return 0;\n  const value = (time - startTime) / (endTime - startTime);\n  return Math.max(0, Math.min(value, 1));\n};\nvar calcTimeFromRangeValue = (el, value = el.range.valueAsNumber) => {\n  const startTime = Number.isFinite(el.mediaSeekableStart) ? el.mediaSeekableStart : 0;\n  const endTime = Number.isFinite(el.mediaDuration) ? el.mediaDuration : el.mediaSeekableEnd;\n  if (Number.isNaN(endTime))\n    return 0;\n  return value * (endTime - startTime) + startTime;\n};\nvar MediaTimeRange = class extends MediaChromeRange {\n  constructor() {\n    super();\n    __privateAdd25(this, _toggleRangeAnimation);\n    __privateAdd25(this, _shouldRangeAnimate);\n    __privateAdd25(this, _getElementRects);\n    __privateAdd25(this, _getBoxPosition);\n    __privateAdd25(this, _getBoxShiftPosition);\n    __privateAdd25(this, _handlePointerMove3);\n    __privateAdd25(this, _previewRequest);\n    __privateAdd25(this, _seekRequest);\n    __privateAdd25(this, _rootNode, void 0);\n    __privateAdd25(this, _animation, void 0);\n    __privateAdd25(this, _boxes, void 0);\n    __privateAdd25(this, _previewTime, void 0);\n    __privateAdd25(this, _previewBox, void 0);\n    __privateAdd25(this, _currentBox, void 0);\n    __privateAdd25(this, _boxPaddingLeft, void 0);\n    __privateAdd25(this, _boxPaddingRight, void 0);\n    __privateAdd25(this, _mediaChaptersCues, void 0);\n    __privateAdd25(this, _updateRange, (value) => {\n      if (this.dragging)\n        return;\n      this.range.valueAsNumber = value;\n      this.updateBar();\n    });\n    this.container.appendChild(template16.content.cloneNode(true));\n    __privateSet22(this, _boxes, this.shadowRoot.querySelectorAll('[part~=\"box\"]'));\n    __privateSet22(this, _previewBox, this.shadowRoot.querySelector('[part~=\"preview-box\"]'));\n    __privateSet22(this, _currentBox, this.shadowRoot.querySelector('[part~=\"current-box\"]'));\n    const computedStyle = getComputedStyle(this);\n    __privateSet22(this, _boxPaddingLeft, parseInt(\n      computedStyle.getPropertyValue(\"--media-box-padding-left\")\n    ));\n    __privateSet22(this, _boxPaddingRight, parseInt(\n      computedStyle.getPropertyValue(\"--media-box-padding-right\")\n    ));\n    __privateSet22(this, _animation, new RangeAnimation(this.range, __privateGet25(this, _updateRange), 60));\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_PAUSED,\n      MediaUIAttributes.MEDIA_DURATION,\n      MediaUIAttributes.MEDIA_SEEKABLE,\n      MediaUIAttributes.MEDIA_CURRENT_TIME,\n      MediaUIAttributes.MEDIA_PREVIEW_IMAGE,\n      MediaUIAttributes.MEDIA_PREVIEW_TIME,\n      MediaUIAttributes.MEDIA_PREVIEW_CHAPTER,\n      MediaUIAttributes.MEDIA_BUFFERED,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      MediaUIAttributes.MEDIA_LOADING,\n      MediaUIAttributes.MEDIA_ENDED\n    ];\n  }\n  connectedCallback() {\n    var _a3;\n    super.connectedCallback();\n    this.range.setAttribute(\"aria-label\", nouns.SEEK());\n    __privateMethod11(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n    __privateSet22(this, _rootNode, this.getRootNode());\n    (_a3 = __privateGet25(this, _rootNode)) == null ? void 0 : _a3.addEventListener(\"transitionstart\", this);\n  }\n  disconnectedCallback() {\n    var _a3;\n    super.disconnectedCallback();\n    __privateMethod11(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n    (_a3 = __privateGet25(this, _rootNode)) == null ? void 0 : _a3.removeEventListener(\"transitionstart\", this);\n    __privateSet22(this, _rootNode, null);\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (oldValue == newValue)\n      return;\n    if (attrName === MediaUIAttributes.MEDIA_CURRENT_TIME || attrName === MediaUIAttributes.MEDIA_PAUSED || attrName === MediaUIAttributes.MEDIA_ENDED || attrName === MediaUIAttributes.MEDIA_LOADING || attrName === MediaUIAttributes.MEDIA_DURATION || attrName === MediaUIAttributes.MEDIA_SEEKABLE) {\n      __privateGet25(this, _animation).update({\n        start: calcRangeValueFromTime(this),\n        duration: this.mediaSeekableEnd - this.mediaSeekableStart,\n        playbackRate: this.mediaPlaybackRate\n      });\n      __privateMethod11(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this);\n      updateAriaValueText2(this);\n    } else if (attrName === MediaUIAttributes.MEDIA_BUFFERED) {\n      this.updateBufferedBar();\n    }\n    if (attrName === MediaUIAttributes.MEDIA_DURATION || attrName === MediaUIAttributes.MEDIA_SEEKABLE) {\n      this.mediaChaptersCues = __privateGet25(this, _mediaChaptersCues);\n      this.updateBar();\n    }\n  }\n  get mediaChaptersCues() {\n    return __privateGet25(this, _mediaChaptersCues);\n  }\n  set mediaChaptersCues(value) {\n    var _a3;\n    __privateSet22(this, _mediaChaptersCues, value);\n    this.updateSegments(\n      (_a3 = __privateGet25(this, _mediaChaptersCues)) == null ? void 0 : _a3.map((c4) => ({\n        start: calcRangeValueFromTime(this, c4.startTime),\n        end: calcRangeValueFromTime(this, c4.endTime)\n      }))\n    );\n  }\n  /**\n   * @type {boolean} Is the media paused\n   */\n  get mediaPaused() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED);\n  }\n  set mediaPaused(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_PAUSED, value);\n  }\n  /**\n   * @type {boolean} Is the media loading\n   */\n  get mediaLoading() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING);\n  }\n  set mediaLoading(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_LOADING, value);\n  }\n  /**\n   * @type {number | undefined}\n   */\n  get mediaDuration() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_DURATION);\n  }\n  set mediaDuration(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_DURATION, value);\n  }\n  /**\n   * @type {number | undefined}\n   */\n  get mediaCurrentTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME);\n  }\n  set mediaCurrentTime(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_CURRENT_TIME, value);\n  }\n  /**\n   * @type {number}\n   */\n  get mediaPlaybackRate() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, 1);\n  }\n  set mediaPlaybackRate(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n  }\n  /**\n   * @type {Array<Array<number>>} An array of ranges, each range being an array of two numbers.\n   * e.g. [[1, 2], [3, 4]]\n   */\n  get mediaBuffered() {\n    const buffered = this.getAttribute(MediaUIAttributes.MEDIA_BUFFERED);\n    if (!buffered)\n      return [];\n    return buffered.split(\" \").map((timePair) => timePair.split(\":\").map((timeStr) => +timeStr));\n  }\n  set mediaBuffered(list) {\n    if (!list) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_BUFFERED);\n      return;\n    }\n    const strVal = list.map((tuple) => tuple.join(\":\")).join(\" \");\n    this.setAttribute(MediaUIAttributes.MEDIA_BUFFERED, strVal);\n  }\n  /**\n   * Range of values that can be seeked to\n   * @type {Array<number> | undefined} An array of two numbers [start, end]\n   */\n  get mediaSeekable() {\n    const seekable = this.getAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n    if (!seekable)\n      return void 0;\n    return seekable.split(\":\").map((time) => +time);\n  }\n  set mediaSeekable(range) {\n    if (range == null) {\n      this.removeAttribute(MediaUIAttributes.MEDIA_SEEKABLE);\n      return;\n    }\n    this.setAttribute(MediaUIAttributes.MEDIA_SEEKABLE, range.join(\":\"));\n  }\n  /**\n   * @type {number | undefined}\n   */\n  get mediaSeekableEnd() {\n    var _a3;\n    const [, end = this.mediaDuration] = (_a3 = this.mediaSeekable) != null ? _a3 : [];\n    return end;\n  }\n  get mediaSeekableStart() {\n    var _a3;\n    const [start = 0] = (_a3 = this.mediaSeekable) != null ? _a3 : [];\n    return start;\n  }\n  /**\n   * @type {string | undefined} The url of the preview image\n   */\n  get mediaPreviewImage() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE);\n  }\n  set mediaPreviewImage(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_PREVIEW_IMAGE, value);\n  }\n  /**\n   * @type {number | undefined}\n   */\n  get mediaPreviewTime() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME);\n  }\n  set mediaPreviewTime(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PREVIEW_TIME, value);\n  }\n  /**\n   * @type {boolean | undefined}\n   */\n  get mediaEnded() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_ENDED);\n  }\n  set mediaEnded(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_ENDED, value);\n  }\n  /* Add a buffered progress bar */\n  updateBar() {\n    super.updateBar();\n    this.updateBufferedBar();\n    this.updateCurrentBox();\n  }\n  updateBufferedBar() {\n    var _a3;\n    const buffered = this.mediaBuffered;\n    if (!buffered.length) {\n      return;\n    }\n    let relativeBufferedEnd;\n    if (!this.mediaEnded) {\n      const currentTime = this.mediaCurrentTime;\n      const [, bufferedEnd = this.mediaSeekableStart] = (_a3 = buffered.find(\n        ([start, end]) => start <= currentTime && currentTime <= end\n      )) != null ? _a3 : [];\n      relativeBufferedEnd = calcRangeValueFromTime(this, bufferedEnd);\n    } else {\n      relativeBufferedEnd = 1;\n    }\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \"#highlight\");\n    style.setProperty(\"width\", `${relativeBufferedEnd * 100}%`);\n  }\n  updateCurrentBox() {\n    const currentSlot = this.shadowRoot.querySelector('slot[name=\"current\"]');\n    if (!currentSlot.assignedElements().length)\n      return;\n    const currentRailRule = getOrInsertCSSRule(\n      this.shadowRoot,\n      \"#current-rail\"\n    );\n    const currentBoxRule = getOrInsertCSSRule(\n      this.shadowRoot,\n      '[part~=\"current-box\"]'\n    );\n    const rects = __privateMethod11(this, _getElementRects, getElementRects_fn).call(this, __privateGet25(this, _currentBox));\n    const boxPos = __privateMethod11(this, _getBoxPosition, getBoxPosition_fn).call(this, rects, this.range.valueAsNumber);\n    const boxShift = __privateMethod11(this, _getBoxShiftPosition, getBoxShiftPosition_fn).call(this, rects, this.range.valueAsNumber);\n    currentRailRule.style.transform = `translateX(${boxPos})`;\n    currentRailRule.style.setProperty(\"--_range-width\", `${rects.range.width}`);\n    currentBoxRule.style.setProperty(\"--_box-shift\", `${boxShift}`);\n    currentBoxRule.style.setProperty(\"--_box-width\", `${rects.box.width}px`);\n    currentBoxRule.style.setProperty(\"visibility\", \"initial\");\n  }\n  handleEvent(evt) {\n    super.handleEvent(evt);\n    switch (evt.type) {\n      case \"input\":\n        __privateMethod11(this, _seekRequest, seekRequest_fn).call(this);\n        break;\n      case \"pointermove\":\n        __privateMethod11(this, _handlePointerMove3, handlePointerMove_fn3).call(this, evt);\n        break;\n      case \"pointerup\":\n      case \"pointerleave\":\n        __privateMethod11(this, _previewRequest, previewRequest_fn).call(this, null);\n        break;\n      case \"transitionstart\":\n        if (containsComposedNode(evt.target, this)) {\n          setTimeout(() => __privateMethod11(this, _toggleRangeAnimation, toggleRangeAnimation_fn).call(this), 0);\n        }\n        break;\n    }\n  }\n};\n_rootNode = /* @__PURE__ */ new WeakMap();\n_animation = /* @__PURE__ */ new WeakMap();\n_boxes = /* @__PURE__ */ new WeakMap();\n_previewTime = /* @__PURE__ */ new WeakMap();\n_previewBox = /* @__PURE__ */ new WeakMap();\n_currentBox = /* @__PURE__ */ new WeakMap();\n_boxPaddingLeft = /* @__PURE__ */ new WeakMap();\n_boxPaddingRight = /* @__PURE__ */ new WeakMap();\n_mediaChaptersCues = /* @__PURE__ */ new WeakMap();\n_toggleRangeAnimation = /* @__PURE__ */ new WeakSet();\ntoggleRangeAnimation_fn = function() {\n  if (__privateMethod11(this, _shouldRangeAnimate, shouldRangeAnimate_fn).call(this)) {\n    __privateGet25(this, _animation).start();\n  } else {\n    __privateGet25(this, _animation).stop();\n  }\n};\n_shouldRangeAnimate = /* @__PURE__ */ new WeakSet();\nshouldRangeAnimate_fn = function() {\n  return this.isConnected && !this.mediaPaused && !this.mediaLoading && !this.mediaEnded && this.mediaSeekableEnd > 0 && isElementVisible(this);\n};\n_updateRange = /* @__PURE__ */ new WeakMap();\n_getElementRects = /* @__PURE__ */ new WeakSet();\ngetElementRects_fn = function(box) {\n  var _a3;\n  const bounds = (_a3 = this.getAttribute(\"bounds\") ? closestComposedNode(this, `#${this.getAttribute(\"bounds\")}`) : this.parentElement) != null ? _a3 : this;\n  const boundsRect = bounds.getBoundingClientRect();\n  const rangeRect = this.range.getBoundingClientRect();\n  const width = box.offsetWidth;\n  const min = -(rangeRect.left - boundsRect.left - width / 2);\n  const max = boundsRect.right - rangeRect.left - width / 2;\n  return {\n    box: { width, min, max },\n    bounds: boundsRect,\n    range: rangeRect\n  };\n};\n_getBoxPosition = /* @__PURE__ */ new WeakSet();\ngetBoxPosition_fn = function(rects, ratio) {\n  let position = `${ratio * 100}%`;\n  const { width, min, max } = rects.box;\n  if (!width)\n    return position;\n  if (!Number.isNaN(min)) {\n    const pad = `var(--media-box-padding-left)`;\n    const minPos = `calc(1 / var(--_range-width) * 100 * ${min}% + ${pad})`;\n    position = `max(${minPos}, ${position})`;\n  }\n  if (!Number.isNaN(max)) {\n    const pad = `var(--media-box-padding-right)`;\n    const maxPos = `calc(1 / var(--_range-width) * 100 * ${max}% - ${pad})`;\n    position = `min(${position}, ${maxPos})`;\n  }\n  return position;\n};\n_getBoxShiftPosition = /* @__PURE__ */ new WeakSet();\ngetBoxShiftPosition_fn = function(rects, ratio) {\n  const { width, min, max } = rects.box;\n  const pointerX = ratio * rects.range.width;\n  if (pointerX < min + __privateGet25(this, _boxPaddingLeft)) {\n    const offset = rects.range.left - rects.bounds.left - __privateGet25(this, _boxPaddingLeft);\n    return `${pointerX - width / 2 + offset}px`;\n  }\n  if (pointerX > max - __privateGet25(this, _boxPaddingRight)) {\n    const offset = rects.bounds.right - rects.range.right - __privateGet25(this, _boxPaddingRight);\n    return `${pointerX + width / 2 - offset - rects.range.width}px`;\n  }\n  return 0;\n};\n_handlePointerMove3 = /* @__PURE__ */ new WeakSet();\nhandlePointerMove_fn3 = function(evt) {\n  const isOverBoxes = [...__privateGet25(this, _boxes)].some(\n    (b4) => evt.composedPath().includes(b4)\n  );\n  if (!this.dragging && (isOverBoxes || !evt.composedPath().includes(this))) {\n    __privateMethod11(this, _previewRequest, previewRequest_fn).call(this, null);\n    return;\n  }\n  const duration = this.mediaSeekableEnd;\n  if (!duration)\n    return;\n  const previewRailRule = getOrInsertCSSRule(\n    this.shadowRoot,\n    \"#preview-rail\"\n  );\n  const previewBoxRule = getOrInsertCSSRule(\n    this.shadowRoot,\n    '[part~=\"preview-box\"]'\n  );\n  const rects = __privateMethod11(this, _getElementRects, getElementRects_fn).call(this, __privateGet25(this, _previewBox));\n  let pointerRatio = (evt.clientX - rects.range.left) / rects.range.width;\n  pointerRatio = Math.max(0, Math.min(1, pointerRatio));\n  const boxPos = __privateMethod11(this, _getBoxPosition, getBoxPosition_fn).call(this, rects, pointerRatio);\n  const boxShift = __privateMethod11(this, _getBoxShiftPosition, getBoxShiftPosition_fn).call(this, rects, pointerRatio);\n  previewRailRule.style.transform = `translateX(${boxPos})`;\n  previewRailRule.style.setProperty(\"--_range-width\", `${rects.range.width}`);\n  previewBoxRule.style.setProperty(\"--_box-shift\", `${boxShift}`);\n  previewBoxRule.style.setProperty(\"--_box-width\", `${rects.box.width}px`);\n  const diff = Math.round(__privateGet25(this, _previewTime)) - Math.round(pointerRatio * duration);\n  if (Math.abs(diff) < 1 && pointerRatio > 0.01 && pointerRatio < 0.99)\n    return;\n  __privateSet22(this, _previewTime, pointerRatio * duration);\n  __privateMethod11(this, _previewRequest, previewRequest_fn).call(this, __privateGet25(this, _previewTime));\n};\n_previewRequest = /* @__PURE__ */ new WeakSet();\npreviewRequest_fn = function(detail) {\n  this.dispatchEvent(\n    new GlobalThis.CustomEvent(MediaUIEvents.MEDIA_PREVIEW_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    })\n  );\n};\n_seekRequest = /* @__PURE__ */ new WeakSet();\nseekRequest_fn = function() {\n  __privateGet25(this, _animation).stop();\n  const detail = calcTimeFromRangeValue(this);\n  this.dispatchEvent(\n    new GlobalThis.CustomEvent(MediaUIEvents.MEDIA_SEEK_REQUEST, {\n      composed: true,\n      bubbles: true,\n      detail\n    })\n  );\n};\nif (!GlobalThis.customElements.get(\"media-time-range\")) {\n  GlobalThis.customElements.define(\"media-time-range\", MediaTimeRange);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-volume-range.js\nvar DEFAULT_VOLUME = 1;\nvar toVolume = (el) => {\n  if (el.mediaMuted)\n    return 0;\n  return el.mediaVolume;\n};\nvar formatAsPercentString = ({ value }) => `${Math.round(value * 100)}%`;\nvar MediaVolumeRange = class extends MediaChromeRange {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_VOLUME,\n      MediaUIAttributes.MEDIA_MUTED,\n      MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE\n    ];\n  }\n  constructor() {\n    super();\n    this.range.addEventListener(\"input\", () => {\n      const detail = this.range.value;\n      const evt = new GlobalThis.CustomEvent(\n        MediaUIEvents.MEDIA_VOLUME_REQUEST,\n        {\n          composed: true,\n          bubbles: true,\n          detail\n        }\n      );\n      this.dispatchEvent(evt);\n    });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.range.setAttribute(\"aria-label\", nouns.VOLUME());\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_VOLUME || attrName === MediaUIAttributes.MEDIA_MUTED) {\n      this.range.valueAsNumber = toVolume(this);\n      this.range.setAttribute(\n        \"aria-valuetext\",\n        formatAsPercentString(this.range)\n      );\n      this.updateBar();\n    }\n  }\n  /**\n   * @type {number}\n   */\n  get mediaVolume() {\n    return getNumericAttr(this, MediaUIAttributes.MEDIA_VOLUME, DEFAULT_VOLUME);\n  }\n  set mediaVolume(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_VOLUME, value);\n  }\n  /**\n   * @type {boolean} Is the media currently muted\n   */\n  get mediaMuted() {\n    return getBooleanAttr(this, MediaUIAttributes.MEDIA_MUTED);\n  }\n  set mediaMuted(value) {\n    setBooleanAttr(this, MediaUIAttributes.MEDIA_MUTED, value);\n  }\n  /**\n   * @type {string | undefined} The volume unavailability state\n   */\n  get mediaVolumeUnavailable() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE);\n  }\n  set mediaVolumeUnavailable(value) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_VOLUME_UNAVAILABLE, value);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-volume-range\")) {\n  GlobalThis.customElements.define(\"media-volume-range\", MediaVolumeRange);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-chrome-listbox.js\nvar __accessCheck26 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet26 = (obj, member, getter) => {\n  __accessCheck26(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd26 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet23 = (obj, member, value, setter) => {\n  __accessCheck26(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod12 = (obj, member, method) => {\n  __accessCheck26(obj, member, \"access private method\");\n  return method;\n};\nvar _mediaController9;\nvar _keysSoFar2;\nvar _clearKeysTimeout2;\nvar _metaPressed;\nvar _clickListener2;\nvar _handleKeyListener;\nvar handleKeyListener_fn;\nvar _keyupListener2;\nvar _keydownListener2;\nvar _updateLayoutStyle2;\nvar updateLayoutStyle_fn2;\nvar _getOption;\nvar getOption_fn;\nvar _selectOption;\nvar selectOption_fn;\nvar _searchOption;\nvar searchOption_fn;\nvar _clearKeysOnDelay;\nvar clearKeysOnDelay_fn;\nvar checkIcon = (\n  /*html*/\n  `\n<svg aria-hidden=\"true\" viewBox=\"0 1 24 24\" part=\"select-indicator indicator\">\n  <path d=\"m10 15.17 9.193-9.191 1.414 1.414-10.606 10.606-6.364-6.364 1.414-1.414 4.95 4.95Z\"/>\n</svg>`\n);\nfunction createOption(text, value, selected) {\n  const option = Document2.createElement(\"media-chrome-option\");\n  option.part.add(\"option\");\n  option.value = value;\n  option.selected = selected;\n  const label = Document2.createElement(\"span\");\n  label.textContent = text;\n  option.append(label);\n  return option;\n}\nfunction createIndicator2(el, name) {\n  let customIndicator = el.querySelector(`:scope > [slot=\"${name}\"]`);\n  if ((customIndicator == null ? void 0 : customIndicator.nodeName) == \"SLOT\")\n    customIndicator = customIndicator.assignedElements({ flatten: true })[0];\n  if (customIndicator) {\n    customIndicator = customIndicator.cloneNode(true);\n    customIndicator.removeAttribute(\"slot\");\n    return customIndicator;\n  }\n  let fallbackIndicator = el.shadowRoot.querySelector(`[name=\"${name}\"] > svg`);\n  return fallbackIndicator.cloneNode(true);\n}\nvar template17 = Document2.createElement(\"template\");\ntemplate17.innerHTML = /*html*/\n`\n<style>\n  :host {\n    font: var(--media-font,\n      var(--media-font-weight, normal)\n      var(--media-font-size, 15px) /\n      var(--media-text-content-height, var(--media-control-height, 24px))\n      var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n    color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n    background: var(--media-listbox-background, var(--media-control-background, var(--media-secondary-color, rgb(20 20 30 / .8))));\n    border-radius: var(--media-listbox-border-radius);\n    display: inline-flex;\n    flex-direction: column;\n    position: relative;\n    box-sizing: border-box;\n  }\n\n  ::slotted([slot=\"header\"]) {\n    padding: .4em 1.4em;\n    border-bottom: 1px solid rgb(255 255 255 / .25);\n  }\n\n  #container {\n    gap: var(--media-listbox-gap);\n    display: flex;\n    flex-direction: var(--media-listbox-flex-direction, column);\n    overflow: hidden auto;\n    padding-block: .5em;\n  }\n\n  media-chrome-option {\n    padding-inline: .7em 1.4em;\n  }\n\n  media-chrome-option > span {\n    margin-inline: .5ch;\n  }\n\n  [part~=\"indicator\"] {\n    fill: var(--media-option-indicator-fill, var(--media-icon-color, var(--media-primary-color, rgb(238 238 238))));\n    height: var(--media-option-indicator-height, 1.25em);\n    vertical-align: var(--media-option-indicator-vertical-align, text-top);\n  }\n\n  [part~=\"select-indicator\"] {\n    display: var(--media-option-select-indicator-display);\n    visibility: hidden;\n  }\n\n  [aria-selected=\"true\"] > [part~=\"select-indicator\"] {\n    visibility: visible;\n  }\n</style>\n<style id=\"layout-row\" media=\"width:0\">\n\n  ::slotted([slot=\"header\"]) {\n    padding: .4em .5em;\n  }\n\n  #container {\n    gap: var(--media-listbox-gap, .25em);\n    flex-direction: var(--media-listbox-flex-direction, row);\n    padding-inline: .5em;\n  }\n\n  media-chrome-option {\n    padding: .3em .24em;\n  }\n\n  media-chrome-option[aria-selected=\"true\"] {\n    background: var(--media-option-selected-background, rgb(255 255 255 / .2));\n  }\n\n  [part~=\"select-indicator\"] {\n    display: var(--media-option-select-indicator-display, none);\n  }\n</style>\n<slot name=\"header\"></slot>\n<slot id=\"container\"></slot>\n<slot name=\"select-indicator\" hidden>${checkIcon}</slot>\n`;\nvar MediaChromeListbox = class extends GlobalThis.HTMLElement {\n  constructor(options = {}) {\n    super();\n    __privateAdd26(this, _handleKeyListener);\n    __privateAdd26(this, _updateLayoutStyle2);\n    __privateAdd26(this, _getOption);\n    __privateAdd26(this, _selectOption);\n    __privateAdd26(this, _searchOption);\n    __privateAdd26(this, _clearKeysOnDelay);\n    __privateAdd26(this, _mediaController9, void 0);\n    __privateAdd26(this, _keysSoFar2, \"\");\n    __privateAdd26(this, _clearKeysTimeout2, null);\n    __privateAdd26(this, _metaPressed, false);\n    __privateAdd26(this, _clickListener2, (e) => {\n      this.handleClick(e);\n    });\n    __privateAdd26(this, _keyupListener2, (e) => {\n      const { key } = e;\n      if (key === \"Escape\") {\n        this.removeEventListener(\"keyup\", __privateGet26(this, _keyupListener2));\n        return;\n      }\n      if (key === \"Meta\") {\n        __privateSet23(this, _metaPressed, false);\n        return;\n      }\n      __privateMethod12(this, _handleKeyListener, handleKeyListener_fn).call(this, e);\n    });\n    __privateAdd26(this, _keydownListener2, (e) => {\n      const { key, altKey } = e;\n      if (altKey) {\n        this.removeEventListener(\"keyup\", __privateGet26(this, _keyupListener2));\n        return;\n      }\n      if (key === \"Meta\") {\n        __privateSet23(this, _metaPressed, true);\n        return;\n      }\n      if (this.keysUsed.includes(key)) {\n        e.preventDefault();\n      }\n      if (__privateGet26(this, _metaPressed) && this.keysUsed.includes(key)) {\n        __privateMethod12(this, _handleKeyListener, handleKeyListener_fn).call(this, e);\n        return;\n      }\n      this.addEventListener(\"keyup\", __privateGet26(this, _keyupListener2), { once: true });\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.nativeEl = template17.content.cloneNode(true);\n      if (options.slotTemplate) {\n        this.nativeEl.append(options.slotTemplate.content.cloneNode(true));\n      }\n      this.shadowRoot.append(this.nativeEl);\n    }\n    this.container = this.shadowRoot.querySelector(\"#container\");\n    this.container.addEventListener(\"slotchange\", (event) => {\n      for (let node of event.target.assignedNodes({ flatten: true })) {\n        if (node.nodeType === 3 && node.textContent.trim() === \"\") {\n          node.remove();\n        }\n      }\n    });\n  }\n  static get observedAttributes() {\n    return [\"disabled\", \"style\", MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n  }\n  static formatOptionText(text) {\n    return text;\n  }\n  formatOptionText(text, data) {\n    return this.constructor.formatOptionText(text, data);\n  }\n  get options() {\n    var _a3;\n    let options = this.querySelectorAll(\"media-chrome-option\");\n    if (!options.length) {\n      options = (_a3 = this.container) == null ? void 0 : _a3.querySelectorAll(\"media-chrome-option\");\n    }\n    return Array.from(options);\n  }\n  get selectedOptions() {\n    return this.options.filter((option) => option.selected);\n  }\n  get value() {\n    var _a3, _b;\n    return (_b = (_a3 = this.selectedOptions[0]) == null ? void 0 : _a3.value) != null ? _b : \"\";\n  }\n  set value(newValue) {\n    const option = this.options.find((option2) => option2.value === newValue);\n    if (!option)\n      return;\n    __privateMethod12(this, _selectOption, selectOption_fn).call(this, option);\n  }\n  focus() {\n    var _a3;\n    (_a3 = this.selectedOptions[0]) == null ? void 0 : _a3.focus();\n  }\n  enable() {\n    this.addEventListener(\"click\", __privateGet26(this, _clickListener2));\n    this.addEventListener(\"keydown\", __privateGet26(this, _keydownListener2));\n  }\n  disable() {\n    this.removeEventListener(\"click\", __privateGet26(this, _clickListener2));\n    this.removeEventListener(\"keyup\", __privateGet26(this, _keyupListener2));\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === \"style\" && newValue !== oldValue) {\n      __privateMethod12(this, _updateLayoutStyle2, updateLayoutStyle_fn2).call(this);\n    } else if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet26(this, _mediaController9)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet23(this, _mediaController9, null);\n      }\n      if (newValue && this.isConnected) {\n        __privateSet23(this, _mediaController9, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet26(this, _mediaController9)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n      }\n    } else if (attrName === \"disabled\" && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    __privateMethod12(this, _updateLayoutStyle2, updateLayoutStyle_fn2).call(this);\n    if (!this.hasAttribute(\"disabled\")) {\n      this.enable();\n    }\n    if (!this.hasAttribute(\"role\")) {\n      this.setAttribute(\"role\", \"listbox\");\n    }\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet23(\n        this,\n        _mediaController9,\n        // @ts-ignore\n        (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId)\n      );\n      (_c = (_b = __privateGet26(this, _mediaController9)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    this.disable();\n    (_b = (_a3 = __privateGet26(this, _mediaController9)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet23(this, _mediaController9, null);\n  }\n  get keysUsed() {\n    return [\"Enter\", \" \", \"ArrowDown\", \"ArrowUp\", \"Home\", \"End\"];\n  }\n  handleSelection(e, toggle) {\n    const option = __privateMethod12(this, _getOption, getOption_fn).call(this, e);\n    if (!option)\n      return;\n    __privateMethod12(this, _selectOption, selectOption_fn).call(this, option, toggle);\n  }\n  handleMovement(e) {\n    const { key } = e;\n    const els = this.options;\n    let currentOption = __privateMethod12(this, _getOption, getOption_fn).call(this, e);\n    if (!currentOption) {\n      currentOption = els.filter(\n        (el) => el.getAttribute(\"tabindex\") === \"0\"\n      )[0];\n    }\n    let nextOption;\n    switch (key) {\n      case \"ArrowDown\":\n        nextOption = currentOption.nextElementSibling;\n        if (nextOption == null ? void 0 : nextOption.hasAttribute(\"disabled\")) {\n          nextOption = nextOption.nextElementSibling;\n        }\n        break;\n      case \"ArrowUp\":\n        nextOption = currentOption.previousElementSibling;\n        if (nextOption == null ? void 0 : nextOption.hasAttribute(\"disabled\")) {\n          nextOption = nextOption.previousElementSibling;\n        }\n        break;\n      case \"Home\":\n        nextOption = els[0];\n        break;\n      case \"End\":\n        nextOption = els[els.length - 1];\n        break;\n      default:\n        nextOption = __privateMethod12(this, _searchOption, searchOption_fn).call(this, key);\n        break;\n    }\n    if (nextOption) {\n      els.forEach((el) => el.setAttribute(\"tabindex\", \"-1\"));\n      nextOption.setAttribute(\"tabindex\", \"0\");\n      nextOption.focus();\n    }\n  }\n  handleClick(e) {\n    const option = __privateMethod12(this, _getOption, getOption_fn).call(this, e);\n    if (!option || option.hasAttribute(\"disabled\"))\n      return;\n    this.options.forEach((el) => el.setAttribute(\"tabindex\", \"-1\"));\n    option.setAttribute(\"tabindex\", \"0\");\n    this.handleSelection(\n      e,\n      this.hasAttribute(\"aria-multiselectable\") && this.getAttribute(\"aria-multiselectable\") === \"true\"\n    );\n  }\n};\n_mediaController9 = /* @__PURE__ */ new WeakMap();\n_keysSoFar2 = /* @__PURE__ */ new WeakMap();\n_clearKeysTimeout2 = /* @__PURE__ */ new WeakMap();\n_metaPressed = /* @__PURE__ */ new WeakMap();\n_clickListener2 = /* @__PURE__ */ new WeakMap();\n_handleKeyListener = /* @__PURE__ */ new WeakSet();\nhandleKeyListener_fn = function(e) {\n  const { key } = e;\n  if (key === \"Enter\" || key === \" \") {\n    this.handleSelection(\n      e,\n      this.hasAttribute(\"aria-multiselectable\") && this.getAttribute(\"aria-multiselectable\") === \"true\"\n    );\n  } else {\n    this.handleMovement(e);\n  }\n};\n_keyupListener2 = /* @__PURE__ */ new WeakMap();\n_keydownListener2 = /* @__PURE__ */ new WeakMap();\n_updateLayoutStyle2 = /* @__PURE__ */ new WeakSet();\nupdateLayoutStyle_fn2 = function() {\n  var _a3;\n  const layoutRowStyle = this.shadowRoot.querySelector(\"#layout-row\");\n  const isLayoutRow = ((_a3 = getComputedStyle(this).getPropertyValue(\"--media-listbox-layout\")) == null ? void 0 : _a3.trim()) === \"row\";\n  layoutRowStyle.setAttribute(\"media\", isLayoutRow ? \"\" : \"width:0\");\n};\n_getOption = /* @__PURE__ */ new WeakSet();\ngetOption_fn = function(e) {\n  const composedPath = e.composedPath();\n  const index = composedPath.findIndex(\n    (el) => el.nodeName === \"MEDIA-CHROME-OPTION\"\n  );\n  return composedPath[index];\n};\n_selectOption = /* @__PURE__ */ new WeakSet();\nselectOption_fn = function(option, toggle) {\n  const oldSelectedOptions = [...this.selectedOptions];\n  if (!this.hasAttribute(\"aria-multiselectable\") || this.getAttribute(\"aria-multiselectable\") !== \"true\") {\n    this.options.forEach((el) => el.selected = false);\n  }\n  if (toggle) {\n    option.selected = !option.selected;\n  } else {\n    option.selected = true;\n  }\n  if (this.selectedOptions.some((opt, i2) => opt != oldSelectedOptions[i2])) {\n    this.dispatchEvent(\n      new Event(\"change\", { bubbles: true, composed: true })\n    );\n  }\n};\n_searchOption = /* @__PURE__ */ new WeakSet();\nsearchOption_fn = function(key) {\n  __privateMethod12(this, _clearKeysOnDelay, clearKeysOnDelay_fn).call(this);\n  const els = this.options;\n  const activeIndex = els.findIndex(\n    (el) => el.getAttribute(\"tabindex\") === \"0\"\n  );\n  __privateSet23(this, _keysSoFar2, __privateGet26(this, _keysSoFar2) + key);\n  const repeatedKey = __privateGet26(this, _keysSoFar2).split(\"\").every((k3) => k3 === key);\n  const after = els.slice(activeIndex + (repeatedKey ? 1 : 0)).filter((el) => el.textContent.toLowerCase().startsWith(__privateGet26(this, _keysSoFar2)));\n  const before = els.slice(0, activeIndex - (repeatedKey ? 1 : 0)).filter((el) => el.textContent.toLowerCase().startsWith(__privateGet26(this, _keysSoFar2)));\n  let afterRepeated = [];\n  let beforeRepeated = [];\n  if (repeatedKey) {\n    afterRepeated = els.slice(activeIndex + (repeatedKey ? 1 : 0)).filter((el) => el.textContent.startsWith(key));\n    beforeRepeated = els.slice(0, activeIndex - (repeatedKey ? 1 : 0)).filter((el) => el.textContent.startsWith(key));\n  }\n  const returns = [...after, ...before, ...afterRepeated, ...beforeRepeated];\n  return returns[0];\n};\n_clearKeysOnDelay = /* @__PURE__ */ new WeakSet();\nclearKeysOnDelay_fn = function() {\n  clearTimeout(__privateGet26(this, _clearKeysTimeout2));\n  __privateSet23(this, _clearKeysTimeout2, null);\n  __privateSet23(this, _clearKeysTimeout2, setTimeout(() => {\n    __privateSet23(this, _keysSoFar2, \"\");\n    __privateSet23(this, _clearKeysTimeout2, null);\n  }, 500));\n};\nif (!GlobalThis.customElements.get(\"media-chrome-listbox\")) {\n  GlobalThis.customElements.define(\"media-chrome-listbox\", MediaChromeListbox);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-chrome-option.js\nvar __accessCheck27 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet27 = (obj, member, getter) => {\n  __accessCheck27(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd27 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet24 = (obj, member, value, setter) => {\n  __accessCheck27(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod13 = (obj, member, method) => {\n  __accessCheck27(obj, member, \"access private method\");\n  return method;\n};\nvar _dirty2;\nvar _ownerElement2;\nvar _reset2;\nvar reset_fn2;\nvar template18 = Document2.createElement(\"template\");\ntemplate18.innerHTML = /*html*/\n`\n<style>\n  :host {\n    cursor: pointer;\n    display: block;\n    line-height: revert;\n    white-space: nowrap;\n    white-space-collapse: collapse;\n    text-wrap: nowrap;\n    padding: .4em .5em;\n    transition: var(--media-option-transition);\n    outline: var(--media-option-outline, 0);\n    outline-offset: var(--media-option-outline-offset, -1px);\n  }\n\n  :host(:focus-visible) {\n    box-shadow: var(--media-option-focus-shadow, inset 0 0 0 2px rgb(27 127 204 / .9));\n    outline: var(--media-option-hover-outline, 0);\n    outline-offset: var(--media-option-hover-outline-offset,  var(--media-option-outline-offset, -1px));\n  }\n\n  :host(:hover) {\n    cursor: pointer;\n    background: var(--media-option-hover-background, rgb(82 82 122 / .8));\n    outline: var(--media-option-hover-outline);\n    outline-offset: var(--media-option-hover-outline-offset,  var(--media-option-outline-offset, -1px));\n  }\n\n  :host([aria-selected=\"true\"]) {\n    background: var(--media-option-selected-background);\n  }\n\n  :host([disabled]) {\n    pointer-events: none;\n    color: rgba(255, 255, 255, .3);\n  }\n</style>\n<slot></slot>\n`;\nvar Attributes14 = {\n  VALUE: \"value\",\n  SELECTED: \"selected\",\n  DISABLED: \"disabled\"\n};\nvar MediaChromeOption = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd27(this, _reset2);\n    __privateAdd27(this, _dirty2, false);\n    __privateAdd27(this, _ownerElement2, void 0);\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template18.content.cloneNode(true));\n    }\n  }\n  static get observedAttributes() {\n    return [Attributes14.DISABLED, Attributes14.SELECTED, Attributes14.VALUE];\n  }\n  get value() {\n    var _a3;\n    return (_a3 = this.getAttribute(Attributes14.VALUE)) != null ? _a3 : this.text;\n  }\n  set value(val) {\n    this.setAttribute(Attributes14.VALUE, val);\n  }\n  get text() {\n    var _a3;\n    return ((_a3 = this.textContent) != null ? _a3 : \"\").trim();\n  }\n  get selected() {\n    return this.getAttribute(\"aria-selected\") === \"true\";\n  }\n  set selected(value) {\n    __privateSet24(this, _dirty2, true);\n    this.setAttribute(\"aria-selected\", value ? \"true\" : \"false\");\n    if (value) {\n      this.part.add(\"option-selected\");\n    } else {\n      this.part.remove(\"option-selected\");\n    }\n  }\n  enable() {\n    if (!this.hasAttribute(\"tabindex\")) {\n      this.setAttribute(\"tabindex\", -1);\n    }\n    if (!this.hasAttribute(\"aria-selected\")) {\n      this.setAttribute(\"aria-selected\", \"false\");\n    }\n  }\n  disable() {\n    this.removeAttribute(\"tabindex\");\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === Attributes14.SELECTED && !__privateGet27(this, _dirty2)) {\n      this.setAttribute(\"aria-selected\", newValue != null ? \"true\" : \"false\");\n    } else if (attrName === Attributes14.DISABLED && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    }\n  }\n  connectedCallback() {\n    if (!this.hasAttribute(Attributes14.DISABLED)) {\n      this.enable();\n    }\n    this.setAttribute(\"role\", \"option\");\n    __privateSet24(this, _ownerElement2, closestOptionsContainer(this, this.parentNode));\n    __privateMethod13(this, _reset2, reset_fn2).call(this);\n  }\n  disconnectedCallback() {\n    this.disable();\n    __privateMethod13(this, _reset2, reset_fn2).call(this);\n    __privateSet24(this, _ownerElement2, null);\n  }\n  handleClick() {\n  }\n};\n_dirty2 = /* @__PURE__ */ new WeakMap();\n_ownerElement2 = /* @__PURE__ */ new WeakMap();\n_reset2 = /* @__PURE__ */ new WeakSet();\nreset_fn2 = function() {\n  var _a3;\n  const options = (_a3 = __privateGet27(this, _ownerElement2)) == null ? void 0 : _a3.options;\n  if (!options)\n    return;\n  let selectedOption = options.filter((option) => option.getAttribute(\"aria-selected\") === \"true\").pop();\n  if (!selectedOption)\n    selectedOption = options[0];\n  if (__privateGet27(this, _ownerElement2).getAttribute(\"aria-multiselectable\") !== \"true\") {\n    options.forEach((option) => {\n      option.setAttribute(\"tabindex\", \"-1\");\n      option.setAttribute(\"aria-selected\", \"false\");\n    });\n  }\n  selectedOption == null ? void 0 : selectedOption.setAttribute(\"tabindex\", \"0\");\n  selectedOption == null ? void 0 : selectedOption.setAttribute(\"aria-selected\", \"true\");\n};\nfunction closestOptionsContainer(childNode, parentNode) {\n  if (!childNode)\n    return null;\n  const { host } = childNode.getRootNode();\n  if (!parentNode && host)\n    return closestOptionsContainer(childNode, host);\n  if (parentNode == null ? void 0 : parentNode.options)\n    return parentNode;\n  return closestOptionsContainer(parentNode, parentNode == null ? void 0 : parentNode.parentNode);\n}\nif (!GlobalThis.customElements.get(\"media-chrome-option\")) {\n  GlobalThis.customElements.define(\"media-chrome-option\", MediaChromeOption);\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-chrome-selectmenu.js\nvar __accessCheck28 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet28 = (obj, member, getter) => {\n  __accessCheck28(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd28 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet25 = (obj, member, value, setter) => {\n  __accessCheck28(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod14 = (obj, member, method) => {\n  __accessCheck28(obj, member, \"access private method\");\n  return method;\n};\nvar _mediaController10;\nvar _button;\nvar _buttonSlot;\nvar _listbox;\nvar _listboxSlot;\nvar _keyupListener3;\nvar _keydownListener3;\nvar _documentClickHandler;\nvar _clickHandler;\nvar _handleOptionChange;\nvar _toggle;\nvar toggle_fn;\nvar _show;\nvar show_fn;\nvar _hide;\nvar hide_fn;\nvar _updateMenuPosition;\nvar template19 = Document2.createElement(\"template\");\ntemplate19.innerHTML = /*html*/\n`\n  <style>\n  :host {\n    font: var(--media-font,\n      var(--media-font-weight, normal)\n      var(--media-font-size, 15px) /\n      var(--media-text-content-height, var(--media-control-height, 24px))\n      var(--media-font-family, helvetica neue, segoe ui, roboto, arial, sans-serif));\n    color: var(--media-text-color, var(--media-primary-color, rgb(238 238 238)));\n    display: inline-flex;\n    position: relative;\n    flex-shrink: .5;\n  }\n\n  [name=listbox]::slotted(*),\n  [part=listbox] {\n    position: absolute;\n    bottom: 100%;\n    max-height: 300px;\n    transition: var(--media-selectmenu-transition-in,\n      visibility 0s, transform .15s ease-out, opacity .15s ease-out);\n    transform: var(--media-listbox-transform-in, translateY(0) scale(1));\n    visibility: visible;\n    opacity: 1;\n  }\n\n  [name=listbox][hidden]::slotted(*),\n  [hidden] [part=listbox] {\n    transition: var(--media-selectmenu-transition-out,\n      visibility .15s ease-out, transform .15s ease-out, opacity .15s ease-out);\n    transform: var(--media-listbox-transform-out, translateY(2px) scale(.99));\n    visibility: hidden;\n    opacity: 0;\n    pointer-events: none;\n  }\n\n  slot[name=listbox][hidden] {\n    display: block;\n  }\n  </style>\n\n  <slot name=\"button\">\n    <media-chrome-button aria-haspopup=\"listbox\" part=\"button\">\n      <slot name=\"button-content\"></slot>\n    </media-chrome-button>\n  </slot>\n  <slot name=\"listbox\" hidden>\n    <media-chrome-listbox id=\"listbox\" part=\"listbox\">\n      <slot></slot>\n    </media-chrome-listbox>\n  </slot>\n`;\nvar MediaChromeSelectMenu = class extends GlobalThis.HTMLElement {\n  constructor() {\n    var _a3;\n    super();\n    __privateAdd28(this, _toggle);\n    __privateAdd28(this, _show);\n    __privateAdd28(this, _hide);\n    __privateAdd28(this, _mediaController10, void 0);\n    __privateAdd28(this, _button, void 0);\n    __privateAdd28(this, _buttonSlot, void 0);\n    __privateAdd28(this, _listbox, void 0);\n    __privateAdd28(this, _listboxSlot, void 0);\n    __privateAdd28(this, _keyupListener3, (e) => {\n      const { key } = e;\n      if (!this.keysUsed.includes(key)) {\n        this.removeEventListener(\"keyup\", __privateGet28(this, _keyupListener3));\n        return;\n      }\n      const isButton = e.composedPath().includes(__privateGet28(this, _button));\n      if (isButton && (key === \"Enter\" || key === \" \")) {\n        __privateMethod14(this, _toggle, toggle_fn).call(this);\n      } else if (key === \"Escape\") {\n        __privateMethod14(this, _hide, hide_fn).call(this);\n      }\n    });\n    __privateAdd28(this, _keydownListener3, (e) => {\n      const { metaKey, altKey, key } = e;\n      if (metaKey || altKey || !this.keysUsed.includes(key)) {\n        this.removeEventListener(\"keyup\", __privateGet28(this, _keyupListener3));\n        return;\n      }\n      e.preventDefault();\n      this.addEventListener(\"keyup\", __privateGet28(this, _keyupListener3), { once: true });\n    });\n    __privateAdd28(this, _documentClickHandler, (e) => {\n      if (e.composedPath().includes(this))\n        return;\n      __privateMethod14(this, _hide, hide_fn).call(this);\n    });\n    __privateAdd28(this, _clickHandler, (e) => {\n      if (e.composedPath().includes(__privateGet28(this, _button))) {\n        __privateMethod14(this, _toggle, toggle_fn).call(this);\n      }\n    });\n    __privateAdd28(this, _handleOptionChange, () => {\n      __privateMethod14(this, _hide, hide_fn).call(this);\n    });\n    __privateAdd28(this, _updateMenuPosition, () => {\n      if (__privateGet28(this, _listbox).offsetWidth === 0)\n        return;\n      const listboxWidth = __privateGet28(this, _listbox).offsetWidth;\n      const buttonRect = __privateGet28(this, _button).getBoundingClientRect();\n      if (this.hasAttribute(\"mediacontroller\") || __privateGet28(this, _button).hasAttribute(\"mediacontroller\") || __privateGet28(this, _listbox).hasAttribute(\"mediacontroller\")) {\n        __privateGet28(this, _listbox).style.zIndex = \"1\";\n        __privateGet28(this, _listbox).style.bottom = \"unset\";\n        __privateGet28(this, _listbox).style.right = null;\n        __privateGet28(this, _listbox).style.left = \"0\";\n        __privateGet28(this, _listbox).style.top = `${buttonRect.height}px`;\n        return;\n      }\n      const bounds = getBoundsElement2(this);\n      const boundsRect = bounds.getBoundingClientRect();\n      const listboxRight = buttonRect.x + listboxWidth;\n      const position = Math.max(\n        buttonRect.right - listboxRight,\n        buttonRect.right - boundsRect.right\n      );\n      __privateGet28(this, _listbox).style.left = null;\n      __privateGet28(this, _listbox).style.right = `${position}px`;\n      __privateGet28(this, _listbox).style.maxHeight = `${boundsRect.height - buttonRect.height}px`;\n    });\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" });\n      this.shadowRoot.appendChild(template19.content.cloneNode(true));\n    }\n    (_a3 = this.init) == null ? void 0 : _a3.call(this);\n    __privateSet25(this, _button, this.shadowRoot.querySelector(\"[part=button]\"));\n    __privateSet25(this, _listbox, this.shadowRoot.querySelector(\"[part=listbox]\"));\n    __privateSet25(this, _buttonSlot, this.shadowRoot.querySelector(\"slot[name=button]\"));\n    __privateGet28(this, _buttonSlot).addEventListener(\"slotchange\", () => {\n      const newButton = __privateGet28(this, _buttonSlot).assignedElements()[0];\n      if (!newButton)\n        return;\n      __privateSet25(this, _button, newButton);\n      __privateGet28(this, _button).preventClick = true;\n      const disabled = this.hasAttribute(\"disabled\") || __privateGet28(this, _button).hasAttribute(\"disabled\");\n      if (disabled) {\n        this.disable();\n      } else {\n        this.enable();\n        __privateGet28(this, _button).setAttribute(\"aria-haspopup\", \"listbox\");\n      }\n    });\n    __privateSet25(this, _listboxSlot, this.shadowRoot.querySelector(\"slot[name=listbox]\"));\n    __privateGet28(this, _listboxSlot).addEventListener(\"slotchange\", () => {\n      __privateSet25(this, _listbox, __privateGet28(this, _listboxSlot).assignedElements()[0] || __privateGet28(this, _listbox));\n    });\n  }\n  static get observedAttributes() {\n    return [\"disabled\", MediaStateReceiverAttributes.MEDIA_CONTROLLER];\n  }\n  enable() {\n    __privateGet28(this, _button).toggleAttribute(\"disabled\", false);\n    this.addEventListener(\"change\", __privateGet28(this, _handleOptionChange));\n    this.addEventListener(\"keydown\", __privateGet28(this, _keydownListener3));\n    this.addEventListener(\"click\", __privateGet28(this, _clickHandler));\n    Document2.addEventListener(\"click\", __privateGet28(this, _documentClickHandler));\n  }\n  disable() {\n    __privateGet28(this, _button).toggleAttribute(\"disabled\", true);\n    this.removeEventListener(\"change\", __privateGet28(this, _handleOptionChange));\n    this.removeEventListener(\"keydown\", __privateGet28(this, _keydownListener3));\n    this.removeEventListener(\"keyup\", __privateGet28(this, _keyupListener3));\n    this.removeEventListener(\"click\", __privateGet28(this, _clickHandler));\n    Document2.removeEventListener(\"click\", __privateGet28(this, _documentClickHandler));\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    var _a3, _b, _c, _d, _e5;\n    if (attrName === MediaStateReceiverAttributes.MEDIA_CONTROLLER) {\n      if (oldValue) {\n        (_b = (_a3 = __privateGet28(this, _mediaController10)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n        __privateSet25(this, _mediaController10, null);\n        __privateGet28(this, _listbox).removeAttribute(\n          MediaStateReceiverAttributes.MEDIA_CONTROLLER\n        );\n      }\n      if (newValue && this.isConnected) {\n        __privateSet25(this, _mediaController10, (_c = this.getRootNode()) == null ? void 0 : _c.getElementById(newValue));\n        (_e5 = (_d = __privateGet28(this, _mediaController10)) == null ? void 0 : _d.associateElement) == null ? void 0 : _e5.call(_d, this);\n        __privateGet28(this, _listbox).setAttribute(\n          MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n          newValue\n        );\n      }\n    } else if (attrName === \"disabled\" && newValue !== oldValue) {\n      if (newValue == null) {\n        this.enable();\n      } else {\n        this.disable();\n      }\n    }\n  }\n  connectedCallback() {\n    var _a3, _b, _c;\n    const { style } = getOrInsertCSSRule(this.shadowRoot, \":host\");\n    style.setProperty(\n      \"display\",\n      `var(--media-control-display, var(--${this.localName}-display, inline-flex))`\n    );\n    const mediaControllerId = this.getAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n    if (mediaControllerId) {\n      __privateSet25(this, _mediaController10, (_a3 = this.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId));\n      (_c = (_b = __privateGet28(this, _mediaController10)) == null ? void 0 : _b.associateElement) == null ? void 0 : _c.call(_b, this);\n      __privateGet28(this, _listbox).setAttribute(\n        MediaStateReceiverAttributes.MEDIA_CONTROLLER,\n        mediaControllerId\n      );\n    }\n    if (!this.hasAttribute(\"disabled\")) {\n      this.enable();\n    }\n    if (!__privateGet28(this, _listboxSlot).hidden) {\n      observeResize(getBoundsElement2(this), __privateGet28(this, _updateMenuPosition));\n    }\n  }\n  disconnectedCallback() {\n    var _a3, _b;\n    unobserveResize(getBoundsElement2(this), __privateGet28(this, _updateMenuPosition));\n    this.disable();\n    (_b = (_a3 = __privateGet28(this, _mediaController10)) == null ? void 0 : _a3.unassociateElement) == null ? void 0 : _b.call(_a3, this);\n    __privateSet25(this, _mediaController10, null);\n    __privateGet28(this, _listbox).removeAttribute(\n      MediaStateReceiverAttributes.MEDIA_CONTROLLER\n    );\n  }\n  get keysUsed() {\n    return [\"Enter\", \"Escape\", \" \", \"ArrowUp\", \"ArrowDown\", \"f\", \"c\", \"k\", \"m\"];\n  }\n};\n_mediaController10 = /* @__PURE__ */ new WeakMap();\n_button = /* @__PURE__ */ new WeakMap();\n_buttonSlot = /* @__PURE__ */ new WeakMap();\n_listbox = /* @__PURE__ */ new WeakMap();\n_listboxSlot = /* @__PURE__ */ new WeakMap();\n_keyupListener3 = /* @__PURE__ */ new WeakMap();\n_keydownListener3 = /* @__PURE__ */ new WeakMap();\n_documentClickHandler = /* @__PURE__ */ new WeakMap();\n_clickHandler = /* @__PURE__ */ new WeakMap();\n_handleOptionChange = /* @__PURE__ */ new WeakMap();\n_toggle = /* @__PURE__ */ new WeakSet();\ntoggle_fn = function() {\n  if (__privateGet28(this, _listboxSlot).hidden) {\n    __privateMethod14(this, _show, show_fn).call(this);\n  } else {\n    __privateMethod14(this, _hide, hide_fn).call(this);\n  }\n};\n_show = /* @__PURE__ */ new WeakSet();\nshow_fn = function() {\n  if (!__privateGet28(this, _listboxSlot).hidden)\n    return;\n  __privateGet28(this, _listboxSlot).hidden = false;\n  __privateGet28(this, _button).setAttribute(\"aria-expanded\", \"true\");\n  __privateGet28(this, _updateMenuPosition).call(this);\n  __privateGet28(this, _listbox).focus();\n  observeResize(getBoundsElement2(this), __privateGet28(this, _updateMenuPosition));\n};\n_hide = /* @__PURE__ */ new WeakSet();\nhide_fn = function() {\n  if (__privateGet28(this, _listboxSlot).hidden)\n    return;\n  unobserveResize(getBoundsElement2(this), __privateGet28(this, _updateMenuPosition));\n  const activeElement = getActiveElement();\n  __privateGet28(this, _listboxSlot).hidden = true;\n  __privateGet28(this, _button).setAttribute(\"aria-expanded\", \"false\");\n  if (containsComposedNode(__privateGet28(this, _listbox), activeElement)) {\n    __privateGet28(this, _button).focus();\n  }\n};\n_updateMenuPosition = /* @__PURE__ */ new WeakMap();\nfunction getBoundsElement2(host) {\n  var _a3;\n  return (_a3 = host.getAttribute(\"bounds\") ? closestComposedNode(host, `#${host.getAttribute(\"bounds\")}`) : getMediaControllerElement(host) || host.parentElement) != null ? _a3 : host;\n}\nfunction getMediaControllerElement(host) {\n  var _a3;\n  const mediaControllerId = host.getAttribute(\n    MediaStateReceiverAttributes.MEDIA_CONTROLLER\n  );\n  if (mediaControllerId) {\n    return (_a3 = host.getRootNode()) == null ? void 0 : _a3.getElementById(mediaControllerId);\n  }\n  return closestComposedNode(host, \"media-controller\");\n}\nif (!GlobalThis.customElements.get(\"media-chrome-selectmenu\")) {\n  GlobalThis.customElements.define(\n    \"media-chrome-selectmenu\",\n    MediaChromeSelectMenu\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-captions-listbox.js\nvar __accessCheck29 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet29 = (obj, member, getter) => {\n  __accessCheck29(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd29 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet26 = (obj, member, value, setter) => {\n  __accessCheck29(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod15 = (obj, member, method) => {\n  __accessCheck29(obj, member, \"access private method\");\n  return method;\n};\nvar _prevState4;\nvar _render5;\nvar render_fn5;\nvar _onChange5;\nvar onChange_fn5;\nvar ccIcon2 = (\n  /*html*/\n  `\n<svg aria-hidden=\"true\" viewBox=\"0 0 26 24\" part=\"captions-indicator indicator\">\n  <path d=\"M22.83 5.68a2.58 2.58 0 0 0-2.3-2.5c-3.62-.24-11.44-.24-15.06 0a2.58 2.58 0 0 0-2.3 2.5c-.23 4.21-.23 8.43 0 12.64a2.58 2.58 0 0 0 2.3 2.5c3.62.24 11.44.24 15.06 0a2.58 2.58 0 0 0 2.3-2.5c.23-4.21.23-8.43 0-12.64Zm-11.39 9.45a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.92 3.92 0 0 1 .92-2.77 3.18 3.18 0 0 1 2.43-1 2.94 2.94 0 0 1 2.13.78c.364.359.62.813.74 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.17 1.61 1.61 0 0 0-1.29.58 2.79 2.79 0 0 0-.5 1.89 3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.48 1.48 0 0 0 1-.37 2.1 2.1 0 0 0 .59-1.14l1.4.44a3.23 3.23 0 0 1-1.07 1.69Zm7.22 0a3.07 3.07 0 0 1-1.91.57 3.06 3.06 0 0 1-2.34-1 3.75 3.75 0 0 1-.92-2.67 3.88 3.88 0 0 1 .93-2.77 3.14 3.14 0 0 1 2.42-1 3 3 0 0 1 2.16.82 2.8 2.8 0 0 1 .73 1.31l-1.43.35a1.49 1.49 0 0 0-1.51-1.21 1.61 1.61 0 0 0-1.29.58A2.79 2.79 0 0 0 15 12a3 3 0 0 0 .49 1.93 1.61 1.61 0 0 0 1.27.58 1.44 1.44 0 0 0 1-.37 2.1 2.1 0 0 0 .6-1.15l1.4.44a3.17 3.17 0 0 1-1.1 1.7Z\"/>\n</svg>`\n);\nvar slotTemplate17 = Document2.createElement(\"template\");\nslotTemplate17.innerHTML = /*html*/\n`\n  <slot name=\"captions-indicator\" hidden>${ccIcon2}</slot>\n`;\nvar MediaCaptionsListbox = class extends MediaChromeListbox {\n  constructor() {\n    super({ slotTemplate: slotTemplate17 });\n    __privateAdd29(this, _render5);\n    __privateAdd29(this, _onChange5);\n    __privateAdd29(this, _prevState4, void 0);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      \"aria-multiselectable\",\n      MediaUIAttributes.MEDIA_SUBTITLES_LIST,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_LIST && oldValue !== newValue) {\n      __privateMethod15(this, _render5, render_fn5).call(this);\n    } else if (attrName === MediaUIAttributes.MEDIA_SUBTITLES_SHOWING && oldValue !== newValue) {\n      this.value = newValue;\n    } else if (attrName === \"aria-multiselectable\") {\n      this.removeAttribute(\"aria-multiselectable\");\n      console.warn(\n        \"Captions List doesn't currently support multiple selections. You can enable multiple items via the media.textTracks API.\"\n      );\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod15(this, _onChange5, onChange_fn5));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod15(this, _onChange5, onChange_fn5));\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesList() {\n    return getSubtitlesListAttr4(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST);\n  }\n  set mediaSubtitlesList(list) {\n    setSubtitlesListAttr4(this, MediaUIAttributes.MEDIA_SUBTITLES_LIST, list);\n  }\n  /**\n   * @type {Array<object>} An array of TextTrack-like objects.\n   * Objects must have the properties: kind, language, and label.\n   */\n  get mediaSubtitlesShowing() {\n    return getSubtitlesListAttr4(\n      this,\n      MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n    );\n  }\n  set mediaSubtitlesShowing(list) {\n    setSubtitlesListAttr4(this, MediaUIAttributes.MEDIA_SUBTITLES_SHOWING, list);\n  }\n};\n_prevState4 = /* @__PURE__ */ new WeakMap();\n_render5 = /* @__PURE__ */ new WeakSet();\nrender_fn5 = function() {\n  var _a3;\n  if (__privateGet29(this, _prevState4) === JSON.stringify(this.mediaSubtitlesList))\n    return;\n  __privateSet26(this, _prevState4, JSON.stringify(this.mediaSubtitlesList));\n  const container = this.shadowRoot.querySelector(\"#container\");\n  container.textContent = \"\";\n  const isOff = !this.value;\n  const option = createOption(this.formatOptionText(\"Off\"), \"off\", isOff);\n  option.prepend(createIndicator2(this, \"select-indicator\"));\n  container.append(option);\n  const subtitlesList = this.mediaSubtitlesList;\n  for (const subs of subtitlesList) {\n    const option2 = createOption(\n      this.formatOptionText(subs.label, subs),\n      formatTextTrackObj(subs),\n      this.value == formatTextTrackObj(subs)\n    );\n    option2.prepend(createIndicator2(this, \"select-indicator\"));\n    const type = (_a3 = subs.kind) != null ? _a3 : \"subs\";\n    if (type === \"captions\") {\n      option2.append(createIndicator2(this, \"captions-indicator\"));\n    }\n    container.append(option2);\n  }\n};\n_onChange5 = /* @__PURE__ */ new WeakSet();\nonChange_fn5 = function() {\n  const showingSubs = this.mediaSubtitlesShowing;\n  const showingSubsStr = this.getAttribute(\n    MediaUIAttributes.MEDIA_SUBTITLES_SHOWING\n  );\n  const localStateChange = this.value !== showingSubsStr;\n  if ((showingSubs == null ? void 0 : showingSubs.length) && localStateChange) {\n    this.dispatchEvent(\n      new GlobalThis.CustomEvent(\n        MediaUIEvents.MEDIA_DISABLE_SUBTITLES_REQUEST,\n        {\n          composed: true,\n          bubbles: true,\n          detail: showingSubs\n        }\n      )\n    );\n  }\n  if (!this.value || !localStateChange)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_SHOW_SUBTITLES_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\nvar getSubtitlesListAttr4 = (el, attrName) => {\n  const attrVal = el.getAttribute(attrName);\n  return attrVal ? parseTextTracksStr(attrVal) : [];\n};\nvar setSubtitlesListAttr4 = (el, attrName, list) => {\n  if (!(list == null ? void 0 : list.length)) {\n    el.removeAttribute(attrName);\n    return;\n  }\n  const newValStr = stringifyTextTrackList(list);\n  const oldVal = el.getAttribute(attrName);\n  if (oldVal === newValStr)\n    return;\n  el.setAttribute(attrName, newValStr);\n};\nif (!GlobalThis.customElements.get(\"media-captions-listbox\")) {\n  GlobalThis.customElements.define(\n    \"media-captions-listbox\",\n    MediaCaptionsListbox\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-captions-selectmenu.js\nvar MediaCaptionsSelectMenu = class extends MediaChromeSelectMenu {\n  init() {\n    const captionsButton = Document2.createElement(\"media-captions-button\");\n    captionsButton.part.add(\"button\");\n    captionsButton.preventClick = true;\n    const captionsListbox = Document2.createElement(\"media-captions-listbox\");\n    captionsListbox.part.add(\"listbox\");\n    captionsListbox.setAttribute(\n      \"exportparts\",\n      \"option, option-selected, indicator\"\n    );\n    const buttonSlot = this.shadowRoot.querySelector(\"slot[name=button]\");\n    const listboxSlot = this.shadowRoot.querySelector(\"slot[name=listbox]\");\n    buttonSlot.textContent = \"\";\n    listboxSlot.textContent = \"\";\n    buttonSlot.append(captionsButton);\n    listboxSlot.append(captionsListbox);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-captions-selectmenu\")) {\n  GlobalThis.customElements.define(\n    \"media-captions-selectmenu\",\n    MediaCaptionsSelectMenu\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-playback-rate-listbox.js\nvar __accessCheck30 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet30 = (obj, member, getter) => {\n  __accessCheck30(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd30 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateMethod16 = (obj, member, method) => {\n  __accessCheck30(obj, member, \"access private method\");\n  return method;\n};\nvar _rates4;\nvar _render6;\nvar render_fn6;\nvar _onChange6;\nvar onChange_fn6;\nvar Attributes15 = {\n  RATES: \"rates\"\n};\nvar MediaPlaybackRateListbox = class extends MediaChromeListbox {\n  constructor() {\n    super();\n    __privateAdd30(this, _render6);\n    __privateAdd30(this, _onChange6);\n    __privateAdd30(this, _rates4, new AttributeTokenList(this, Attributes15.RATES, {\n      defaultValue: DEFAULT_RATES\n    }));\n    __privateMethod16(this, _render6, render_fn6).call(this);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      \"aria-multiselectable\",\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      Attributes15.RATES\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_PLAYBACK_RATE && oldValue != newValue) {\n      this.value = newValue;\n    } else if (attrName === Attributes15.RATES && oldValue != newValue) {\n      __privateGet30(this, _rates4).value = newValue;\n      __privateMethod16(this, _render6, render_fn6).call(this);\n    }\n  }\n  /**\n   * @type { AttributeTokenList | Array<number> | undefined} Will return a DOMTokenList.\n   * Setting a value will accept an array of numbers.\n   */\n  get rates() {\n    return __privateGet30(this, _rates4);\n  }\n  set rates(value) {\n    if (!value) {\n      __privateGet30(this, _rates4).value = \"\";\n    } else if (Array.isArray(value)) {\n      __privateGet30(this, _rates4).value = value.join(\" \");\n    }\n    __privateMethod16(this, _render6, render_fn6).call(this);\n  }\n  /**\n   * @type {number} The current playback rate\n   */\n  get mediaPlaybackRate() {\n    return getNumericAttr(\n      this,\n      MediaUIAttributes.MEDIA_PLAYBACK_RATE,\n      DEFAULT_RATE\n    );\n  }\n  set mediaPlaybackRate(value) {\n    setNumericAttr(this, MediaUIAttributes.MEDIA_PLAYBACK_RATE, value);\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod16(this, _onChange6, onChange_fn6));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod16(this, _onChange6, onChange_fn6));\n  }\n};\n_rates4 = /* @__PURE__ */ new WeakMap();\n_render6 = /* @__PURE__ */ new WeakSet();\nrender_fn6 = function() {\n  const container = this.shadowRoot.querySelector(\"#container\");\n  container.textContent = \"\";\n  for (const rate of this.rates) {\n    const option = createOption(\n      this.formatOptionText(`${rate}x`, rate),\n      rate,\n      this.mediaPlaybackRate == rate\n    );\n    option.prepend(createIndicator2(this, \"select-indicator\"));\n    container.append(option);\n  }\n};\n_onChange6 = /* @__PURE__ */ new WeakSet();\nonChange_fn6 = function() {\n  if (!this.value)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_PLAYBACK_RATE_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\nif (!GlobalThis.customElements.get(\"media-playback-rate-listbox\")) {\n  GlobalThis.customElements.define(\n    \"media-playback-rate-listbox\",\n    MediaPlaybackRateListbox\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-playback-rate-selectmenu.js\nvar MediaPlaybackRateSelectMenu = class extends MediaChromeSelectMenu {\n  init() {\n    const playbackRateButton = Document2.createElement(\n      \"media-playback-rate-button\"\n    );\n    playbackRateButton.part.add(\"button\");\n    playbackRateButton.preventClick = true;\n    const playbackRateListbox = Document2.createElement(\n      \"media-playback-rate-listbox\"\n    );\n    playbackRateListbox.part.add(\"listbox\");\n    playbackRateListbox.setAttribute(\n      \"exportparts\",\n      \"option, option-selected, indicator\"\n    );\n    const buttonSlot = this.shadowRoot.querySelector(\"slot[name=button]\");\n    const listboxSlot = this.shadowRoot.querySelector(\"slot[name=listbox]\");\n    buttonSlot.textContent = \"\";\n    listboxSlot.textContent = \"\";\n    buttonSlot.append(playbackRateButton);\n    listboxSlot.append(playbackRateListbox);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-playback-rate-selectmenu\")) {\n  GlobalThis.customElements.define(\n    \"media-playback-rate-selectmenu\",\n    MediaPlaybackRateSelectMenu\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-rendition-listbox.js\nvar __accessCheck31 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet31 = (obj, member, getter) => {\n  __accessCheck31(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd31 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet27 = (obj, member, value, setter) => {\n  __accessCheck31(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod17 = (obj, member, method) => {\n  __accessCheck31(obj, member, \"access private method\");\n  return method;\n};\nvar _renditionList2;\nvar _prevState5;\nvar _render7;\nvar render_fn7;\nvar _onChange7;\nvar onChange_fn7;\nvar MediaRenditionListbox = class extends MediaChromeListbox {\n  constructor() {\n    super(...arguments);\n    __privateAdd31(this, _render7);\n    __privateAdd31(this, _onChange7);\n    __privateAdd31(this, _renditionList2, []);\n    __privateAdd31(this, _prevState5, void 0);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_RENDITION_LIST,\n      MediaUIAttributes.MEDIA_RENDITION_SELECTED\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_RENDITION_SELECTED && oldValue !== newValue) {\n      this.value = newValue != null ? newValue : \"auto\";\n    } else if (attrName === MediaUIAttributes.MEDIA_RENDITION_LIST && oldValue !== newValue) {\n      __privateSet27(this, _renditionList2, parseRenditionList(newValue));\n      __privateMethod17(this, _render7, render_fn7).call(this);\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod17(this, _onChange7, onChange_fn7));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod17(this, _onChange7, onChange_fn7));\n  }\n  get mediaRenditionList() {\n    return __privateGet31(this, _renditionList2);\n  }\n  set mediaRenditionList(list) {\n    __privateSet27(this, _renditionList2, list);\n    __privateMethod17(this, _render7, render_fn7).call(this);\n  }\n  /**\n   * Get selected rendition id.\n   * @return {string}\n   */\n  get mediaRenditionSelected() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED);\n  }\n  set mediaRenditionSelected(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED, id);\n  }\n};\n_renditionList2 = /* @__PURE__ */ new WeakMap();\n_prevState5 = /* @__PURE__ */ new WeakMap();\n_render7 = /* @__PURE__ */ new WeakSet();\nrender_fn7 = function() {\n  if (__privateGet31(this, _prevState5) === JSON.stringify(this.mediaRenditionList))\n    return;\n  __privateSet27(this, _prevState5, JSON.stringify(this.mediaRenditionList));\n  const renditionList = this.mediaRenditionList.sort(\n    (a2, b4) => b4.height - a2.height\n  );\n  const container = this.shadowRoot.querySelector(\"#container\");\n  container.textContent = \"\";\n  let isAuto = !this.mediaRenditionSelected;\n  for (const rendition of renditionList) {\n    const text = this.formatOptionText(\n      `${Math.min(rendition.width, rendition.height)}p`,\n      rendition\n    );\n    const option2 = createOption(\n      text,\n      `${rendition.id}`,\n      rendition.selected && !isAuto\n    );\n    option2.prepend(createIndicator2(this, \"select-indicator\"));\n    container.append(option2);\n  }\n  const option = createOption(this.formatOptionText(\"Auto\"), \"auto\", isAuto);\n  option.prepend(createIndicator2(this, \"select-indicator\"));\n  container.append(option);\n};\n_onChange7 = /* @__PURE__ */ new WeakSet();\nonChange_fn7 = function() {\n  if (this.value == null)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_RENDITION_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\nif (!GlobalThis.customElements.get(\"media-rendition-listbox\")) {\n  GlobalThis.customElements.define(\n    \"media-rendition-listbox\",\n    MediaRenditionListbox\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-rendition-button.js\nvar renditionIcon2 = (\n  /*html*/\n  `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M13.5 2.5h2v6h-2v-2h-11v-2h11v-2Zm4 2h4v2h-4v-2Zm-12 4h2v6h-2v-2h-3v-2h3v-2Zm4 2h12v2h-12v-2Zm1 4h2v6h-2v-2h-8v-2h8v-2Zm4 2h7v2h-7v-2Z\" />\n</svg>`\n);\nvar slotTemplate18 = Document2.createElement(\"template\");\nslotTemplate18.innerHTML = /*html*/\n`\n  <slot name=\"icon\">${renditionIcon2}</slot>\n`;\nvar MediaRenditionButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_RENDITION_SELECTED,\n      MediaUIAttributes.MEDIA_RENDITION_UNAVAILABLE\n    ];\n  }\n  constructor() {\n    super({ slotTemplate: slotTemplate18 });\n  }\n  /**\n   * Get selected rendition id.\n   * @return {string}\n   */\n  get mediaRenditionSelected() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED);\n  }\n  set mediaRenditionSelected(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_RENDITION_SELECTED, id);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-rendition-button\")) {\n  GlobalThis.customElements.define(\n    \"media-rendition-button\",\n    MediaRenditionButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-rendition-selectmenu.js\nvar MediaRenditionSelectMenu = class extends MediaChromeSelectMenu {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_RENDITION_SELECTED,\n      MediaUIAttributes.MEDIA_RENDITION_UNAVAILABLE\n    ];\n  }\n  init() {\n    const renditionButton = Document2.createElement(\"media-rendition-button\");\n    renditionButton.part.add(\"button\");\n    renditionButton.preventClick = true;\n    const renditionListbox = Document2.createElement(\"media-rendition-listbox\");\n    renditionListbox.part.add(\"listbox\");\n    renditionListbox.setAttribute(\n      \"exportparts\",\n      \"option, option-selected, indicator\"\n    );\n    const buttonSlot = this.shadowRoot.querySelector(\"slot[name=button]\");\n    const listboxSlot = this.shadowRoot.querySelector(\"slot[name=listbox]\");\n    buttonSlot.textContent = \"\";\n    listboxSlot.textContent = \"\";\n    buttonSlot.append(renditionButton);\n    listboxSlot.append(renditionListbox);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-rendition-selectmenu\")) {\n  GlobalThis.customElements.define(\n    \"media-rendition-selectmenu\",\n    MediaRenditionSelectMenu\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-audio-track-listbox.js\nvar __accessCheck32 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet32 = (obj, member, getter) => {\n  __accessCheck32(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd32 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet28 = (obj, member, value, setter) => {\n  __accessCheck32(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod18 = (obj, member, method) => {\n  __accessCheck32(obj, member, \"access private method\");\n  return method;\n};\nvar _audioTrackList2;\nvar _prevState6;\nvar _render8;\nvar render_fn8;\nvar _onChange8;\nvar onChange_fn8;\nvar MediaAudioTrackListbox = class extends MediaChromeListbox {\n  constructor() {\n    super(...arguments);\n    __privateAdd32(this, _render8);\n    __privateAdd32(this, _onChange8);\n    __privateAdd32(this, _audioTrackList2, []);\n    __privateAdd32(this, _prevState6, void 0);\n  }\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED\n    ];\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    super.attributeChangedCallback(attrName, oldValue, newValue);\n    if (attrName === MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED && oldValue !== newValue) {\n      this.value = newValue;\n    } else if (attrName === MediaUIAttributes.MEDIA_AUDIO_TRACK_LIST && oldValue !== newValue) {\n      __privateSet28(this, _audioTrackList2, parseAudioTrackList(newValue));\n      __privateMethod18(this, _render8, render_fn8).call(this);\n    }\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.addEventListener(\"change\", __privateMethod18(this, _onChange8, onChange_fn8));\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.removeEventListener(\"change\", __privateMethod18(this, _onChange8, onChange_fn8));\n  }\n  get mediaAudioTrackList() {\n    return __privateGet32(this, _audioTrackList2);\n  }\n  set mediaAudioTrackList(list) {\n    __privateSet28(this, _audioTrackList2, list);\n    __privateMethod18(this, _render8, render_fn8).call(this);\n  }\n  /**\n   * Get enabled audio track id.\n   * @return {string}\n   */\n  get mediaAudioTrackEnabled() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED);\n  }\n  set mediaAudioTrackEnabled(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED, id);\n  }\n};\n_audioTrackList2 = /* @__PURE__ */ new WeakMap();\n_prevState6 = /* @__PURE__ */ new WeakMap();\n_render8 = /* @__PURE__ */ new WeakSet();\nrender_fn8 = function() {\n  if (__privateGet32(this, _prevState6) === JSON.stringify(this.mediaAudioTrackList))\n    return;\n  __privateSet28(this, _prevState6, JSON.stringify(this.mediaAudioTrackList));\n  const audioTrackList = this.mediaAudioTrackList;\n  const container = this.shadowRoot.querySelector(\"#container\");\n  container.textContent = \"\";\n  for (const audioTrack of audioTrackList) {\n    const text = this.formatOptionText(audioTrack.label, audioTrack);\n    const option = createOption(text, `${audioTrack.id}`, audioTrack.enabled);\n    option.prepend(createIndicator2(this, \"select-indicator\"));\n    container.append(option);\n  }\n};\n_onChange8 = /* @__PURE__ */ new WeakSet();\nonChange_fn8 = function() {\n  if (this.value == null)\n    return;\n  const event = new GlobalThis.CustomEvent(\n    MediaUIEvents.MEDIA_AUDIO_TRACK_REQUEST,\n    {\n      composed: true,\n      bubbles: true,\n      detail: this.value\n    }\n  );\n  this.dispatchEvent(event);\n};\nif (!GlobalThis.customElements.get(\"media-audio-track-listbox\")) {\n  GlobalThis.customElements.define(\n    \"media-audio-track-listbox\",\n    MediaAudioTrackListbox\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-audio-track-button.js\nvar audioTrackIcon2 = (\n  /*html*/\n  `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\">\n  <path d=\"M11 17H9.5V7H11v10Zm-3-3H6.5v-4H8v4Zm6-5h-1.5v6H14V9Zm3 7h-1.5V8H17v8Z\"/>\n  <path d=\"M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10Zm-2 0a8 8 0 1 0-16 0 8 8 0 0 0 16 0Z\"/>\n</svg>`\n);\nvar slotTemplate19 = Document2.createElement(\"template\");\nslotTemplate19.innerHTML = /*html*/\n`\n  <slot name=\"icon\">${audioTrackIcon2}</slot>\n`;\nvar MediaAudioTrackButton = class extends MediaChromeButton {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_UNAVAILABLE\n    ];\n  }\n  constructor() {\n    super({ slotTemplate: slotTemplate19 });\n  }\n  /**\n   * Get enabled audio track id.\n   * @return {string}\n   */\n  get mediaAudioTrackEnabled() {\n    return getStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED);\n  }\n  set mediaAudioTrackEnabled(id) {\n    setStringAttr(this, MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED, id);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-audio-track-button\")) {\n  GlobalThis.customElements.define(\n    \"media-audio-track-button\",\n    MediaAudioTrackButton\n  );\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/experimental/media-audio-track-selectmenu.js\nvar MediaAudioTrackSelectMenu = class extends MediaChromeSelectMenu {\n  static get observedAttributes() {\n    return [\n      ...super.observedAttributes,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_ENABLED,\n      MediaUIAttributes.MEDIA_AUDIO_TRACK_UNAVAILABLE\n    ];\n  }\n  init() {\n    const audioTrackButton = Document2.createElement(\"media-audio-track-button\");\n    audioTrackButton.part.add(\"button\");\n    audioTrackButton.preventClick = true;\n    const audioTrackListbox = Document2.createElement(\n      \"media-audio-track-listbox\"\n    );\n    audioTrackListbox.part.add(\"listbox\");\n    audioTrackListbox.setAttribute(\n      \"exportparts\",\n      \"option, option-selected, indicator\"\n    );\n    const buttonSlot = this.shadowRoot.querySelector(\"slot[name=button]\");\n    const listboxSlot = this.shadowRoot.querySelector(\"slot[name=listbox]\");\n    buttonSlot.textContent = \"\";\n    listboxSlot.textContent = \"\";\n    buttonSlot.append(audioTrackButton);\n    listboxSlot.append(audioTrackListbox);\n  }\n};\nif (!GlobalThis.customElements.get(\"media-audio-track-selectmenu\")) {\n  GlobalThis.customElements.define(\n    \"media-audio-track-selectmenu\",\n    MediaAudioTrackSelectMenu\n  );\n}\n\n// node_modules/.pnpm/@mux+mux-video@0.20.2/node_modules/@mux/mux-video/dist/index.mjs\nvar oi2 = Object.defineProperty;\nvar ai2 = Object.getPrototypeOf;\nvar di2 = Reflect.get;\nvar ci2 = (t2, i2, e) => i2 in t2 ? oi2(t2, i2, { enumerable: true, configurable: true, writable: true, value: e }) : t2[i2] = e;\nvar v3 = (t2, i2, e) => (ci2(t2, typeof i2 != \"symbol\" ? i2 + \"\" : i2, e), e);\nvar ft2 = (t2, i2, e) => {\n  if (!i2.has(t2)) throw TypeError(\"Cannot \" + e);\n};\nvar r9 = (t2, i2, e) => (ft2(t2, i2, \"read from private field\"), e ? e.call(t2) : i2.get(t2));\nvar u = (t2, i2, e) => {\n  if (i2.has(t2)) throw TypeError(\"Cannot add the same private member more than once\");\n  i2 instanceof WeakSet ? i2.add(t2) : i2.set(t2, e);\n};\nvar h2 = (t2, i2, e, s) => (ft2(t2, i2, \"write to private field\"), s ? s.call(t2, e) : i2.set(t2, e), e);\nvar k2 = (t2, i2, e) => (ft2(t2, i2, \"access private method\"), e);\nvar $e3 = (t2, i2, e) => di2(ai2(t2), e, i2);\nvar pe2 = class {\n  addEventListener() {\n  }\n  removeEventListener() {\n  }\n  dispatchEvent(i2) {\n    return true;\n  }\n};\nif (typeof DocumentFragment == \"undefined\") {\n  class t2 extends pe2 {\n  }\n  globalThis.DocumentFragment = t2;\n}\nvar Le3 = class extends pe2 {\n};\nvar mt2 = class extends pe2 {\n};\nvar ui2 = { get(t2) {\n}, define(t2, i2, e) {\n}, upgrade(t2) {\n}, whenDefined(t2) {\n  return Promise.resolve(Le3);\n} };\nvar Me3;\nvar pt3 = class {\n  constructor(i2, e = {}) {\n    u(this, Me3, void 0);\n    h2(this, Me3, e == null ? void 0 : e.detail);\n  }\n  get detail() {\n    return r9(this, Me3);\n  }\n  initCustomEvent() {\n  }\n};\nMe3 = /* @__PURE__ */ new WeakMap();\nfunction hi2(t2, i2) {\n  return new Le3();\n}\nvar Ct2 = { document: { createElement: hi2 }, DocumentFragment, customElements: ui2, CustomEvent: pt3, EventTarget: pe2, HTMLElement: Le3, HTMLVideoElement: mt2 };\nvar Ot2 = typeof window == \"undefined\" || typeof globalThis.customElements == \"undefined\";\nvar ze3 = Ot2 ? Ct2 : globalThis;\nvar Ki2 = Ot2 ? Ct2.document : globalThis.document;\nvar li2 = () => {\n  try {\n    return \"0.20.2\";\n  } catch (e) {\n  }\n  return \"UNKNOWN\";\n};\nvar fi2 = li2();\nvar _t2 = () => fi2;\nvar Et2 = [\"abort\", \"canplay\", \"canplaythrough\", \"durationchange\", \"emptied\", \"encrypted\", \"ended\", \"error\", \"loadeddata\", \"loadedmetadata\", \"loadstart\", \"pause\", \"play\", \"playing\", \"progress\", \"ratechange\", \"seeked\", \"seeking\", \"stalled\", \"suspend\", \"timeupdate\", \"volumechange\", \"waiting\", \"waitingforkey\", \"resize\", \"enterpictureinpicture\", \"leavepictureinpicture\", \"webkitbeginfullscreen\", \"webkitendfullscreen\", \"webkitpresentationmodechanged\"];\nfunction mi2(t2) {\n  return `\n    <style>\n      :host {\n        display: inline-flex;\n        line-height: 0;\n        flex-direction: column;\n        justify-content: end;\n      }\n\n      audio {\n        width: 100%;\n      }\n    </style>\n    <slot name=\"media\">\n      <audio${Nt2(t2)}></audio>\n    </slot>\n    <slot></slot>\n  `;\n}\nfunction pi2(t2) {\n  return `\n    <style>\n      :host {\n        display: inline-block;\n        line-height: 0;\n      }\n\n      video {\n        max-width: 100%;\n        max-height: 100%;\n        min-width: 100%;\n        min-height: 100%;\n        object-fit: var(--media-object-fit, contain);\n        object-position: var(--media-object-position, 50% 50%);\n      }\n\n      video::-webkit-media-text-track-container {\n        transform: var(--media-webkit-text-track-transform);\n        transition: var(--media-webkit-text-track-transition);\n      }\n    </style>\n    <slot name=\"media\">\n      <video${Nt2(t2)}></video>\n    </slot>\n    <slot></slot>\n  `;\n}\nvar Lt2 = (t2, { tag: i2, is: e }) => {\n  var l, a2, p3, E4, I4, Mt3, se5, o, m3, A3, ne5, _3, gt3, L2, wt3, w2, xt3;\n  let s = (a2 = (l = globalThis.document) == null ? void 0 : l.createElement) == null ? void 0 : a2.call(l, i2, { is: e }), n2 = s ? gi2(s) : [];\n  return p3 = class extends t2 {\n    constructor() {\n      super();\n      u(this, A3);\n      u(this, _3);\n      u(this, L2);\n      u(this, w2);\n      u(this, se5, void 0);\n      u(this, o, void 0);\n      u(this, m3, /* @__PURE__ */ new Map());\n    }\n    static get observedAttributes() {\n      var g2, T3, O4;\n      return k2(g2 = p3, I4, Mt3).call(g2), [...(O4 = (T3 = s == null ? void 0 : s.constructor) == null ? void 0 : T3.observedAttributes) != null ? O4 : [], \"autopictureinpicture\", \"disablepictureinpicture\", \"disableremoteplayback\", \"autoplay\", \"controls\", \"controlslist\", \"crossorigin\", \"loop\", \"muted\", \"playsinline\", \"poster\", \"preload\", \"src\"];\n    }\n    get nativeEl() {\n      var f, g2, T3;\n      return k2(this, A3, ne5).call(this), (T3 = (g2 = (f = r9(this, o)) != null ? f : this.shadowRoot.querySelector(i2)) != null ? g2 : this.querySelector(\":scope > [slot=media]\")) != null ? T3 : this.querySelector(i2);\n    }\n    set nativeEl(f) {\n      h2(this, o, f);\n    }\n    get defaultMuted() {\n      return this.hasAttribute(\"muted\");\n    }\n    set defaultMuted(f) {\n      this.toggleAttribute(\"muted\", !!f);\n    }\n    get src() {\n      return this.getAttribute(\"src\");\n    }\n    set src(f) {\n      this.setAttribute(\"src\", `${f}`);\n    }\n    get preload() {\n      var f, g2;\n      return (g2 = this.getAttribute(\"preload\")) != null ? g2 : (f = this.nativeEl) == null ? void 0 : f.preload;\n    }\n    set preload(f) {\n      this.setAttribute(\"preload\", `${f}`);\n    }\n    init() {\n      var f, g2;\n      if (!this.shadowRoot) {\n        this.attachShadow({ mode: \"open\" });\n        let T3 = Ei2(this.attributes);\n        e && (T3.is = e), i2 && (T3.part = i2), this.shadowRoot.innerHTML = this.constructor.getTemplateHTML(T3);\n      }\n      this.nativeEl.muted = this.hasAttribute(\"muted\");\n      for (let T3 of n2) k2(this, L2, wt3).call(this, T3);\n      this.shadowRoot.addEventListener(\"slotchange\", this), k2(this, _3, gt3).call(this);\n      for (let T3 of this.constructor.Events) (g2 = (f = this.shadowRoot).addEventListener) == null || g2.call(f, T3, this, true);\n    }\n    handleEvent(f) {\n      if (f.type === \"slotchange\") {\n        k2(this, _3, gt3).call(this);\n        return;\n      }\n      f.target === this.nativeEl && this.dispatchEvent(new CustomEvent(f.type, { detail: f.detail }));\n    }\n    attributeChangedCallback(f, g2, T3) {\n      k2(this, A3, ne5).call(this), k2(this, w2, xt3).call(this, f, g2, T3);\n    }\n    connectedCallback() {\n      k2(this, A3, ne5).call(this);\n    }\n  }, E4 = /* @__PURE__ */ new WeakMap(), I4 = /* @__PURE__ */ new WeakSet(), Mt3 = function() {\n    if (r9(this, E4)) return;\n    h2(this, E4, true);\n    let f = new Set(this.observedAttributes);\n    f.delete(\"muted\");\n    for (let g2 of n2) {\n      if (g2 in this.prototype) continue;\n      if (typeof s[g2] == \"function\") this.prototype[g2] = function(...O4) {\n        return k2(this, A3, ne5).call(this), this.call ? this.call(g2, ...O4) : this.nativeEl[g2].apply(this.nativeEl, O4);\n      };\n      else {\n        let O4 = { get() {\n          var D3, Pe4, Ie4;\n          k2(this, A3, ne5).call(this);\n          let C3 = g2.toLowerCase();\n          if (f.has(C3)) {\n            let me5 = this.getAttribute(C3);\n            return me5 === null ? false : me5 === \"\" ? true : me5;\n          }\n          return (Ie4 = (D3 = this.get) == null ? void 0 : D3.call(this, g2)) != null ? Ie4 : (Pe4 = this.nativeEl) == null ? void 0 : Pe4[g2];\n        } };\n        g2 !== g2.toUpperCase() && (O4.set = function(C3) {\n          k2(this, A3, ne5).call(this);\n          let D3 = g2.toLowerCase();\n          if (f.has(D3)) {\n            C3 === true || C3 === false || C3 == null ? this.toggleAttribute(D3, !!C3) : this.setAttribute(D3, C3);\n            return;\n          }\n          if (this.set) {\n            this.set(g2, C3);\n            return;\n          }\n          this.nativeEl[g2] = C3;\n        }), Object.defineProperty(this.prototype, g2, O4);\n      }\n    }\n  }, se5 = /* @__PURE__ */ new WeakMap(), o = /* @__PURE__ */ new WeakMap(), m3 = /* @__PURE__ */ new WeakMap(), A3 = /* @__PURE__ */ new WeakSet(), ne5 = function() {\n    r9(this, se5) || (h2(this, se5, true), this.init());\n  }, _3 = /* @__PURE__ */ new WeakSet(), gt3 = function() {\n    let f = new Map(r9(this, m3));\n    this.shadowRoot.querySelector(\"slot:not([name])\").assignedElements({ flatten: true }).filter((g2) => [\"track\", \"source\"].includes(g2.localName)).forEach((g2) => {\n      var O4, C3;\n      f.delete(g2);\n      let T3 = r9(this, m3).get(g2);\n      T3 || (T3 = g2.cloneNode(), r9(this, m3).set(g2, T3)), (C3 = (O4 = this.nativeEl).append) == null || C3.call(O4, T3), T3.localName === \"track\" && T3.default && (T3.kind === \"chapters\" || T3.kind === \"metadata\") && T3.track.mode === \"disabled\" && (T3.track.mode = \"hidden\");\n    }), f.forEach((g2) => g2.remove());\n  }, L2 = /* @__PURE__ */ new WeakSet(), wt3 = function(f) {\n    if (Object.prototype.hasOwnProperty.call(this, f)) {\n      let g2 = this[f];\n      delete this[f], this[f] = g2;\n    }\n  }, w2 = /* @__PURE__ */ new WeakSet(), xt3 = function(f, g2, T3) {\n    var O4, C3, D3, Pe4, Ie4, me5;\n    [\"id\", \"class\"].includes(f) || !p3.observedAttributes.includes(f) && this.constructor.observedAttributes.includes(f) || (T3 === null ? (C3 = (O4 = this.nativeEl).removeAttribute) == null || C3.call(O4, f) : ((Pe4 = (D3 = this.nativeEl).getAttribute) == null ? void 0 : Pe4.call(D3, f)) != T3 && ((me5 = (Ie4 = this.nativeEl).setAttribute) == null || me5.call(Ie4, f, T3)));\n  }, u(p3, I4), v3(p3, \"getTemplateHTML\", i2.endsWith(\"audio\") ? mi2 : pi2), v3(p3, \"shadowRootOptions\", { mode: \"open\" }), v3(p3, \"Events\", Et2), u(p3, E4, void 0), p3;\n};\nfunction gi2(t2) {\n  let i2 = [];\n  for (let e = Object.getPrototypeOf(t2); e && e !== HTMLElement.prototype; e = Object.getPrototypeOf(e)) i2.push(...Object.getOwnPropertyNames(e));\n  return i2;\n}\nfunction Nt2(t2) {\n  let i2 = \"\";\n  for (let e in t2) {\n    let s = t2[e];\n    s === \"\" ? i2 += ` ${e}` : i2 += ` ${e}=\"${s}\"`;\n  }\n  return i2;\n}\nfunction Ei2(t2) {\n  let i2 = {};\n  for (let e of t2) i2[e.name] = e.value;\n  return i2;\n}\nvar Pt2;\nvar Xe3 = Lt2((Pt2 = globalThis.HTMLElement) != null ? Pt2 : class {\n}, { tag: \"video\" });\nvar It2;\nvar zi2 = Lt2((It2 = globalThis.HTMLElement) != null ? It2 : class {\n}, { tag: \"audio\" });\nvar V2 = /* @__PURE__ */ new WeakMap();\nvar ge2 = class extends Error {\n};\nvar Je3 = class extends Error {\n};\nvar Dt2 = globalThis.WeakRef ? class extends Set {\n  add(t2) {\n    super.add(new WeakRef(t2));\n  }\n  forEach(t2) {\n    super.forEach((i2) => {\n      let e = i2.deref();\n      e && t2(e);\n    });\n  }\n} : Set;\nfunction Vt2(t2) {\n  var i2, e, s;\n  (e = (i2 = globalThis.chrome) == null ? void 0 : i2.cast) != null && e.isAvailable ? (s = globalThis.cast) != null && s.framework ? t2() : customElements.whenDefined(\"google-cast-button\").then(t2) : globalThis.__onGCastApiAvailable = () => {\n    customElements.whenDefined(\"google-cast-button\").then(t2);\n  };\n}\nfunction Gt3() {\n  return globalThis.chrome;\n}\nfunction Ft2() {\n  var e;\n  let t2 = \"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1\";\n  if ((e = globalThis.chrome) != null && e.cast || document.querySelector(`script[src=\"${t2}\"]`)) return;\n  let i2 = document.createElement(\"script\");\n  i2.src = t2, document.head.append(i2);\n}\nfunction W2() {\n  var t2, i2;\n  return (i2 = (t2 = globalThis.cast) == null ? void 0 : t2.framework) == null ? void 0 : i2.CastContext.getInstance();\n}\nfunction we2() {\n  var t2;\n  return (t2 = W2()) == null ? void 0 : t2.getCurrentSession();\n}\nfunction Qe3() {\n  var t2;\n  return (t2 = we2()) == null ? void 0 : t2.getSessionObj().media[0];\n}\nfunction qt2(t2) {\n  return new Promise((i2, e) => {\n    Qe3().editTracksInfo(t2, i2, e);\n  });\n}\nfunction Bt2(t2) {\n  return new Promise((i2, e) => {\n    Qe3().getStatus(t2, i2, e);\n  });\n}\nfunction vt2(t2) {\n  return W2().setOptions(__spreadValues(__spreadValues({}, bt2()), t2));\n}\nfunction bt2() {\n  return { receiverApplicationId: \"CC1AD845\", autoJoinPolicy: \"origin_scoped\", androidReceiverCompatible: false, language: \"en-US\", resumeSavedSession: true };\n}\nvar Ze2 = new Dt2();\nvar j2 = /* @__PURE__ */ new WeakSet();\nvar S2;\nVt2(() => {\n  var t2, i2, e, s;\n  if (!((i2 = (t2 = globalThis.chrome) == null ? void 0 : t2.cast) != null && i2.isAvailable)) {\n    console.debug(\"chrome.cast.isAvailable\", (s = (e = globalThis.chrome) == null ? void 0 : e.cast) == null ? void 0 : s.isAvailable);\n    return;\n  }\n  S2 || (S2 = cast.framework, W2().addEventListener(S2.CastContextEventType.CAST_STATE_CHANGED, (n2) => {\n    Ze2.forEach((l) => {\n      var a2, p3;\n      return (p3 = (a2 = V2.get(l)).onCastStateChanged) == null ? void 0 : p3.call(a2, n2);\n    });\n  }), W2().addEventListener(S2.CastContextEventType.SESSION_STATE_CHANGED, (n2) => {\n    Ze2.forEach((l) => {\n      var a2, p3;\n      return (p3 = (a2 = V2.get(l)).onSessionStateChanged) == null ? void 0 : p3.call(a2, n2);\n    });\n  }), Ze2.forEach((n2) => {\n    var l, a2;\n    return (a2 = (l = V2.get(n2)).init) == null ? void 0 : a2.call(l);\n  }));\n});\nvar Ut2 = 0;\nvar y2;\nvar xe3;\nvar P;\nvar G2;\nvar ae2;\nvar de3;\nvar K3;\nvar tt3;\nvar F3;\nvar oe3;\nvar it;\nvar Wt2;\nvar Ne3;\nvar Tt2;\nvar rt2;\nvar jt3;\nvar De3;\nvar yt;\nvar st3;\nvar Kt;\nvar Ve2;\nvar At2;\nvar et2 = class extends EventTarget {\n  constructor(e) {\n    super();\n    u(this, F3);\n    u(this, it);\n    u(this, Ne3);\n    u(this, rt2);\n    u(this, De3);\n    u(this, st3);\n    u(this, Ve2);\n    u(this, y2, void 0);\n    u(this, xe3, void 0);\n    u(this, P, void 0);\n    u(this, G2, void 0);\n    u(this, ae2, \"disconnected\");\n    u(this, de3, false);\n    u(this, K3, /* @__PURE__ */ new Set());\n    u(this, tt3, /* @__PURE__ */ new WeakMap());\n    h2(this, y2, e), Ze2.add(this), V2.set(this, { init: () => k2(this, De3, yt).call(this), onCastStateChanged: () => k2(this, Ne3, Tt2).call(this), onSessionStateChanged: () => k2(this, rt2, jt3).call(this), getCastPlayer: () => r9(this, F3, oe3) }), k2(this, De3, yt).call(this);\n  }\n  get state() {\n    return r9(this, ae2);\n  }\n  watchAvailability(e) {\n    return __async(this, null, function* () {\n      if (r9(this, y2).disableRemotePlayback) throw new ge2(\"disableRemotePlayback attribute is present.\");\n      return r9(this, tt3).set(e, ++Ut2), r9(this, K3).add(e), Ut2;\n    });\n  }\n  cancelWatchAvailability(e) {\n    return __async(this, null, function* () {\n      if (r9(this, y2).disableRemotePlayback) throw new ge2(\"disableRemotePlayback attribute is present.\");\n      e ? r9(this, K3).delete(e) : r9(this, K3).clear();\n    });\n  }\n  prompt() {\n    return __async(this, null, function* () {\n      var s, n2, l, a2;\n      if (r9(this, y2).disableRemotePlayback) throw new ge2(\"disableRemotePlayback attribute is present.\");\n      if (!((n2 = (s = globalThis.chrome) == null ? void 0 : s.cast) != null && n2.isAvailable)) throw new Je3(\"The RemotePlayback API is disabled on this platform.\");\n      let e = j2.has(r9(this, y2));\n      j2.add(r9(this, y2)), vt2(r9(this, y2).castOptions), Object.entries(r9(this, G2)).forEach(([p3, E4]) => {\n        r9(this, P).controller.addEventListener(p3, E4);\n      });\n      try {\n        yield W2().requestSession();\n      } catch (p3) {\n        if (p3 === \"cancel\") {\n          e || j2.delete(r9(this, y2));\n          return;\n        }\n        throw new Error(p3);\n      }\n      (a2 = (l = V2.get(r9(this, y2))) == null ? void 0 : l.loadOnPrompt) == null || a2.call(l);\n    });\n  }\n};\ny2 = /* @__PURE__ */ new WeakMap(), xe3 = /* @__PURE__ */ new WeakMap(), P = /* @__PURE__ */ new WeakMap(), G2 = /* @__PURE__ */ new WeakMap(), ae2 = /* @__PURE__ */ new WeakMap(), de3 = /* @__PURE__ */ new WeakMap(), K3 = /* @__PURE__ */ new WeakMap(), tt3 = /* @__PURE__ */ new WeakMap(), F3 = /* @__PURE__ */ new WeakSet(), oe3 = function() {\n  if (j2.has(r9(this, y2))) return r9(this, P);\n}, it = /* @__PURE__ */ new WeakSet(), Wt2 = function() {\n  j2.has(r9(this, y2)) && (Object.entries(r9(this, G2)).forEach(([e, s]) => {\n    r9(this, P).controller.removeEventListener(e, s);\n  }), j2.delete(r9(this, y2)), r9(this, y2).muted = r9(this, P).isMuted, r9(this, y2).currentTime = r9(this, P).savedPlayerState.currentTime, r9(this, P).savedPlayerState.isPaused === false && r9(this, y2).play());\n}, Ne3 = /* @__PURE__ */ new WeakSet(), Tt2 = function() {\n  let e = W2().getCastState();\n  if (j2.has(r9(this, y2)) && e === \"CONNECTING\" && (h2(this, ae2, \"connecting\"), this.dispatchEvent(new Event(\"connecting\"))), !r9(this, de3) && (e != null && e.includes(\"CONNECT\"))) {\n    h2(this, de3, true);\n    for (let s of r9(this, K3)) s(true);\n  } else if (r9(this, de3) && (!e || e === \"NO_DEVICES_AVAILABLE\")) {\n    h2(this, de3, false);\n    for (let s of r9(this, K3)) s(false);\n  }\n}, rt2 = /* @__PURE__ */ new WeakSet(), jt3 = function() {\n  return __async(this, null, function* () {\n    var s;\n    let { SESSION_RESUMED: e } = S2.SessionState;\n    if (W2().getSessionState() === e && r9(this, y2).castSrc === ((s = Qe3()) == null ? void 0 : s.media.contentId)) {\n      j2.add(r9(this, y2)), Object.entries(r9(this, G2)).forEach(([n2, l]) => {\n        r9(this, P).controller.addEventListener(n2, l);\n      });\n      try {\n        yield Bt2(new chrome.cast.media.GetStatusRequest());\n      } catch (n2) {\n        console.error(n2);\n      }\n      r9(this, G2)[S2.RemotePlayerEventType.IS_PAUSED_CHANGED](), r9(this, G2)[S2.RemotePlayerEventType.PLAYER_STATE_CHANGED]();\n    }\n  });\n}, De3 = /* @__PURE__ */ new WeakSet(), yt = function() {\n  !S2 || r9(this, xe3) || (h2(this, xe3, true), vt2(r9(this, y2).castOptions), r9(this, y2).textTracks.addEventListener(\"change\", () => k2(this, Ve2, At2).call(this)), k2(this, Ne3, Tt2).call(this), h2(this, P, new S2.RemotePlayer()), new S2.RemotePlayerController(r9(this, P)), h2(this, G2, { [S2.RemotePlayerEventType.IS_CONNECTED_CHANGED]: ({ value: e }) => {\n    e === true ? (h2(this, ae2, \"connected\"), this.dispatchEvent(new Event(\"connect\"))) : (k2(this, it, Wt2).call(this), h2(this, ae2, \"disconnected\"), this.dispatchEvent(new Event(\"disconnect\")));\n  }, [S2.RemotePlayerEventType.DURATION_CHANGED]: () => {\n    r9(this, y2).dispatchEvent(new Event(\"durationchange\"));\n  }, [S2.RemotePlayerEventType.VOLUME_LEVEL_CHANGED]: () => {\n    r9(this, y2).dispatchEvent(new Event(\"volumechange\"));\n  }, [S2.RemotePlayerEventType.IS_MUTED_CHANGED]: () => {\n    r9(this, y2).dispatchEvent(new Event(\"volumechange\"));\n  }, [S2.RemotePlayerEventType.CURRENT_TIME_CHANGED]: () => {\n    var e;\n    (e = r9(this, F3, oe3)) != null && e.isMediaLoaded && r9(this, y2).dispatchEvent(new Event(\"timeupdate\"));\n  }, [S2.RemotePlayerEventType.VIDEO_INFO_CHANGED]: () => {\n    r9(this, y2).dispatchEvent(new Event(\"resize\"));\n  }, [S2.RemotePlayerEventType.IS_PAUSED_CHANGED]: () => {\n    r9(this, y2).dispatchEvent(new Event(this.paused ? \"pause\" : \"play\"));\n  }, [S2.RemotePlayerEventType.PLAYER_STATE_CHANGED]: () => {\n    var e, s;\n    ((e = r9(this, F3, oe3)) == null ? void 0 : e.playerState) !== chrome.cast.media.PlayerState.PAUSED && r9(this, y2).dispatchEvent(new Event({ [chrome.cast.media.PlayerState.PLAYING]: \"playing\", [chrome.cast.media.PlayerState.BUFFERING]: \"waiting\", [chrome.cast.media.PlayerState.IDLE]: \"emptied\" }[(s = r9(this, F3, oe3)) == null ? void 0 : s.playerState]));\n  }, [S2.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED]: () => __async(this, null, function* () {\n    var e;\n    (e = r9(this, F3, oe3)) != null && e.isMediaLoaded && (yield Promise.resolve(), k2(this, st3, Kt).call(this));\n  }) }));\n}, st3 = /* @__PURE__ */ new WeakSet(), Kt = function() {\n  k2(this, Ve2, At2).call(this);\n}, Ve2 = /* @__PURE__ */ new WeakSet(), At2 = function() {\n  return __async(this, null, function* () {\n    var o, m3, A3, He3, _3;\n    if (!r9(this, F3, oe3)) return;\n    let s = ((m3 = (o = r9(this, P).mediaInfo) == null ? void 0 : o.tracks) != null ? m3 : []).filter(({ type: R2 }) => R2 === chrome.cast.media.TrackType.TEXT), n2 = [...r9(this, y2).textTracks].filter(({ kind: R2 }) => R2 === \"subtitles\" || R2 === \"captions\"), l = s.map(({ language: R2, name: L2, trackId: M4 }) => {\n      var N3;\n      let { mode: w2 } = (N3 = n2.find((St3) => St3.language === R2 && St3.label === L2)) != null ? N3 : {};\n      return w2 ? { mode: w2, trackId: M4 } : false;\n    }).filter(Boolean), p3 = l.filter(({ mode: R2 }) => R2 !== \"showing\").map(({ trackId: R2 }) => R2), E4 = l.find(({ mode: R2 }) => R2 === \"showing\"), I4 = (_3 = (He3 = (A3 = we2()) == null ? void 0 : A3.getSessionObj().media[0]) == null ? void 0 : He3.activeTrackIds) != null ? _3 : [], U4 = I4;\n    if (I4.length && (U4 = U4.filter((R2) => !p3.includes(R2))), E4 != null && E4.trackId && (U4 = [...U4, E4.trackId]), U4 = [...new Set(U4)], !((R2, L2) => R2.length === L2.length && R2.every((M4) => L2.includes(M4)))(I4, U4)) try {\n      let R2 = new chrome.cast.media.EditTracksInfoRequest(U4);\n      yield qt2(R2);\n    } catch (R2) {\n      console.error(R2);\n    }\n  });\n};\nvar Yt = (t2) => {\n  var i2, e, s, n2, l, a2, b4, E4, Ht3;\n  return e = class _this extends t2 {\n    constructor() {\n      super(...arguments);\n      u(this, a2);\n      u(this, E4);\n      u(this, s, { paused: false });\n      u(this, n2, bt2());\n      u(this, l, void 0);\n    }\n    get remote() {\n      return r9(this, l) ? r9(this, l) : Gt3() ? (Ft2(), V2.set(this, { loadOnPrompt: () => k2(this, E4, Ht3).call(this) }), h2(this, l, new et2(this))) : super.remote;\n    }\n    attributeChangedCallback(o, m3, A3) {\n      if (super.attributeChangedCallback(o, m3, A3), o === \"cast-receiver\" && A3) {\n        r9(this, n2).receiverApplicationId = A3;\n        return;\n      }\n      if (r9(this, a2, b4)) switch (o) {\n        case \"cast-stream-type\":\n        case \"cast-src\":\n          this.load();\n          break;\n      }\n    }\n    load() {\n      return __async(this, null, function* () {\n        var R2, L2;\n        if (!r9(this, a2, b4)) return __superGet(_this.prototype, this, \"load\").call(this);\n        let o = new chrome.cast.media.MediaInfo(this.castSrc, this.castContentType), m3 = [...this.querySelectorAll(\"track\")].filter(({ kind: M4, src: w2 }) => w2 && (M4 === \"subtitles\" || M4 === \"captions\")), A3 = [], He3 = 0;\n        m3.length && (o.tracks = m3.map((M4) => {\n          let w2 = ++He3;\n          A3.length === 0 && M4.track.mode === \"showing\" && A3.push(w2);\n          let N3 = new chrome.cast.media.Track(w2, chrome.cast.media.TrackType.TEXT);\n          return N3.trackContentId = M4.src, N3.trackContentType = \"text/vtt\", N3.subtype = M4.kind === \"captions\" ? chrome.cast.media.TextTrackType.CAPTIONS : chrome.cast.media.TextTrackType.SUBTITLES, N3.name = M4.label, N3.language = M4.srclang, N3;\n        })), this.castStreamType === \"live\" ? o.streamType = chrome.cast.media.StreamType.LIVE : o.streamType = chrome.cast.media.StreamType.BUFFERED, o.metadata = new chrome.cast.media.GenericMediaMetadata(), o.metadata.title = this.title, o.metadata.images = [{ url: this.poster }];\n        let _3 = new chrome.cast.media.LoadRequest(o);\n        _3.currentTime = (R2 = __superGet(_this.prototype, this, \"currentTime\")) != null ? R2 : 0, _3.autoplay = !r9(this, s).paused, _3.activeTrackIds = A3, yield (L2 = we2()) == null ? void 0 : L2.loadMedia(_3), this.dispatchEvent(new Event(\"volumechange\"));\n      });\n    }\n    play() {\n      var o;\n      if (r9(this, a2, b4)) {\n        r9(this, a2, b4).isPaused && ((o = r9(this, a2, b4).controller) == null || o.playOrPause());\n        return;\n      }\n      return super.play();\n    }\n    pause() {\n      var o;\n      if (r9(this, a2, b4)) {\n        r9(this, a2, b4).isPaused || (o = r9(this, a2, b4).controller) == null || o.playOrPause();\n        return;\n      }\n      super.pause();\n    }\n    get castOptions() {\n      return r9(this, n2);\n    }\n    get castReceiver() {\n      var o;\n      return (o = this.getAttribute(\"cast-receiver\")) != null ? o : void 0;\n    }\n    set castReceiver(o) {\n      this.castReceiver != o && this.setAttribute(\"cast-receiver\", `${o}`);\n    }\n    get castSrc() {\n      var o, m3, A3;\n      return (A3 = (m3 = this.getAttribute(\"cast-src\")) != null ? m3 : (o = this.querySelector(\"source\")) == null ? void 0 : o.src) != null ? A3 : this.currentSrc;\n    }\n    set castSrc(o) {\n      this.castSrc != o && this.setAttribute(\"cast-src\", `${o}`);\n    }\n    get castContentType() {\n      var o;\n      return (o = this.getAttribute(\"cast-content-type\")) != null ? o : void 0;\n    }\n    set castContentType(o) {\n      this.setAttribute(\"cast-content-type\", `${o}`);\n    }\n    get castStreamType() {\n      var o, m3;\n      return (m3 = (o = this.getAttribute(\"cast-stream-type\")) != null ? o : this.streamType) != null ? m3 : void 0;\n    }\n    set castStreamType(o) {\n      this.setAttribute(\"cast-stream-type\", `${o}`);\n    }\n    get readyState() {\n      if (r9(this, a2, b4)) switch (r9(this, a2, b4).playerState) {\n        case chrome.cast.media.PlayerState.IDLE:\n          return 0;\n        case chrome.cast.media.PlayerState.BUFFERING:\n          return 2;\n        default:\n          return 3;\n      }\n      return super.readyState;\n    }\n    get paused() {\n      return r9(this, a2, b4) ? r9(this, a2, b4).isPaused : super.paused;\n    }\n    get muted() {\n      var o;\n      return r9(this, a2, b4) ? (o = r9(this, a2, b4)) == null ? void 0 : o.isMuted : super.muted;\n    }\n    set muted(o) {\n      var m3;\n      if (r9(this, a2, b4)) {\n        (o && !r9(this, a2, b4).isMuted || !o && r9(this, a2, b4).isMuted) && ((m3 = r9(this, a2, b4).controller) == null || m3.muteOrUnmute());\n        return;\n      }\n      super.muted = o;\n    }\n    get volume() {\n      var o, m3;\n      return r9(this, a2, b4) ? (m3 = (o = r9(this, a2, b4)) == null ? void 0 : o.volumeLevel) != null ? m3 : 1 : super.volume;\n    }\n    set volume(o) {\n      var m3;\n      if (r9(this, a2, b4)) {\n        r9(this, a2, b4).volumeLevel = +o, (m3 = r9(this, a2, b4).controller) == null || m3.setVolumeLevel();\n        return;\n      }\n      super.volume = o;\n    }\n    get duration() {\n      var o, m3, A3;\n      return r9(this, a2, b4) && ((o = r9(this, a2, b4)) != null && o.isMediaLoaded) ? (A3 = (m3 = r9(this, a2, b4)) == null ? void 0 : m3.duration) != null ? A3 : NaN : super.duration;\n    }\n    get currentTime() {\n      var o, m3, A3;\n      return r9(this, a2, b4) && ((o = r9(this, a2, b4)) != null && o.isMediaLoaded) ? (A3 = (m3 = r9(this, a2, b4)) == null ? void 0 : m3.currentTime) != null ? A3 : 0 : super.currentTime;\n    }\n    set currentTime(o) {\n      var m3;\n      if (r9(this, a2, b4)) {\n        r9(this, a2, b4).currentTime = o, (m3 = r9(this, a2, b4).controller) == null || m3.seek();\n        return;\n      }\n      super.currentTime = o;\n    }\n  }, s = /* @__PURE__ */ new WeakMap(), n2 = /* @__PURE__ */ new WeakMap(), l = /* @__PURE__ */ new WeakMap(), a2 = /* @__PURE__ */ new WeakSet(), b4 = function() {\n    var o, m3;\n    return (m3 = (o = V2.get(this.remote)) == null ? void 0 : o.getCastPlayer) == null ? void 0 : m3.call(o);\n  }, E4 = /* @__PURE__ */ new WeakSet(), Ht3 = function() {\n    return __async(this, null, function* () {\n      r9(this, s).paused = $e3(e.prototype, this, \"paused\"), $e3(e.prototype, this, \"pause\").call(this), this.muted = $e3(e.prototype, this, \"muted\");\n      try {\n        yield this.load();\n      } catch (o) {\n        console.error(o);\n      }\n    });\n  }, v3(e, \"observedAttributes\", [...(i2 = t2.observedAttributes) != null ? i2 : [], \"cast-src\", \"cast-content-type\", \"cast-stream-type\", \"cast-receiver\"]), e;\n};\nvar q2 = class extends Event {\n  constructor(e, s) {\n    super(e);\n    v3(this, \"track\");\n    this.track = s.track;\n  }\n};\nvar kt2 = /* @__PURE__ */ new WeakMap();\nfunction d2(t2) {\n  var i2;\n  return (i2 = kt2.get(t2)) != null ? i2 : vi2(t2, {});\n}\nfunction vi2(t2, i2) {\n  let e = kt2.get(t2);\n  return e || kt2.set(t2, e = {}), Object.assign(e, i2);\n}\nfunction nt3(t2, i2) {\n  let e = t2.videoTracks;\n  d2(i2).media = t2, d2(i2).renditionSet || (d2(i2).renditionSet = /* @__PURE__ */ new Set());\n  let s = d2(e).trackSet;\n  s.add(i2);\n  let n2 = s.size - 1;\n  n2 in ue3.prototype || Object.defineProperty(ue3.prototype, n2, { get() {\n    return [...d2(this).trackSet][n2];\n  } }), queueMicrotask(() => {\n    e.dispatchEvent(new q2(\"addtrack\", { track: i2 }));\n  });\n}\nfunction ot3(t2) {\n  var s;\n  let i2 = (s = d2(t2).media) == null ? void 0 : s.videoTracks;\n  if (!i2) return;\n  d2(i2).trackSet.delete(t2), queueMicrotask(() => {\n    i2.dispatchEvent(new q2(\"removetrack\", { track: t2 }));\n  });\n}\nfunction $t(t2) {\n  var s;\n  let i2 = (s = d2(t2).media.videoTracks) != null ? s : [], e = false;\n  for (let n2 of i2) n2 !== t2 && (n2.selected = false, e = true);\n  if (e) {\n    if (d2(i2).changeRequested) return;\n    d2(i2).changeRequested = true, queueMicrotask(() => {\n      delete d2(i2).changeRequested, i2.dispatchEvent(new Event(\"change\"));\n    });\n  }\n}\nvar Y2;\nvar H3;\nvar $3;\nvar ce3;\nvar Ge2;\nvar ue3 = class extends EventTarget {\n  constructor() {\n    super();\n    u(this, ce3);\n    u(this, Y2, void 0);\n    u(this, H3, void 0);\n    u(this, $3, void 0);\n    d2(this).trackSet = /* @__PURE__ */ new Set();\n  }\n  [Symbol.iterator]() {\n    return r9(this, ce3, Ge2).values();\n  }\n  get length() {\n    return r9(this, ce3, Ge2).size;\n  }\n  getTrackById(e) {\n    var s;\n    return (s = [...r9(this, ce3, Ge2)].find((n2) => n2.id === e)) != null ? s : null;\n  }\n  get selectedIndex() {\n    return [...r9(this, ce3, Ge2)].findIndex((e) => e.selected);\n  }\n  get onaddtrack() {\n    return r9(this, Y2);\n  }\n  set onaddtrack(e) {\n    r9(this, Y2) && (this.removeEventListener(\"addtrack\", r9(this, Y2)), h2(this, Y2, void 0)), typeof e == \"function\" && (h2(this, Y2, e), this.addEventListener(\"addtrack\", e));\n  }\n  get onremovetrack() {\n    return r9(this, H3);\n  }\n  set onremovetrack(e) {\n    r9(this, H3) && (this.removeEventListener(\"removetrack\", r9(this, H3)), h2(this, H3, void 0)), typeof e == \"function\" && (h2(this, H3, e), this.addEventListener(\"removetrack\", e));\n  }\n  get onchange() {\n    return r9(this, $3);\n  }\n  set onchange(e) {\n    r9(this, $3) && (this.removeEventListener(\"change\", r9(this, $3)), h2(this, $3, void 0)), typeof e == \"function\" && (h2(this, $3, e), this.addEventListener(\"change\", e));\n  }\n};\nY2 = /* @__PURE__ */ new WeakMap(), H3 = /* @__PURE__ */ new WeakMap(), $3 = /* @__PURE__ */ new WeakMap(), ce3 = /* @__PURE__ */ new WeakSet(), Ge2 = function() {\n  return d2(this).trackSet;\n};\nvar B3 = class extends Event {\n  constructor(e, s) {\n    super(e);\n    v3(this, \"rendition\");\n    this.rendition = s.rendition;\n  }\n};\nfunction zt2(t2, i2) {\n  let e = d2(t2).media.videoRenditions;\n  d2(i2).media = d2(t2).media, d2(i2).track = t2;\n  let s = d2(t2).renditionSet;\n  s.add(i2);\n  let n2 = s.size - 1;\n  n2 in he3.prototype || Object.defineProperty(he3.prototype, n2, { get() {\n    return Ee3(this)[n2];\n  } }), queueMicrotask(() => {\n    t2.selected && e.dispatchEvent(new B3(\"addrendition\", { rendition: i2 }));\n  });\n}\nfunction Xt3(t2) {\n  let i2 = d2(t2).media.videoRenditions, e = d2(t2).track;\n  d2(e).renditionSet.delete(t2), queueMicrotask(() => {\n    d2(t2).track.selected && i2.dispatchEvent(new B3(\"removerendition\", { rendition: t2 }));\n  });\n}\nfunction Jt3(t2) {\n  let i2 = d2(t2).media.videoRenditions;\n  !i2 || d2(i2).changeRequested || (d2(i2).changeRequested = true, queueMicrotask(() => {\n    delete d2(i2).changeRequested, d2(t2).track.selected && i2.dispatchEvent(new Event(\"change\"));\n  }));\n}\nfunction Ee3(t2) {\n  return [...d2(t2).media.videoTracks].filter((e) => e.selected).flatMap((e) => [...d2(e).renditionSet]);\n}\nvar z;\nvar X3;\nvar J2;\nvar he3 = class extends EventTarget {\n  constructor() {\n    super(...arguments);\n    u(this, z, void 0);\n    u(this, X3, void 0);\n    u(this, J2, void 0);\n  }\n  [Symbol.iterator]() {\n    return Ee3(this).values();\n  }\n  get length() {\n    return Ee3(this).length;\n  }\n  getRenditionById(e) {\n    var s;\n    return (s = Ee3(this).find((n2) => `${n2.id}` == `${e}`)) != null ? s : null;\n  }\n  get selectedIndex() {\n    return Ee3(this).findIndex((e) => e.selected);\n  }\n  set selectedIndex(e) {\n    for (let [s, n2] of Ee3(this).entries()) n2.selected = s === e;\n  }\n  get onaddrendition() {\n    return r9(this, z);\n  }\n  set onaddrendition(e) {\n    r9(this, z) && (this.removeEventListener(\"addrendition\", r9(this, z)), h2(this, z, void 0)), typeof e == \"function\" && (h2(this, z, e), this.addEventListener(\"addrendition\", e));\n  }\n  get onremoverendition() {\n    return r9(this, X3);\n  }\n  set onremoverendition(e) {\n    r9(this, X3) && (this.removeEventListener(\"removerendition\", r9(this, X3)), h2(this, X3, void 0)), typeof e == \"function\" && (h2(this, X3, e), this.addEventListener(\"removerendition\", e));\n  }\n  get onchange() {\n    return r9(this, J2);\n  }\n  set onchange(e) {\n    r9(this, J2) && (this.removeEventListener(\"change\", r9(this, J2)), h2(this, J2, void 0)), typeof e == \"function\" && (h2(this, J2, e), this.addEventListener(\"change\", e));\n  }\n};\nz = /* @__PURE__ */ new WeakMap(), X3 = /* @__PURE__ */ new WeakMap(), J2 = /* @__PURE__ */ new WeakMap();\nvar ve3;\nvar Fe2 = class {\n  constructor() {\n    v3(this, \"src\");\n    v3(this, \"id\");\n    v3(this, \"width\");\n    v3(this, \"height\");\n    v3(this, \"bitrate\");\n    v3(this, \"frameRate\");\n    v3(this, \"codec\");\n    u(this, ve3, false);\n  }\n  get selected() {\n    return r9(this, ve3);\n  }\n  set selected(i2) {\n    r9(this, ve3) !== i2 && (h2(this, ve3, i2), Jt3(this));\n  }\n};\nve3 = /* @__PURE__ */ new WeakMap();\nvar be2;\nvar Te2 = class {\n  constructor() {\n    v3(this, \"id\");\n    v3(this, \"kind\");\n    v3(this, \"label\", \"\");\n    v3(this, \"language\", \"\");\n    v3(this, \"sourceBuffer\");\n    u(this, be2, false);\n  }\n  addRendition(i2, e, s, n2, l, a2) {\n    let p3 = new Fe2();\n    return p3.src = i2, p3.width = e, p3.height = s, p3.frameRate = a2, p3.bitrate = l, p3.codec = n2, zt2(this, p3), p3;\n  }\n  removeRendition(i2) {\n    Xt3(i2);\n  }\n  get selected() {\n    return r9(this, be2);\n  }\n  set selected(i2) {\n    r9(this, be2) !== i2 && (h2(this, be2, i2), i2 === true && $t(this));\n  }\n};\nbe2 = /* @__PURE__ */ new WeakMap();\nfunction Qt3(t2, i2) {\n  let e = d2(t2).media.audioRenditions;\n  d2(i2).media = d2(t2).media, d2(i2).track = t2;\n  let s = d2(t2).renditionSet;\n  s.add(i2);\n  let n2 = s.size - 1;\n  n2 in le3.prototype || Object.defineProperty(le3.prototype, n2, { get() {\n    return ye3(this)[n2];\n  } }), queueMicrotask(() => {\n    t2.enabled && e.dispatchEvent(new B3(\"addrendition\", { rendition: i2 }));\n  });\n}\nfunction Zt2(t2) {\n  let i2 = d2(t2).media.audioRenditions, e = d2(t2).track;\n  d2(e).renditionSet.delete(t2), queueMicrotask(() => {\n    d2(t2).track.enabled && i2.dispatchEvent(new B3(\"removerendition\", { rendition: t2 }));\n  });\n}\nfunction ei2(t2) {\n  let i2 = d2(t2).media.audioRenditions;\n  !i2 || d2(i2).changeRequested || (d2(i2).changeRequested = true, queueMicrotask(() => {\n    delete d2(i2).changeRequested, d2(t2).track.enabled && i2.dispatchEvent(new Event(\"change\"));\n  }));\n}\nfunction ye3(t2) {\n  return [...d2(t2).media.audioTracks].filter((e) => e.enabled).flatMap((e) => [...d2(e).renditionSet]);\n}\nvar Q2;\nvar Z3;\nvar ee3;\nvar le3 = class extends EventTarget {\n  constructor() {\n    super(...arguments);\n    u(this, Q2, void 0);\n    u(this, Z3, void 0);\n    u(this, ee3, void 0);\n  }\n  [Symbol.iterator]() {\n    return ye3(this).values();\n  }\n  get length() {\n    return ye3(this).length;\n  }\n  getRenditionById(e) {\n    var s;\n    return (s = ye3(this).find((n2) => `${n2.id}` == `${e}`)) != null ? s : null;\n  }\n  get selectedIndex() {\n    return ye3(this).findIndex((e) => e.selected);\n  }\n  set selectedIndex(e) {\n    for (let [s, n2] of ye3(this).entries()) n2.selected = s === e;\n  }\n  get onaddrendition() {\n    return r9(this, Q2);\n  }\n  set onaddrendition(e) {\n    r9(this, Q2) && (this.removeEventListener(\"addrendition\", r9(this, Q2)), h2(this, Q2, void 0)), typeof e == \"function\" && (h2(this, Q2, e), this.addEventListener(\"addrendition\", e));\n  }\n  get onremoverendition() {\n    return r9(this, Z3);\n  }\n  set onremoverendition(e) {\n    r9(this, Z3) && (this.removeEventListener(\"removerendition\", r9(this, Z3)), h2(this, Z3, void 0)), typeof e == \"function\" && (h2(this, Z3, e), this.addEventListener(\"removerendition\", e));\n  }\n  get onchange() {\n    return r9(this, ee3);\n  }\n  set onchange(e) {\n    r9(this, ee3) && (this.removeEventListener(\"change\", r9(this, ee3)), h2(this, ee3, void 0)), typeof e == \"function\" && (h2(this, ee3, e), this.addEventListener(\"change\", e));\n  }\n};\nQ2 = /* @__PURE__ */ new WeakMap(), Z3 = /* @__PURE__ */ new WeakMap(), ee3 = /* @__PURE__ */ new WeakMap();\nvar Ae;\nvar qe3 = class {\n  constructor() {\n    v3(this, \"src\");\n    v3(this, \"id\");\n    v3(this, \"bitrate\");\n    v3(this, \"codec\");\n    u(this, Ae, false);\n  }\n  get selected() {\n    return r9(this, Ae);\n  }\n  set selected(i2) {\n    r9(this, Ae) !== i2 && (h2(this, Ae, i2), ei2(this));\n  }\n};\nAe = /* @__PURE__ */ new WeakMap();\nfunction dt3(t2, i2) {\n  let e = t2.audioTracks;\n  d2(i2).media = t2, d2(i2).renditionSet || (d2(i2).renditionSet = /* @__PURE__ */ new Set());\n  let s = d2(e).trackSet;\n  s.add(i2);\n  let n2 = s.size - 1;\n  n2 in fe3.prototype || Object.defineProperty(fe3.prototype, n2, { get() {\n    return [...d2(this).trackSet][n2];\n  } }), queueMicrotask(() => {\n    e.dispatchEvent(new q2(\"addtrack\", { track: i2 }));\n  });\n}\nfunction ct2(t2) {\n  var s;\n  let i2 = (s = d2(t2).media) == null ? void 0 : s.audioTracks;\n  if (!i2) return;\n  d2(i2).trackSet.delete(t2), queueMicrotask(() => {\n    i2.dispatchEvent(new q2(\"removetrack\", { track: t2 }));\n  });\n}\nfunction ti2(t2) {\n  let i2 = d2(t2).media.audioTracks;\n  !i2 || d2(i2).changeRequested || (d2(i2).changeRequested = true, queueMicrotask(() => {\n    delete d2(i2).changeRequested, i2.dispatchEvent(new Event(\"change\"));\n  }));\n}\nvar te3;\nvar ie3;\nvar re2;\nvar ke3;\nvar at3;\nvar fe3 = class extends EventTarget {\n  constructor() {\n    super();\n    u(this, ke3);\n    u(this, te3, void 0);\n    u(this, ie3, void 0);\n    u(this, re2, void 0);\n    d2(this).trackSet = /* @__PURE__ */ new Set();\n  }\n  [Symbol.iterator]() {\n    return r9(this, ke3, at3).values();\n  }\n  get length() {\n    return r9(this, ke3, at3).size;\n  }\n  getTrackById(e) {\n    var s;\n    return (s = [...r9(this, ke3, at3)].find((n2) => n2.id === e)) != null ? s : null;\n  }\n  get onaddtrack() {\n    return r9(this, te3);\n  }\n  set onaddtrack(e) {\n    r9(this, te3) && (this.removeEventListener(\"addtrack\", r9(this, te3)), h2(this, te3, void 0)), typeof e == \"function\" && (h2(this, te3, e), this.addEventListener(\"addtrack\", e));\n  }\n  get onremovetrack() {\n    return r9(this, ie3);\n  }\n  set onremovetrack(e) {\n    r9(this, ie3) && (this.removeEventListener(\"removetrack\", r9(this, ie3)), h2(this, ie3, void 0)), typeof e == \"function\" && (h2(this, ie3, e), this.addEventListener(\"removetrack\", e));\n  }\n  get onchange() {\n    return r9(this, re2);\n  }\n  set onchange(e) {\n    r9(this, re2) && (this.removeEventListener(\"change\", r9(this, re2)), h2(this, re2, void 0)), typeof e == \"function\" && (h2(this, re2, e), this.addEventListener(\"change\", e));\n  }\n};\nte3 = /* @__PURE__ */ new WeakMap(), ie3 = /* @__PURE__ */ new WeakMap(), re2 = /* @__PURE__ */ new WeakMap(), ke3 = /* @__PURE__ */ new WeakSet(), at3 = function() {\n  return d2(this).trackSet;\n};\nvar Re2;\nvar Se = class {\n  constructor() {\n    v3(this, \"id\");\n    v3(this, \"kind\");\n    v3(this, \"label\", \"\");\n    v3(this, \"language\", \"\");\n    v3(this, \"sourceBuffer\");\n    u(this, Re2, false);\n  }\n  addRendition(i2, e, s) {\n    let n2 = new qe3();\n    return n2.src = i2, n2.codec = e, n2.bitrate = s, Qt3(this, n2), n2;\n  }\n  removeRendition(i2) {\n    Zt2(i2);\n  }\n  get enabled() {\n    return r9(this, Re2);\n  }\n  set enabled(i2) {\n    r9(this, Re2) !== i2 && (h2(this, Re2, i2), ti2(this));\n  }\n};\nRe2 = /* @__PURE__ */ new WeakMap();\nvar ii2 = ut2(globalThis.HTMLMediaElement, \"video\");\nvar ri2 = ut2(globalThis.HTMLMediaElement, \"audio\");\nfunction si2(t2) {\n  if (!(t2 != null && t2.prototype)) return t2;\n  let i2 = ut2(t2, \"video\");\n  (!i2 || `${i2}`.includes(\"[native code]\")) && Object.defineProperty(t2.prototype, \"videoTracks\", { get() {\n    return bi2(this);\n  } });\n  let e = ut2(t2, \"audio\");\n  (!e || `${e}`.includes(\"[native code]\")) && Object.defineProperty(t2.prototype, \"audioTracks\", { get() {\n    return Ti2(this);\n  } }), \"addVideoTrack\" in t2.prototype || (t2.prototype.addVideoTrack = function(l, a2 = \"\", p3 = \"\") {\n    let E4 = new Te2();\n    return E4.kind = l, E4.label = a2, E4.language = p3, nt3(this, E4), E4;\n  }), \"removeVideoTrack\" in t2.prototype || (t2.prototype.removeVideoTrack = ot3), \"addAudioTrack\" in t2.prototype || (t2.prototype.addAudioTrack = function(l, a2 = \"\", p3 = \"\") {\n    let E4 = new Se();\n    return E4.kind = l, E4.label = a2, E4.language = p3, dt3(this, E4), E4;\n  }), \"removeAudioTrack\" in t2.prototype || (t2.prototype.removeAudioTrack = ct2), \"videoRenditions\" in t2.prototype || Object.defineProperty(t2.prototype, \"videoRenditions\", { get() {\n    return s(this);\n  } });\n  let s = (l) => {\n    let a2 = d2(l).videoRenditions;\n    return a2 || (a2 = new he3(), d2(a2).media = l, d2(l).videoRenditions = a2), a2;\n  };\n  \"audioRenditions\" in t2.prototype || Object.defineProperty(t2.prototype, \"audioRenditions\", { get() {\n    return n2(this);\n  } });\n  let n2 = (l) => {\n    let a2 = d2(l).audioRenditions;\n    return a2 || (a2 = new le3(), d2(a2).media = l, d2(l).audioRenditions = a2), a2;\n  };\n  return t2;\n}\nfunction ut2(t2, i2) {\n  var e;\n  if (t2 != null && t2.prototype) return (e = Object.getOwnPropertyDescriptor(t2.prototype, `${i2}Tracks`)) == null ? void 0 : e.get;\n}\nfunction bi2(t2) {\n  var e;\n  let i2 = d2(t2).videoTracks;\n  if (!i2 && (i2 = new ue3(), d2(t2).videoTracks = i2, ii2)) {\n    let s = ii2.call((e = t2.nativeEl) != null ? e : t2);\n    for (let n2 of s) nt3(t2, n2);\n    s.addEventListener(\"change\", () => {\n      i2.dispatchEvent(new Event(\"change\"));\n    }), s.addEventListener(\"addtrack\", (n2) => {\n      if ([...i2].some((l) => l instanceof Te2)) {\n        for (let l of s) ot3(l);\n        return;\n      }\n      nt3(t2, n2.track);\n    }), s.addEventListener(\"removetrack\", (n2) => {\n      ot3(n2.track);\n    });\n  }\n  return i2;\n}\nfunction Ti2(t2) {\n  var e;\n  let i2 = d2(t2).audioTracks;\n  if (!i2 && (i2 = new fe3(), d2(t2).audioTracks = i2, ri2)) {\n    let s = ri2.call((e = t2.nativeEl) != null ? e : t2);\n    for (let n2 of s) dt3(t2, n2);\n    s.addEventListener(\"change\", () => {\n      i2.dispatchEvent(new Event(\"change\"));\n    }), s.addEventListener(\"addtrack\", (n2) => {\n      if ([...i2].some((l) => l instanceof Se)) {\n        for (let l of s) ct2(l);\n        return;\n      }\n      dt3(t2, n2.track);\n    }), s.addEventListener(\"removetrack\", (n2) => {\n      ct2(n2.track);\n    });\n  }\n  return i2;\n}\nEt2.push(\"castchange\", \"entercast\", \"leavecast\");\nvar c = { BEACON_COLLECTION_DOMAIN: \"beacon-collection-domain\", CUSTOM_DOMAIN: \"custom-domain\", DEBUG: \"debug\", DISABLE_TRACKING: \"disable-tracking\", DISABLE_COOKIES: \"disable-cookies\", DRM_TOKEN: \"drm-token\", ENV_KEY: \"env-key\", MAX_RESOLUTION: \"max-resolution\", MIN_RESOLUTION: \"min-resolution\", RENDITION_ORDER: \"rendition-order\", PROGRAM_START_TIME: \"program-start-time\", PROGRAM_END_TIME: \"program-end-time\", METADATA_URL: \"metadata-url\", PLAYBACK_ID: \"playback-id\", PLAYER_SOFTWARE_NAME: \"player-software-name\", PLAYER_SOFTWARE_VERSION: \"player-software-version\", PREFER_CMCD: \"prefer-cmcd\", PREFER_PLAYBACK: \"prefer-playback\", START_TIME: \"start-time\", STREAM_TYPE: \"stream-type\", TARGET_LIVE_WINDOW: \"target-live-window\", LIVE_EDGE_OFFSET: \"live-edge-offset\", TYPE: \"type\" };\nvar qi2 = Object.values(c);\nvar Bi2 = _t2();\nvar Ui2 = \"mux-video\";\nvar x2;\nvar Ce3;\nvar Ue2;\nvar Oe3;\nvar We3;\nvar je3;\nvar Ke3;\nvar Ye3;\nvar _e3;\nvar lt3;\nvar Rt2 = class extends Xe3 {\n  constructor() {\n    super();\n    u(this, _e3);\n    u(this, x2, void 0);\n    u(this, Ce3, void 0);\n    u(this, Ue2, void 0);\n    u(this, Oe3, {});\n    u(this, We3, void 0);\n    u(this, je3, void 0);\n    u(this, Ke3, void 0);\n    u(this, Ye3, void 0);\n    h2(this, Ue2, Xt2());\n  }\n  static get observedAttributes() {\n    var e;\n    return [...qi2, ...(e = Xe3.observedAttributes) != null ? e : []];\n  }\n  get preferCmcd() {\n    var e;\n    return (e = this.getAttribute(c.PREFER_CMCD)) != null ? e : void 0;\n  }\n  set preferCmcd(e) {\n    e !== this.preferCmcd && (e ? dt2.includes(e) ? this.setAttribute(c.PREFER_CMCD, e) : console.warn(`Invalid value for preferCmcd. Must be one of ${dt2.join()}`) : this.removeAttribute(c.PREFER_CMCD));\n  }\n  get playerInitTime() {\n    return r9(this, Ue2);\n  }\n  get playerSoftwareName() {\n    var e;\n    return (e = r9(this, Ke3)) != null ? e : Ui2;\n  }\n  set playerSoftwareName(e) {\n    h2(this, Ke3, e);\n  }\n  get playerSoftwareVersion() {\n    var e;\n    return (e = r9(this, je3)) != null ? e : Bi2;\n  }\n  set playerSoftwareVersion(e) {\n    h2(this, je3, e);\n  }\n  get _hls() {\n    var e;\n    return (e = r9(this, x2)) == null ? void 0 : e.engine;\n  }\n  get mux() {\n    var e;\n    return (e = this.nativeEl) == null ? void 0 : e.mux;\n  }\n  get error() {\n    var e;\n    return (e = jt2(this.nativeEl)) != null ? e : null;\n  }\n  get errorTranslator() {\n    return r9(this, Ye3);\n  }\n  set errorTranslator(e) {\n    h2(this, Ye3, e);\n  }\n  get src() {\n    return this.getAttribute(\"src\");\n  }\n  set src(e) {\n    e !== this.src && (e == null ? this.removeAttribute(\"src\") : this.setAttribute(\"src\", e));\n  }\n  get type() {\n    var e;\n    return (e = this.getAttribute(c.TYPE)) != null ? e : void 0;\n  }\n  set type(e) {\n    e !== this.type && (e ? this.setAttribute(c.TYPE, e) : this.removeAttribute(c.TYPE));\n  }\n  get autoplay() {\n    let e = this.getAttribute(\"autoplay\");\n    return e === null ? false : e === \"\" ? true : e;\n  }\n  set autoplay(e) {\n    let s = this.autoplay;\n    e !== s && (e ? this.setAttribute(\"autoplay\", typeof e == \"string\" ? e : \"\") : this.removeAttribute(\"autoplay\"));\n  }\n  get preload() {\n    let e = this.getAttribute(\"preload\");\n    return e === \"\" ? \"auto\" : [\"none\", \"metadata\", \"auto\"].includes(e) ? e : super.preload;\n  }\n  set preload(e) {\n    e != this.getAttribute(\"preload\") && ([\"\", \"none\", \"metadata\", \"auto\"].includes(e) ? this.setAttribute(\"preload\", e) : this.removeAttribute(\"preload\"));\n  }\n  get debug() {\n    return this.getAttribute(c.DEBUG) != null;\n  }\n  set debug(e) {\n    e !== this.debug && (e ? this.setAttribute(c.DEBUG, \"\") : this.removeAttribute(c.DEBUG));\n  }\n  get disableTracking() {\n    return this.hasAttribute(c.DISABLE_TRACKING);\n  }\n  set disableTracking(e) {\n    e !== this.disableTracking && this.toggleAttribute(c.DISABLE_TRACKING, !!e);\n  }\n  get disableCookies() {\n    return this.hasAttribute(c.DISABLE_COOKIES);\n  }\n  set disableCookies(e) {\n    e !== this.disableCookies && (e ? this.setAttribute(c.DISABLE_COOKIES, \"\") : this.removeAttribute(c.DISABLE_COOKIES));\n  }\n  get startTime() {\n    let e = this.getAttribute(c.START_TIME);\n    if (e == null) return;\n    let s = +e;\n    return Number.isNaN(s) ? void 0 : s;\n  }\n  set startTime(e) {\n    e !== this.startTime && (e == null ? this.removeAttribute(c.START_TIME) : this.setAttribute(c.START_TIME, `${e}`));\n  }\n  get playbackId() {\n    var e;\n    return this.hasAttribute(c.PLAYBACK_ID) ? this.getAttribute(c.PLAYBACK_ID) : (e = be(this.src)) != null ? e : void 0;\n  }\n  set playbackId(e) {\n    e !== this.playbackId && (e ? this.setAttribute(c.PLAYBACK_ID, e) : this.removeAttribute(c.PLAYBACK_ID));\n  }\n  get maxResolution() {\n    var e;\n    return (e = this.getAttribute(c.MAX_RESOLUTION)) != null ? e : void 0;\n  }\n  set maxResolution(e) {\n    e !== this.maxResolution && (e ? this.setAttribute(c.MAX_RESOLUTION, e) : this.removeAttribute(c.MAX_RESOLUTION));\n  }\n  get minResolution() {\n    var e;\n    return (e = this.getAttribute(c.MIN_RESOLUTION)) != null ? e : void 0;\n  }\n  set minResolution(e) {\n    e !== this.minResolution && (e ? this.setAttribute(c.MIN_RESOLUTION, e) : this.removeAttribute(c.MIN_RESOLUTION));\n  }\n  get renditionOrder() {\n    var e;\n    return (e = this.getAttribute(c.RENDITION_ORDER)) != null ? e : void 0;\n  }\n  set renditionOrder(e) {\n    e !== this.renditionOrder && (e ? this.setAttribute(c.RENDITION_ORDER, e) : this.removeAttribute(c.RENDITION_ORDER));\n  }\n  get programStartTime() {\n    let e = this.getAttribute(c.PROGRAM_START_TIME);\n    if (e == null) return;\n    let s = +e;\n    return Number.isNaN(s) ? void 0 : s;\n  }\n  set programStartTime(e) {\n    e == null ? this.removeAttribute(c.PROGRAM_START_TIME) : this.setAttribute(c.PROGRAM_START_TIME, `${e}`);\n  }\n  get programEndTime() {\n    let e = this.getAttribute(c.PROGRAM_END_TIME);\n    if (e == null) return;\n    let s = +e;\n    return Number.isNaN(s) ? void 0 : s;\n  }\n  set programEndTime(e) {\n    e == null ? this.removeAttribute(c.PROGRAM_END_TIME) : this.setAttribute(c.PROGRAM_END_TIME, `${e}`);\n  }\n  get customDomain() {\n    var e;\n    return (e = this.getAttribute(c.CUSTOM_DOMAIN)) != null ? e : void 0;\n  }\n  set customDomain(e) {\n    e !== this.customDomain && (e ? this.setAttribute(c.CUSTOM_DOMAIN, e) : this.removeAttribute(c.CUSTOM_DOMAIN));\n  }\n  get drmToken() {\n    var e;\n    return (e = this.getAttribute(c.DRM_TOKEN)) != null ? e : void 0;\n  }\n  set drmToken(e) {\n    e !== this.drmToken && (e ? this.setAttribute(c.DRM_TOKEN, e) : this.removeAttribute(c.DRM_TOKEN));\n  }\n  get ended() {\n    return Je2(this.nativeEl, this._hls);\n  }\n  get envKey() {\n    var e;\n    return (e = this.getAttribute(c.ENV_KEY)) != null ? e : void 0;\n  }\n  set envKey(e) {\n    e !== this.envKey && (e ? this.setAttribute(c.ENV_KEY, e) : this.removeAttribute(c.ENV_KEY));\n  }\n  get beaconCollectionDomain() {\n    var e;\n    return (e = this.getAttribute(c.BEACON_COLLECTION_DOMAIN)) != null ? e : void 0;\n  }\n  set beaconCollectionDomain(e) {\n    e !== this.beaconCollectionDomain && (e ? this.setAttribute(c.BEACON_COLLECTION_DOMAIN, e) : this.removeAttribute(c.BEACON_COLLECTION_DOMAIN));\n  }\n  get streamType() {\n    var e;\n    return (e = this.getAttribute(c.STREAM_TYPE)) != null ? e : Te(this.nativeEl);\n  }\n  set streamType(e) {\n    e !== this.streamType && (e ? this.setAttribute(c.STREAM_TYPE, e) : this.removeAttribute(c.STREAM_TYPE));\n  }\n  get targetLiveWindow() {\n    return this.hasAttribute(c.TARGET_LIVE_WINDOW) ? +this.getAttribute(c.TARGET_LIVE_WINDOW) : Jt2(this.nativeEl);\n  }\n  set targetLiveWindow(e) {\n    e != this.targetLiveWindow && (e == null ? this.removeAttribute(c.TARGET_LIVE_WINDOW) : this.setAttribute(c.TARGET_LIVE_WINDOW, `${+e}`));\n  }\n  get liveEdgeStart() {\n    var e, s;\n    if (this.hasAttribute(c.LIVE_EDGE_OFFSET)) {\n      let { liveEdgeOffset: n2 } = this, l = (e = this.nativeEl.seekable.end(0)) != null ? e : 0, a2 = (s = this.nativeEl.seekable.start(0)) != null ? s : 0;\n      return Math.max(a2, l - n2);\n    }\n    return Qt2(this.nativeEl);\n  }\n  get liveEdgeOffset() {\n    if (this.hasAttribute(c.LIVE_EDGE_OFFSET)) return +this.getAttribute(c.LIVE_EDGE_OFFSET);\n  }\n  set liveEdgeOffset(e) {\n    e != this.targetLiveWindow && (e == null ? this.removeAttribute(c.LIVE_EDGE_OFFSET) : this.setAttribute(c.LIVE_EDGE_OFFSET, `${+e}`));\n  }\n  get seekable() {\n    return q(this.nativeEl);\n  }\n  addCuePoints(e) {\n    return __async(this, null, function* () {\n      return ie2(this.nativeEl, e);\n    });\n  }\n  get activeCuePoint() {\n    return ce2(this.nativeEl);\n  }\n  get cuePoints() {\n    return He(this.nativeEl);\n  }\n  addChapters(e) {\n    return __async(this, null, function* () {\n      return le2(this.nativeEl, e);\n    });\n  }\n  get activeChapter() {\n    return pe(this.nativeEl);\n  }\n  get chapters() {\n    return Ne2(this.nativeEl);\n  }\n  getStartDate() {\n    return _e2(this.nativeEl, this._hls);\n  }\n  get currentPdt() {\n    return Oe2(this.nativeEl, this._hls);\n  }\n  get preferPlayback() {\n    let e = this.getAttribute(c.PREFER_PLAYBACK);\n    if (e === _.MSE || e === _.NATIVE) return e;\n  }\n  set preferPlayback(e) {\n    e !== this.preferPlayback && (e === _.MSE || e === _.NATIVE ? this.setAttribute(c.PREFER_PLAYBACK, e) : this.removeAttribute(c.PREFER_PLAYBACK));\n  }\n  get metadata() {\n    return __spreadValues(__spreadValues({}, this.getAttributeNames().filter((s) => s.startsWith(\"metadata-\") && ![c.METADATA_URL].includes(s)).reduce((s, n2) => {\n      let l = this.getAttribute(n2);\n      return l != null && (s[n2.replace(/^metadata-/, \"\").replace(/-/g, \"_\")] = l), s;\n    }, {})), r9(this, Oe3));\n  }\n  set metadata(e) {\n    h2(this, Oe3, e != null ? e : {}), this.mux && this.mux.emit(\"hb\", r9(this, Oe3));\n  }\n  get _hlsConfig() {\n    return r9(this, We3);\n  }\n  set _hlsConfig(e) {\n    h2(this, We3, e);\n  }\n  load() {\n    h2(this, x2, Zt(this, this.nativeEl, r9(this, x2)));\n  }\n  unload() {\n    Qe2(this.nativeEl, r9(this, x2)), h2(this, x2, void 0);\n  }\n  attributeChangedCallback(e, s, n2) {\n    var a2, p3;\n    switch (Xe3.observedAttributes.includes(e) && ![\"src\", \"autoplay\", \"preload\"].includes(e) && super.attributeChangedCallback(e, s, n2), e) {\n      case c.PLAYER_SOFTWARE_NAME:\n        this.playerSoftwareName = n2 != null ? n2 : void 0;\n        break;\n      case c.PLAYER_SOFTWARE_VERSION:\n        this.playerSoftwareVersion = n2 != null ? n2 : void 0;\n        break;\n      case \"src\": {\n        let E4 = !!s, I4 = !!n2;\n        !E4 && I4 ? k2(this, _e3, lt3).call(this) : E4 && !I4 ? this.unload() : E4 && I4 && (this.unload(), k2(this, _e3, lt3).call(this));\n        break;\n      }\n      case \"autoplay\":\n        if (n2 === s) break;\n        (a2 = r9(this, x2)) == null || a2.setAutoplay(this.autoplay);\n        break;\n      case \"preload\":\n        if (n2 === s) break;\n        (p3 = r9(this, x2)) == null || p3.setPreload(n2);\n        break;\n      case c.PLAYBACK_ID:\n        this.src = Gt2(this);\n        break;\n      case c.DEBUG: {\n        let E4 = this.debug;\n        this.mux && console.info(\"Cannot toggle debug mode of mux data after initialization. Make sure you set all metadata to override before setting the src.\"), this._hls && (this._hls.config.debug = E4);\n        break;\n      }\n      case c.METADATA_URL:\n        n2 && fetch(n2).then((E4) => E4.json()).then((E4) => this.metadata = E4).catch(() => console.error(`Unable to load or parse metadata JSON from metadata-url ${n2}!`));\n        break;\n      case c.STREAM_TYPE:\n        (n2 == null || n2 !== s) && this.dispatchEvent(new CustomEvent(\"streamtypechange\", { composed: true, bubbles: true }));\n        break;\n      case c.TARGET_LIVE_WINDOW:\n        (n2 == null || n2 !== s) && this.dispatchEvent(new CustomEvent(\"targetlivewindowchange\", { composed: true, bubbles: true, detail: this.targetLiveWindow }));\n        break;\n      default:\n        break;\n    }\n  }\n  connectedCallback() {\n    var e;\n    (e = super.connectedCallback) == null || e.call(this), this.nativeEl && this.src && !r9(this, x2) && k2(this, _e3, lt3).call(this);\n  }\n  disconnectedCallback() {\n    this.unload();\n  }\n};\nx2 = /* @__PURE__ */ new WeakMap(), Ce3 = /* @__PURE__ */ new WeakMap(), Ue2 = /* @__PURE__ */ new WeakMap(), Oe3 = /* @__PURE__ */ new WeakMap(), We3 = /* @__PURE__ */ new WeakMap(), je3 = /* @__PURE__ */ new WeakMap(), Ke3 = /* @__PURE__ */ new WeakMap(), Ye3 = /* @__PURE__ */ new WeakMap(), _e3 = /* @__PURE__ */ new WeakSet(), lt3 = function() {\n  return __async(this, null, function* () {\n    r9(this, Ce3) || (yield h2(this, Ce3, Promise.resolve()), h2(this, Ce3, null), this.load());\n  });\n};\nvar Be3 = class extends Yt(si2(Rt2)) {\n};\nze3.customElements.get(\"mux-video\") || (ze3.customElements.define(\"mux-video\", Be3), ze3.MuxVideoElement = Be3);\nvar ks = Be3;\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/template-parts.js\nvar __defProp10 = Object.defineProperty;\nvar __defNormalProp10 = (obj, key, value) => key in obj ? __defProp10(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField10 = (obj, key, value) => {\n  __defNormalProp10(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck33 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet33 = (obj, member, getter) => {\n  __accessCheck33(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd33 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet29 = (obj, member, value, setter) => {\n  __accessCheck33(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar _parts;\nvar _processor;\nvar _items;\nvar _value;\nvar _element;\nvar _attributeName;\nvar _namespaceURI;\nvar _list;\nvar list_get;\nvar _parentNode;\nvar _nodes;\nvar ELEMENT = 1;\nvar STRING2 = 0;\nvar PART = 1;\nvar defaultProcessor = {\n  processCallback(instance, parts, state) {\n    if (!state)\n      return;\n    for (const [expression, part] of parts) {\n      if (expression in state) {\n        const value = state[expression];\n        if (typeof value === \"boolean\" && part instanceof AttrPart && typeof part.element[part.attributeName] === \"boolean\") {\n          part.booleanValue = value;\n        } else if (typeof value === \"function\" && part instanceof AttrPart) {\n          part.element[part.attributeName] = value;\n        } else {\n          part.value = value;\n        }\n      }\n    }\n  }\n};\nvar TemplateInstance = class extends GlobalThis.DocumentFragment {\n  constructor(template20, state, processor2 = defaultProcessor) {\n    var _a3;\n    super();\n    __privateAdd33(this, _parts, void 0);\n    __privateAdd33(this, _processor, void 0);\n    this.append(template20.content.cloneNode(true));\n    __privateSet29(this, _parts, parse(this));\n    __privateSet29(this, _processor, processor2);\n    (_a3 = processor2.createCallback) == null ? void 0 : _a3.call(processor2, this, __privateGet33(this, _parts), state);\n    processor2.processCallback(this, __privateGet33(this, _parts), state);\n  }\n  update(state) {\n    __privateGet33(this, _processor).processCallback(this, __privateGet33(this, _parts), state);\n  }\n};\n_parts = /* @__PURE__ */ new WeakMap();\n_processor = /* @__PURE__ */ new WeakMap();\nvar parse = (element, parts = []) => {\n  let type, value;\n  for (let attr of element.attributes || []) {\n    if (attr.value.includes(\"{{\")) {\n      const list = new AttrPartList();\n      for ([type, value] of tokenize(attr.value)) {\n        if (!type)\n          list.append(value);\n        else {\n          const part = new AttrPart(element, attr.name, attr.namespaceURI);\n          list.append(part);\n          parts.push([value, part]);\n        }\n      }\n      attr.value = list.toString();\n    }\n  }\n  for (let node of element.childNodes) {\n    if (node.nodeType === ELEMENT && !(node instanceof HTMLTemplateElement)) {\n      parse(node, parts);\n    } else {\n      if (node.nodeType === ELEMENT || node.data.includes(\"{{\")) {\n        const items = [];\n        if (node.data) {\n          for ([type, value] of tokenize(node.data))\n            if (!type)\n              items.push(new Text(value));\n            else {\n              const part = new ChildNodePart(element);\n              items.push(part);\n              parts.push([value, part]);\n            }\n        } else if (node instanceof HTMLTemplateElement) {\n          const part = new InnerTemplatePart(element, node);\n          items.push(part);\n          parts.push([part.expression, part]);\n        }\n        node.replaceWith(\n          ...items.flatMap((part) => part.replacementNodes || [part])\n        );\n      }\n    }\n  }\n  return parts;\n};\nvar mem = {};\nvar tokenize = (text) => {\n  let value = \"\", open = 0, tokens = mem[text], i2 = 0, c4;\n  if (tokens)\n    return tokens;\n  else\n    tokens = [];\n  for (; c4 = text[i2]; i2++) {\n    if (c4 === \"{\" && text[i2 + 1] === \"{\" && text[i2 - 1] !== \"\\\\\" && text[i2 + 2] && ++open == 1) {\n      if (value)\n        tokens.push([STRING2, value]);\n      value = \"\";\n      i2++;\n    } else if (c4 === \"}\" && text[i2 + 1] === \"}\" && text[i2 - 1] !== \"\\\\\" && !--open) {\n      tokens.push([PART, value.trim()]);\n      value = \"\";\n      i2++;\n    } else\n      value += c4 || \"\";\n  }\n  if (value)\n    tokens.push([STRING2, (open > 0 ? \"{{\" : \"\") + value]);\n  return mem[text] = tokens;\n};\nvar FRAGMENT = 11;\nvar Part2 = class {\n  get value() {\n    return \"\";\n  }\n  set value(val) {\n  }\n  toString() {\n    return this.value;\n  }\n};\nvar attrPartToList = /* @__PURE__ */ new WeakMap();\nvar AttrPartList = class {\n  constructor() {\n    __privateAdd33(this, _items, []);\n  }\n  [Symbol.iterator]() {\n    return __privateGet33(this, _items).values();\n  }\n  get length() {\n    return __privateGet33(this, _items).length;\n  }\n  item(index) {\n    return __privateGet33(this, _items)[index];\n  }\n  append(...items) {\n    for (const item of items) {\n      if (item instanceof AttrPart) {\n        attrPartToList.set(item, this);\n      }\n      __privateGet33(this, _items).push(item);\n    }\n  }\n  toString() {\n    return __privateGet33(this, _items).join(\"\");\n  }\n};\n_items = /* @__PURE__ */ new WeakMap();\nvar AttrPart = class extends Part2 {\n  constructor(element, attributeName, namespaceURI) {\n    super();\n    __privateAdd33(this, _list);\n    __privateAdd33(this, _value, \"\");\n    __privateAdd33(this, _element, void 0);\n    __privateAdd33(this, _attributeName, void 0);\n    __privateAdd33(this, _namespaceURI, void 0);\n    __privateSet29(this, _element, element);\n    __privateSet29(this, _attributeName, attributeName);\n    __privateSet29(this, _namespaceURI, namespaceURI);\n  }\n  get attributeName() {\n    return __privateGet33(this, _attributeName);\n  }\n  get attributeNamespace() {\n    return __privateGet33(this, _namespaceURI);\n  }\n  get element() {\n    return __privateGet33(this, _element);\n  }\n  get value() {\n    return __privateGet33(this, _value);\n  }\n  set value(newValue) {\n    if (__privateGet33(this, _value) === newValue)\n      return;\n    __privateSet29(this, _value, newValue);\n    if (!__privateGet33(this, _list, list_get) || __privateGet33(this, _list, list_get).length === 1) {\n      if (newValue == null) {\n        __privateGet33(this, _element).removeAttributeNS(\n          __privateGet33(this, _namespaceURI),\n          __privateGet33(this, _attributeName)\n        );\n      } else {\n        __privateGet33(this, _element).setAttributeNS(\n          __privateGet33(this, _namespaceURI),\n          __privateGet33(this, _attributeName),\n          newValue\n        );\n      }\n    } else {\n      __privateGet33(this, _element).setAttributeNS(\n        __privateGet33(this, _namespaceURI),\n        __privateGet33(this, _attributeName),\n        __privateGet33(this, _list, list_get)\n      );\n    }\n  }\n  /** @type boolean */\n  get booleanValue() {\n    return __privateGet33(this, _element).hasAttributeNS(\n      __privateGet33(this, _namespaceURI),\n      __privateGet33(this, _attributeName)\n    );\n  }\n  set booleanValue(value) {\n    if (!__privateGet33(this, _list, list_get) || __privateGet33(this, _list, list_get).length === 1)\n      this.value = value ? \"\" : null;\n    else\n      throw new DOMException(\"Value is not fully templatized\");\n  }\n};\n_value = /* @__PURE__ */ new WeakMap();\n_element = /* @__PURE__ */ new WeakMap();\n_attributeName = /* @__PURE__ */ new WeakMap();\n_namespaceURI = /* @__PURE__ */ new WeakMap();\n_list = /* @__PURE__ */ new WeakSet();\nlist_get = function() {\n  return attrPartToList.get(this);\n};\nvar ChildNodePart = class extends Part2 {\n  constructor(parentNode, nodes) {\n    super();\n    __privateAdd33(this, _parentNode, void 0);\n    __privateAdd33(this, _nodes, void 0);\n    __privateSet29(this, _parentNode, parentNode);\n    __privateSet29(this, _nodes, nodes ? [...nodes] : [new Text()]);\n  }\n  get replacementNodes() {\n    return __privateGet33(this, _nodes);\n  }\n  get parentNode() {\n    return __privateGet33(this, _parentNode);\n  }\n  get nextSibling() {\n    return __privateGet33(this, _nodes)[__privateGet33(this, _nodes).length - 1].nextSibling;\n  }\n  get previousSibling() {\n    return __privateGet33(this, _nodes)[0].previousSibling;\n  }\n  // FIXME: not sure why do we need string serialization here? Just because parent class has type DOMString?\n  get value() {\n    return __privateGet33(this, _nodes).map((node) => node.textContent).join(\"\");\n  }\n  set value(newValue) {\n    this.replace(newValue);\n  }\n  replace(...nodes) {\n    const normalisedNodes = nodes.flat().flatMap(\n      (node) => node == null ? [new Text()] : node.forEach ? [...node] : node.nodeType === FRAGMENT ? [...node.childNodes] : node.nodeType ? [node] : [new Text(node)]\n    );\n    if (!normalisedNodes.length)\n      normalisedNodes.push(new Text());\n    __privateSet29(this, _nodes, swapdom(\n      __privateGet33(this, _nodes)[0].parentNode,\n      __privateGet33(this, _nodes),\n      normalisedNodes,\n      this.nextSibling\n    ));\n  }\n};\n_parentNode = /* @__PURE__ */ new WeakMap();\n_nodes = /* @__PURE__ */ new WeakMap();\nvar InnerTemplatePart = class extends ChildNodePart {\n  constructor(parentNode, template20) {\n    let directive = template20.getAttribute(\"directive\") || template20.getAttribute(\"type\");\n    let expression = template20.getAttribute(\"expression\") || template20.getAttribute(directive) || \"\";\n    if (expression.startsWith(\"{{\"))\n      expression = expression.trim().slice(2, -2).trim();\n    super(parentNode);\n    __publicField10(this, \"directive\");\n    this.expression = expression;\n    this.template = template20;\n    this.directive = directive;\n  }\n};\nfunction swapdom(parent, a2, b4, end = null) {\n  let i2 = 0, cur, next, bi3, n2 = b4.length, m3 = a2.length;\n  while (i2 < n2 && i2 < m3 && a2[i2] == b4[i2])\n    i2++;\n  while (i2 < n2 && i2 < m3 && b4[n2 - 1] == a2[m3 - 1])\n    end = b4[--m3, --n2];\n  if (i2 == m3)\n    while (i2 < n2)\n      parent.insertBefore(b4[i2++], end);\n  if (i2 == n2)\n    while (i2 < m3)\n      parent.removeChild(a2[i2++]);\n  else {\n    cur = a2[i2];\n    while (i2 < n2) {\n      bi3 = b4[i2++], next = cur ? cur.nextSibling : end;\n      if (cur == bi3)\n        cur = next;\n      else if (i2 < n2 && b4[i2] == next)\n        parent.replaceChild(bi3, cur), cur = next;\n      else\n        parent.insertBefore(bi3, cur);\n    }\n    while (cur != end)\n      next = cur.nextSibling, parent.removeChild(cur), cur = next;\n  }\n  return b4;\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/utils/template-processor.js\nvar pipeModifiers = {\n  string: (value) => String(value)\n};\nvar PartialTemplate = class {\n  constructor(template20) {\n    this.template = template20;\n    this.state = void 0;\n  }\n};\nvar templates = /* @__PURE__ */ new WeakMap();\nvar templateInstances = /* @__PURE__ */ new WeakMap();\nvar Directives = {\n  partial: (part, state) => {\n    state[part.expression] = new PartialTemplate(part.template);\n  },\n  if: (part, state) => {\n    var _a3;\n    if (evaluateExpression(part.expression, state)) {\n      if (templates.get(part) !== part.template) {\n        templates.set(part, part.template);\n        const tpl = new TemplateInstance(part.template, state, processor);\n        part.replace(tpl);\n        templateInstances.set(part, tpl);\n      } else {\n        (_a3 = templateInstances.get(part)) == null ? void 0 : _a3.update(state);\n      }\n    } else {\n      part.replace(\"\");\n      templates.delete(part);\n      templateInstances.delete(part);\n    }\n  }\n};\nvar DirectiveNames = Object.keys(Directives);\nvar processor = {\n  processCallback(instance, parts, state) {\n    var _a3, _b;\n    if (!state)\n      return;\n    for (const [expression, part] of parts) {\n      if (part instanceof InnerTemplatePart) {\n        if (!part.directive) {\n          const directive = DirectiveNames.find(\n            (n2) => part.template.hasAttribute(n2)\n          );\n          if (directive) {\n            part.directive = directive;\n            part.expression = part.template.getAttribute(directive);\n          }\n        }\n        (_a3 = Directives[part.directive]) == null ? void 0 : _a3.call(Directives, part, state);\n        continue;\n      }\n      let value = evaluateExpression(expression, state);\n      if (value instanceof PartialTemplate) {\n        if (templates.get(part) !== value.template) {\n          templates.set(part, value.template);\n          value = new TemplateInstance(value.template, value.state, processor);\n          part.value = value;\n          templateInstances.set(part, value);\n        } else {\n          (_b = templateInstances.get(part)) == null ? void 0 : _b.update(value.state);\n        }\n        continue;\n      }\n      if (value) {\n        if (part instanceof AttrPart) {\n          if (part.attributeName.startsWith(\"aria-\")) {\n            value = String(value);\n          }\n        }\n        if (part instanceof AttrPart) {\n          if (typeof value === \"boolean\") {\n            part.booleanValue = value;\n          } else if (typeof value === \"function\") {\n            part.element[part.attributeName] = value;\n          } else {\n            part.value = value;\n          }\n        } else {\n          part.value = value;\n          templates.delete(part);\n          templateInstances.delete(part);\n        }\n      } else {\n        if (part instanceof AttrPart) {\n          part.value = void 0;\n        } else {\n          part.value = void 0;\n          templates.delete(part);\n          templateInstances.delete(part);\n        }\n      }\n    }\n  }\n};\nvar operators = {\n  \"!\": (a2) => !a2,\n  \"!!\": (a2) => !!a2,\n  \"==\": (a2, b4) => a2 == b4,\n  \"!=\": (a2, b4) => a2 != b4,\n  \">\": (a2, b4) => a2 > b4,\n  \">=\": (a2, b4) => a2 >= b4,\n  \"<\": (a2, b4) => a2 < b4,\n  \"<=\": (a2, b4) => a2 <= b4,\n  \"??\": (a2, b4) => a2 != null ? a2 : b4,\n  \"|\": (a2, b4) => {\n    var _a3;\n    return (_a3 = pipeModifiers[b4]) == null ? void 0 : _a3.call(pipeModifiers, a2);\n  }\n};\nfunction tokenizeExpression(expr) {\n  return tokenize2(expr, {\n    boolean: /true|false/,\n    number: /-?\\d+\\.?\\d*/,\n    string: /([\"'])((?:\\\\.|[^\\\\])*?)\\1/,\n    operator: /[!=><][=!]?|\\?\\?|\\|/,\n    ws: /\\s+/,\n    param: /[$a-z_][$\\w]*/i\n  }).filter(({ type }) => type !== \"ws\");\n}\nfunction evaluateExpression(expr, state = {}) {\n  var _a3, _b, _c, _d, _e5, _f, _g;\n  const tokens = tokenizeExpression(expr);\n  if (tokens.length === 0 || tokens.some(({ type }) => !type)) {\n    return invalidExpression(expr);\n  }\n  if (((_a3 = tokens[0]) == null ? void 0 : _a3.token) === \">\") {\n    const partial = state[(_b = tokens[1]) == null ? void 0 : _b.token];\n    if (!partial) {\n      return invalidExpression(expr);\n    }\n    const partialState = __spreadValues({}, state);\n    partial.state = partialState;\n    const args = tokens.slice(2);\n    for (let i2 = 0; i2 < args.length; i2 += 3) {\n      const name = (_c = args[i2]) == null ? void 0 : _c.token;\n      const operator = (_d = args[i2 + 1]) == null ? void 0 : _d.token;\n      const value = (_e5 = args[i2 + 2]) == null ? void 0 : _e5.token;\n      if (name && operator === \"=\") {\n        partialState[name] = getParamValue(value, state);\n      }\n    }\n    return partial;\n  }\n  if (tokens.length === 1) {\n    if (!isValidParam(tokens[0])) {\n      return invalidExpression(expr);\n    }\n    return getParamValue(tokens[0].token, state);\n  }\n  if (tokens.length === 2) {\n    const operator = (_f = tokens[0]) == null ? void 0 : _f.token;\n    const run = operators[operator];\n    if (!run || !isValidParam(tokens[1])) {\n      return invalidExpression(expr);\n    }\n    const a2 = getParamValue(tokens[1].token, state);\n    return run(a2);\n  }\n  if (tokens.length === 3) {\n    const operator = (_g = tokens[1]) == null ? void 0 : _g.token;\n    const run = operators[operator];\n    if (!run || !isValidParam(tokens[0]) || !isValidParam(tokens[2])) {\n      return invalidExpression(expr);\n    }\n    const a2 = getParamValue(tokens[0].token, state);\n    if (operator === \"|\") {\n      return run(a2, tokens[2].token);\n    }\n    const b4 = getParamValue(tokens[2].token, state);\n    return run(a2, b4);\n  }\n}\nfunction invalidExpression(expr) {\n  console.warn(`Warning: invalid expression \\`${expr}\\``);\n  return false;\n}\nfunction isValidParam({ type }) {\n  return [\"number\", \"boolean\", \"string\", \"param\"].includes(type);\n}\nfunction getParamValue(raw, state) {\n  const firstChar = raw[0];\n  const lastChar = raw.slice(-1);\n  if (raw === \"true\" || raw === \"false\") {\n    return raw === \"true\";\n  }\n  if (firstChar === lastChar && [`'`, `\"`].includes(firstChar)) {\n    return raw.slice(1, -1);\n  }\n  if (isNumericString(raw)) {\n    return parseFloat(raw);\n  }\n  return state[raw];\n}\nfunction tokenize2(str, parsers) {\n  let len, match, token, tokens = [];\n  while (str) {\n    token = null;\n    len = str.length;\n    for (let key in parsers) {\n      match = parsers[key].exec(str);\n      if (match && match.index < len) {\n        token = {\n          token: match[0],\n          type: key,\n          matches: match.slice(1)\n        };\n        len = match.index;\n      }\n    }\n    if (len) {\n      tokens.push({\n        token: str.substr(0, len),\n        type: void 0\n      });\n    }\n    if (token) {\n      tokens.push(token);\n    }\n    str = str.substr(len + (token ? token.token.length : 0));\n  }\n  return tokens;\n}\n\n// node_modules/.pnpm/media-chrome@3.2.5/node_modules/media-chrome/dist/media-theme-element.js\nvar __defProp11 = Object.defineProperty;\nvar __defNormalProp11 = (obj, key, value) => key in obj ? __defProp11(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField11 = (obj, key, value) => {\n  __defNormalProp11(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n  return value;\n};\nvar __accessCheck34 = (obj, member, msg) => {\n  if (!member.has(obj))\n    throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet34 = (obj, member, getter) => {\n  __accessCheck34(obj, member, \"read from private field\");\n  return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd34 = (obj, member, value) => {\n  if (member.has(obj))\n    throw TypeError(\"Cannot add the same private member more than once\");\n  member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet30 = (obj, member, value, setter) => {\n  __accessCheck34(obj, member, \"write to private field\");\n  setter ? setter.call(obj, value) : member.set(obj, value);\n  return value;\n};\nvar __privateMethod19 = (obj, member, method) => {\n  __accessCheck34(obj, member, \"access private method\");\n  return method;\n};\nvar _template;\nvar _prevTemplate;\nvar _prevTemplateId;\nvar _upgradeProperty;\nvar upgradeProperty_fn;\nvar _updateTemplate;\nvar updateTemplate_fn;\nvar observedMediaAttributes = {\n  mediatargetlivewindow: \"targetlivewindow\",\n  mediastreamtype: \"streamtype\"\n};\nvar prependTemplate = Document2.createElement(\"template\");\nprependTemplate.innerHTML = /*html*/\n`\n  <style>\n    :host {\n      display: inline-block;\n      line-height: 0;\n    }\n\n    media-controller {\n      width: 100%;\n      height: 100%;\n    }\n\n    media-controller:not([mediasubtitleslist]) media-captions-selectmenu,\n    media-captions-button:not([mediasubtitleslist]),\n    media-rendition-selectmenu[mediarenditionunavailable],\n    media-audio-track-selectmenu[mediaaudiotrackunavailable],\n    media-volume-range[mediavolumeunavailable],\n    media-airplay-button[mediaairplayunavailable],\n    media-fullscreen-button[mediafullscreenunavailable],\n    media-cast-button[mediacastunavailable],\n    media-pip-button[mediapipunavailable] {\n      display: none;\n    }\n  </style>\n`;\nvar MediaThemeElement = class extends GlobalThis.HTMLElement {\n  constructor() {\n    super();\n    __privateAdd34(this, _upgradeProperty);\n    __privateAdd34(this, _updateTemplate);\n    __publicField11(this, \"renderRoot\");\n    __publicField11(this, \"renderer\");\n    __privateAdd34(this, _template, void 0);\n    __privateAdd34(this, _prevTemplate, void 0);\n    __privateAdd34(this, _prevTemplateId, void 0);\n    if (this.shadowRoot) {\n      this.renderRoot = this.shadowRoot;\n    } else {\n      this.renderRoot = this.attachShadow({ mode: \"open\" });\n      this.createRenderer();\n    }\n    const observer2 = new MutationObserver((mutationList) => {\n      var _a3;\n      if (this.mediaController && !((_a3 = this.mediaController) == null ? void 0 : _a3.breakpointsComputed))\n        return;\n      if (mutationList.some((mutation) => {\n        const target = (\n          /** @type {HTMLElement} */\n          mutation.target\n        );\n        if (target === this)\n          return true;\n        if (target.localName !== \"media-controller\")\n          return false;\n        if (observedMediaAttributes[mutation.attributeName])\n          return true;\n        if (mutation.attributeName.startsWith(\"breakpoint\"))\n          return true;\n        return false;\n      })) {\n        this.render();\n      }\n    });\n    observer2.observe(this, { attributes: true });\n    observer2.observe(this.renderRoot, {\n      attributes: true,\n      subtree: true\n    });\n    this.addEventListener(\n      MediaStateChangeEvents.BREAKPOINTS_COMPUTED,\n      this.render\n    );\n    __privateMethod19(this, _upgradeProperty, upgradeProperty_fn).call(this, \"template\");\n  }\n  /** @type {HTMLElement & { breakpointsComputed?: boolean }} */\n  get mediaController() {\n    return this.renderRoot.querySelector(\"media-controller\");\n  }\n  get template() {\n    var _a3;\n    return (_a3 = __privateGet34(this, _template)) != null ? _a3 : this.constructor.template;\n  }\n  set template(element) {\n    __privateSet30(this, _prevTemplateId, null);\n    __privateSet30(this, _template, element);\n    this.createRenderer();\n  }\n  get props() {\n    var _a3, _b, _c;\n    const observedAttributes = [\n      ...Array.from((_b = (_a3 = this.mediaController) == null ? void 0 : _a3.attributes) != null ? _b : []).filter(\n        ({ name }) => {\n          return observedMediaAttributes[name] || name.startsWith(\"breakpoint\");\n        }\n      ),\n      ...Array.from(this.attributes)\n    ];\n    const props = {};\n    for (let attr of observedAttributes) {\n      const name = (_c = observedMediaAttributes[attr.name]) != null ? _c : camelCase(attr.name);\n      let { value } = attr;\n      if (value != null) {\n        if (isNumericString(value)) {\n          value = parseFloat(value);\n        }\n        props[name] = value === \"\" ? true : value;\n      } else {\n        props[name] = false;\n      }\n    }\n    return props;\n  }\n  attributeChangedCallback(attrName, oldValue, newValue) {\n    if (attrName === \"template\" && oldValue != newValue) {\n      __privateMethod19(this, _updateTemplate, updateTemplate_fn).call(this);\n    }\n  }\n  connectedCallback() {\n    __privateMethod19(this, _updateTemplate, updateTemplate_fn).call(this);\n  }\n  createRenderer() {\n    if (this.template && this.template !== __privateGet34(this, _prevTemplate)) {\n      __privateSet30(this, _prevTemplate, this.template);\n      this.renderer = new TemplateInstance(\n        this.template,\n        this.props,\n        // @ts-ignore\n        this.constructor.processor\n      );\n      this.renderRoot.textContent = \"\";\n      this.renderRoot.append(\n        prependTemplate.content.cloneNode(true),\n        this.renderer\n      );\n    }\n  }\n  render() {\n    var _a3;\n    (_a3 = this.renderer) == null ? void 0 : _a3.update(this.props);\n  }\n};\n_template = /* @__PURE__ */ new WeakMap();\n_prevTemplate = /* @__PURE__ */ new WeakMap();\n_prevTemplateId = /* @__PURE__ */ new WeakMap();\n_upgradeProperty = /* @__PURE__ */ new WeakSet();\nupgradeProperty_fn = function(prop) {\n  if (Object.prototype.hasOwnProperty.call(this, prop)) {\n    const value = this[prop];\n    delete this[prop];\n    this[prop] = value;\n  }\n};\n_updateTemplate = /* @__PURE__ */ new WeakSet();\nupdateTemplate_fn = function() {\n  var _a3;\n  const templateId = this.getAttribute(\"template\");\n  if (!templateId || templateId === __privateGet34(this, _prevTemplateId))\n    return;\n  const rootNode = (\n    /** @type HTMLDocument | ShadowRoot */\n    this.getRootNode()\n  );\n  const template20 = (_a3 = rootNode == null ? void 0 : rootNode.getElementById) == null ? void 0 : _a3.call(rootNode, templateId);\n  if (template20) {\n    __privateSet30(this, _prevTemplateId, templateId);\n    __privateSet30(this, _template, template20);\n    this.createRenderer();\n    return;\n  }\n  if (isValidUrl(templateId)) {\n    __privateSet30(this, _prevTemplateId, templateId);\n    request(templateId).then((data) => {\n      const template22 = Document2.createElement(\"template\");\n      template22.innerHTML = data;\n      __privateSet30(this, _template, template22);\n      this.createRenderer();\n    }).catch(console.error);\n  }\n};\n__publicField11(MediaThemeElement, \"template\");\n__publicField11(MediaThemeElement, \"observedAttributes\", [\"template\"]);\n__publicField11(MediaThemeElement, \"processor\", processor);\nfunction isValidUrl(url) {\n  if (!/^(\\/|\\.\\/|https?:\\/\\/)/.test(url))\n    return false;\n  const base = /^https?:\\/\\//.test(url) ? void 0 : location.origin;\n  try {\n    new URL(url, base);\n  } catch (e) {\n    return false;\n  }\n  return true;\n}\nfunction request(resource) {\n  return __async(this, null, function* () {\n    const response = yield fetch(resource);\n    if (response.status !== 200) {\n      throw new Error(\n        `Failed to load resource: the server responded with a status of ${response.status}`\n      );\n    }\n    return response.text();\n  });\n}\nif (!GlobalThis.customElements.get(\"media-theme\")) {\n  GlobalThis.customElements.define(\"media-theme\", MediaThemeElement);\n}\n\n// node_modules/.pnpm/@mux+mux-player@2.9.1/node_modules/@mux/mux-player/dist/index.mjs\nvar xe4 = (t2, i2, e) => {\n  if (!i2.has(t2)) throw TypeError(\"Cannot \" + e);\n};\nvar u2 = (t2, i2, e) => (xe4(t2, i2, \"read from private field\"), e ? e.call(t2) : i2.get(t2));\nvar p = (t2, i2, e) => {\n  if (i2.has(t2)) throw TypeError(\"Cannot add the same private member more than once\");\n  i2 instanceof WeakSet ? i2.add(t2) : i2.set(t2, e);\n};\nvar x3 = (t2, i2, e, a2) => (xe4(t2, i2, \"write to private field\"), a2 ? a2.call(t2, e) : i2.set(t2, e), e);\nvar b3 = (t2, i2, e) => (xe4(t2, i2, \"access private method\"), e);\nvar G3 = class {\n  addEventListener() {\n  }\n  removeEventListener() {\n  }\n  dispatchEvent(i2) {\n    return true;\n  }\n};\nif (typeof DocumentFragment == \"undefined\") {\n  class t2 extends G3 {\n  }\n  globalThis.DocumentFragment = t2;\n}\nvar X4 = class extends G3 {\n};\nvar Le4 = class extends G3 {\n};\nvar Ft3 = { get(t2) {\n}, define(t2, i2, e) {\n}, upgrade(t2) {\n}, whenDefined(t2) {\n  return Promise.resolve(X4);\n} };\nvar J3;\nvar Re3 = class {\n  constructor(i2, e = {}) {\n    p(this, J3, void 0);\n    x3(this, J3, e == null ? void 0 : e.detail);\n  }\n  get detail() {\n    return u2(this, J3);\n  }\n  initCustomEvent() {\n  }\n};\nJ3 = /* @__PURE__ */ new WeakMap();\nfunction Yt2(t2, i2) {\n  return new X4();\n}\nvar dt4 = { document: { createElement: Yt2 }, DocumentFragment, customElements: Ft3, CustomEvent: Re3, EventTarget: G3, HTMLElement: X4, HTMLVideoElement: Le4 };\nvar lt4 = typeof window == \"undefined\" || typeof globalThis.customElements == \"undefined\";\nvar c2 = lt4 ? dt4 : globalThis;\nvar T2 = lt4 ? dt4.document : globalThis.document;\nvar Wt3 = \"en\";\nvar U3 = { code: Wt3 };\nvar mt3 = \"en\";\nfunction m(t2, i2 = true) {\n  var r10, o;\n  let e = i2 && (o = (r10 = U3) == null ? void 0 : r10[t2]) != null ? o : t2, a2 = i2 ? U3.code : mt3;\n  return new we3(e, a2);\n}\nvar we3 = class {\n  constructor(i2, e = ((a2) => (a2 = U3.code) != null ? a2 : mt3)()) {\n    this.message = i2, this.locale = e;\n  }\n  format(i2) {\n    return this.message.replace(/\\{(\\w+)\\}/g, (e, a2) => {\n      var r10;\n      return (r10 = i2[a2]) != null ? r10 : \"\";\n    });\n  }\n  toString() {\n    return this.message;\n  }\n};\nfunction ut3(t2) {\n  let i2 = \"\";\n  return Object.entries(t2).forEach(([e, a2]) => {\n    a2 != null && (i2 += `${de4(e)}: ${a2}; `);\n  }), i2 ? i2.trim() : void 0;\n}\nfunction de4(t2) {\n  return t2.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n}\nfunction le4(t2) {\n  return t2.replace(/[-_]([a-z])/g, (i2, e) => e.toUpperCase());\n}\nfunction L(t2) {\n  if (t2 == null) return;\n  let i2 = +t2;\n  return Number.isNaN(i2) ? void 0 : i2;\n}\nfunction Oe4(t2) {\n  let i2 = Zt3(t2).toString();\n  return i2 ? \"?\" + i2 : \"\";\n}\nfunction Zt3(t2) {\n  let i2 = {};\n  for (let e in t2) t2[e] != null && (i2[e] = t2[e]);\n  return new URLSearchParams(i2);\n}\nfunction N2(t2) {\n  let i2 = (t2 != null ? t2 : \"\").split(\".\")[1];\n  if (!i2) return {};\n  let e = i2.replace(/-/g, \"+\").replace(/_/g, \"/\"), a2 = decodeURIComponent(atob(e).split(\"\").map(function(r10) {\n    return \"%\" + (\"00\" + r10.charCodeAt(0).toString(16)).slice(-2);\n  }).join(\"\"));\n  return JSON.parse(a2);\n}\nvar Se2 = (t2, i2) => !t2 || !i2 ? false : t2.contains(i2) ? true : Se2(t2, i2.getRootNode().host);\nvar ct3 = \"mux.com\";\nvar Gt4 = () => {\n  try {\n    return \"2.9.1\";\n  } catch (e) {\n  }\n  return \"UNKNOWN\";\n};\nvar jt4 = Gt4();\nvar ue4 = () => jt4;\nvar pt4 = (t2, { token: i2, customDomain: e = ct3, thumbnailTime: a2, programTime: r10 } = {}) => {\n  let o = i2 == null ? a2 : void 0, { aud: s } = N2(i2);\n  if (!(i2 && s !== \"t\")) return `https://image.${e}/${t2}/thumbnail.webp${Oe4({ token: i2, time: o, program_time: r10 })}`;\n};\nvar bt3 = (t2, { token: i2, customDomain: e = ct3, programStartTime: a2, programEndTime: r10 } = {}) => {\n  let { aud: o } = N2(i2);\n  if (!(i2 && o !== \"s\")) return `https://image.${e}/${t2}/storyboard.vtt${Oe4({ token: i2, format: \"webp\", program_start_time: a2, program_end_time: r10 })}`;\n};\nvar Q3 = (t2) => {\n  if (t2) {\n    if ([g.LIVE, g.ON_DEMAND].includes(t2)) return t2;\n    if (t2 != null && t2.includes(\"live\")) return g.LIVE;\n  }\n};\nvar qt3 = { crossorigin: \"crossOrigin\", playsinline: \"playsInline\" };\nfunction ht(t2) {\n  var i2;\n  return (i2 = qt3[t2]) != null ? i2 : le4(t2);\n}\nvar K4;\nvar $4;\nvar E2;\nvar me3 = class {\n  constructor(i2, e) {\n    p(this, K4, void 0);\n    p(this, $4, void 0);\n    p(this, E2, []);\n    x3(this, K4, i2), x3(this, $4, e);\n  }\n  [Symbol.iterator]() {\n    return u2(this, E2).values();\n  }\n  get length() {\n    return u2(this, E2).length;\n  }\n  get value() {\n    var i2;\n    return (i2 = u2(this, E2).join(\" \")) != null ? i2 : \"\";\n  }\n  set value(i2) {\n    var e;\n    i2 !== this.value && (x3(this, E2, []), this.add(...(e = i2 == null ? void 0 : i2.split(\" \")) != null ? e : []));\n  }\n  toString() {\n    return this.value;\n  }\n  item(i2) {\n    return u2(this, E2)[i2];\n  }\n  values() {\n    return u2(this, E2).values();\n  }\n  keys() {\n    return u2(this, E2).keys();\n  }\n  forEach(i2) {\n    u2(this, E2).forEach(i2);\n  }\n  add(...i2) {\n    var e, a2;\n    i2.forEach((r10) => {\n      this.contains(r10) || u2(this, E2).push(r10);\n    }), !(this.value === \"\" && !((e = u2(this, K4)) != null && e.hasAttribute(`${u2(this, $4)}`))) && ((a2 = u2(this, K4)) == null || a2.setAttribute(`${u2(this, $4)}`, `${this.value}`));\n  }\n  remove(...i2) {\n    var e;\n    i2.forEach((a2) => {\n      u2(this, E2).splice(u2(this, E2).indexOf(a2), 1);\n    }), (e = u2(this, K4)) == null || e.setAttribute(`${u2(this, $4)}`, `${this.value}`);\n  }\n  contains(i2) {\n    return u2(this, E2).includes(i2);\n  }\n  toggle(i2, e) {\n    return typeof e != \"undefined\" ? e ? (this.add(i2), true) : (this.remove(i2), false) : this.contains(i2) ? (this.remove(i2), false) : (this.add(i2), true);\n  }\n  replace(i2, e) {\n    this.remove(i2), this.add(e);\n  }\n};\nK4 = /* @__PURE__ */ new WeakMap(), $4 = /* @__PURE__ */ new WeakMap(), E2 = /* @__PURE__ */ new WeakMap();\nvar gt2 = `[mux-player ${ue4()}]`;\nfunction I3(...t2) {\n  console.warn(gt2, ...t2);\n}\nfunction A2(...t2) {\n  console.error(gt2, ...t2);\n}\nfunction _e4(t2) {\n  var e;\n  let i2 = (e = t2.message) != null ? e : \"\";\n  if (t2.context && (i2 += ` ${t2.context}`), t2.file) {\n    let a2 = \"https://github.com/muxinc/elements/blob/main/errors/\";\n    i2 += ` ${m(\"Read more: \")}\n${a2}${t2.file}`;\n  }\n  I3(i2);\n}\nvar y3 = { AUTOPLAY: \"autoplay\", CROSSORIGIN: \"crossorigin\", LOOP: \"loop\", MUTED: \"muted\", PLAYSINLINE: \"playsinline\", PRELOAD: \"preload\" };\nvar F4 = { VOLUME: \"volume\", PLAYBACKRATE: \"playbackrate\", MUTED: \"muted\" };\nvar yt2 = Object.freeze({ length: 0, start(t2) {\n  let i2 = t2 >>> 0;\n  if (i2 >= this.length) throw new DOMException(`Failed to execute 'start' on 'TimeRanges': The index provided (${i2}) is greater than or equal to the maximum bound (${this.length}).`);\n  return 0;\n}, end(t2) {\n  let i2 = t2 >>> 0;\n  if (i2 >= this.length) throw new DOMException(`Failed to execute 'end' on 'TimeRanges': The index provided (${i2}) is greater than or equal to the maximum bound (${this.length}).`);\n  return 0;\n} });\nvar Xt4 = Et2.filter((t2) => t2 !== \"error\");\nvar Jt4 = Object.values(y3).filter((t2) => ![y3.PLAYSINLINE].includes(t2));\nvar Qt4 = Object.values(F4);\nvar j3;\nvar Pe3 = class extends c2.HTMLElement {\n  constructor() {\n    super();\n    p(this, j3, /* @__PURE__ */ new WeakMap());\n    let e = (r10) => {\n      for (let o of r10) o.type === \"childList\" && (o.removedNodes.forEach((s) => {\n        var l;\n        (l = u2(this, j3).get(s)) == null || l.remove();\n      }), o.addedNodes.forEach((s) => {\n        var h3;\n        let l = s;\n        l != null && l.slot || (h3 = this.media) == null || h3.append(vt3(u2(this, j3), s));\n      }));\n    };\n    new MutationObserver(e).observe(this, { childList: true, subtree: true });\n  }\n  static get observedAttributes() {\n    return [...Jt4, ...Qt4];\n  }\n  init() {\n    this.querySelectorAll(\":scope > :not([slot])\").forEach((e) => {\n      var a2;\n      (a2 = this.media) == null || a2.append(vt3(u2(this, j3), e));\n    }), Xt4.forEach((e) => {\n      var a2;\n      (a2 = this.media) == null || a2.addEventListener(e, (r10) => {\n        this.dispatchEvent(new Event(r10.type));\n      });\n    });\n  }\n  attributeChangedCallback(e, a2, r10) {\n    var o, s;\n    switch (e) {\n      case F4.MUTED: {\n        this.media && (this.media.muted = r10 != null, this.media.defaultMuted = r10 != null);\n        return;\n      }\n      case F4.VOLUME: {\n        let l = (o = L(r10)) != null ? o : 1;\n        this.media && (this.media.volume = l);\n        return;\n      }\n      case F4.PLAYBACKRATE: {\n        let l = (s = L(r10)) != null ? s : 1;\n        this.media && (this.media.playbackRate = l, this.media.defaultPlaybackRate = l);\n        return;\n      }\n    }\n  }\n  play() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.play()) != null ? a2 : Promise.reject();\n  }\n  pause() {\n    var e;\n    (e = this.media) == null || e.pause();\n  }\n  load() {\n    var e;\n    (e = this.media) == null || e.load();\n  }\n  requestCast(e) {\n    var a2;\n    return (a2 = this.media) == null ? void 0 : a2.requestCast(e);\n  }\n  get media() {\n    var e;\n    return (e = this.shadowRoot) == null ? void 0 : e.querySelector(\"mux-video\");\n  }\n  get audioTracks() {\n    return this.media.audioTracks;\n  }\n  get videoTracks() {\n    return this.media.videoTracks;\n  }\n  get audioRenditions() {\n    return this.media.audioRenditions;\n  }\n  get videoRenditions() {\n    return this.media.videoRenditions;\n  }\n  get paused() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.paused) != null ? a2 : true;\n  }\n  get duration() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.duration) != null ? a2 : NaN;\n  }\n  get ended() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.ended) != null ? a2 : false;\n  }\n  get buffered() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.buffered) != null ? a2 : yt2;\n  }\n  get seekable() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.seekable) != null ? a2 : yt2;\n  }\n  get readyState() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.readyState) != null ? a2 : 0;\n  }\n  get videoWidth() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.videoWidth) != null ? a2 : 0;\n  }\n  get videoHeight() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.videoHeight) != null ? a2 : 0;\n  }\n  get currentSrc() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.currentSrc) != null ? a2 : \"\";\n  }\n  get currentTime() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.currentTime) != null ? a2 : 0;\n  }\n  set currentTime(e) {\n    this.media && (this.media.currentTime = Number(e));\n  }\n  get volume() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.volume) != null ? a2 : 1;\n  }\n  set volume(e) {\n    this.media && (this.media.volume = Number(e));\n  }\n  get playbackRate() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.playbackRate) != null ? a2 : 1;\n  }\n  set playbackRate(e) {\n    this.media && (this.media.playbackRate = Number(e));\n  }\n  get defaultPlaybackRate() {\n    var e;\n    return (e = L(this.getAttribute(F4.PLAYBACKRATE))) != null ? e : 1;\n  }\n  set defaultPlaybackRate(e) {\n    e != null ? this.setAttribute(F4.PLAYBACKRATE, `${e}`) : this.removeAttribute(F4.PLAYBACKRATE);\n  }\n  get crossOrigin() {\n    return ee4(this, y3.CROSSORIGIN);\n  }\n  set crossOrigin(e) {\n    this.setAttribute(y3.CROSSORIGIN, `${e}`);\n  }\n  get autoplay() {\n    return ee4(this, y3.AUTOPLAY) != null;\n  }\n  set autoplay(e) {\n    e ? this.setAttribute(y3.AUTOPLAY, typeof e == \"string\" ? e : \"\") : this.removeAttribute(y3.AUTOPLAY);\n  }\n  get loop() {\n    return ee4(this, y3.LOOP) != null;\n  }\n  set loop(e) {\n    e ? this.setAttribute(y3.LOOP, \"\") : this.removeAttribute(y3.LOOP);\n  }\n  get muted() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.muted) != null ? a2 : false;\n  }\n  set muted(e) {\n    this.media && (this.media.muted = !!e);\n  }\n  get defaultMuted() {\n    return ee4(this, y3.MUTED) != null;\n  }\n  set defaultMuted(e) {\n    e ? this.setAttribute(y3.MUTED, \"\") : this.removeAttribute(y3.MUTED);\n  }\n  get playsInline() {\n    return ee4(this, y3.PLAYSINLINE) != null;\n  }\n  set playsInline(e) {\n    A2(\"playsInline is set to true by default and is not currently supported as a setter.\");\n  }\n  get preload() {\n    return this.media ? this.media.preload : this.getAttribute(\"preload\");\n  }\n  set preload(e) {\n    [\"\", \"none\", \"metadata\", \"auto\"].includes(e) ? this.setAttribute(y3.PRELOAD, e) : this.removeAttribute(y3.PRELOAD);\n  }\n};\nj3 = /* @__PURE__ */ new WeakMap();\nfunction ee4(t2, i2) {\n  return t2.media ? t2.media.getAttribute(i2) : t2.getAttribute(i2);\n}\nfunction vt3(t2, i2) {\n  let e = t2.get(i2);\n  return e || (e = i2.cloneNode(), t2.set(i2, e)), e;\n}\nvar Ne4 = Pe3;\nvar Et3 = `:host {\n  --media-control-display: var(--controls);\n  --media-loading-indicator-display: var(--loading-indicator);\n  --media-dialog-display: var(--dialog);\n  --media-play-button-display: var(--play-button);\n  --media-live-button-display: var(--live-button);\n  --media-seek-backward-button-display: var(--seek-backward-button);\n  --media-seek-forward-button-display: var(--seek-forward-button);\n  --media-mute-button-display: var(--mute-button);\n  --media-captions-button-display: var(--captions-button);\n  --media-captions-selectmenu-display: var(--captions-selectmenu, var(--media-captions-button-display));\n  --media-rendition-selectmenu-display: var(--rendition-selectmenu);\n  --media-audio-track-selectmenu-display: var(--audio-track-selectmenu);\n  --media-airplay-button-display: var(--airplay-button);\n  --media-pip-button-display: var(--pip-button);\n  --media-fullscreen-button-display: var(--fullscreen-button);\n  --media-cast-button-display: var(--cast-button, var(--_cast-button-drm-display));\n  --media-playback-rate-button-display: var(--playback-rate-button);\n  --media-playback-rate-selectmenu-display: var(--playback-rate-selectmenu);\n  --media-volume-range-display: var(--volume-range);\n  --media-time-range-display: var(--time-range);\n  --media-time-display-display: var(--time-display);\n  --media-duration-display-display: var(--duration-display);\n  --media-title-display-display: var(--title-display);\n\n  display: inline-block;\n  width: 100%;\n  line-height: 0;\n}\n\n/* Hide custom elements that are not defined yet */\n:not(:defined) {\n  display: none;\n}\n\na {\n  color: #fff;\n  font-size: 0.9em;\n  text-decoration: underline;\n}\n\nmedia-theme {\n  width: 100%;\n  height: 100%;\n  direction: ltr;\n}\n\nmedia-poster-image {\n  width: 100%;\n  height: 100%;\n}\n\nmedia-poster-image:not([src]):not([placeholdersrc]) {\n  display: none;\n}\n\n::part(top),\n[part~='top'] {\n  --media-control-display: var(--controls, var(--top-controls));\n  --media-play-button-display: var(--play-button, var(--top-play-button));\n  --media-live-button-display: var(--live-button, var(--top-live-button));\n  --media-seek-backward-button-display: var(--seek-backward-button, var(--top-seek-backward-button));\n  --media-seek-forward-button-display: var(--seek-forward-button, var(--top-seek-forward-button));\n  --media-mute-button-display: var(--mute-button, var(--top-mute-button));\n  --media-captions-button-display: var(--captions-button, var(--top-captions-button));\n  --media-captions-selectmenu-display: var(\n    --captions-selectmenu,\n    var(--media-captions-button-display, var(--top-captions-selectmenu))\n  );\n  --media-rendition-selectmenu-display: var(--rendition-selectmenu, var(--top-rendition-selectmenu));\n  --media-audio-track-selectmenu-display: var(--audio-track-selectmenu, var(--top-audio-track-selectmenu));\n  --media-airplay-button-display: var(--airplay-button, var(--top-airplay-button));\n  --media-pip-button-display: var(--pip-button, var(--top-pip-button));\n  --media-fullscreen-button-display: var(--fullscreen-button, var(--top-fullscreen-button));\n  --media-cast-button-display: var(--cast-button, var(--top-cast-button, var(--_cast-button-drm-display)));\n  --media-playback-rate-button-display: var(--playback-rate-button, var(--top-playback-rate-button));\n  --media-playback-rate-selectmenu-display: var(\n    --captions-selectmenu,\n    var(--media-playback-rate-button-display, var(--top-playback-rate-selectmenu))\n  );\n  --media-volume-range-display: var(--volume-range, var(--top-volume-range));\n  --media-time-range-display: var(--time-range, var(--top-time-range));\n  --media-time-display-display: var(--time-display, var(--top-time-display));\n  --media-duration-display-display: var(--duration-display, var(--top-duration-display));\n  --media-title-display-display: var(--title-display, var(--top-title-display));\n}\n\n::part(center),\n[part~='center'] {\n  --media-control-display: var(--controls, var(--center-controls));\n  --media-play-button-display: var(--play-button, var(--center-play-button));\n  --media-live-button-display: var(--live-button, var(--center-live-button));\n  --media-seek-backward-button-display: var(--seek-backward-button, var(--center-seek-backward-button));\n  --media-seek-forward-button-display: var(--seek-forward-button, var(--center-seek-forward-button));\n  --media-mute-button-display: var(--mute-button, var(--center-mute-button));\n  --media-captions-button-display: var(--captions-button, var(--center-captions-button));\n  --media-captions-selectmenu-display: var(\n    --captions-selectmenu,\n    var(--media-captions-button-display, var(--center-captions-selectmenu))\n  );\n  --media-rendition-selectmenu-display: var(--rendition-selectmenu, var(--center-rendition-selectmenu));\n  --media-audio-track-selectmenu-display: var(--audio-track-selectmenu, var(--center-audio-track-selectmenu));\n  --media-airplay-button-display: var(--airplay-button, var(--center-airplay-button));\n  --media-pip-button-display: var(--pip-button, var(--center-pip-button));\n  --media-fullscreen-button-display: var(--fullscreen-button, var(--center-fullscreen-button));\n  --media-cast-button-display: var(--cast-button, var(--center-cast-button, var(--_cast-button-drm-display)));\n  --media-playback-rate-button-display: var(--playback-rate-button, var(--center-playback-rate-button));\n  --media-playback-rate-selectmenu-display: var(\n    --playback-rate-selectmenu,\n    var(--media-playback-rate-button-display, var(--center-playback-rate-selectmenu))\n  );\n  --media-volume-range-display: var(--volume-range, var(--center-volume-range));\n  --media-time-range-display: var(--time-range, var(--center-time-range));\n  --media-time-display-display: var(--time-display, var(--center-time-display));\n  --media-duration-display-display: var(--duration-display, var(--center-duration-display));\n}\n\n::part(bottom),\n[part~='bottom'] {\n  --media-control-display: var(--controls, var(--bottom-controls));\n  --media-play-button-display: var(--play-button, var(--bottom-play-button));\n  --media-live-button-display: var(--live-button, var(--bottom-live-button));\n  --media-seek-backward-button-display: var(--seek-backward-button, var(--bottom-seek-backward-button));\n  --media-seek-forward-button-display: var(--seek-forward-button, var(--bottom-seek-forward-button));\n  --media-mute-button-display: var(--mute-button, var(--bottom-mute-button));\n  --media-captions-button-display: var(--captions-button, var(--bottom-captions-button));\n  --media-captions-selectmenu-display: var(\n    --captions-selectmenu,\n    var(--media-captions-button-display, var(--bottom-captions-selectmenu))\n  );\n  --media-rendition-selectmenu-display: var(--rendition-selectmenu, var(--bottom-rendition-selectmenu));\n  --media-audio-track-selectmenu-display: var(--audio-track-selectmenu, var(--bottom-audio-track-selectmenu));\n  --media-airplay-button-display: var(--airplay-button, var(--bottom-airplay-button));\n  --media-pip-button-display: var(--pip-button, var(--bottom-pip-button));\n  --media-fullscreen-button-display: var(--fullscreen-button, var(--bottom-fullscreen-button));\n  --media-cast-button-display: var(--cast-button, var(--bottom-cast-button, var(--_cast-button-drm-display)));\n  --media-playback-rate-button-display: var(--playback-rate-button, var(--bottom-playback-rate-button));\n  --media-playback-rate-selectmenu-display: var(\n    --playback-rate-selectmenu,\n    var(--media-playback-rate-button-display, var(--bottom-playback-rate-selectmenu))\n  );\n  --media-volume-range-display: var(--volume-range, var(--bottom-volume-range));\n  --media-time-range-display: var(--time-range, var(--bottom-time-range));\n  --media-time-display-display: var(--time-display, var(--bottom-time-display));\n  --media-duration-display-display: var(--duration-display, var(--bottom-duration-display));\n  --media-title-display-display: var(--title-display, var(--bottom-title-display));\n}\n`;\nvar Tt3 = `\n  :host {\n    z-index: 100;\n    display: var(--media-dialog-display, flex);\n    justify-content: center;\n    align-items: center;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    top: 0;\n    left: 0;\n    box-sizing: border-box;\n    color: #fff;\n    line-height: 18px;\n    font-family: Arial, sans-serif;\n    padding: var(--media-dialog-backdrop-padding, 0);\n    background: var(--media-dialog-backdrop-background,\n      linear-gradient(to bottom, rgba(20, 20, 30, 0.7) 50%, rgba(20, 20, 30, 0.9))\n    );\n    /* Needs to use !important to prevent overwrite of media-chrome */\n    transition: var(--media-dialog-transition-open, visibility .2s, opacity .2s) !important;\n    transform: var(--media-dialog-transform-open, none) !important;\n    visibility: visible !important;\n    opacity: 1 !important;\n    pointer-events: auto !important;\n  }\n\n  :host(:not([open])) {\n    /* Needs to use !important to prevent overwrite of media-chrome */\n    transition: var(--media-dialog-transition-close, visibility .1s, opacity .1s) !important;\n    transform: var(--media-dialog-transform-close, none) !important;\n    visibility: hidden !important;\n    opacity: 0 !important;\n    pointer-events: none !important;\n  }\n\n  :focus-visible {\n    box-shadow: 0 0 0 2px rgba(27, 127, 204, 0.9);\n  }\n\n  .dialog {\n    position: relative;\n    box-sizing: border-box;\n    background: var(--media-dialog-background, none);\n    padding: var(--media-dialog-padding, 10px);\n    width: min(320px, 100%);\n    word-wrap: break-word;\n    max-height: 100%;\n    overflow: auto;\n    text-align: center;\n    line-height: 1.4;\n  }\n`;\nvar At3 = T2.createElement(\"template\");\nAt3.innerHTML = `\n  <style>\n    ${Tt3}\n  </style>\n\n  <div class=\"dialog\">\n    <slot></slot>\n  </div>\n`;\nvar D2 = class extends c2.HTMLElement {\n  constructor() {\n    var e;\n    super();\n    this.attachShadow({ mode: \"open\" }), (e = this.shadowRoot) == null || e.appendChild(this.constructor.template.content.cloneNode(true));\n  }\n  show() {\n    this.setAttribute(\"open\", \"\"), this.dispatchEvent(new CustomEvent(\"open\", { composed: true, bubbles: true })), kt3(this);\n  }\n  close() {\n    this.hasAttribute(\"open\") && (this.removeAttribute(\"open\"), this.dispatchEvent(new CustomEvent(\"close\", { composed: true, bubbles: true })), ta(this));\n  }\n  attributeChangedCallback(e, a2, r10) {\n    e === \"open\" && a2 !== r10 && (r10 != null ? this.show() : this.close());\n  }\n  connectedCallback() {\n    this.hasAttribute(\"role\") || this.setAttribute(\"role\", \"dialog\"), this.hasAttribute(\"open\") && kt3(this);\n  }\n};\nD2.styles = Tt3, D2.template = At3, D2.observedAttributes = [\"open\"];\nfunction kt3(t2) {\n  let i2 = new CustomEvent(\"initfocus\", { composed: true, bubbles: true, cancelable: true });\n  if (t2.dispatchEvent(i2), i2.defaultPrevented) return;\n  let e = t2.querySelector(\"[autofocus]:not([disabled])\");\n  !e && t2.tabIndex >= 0 && (e = t2), e || (e = Ct3(t2.shadowRoot)), t2._previouslyFocusedElement = T2.activeElement, T2.activeElement instanceof HTMLElement && T2.activeElement.blur(), t2.addEventListener(\"transitionend\", () => {\n    e instanceof HTMLElement && e.focus({ preventScroll: true });\n  }, { once: true });\n}\nfunction Ct3(t2) {\n  let e = [\"button\", \"input\", \"keygen\", \"select\", \"textarea\"].map(function(r10) {\n    return r10 + \":not([disabled])\";\n  });\n  e.push('[tabindex]:not([disabled]):not([tabindex=\"\"])');\n  let a2 = t2 == null ? void 0 : t2.querySelector(e.join(\", \"));\n  if (!a2 && \"attachShadow\" in Element.prototype) {\n    let r10 = (t2 == null ? void 0 : t2.querySelectorAll(\"*\")) || [];\n    for (let o = 0; o < r10.length && !(r10[o].tagName && r10[o].shadowRoot && (a2 = Ct3(r10[o].shadowRoot), a2)); o++) ;\n  }\n  return a2;\n}\nfunction ta(t2) {\n  t2._previouslyFocusedElement instanceof HTMLElement && t2._previouslyFocusedElement.focus();\n}\nc2.customElements.get(\"media-dialog\") || (c2.customElements.define(\"media-dialog\", D2), c2.MediaDialog = D2);\nvar Ie3 = D2;\nvar xt2 = T2.createElement(\"template\");\nxt2.innerHTML = `\n  <style>\n    ${Ie3.styles}\n\n    .close {\n      background: none;\n      color: inherit;\n      border: none;\n      padding: 0;\n      font: inherit;\n      cursor: pointer;\n      outline: inherit;\n      width: 28px;\n      height: 28px;\n      position: absolute;\n      top: 1rem;\n      right: 1rem;\n    }\n  </style>\n\n  <div class=\"dialog\">\n    <slot></slot>\n  </div>\n\n  <slot name=\"close\">\n    <button class=\"close\" tabindex=\"0\">\n      <svg fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n        <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\" />\n      </svg>\n    </button>\n  </slot>\n`;\nvar te4 = class extends Ie3 {\n  constructor() {\n    var i2, e;\n    super(), (e = (i2 = this.shadowRoot) == null ? void 0 : i2.querySelector(\".close\")) == null || e.addEventListener(\"click\", () => {\n      this.close();\n    });\n  }\n};\nte4.template = xt2;\nc2.customElements.get(\"mxp-dialog\") || (c2.customElements.define(\"mxp-dialog\", te4), c2.MxpDialog = te4);\nvar ae3 = /* @__PURE__ */ new WeakMap();\nvar Ve3 = class t {\n  constructor(i2, e) {\n    this.element = i2;\n    this.type = e;\n    this.element.addEventListener(this.type, this);\n    let a2 = ae3.get(this.element);\n    a2 && a2.set(this.type, this);\n  }\n  set(i2) {\n    if (typeof i2 == \"function\") this.handleEvent = i2.bind(this.element);\n    else if (typeof i2 == \"object\" && typeof i2.handleEvent == \"function\") this.handleEvent = i2.handleEvent.bind(i2);\n    else {\n      this.element.removeEventListener(this.type, this);\n      let e = ae3.get(this.element);\n      e && e.delete(this.type);\n    }\n  }\n  static for(i2) {\n    ae3.has(i2.element) || ae3.set(i2.element, /* @__PURE__ */ new Map());\n    let e = i2.attributeName.slice(2), a2 = ae3.get(i2.element);\n    return a2 && a2.has(e) ? a2.get(e) : new t(i2.element, e);\n  }\n};\nfunction ia(t2, i2) {\n  return t2 instanceof AttrPart && t2.attributeName.startsWith(\"on\") ? (Ve3.for(t2).set(i2), t2.element.removeAttributeNS(t2.attributeNamespace, t2.attributeName), true) : false;\n}\nfunction ra(t2, i2) {\n  return i2 instanceof ce4 && t2 instanceof ChildNodePart ? (i2.renderInto(t2), true) : false;\n}\nfunction oa(t2, i2) {\n  return i2 instanceof DocumentFragment && t2 instanceof ChildNodePart ? (i2.childNodes.length && t2.replace(...i2.childNodes), true) : false;\n}\nfunction na(t2, i2) {\n  if (t2 instanceof AttrPart) {\n    let e = t2.attributeNamespace, a2 = t2.element.getAttributeNS(e, t2.attributeName);\n    return String(i2) !== a2 && (t2.value = String(i2)), true;\n  }\n  return t2.value = String(i2), true;\n}\nfunction sa(t2, i2) {\n  if (t2 instanceof AttrPart && i2 instanceof Element) {\n    let e = t2.element;\n    return e[t2.attributeName] !== i2 && (t2.element.removeAttributeNS(t2.attributeNamespace, t2.attributeName), e[t2.attributeName] = i2), true;\n  }\n  return false;\n}\nfunction da(t2, i2) {\n  if (typeof i2 == \"boolean\" && t2 instanceof AttrPart) {\n    let e = t2.attributeNamespace, a2 = t2.element.hasAttributeNS(e, t2.attributeName);\n    return i2 !== a2 && (t2.booleanValue = i2), true;\n  }\n  return false;\n}\nfunction la(t2, i2) {\n  return i2 === false && t2 instanceof ChildNodePart ? (t2.replace(\"\"), true) : false;\n}\nfunction ma(t2, i2) {\n  sa(t2, i2) || da(t2, i2) || ia(t2, i2) || la(t2, i2) || ra(t2, i2) || oa(t2, i2) || na(t2, i2);\n}\nvar De4 = /* @__PURE__ */ new Map();\nvar Lt3 = /* @__PURE__ */ new WeakMap();\nvar Rt3 = /* @__PURE__ */ new WeakMap();\nvar ce4 = class {\n  constructor(i2, e, a2) {\n    this.strings = i2;\n    this.values = e;\n    this.processor = a2;\n    this.stringsKey = this.strings.join(\"\u0001\");\n  }\n  get template() {\n    if (De4.has(this.stringsKey)) return De4.get(this.stringsKey);\n    {\n      let i2 = T2.createElement(\"template\"), e = this.strings.length - 1;\n      return i2.innerHTML = this.strings.reduce((a2, r10, o) => a2 + r10 + (o < e ? `{{ ${o} }}` : \"\"), \"\"), De4.set(this.stringsKey, i2), i2;\n    }\n  }\n  renderInto(i2) {\n    var r10;\n    let e = this.template;\n    if (Lt3.get(i2) !== e) {\n      Lt3.set(i2, e);\n      let o = new TemplateInstance(e, this.values, this.processor);\n      Rt3.set(i2, o), i2 instanceof ChildNodePart ? i2.replace(...o.children) : i2.appendChild(o);\n      return;\n    }\n    let a2 = Rt3.get(i2);\n    (r10 = a2 == null ? void 0 : a2.update) == null || r10.call(a2, this.values);\n  }\n};\nvar ua = { processCallback(t2, i2, e) {\n  var a2;\n  if (e) {\n    for (let [r10, o] of i2) if (r10 in e) {\n      let s = (a2 = e[r10]) != null ? a2 : \"\";\n      ma(o, s);\n    }\n  }\n} };\nfunction S3(t2, ...i2) {\n  return new ce4(t2, i2, ua);\n}\nfunction wt2(t2, i2) {\n  t2.renderInto(i2);\n}\nvar pa = (t2) => {\n  let { tokens: i2 } = t2;\n  return i2.drm ? \":host { --_cast-button-drm-display: none; }\" : \"\";\n};\nvar St2 = (t2) => S3`\n  <style>\n    ${pa(t2)}\n    ${Et3}\n  </style>\n  ${fa(t2)}\n`;\nvar ba = (t2) => {\n  let i2 = t2.hotKeys ? `${t2.hotKeys}` : \"\";\n  return Q3(t2.streamType) === \"live\" && (i2 += \" noarrowleft noarrowright\"), i2;\n};\nvar ha = { TOP: \"top\", CENTER: \"center\", BOTTOM: \"bottom\", LAYER: \"layer\", MEDIA_LAYER: \"media-layer\", POSTER_LAYER: \"poster-layer\", VERTICAL_LAYER: \"vertical-layer\", CENTERED_LAYER: \"centered-layer\", GESTURE_LAYER: \"gesture-layer\", CONTROLLER_LAYER: \"controller\", BUTTON: \"button\", RANGE: \"range\", DISPLAY: \"display\", CONTROL_BAR: \"control-bar\", SELECTMENU: \"selectmenu\", LISTBOX: \"listbox\", OPTION: \"option\", POSTER: \"poster\", LIVE: \"live\", PLAY: \"play\", PRE_PLAY: \"pre-play\", SEEK_BACKWARD: \"seek-backward\", SEEK_FORWARD: \"seek-forward\", MUTE: \"mute\", CAPTIONS: \"captions\", AIRPLAY: \"airplay\", PIP: \"pip\", FULLSCREEN: \"fullscreen\", CAST: \"cast\", PLAYBACK_RATE: \"playback-rate\", VOLUME: \"volume\", TIME: \"time\", TITLE: \"title\", AUDIO_TRACK: \"audio-track\", RENDITION: \"rendition\" };\nvar ga = Object.values(ha).join(\", \");\nvar fa = (t2) => {\n  var i2, e, a2, r10, o, s, l, h3, R2, k3, v4, f, C3, P2, g2, B5, q3, z2, $e4, Fe3, Ye4, We4, Ze3, Ge3, je4, qe4, ze4, Xe4, Je4, Qe4, et3, tt4, at4, it2, rt3, ot4, nt4, st4;\n  return S3`\n  <media-theme\n    template=\"${t2.themeTemplate || false}\"\n    defaultstreamtype=\"${(i2 = t2.defaultStreamType) != null ? i2 : false}\"\n    hotkeys=\"${ba(t2) || false}\"\n    nohotkeys=\"${t2.noHotKeys || !t2.hasSrc || t2.isDialogOpen || false}\"\n    noautoseektolive=\"${!!((e = t2.streamType) != null && e.includes(g.LIVE)) && t2.targetLiveWindow !== 0}\"\n    novolumepref=\"${t2.novolumepref || false}\"\n    disabled=\"${!t2.hasSrc || t2.isDialogOpen}\"\n    audio=\"${(a2 = t2.audio) != null ? a2 : false}\"\n    style=\"${(r10 = ut3({ \"--media-primary-color\": t2.primaryColor, \"--media-secondary-color\": t2.secondaryColor, \"--media-accent-color\": t2.accentColor })) != null ? r10 : false}\"\n    defaultsubtitles=\"${!t2.defaultHiddenCaptions}\"\n    forwardseekoffset=\"${(o = t2.forwardSeekOffset) != null ? o : false}\"\n    backwardseekoffset=\"${(s = t2.backwardSeekOffset) != null ? s : false}\"\n    playbackrates=\"${(l = t2.playbackRates) != null ? l : false}\"\n    defaultshowremainingtime=\"${(h3 = t2.defaultShowRemainingTime) != null ? h3 : false}\"\n    defaultduration=\"${(R2 = t2.defaultDuration) != null ? R2 : false}\"\n    hideduration=\"${(k3 = t2.hideDuration) != null ? k3 : false}\"\n    title=\"${(v4 = t2.title) != null ? v4 : false}\"\n    exportparts=\"${ga}\"\n  >\n    <mux-video\n      slot=\"media\"\n      target-live-window=\"${(f = t2.targetLiveWindow) != null ? f : false}\"\n      stream-type=\"${(C3 = Q3(t2.streamType)) != null ? C3 : false}\"\n      crossorigin=\"${(P2 = t2.crossOrigin) != null ? P2 : \"\"}\"\n      playsinline\n      autoplay=\"${(g2 = t2.autoplay) != null ? g2 : false}\"\n      muted=\"${(B5 = t2.muted) != null ? B5 : false}\"\n      loop=\"${(q3 = t2.loop) != null ? q3 : false}\"\n      preload=\"${(z2 = t2.preload) != null ? z2 : false}\"\n      debug=\"${($e4 = t2.debug) != null ? $e4 : false}\"\n      prefer-cmcd=\"${(Fe3 = t2.preferCmcd) != null ? Fe3 : false}\"\n      disable-tracking=\"${(Ye4 = t2.disableTracking) != null ? Ye4 : false}\"\n      disable-cookies=\"${(We4 = t2.disableCookies) != null ? We4 : false}\"\n      prefer-playback=\"${(Ze3 = t2.preferPlayback) != null ? Ze3 : false}\"\n      start-time=\"${t2.startTime != null ? t2.startTime : false}\"\n      beacon-collection-domain=\"${(Ge3 = t2.beaconCollectionDomain) != null ? Ge3 : false}\"\n      player-software-name=\"${(je4 = t2.playerSoftwareName) != null ? je4 : false}\"\n      player-software-version=\"${(qe4 = t2.playerSoftwareVersion) != null ? qe4 : false}\"\n      env-key=\"${(ze4 = t2.envKey) != null ? ze4 : false}\"\n      custom-domain=\"${(Xe4 = t2.customDomain) != null ? Xe4 : false}\"\n      src=\"${t2.src ? t2.src : t2.playbackId ? Gt2(t2) : false}\"\n      cast-src=\"${t2.src ? t2.src : t2.playbackId ? Gt2(t2) : false}\"\n      drm-token=\"${(Qe4 = (Je4 = t2.tokens) == null ? void 0 : Je4.drm) != null ? Qe4 : false}\"\n      exportparts=\"video\"\n    >\n      ${t2.storyboard ? S3`<track label=\"thumbnails\" default kind=\"metadata\" src=\"${t2.storyboard}\" />` : S3``}\n    </mux-video>\n    <slot name=\"poster\" slot=\"poster\">\n      <media-poster-image\n        part=\"poster\"\n        exportparts=\"poster, img\"\n        src=\"${t2.poster === \"\" ? false : (et3 = t2.poster) != null ? et3 : false}\"\n        placeholdersrc=\"${(tt4 = t2.placeholder) != null ? tt4 : false}\"\n      ></media-poster-image>\n    </slot>\n    <mxp-dialog\n      no-auto-hide\n      open=\"${(at4 = t2.isDialogOpen) != null ? at4 : false}\"\n      onclose=\"${t2.onCloseErrorDialog}\"\n      oninitfocus=\"${t2.onInitFocusDialog}\"\n    >\n      ${(it2 = t2.dialog) != null && it2.title ? S3`<h3>${t2.dialog.title}</h3>` : S3``}\n      <p>\n        ${(rt3 = t2.dialog) == null ? void 0 : rt3.message}\n        ${(ot4 = t2.dialog) != null && ot4.linkUrl ? S3`<a\n              href=\"${t2.dialog.linkUrl}\"\n              target=\"_blank\"\n              rel=\"external noopener\"\n              aria-label=\"${(nt4 = t2.dialog.linkText) != null ? nt4 : \"\"} ${m(\"(opens in a new window)\")}\"\n              >${(st4 = t2.dialog.linkText) != null ? st4 : t2.dialog.linkUrl}</a\n            >` : S3``}\n      </p>\n    </mxp-dialog>\n  </media-theme>\n`;\n};\nfunction ge3(t2, i2, e, a2, r10) {\n  var l, h3, R2;\n  let o = {}, s = {};\n  switch (t2.code) {\n    case x.MEDIA_ERR_NETWORK: {\n      switch (o.title = m(\"Network Error\", r10), o.message = t2.message, (l = t2.data) == null ? void 0 : l.response.code) {\n        case 412: {\n          o.title = m(\"Video is not currently available\", r10), o.message = m(\"The live stream or video file are not yet ready.\", r10), s.message = m(\"This playback-id may belong to a live stream that is not currently active or an asset that is not ready.\", r10), s.file = \"412-not-playable.md\";\n          break;\n        }\n        case 404: {\n          o.title = m(\"Video does not exist\", r10), o.message = \"\", s.message = m(\"This playback-id does not exist. You may have used an Asset ID or an ID from a different resource.\", r10), s.file = \"404-not-found.md\";\n          break;\n        }\n        case 403: {\n          if (o.title = m(\"Invalid playback URL\", r10), o.message = m(\"The video URL or playback-token are formatted with incorrect or incomplete information.\", r10), s.message = m(\"403 error trying to access this playback URL. If this is a signed URL, you might need to provide a playback-token.\", r10), s.file = \"missing-signed-tokens.md\", !a2) break;\n          let { exp: k3, aud: v4, sub: f } = N2(a2), C3 = Date.now() > k3 * 1e3, P2 = f !== e, g2 = v4 !== \"v\", B5 = { timeStyle: \"medium\", dateStyle: \"medium\" };\n          if (C3) {\n            o.title = m(\"Video URL has expired\", r10), o.message = m(\"The video\\u2019s secured playback-token has expired.\", r10), s.message = m(\"The video\\u2019s secured playback-token has expired.\", r10), s.context = m(\"Expired at: {expiredDate}. Current time: {currentDate}.\", r10).format({ expiredDate: new Intl.DateTimeFormat(U3.code, B5).format(k3 * 1e3), currentDate: new Intl.DateTimeFormat(U3.code, B5).format(Date.now()) }), s.file = \"403-expired-token.md\";\n            break;\n          }\n          if (P2) {\n            o.title = m(\"Video URL is formatted incorrectly\", r10), o.message = m(\"The video\\u2019s playback ID does not match the one encoded in the playback-token.\", r10), s.message = m(\"The video\\u2019s playback ID does not match the one encoded in the playback-token.\", r10), s.context = m(\"Specified playback ID: {playbackId} and the playback ID encoded in the playback-token: {tokenPlaybackId}\", r10).format({ playbackId: e, tokenPlaybackId: f }), s.file = \"403-playback-id-mismatch.md\";\n            break;\n          }\n          if (g2) {\n            o.title = m(\"Video URL is formatted incorrectly\", r10), o.message = m(\"The playback-token is formatted with incorrect information.\", r10), s.message = m(\"The playback-token is formatted with incorrect information.\", r10), s.context = m(\"The playback-token has an incorrect aud value: {tokenType}. aud value should be v.\", r10).format({ tokenType: v4 }), s.file = \"403-incorrect-aud-value.md\";\n            break;\n          }\n          s.message = m(\"403 error trying to access this playback URL. If this is a signed playback ID, the token might not have been generated correctly.\", r10), s.file = \"403-malformatted-token.md\";\n          break;\n        }\n      }\n      break;\n    }\n    case x.MEDIA_ERR_DECODE: {\n      let { message: k3 } = t2;\n      o = { title: m(\"Media Error\", r10), message: k3 }, s.file = \"media-decode-error.md\";\n      break;\n    }\n    case x.MEDIA_ERR_SRC_NOT_SUPPORTED: {\n      let k3 = (R2 = (h3 = t2.data) == null ? void 0 : h3.response) == null ? void 0 : R2.code;\n      if (k3 >= 400 && k3 < 500) {\n        t2.code = x.MEDIA_ERR_NETWORK, t2.data = { response: { code: k3 } }, { dialog: o, devlog: s } = ge3(t2, i2, e, a2);\n        break;\n      }\n      o = { title: m(\"Source Not Supported\", r10), message: t2.message }, s.file = \"media-src-not-supported.md\";\n      break;\n    }\n    default:\n      o = { title: m(\"Error\", r10), message: t2.message };\n      break;\n  }\n  return i2 && (o = { title: m(\"Your device appears to be offline\", r10), message: m(\"Check your internet connection and try reloading this video.\", r10) }), { dialog: o, devlog: s };\n}\nvar Mt2 = `<template id=\"media-theme-gerwig\">\n  <style>\n    @keyframes pre-play-hide {\n      0% {\n        transform: scale(1);\n        opacity: 1;\n      }\n\n      30% {\n        transform: scale(0.7);\n      }\n\n      100% {\n        transform: scale(1.5);\n        opacity: 0;\n      }\n    }\n\n    :host {\n      --_primary-color: var(--media-primary-color, #fff);\n      --_secondary-color: var(--media-secondary-color, transparent);\n      --_accent-color: var(--media-accent-color, #fa50b5);\n      --_text-color: var(--media-text-color, #000);\n\n      --media-icon-color: var(--_primary-color);\n      --media-control-background: var(--_secondary-color);\n      --media-control-hover-background: var(--_accent-color);\n      --media-time-buffered-color: rgba(255, 255, 255, 0.4);\n      --media-preview-time-text-shadow: none;\n      --media-control-height: 14px;\n      --media-control-padding: 6px;\n\n      color: var(--_primary-color);\n      display: inline-block;\n      width: 100%;\n      height: 100%;\n    }\n\n    :host([audio]) {\n      --_secondary-color: var(--media-secondary-color, black);\n      --media-preview-time-text-shadow: none;\n    }\n\n    :host([audio]) ::slotted([slot='media']) {\n      height: 0px;\n    }\n\n    :host([audio]) media-loading-indicator {\n      display: none;\n    }\n\n    :host([audio]) media-controller {\n      background: transparent;\n    }\n\n    :host([audio]) media-controller::part(vertical-layer) {\n      background: transparent;\n    }\n\n    :host([audio]) media-control-bar {\n      width: 100%;\n      background-color: var(--media-control-background);\n    }\n\n    /*\n     * 0.433s is the transition duration for VTT Regions.\n     * Borrowed here, so the captions don't move too fast.\n     */\n    media-controller {\n      --media-webkit-text-track-transform: translateY(0) scale(0.98);\n      --media-webkit-text-track-transition: transform 0.433s ease-out 0.3s;\n    }\n    media-controller:is([mediapaused], :not([userinactive])) {\n      --media-webkit-text-track-transform: translateY(-50px) scale(0.98);\n      --media-webkit-text-track-transition: transform 0.15s ease;\n    }\n\n    /*\n     * CSS specific to iOS devices.\n     * See: https://stackoverflow.com/questions/30102792/css-media-query-to-target-only-ios-devices/60220757#60220757\n     */\n    @supports (-webkit-touch-callout: none) {\n      /* Disable subtitle adjusting for iOS Safari */\n      media-controller[mediaisfullscreen] {\n        --media-webkit-text-track-transform: unset;\n        --media-webkit-text-track-transition: unset;\n      }\n    }\n\n    media-time-range {\n      --media-box-padding-left: 6px;\n      --media-box-padding-right: 6px;\n      --media-range-bar-color: var(--_accent-color);\n      --media-time-range-buffered-color: var(--_primary-color);\n      --media-range-track-color: transparent;\n      --media-range-track-background: rgba(255, 255, 255, 0.4);\n      --media-range-thumb-background: radial-gradient(\n        circle,\n        #000 0%,\n        #000 25%,\n        var(--_accent-color) 25%,\n        var(--_accent-color)\n      );\n      --media-range-thumb-width: 12px;\n      --media-range-thumb-height: 12px;\n      --media-range-thumb-transform: scale(0);\n      --media-range-thumb-transition: transform 0.3s;\n      --media-range-thumb-opacity: 1;\n      --media-preview-background: var(--_primary-color);\n      --media-box-arrow-background: var(--_primary-color);\n      --media-preview-thumbnail-border: 5px solid var(--_primary-color);\n      --media-preview-border-radius: 5px;\n      --media-text-color: var(--_text-color);\n      --media-control-hover-background: transparent;\n      --media-preview-chapter-text-shadow: none;\n      color: var(--_accent-color);\n      padding: 0 6px;\n    }\n\n    :host([audio]) media-time-range {\n      --media-preview-time-padding: 1.5px 6px;\n      --media-preview-box-margin: 0 0 -5px;\n    }\n\n    media-time-range:hover {\n      --media-range-thumb-transform: scale(1);\n    }\n\n    media-preview-thumbnail {\n      border-bottom-width: 0;\n    }\n\n    [part~='listbox'] {\n      border-radius: 2px;\n      border: 1px solid rgba(0, 0, 0, 0.1);\n      bottom: calc(100% + 16px);\n      padding: 2.5px 10px;\n    }\n\n    [part~='listbox']::part(indicator) {\n      fill: var(--_accent-color);\n    }\n\n    [part~='listbox']::part(option) {\n      box-sizing: border-box;\n      display: flex;\n      align-items: center;\n      padding: 6px 10px;\n      min-height: 34px;\n    }\n\n    [part~='listbox']::part(option-selected) {\n      font-weight: 700;\n    }\n\n    media-captions-selectmenu,\n    media-rendition-selectmenu,\n    media-audio-track-selectmenu,\n    media-playback-rate-listbox[part~='listbox'] {\n      --media-listbox-background: var(--_primary-color);\n      --media-option-selected-background: transparent;\n      --media-option-hover-background: transparent;\n      --media-option-hover-outline: var(--_accent-color) solid 1px;\n      --media-text-color: var(--_text-color);\n    }\n\n    /* The icon is a circle so make it 16px high instead of 14px for more balance. */\n    media-audio-track-selectmenu {\n      --media-control-padding: 5px;\n      --media-control-height: 16px;\n    }\n\n    media-playback-rate-button {\n      --media-control-padding: 6px 3px;\n      min-width: 4.4ch;\n    }\n\n    media-playback-rate-listbox[part~='listbox'] {\n      --media-listbox-layout: row;\n      --media-option-selected-background: var(--_accent-color);\n      margin-right: 6px;\n      padding: 0;\n    }\n\n    media-playback-rate-listbox[part~='listbox']::part(option) {\n      padding: 6px 4px;\n    }\n\n    media-playback-rate-listbox[part~='listbox']::part(option-selected) {\n      color: #fff;\n    }\n\n    :host(:not([audio])) media-time-range {\n      /* Adding px is required here for calc() */\n      --media-range-padding: 0px;\n      background: transparent;\n      z-index: 10;\n      height: 10px;\n      bottom: -3px;\n      width: 100%;\n    }\n\n    media-control-bar :is([role='button'], [role='switch'], button) {\n      line-height: 0;\n    }\n\n    media-control-bar :is([part*='button'], [part*='range'], [part*='display']) {\n      border-radius: 3px;\n    }\n\n    .spacer {\n      flex-grow: 1;\n      background-color: var(--media-control-background, rgba(20, 20, 30, 0.7));\n    }\n\n    media-control-bar[slot~='top-chrome'] {\n      min-height: 42px;\n      pointer-events: none;\n    }\n\n    media-control-bar {\n      --gradient-steps: hsl(0 0% 0% / 0) 0%, hsl(0 0% 0% / 0.013) 8.1%, hsl(0 0% 0% / 0.049) 15.5%,\n        hsl(0 0% 0% / 0.104) 22.5%, hsl(0 0% 0% / 0.175) 29%, hsl(0 0% 0% / 0.259) 35.3%, hsl(0 0% 0% / 0.352) 41.2%,\n        hsl(0 0% 0% / 0.45) 47.1%, hsl(0 0% 0% / 0.55) 52.9%, hsl(0 0% 0% / 0.648) 58.8%, hsl(0 0% 0% / 0.741) 64.7%,\n        hsl(0 0% 0% / 0.825) 71%, hsl(0 0% 0% / 0.896) 77.5%, hsl(0 0% 0% / 0.951) 84.5%, hsl(0 0% 0% / 0.987) 91.9%,\n        hsl(0 0% 0%) 100%;\n    }\n\n    :host([title]:not([audio])) media-control-bar[slot='top-chrome']::before {\n      content: '';\n      position: absolute;\n      width: 100%;\n      padding-bottom: min(100px, 25%);\n      background: linear-gradient(to top, var(--gradient-steps));\n      opacity: 0.8;\n      pointer-events: none;\n    }\n\n    :host(:not([audio])) media-control-bar[part~='bottom']::before {\n      content: '';\n      position: absolute;\n      width: 100%;\n      bottom: 0;\n      left: 0;\n      padding-bottom: min(100px, 25%);\n      background: linear-gradient(to bottom, var(--gradient-steps));\n      opacity: 0.8;\n      z-index: 1;\n      pointer-events: none;\n    }\n\n    media-control-bar[part~='bottom'] > * {\n      z-index: 2;\n    }\n\n    media-control-bar[part~='bottom'] {\n      padding: 6px 6px;\n    }\n\n    media-control-bar[slot~='top-chrome'] > * {\n      --media-control-background: transparent;\n      --media-control-hover-background: transparent;\n      position: relative;\n    }\n\n    media-controller::part(vertical-layer) {\n      transition: background-color 1s;\n    }\n\n    media-controller:is([mediapaused], :not([userinactive]))::part(vertical-layer) {\n      background-color: var(--controls-backdrop-color, var(--controls, transparent));\n      transition: background-color 0.25s;\n    }\n\n    .center-controls {\n      --media-button-icon-width: 100%;\n      --media-button-icon-height: auto;\n      pointer-events: none;\n      width: 100%;\n      display: flex;\n      flex-flow: row;\n      align-items: center;\n      justify-content: center;\n      filter: drop-shadow(0 0 2px rgb(0 0 0 / 0.25)) drop-shadow(0 0 6px rgb(0 0 0 / 0.25));\n      paint-order: stroke;\n      stroke: rgba(102, 102, 102, 1);\n      stroke-width: 0.3px;\n      text-shadow:\n        0 0 2px rgb(0 0 0 / 0.25),\n        0 0 6px rgb(0 0 0 / 0.25);\n    }\n\n    .center-controls media-play-button {\n      --media-control-background: transparent;\n      --media-control-hover-background: transparent;\n      --media-control-padding: 0;\n      width: 40px;\n    }\n\n    [breakpointsm] .center-controls media-play-button {\n      width: 90px;\n      height: 90px;\n      border-radius: 50%;\n      transition: background 0.4s;\n      padding: 24px;\n      --media-control-background: #000;\n      --media-control-hover-background: var(--_accent-color);\n    }\n\n    .center-controls media-seek-backward-button,\n    .center-controls media-seek-forward-button {\n      --media-control-background: transparent;\n      --media-control-hover-background: transparent;\n      padding: 0;\n      margin: 0 20px;\n      width: max(33px, min(8%, 40px));\n    }\n\n    [breakpointsm]:not([audio]) .center-controls.pre-playback {\n      display: grid;\n      align-items: initial;\n      justify-content: initial;\n      height: 100%;\n      overflow: hidden;\n    }\n\n    [breakpointsm]:not([audio]) .center-controls.pre-playback media-play-button {\n      place-self: var(--_pre-playback-place, center);\n      grid-area: 1 / 1;\n      margin: 16px;\n    }\n\n    /* Show and hide controls or pre-playback state */\n\n    [breakpointsm]:is([mediahasplayed], :not([mediapaused])):not([audio])\n      .center-controls.pre-playback\n      media-play-button {\n      /* Using \\`forwards\\` would lead to a laggy UI after the animation got in the end state */\n      animation: 0.3s linear pre-play-hide;\n      opacity: 0;\n      pointer-events: none;\n    }\n\n    .autoplay-unmute {\n      --media-control-hover-background: transparent;\n      width: 100%;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      filter: drop-shadow(0 0 2px rgb(0 0 0 / 0.25)) drop-shadow(0 0 6px rgb(0 0 0 / 0.25));\n    }\n\n    .autoplay-unmute-btn {\n      --media-control-height: 16px;\n      border-radius: 8px;\n      background: #000;\n      color: var(--_primary-color);\n      display: flex;\n      align-items: center;\n      padding: 8px 16px;\n      font-size: 18px;\n      font-weight: 500;\n      cursor: pointer;\n    }\n\n    .autoplay-unmute-btn:hover {\n      background: var(--_accent-color);\n    }\n\n    [breakpointsm] .autoplay-unmute-btn {\n      --media-control-height: 30px;\n      padding: 14px 24px;\n      font-size: 26px;\n    }\n\n    .autoplay-unmute-btn svg {\n      margin: 0 6px 0 0;\n    }\n\n    [breakpointsm] .autoplay-unmute-btn svg {\n      margin: 0 10px 0 0;\n    }\n\n    media-controller:not([audio]):not([mediahasplayed]) *:is(media-control-bar, media-time-range) {\n      display: none;\n    }\n\n    media-loading-indicator {\n      --media-loading-icon-width: 100%;\n      --media-button-icon-height: auto;\n      display: var(--media-control-display, var(--media-loading-indicator-display, flex));\n      pointer-events: none;\n      position: absolute;\n      width: min(15%, 150px);\n      flex-flow: row;\n      align-items: center;\n      justify-content: center;\n    }\n\n    /* Intentionally don't target the div for transition but the children\n     of the div. Prevents messing with media-chrome's autohide feature. */\n    media-loading-indicator + div * {\n      transition: opacity 0.15s;\n      opacity: 1;\n    }\n\n    media-loading-indicator[medialoading]:not([mediapaused]) ~ div > * {\n      opacity: 0;\n      transition-delay: 400ms;\n    }\n\n    media-volume-range {\n      width: min(100%, 100px);\n      --media-range-padding-left: 10px;\n      --media-range-padding-right: 10px;\n      --media-range-thumb-width: 12px;\n      --media-range-thumb-height: 12px;\n      --media-range-thumb-background: radial-gradient(\n        circle,\n        #000 0%,\n        #000 25%,\n        var(--_primary-color) 25%,\n        var(--_primary-color)\n      );\n      --media-control-hover-background: none;\n    }\n\n    media-time-display {\n      white-space: nowrap;\n    }\n\n    /* Generic style for explicitly disabled controls */\n    media-control-bar[part~='bottom'] [disabled],\n    media-control-bar[part~='bottom'] [aria-disabled='true'] {\n      opacity: 60%;\n      cursor: not-allowed;\n    }\n\n    media-text-display {\n      --media-font-size: 16px;\n      --media-control-padding: 14px;\n      font-weight: 500;\n    }\n\n    media-play-button.animated *:is(g, path) {\n      transition: all 0.3s;\n    }\n\n    media-play-button.animated[mediapaused] .pause-icon-pt1 {\n      opacity: 0;\n    }\n\n    media-play-button.animated[mediapaused] .pause-icon-pt2 {\n      transform-origin: center center;\n      transform: scaleY(0);\n    }\n\n    media-play-button.animated[mediapaused] .play-icon {\n      clip-path: inset(0 0 0 0);\n    }\n\n    media-play-button.animated:not([mediapaused]) .play-icon {\n      clip-path: inset(0 0 0 100%);\n    }\n\n    media-seek-forward-button,\n    media-seek-backward-button {\n      --media-font-weight: 400;\n    }\n\n    .mute-icon {\n      display: inline-block;\n    }\n\n    .mute-icon :is(path, g) {\n      transition: opacity 0.5s;\n    }\n\n    .muted {\n      opacity: 0;\n    }\n\n    media-mute-button[mediavolumelevel='low'] :is(.volume-medium, .volume-high),\n    media-mute-button[mediavolumelevel='medium'] :is(.volume-high) {\n      opacity: 0;\n    }\n\n    media-mute-button[mediavolumelevel='off'] .unmuted {\n      opacity: 0;\n    }\n\n    media-mute-button[mediavolumelevel='off'] .muted {\n      opacity: 1;\n    }\n\n    /**\n     * Our defaults for these buttons are to hide them at small sizes\n     * users can override this with CSS\n     */\n    media-controller:not([breakpointsm]):not([audio]) {\n      --bottom-play-button: none;\n      --bottom-seek-backward-button: none;\n      --bottom-seek-forward-button: none;\n      --bottom-time-display: none;\n      --bottom-playback-rate-selectmenu: none;\n      --bottom-pip-button: none;\n    }\n  </style>\n\n  <template partial=\"TitleDisplay\">\n    <template if=\"title\">\n      <media-text-display part=\"top title display\" class=\"title-display\">{{title}}</media-text-display>\n    </template>\n  </template>\n\n  <template partial=\"PlayButton\">\n    <media-play-button\n      part=\"{{section ?? 'bottom'}} play button\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n      class=\"animated\"\n    >\n      <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"icon\">\n        <g class=\"play-icon\">\n          <path\n            d=\"M15.5987 6.2911L3.45577 0.110898C2.83667 -0.204202 2.06287 0.189698 2.06287 0.819798V13.1802C2.06287 13.8103 2.83667 14.2042 3.45577 13.8891L15.5987 7.7089C16.2178 7.3938 16.2178 6.6061 15.5987 6.2911Z\"\n          />\n        </g>\n        <g class=\"pause-icon\">\n          <path\n            class=\"pause-icon-pt1\"\n            d=\"M5.90709 0H2.96889C2.46857 0 2.06299 0.405585 2.06299 0.9059V13.0941C2.06299 13.5944 2.46857 14 2.96889 14H5.90709C6.4074 14 6.81299 13.5944 6.81299 13.0941V0.9059C6.81299 0.405585 6.4074 0 5.90709 0Z\"\n          />\n          <path\n            class=\"pause-icon-pt2\"\n            d=\"M15.1571 0H12.2189C11.7186 0 11.313 0.405585 11.313 0.9059V13.0941C11.313 13.5944 11.7186 14 12.2189 14H15.1571C15.6574 14 16.063 13.5944 16.063 13.0941V0.9059C16.063 0.405585 15.6574 0 15.1571 0Z\"\n          />\n        </g>\n      </svg>\n    </media-play-button>\n  </template>\n\n  <template partial=\"PrePlayButton\">\n    <media-play-button\n      part=\"{{section ?? 'center'}} play button pre-play\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n    >\n      <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"icon\" style=\"transform: translate(3px, 0)\">\n        <path\n          d=\"M15.5987 6.2911L3.45577 0.110898C2.83667 -0.204202 2.06287 0.189698 2.06287 0.819798V13.1802C2.06287 13.8103 2.83667 14.2042 3.45577 13.8891L15.5987 7.7089C16.2178 7.3938 16.2178 6.6061 15.5987 6.2911Z\"\n        />\n      </svg>\n    </media-play-button>\n  </template>\n\n  <template partial=\"SeekBackwardButton\">\n    <media-seek-backward-button\n      seekoffset=\"{{backwardseekoffset}}\"\n      part=\"{{section ?? 'bottom'}} seek-backward button\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n    >\n      <svg viewBox=\"0 0 22 14\" aria-hidden=\"true\" slot=\"icon\">\n        <path\n          d=\"M3.65 2.07888L0.0864 6.7279C-0.0288 6.87812 -0.0288 7.12188 0.0864 7.2721L3.65 11.9211C3.7792 12.0896 4 11.9703 4 11.7321V2.26787C4 2.02968 3.7792 1.9104 3.65 2.07888Z\"\n        />\n        <text transform=\"translate(6 12)\" style=\"font-size: 14px; font-family: 'ArialMT', 'Arial'\">\n          {{backwardseekoffset}}\n        </text>\n      </svg>\n    </media-seek-backward-button>\n  </template>\n\n  <template partial=\"SeekForwardButton\">\n    <media-seek-forward-button\n      seekoffset=\"{{forwardseekoffset}}\"\n      part=\"{{section ?? 'bottom'}} seek-forward button\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n    >\n      <svg viewBox=\"0 0 22 14\" aria-hidden=\"true\" slot=\"icon\">\n        <g>\n          <text transform=\"translate(-1 12)\" style=\"font-size: 14px; font-family: 'ArialMT', 'Arial'\">\n            {{forwardseekoffset}}\n          </text>\n          <path\n            d=\"M18.35 11.9211L21.9136 7.2721C22.0288 7.12188 22.0288 6.87812 21.9136 6.7279L18.35 2.07888C18.2208 1.91041 18 2.02968 18 2.26787V11.7321C18 11.9703 18.2208 12.0896 18.35 11.9211Z\"\n          />\n        </g>\n      </svg>\n    </media-seek-forward-button>\n  </template>\n\n  <template partial=\"MuteButton\">\n    <media-mute-button part=\"bottom mute button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <svg viewBox=\"0 0 18 14\" slot=\"icon\" class=\"mute-icon\" aria-hidden=\"true\">\n        <g class=\"unmuted\">\n          <path\n            d=\"M6.76786 1.21233L3.98606 3.98924H1.19937C0.593146 3.98924 0.101743 4.51375 0.101743 5.1607V6.96412L0 6.99998L0.101743 7.03583V8.83926C0.101743 9.48633 0.593146 10.0108 1.19937 10.0108H3.98606L6.76773 12.7877C7.23561 13.2547 8 12.9007 8 12.2171V1.78301C8 1.09925 7.23574 0.745258 6.76786 1.21233Z\"\n          />\n          <path\n            class=\"volume-low\"\n            d=\"M10 3.54781C10.7452 4.55141 11.1393 5.74511 11.1393 6.99991C11.1393 8.25471 10.7453 9.44791 10 10.4515L10.7988 11.0496C11.6734 9.87201 12.1356 8.47161 12.1356 6.99991C12.1356 5.52821 11.6735 4.12731 10.7988 2.94971L10 3.54781Z\"\n          />\n          <path\n            class=\"volume-medium\"\n            d=\"M12.3778 2.40086C13.2709 3.76756 13.7428 5.35806 13.7428 7.00026C13.7428 8.64246 13.2709 10.233 12.3778 11.5992L13.2106 12.1484C14.2107 10.6185 14.739 8.83796 14.739 7.00016C14.739 5.16236 14.2107 3.38236 13.2106 1.85156L12.3778 2.40086Z\"\n          />\n          <path\n            class=\"volume-high\"\n            d=\"M15.5981 0.75L14.7478 1.2719C15.7937 2.9919 16.3468 4.9723 16.3468 7C16.3468 9.0277 15.7937 11.0082 14.7478 12.7281L15.5981 13.25C16.7398 11.3722 17.343 9.211 17.343 7C17.343 4.789 16.7398 2.6268 15.5981 0.75Z\"\n          />\n        </g>\n        <g class=\"muted\">\n          <path\n            fill-rule=\"evenodd\"\n            clip-rule=\"evenodd\"\n            d=\"M4.39976 4.98924H1.19937C1.19429 4.98924 1.17777 4.98961 1.15296 5.01609C1.1271 5.04369 1.10174 5.09245 1.10174 5.1607V8.83926C1.10174 8.90761 1.12714 8.95641 1.15299 8.984C1.17779 9.01047 1.1943 9.01084 1.19937 9.01084H4.39977L7 11.6066V2.39357L4.39976 4.98924ZM7.47434 1.92006C7.4743 1.9201 7.47439 1.92002 7.47434 1.92006V1.92006ZM6.76773 12.7877L3.98606 10.0108H1.19937C0.593146 10.0108 0.101743 9.48633 0.101743 8.83926V7.03583L0 6.99998L0.101743 6.96412V5.1607C0.101743 4.51375 0.593146 3.98924 1.19937 3.98924H3.98606L6.76786 1.21233C7.23574 0.745258 8 1.09925 8 1.78301V12.2171C8 12.9007 7.23561 13.2547 6.76773 12.7877Z\"\n          />\n          <path\n            fill-rule=\"evenodd\"\n            clip-rule=\"evenodd\"\n            d=\"M15.2677 9.30323C15.463 9.49849 15.7796 9.49849 15.9749 9.30323C16.1701 9.10796 16.1701 8.79138 15.9749 8.59612L14.2071 6.82841L15.9749 5.06066C16.1702 4.8654 16.1702 4.54882 15.9749 4.35355C15.7796 4.15829 15.4631 4.15829 15.2678 4.35355L13.5 6.1213L11.7322 4.35348C11.537 4.15822 11.2204 4.15822 11.0251 4.35348C10.8298 4.54874 10.8298 4.86532 11.0251 5.06058L12.7929 6.82841L11.0251 8.59619C10.8299 8.79146 10.8299 9.10804 11.0251 9.3033C11.2204 9.49856 11.537 9.49856 11.7323 9.3033L13.5 7.53552L15.2677 9.30323Z\"\n          />\n        </g>\n      </svg>\n    </media-mute-button>\n  </template>\n\n  <template partial=\"PipButton\">\n    <media-pip-button part=\"bottom pip button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"icon\">\n        <path\n          d=\"M15.9891 0H2.011C0.9004 0 0 0.9003 0 2.0109V11.989C0 13.0996 0.9004 14 2.011 14H15.9891C17.0997 14 18 13.0997 18 11.9891V2.0109C18 0.9003 17.0997 0 15.9891 0ZM17 11.9891C17 12.5465 16.5465 13 15.9891 13H2.011C1.4536 13 1.0001 12.5465 1.0001 11.9891V2.0109C1.0001 1.4535 1.4536 0.9999 2.011 0.9999H15.9891C16.5465 0.9999 17 1.4535 17 2.0109V11.9891Z\"\n        />\n        <path\n          d=\"M15.356 5.67822H8.19523C8.03253 5.67822 7.90063 5.81012 7.90063 5.97282V11.3836C7.90063 11.5463 8.03253 11.6782 8.19523 11.6782H15.356C15.5187 11.6782 15.6506 11.5463 15.6506 11.3836V5.97282C15.6506 5.81012 15.5187 5.67822 15.356 5.67822Z\"\n        />\n      </svg>\n    </media-pip-button>\n  </template>\n\n  <template partial=\"CaptionsMenuButton\">\n    <media-captions-selectmenu part=\"bottom captions selectmenu\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <media-captions-button\n        slot=\"button\"\n        part=\"bottom captions button\"\n        disabled=\"{{disabled}}\"\n        aria-disabled=\"{{disabled}}\"\n      >\n        <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"on\">\n          <path\n            d=\"M15.989 0H2.011C0.9004 0 0 0.9003 0 2.0109V11.9891C0 13.0997 0.9004 14 2.011 14H15.989C17.0997 14 18 13.0997 18 11.9891V2.0109C18 0.9003 17.0997 0 15.989 0ZM4.2292 8.7639C4.5954 9.1902 5.0935 9.4031 5.7233 9.4031C6.1852 9.4031 6.5544 9.301 6.8302 9.0969C7.1061 8.8933 7.2863 8.614 7.3702 8.26H8.4322C8.3062 8.884 8.0093 9.3733 7.5411 9.7273C7.0733 10.0813 6.4703 10.2581 5.732 10.2581C5.108 10.2581 4.5699 10.1219 4.1168 9.8489C3.6637 9.5759 3.3141 9.1946 3.0685 8.7058C2.8224 8.2165 2.6994 7.6511 2.6994 7.009C2.6994 6.3611 2.8224 5.7927 3.0685 5.3034C3.3141 4.8146 3.6637 4.4323 4.1168 4.1559C4.5699 3.88 5.108 3.7418 5.732 3.7418C6.4703 3.7418 7.0733 3.922 7.5411 4.2818C8.0094 4.6422 8.3062 5.1461 8.4322 5.794H7.3702C7.2862 5.4283 7.106 5.1368 6.8302 4.921C6.5544 4.7052 6.1852 4.5968 5.7233 4.5968C5.0934 4.5968 4.5954 4.8116 4.2292 5.2404C3.8635 5.6696 3.6804 6.259 3.6804 7.009C3.6804 7.7531 3.8635 8.3381 4.2292 8.7639ZM11.0974 8.7639C11.4636 9.1902 11.9617 9.4031 12.5915 9.4031C13.0534 9.4031 13.4226 9.301 13.6984 9.0969C13.9743 8.8933 14.1545 8.614 14.2384 8.26H15.3004C15.1744 8.884 14.8775 9.3733 14.4093 9.7273C13.9415 10.0813 13.3385 10.2581 12.6002 10.2581C11.9762 10.2581 11.4381 10.1219 10.985 9.8489C10.5319 9.5759 10.1823 9.1946 9.9367 8.7058C9.6906 8.2165 9.5676 7.6511 9.5676 7.009C9.5676 6.3611 9.6906 5.7927 9.9367 5.3034C10.1823 4.8146 10.5319 4.4323 10.985 4.1559C11.4381 3.88 11.9762 3.7418 12.6002 3.7418C13.3385 3.7418 13.9415 3.922 14.4093 4.2818C14.8776 4.6422 15.1744 5.1461 15.3004 5.794H14.2384C14.1544 5.4283 13.9742 5.1368 13.6984 4.921C13.4226 4.7052 13.0534 4.5968 12.5915 4.5968C11.9616 4.5968 11.4636 4.8116 11.0974 5.2404C10.7317 5.6696 10.5486 6.259 10.5486 7.009C10.5486 7.7531 10.7317 8.3381 11.0974 8.7639Z\"\n          />\n        </svg>\n        <svg aria-hidden=\"true\" viewBox=\"0 0 18 14\" slot=\"off\">\n          <path\n            d=\"M5.73219 10.258C5.10819 10.258 4.57009 10.1218 4.11699 9.8488C3.66389 9.5758 3.31429 9.1945 3.06869 8.7057C2.82259 8.2164 2.69958 7.651 2.69958 7.0089C2.69958 6.361 2.82259 5.7926 3.06869 5.3033C3.31429 4.8145 3.66389 4.4322 4.11699 4.1558C4.57009 3.8799 5.10819 3.7417 5.73219 3.7417C6.47049 3.7417 7.07348 3.9219 7.54128 4.2817C8.00958 4.6421 8.30638 5.146 8.43238 5.7939H7.37039C7.28639 5.4282 7.10618 5.1367 6.83039 4.9209C6.55459 4.7051 6.18538 4.5967 5.72348 4.5967C5.09358 4.5967 4.59559 4.8115 4.22939 5.2403C3.86369 5.6695 3.68058 6.2589 3.68058 7.0089C3.68058 7.753 3.86369 8.338 4.22939 8.7638C4.59559 9.1901 5.09368 9.403 5.72348 9.403C6.18538 9.403 6.55459 9.3009 6.83039 9.0968C7.10629 8.8932 7.28649 8.6139 7.37039 8.2599H8.43238C8.30638 8.8839 8.00948 9.3732 7.54128 9.7272C7.07348 10.0812 6.47049 10.258 5.73219 10.258Z\"\n          />\n          <path\n            d=\"M12.6003 10.258C11.9763 10.258 11.4382 10.1218 10.9851 9.8488C10.532 9.5758 10.1824 9.1945 9.93685 8.7057C9.69075 8.2164 9.56775 7.651 9.56775 7.0089C9.56775 6.361 9.69075 5.7926 9.93685 5.3033C10.1824 4.8145 10.532 4.4322 10.9851 4.1558C11.4382 3.8799 11.9763 3.7417 12.6003 3.7417C13.3386 3.7417 13.9416 3.9219 14.4094 4.2817C14.8777 4.6421 15.1745 5.146 15.3005 5.7939H14.2385C14.1545 5.4282 13.9743 5.1367 13.6985 4.9209C13.4227 4.7051 13.0535 4.5967 12.5916 4.5967C11.9617 4.5967 11.4637 4.8115 11.0975 5.2403C10.7318 5.6695 10.5487 6.2589 10.5487 7.0089C10.5487 7.753 10.7318 8.338 11.0975 8.7638C11.4637 9.1901 11.9618 9.403 12.5916 9.403C13.0535 9.403 13.4227 9.3009 13.6985 9.0968C13.9744 8.8932 14.1546 8.6139 14.2385 8.2599H15.3005C15.1745 8.8839 14.8776 9.3732 14.4094 9.7272C13.9416 10.0812 13.3386 10.258 12.6003 10.258Z\"\n          />\n          <path\n            d=\"M15.9891 1C16.5465 1 17 1.4535 17 2.011V11.9891C17 12.5465 16.5465 13 15.9891 13H2.0109C1.4535 13 1 12.5465 1 11.9891V2.0109C1 1.4535 1.4535 0.9999 2.0109 0.9999L15.9891 1ZM15.9891 0H2.0109C0.9003 0 0 0.9003 0 2.0109V11.9891C0 13.0997 0.9003 14 2.0109 14H15.9891C17.0997 14 18 13.0997 18 11.9891V2.0109C18 0.9003 17.0997 0 15.9891 0Z\"\n          />\n        </svg>\n      </media-captions-button>\n      <media-captions-listbox slot=\"listbox\" exportparts=\"option\" part=\"bottom captions listbox\">\n        <div slot=\"select-indicator\">\n          <style>\n            .listbox-indicator {\n              position: relative;\n              top: 1px;\n              width: 0.9em;\n              height: auto;\n              fill: var(--_accent-color);\n            }\n\n            [aria-selected='false'] .listbox-indicator {\n              display: none;\n            }\n          </style>\n          <svg viewBox=\"0 0 14 18\" class=\"listbox-indicator\">\n            <path\n              d=\"M12.252 3.48c-.115.033-.301.161-.425.291-.059.063-1.407 1.815-2.995 3.894s-2.897 3.79-2.908 3.802c-.013.014-.661-.616-1.672-1.624-.908-.905-1.702-1.681-1.765-1.723-.401-.27-.783-.211-1.176.183a1.285 1.285 0 0 0-.261.342.582.582 0 0 0-.082.35c0 .165.01.205.08.35.075.153.213.296 2.182 2.271 1.156 1.159 2.17 2.159 2.253 2.222.189.143.338.196.539.194.203-.003.412-.104.618-.299.205-.193 6.7-8.693 6.804-8.903a.716.716 0 0 0 .085-.345c.01-.179.005-.203-.062-.339-.124-.252-.45-.531-.746-.639a.784.784 0 0 0-.469-.027\"\n              fill-rule=\"evenodd\"\n            />\n          </svg>\n        </div>\n      </media-captions-listbox>\n    </media-captions-selectmenu>\n  </template>\n\n  <template partial=\"AirplayButton\">\n    <media-airplay-button part=\"bottom airplay button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"icon\">\n        <path\n          d=\"M16.1383 0H1.8618C0.8335 0 0 0.8335 0 1.8617V10.1382C0 11.1664 0.8335 12 1.8618 12H3.076C3.1204 11.9433 3.1503 11.8785 3.2012 11.826L4.004 11H1.8618C1.3866 11 1 10.6134 1 10.1382V1.8617C1 1.3865 1.3866 0.9999 1.8618 0.9999H16.1383C16.6135 0.9999 17.0001 1.3865 17.0001 1.8617V10.1382C17.0001 10.6134 16.6135 11 16.1383 11H13.9961L14.7989 11.826C14.8499 11.8785 14.8798 11.9432 14.9241 12H16.1383C17.1665 12 18.0001 11.1664 18.0001 10.1382V1.8617C18 0.8335 17.1665 0 16.1383 0Z\"\n        />\n        <path\n          d=\"M9.55061 8.21903C9.39981 8.06383 9.20001 7.98633 9.00011 7.98633C8.80021 7.98633 8.60031 8.06383 8.44951 8.21903L4.09771 12.697C3.62471 13.1838 3.96961 13.9998 4.64831 13.9998H13.3518C14.0304 13.9998 14.3754 13.1838 13.9023 12.697L9.55061 8.21903Z\"\n        />\n      </svg>\n    </media-airplay-button>\n  </template>\n\n  <template partial=\"FullscreenButton\">\n    <media-fullscreen-button part=\"bottom fullscreen button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"enter\">\n        <path\n          d=\"M1.00745 4.39539L1.01445 1.98789C1.01605 1.43049 1.47085 0.978289 2.02835 0.979989L6.39375 0.992589L6.39665 -0.007411L2.03125 -0.020011C0.920646 -0.023211 0.0176463 0.874489 0.0144463 1.98509L0.00744629 4.39539H1.00745Z\"\n        />\n        <path\n          d=\"M17.0144 2.03431L17.0076 4.39541H18.0076L18.0144 2.03721C18.0176 0.926712 17.1199 0.0237125 16.0093 0.0205125L11.6439 0.0078125L11.641 1.00781L16.0064 1.02041C16.5638 1.02201 17.016 1.47681 17.0144 2.03431Z\"\n        />\n        <path\n          d=\"M16.9925 9.60498L16.9855 12.0124C16.9839 12.5698 16.5291 13.022 15.9717 13.0204L11.6063 13.0078L11.6034 14.0078L15.9688 14.0204C17.0794 14.0236 17.9823 13.1259 17.9855 12.0153L17.9925 9.60498H16.9925Z\"\n        />\n        <path\n          d=\"M0.985626 11.9661L0.992426 9.60498H-0.0074737L-0.0142737 11.9632C-0.0174737 13.0738 0.880226 13.9767 1.99083 13.98L6.35623 13.9926L6.35913 12.9926L1.99373 12.98C1.43633 12.9784 0.983926 12.5236 0.985626 11.9661Z\"\n        />\n      </svg>\n      <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"exit\">\n        <path\n          d=\"M5.39655 -0.0200195L5.38955 2.38748C5.38795 2.94488 4.93315 3.39708 4.37565 3.39538L0.0103463 3.38278L0.00744629 4.38278L4.37285 4.39538C5.48345 4.39858 6.38635 3.50088 6.38965 2.39028L6.39665 -0.0200195H5.39655Z\"\n        />\n        <path\n          d=\"M12.6411 2.36891L12.6479 0.0078125H11.6479L11.6411 2.36601C11.6379 3.47651 12.5356 4.37951 13.6462 4.38271L18.0116 4.39531L18.0145 3.39531L13.6491 3.38271C13.0917 3.38111 12.6395 2.92641 12.6411 2.36891Z\"\n        />\n        <path\n          d=\"M12.6034 14.0204L12.6104 11.613C12.612 11.0556 13.0668 10.6034 13.6242 10.605L17.9896 10.6176L17.9925 9.61759L13.6271 9.60499C12.5165 9.60179 11.6136 10.4995 11.6104 11.6101L11.6034 14.0204H12.6034Z\"\n        />\n        <path\n          d=\"M5.359 11.6315L5.3522 13.9926H6.3522L6.359 11.6344C6.3622 10.5238 5.4645 9.62088 4.3539 9.61758L-0.0115043 9.60498L-0.0144043 10.605L4.351 10.6176C4.9084 10.6192 5.3607 11.074 5.359 11.6315Z\"\n        />\n      </svg>\n    </media-fullscreen-button>\n  </template>\n\n  <template partial=\"CastButton\">\n    <media-cast-button part=\"bottom cast button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"enter\">\n        <path\n          d=\"M16.0072 0H2.0291C0.9185 0 0.0181 0.9003 0.0181 2.011V5.5009C0.357 5.5016 0.6895 5.5275 1.0181 5.5669V2.011C1.0181 1.4536 1.4716 1 2.029 1H16.0072C16.5646 1 17.0181 1.4536 17.0181 2.011V11.9891C17.0181 12.5465 16.5646 13 16.0072 13H8.4358C8.4746 13.3286 8.4999 13.6611 8.4999 13.9999H16.0071C17.1177 13.9999 18.018 13.0996 18.018 11.989V2.011C18.0181 0.9003 17.1178 0 16.0072 0ZM0 6.4999V7.4999C3.584 7.4999 6.5 10.4159 6.5 13.9999H7.5C7.5 9.8642 4.1357 6.4999 0 6.4999ZM0 8.7499V9.7499C2.3433 9.7499 4.25 11.6566 4.25 13.9999H5.25C5.25 11.1049 2.895 8.7499 0 8.7499ZM0.0181 11V14H3.0181C3.0181 12.3431 1.675 11 0.0181 11Z\"\n        />\n      </svg>\n      <svg viewBox=\"0 0 18 14\" aria-hidden=\"true\" slot=\"exit\">\n        <path\n          d=\"M15.9891 0H2.01103C0.900434 0 3.35947e-05 0.9003 3.35947e-05 2.011V5.5009C0.338934 5.5016 0.671434 5.5275 1.00003 5.5669V2.011C1.00003 1.4536 1.45353 1 2.01093 1H15.9891C16.5465 1 17 1.4536 17 2.011V11.9891C17 12.5465 16.5465 13 15.9891 13H8.41773C8.45653 13.3286 8.48183 13.6611 8.48183 13.9999H15.989C17.0996 13.9999 17.9999 13.0996 17.9999 11.989V2.011C18 0.9003 17.0997 0 15.9891 0ZM-0.0180664 6.4999V7.4999C3.56593 7.4999 6.48193 10.4159 6.48193 13.9999H7.48193C7.48193 9.8642 4.11763 6.4999 -0.0180664 6.4999ZM-0.0180664 8.7499V9.7499C2.32523 9.7499 4.23193 11.6566 4.23193 13.9999H5.23193C5.23193 11.1049 2.87693 8.7499 -0.0180664 8.7499ZM3.35947e-05 11V14H3.00003C3.00003 12.3431 1.65693 11 3.35947e-05 11Z\"\n        />\n        <path d=\"M2.15002 5.634C5.18352 6.4207 7.57252 8.8151 8.35282 11.8499H15.8501V2.1499H2.15002V5.634Z\" />\n      </svg>\n    </media-cast-button>\n  </template>\n\n  <template partial=\"LiveButton\">\n    <media-live-button part=\"{{section ?? 'top'}} live button\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <span slot=\"text\">Live</span>\n    </media-live-button>\n  </template>\n\n  <template partial=\"PlaybackRateSelect\">\n    <media-playback-rate-selectmenu\n      part=\"bottom playback-rate selectmenu\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n    >\n      <media-playback-rate-button slot=\"button\" part=\"bottom playback-rate button\"></media-playback-rate-button>\n      <media-playback-rate-listbox\n        slot=\"listbox\"\n        rates=\"{{playbackrates}}\"\n        exportparts=\"option\"\n        part=\"bottom playback-rate listbox\"\n      ></media-playback-rate-listbox>\n    </media-playback-rate-selectmenu>\n  </template>\n\n  <template partial=\"VolumeRange\">\n    <media-volume-range\n      part=\"bottom volume range\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n    ></media-volume-range>\n  </template>\n\n  <template partial=\"TimeDisplay\">\n    <media-time-display\n      remaining=\"{{defaultshowremainingtime}}\"\n      showduration=\"{{!hideduration}}\"\n      part=\"bottom time display\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n    ></media-time-display>\n  </template>\n\n  <template partial=\"TimeRange\">\n    <media-time-range part=\"bottom time range\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <media-preview-thumbnail slot=\"preview\"></media-preview-thumbnail>\n      <media-preview-chapter-display slot=\"preview\"></media-preview-chapter-display>\n      <media-preview-time-display slot=\"preview\"></media-preview-time-display>\n      <div slot=\"preview\" part=\"arrow\"></div>\n    </media-time-range>\n  </template>\n\n  <template partial=\"AudioTrackSelect\">\n    <media-audio-track-selectmenu\n      part=\"bottom audio-track selectmenu\"\n      disabled=\"{{disabled}}\"\n      aria-disabled=\"{{disabled}}\"\n    >\n      <media-audio-track-button slot=\"button\" part=\"bottom audio-track button\">\n        <svg aria-hidden=\"true\" slot=\"icon\" viewBox=\"0 0 18 16\">\n          <path d=\"M9 15A7 7 0 1 1 9 1a7 7 0 0 1 0 14Zm0 1A8 8 0 1 0 9 0a8 8 0 0 0 0 16Z\" />\n          <path\n            d=\"M5.2 6.3a.5.5 0 0 1 .5.5v2.4a.5.5 0 1 1-1 0V6.8a.5.5 0 0 1 .5-.5Zm2.4-2.4a.5.5 0 0 1 .5.5v7.2a.5.5 0 0 1-1 0V4.4a.5.5 0 0 1 .5-.5ZM10 5.5a.5.5 0 0 1 .5.5v4a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5Zm2.4-.8a.5.5 0 0 1 .5.5v5.6a.5.5 0 0 1-1 0V5.2a.5.5 0 0 1 .5-.5Z\"\n          />\n        </svg>\n      </media-audio-track-button>\n      <media-audio-track-listbox slot=\"listbox\" exportparts=\"option\" part=\"bottom audio-track listbox\">\n        <div slot=\"select-indicator\">\n          <style>\n            .listbox-indicator {\n              position: relative;\n              top: 1px;\n              width: 0.9em;\n              height: auto;\n              fill: var(--_accent-color);\n            }\n\n            [aria-selected='false'] .listbox-indicator {\n              display: none;\n            }\n          </style>\n          <svg viewBox=\"0 0 14 18\" class=\"listbox-indicator\">\n            <path\n              d=\"M12.252 3.48c-.115.033-.301.161-.425.291-.059.063-1.407 1.815-2.995 3.894s-2.897 3.79-2.908 3.802c-.013.014-.661-.616-1.672-1.624-.908-.905-1.702-1.681-1.765-1.723-.401-.27-.783-.211-1.176.183a1.285 1.285 0 0 0-.261.342.582.582 0 0 0-.082.35c0 .165.01.205.08.35.075.153.213.296 2.182 2.271 1.156 1.159 2.17 2.159 2.253 2.222.189.143.338.196.539.194.203-.003.412-.104.618-.299.205-.193 6.7-8.693 6.804-8.903a.716.716 0 0 0 .085-.345c.01-.179.005-.203-.062-.339-.124-.252-.45-.531-.746-.639a.784.784 0 0 0-.469-.027\"\n              fill-rule=\"evenodd\"\n            />\n          </svg>\n        </div>\n      </media-audio-track-listbox>\n    </media-audio-track-selectmenu>\n  </template>\n\n  <template partial=\"RenditionSelect\">\n    <media-rendition-selectmenu part=\"bottom rendition selectmenu\" disabled=\"{{disabled}}\" aria-disabled=\"{{disabled}}\">\n      <media-rendition-button slot=\"button\" part=\"bottom rendition button\">\n        <svg aria-hidden=\"true\" slot=\"icon\" viewBox=\"0 0 18 14\">\n          <path\n            d=\"M2.25 9a2 2 0 1 0 0-4 2 2 0 0 0 0 4ZM9 9a2 2 0 1 0 0-4 2 2 0 0 0 0 4Zm6.75 0a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z\"\n          />\n        </svg>\n      </media-rendition-button>\n      <media-rendition-listbox slot=\"listbox\" exportparts=\"option\" part=\"bottom rendition listbox\">\n        <div slot=\"select-indicator\">\n          <style>\n            .listbox-indicator {\n              position: relative;\n              top: 1px;\n              width: 0.9em;\n              height: auto;\n              fill: var(--_accent-color);\n            }\n\n            [aria-selected='false'] .listbox-indicator {\n              display: none;\n            }\n          </style>\n          <svg viewBox=\"0 0 14 18\" class=\"listbox-indicator\">\n            <path\n              d=\"M12.252 3.48c-.115.033-.301.161-.425.291-.059.063-1.407 1.815-2.995 3.894s-2.897 3.79-2.908 3.802c-.013.014-.661-.616-1.672-1.624-.908-.905-1.702-1.681-1.765-1.723-.401-.27-.783-.211-1.176.183a1.285 1.285 0 0 0-.261.342.582.582 0 0 0-.082.35c0 .165.01.205.08.35.075.153.213.296 2.182 2.271 1.156 1.159 2.17 2.159 2.253 2.222.189.143.338.196.539.194.203-.003.412-.104.618-.299.205-.193 6.7-8.693 6.804-8.903a.716.716 0 0 0 .085-.345c.01-.179.005-.203-.062-.339-.124-.252-.45-.531-.746-.639a.784.784 0 0 0-.469-.027\"\n              fill-rule=\"evenodd\"\n            />\n          </svg>\n        </div>\n      </media-rendition-listbox>\n    </media-rendition-selectmenu>\n  </template>\n\n  <media-controller\n    part=\"controller\"\n    defaultstreamtype=\"{{defaultstreamtype ?? 'on-demand'}}\"\n    breakpoints=\"sm:470\"\n    gesturesdisabled=\"{{disabled}}\"\n    hotkeys=\"{{hotkeys}}\"\n    nohotkeys=\"{{nohotkeys}}\"\n    novolumepref=\"{{novolumepref}}\"\n    audio=\"{{audio}}\"\n    noautoseektolive=\"{{noautoseektolive}}\"\n    defaultsubtitles=\"{{defaultsubtitles}}\"\n    defaultduration=\"{{defaultduration ?? false}}\"\n    keyboardforwardseekoffset=\"{{forwardseekoffset}}\"\n    keyboardbackwardseekoffset=\"{{backwardseekoffset}}\"\n    exportparts=\"layer, media-layer, poster-layer, vertical-layer, centered-layer, gesture-layer\"\n    style=\"--_pre-playback-place:{{preplaybackplace ?? 'center'}}\"\n  >\n    <slot name=\"media\" slot=\"media\"></slot>\n    <slot name=\"poster\" slot=\"poster\"></slot>\n\n    <media-loading-indicator slot=\"centered-chrome\" noautohide></media-loading-indicator>\n\n    <template if=\"!audio\">\n      <!-- Pre-playback UI -->\n      <div slot=\"centered-chrome\" class=\"center-controls pre-playback\">\n        <template if=\"streamtype == 'on-demand'\">\n          <template if=\"!breakpointsm\"> {{>SeekBackwardButton section=\"center\"}} </template>\n          <template if=\"!breakpointsm\"> {{>PlayButton section=\"center\"}} </template>\n          <template if=\"breakpointsm\"> {{>PrePlayButton section=\"center\"}} </template>\n          <template if=\"!breakpointsm\"> {{>SeekForwardButton section=\"center\"}} </template>\n        </template>\n\n        <template if=\"streamtype == 'live'\">\n          <template if=\"!breakpointsm\">\n            <template if=\"targetlivewindow > 0\"> {{>SeekBackwardButton section=\"center\"}} </template>\n          </template>\n          <template if=\"!breakpointsm\"> {{>PlayButton section=\"center\"}} </template>\n          <template if=\"breakpointsm\"> {{>PrePlayButton section=\"center\"}} </template>\n          <template if=\"!breakpointsm\">\n            <template if=\"targetlivewindow > 0\"> {{>SeekForwardButton section=\"center\"}} </template>\n          </template>\n        </template>\n      </div>\n\n      <!-- Auotplay centered unmute button -->\n      <!--\n        todo: figure out how show this with available state variables\n        needs to show when:\n        - autoplay is enabled\n        - playback has been successful\n        - audio is muted\n        - in place / instead of the pre-plaback play button\n        - not to show again after user has interacted with this button\n          - OR user has interacted with the mute button in the control bar\n      -->\n      <!--\n        There should be a >MuteButton to the left of the \"Unmute\" text, but a templating bug\n        makes it appear even if commented out in the markup, add it back when code is un-commented\n      -->\n      <!-- <div slot=\"centered-chrome\" class=\"autoplay-unmute\">\n        <div role=\"button\" class=\"autoplay-unmute-btn\">Unmute</div>\n      </div> -->\n\n      <template if=\"streamtype == 'on-demand'\">\n        <template if=\"breakpointsm\">\n          <media-control-bar part=\"control-bar top\" slot=\"top-chrome\">{{>TitleDisplay}} </media-control-bar>\n        </template>\n        {{>TimeRange}}\n        <media-control-bar part=\"control-bar bottom\">\n          {{>PlayButton}} {{>SeekBackwardButton}} {{>SeekForwardButton}} {{>TimeDisplay}} {{>MuteButton}}\n          {{>VolumeRange}}\n          <div class=\"spacer\"></div>\n          {{>RenditionSelect}} {{>PlaybackRateSelect}} {{>AudioTrackSelect}} {{>CaptionsMenuButton}} {{>AirplayButton}}\n          {{>CastButton}} {{>PipButton}} {{>FullscreenButton}}\n        </media-control-bar>\n      </template>\n\n      <template if=\"streamtype == 'live'\">\n        <media-control-bar part=\"control-bar top\" slot=\"top-chrome\">\n          {{>LiveButton}}\n          <template if=\"breakpointsm\"> {{>TitleDisplay}} </template>\n        </media-control-bar>\n        <template if=\"targetlivewindow > 0\">{{>TimeRange}}</template>\n        <media-control-bar part=\"control-bar bottom\">\n          {{>PlayButton}}\n          <template if=\"targetlivewindow > 0\">{{>SeekBackwardButton}} {{>SeekForwardButton}}</template>\n          {{>MuteButton}} {{>VolumeRange}}\n          <div class=\"spacer\"></div>\n          {{>RenditionSelect}} {{>AudioTrackSelect}} {{>CaptionsMenuButton}} {{>AirplayButton}} {{>CastButton}}\n          {{>PipButton}} {{>FullscreenButton}}\n        </media-control-bar>\n      </template>\n    </template>\n\n    <template if=\"audio\">\n      <template if=\"streamtype == 'on-demand'\">\n        <template if=\"title\">\n          <media-control-bar part=\"control-bar top\">{{>TitleDisplay}}</media-control-bar>\n        </template>\n        <media-control-bar part=\"control-bar bottom\">\n          {{>PlayButton}}\n          <template if=\"breakpointsm\"> {{>SeekBackwardButton}} {{>SeekForwardButton}} </template>\n          {{>MuteButton}}\n          <template if=\"breakpointsm\">{{>VolumeRange}}</template>\n          {{>TimeDisplay}} {{>TimeRange}}\n          <template if=\"breakpointsm\">{{>PlaybackRateSelect}}</template>\n          {{>AirplayButton}} {{>CastButton}}\n        </media-control-bar>\n      </template>\n\n      <template if=\"streamtype == 'live'\">\n        <template if=\"title\">\n          <media-control-bar part=\"control-bar top\">{{>TitleDisplay}}</media-control-bar>\n        </template>\n        <media-control-bar part=\"control-bar bottom\">\n          <template if=\"breakpointsm\">\n            {{>PlayButton}} {{>LiveButton section=\"bottom\"}} {{>MuteButton}} {{>VolumeRange}}\n            <template if=\"targetlivewindow > 0\"> {{>SeekBackwardButton}} {{>SeekForwardButton}} </template>\n          </template>\n          <template if=\"targetlivewindow > 0\"> {{>TimeDisplay}} {{>TimeRange}} </template>\n          <template if=\"!targetlivewindow\"><div class=\"spacer\"></div></template>\n          {{>AirplayButton}} {{>CastButton}}\n        </media-control-bar>\n      </template>\n    </template>\n\n    <slot></slot>\n  </media-controller>\n</template>\n`;\nvar He2 = T2.createElement(\"template\");\n\"innerHTML\" in He2 && (He2.innerHTML = Mt2);\nvar _t3;\nvar Pt3;\nvar fe4 = class extends MediaThemeElement {\n};\nfe4.template = (Pt3 = (_t3 = He2.content) == null ? void 0 : _t3.children) == null ? void 0 : Pt3[0];\nc2.customElements.get(\"media-theme-gerwig\") || c2.customElements.define(\"media-theme-gerwig\", fe4);\nvar Ca = \"gerwig\";\nvar M3 = { SRC: \"src\", POSTER: \"poster\" };\nvar n = { STYLE: \"style\", DEFAULT_HIDDEN_CAPTIONS: \"default-hidden-captions\", PRIMARY_COLOR: \"primary-color\", SECONDARY_COLOR: \"secondary-color\", ACCENT_COLOR: \"accent-color\", FORWARD_SEEK_OFFSET: \"forward-seek-offset\", BACKWARD_SEEK_OFFSET: \"backward-seek-offset\", PLAYBACK_TOKEN: \"playback-token\", THUMBNAIL_TOKEN: \"thumbnail-token\", STORYBOARD_TOKEN: \"storyboard-token\", DRM_TOKEN: \"drm-token\", STORYBOARD_SRC: \"storyboard-src\", THUMBNAIL_TIME: \"thumbnail-time\", AUDIO: \"audio\", NOHOTKEYS: \"nohotkeys\", HOTKEYS: \"hotkeys\", PLAYBACK_RATES: \"playbackrates\", DEFAULT_SHOW_REMAINING_TIME: \"default-show-remaining-time\", DEFAULT_DURATION: \"default-duration\", TITLE: \"title\", PLACEHOLDER: \"placeholder\", THEME: \"theme\", DEFAULT_STREAM_TYPE: \"default-stream-type\", TARGET_LIVE_WINDOW: \"target-live-window\", EXTRA_SOURCE_PARAMS: \"extra-source-params\", NO_VOLUME_PREF: \"no-volume-pref\" };\nvar Ue3 = [\"audio\", \"backwardseekoffset\", \"defaultduration\", \"defaultshowremainingtime\", \"defaultsubtitles\", \"noautoseektolive\", \"disabled\", \"exportparts\", \"forwardseekoffset\", \"hideduration\", \"hotkeys\", \"nohotkeys\", \"playbackrates\", \"defaultstreamtype\", \"streamtype\", \"style\", \"targetlivewindow\", \"template\", \"title\", \"novolumepref\"];\nfunction xa2(t2, i2) {\n  var a2;\n  return __spreadProps(__spreadValues({ src: !t2.playbackId && t2.src, playbackId: t2.playbackId, hasSrc: !!t2.playbackId || !!t2.src || !!t2.currentSrc, poster: t2.poster, storyboard: t2.storyboard, storyboardSrc: t2.getAttribute(n.STORYBOARD_SRC), placeholder: t2.getAttribute(\"placeholder\"), themeTemplate: La2(t2), thumbnailTime: !t2.tokens.thumbnail && t2.thumbnailTime, autoplay: t2.autoplay, crossOrigin: t2.crossOrigin, loop: t2.loop, noHotKeys: t2.hasAttribute(n.NOHOTKEYS), hotKeys: t2.getAttribute(n.HOTKEYS), muted: t2.muted, paused: t2.paused, preload: t2.preload, envKey: t2.envKey, preferCmcd: t2.preferCmcd, debug: t2.debug, disableTracking: t2.disableTracking, disableCookies: t2.disableCookies, tokens: t2.tokens, beaconCollectionDomain: t2.beaconCollectionDomain, maxResolution: t2.maxResolution, minResolution: t2.minResolution, programStartTime: t2.programStartTime, programEndTime: t2.programEndTime, renditionOrder: t2.renditionOrder, metadata: t2.metadata, playerSoftwareName: t2.playerSoftwareName, playerSoftwareVersion: t2.playerSoftwareVersion, startTime: t2.startTime, preferPlayback: t2.preferPlayback, audio: t2.audio, defaultStreamType: t2.defaultStreamType, targetLiveWindow: t2.getAttribute(c.TARGET_LIVE_WINDOW), streamType: Q3(t2.getAttribute(c.STREAM_TYPE)), primaryColor: t2.getAttribute(n.PRIMARY_COLOR), secondaryColor: t2.getAttribute(n.SECONDARY_COLOR), accentColor: t2.getAttribute(n.ACCENT_COLOR), forwardSeekOffset: t2.forwardSeekOffset, backwardSeekOffset: t2.backwardSeekOffset, defaultHiddenCaptions: t2.defaultHiddenCaptions, defaultDuration: t2.defaultDuration, defaultShowRemainingTime: t2.defaultShowRemainingTime, hideDuration: Ra2(t2), playbackRates: t2.getAttribute(n.PLAYBACK_RATES), customDomain: (a2 = t2.getAttribute(c.CUSTOM_DOMAIN)) != null ? a2 : void 0, title: t2.getAttribute(n.TITLE), novolumepref: t2.hasAttribute(n.NO_VOLUME_PREF) }, i2), { extraSourceParams: t2.extraSourceParams });\n}\nfunction La2(t2) {\n  var e, a2;\n  let i2 = t2.theme;\n  if (i2) {\n    let r10 = (a2 = (e = t2.getRootNode()) == null ? void 0 : e.getElementById) == null ? void 0 : a2.call(e, i2);\n    if (r10 && r10 instanceof HTMLTemplateElement) return r10;\n    i2.startsWith(\"media-theme-\") || (i2 = `media-theme-${i2}`);\n    let o = c2.customElements.get(i2);\n    if (o != null && o.template) return o.template;\n  }\n}\nfunction Ra2(t2) {\n  var e;\n  let i2 = (e = t2.mediaController) == null ? void 0 : e.querySelector(\"media-time-display\");\n  return i2 && getComputedStyle(i2).getPropertyValue(\"--media-duration-display-display\").trim() === \"none\";\n}\nfunction Dt3(t2) {\n  let i2 = t2.hasAttribute(n.TITLE) ? { video_title: t2.getAttribute(n.TITLE) } : {};\n  return t2.getAttributeNames().filter((e) => e.startsWith(\"metadata-\")).reduce((e, a2) => {\n    let r10 = t2.getAttribute(a2);\n    return r10 !== null && (e[a2.replace(/^metadata-/, \"\").replace(/-/g, \"_\")] = r10), e;\n  }, i2);\n}\nvar wa = Object.values(c);\nvar Oa2 = Object.values(M3);\nvar Sa2 = Object.values(n);\nvar Ma = ue4();\nvar _a2 = \"mux-player\";\nvar Vt3 = { dialog: void 0, isDialogOpen: false };\nvar Pa2 = { redundant_streams: true };\nvar re3;\nvar oe4;\nvar H4;\nvar ne3;\nvar Z4;\nvar O3;\nvar V3;\nvar Ee4;\nvar Ht2;\nvar se3;\nvar Ke4;\nvar _2;\nvar W3;\nvar ke4;\nvar Bt3;\nvar Te3;\nvar Ut3;\nvar Ae2;\nvar Kt2;\nvar Ce4;\nvar $t2;\nvar ie4 = class extends Ne4 {\n  constructor() {\n    super();\n    p(this, O3);\n    p(this, Ee4);\n    p(this, se3);\n    p(this, _2);\n    p(this, ke4);\n    p(this, Te3);\n    p(this, Ae2);\n    p(this, Ce4);\n    p(this, re3, false);\n    p(this, oe4, {});\n    p(this, H4, true);\n    p(this, ne3, new me3(this, \"hotkeys\"));\n    p(this, Z4, __spreadProps(__spreadValues({}, Vt3), { onCloseErrorDialog: () => b3(this, se3, Ke4).call(this, { dialog: void 0, isDialogOpen: false }), onInitFocusDialog: (e) => {\n      Se2(this, T2.activeElement) || e.preventDefault();\n    } }));\n    this.attachShadow({ mode: \"open\" }), b3(this, Ee4, Ht2).call(this), this.isConnected && b3(this, O3, V3).call(this);\n  }\n  static get observedAttributes() {\n    var e;\n    return [...(e = Ne4.observedAttributes) != null ? e : [], ...Oa2, ...wa, ...Sa2];\n  }\n  get mediaTheme() {\n    var e;\n    return (e = this.shadowRoot) == null ? void 0 : e.querySelector(\"media-theme\");\n  }\n  get mediaController() {\n    var e, a2;\n    return (a2 = (e = this.mediaTheme) == null ? void 0 : e.shadowRoot) == null ? void 0 : a2.querySelector(\"media-controller\");\n  }\n  connectedCallback() {\n    var a2;\n    let e = (a2 = this.shadowRoot) == null ? void 0 : a2.querySelector(\"mux-video\");\n    e && (e.metadata = Dt3(this));\n  }\n  attributeChangedCallback(e, a2, r10) {\n    switch (b3(this, O3, V3).call(this), super.attributeChangedCallback(e, a2, r10), e) {\n      case n.HOTKEYS:\n        u2(this, ne3).value = r10;\n        break;\n      case n.THUMBNAIL_TIME: {\n        r10 != null && this.tokens.thumbnail && I3(m(\"Use of thumbnail-time with thumbnail-token is currently unsupported. Ignore thumbnail-time.\").format({}));\n        break;\n      }\n      case n.THUMBNAIL_TOKEN: {\n        let { aud: s } = N2(r10);\n        r10 && s !== \"t\" && I3(m(\"The provided thumbnail-token should have audience value 't' instead of '{aud}'.\").format({ aud: s }));\n        break;\n      }\n      case n.STORYBOARD_TOKEN: {\n        let { aud: s } = N2(r10);\n        r10 && s !== \"s\" && I3(m(\"The provided storyboard-token should have audience value 's' instead of '{aud}'.\").format({ aud: s }));\n        break;\n      }\n      case c.PLAYBACK_ID: {\n        r10 != null && r10.includes(\"?token\") && A2(m(\"The specificed playback ID {playbackId} contains a token which must be provided via the playback-token attribute.\").format({ playbackId: r10 }));\n        break;\n      }\n      case c.STREAM_TYPE:\n        r10 && ![g.LIVE, g.ON_DEMAND, g.UNKNOWN].includes(r10) ? [\"ll-live\", \"live:dvr\", \"ll-live:dvr\"].includes(this.streamType) ? this.targetLiveWindow = r10.includes(\"dvr\") ? Number.POSITIVE_INFINITY : 0 : _e4({ file: \"invalid-stream-type.md\", message: m(\"Invalid stream-type value supplied: `{streamType}`. Please provide stream-type as either: `on-demand` or `live`\").format({ streamType: this.streamType }) }) : r10 === g.LIVE ? this.getAttribute(n.TARGET_LIVE_WINDOW) == null && (this.targetLiveWindow = 0) : this.targetLiveWindow = Number.NaN;\n    }\n    [c.PLAYBACK_ID, M3.SRC, n.PLAYBACK_TOKEN].includes(e) && a2 !== r10 && x3(this, Z4, __spreadValues(__spreadValues({}, u2(this, Z4)), Vt3)), b3(this, _2, W3).call(this, { [ht(e)]: r10 });\n  }\n  get preferCmcd() {\n    var e;\n    return (e = this.getAttribute(c.PREFER_CMCD)) != null ? e : void 0;\n  }\n  set preferCmcd(e) {\n    e !== this.preferCmcd && (e ? dt2.includes(e) ? this.setAttribute(c.PREFER_CMCD, e) : I3(`Invalid value for preferCmcd. Must be one of ${dt2.join()}`) : this.removeAttribute(c.PREFER_CMCD));\n  }\n  get hasPlayed() {\n    var e, a2;\n    return (a2 = (e = this.mediaController) == null ? void 0 : e.hasAttribute(MediaUIAttributes.MEDIA_HAS_PLAYED)) != null ? a2 : false;\n  }\n  get inLiveWindow() {\n    var e;\n    return (e = this.mediaController) == null ? void 0 : e.hasAttribute(MediaUIAttributes.MEDIA_TIME_IS_LIVE);\n  }\n  get _hls() {\n    var e;\n    return (e = this.media) == null ? void 0 : e._hls;\n  }\n  get mux() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.mux;\n  }\n  get theme() {\n    var e;\n    return (e = this.getAttribute(n.THEME)) != null ? e : Ca;\n  }\n  set theme(e) {\n    this.setAttribute(n.THEME, `${e}`);\n  }\n  get themeProps() {\n    let e = this.mediaTheme;\n    if (!e) return;\n    let a2 = {};\n    for (let r10 of e.getAttributeNames()) {\n      if (Ue3.includes(r10)) continue;\n      let o = e.getAttribute(r10);\n      a2[le4(r10)] = o === \"\" ? true : o;\n    }\n    return a2;\n  }\n  set themeProps(e) {\n    var r10, o;\n    b3(this, O3, V3).call(this);\n    let a2 = __spreadValues(__spreadValues({}, this.themeProps), e);\n    for (let s in a2) {\n      if (Ue3.includes(s)) continue;\n      let l = e == null ? void 0 : e[s];\n      typeof l == \"boolean\" || l == null ? (r10 = this.mediaTheme) == null || r10.toggleAttribute(de4(s), !!l) : (o = this.mediaTheme) == null || o.setAttribute(de4(s), l);\n    }\n  }\n  get playbackId() {\n    var e;\n    return (e = this.getAttribute(c.PLAYBACK_ID)) != null ? e : void 0;\n  }\n  set playbackId(e) {\n    e ? this.setAttribute(c.PLAYBACK_ID, e) : this.removeAttribute(c.PLAYBACK_ID);\n  }\n  get src() {\n    var e, a2;\n    return this.playbackId ? (e = Y3(this, M3.SRC)) != null ? e : void 0 : (a2 = this.getAttribute(M3.SRC)) != null ? a2 : void 0;\n  }\n  set src(e) {\n    e ? this.setAttribute(M3.SRC, e) : this.removeAttribute(M3.SRC);\n  }\n  get poster() {\n    var a2;\n    let e = this.getAttribute(M3.POSTER);\n    if (e != null) return e;\n    if (this.playbackId && !this.audio) return pt4(this.playbackId, { customDomain: this.customDomain, thumbnailTime: (a2 = this.thumbnailTime) != null ? a2 : this.startTime, programTime: this.programStartTime, token: this.tokens.thumbnail });\n  }\n  set poster(e) {\n    e || e === \"\" ? this.setAttribute(M3.POSTER, e) : this.removeAttribute(M3.POSTER);\n  }\n  get storyboardSrc() {\n    var e;\n    return (e = this.getAttribute(n.STORYBOARD_SRC)) != null ? e : void 0;\n  }\n  set storyboardSrc(e) {\n    e ? this.setAttribute(n.STORYBOARD_SRC, e) : this.removeAttribute(n.STORYBOARD_SRC);\n  }\n  get storyboard() {\n    if (this.storyboardSrc && !this.tokens.storyboard) return this.storyboardSrc;\n    if (!(this.audio || !this.playbackId || !this.streamType || [g.LIVE, g.UNKNOWN].includes(this.streamType))) return bt3(this.playbackId, { customDomain: this.customDomain, token: this.tokens.storyboard, programStartTime: this.programStartTime, programEndTime: this.programEndTime });\n  }\n  get audio() {\n    return this.hasAttribute(n.AUDIO);\n  }\n  set audio(e) {\n    if (!e) {\n      this.removeAttribute(n.AUDIO);\n      return;\n    }\n    this.setAttribute(n.AUDIO, \"\");\n  }\n  get hotkeys() {\n    return u2(this, ne3);\n  }\n  get nohotkeys() {\n    return this.hasAttribute(n.NOHOTKEYS);\n  }\n  set nohotkeys(e) {\n    if (!e) {\n      this.removeAttribute(n.NOHOTKEYS);\n      return;\n    }\n    this.setAttribute(n.NOHOTKEYS, \"\");\n  }\n  get thumbnailTime() {\n    return L(this.getAttribute(n.THUMBNAIL_TIME));\n  }\n  set thumbnailTime(e) {\n    this.setAttribute(n.THUMBNAIL_TIME, `${e}`);\n  }\n  get title() {\n    var e;\n    return (e = this.getAttribute(n.TITLE)) != null ? e : \"\";\n  }\n  set title(e) {\n    e !== this.title && (e ? this.setAttribute(n.TITLE, e) : this.removeAttribute(\"title\"), super.title = e);\n  }\n  get placeholder() {\n    var e;\n    return (e = Y3(this, n.PLACEHOLDER)) != null ? e : \"\";\n  }\n  set placeholder(e) {\n    this.setAttribute(n.PLACEHOLDER, `${e}`);\n  }\n  get primaryColor() {\n    var a2, r10;\n    let e = this.getAttribute(n.PRIMARY_COLOR);\n    if (e != null || this.mediaTheme && (e = (r10 = (a2 = c2.getComputedStyle(this.mediaTheme)) == null ? void 0 : a2.getPropertyValue(\"--_primary-color\")) == null ? void 0 : r10.trim(), e)) return e;\n  }\n  set primaryColor(e) {\n    this.setAttribute(n.PRIMARY_COLOR, `${e}`);\n  }\n  get secondaryColor() {\n    var a2, r10;\n    let e = this.getAttribute(n.SECONDARY_COLOR);\n    if (e != null || this.mediaTheme && (e = (r10 = (a2 = c2.getComputedStyle(this.mediaTheme)) == null ? void 0 : a2.getPropertyValue(\"--_secondary-color\")) == null ? void 0 : r10.trim(), e)) return e;\n  }\n  set secondaryColor(e) {\n    this.setAttribute(n.SECONDARY_COLOR, `${e}`);\n  }\n  get accentColor() {\n    var a2, r10;\n    let e = this.getAttribute(n.ACCENT_COLOR);\n    if (e != null || this.mediaTheme && (e = (r10 = (a2 = c2.getComputedStyle(this.mediaTheme)) == null ? void 0 : a2.getPropertyValue(\"--_accent-color\")) == null ? void 0 : r10.trim(), e)) return e;\n  }\n  set accentColor(e) {\n    this.setAttribute(n.ACCENT_COLOR, `${e}`);\n  }\n  get defaultShowRemainingTime() {\n    return this.hasAttribute(n.DEFAULT_SHOW_REMAINING_TIME);\n  }\n  set defaultShowRemainingTime(e) {\n    e ? this.setAttribute(n.DEFAULT_SHOW_REMAINING_TIME, \"\") : this.removeAttribute(n.DEFAULT_SHOW_REMAINING_TIME);\n  }\n  get playbackRates() {\n    if (this.hasAttribute(n.PLAYBACK_RATES)) return this.getAttribute(n.PLAYBACK_RATES).trim().split(/\\s*,?\\s+/).map((e) => Number(e)).filter((e) => !Number.isNaN(e)).sort((e, a2) => e - a2);\n  }\n  set playbackRates(e) {\n    if (!e) {\n      this.removeAttribute(n.PLAYBACK_RATES);\n      return;\n    }\n    this.setAttribute(n.PLAYBACK_RATES, e.join(\" \"));\n  }\n  get forwardSeekOffset() {\n    var e;\n    return (e = L(this.getAttribute(n.FORWARD_SEEK_OFFSET))) != null ? e : 10;\n  }\n  set forwardSeekOffset(e) {\n    this.setAttribute(n.FORWARD_SEEK_OFFSET, `${e}`);\n  }\n  get backwardSeekOffset() {\n    var e;\n    return (e = L(this.getAttribute(n.BACKWARD_SEEK_OFFSET))) != null ? e : 10;\n  }\n  set backwardSeekOffset(e) {\n    this.setAttribute(n.BACKWARD_SEEK_OFFSET, `${e}`);\n  }\n  get defaultHiddenCaptions() {\n    return this.hasAttribute(n.DEFAULT_HIDDEN_CAPTIONS);\n  }\n  set defaultHiddenCaptions(e) {\n    e ? this.setAttribute(n.DEFAULT_HIDDEN_CAPTIONS, \"\") : this.removeAttribute(n.DEFAULT_HIDDEN_CAPTIONS);\n  }\n  get defaultDuration() {\n    return L(this.getAttribute(n.DEFAULT_DURATION));\n  }\n  set defaultDuration(e) {\n    e == null ? this.removeAttribute(n.DEFAULT_DURATION) : this.setAttribute(n.DEFAULT_DURATION, `${e}`);\n  }\n  get playerSoftwareName() {\n    var e;\n    return (e = this.getAttribute(c.PLAYER_SOFTWARE_NAME)) != null ? e : _a2;\n  }\n  get playerSoftwareVersion() {\n    var e;\n    return (e = this.getAttribute(c.PLAYER_SOFTWARE_VERSION)) != null ? e : Ma;\n  }\n  get beaconCollectionDomain() {\n    var e;\n    return (e = this.getAttribute(c.BEACON_COLLECTION_DOMAIN)) != null ? e : void 0;\n  }\n  set beaconCollectionDomain(e) {\n    e !== this.beaconCollectionDomain && (e ? this.setAttribute(c.BEACON_COLLECTION_DOMAIN, e) : this.removeAttribute(c.BEACON_COLLECTION_DOMAIN));\n  }\n  get maxResolution() {\n    var e;\n    return (e = this.getAttribute(c.MAX_RESOLUTION)) != null ? e : void 0;\n  }\n  set maxResolution(e) {\n    e !== this.maxResolution && (e ? this.setAttribute(c.MAX_RESOLUTION, e) : this.removeAttribute(c.MAX_RESOLUTION));\n  }\n  get minResolution() {\n    var e;\n    return (e = this.getAttribute(c.MIN_RESOLUTION)) != null ? e : void 0;\n  }\n  set minResolution(e) {\n    e !== this.minResolution && (e ? this.setAttribute(c.MIN_RESOLUTION, e) : this.removeAttribute(c.MIN_RESOLUTION));\n  }\n  get renditionOrder() {\n    var e;\n    return (e = this.getAttribute(c.RENDITION_ORDER)) != null ? e : void 0;\n  }\n  set renditionOrder(e) {\n    e !== this.renditionOrder && (e ? this.setAttribute(c.RENDITION_ORDER, e) : this.removeAttribute(c.RENDITION_ORDER));\n  }\n  get programStartTime() {\n    return L(this.getAttribute(c.PROGRAM_START_TIME));\n  }\n  set programStartTime(e) {\n    e == null ? this.removeAttribute(c.PROGRAM_START_TIME) : this.setAttribute(c.PROGRAM_START_TIME, `${e}`);\n  }\n  get programEndTime() {\n    return L(this.getAttribute(c.PROGRAM_END_TIME));\n  }\n  set programEndTime(e) {\n    e == null ? this.removeAttribute(c.PROGRAM_END_TIME) : this.setAttribute(c.PROGRAM_END_TIME, `${e}`);\n  }\n  get extraSourceParams() {\n    return this.hasAttribute(n.EXTRA_SOURCE_PARAMS) ? [...new URLSearchParams(this.getAttribute(n.EXTRA_SOURCE_PARAMS)).entries()].reduce((e, [a2, r10]) => (e[a2] = r10, e), {}) : Pa2;\n  }\n  set extraSourceParams(e) {\n    e == null ? this.removeAttribute(n.EXTRA_SOURCE_PARAMS) : this.setAttribute(n.EXTRA_SOURCE_PARAMS, new URLSearchParams(e).toString());\n  }\n  get customDomain() {\n    var e;\n    return (e = this.getAttribute(c.CUSTOM_DOMAIN)) != null ? e : void 0;\n  }\n  set customDomain(e) {\n    e !== this.customDomain && (e ? this.setAttribute(c.CUSTOM_DOMAIN, e) : this.removeAttribute(c.CUSTOM_DOMAIN));\n  }\n  get envKey() {\n    var e;\n    return (e = Y3(this, c.ENV_KEY)) != null ? e : void 0;\n  }\n  set envKey(e) {\n    this.setAttribute(c.ENV_KEY, `${e}`);\n  }\n  get noVolumePref() {\n    return this.hasAttribute(n.NO_VOLUME_PREF);\n  }\n  set noVolumePref(e) {\n    e ? this.setAttribute(n.NO_VOLUME_PREF, \"\") : this.removeAttribute(n.NO_VOLUME_PREF);\n  }\n  get debug() {\n    return Y3(this, c.DEBUG) != null;\n  }\n  set debug(e) {\n    e ? this.setAttribute(c.DEBUG, \"\") : this.removeAttribute(c.DEBUG);\n  }\n  get disableTracking() {\n    return Y3(this, c.DISABLE_TRACKING) != null;\n  }\n  set disableTracking(e) {\n    this.toggleAttribute(c.DISABLE_TRACKING, !!e);\n  }\n  get disableCookies() {\n    return Y3(this, c.DISABLE_COOKIES) != null;\n  }\n  set disableCookies(e) {\n    e ? this.setAttribute(c.DISABLE_COOKIES, \"\") : this.removeAttribute(c.DISABLE_COOKIES);\n  }\n  get streamType() {\n    var e, a2, r10;\n    return (r10 = (a2 = this.getAttribute(c.STREAM_TYPE)) != null ? a2 : (e = this.media) == null ? void 0 : e.streamType) != null ? r10 : g.UNKNOWN;\n  }\n  set streamType(e) {\n    this.setAttribute(c.STREAM_TYPE, `${e}`);\n  }\n  get defaultStreamType() {\n    var e, a2, r10;\n    return (r10 = (a2 = this.getAttribute(n.DEFAULT_STREAM_TYPE)) != null ? a2 : (e = this.mediaController) == null ? void 0 : e.getAttribute(n.DEFAULT_STREAM_TYPE)) != null ? r10 : g.ON_DEMAND;\n  }\n  set defaultStreamType(e) {\n    e ? this.setAttribute(n.DEFAULT_STREAM_TYPE, e) : this.removeAttribute(n.DEFAULT_STREAM_TYPE);\n  }\n  get targetLiveWindow() {\n    var e, a2;\n    return this.hasAttribute(n.TARGET_LIVE_WINDOW) ? +this.getAttribute(n.TARGET_LIVE_WINDOW) : (a2 = (e = this.media) == null ? void 0 : e.targetLiveWindow) != null ? a2 : Number.NaN;\n  }\n  set targetLiveWindow(e) {\n    e == this.targetLiveWindow || Number.isNaN(e) && Number.isNaN(this.targetLiveWindow) || (e == null ? this.removeAttribute(n.TARGET_LIVE_WINDOW) : this.setAttribute(n.TARGET_LIVE_WINDOW, `${+e}`));\n  }\n  get liveEdgeStart() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.liveEdgeStart;\n  }\n  get startTime() {\n    return L(Y3(this, c.START_TIME));\n  }\n  set startTime(e) {\n    this.setAttribute(c.START_TIME, `${e}`);\n  }\n  get preferPlayback() {\n    let e = this.getAttribute(c.PREFER_PLAYBACK);\n    if (e === _.MSE || e === _.NATIVE) return e;\n  }\n  set preferPlayback(e) {\n    e !== this.preferPlayback && (e === _.MSE || e === _.NATIVE ? this.setAttribute(c.PREFER_PLAYBACK, e) : this.removeAttribute(c.PREFER_PLAYBACK));\n  }\n  get metadata() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.metadata;\n  }\n  set metadata(e) {\n    if (b3(this, O3, V3).call(this), !this.media) {\n      A2(\"underlying media element missing when trying to set metadata. metadata will not be set.\");\n      return;\n    }\n    this.media.metadata = __spreadValues(__spreadValues({}, Dt3(this)), e);\n  }\n  get _hlsConfig() {\n    var e;\n    return (e = this.media) == null ? void 0 : e._hlsConfig;\n  }\n  set _hlsConfig(e) {\n    if (b3(this, O3, V3).call(this), !this.media) {\n      A2(\"underlying media element missing when trying to set _hlsConfig. _hlsConfig will not be set.\");\n      return;\n    }\n    this.media._hlsConfig = e;\n  }\n  addCuePoints(e) {\n    return __async(this, null, function* () {\n      var a2;\n      if (b3(this, O3, V3).call(this), !this.media) {\n        A2(\"underlying media element missing when trying to addCuePoints. cuePoints will not be added.\");\n        return;\n      }\n      return (a2 = this.media) == null ? void 0 : a2.addCuePoints(e);\n    });\n  }\n  get activeCuePoint() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.activeCuePoint;\n  }\n  get cuePoints() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.cuePoints) != null ? a2 : [];\n  }\n  addChapters(e) {\n    var a2;\n    if (b3(this, O3, V3).call(this), !this.media) {\n      A2(\"underlying media element missing when trying to addChapters. chapters will not be added.\");\n      return;\n    }\n    return (a2 = this.media) == null ? void 0 : a2.addChapters(e);\n  }\n  get activeChapter() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.activeChapter;\n  }\n  get chapters() {\n    var e, a2;\n    return (a2 = (e = this.media) == null ? void 0 : e.chapters) != null ? a2 : [];\n  }\n  getStartDate() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.getStartDate();\n  }\n  get currentPdt() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.currentPdt;\n  }\n  get tokens() {\n    let e = this.getAttribute(n.PLAYBACK_TOKEN), a2 = this.getAttribute(n.DRM_TOKEN), r10 = this.getAttribute(n.THUMBNAIL_TOKEN), o = this.getAttribute(n.STORYBOARD_TOKEN);\n    return __spreadValues(__spreadValues(__spreadValues(__spreadValues(__spreadValues({}, u2(this, oe4)), e != null ? { playback: e } : {}), a2 != null ? { drm: a2 } : {}), r10 != null ? { thumbnail: r10 } : {}), o != null ? { storyboard: o } : {});\n  }\n  set tokens(e) {\n    x3(this, oe4, e != null ? e : {});\n  }\n  get playbackToken() {\n    var e;\n    return (e = this.getAttribute(n.PLAYBACK_TOKEN)) != null ? e : void 0;\n  }\n  set playbackToken(e) {\n    this.setAttribute(n.PLAYBACK_TOKEN, `${e}`);\n  }\n  get drmToken() {\n    var e;\n    return (e = this.getAttribute(n.DRM_TOKEN)) != null ? e : void 0;\n  }\n  set drmToken(e) {\n    this.setAttribute(n.DRM_TOKEN, `${e}`);\n  }\n  get thumbnailToken() {\n    var e;\n    return (e = this.getAttribute(n.THUMBNAIL_TOKEN)) != null ? e : void 0;\n  }\n  set thumbnailToken(e) {\n    this.setAttribute(n.THUMBNAIL_TOKEN, `${e}`);\n  }\n  get storyboardToken() {\n    var e;\n    return (e = this.getAttribute(n.STORYBOARD_TOKEN)) != null ? e : void 0;\n  }\n  set storyboardToken(e) {\n    this.setAttribute(n.STORYBOARD_TOKEN, `${e}`);\n  }\n  addTextTrack(e, a2, r10, o) {\n    var l;\n    let s = (l = this.media) == null ? void 0 : l.nativeEl;\n    if (s) return W(s, e, a2, r10, o);\n  }\n  removeTextTrack(e) {\n    var r10;\n    let a2 = (r10 = this.media) == null ? void 0 : r10.nativeEl;\n    if (a2) return Re(a2, e);\n  }\n  get textTracks() {\n    var e;\n    return (e = this.media) == null ? void 0 : e.textTracks;\n  }\n};\nre3 = /* @__PURE__ */ new WeakMap(), oe4 = /* @__PURE__ */ new WeakMap(), H4 = /* @__PURE__ */ new WeakMap(), ne3 = /* @__PURE__ */ new WeakMap(), Z4 = /* @__PURE__ */ new WeakMap(), O3 = /* @__PURE__ */ new WeakSet(), V3 = function() {\n  var e, a2, r10, o;\n  if (!u2(this, re3)) {\n    x3(this, re3, true), b3(this, _2, W3).call(this);\n    try {\n      if (customElements.upgrade(this.mediaTheme), !(this.mediaTheme instanceof c2.HTMLElement)) throw \"\";\n    } catch (e2) {\n      A2(\"<media-theme> failed to upgrade!\");\n    }\n    try {\n      if (customElements.upgrade(this.media), !(this.media instanceof ks)) throw \"\";\n    } catch (e2) {\n      A2(\"<mux-video> failed to upgrade!\");\n    }\n    try {\n      if (customElements.upgrade(this.mediaController), !(this.mediaController instanceof media_controller_default)) throw \"\";\n    } catch (e2) {\n      A2(\"<media-controller> failed to upgrade!\");\n    }\n    this.init(), b3(this, ke4, Bt3).call(this), b3(this, Te3, Ut3).call(this), b3(this, Ae2, Kt2).call(this), x3(this, H4, (a2 = (e = this.mediaController) == null ? void 0 : e.hasAttribute(Attributes.USER_INACTIVE)) != null ? a2 : true), b3(this, Ce4, $t2).call(this), (r10 = this.media) == null || r10.addEventListener(\"streamtypechange\", () => b3(this, _2, W3).call(this)), (o = this.media) == null || o.addEventListener(\"loadstart\", () => b3(this, _2, W3).call(this));\n  }\n}, Ee4 = /* @__PURE__ */ new WeakSet(), Ht2 = function() {\n  var e, a2;\n  try {\n    (e = window == null ? void 0 : window.CSS) == null || e.registerProperty({ name: \"--media-primary-color\", syntax: \"<color>\", inherits: true }), (a2 = window == null ? void 0 : window.CSS) == null || a2.registerProperty({ name: \"--media-secondary-color\", syntax: \"<color>\", inherits: true });\n  } catch (e2) {\n  }\n}, se3 = /* @__PURE__ */ new WeakSet(), Ke4 = function(e) {\n  Object.assign(u2(this, Z4), e), b3(this, _2, W3).call(this);\n}, _2 = /* @__PURE__ */ new WeakSet(), W3 = function(e = {}) {\n  wt2(St2(xa2(this, __spreadValues(__spreadValues({}, u2(this, Z4)), e))), this.shadowRoot);\n}, ke4 = /* @__PURE__ */ new WeakSet(), Bt3 = function() {\n  let e = (r10) => {\n    var l, h3;\n    if (!(r10 != null && r10.startsWith(\"theme-\"))) return;\n    let o = r10.replace(/^theme-/, \"\");\n    if (Ue3.includes(o)) return;\n    let s = this.getAttribute(r10);\n    s != null ? (l = this.mediaTheme) == null || l.setAttribute(o, s) : (h3 = this.mediaTheme) == null || h3.removeAttribute(o);\n  };\n  new MutationObserver((r10) => {\n    for (let { attributeName: o } of r10) e(o);\n  }).observe(this, { attributes: true }), this.getAttributeNames().forEach(e);\n}, Te3 = /* @__PURE__ */ new WeakSet(), Ut3 = function() {\n  var a2;\n  let e = (r10) => {\n    let { detail: o } = r10;\n    if (o instanceof x || (o = new x(o.message, o.code, o.fatal)), !(o != null && o.fatal)) {\n      I3(o), o.data && I3(`${o.name} data:`, o.data);\n      return;\n    }\n    let { dialog: s, devlog: l } = ge3(o, !window.navigator.onLine, this.playbackId, this.playbackToken);\n    l.message && _e4(l), A2(o), o.data && A2(`${o.name} data:`, o.data), b3(this, se3, Ke4).call(this, { isDialogOpen: true, dialog: s });\n  };\n  this.addEventListener(\"error\", e), this.media && (this.media.errorTranslator = (r10 = {}) => {\n    var s, l, h3;\n    if (!(((s = this.media) == null ? void 0 : s.error) instanceof x)) return r10;\n    let { devlog: o } = ge3((l = this.media) == null ? void 0 : l.error, !window.navigator.onLine, this.playbackId, this.playbackToken, false);\n    return { player_error_code: (h3 = this.media) == null ? void 0 : h3.error.code, player_error_message: o.message ? String(o.message) : r10.player_error_message, player_error_context: o.context ? String(o.context) : r10.player_error_context };\n  }), (a2 = this.media) == null || a2.addEventListener(\"error\", (r10) => {\n    var s, l;\n    let { detail: o } = r10;\n    if (!o) {\n      let { message: h3, code: R2 } = (l = (s = this.media) == null ? void 0 : s.error) != null ? l : {};\n      o = new x(h3, R2);\n    }\n    o != null && o.fatal && this.dispatchEvent(new CustomEvent(\"error\", { detail: o }));\n  });\n}, Ae2 = /* @__PURE__ */ new WeakSet(), Kt2 = function() {\n  var a2, r10, o, s;\n  let e = () => b3(this, _2, W3).call(this);\n  (r10 = (a2 = this.media) == null ? void 0 : a2.textTracks) == null || r10.addEventListener(\"addtrack\", e), (s = (o = this.media) == null ? void 0 : o.textTracks) == null || s.addEventListener(\"removetrack\", e);\n}, Ce4 = /* @__PURE__ */ new WeakSet(), $t2 = function() {\n  var R2, k3;\n  if (!/Firefox/i.test(navigator.userAgent)) return;\n  let a2, r10 = /* @__PURE__ */ new WeakMap(), o = () => this.streamType === g.LIVE && !this.secondaryColor && this.offsetWidth >= 800, s = (v4, f, C3 = false) => {\n    if (o()) return;\n    Array.from(v4 && v4.activeCues || []).forEach((g2) => {\n      if (!(!g2.snapToLines || g2.line < -5 || g2.line >= 0 && g2.line < 10)) if (!f || this.paused) {\n        let B5 = g2.text.split(`\n`).length, q3 = -3;\n        this.streamType === g.LIVE && (q3 = -2);\n        let z2 = q3 - B5;\n        if (g2.line === z2 && !C3) return;\n        r10.has(g2) || r10.set(g2, g2.line), g2.line = z2;\n      } else setTimeout(() => {\n        g2.line = r10.get(g2) || \"auto\";\n      }, 500);\n    });\n  }, l = () => {\n    var v4, f;\n    s(a2, (f = (v4 = this.mediaController) == null ? void 0 : v4.hasAttribute(Attributes.USER_INACTIVE)) != null ? f : false);\n  }, h3 = () => {\n    var C3, P2;\n    let f = Array.from(((P2 = (C3 = this.mediaController) == null ? void 0 : C3.media) == null ? void 0 : P2.textTracks) || []).filter((g2) => [\"subtitles\", \"captions\"].includes(g2.kind) && g2.mode === \"showing\")[0];\n    f !== a2 && (a2 == null || a2.removeEventListener(\"cuechange\", l)), a2 = f, a2 == null || a2.addEventListener(\"cuechange\", l), s(a2, u2(this, H4));\n  };\n  h3(), (R2 = this.textTracks) == null || R2.addEventListener(\"change\", h3), (k3 = this.textTracks) == null || k3.addEventListener(\"addtrack\", h3), this.addEventListener(\"userinactivechange\", () => {\n    var f, C3;\n    let v4 = (C3 = (f = this.mediaController) == null ? void 0 : f.hasAttribute(Attributes.USER_INACTIVE)) != null ? C3 : true;\n    u2(this, H4) !== v4 && (x3(this, H4, v4), s(a2, u2(this, H4)));\n  });\n};\nfunction Y3(t2, i2) {\n  return t2.media ? t2.media.getAttribute(i2) : t2.getAttribute(i2);\n}\nc2.customElements.get(\"mux-player\") || (c2.customElements.define(\"mux-player\", ie4), c2.MuxPlayerElement = ie4);\n\n// node_modules/.pnpm/@mux+mux-player-react@2.9.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@mux/mux-player-react/dist/index.mjs\nimport { useRef as ye4 } from \"react\";\nimport { useEffect as ee5, useRef as ne4 } from \"react\";\nimport { useEffect as te5 } from \"react\";\nvar p2 = { className: \"class\", classname: \"class\", htmlFor: \"for\", crossOrigin: \"crossorigin\", viewBox: \"viewBox\", playsInline: \"playsinline\", autoPlay: \"autoplay\", playbackRate: \"playbackrate\" };\nvar Y4 = (e) => e == null;\nvar $5 = (e, n2) => Y4(n2) ? false : e in n2;\nvar Q4 = (e) => e.replace(/[A-Z]/g, (n2) => `-${n2.toLowerCase()}`);\nvar X5 = (e, n2) => {\n  if (!(typeof n2 == \"boolean\" && !n2)) {\n    if ($5(e, p2)) return p2[e];\n    if (typeof n2 != null) return /[A-Z]/.test(e) ? Q4(e) : e;\n  }\n};\nvar B4 = (e, n2) => typeof e == \"boolean\" ? \"\" : e;\nvar d3 = (e = {}) => Object.entries(e).reduce((n2, [t2, o]) => {\n  let r10 = X5(t2, o);\n  if (!r10) return n2;\n  let s = B4(o, t2);\n  return n2[r10] = s, n2;\n}, {});\nvar m2 = (...e) => {\n  let n2 = ne4(null);\n  return ee5(() => {\n    e.forEach((t2) => {\n      t2 && (typeof t2 == \"function\" ? t2(n2.current) : t2.current = n2.current);\n    });\n  }, [e]), n2;\n};\nvar ae4 = Object.prototype.hasOwnProperty;\nvar re4 = (e, n2) => {\n  if (Object.is(e, n2)) return true;\n  if (typeof e != \"object\" || e === null || typeof n2 != \"object\" || n2 === null) return false;\n  if (Array.isArray(e)) return !Array.isArray(n2) || e.length !== n2.length ? false : e.some((r10, s) => n2[s] === r10);\n  let t2 = Object.keys(e), o = Object.keys(n2);\n  if (t2.length !== o.length) return false;\n  for (let r10 = 0; r10 < t2.length; r10++) if (!ae4.call(n2, t2[r10]) || !Object.is(e[t2[r10]], n2[t2[r10]])) return false;\n  return true;\n};\nvar c3 = (e, n2, t2) => !re4(n2, e[t2]);\nvar oe5 = (e, n2, t2) => {\n  e[t2] = n2;\n};\nvar ie5 = (e, n2, t2, o = oe5, r10 = c3) => te5(() => {\n  let s = t2 == null ? void 0 : t2.current;\n  s && r10(s, n2, e) && o(s, n2, e);\n}, [t2 == null ? void 0 : t2.current, n2]);\nvar i = ie5;\nvar se4 = () => {\n  try {\n    return \"2.9.1\";\n  } catch (e) {\n  }\n  return \"UNKNOWN\";\n};\nvar le5 = se4();\nvar E3 = () => le5;\nvar ce5 = y4.forwardRef((_a3, t2) => {\n  var _b = _a3, { children: e } = _b, n2 = __objRest(_b, [\"children\"]);\n  return y4.createElement(\"mux-player\", d3(__spreadProps(__spreadValues({}, n2), { ref: t2 })), e);\n});\nvar a = (e, n2, t2) => ue5(() => {\n  let o = n2 == null ? void 0 : n2.current;\n  if (!(!o || !t2)) return o.addEventListener(e, t2), () => {\n    o.removeEventListener(e, t2);\n  };\n}, [n2 == null ? void 0 : n2.current, t2]);\nvar pe3 = (e, n2) => {\n  let _a3 = n2, { onAbort: t2, onCanPlay: o, onCanPlayThrough: r10, onEmptied: s, onLoadStart: g2, onLoadedData: M4, onLoadedMetadata: P2, onProgress: f, onDurationChange: b4, onVolumeChange: v4, onRateChange: x4, onResize: h3, onWaiting: T3, onPlay: R2, onPlaying: C3, onTimeUpdate: k3, onPause: L2, onSeeking: O4, onSeeked: S4, onStalled: G4, onSuspend: w2, onEnded: V4, onError: A3, onCuePointChange: N3, onCuePointsChange: I4, onChapterChange: K5, metadata: D3, tokens: U4, paused: _3, playbackId: H5, playbackRates: j4, currentTime: z2, themeProps: F5, extraSourceParams: W4, _hlsConfig: Z5 } = _a3, q3 = __objRest(_a3, [\"onAbort\", \"onCanPlay\", \"onCanPlayThrough\", \"onEmptied\", \"onLoadStart\", \"onLoadedData\", \"onLoadedMetadata\", \"onProgress\", \"onDurationChange\", \"onVolumeChange\", \"onRateChange\", \"onResize\", \"onWaiting\", \"onPlay\", \"onPlaying\", \"onTimeUpdate\", \"onPause\", \"onSeeking\", \"onSeeked\", \"onStalled\", \"onSuspend\", \"onEnded\", \"onError\", \"onCuePointChange\", \"onCuePointsChange\", \"onChapterChange\", \"metadata\", \"tokens\", \"paused\", \"playbackId\", \"playbackRates\", \"currentTime\", \"themeProps\", \"extraSourceParams\", \"_hlsConfig\"]);\n  return i(\"playbackRates\", j4, e), i(\"metadata\", D3, e), i(\"extraSourceParams\", W4, e), i(\"_hlsConfig\", Z5, e), i(\"themeProps\", F5, e), i(\"tokens\", U4, e), i(\"playbackId\", H5, e), i(\"paused\", _3, e, (l, u3) => {\n    u3 != null && (u3 ? l.pause() : l.play());\n  }, (l, u3, J4) => l.hasAttribute(\"autoplay\") && !l.hasPlayed ? false : c3(l, u3, J4)), i(\"currentTime\", z2, e, (l, u3) => {\n    u3 != null && (l.currentTime = u3);\n  }), a(\"abort\", e, t2), a(\"canplay\", e, o), a(\"canplaythrough\", e, r10), a(\"emptied\", e, s), a(\"loadstart\", e, g2), a(\"loadeddata\", e, M4), a(\"loadedmetadata\", e, P2), a(\"progress\", e, f), a(\"durationchange\", e, b4), a(\"volumechange\", e, v4), a(\"ratechange\", e, x4), a(\"resize\", e, h3), a(\"waiting\", e, T3), a(\"play\", e, R2), a(\"playing\", e, C3), a(\"timeupdate\", e, k3), a(\"pause\", e, L2), a(\"seeking\", e, O4), a(\"seeked\", e, S4), a(\"stalled\", e, G4), a(\"suspend\", e, w2), a(\"ended\", e, V4), a(\"error\", e, A3), a(\"cuepointchange\", e, N3), a(\"cuepointschange\", e, I4), a(\"chapterchange\", e, K5), [q3];\n};\nvar de5 = E3();\nvar me4 = \"mux-player-react\";\nvar Ee5 = y4.forwardRef((e, n2) => {\n  let t2 = ye4(null), o = m2(t2, n2), [r10] = pe3(t2, e);\n  return y4.createElement(ce5, __spreadValues({ ref: o, playerSoftwareName: me4, playerSoftwareVersion: de5 }, r10));\n});\nvar Ae3 = Ee5;\n\nexport {\n  Ae3 as Ae\n};\n/*! Bundled license information:\n\nmux-embed/dist/mux.mjs:\n  (*!\n  * JavaScript Cookie v2.1.3\n  * https://github.com/js-cookie/js-cookie\n  *\n  * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n  * Released under the MIT license\n  *)\n*/\n","import {\n  Arrow\n} from \"./chunk-EJKG6TUT.mjs\";\nimport {\n  Spinner\n} from \"./chunk-SDKSBXQ2.mjs\";\nimport {\n  Ae\n} from \"./chunk-PO4BOMMR.mjs\";\nimport {\n  AspectRatio,\n  cx,\n  useMounted\n} from \"./chunk-SIZSNBFW.mjs\";\n\n// src/class/Video.tsx\nimport { useEffect, useRef, useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nfunction Video({\n  video,\n  showNote = false,\n  noteLink = \"https://ruucm.notion.site/AI-ComfyUI-bb811fbf40704b51b6211a5049a298b2?pvs=74\"\n}) {\n  const mounted = useMounted();\n  const { playbackId, title, thumbnailTime, chapters, workflows } = video;\n  const videoRef = useRef(null);\n  const playbackKey = playbackId;\n  const [lastKnownTime, setLastKnownTime] = useState(0);\n  const [isFirstPlay, setIsFirstPlay] = useState(true);\n  const [canPlay, setCanPlay] = useState(false);\n  useEffect(() => {\n    if (!mounted) return;\n    const player = videoRef.current;\n    if (player) {\n      const savedTime = parseFloat(window.localStorage.getItem(playbackId)) || 0;\n      setLastKnownTime(savedTime);\n      const handleTimeUpdate = (e) => {\n        window.localStorage.setItem(playbackKey, e.target.currentTime);\n      };\n      const handleEnded = () => {\n        window.localStorage.removeItem(playbackKey);\n      };\n      const handlePlay = () => {\n        if (isFirstPlay && lastKnownTime > 0) {\n          player.pause();\n          const formattedTime = new Date(lastKnownTime * 1e3).toISOString().substr(11, 8);\n          const resume = window.confirm(\n            `\\uC774\\uC804\\uC5D0 \\uC7AC\\uC0DD\\uD558\\uC2E0 \\uBD80\\uBD84\\uC73C\\uB85C \\uB3CC\\uC544\\uAC00\\uC2DC\\uACA0\\uC5B4\\uC694? (${formattedTime})`\n          );\n          if (resume) {\n            player.currentTime = lastKnownTime;\n          } else {\n            player.currentTime = 0;\n          }\n          player.play();\n          setIsFirstPlay(false);\n        }\n      };\n      player.addEventListener(\"timeupdate\", handleTimeUpdate);\n      player.addEventListener(\"ended\", handleEnded);\n      player.addEventListener(\"play\", handlePlay);\n      return () => {\n        player.removeEventListener(\"timeupdate\", handleTimeUpdate);\n        player.removeEventListener(\"ended\", handleEnded);\n        player.removeEventListener(\"play\", handlePlay);\n      };\n    }\n  }, [isFirstPlay, lastKnownTime, playbackKey, videoRef, mounted]);\n  return /* @__PURE__ */ jsxs(Fragment, { children: [\n    /* @__PURE__ */ jsxs(AspectRatio, { ratio: 3456 / 2234, style: { overflow: \"hidden\" }, children: [\n      !canPlay && /* @__PURE__ */ jsx(\n        Spinner,\n        {\n          style: {\n            width: 24,\n            height: 24,\n            position: \"absolute\",\n            left: \"50%\",\n            top: \"50%\",\n            transform: \"translate(-50%, -50%)\"\n          }\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        \"div\",\n        {\n          className: cx(\n            \"w-full transition-all ease-in-out delay-650\",\n            \"absolute left-0 top-0\",\n            canPlay ? \"md:opacity-100\" : \"md:opacity-0\",\n            \"opacity-100\"\n          ),\n          children: /* @__PURE__ */ jsx(\n            Ae,\n            {\n              ref: videoRef,\n              streamType: \"on-demand\",\n              metadataVideoTitle: title,\n              primaryColor: \"#FFFFFF\",\n              secondaryColor: \"#000000\",\n              accentColor: \"#005DFA\",\n              playbackId,\n              thumbnailTime,\n              onCanPlay: () => setCanPlay(true)\n            }\n          )\n        }\n      )\n    ] }),\n    /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-row justify-between w-full\", children: [\n      /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-5\", children: [\n        /* @__PURE__ */ jsx(VideoIndex, { playerRef: videoRef, chapters }),\n        (workflows == null ? void 0 : workflows.length) > 0 && /* @__PURE__ */ jsxs(\n          \"div\",\n          {\n            className: \"flex flex-col justify-end gap-2\",\n            style: {\n              border: \"1px solid #005DFA\",\n              borderStyle: \"dashed\",\n              padding: \"12px 24px\",\n              borderRadius: \"4px\"\n            },\n            children: [\n              /* @__PURE__ */ jsx(\"div\", { className: \"font-bold text-base\", style: { color: \"#005DFA\" }, children: \"Workflows\" }),\n              workflows.map((workflow, index) => /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-row gap-2 items-center\", children: [\n                /* @__PURE__ */ jsx(\n                  \"a\",\n                  {\n                    href: workflow.link,\n                    target: \"_blank\",\n                    className: \"text-sm\",\n                    style: { color: \"#005DFA\" },\n                    children: workflow.title\n                  }\n                ),\n                /* @__PURE__ */ jsx(Arrow, { className: \"w-4 h-4\" })\n              ] }, index))\n            ]\n          }\n        )\n      ] }),\n      showNote ? /* @__PURE__ */ jsx(\n        \"a\",\n        {\n          href: noteLink,\n          target: \"_blank\",\n          className: \"font-bold text-base\",\n          style: { color: \"#005DFA\" },\n          children: \"\\uAC15\\uC758 \\uB178\\uD2B8\"\n        }\n      ) : /* @__PURE__ */ jsx(\"div\", {})\n    ] })\n  ] });\n}\nvar VideoIndex = ({ playerRef, chapters }) => {\n  const handleChapterClick = (time) => {\n    const [minutes, seconds] = time.split(\":\").map(Number);\n    const timeInSeconds = minutes * 60 + seconds;\n    if (playerRef.current) {\n      playerRef.current.currentTime = timeInSeconds;\n    }\n  };\n  return /* @__PURE__ */ jsx(\"ul\", { style: { listStyle: \"none\" }, children: chapters.map((chapter, index) => /* @__PURE__ */ jsxs(\"li\", { onClick: () => handleChapterClick(chapter.time), children: [\n    /* @__PURE__ */ jsx(\n      \"span\",\n      {\n        style: {\n          color: \"#005DFA\",\n          cursor: \"pointer\",\n          width: \"30px\",\n          display: \"inline-block\",\n          textAlign: \"right\",\n          marginRight: \"4px\"\n        },\n        children: chapter.time\n      }\n    ),\n    \" \",\n    chapter.title\n  ] }, index)) });\n};\n\nexport {\n  Video\n};\n","import {\n  PaymentButton\n} from \"./chunk-SDKSBXQ2.mjs\";\n\n// src/payments/NeedPayment.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction NeedPayment() {\n  return /* @__PURE__ */ jsxs(\n    \"div\",\n    {\n      style: {\n        fontSize: 20,\n        display: \"flex\",\n        gap: 12,\n        flexDirection: \"column\",\n        alignItems: \"center\",\n        whiteSpace: \"nowrap\"\n      },\n      children: [\n        \"\\uAC15\\uC758 \\uAD6C\\uB9E4\\uAC00 \\uD544\\uC694\\uD569\\uB2C8\\uB2E4\",\n        /* @__PURE__ */ jsx(PaymentButton, {})\n      ]\n    }\n  );\n}\n\nexport {\n  NeedPayment\n};\n","import {\n  Video\n} from \"./chunk-5VZGXROV.mjs\";\nimport {\n  NeedPayment\n} from \"./chunk-RZ4MXR2C.mjs\";\nimport {\n  Button,\n  CourseTitle,\n  LiveEventInfo,\n  NordyInfo,\n  VideoItem\n} from \"./chunk-SDKSBXQ2.mjs\";\nimport {\n  isDev\n} from \"./chunk-SIZSNBFW.mjs\";\nimport {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\n\n// src/class/VideoList.tsx\nimport { ControlType } from \"framer\";\nimport { useState } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nfunction VideoList({\n  passwordProtect,\n  courseId,\n  title,\n  showNote,\n  showNordyInfo,\n  showLiveEventInfo,\n  videos,\n  noteLink\n}) {\n  var _a;\n  const [store, setStore] = useGlobalStore();\n  const [password, setPassword] = useState(\"\");\n  const [canAccess, setCanAccess] = useState(false);\n  const { user } = store;\n  const firstVideo = videos[0];\n  const [current, setCurrent] = useState(firstVideo);\n  if (!isDev && !(courseId === \"my-ai-model\") && !passwordProtect) {\n    if (!user) return;\n    if (!((_a = user.access) == null ? void 0 : _a[courseId])) return /* @__PURE__ */ jsx(NeedPayment, {});\n  }\n  if (passwordProtect && !canAccess) {\n    return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-2\", children: [\n      /* @__PURE__ */ jsx(\"div\", { className: \"text-sm text-gray-500\", children: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\" }),\n      /* @__PURE__ */ jsx(\n        \"input\",\n        {\n          type: \"password\",\n          value: password,\n          onChange: (e) => setPassword(e.target.value),\n          className: \"border border-gray-300 rounded-md p-2\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        Button,\n        {\n          text: \"\\uC785\\uC7A5 \\uD558\\uAE30\",\n          variant: \"primary\",\n          onClick: () => {\n            setCanAccess(password === \"4893\");\n          }\n        }\n      )\n    ] }) });\n  }\n  return /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-8 md:flex-row\", children: [\n    /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col gap-8 w-80 p-2 sticky top-0 h-fit max-md:relative max-md:w-full max-md:overflow-y-scroll\", children: [\n      /* @__PURE__ */ jsx(CourseTitle, { title, style: { width: \"100%\" } }),\n      /* @__PURE__ */ jsx(\"div\", { children: videos.map((video, id) => /* @__PURE__ */ jsx(\n        VideoItem,\n        {\n          title: `${video.title} ${video.locked ? \"\" : `(${video.duration})`}`,\n          onClick: () => setCurrent(video),\n          variant: (() => {\n            if (video.locked) return \"locked\";\n            return video.playbackId === current.playbackId ? \"active\" : \"default\";\n          })(),\n          category: video.category,\n          showBadges: video.showBadges,\n          showBadge: video.showBadge,\n          style: { width: \"100%\" }\n        },\n        id + current\n      )) })\n    ] }),\n    /* @__PURE__ */ jsxs(\n      \"div\",\n      {\n        style: {\n          flex: 1,\n          display: \"flex\",\n          flexDirection: \"column\",\n          alignItems: \"start\",\n          gap: 32\n        },\n        className: \"sticky top-0 h-fit\",\n        children: [\n          /* @__PURE__ */ jsx(\n            Video,\n            {\n              video: current,\n              showNote,\n              noteLink\n            },\n            current.playbackId\n          ),\n          courseId === \"comfy-and-celeb-models\" && /* @__PURE__ */ jsx(\n            Button,\n            {\n              text: `\\uC704 \\uB0B4\\uC6A9\\uB4E4\\uC744 \\uB354 \\uC790\\uC138\\uD788 \\uBC30\\uC6B0\\uACE0 \\uC2F6\\uB2E4\\uBA74? \\u{1F449}\\u{1F3FB} \\uBCF8\\uAC15\\uC758 \\uB458\\uB7EC\\uBCF4\\uAE30`,\n              variant: \"primary\",\n              onClick: () => window.open(\n                \"https://harbor.school/courses/comfy-for-real-ads/\",\n                \"_blank\"\n              )\n            }\n          ),\n          courseId !== \"comfy-and-celeb-models\" && courseId !== \"ai-factory-manager\" && /* @__PURE__ */ jsx(\n            Button,\n            {\n              text: `\\uC2AC\\uB799\\uC5D0\\uC11C \\uBB3B\\uACE0 \\uB2F5\\uD558\\uAE30 (#${courseId} \\uCC44\\uB110)`,\n              variant: \"primary\",\n              onClick: () => window.open(\n                \"https://join.slack.com/t/harbor-school/shared_invite/zt-2lk1yeevo-BLNt1IGXduBstl10Pk_JxQ\",\n                \"_blank\"\n              )\n            }\n          ),\n          courseId === \"ai-factory-manager\" && /* @__PURE__ */ jsx(\n            Button,\n            {\n              text: \"\\uCEE4\\uBBA4\\uB2C8\\uD2F0\\uC5D0 \\uBB3B\\uACE0 \\uB2F5\\uD558\\uAE30\",\n              variant: \"primary\",\n              onClick: () => window.open(\n                \"https://www.milgram.io/community/ai-ndwlrp/\",\n                \"_blank\"\n              )\n            }\n          ),\n          showNordyInfo && /* @__PURE__ */ jsx(NordyInfo, {}),\n          showLiveEventInfo && /* @__PURE__ */ jsx(LiveEventInfo, {})\n        ]\n      }\n    )\n  ] });\n}\nVideoList.propertyControls = {\n  passwordProtect: {\n    type: ControlType.Boolean,\n    defaultValue: false\n  },\n  courseId: {\n    type: ControlType.String\n  },\n  title: {\n    type: ControlType.String,\n    defaultValue: `\\uC9C4\\uC9DC \\uAD11\\uACE0 \\uC774\\uBBF8\\uC9C0\\uB97C \\uB9CC\\uB4E4\\uBA74\\uC11C\n\\uBC30\\uC6B0\\uB294 AI (ComfyUI)`,\n    displayTextArea: true\n  },\n  showNote: {\n    type: ControlType.Boolean,\n    defaultValue: false\n  },\n  noteLink: {\n    type: ControlType.String,\n    defaultValue: \"https://ruucm.notion.site/AI-ComfyUI-bb811fbf40704b51b6211a5049a298b2?pvs=74\"\n  },\n  showNordyInfo: {\n    type: ControlType.Boolean,\n    defaultValue: true\n  },\n  showLiveEventInfo: {\n    type: ControlType.Boolean,\n    defaultValue: false\n  },\n  videos: {\n    type: ControlType.Array,\n    control: {\n      type: ControlType.Object,\n      controls: {\n        title: { type: ControlType.String },\n        duration: { type: ControlType.String },\n        thumbnailTime: {\n          type: ControlType.Number,\n          displayStepper: true\n        },\n        locked: { type: ControlType.Boolean, defaultValue: true },\n        playbackId: { type: ControlType.String },\n        category: { type: ControlType.String, defaultValue: \"\" },\n        showBadges: { type: ControlType.Boolean, defaultValue: false },\n        showBadge: { type: ControlType.Boolean, defaultValue: false },\n        chapters: {\n          type: ControlType.Array,\n          control: {\n            type: ControlType.Object,\n            controls: {\n              time: { type: ControlType.String },\n              title: { type: ControlType.String }\n            }\n          }\n        },\n        workflows: {\n          type: ControlType.Array,\n          control: {\n            type: ControlType.Object,\n            controls: {\n              title: { type: ControlType.String },\n              link: { type: ControlType.String }\n            }\n          }\n        }\n      }\n    },\n    defaultValue: [\n      {\n        playbackId: \"XMPYGKG1MpOGgz9L01IvbkreyK8ZLbCusIE77TlxBirU\",\n        title: \"Video Title\",\n        duration: \"10:23\",\n        thumbnailTime: 10\n      }\n    ]\n  }\n};\n\nexport {\n  VideoList\n};\n","import {\n  afterPayments\n} from \"./chunk-4QCHTQPJ.mjs\";\nimport {\n  getCustomData\n} from \"./chunk-77OKAR3P.mjs\";\nimport {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\nimport {\n  __async\n} from \"./chunk-JWK35I2R.mjs\";\n\n// src/payments/HandleMobileRedirection.tsx\nimport { useEffect } from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction HandleMobileRedirection(props) {\n  const [store, setStore] = useGlobalStore();\n  const { clerk, supabase, user } = store;\n  useEffect(() => {\n    if (!supabase) return;\n    const urlParams = new URLSearchParams(window.location.search);\n    const paymentId = urlParams.get(\"paymentId\");\n    const courseId = urlParams.get(\"courseId\");\n    console.log({ paymentId, courseId });\n    if (paymentId && courseId) update();\n    function update() {\n      return __async(this, null, function* () {\n        const url = `https://api.portone.io/payments/${paymentId}`;\n        const options = {\n          method: \"get\",\n          headers: {\n            \"Content-Type\": \"application/json\",\n            Authorization: `PortOne OjRGB7mXwV755EDUV9mW7nIf7RYAxdIYxeQn2AyW3p4n75YsQM2pCudTeRl1U890k5o3at5lXauxCJFx`\n          }\n        };\n        try {\n          const response = yield fetch(url, options);\n          const paymentData = yield response.json();\n          console.log(\"paymentData\", paymentData);\n          const email = paymentData.customer.email;\n          const username = paymentData.customer.name;\n          const phone = paymentData.customer.phoneNumber;\n          if (paymentData.status === \"PAID\") {\n            const customData = yield getCustomData();\n            afterPayments({\n              supabase,\n              courseId,\n              paymentId,\n              email,\n              username,\n              phone,\n              totalAmount: customData.value\n            });\n          } else alert(\"\\uACB0\\uC81C \\uC5D0\\uB7EC\");\n        } catch (error) {\n          console.error(error);\n        }\n      });\n    }\n  }, [supabase]);\n  return /* @__PURE__ */ jsx(\"h1\", { className: \"text-2xl font-bold\", children: \"\\uACB0\\uC81C \\uC644\\uB8CC\\uC911..\" });\n}\n\nexport {\n  HandleMobileRedirection\n};\n","// src/bootcamp/PointsDashboardView.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar colors = {\n  white: \"#FEFDFA\",\n  harborBlue: \"#005DFA\",\n  harborPink: \"#FCEBEF\"\n};\nfunction BootcampPointsDashboardView({\n  cohortId,\n  cohortName,\n  loading,\n  error,\n  students\n}) {\n  const podium = students.slice(0, 3);\n  const rest = students.slice(3);\n  return /* @__PURE__ */ jsx(\n    \"section\",\n    {\n      className: \"w-full min-h-screen py-12 px-4\",\n      style: {\n        background: `radial-gradient(1200px 400px at 15% -10%, ${colors.harborPink} 0%, ${colors.white} 60%)`,\n        color: \"#0B1A33\"\n      },\n      children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto\", children: [\n        /* @__PURE__ */ jsxs(\"header\", { className: \"flex flex-col gap-4 mb-10\", children: [\n          /* @__PURE__ */ jsxs(\"div\", { className: \"inline-flex items-center gap-3\", children: [\n            /* @__PURE__ */ jsx(\n              \"span\",\n              {\n                className: \"text-xs font-semibold tracking-[0.3em] uppercase px-3 py-1 rounded-full\",\n                style: {\n                  backgroundColor: colors.harborPink,\n                  color: colors.harborBlue\n                },\n                children: \"Harbor Bootcamp\"\n              }\n            ),\n            /* @__PURE__ */ jsx(\"span\", { className: \"text-sm text-slate-500\", children: cohortId ? `${cohortName || cohortId}` : \"Cohort ID not found\" })\n          ] }),\n          /* @__PURE__ */ jsx(\n            \"h1\",\n            {\n              className: \"text-4xl sm:text-5xl font-semibold leading-tight\",\n              style: { color: colors.harborBlue },\n              children: \"\\uBD80\\uD2B8\\uCEA0\\uD504 \\uC218\\uAC15\\uC0DD \\uD3EC\\uC778\\uD2B8 \\uB300\\uC2DC\\uBCF4\\uB4DC\"\n            }\n          ),\n          /* @__PURE__ */ jsx(\"p\", { className: \"text-base sm:text-lg text-slate-600 max-w-2xl\", children: \"\\uACE0\\uBE14\\uB9B0 \\uACFC\\uC81C\\uC640 \\uD018\\uC2A4\\uD2B8 \\uB2EC\\uC131 \\uD3EC\\uC778\\uD2B8\\uB97C \\uD569\\uC0B0\\uD574 \\uC218\\uAC15\\uC0DD \\uB7AD\\uD0B9\\uC744 \\uBCF4\\uC5EC\\uC90D\\uB2C8\\uB2E4.\" })\n        ] }),\n        /* @__PURE__ */ jsxs(\"div\", { className: \"grid gap-6\", children: [\n          loading && /* @__PURE__ */ jsx(\"div\", { className: \"rounded-3xl border border-slate-200 bg-white/80 p-8 text-slate-500\", children: \"\\uD3EC\\uC778\\uD2B8\\uB97C \\uBD88\\uB7EC\\uC624\\uB294 \\uC911\\uC785\\uB2C8\\uB2E4...\" }),\n          !loading && error && /* @__PURE__ */ jsx(\"div\", { className: \"rounded-3xl border border-rose-200 bg-rose-50 p-6 text-rose-700\", children: error }),\n          !loading && !error && students.length === 0 && /* @__PURE__ */ jsx(\"div\", { className: \"rounded-3xl border border-slate-200 bg-white/80 p-8 text-slate-500\", children: \"\\uC544\\uC9C1 \\uB4F1\\uB85D\\uB41C \\uD3EC\\uC778\\uD2B8 \\uB370\\uC774\\uD130\\uAC00 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\" }),\n          !loading && !error && students.length > 0 && /* @__PURE__ */ jsxs(\"div\", { className: \"grid gap-6\", children: [\n            /* @__PURE__ */ jsx(\"div\", { className: \"grid sm:grid-cols-3 gap-4\", children: podium.map((student, index) => /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"rounded-3xl border border-slate-200 bg-white p-6 shadow-[0_20px_60px_rgba(0,93,250,0.08)]\",\n                children: [\n                  /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-between\", children: [\n                    /* @__PURE__ */ jsxs(\n                      \"span\",\n                      {\n                        className: \"text-sm font-semibold\",\n                        style: { color: colors.harborBlue },\n                        children: [\n                          \"#\",\n                          index + 1\n                        ]\n                      }\n                    ),\n                    /* @__PURE__ */ jsxs(\n                      \"span\",\n                      {\n                        className: \"text-xs font-semibold px-2 py-1 rounded-full\",\n                        style: { backgroundColor: colors.harborPink },\n                        children: [\n                          \"TOP \",\n                          index + 1\n                        ]\n                      }\n                    )\n                  ] }),\n                  /* @__PURE__ */ jsx(\"div\", { className: \"mt-4 text-2xl font-semibold\", children: student.student_name }),\n                  /* @__PURE__ */ jsxs(\"div\", { className: \"mt-2 text-sm text-slate-500\", children: [\n                    \"\\uACE0\\uBE14\\uB9B0 \",\n                    student.goblin_points,\n                    \" \\xB7 \\uD018\\uC2A4\\uD2B8\",\n                    \" \",\n                    student.quest_points\n                  ] }),\n                  /* @__PURE__ */ jsxs(\"div\", { className: \"mt-6 text-3xl font-semibold text-slate-900\", children: [\n                    student.total_points,\n                    \" P\"\n                  ] })\n                ]\n              },\n              student.student_id\n            )) }),\n            /* @__PURE__ */ jsxs(\"div\", { className: \"rounded-3xl border border-slate-200 bg-white overflow-hidden\", children: [\n              /* @__PURE__ */ jsx(\n                \"div\",\n                {\n                  className: \"px-6 py-4 text-sm font-semibold tracking-wide\",\n                  style: {\n                    backgroundColor: colors.harborPink,\n                    color: colors.harborBlue\n                  },\n                  children: \"\\uC804\\uCCB4 \\uB7AD\\uD0B9\"\n                }\n              ),\n              /* @__PURE__ */ jsx(\"div\", { className: \"divide-y divide-slate-200\", children: rest.map((student, index) => /* @__PURE__ */ jsxs(\n                \"div\",\n                {\n                  className: \"grid grid-cols-[64px_1fr_120px] sm:grid-cols-[80px_1fr_160px] items-center px-6 py-4\",\n                  children: [\n                    /* @__PURE__ */ jsxs(\"span\", { className: \"text-sm font-semibold text-slate-400\", children: [\n                      \"#\",\n                      index + 4\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"div\", { children: [\n                      /* @__PURE__ */ jsx(\"div\", { className: \"text-base font-medium\", children: student.student_name }),\n                      /* @__PURE__ */ jsxs(\"div\", { className: \"text-xs text-slate-500\", children: [\n                        \"\\uACE0\\uBE14\\uB9B0 \",\n                        student.goblin_points,\n                        \" \\xB7 \\uD018\\uC2A4\\uD2B8\",\n                        \" \",\n                        student.quest_points\n                      ] })\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"div\", { className: \"text-right text-lg font-semibold text-slate-900\", children: [\n                      student.total_points,\n                      \" P\"\n                    ] })\n                  ]\n                },\n                student.student_id\n              )) })\n            ] })\n          ] })\n        ] })\n      ] })\n    }\n  );\n}\n\nexport {\n  BootcampPointsDashboardView\n};\n","import {\n  BootcampPointsDashboardView\n} from \"./chunk-7STDMDMA.mjs\";\nimport {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\nimport {\n  __async,\n  __spreadProps,\n  __spreadValues\n} from \"./chunk-JWK35I2R.mjs\";\n\n// src/bootcamp/PointsDashboard.tsx\nimport React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction getCohortIdFromUrl() {\n  if (typeof window === \"undefined\") return null;\n  const params = new URLSearchParams(window.location.search);\n  const fromQuery = params.get(\"cohortId\");\n  if (fromQuery) return fromQuery;\n  const parts = window.location.pathname.split(\"/\").filter(Boolean);\n  return parts.length > 0 ? parts[parts.length - 1] : null;\n}\nfunction BootcampPointsDashboard() {\n  const [store] = useGlobalStore();\n  const { supabase } = store;\n  const [students, setStudents] = React.useState([]);\n  const [cohortName, setCohortName] = React.useState(\"\");\n  const [loading, setLoading] = React.useState(false);\n  const [error, setError] = React.useState(\"\");\n  const cohortId = React.useMemo(() => getCohortIdFromUrl(), []);\n  React.useEffect(() => {\n    if (!supabase) return;\n    if (!cohortId) {\n      setError(\"URL\\uC5D0 cohortId \\uD30C\\uB77C\\uBBF8\\uD130\\uAC00 \\uD544\\uC694\\uD569\\uB2C8\\uB2E4.\");\n      return;\n    }\n    let isMounted = true;\n    function fetchPoints() {\n      return __async(this, null, function* () {\n        setLoading(true);\n        setError(\"\");\n        const { data: cohortData, error: cohortError } = yield supabase.from(\"bootcamp_cohorts\").select(\"name\").eq(\"id\", cohortId).single();\n        if (cohortError) {\n          setCohortName(\"\");\n        } else {\n          setCohortName((cohortData == null ? void 0 : cohortData.name) || \"\");\n        }\n        const { data, error: fetchError } = yield supabase.from(\"bootcamp_student_points\").select(\n          \"student_id, student_name, goblin_points, quest_points\"\n        ).eq(\"cohort_id\", cohortId);\n        if (!isMounted) return;\n        if (fetchError) {\n          setError(\"\\uD3EC\\uC778\\uD2B8 \\uB370\\uC774\\uD130\\uB97C \\uBD88\\uB7EC\\uC624\\uC9C0 \\uBABB\\uD588\\uC2B5\\uB2C8\\uB2E4.\");\n          setStudents([]);\n          setLoading(false);\n          return;\n        }\n        const withTotals = (data || []).map(\n          (student) => __spreadProps(__spreadValues({}, student), {\n            total_points: student.goblin_points + student.quest_points\n          })\n        );\n        withTotals.sort((a, b) => b.total_points - a.total_points);\n        setStudents(withTotals);\n        setLoading(false);\n      });\n    }\n    fetchPoints();\n    return () => {\n      isMounted = false;\n    };\n  }, [supabase, cohortId]);\n  return /* @__PURE__ */ jsx(\n    BootcampPointsDashboardView,\n    {\n      cohortId,\n      cohortName,\n      loading,\n      error,\n      students\n    }\n  );\n}\n\nexport {\n  BootcampPointsDashboard\n};\n","import {\n  CourseCard\n} from \"./chunk-SDKSBXQ2.mjs\";\nimport {\n  isDev\n} from \"./chunk-SIZSNBFW.mjs\";\nimport {\n  courses\n} from \"./chunk-77OKAR3P.mjs\";\nimport {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\n\n// src/class/ClasList.tsx\nimport { jsx } from \"react/jsx-runtime\";\nfunction ClassList(props) {\n  const [store, setStore] = useGlobalStore();\n  const { user } = store;\n  if (!isDev) {\n    if (!user) return;\n  }\n  const myCourses = Object.keys((user == null ? void 0 : user.access) || {});\n  return /* @__PURE__ */ jsx(\"div\", { className: \"flex flex-col gap-8 justify-center md:flex-row\", children: myCourses.map((course, id) => {\n    const courseInfo = courses[course];\n    if (!courseInfo) return null;\n    return /* @__PURE__ */ jsx(\n      CourseCard,\n      {\n        smallTitle: \"\",\n        subTitle: courses[course].title,\n        content: \"\\uC218\\uAC15 \\uC911 \\uC785\\uB2C8\\uB2E4\",\n        link: courses[course].link,\n        style: { width: \"100%\" }\n      },\n      id\n    );\n  }) });\n}\n\nexport {\n  ClassList\n};\n","// src/class/Framer101-2.tsx\nimport { motion } from \"framer-motion\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction Framer101_2() {\n  return /* @__PURE__ */ jsxs(\"div\", { className: \"min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100\", children: [\n    /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 md:px-8 lg:px-16 bg-indigo-600 text-white text-center\", children: [\n      /* @__PURE__ */ jsx(\n        motion.h1,\n        {\n          initial: { opacity: 0, y: 50 },\n          animate: { opacity: 1, y: 0 },\n          transition: { duration: 0.8 },\n          className: \"text-5xl font-bold mb-4\",\n          children: \"Framer 101: Master Interactive Design\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        motion.p,\n        {\n          initial: { opacity: 0, y: 50 },\n          animate: { opacity: 1, y: 0 },\n          transition: { duration: 0.8, delay: 0.2 },\n          className: \"text-2xl mb-8\",\n          children: \"Transform your ideas into stunning, interactive prototypes and websites \\u2013 no coding required!\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        motion.button,\n        {\n          initial: { opacity: 0, y: 50 },\n          animate: { opacity: 1, y: 0 },\n          transition: { duration: 0.8, delay: 0.4 },\n          whileHover: { scale: 1.05 },\n          className: \"bg-white text-indigo-600 font-bold py-3 px-6 rounded-full text-lg hover:bg-indigo-100 transition\",\n          children: \"Enroll Now and Start Creating\"\n        }\n      )\n    ] }),\n    /* @__PURE__ */ jsxs(\"section\", { className: \"py-16 px-4 md:px-8 lg:px-16\", children: [\n      /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"Why Choose Our Framer Course?\" }),\n      /* @__PURE__ */ jsxs(\"div\", { className: \"grid md:grid-cols-3 gap-8\", children: [\n        /* @__PURE__ */ jsxs(\n          motion.div,\n          {\n            initial: { opacity: 0, y: 50 },\n            whileInView: { opacity: 1, y: 0 },\n            transition: { duration: 0.5 },\n            viewport: { once: true },\n            className: \"bg-white p-6 rounded-lg shadow-lg\",\n            children: [\n              /* @__PURE__ */ jsx(\"h3\", { className: \"text-2xl font-semibold mb-4\", children: \"Hands-On Learning\" }),\n              /* @__PURE__ */ jsx(\"p\", { children: \"Build real projects inspired by top courses like Harbor School's Framer 101 and Fastcampus Framer.\" })\n            ]\n          }\n        ),\n        /* @__PURE__ */ jsxs(\n          motion.div,\n          {\n            initial: { opacity: 0, y: 50 },\n            whileInView: { opacity: 1, y: 0 },\n            transition: { duration: 0.5, delay: 0.2 },\n            viewport: { once: true },\n            className: \"bg-white p-6 rounded-lg shadow-lg\",\n            children: [\n              /* @__PURE__ */ jsx(\"h3\", { className: \"text-2xl font-semibold mb-4\", children: \"Expert Instruction\" }),\n              /* @__PURE__ */ jsx(\"p\", { children: \"Learn from industry pros who've created amazing interactive experiences.\" })\n            ]\n          }\n        ),\n        /* @__PURE__ */ jsxs(\n          motion.div,\n          {\n            initial: { opacity: 0, y: 50 },\n            whileInView: { opacity: 1, y: 0 },\n            transition: { duration: 0.5, delay: 0.4 },\n            viewport: { once: true },\n            className: \"bg-white p-6 rounded-lg shadow-lg\",\n            children: [\n              /* @__PURE__ */ jsx(\"h3\", { className: \"text-2xl font-semibold mb-4\", children: \"Lifetime Access\" }),\n              /* @__PURE__ */ jsx(\"p\", { children: \"Get unlimited access to course materials and future updates.\" })\n            ]\n          }\n        )\n      ] })\n    ] }),\n    /* @__PURE__ */ jsxs(\"section\", { className: \"py-16 px-4 md:px-8 lg:px-16 bg-gray-100\", children: [\n      /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"What You'll Learn\" }),\n      /* @__PURE__ */ jsxs(\"ul\", { className: \"list-disc pl-8 max-w-3xl mx-auto text-lg\", children: [\n        /* @__PURE__ */ jsx(\n          motion.li,\n          {\n            initial: { opacity: 0, x: -50 },\n            whileInView: { opacity: 1, x: 0 },\n            transition: { duration: 0.5 },\n            viewport: { once: true },\n            children: \"Framer fundamentals and interface navigation\"\n          }\n        ),\n        /* @__PURE__ */ jsx(\n          motion.li,\n          {\n            initial: { opacity: 0, x: -50 },\n            whileInView: { opacity: 1, x: 0 },\n            transition: { duration: 0.5, delay: 0.1 },\n            viewport: { once: true },\n            children: \"Creating responsive layouts and components\"\n          }\n        ),\n        /* @__PURE__ */ jsx(\n          motion.li,\n          {\n            initial: { opacity: 0, x: -50 },\n            whileInView: { opacity: 1, x: 0 },\n            transition: { duration: 0.5, delay: 0.2 },\n            viewport: { once: true },\n            children: \"Advanced animations and interactions\"\n          }\n        ),\n        /* @__PURE__ */ jsx(\n          motion.li,\n          {\n            initial: { opacity: 0, x: -50 },\n            whileInView: { opacity: 1, x: 0 },\n            transition: { duration: 0.5, delay: 0.3 },\n            viewport: { once: true },\n            children: \"Integrating with CMS and data sources\"\n          }\n        ),\n        /* @__PURE__ */ jsx(\n          motion.li,\n          {\n            initial: { opacity: 0, x: -50 },\n            whileInView: { opacity: 1, x: 0 },\n            transition: { duration: 0.5, delay: 0.4 },\n            viewport: { once: true },\n            children: \"Publishing and optimizing your projects\"\n          }\n        )\n      ] })\n    ] }),\n    /* @__PURE__ */ jsxs(\"section\", { className: \"py-16 px-4 md:px-8 lg:px-16\", children: [\n      /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"What Our Students Say\" }),\n      /* @__PURE__ */ jsxs(\"div\", { className: \"grid md:grid-cols-2 gap-8\", children: [\n        /* @__PURE__ */ jsxs(\n          motion.div,\n          {\n            initial: { opacity: 0, scale: 0.9 },\n            whileInView: { opacity: 1, scale: 1 },\n            transition: { duration: 0.5 },\n            viewport: { once: true },\n            className: \"bg-white p-6 rounded-lg shadow-lg\",\n            children: [\n              /* @__PURE__ */ jsx(\"p\", { className: \"italic mb-4\", children: '\"This course transformed how I approach design. Absolutely essential!\"' }),\n              /* @__PURE__ */ jsx(\"p\", { className: \"font-semibold\", children: \"- Alex D., UI Designer\" })\n            ]\n          }\n        ),\n        /* @__PURE__ */ jsxs(\n          motion.div,\n          {\n            initial: { opacity: 0, scale: 0.9 },\n            whileInView: { opacity: 1, scale: 1 },\n            transition: { duration: 0.5, delay: 0.2 },\n            viewport: { once: true },\n            className: \"bg-white p-6 rounded-lg shadow-lg\",\n            children: [\n              /* @__PURE__ */ jsx(\"p\", { className: \"italic mb-4\", children: '\"From beginner to pro in weeks. The projects are game-changers.\"' }),\n              /* @__PURE__ */ jsx(\"p\", { className: \"font-semibold\", children: \"- Sarah K., Product Manager\" })\n            ]\n          }\n        )\n      ] })\n    ] }),\n    /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 md:px-8 lg:px-16 bg-indigo-600 text-white text-center\", children: [\n      /* @__PURE__ */ jsx(\n        motion.h2,\n        {\n          initial: { opacity: 0, y: 50 },\n          whileInView: { opacity: 1, y: 0 },\n          transition: { duration: 0.8 },\n          viewport: { once: true },\n          className: \"text-4xl font-bold mb-4\",\n          children: \"Ready to Revolutionize Your Design Skills?\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        motion.p,\n        {\n          initial: { opacity: 0, y: 50 },\n          whileInView: { opacity: 1, y: 0 },\n          transition: { duration: 0.8, delay: 0.2 },\n          viewport: { once: true },\n          className: \"text-xl mb-8\",\n          children: \"Join thousands of designers who've elevated their craft with Framer.\"\n        }\n      ),\n      /* @__PURE__ */ jsx(\n        motion.button,\n        {\n          initial: { opacity: 0, y: 50 },\n          whileInView: { opacity: 1, y: 0 },\n          transition: { duration: 0.8, delay: 0.4 },\n          whileHover: { scale: 1.05 },\n          viewport: { once: true },\n          className: \"bg-white text-indigo-600 font-bold py-3 px-6 rounded-full text-lg hover:bg-indigo-100 transition\",\n          children: \"Buy Now - Limited Time Offer!\"\n        }\n      )\n    ] })\n  ] });\n}\n\nexport {\n  Framer101_2\n};\n","// src/class/Framer101-3.tsx\nimport { useState, useEffect } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar colors = {\n  harborBlue: \"#005DFA\",\n  white: \"#FEFDFA\",\n  harborPink: \"#FCEBEF\",\n  textDark: \"#1a202c\",\n  textMedium: \"#4a5568\",\n  textLight: \"#718096\"\n};\nvar CheckIcon = ({ className }) => /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    className,\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    fill: \"currentColor\",\n    children: /* @__PURE__ */ jsx(\n      \"path\",\n      {\n        fillRule: \"evenodd\",\n        d: \"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12zm13.36-1.814a.75.75 0 10-1.22-.872l-3.236 4.53L9.53 12.22a.75.75 0 00-1.06 1.06l2.25 2.25a.75.75 0 001.14-.094l3.75-5.25z\",\n        clipRule: \"evenodd\"\n      }\n    )\n  }\n);\nvar StarIcon = ({ className }) => /* @__PURE__ */ jsx(\n  \"svg\",\n  {\n    className,\n    xmlns: \"http://www.w3.org/2000/svg\",\n    viewBox: \"0 0 24 24\",\n    fill: \"currentColor\",\n    children: /* @__PURE__ */ jsx(\n      \"path\",\n      {\n        fillRule: \"evenodd\",\n        d: \"M10.788 3.21c.448-1.077 1.976-1.077 2.424 0l2.082 5.007 5.404.433c1.164.093 1.636 1.545.749 2.305l-4.117 3.527 1.257 5.273c.271 1.136-.964 2.033-1.96 1.425L12 18.354 7.373 21.18c-.996.608-2.231-.29-1.96-1.425l1.257-5.273-4.117-3.527c-.887-.76-.415-2.212.749-2.305l5.404-.433 2.082-5.007z\",\n        clipRule: \"evenodd\"\n      }\n    )\n  }\n);\nfunction Framer101_3() {\n  const features = [\n    \"\\uD504\\uB808\\uC774\\uBA38\\uC758 \\uBAA8\\uB4E0 \\uAE30\\uB2A5, \\uAE30\\uCD08\\uBD80\\uD130 \\uC2E4\\uBB34\\uAE4C\\uC9C0\",\n    \"Apple.com \\uC2A4\\uD0C0\\uC77C\\uC758 \\uACE0\\uAE09 \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158\",\n    \"\\uC2E4\\uC81C \\uCD9C\\uC2DC \\uAC00\\uB2A5\\uD55C \\uBC18\\uC751\\uD615 \\uC6F9 \\uD504\\uB85C\\uC81D\\uD2B8 \\uC81C\\uC791\",\n    \"\\uB514\\uC790\\uC778\\uB9CC\\uC73C\\uB85C \\uB05D\\uB0B4\\uC9C0 \\uC54A\\uB294, \\uCF54\\uB4DC \\uCEF4\\uD3EC\\uB10C\\uD2B8 \\uD65C\\uC6A9\\uBC95\",\n    \"Framer CMS\\uB97C \\uD65C\\uC6A9\\uD55C \\uB370\\uC774\\uD130 \\uC5F0\\uB3D9 \\uB9C8\\uC2A4\\uD130\",\n    \"AI\\uB97C \\uD65C\\uC6A9\\uD55C \\uC6F9\\uB514\\uC790\\uC778 \\uBC0F \\uCF54\\uB4DC \\uC0DD\\uC131 \\uC790\\uB3D9\\uD654\"\n  ];\n  const audience = [\n    {\n      title: \"\\uC6F9 \\uB514\\uC790\\uC778\\uC744 \\uCF54\\uB529 \\uB54C\\uBB38\\uC5D0 \\uD3EC\\uAE30\\uD588\\uB358 \\uB514\\uC790\\uC774\\uB108\",\n      description: \"\\uC774\\uC81C \\uAC1C\\uBC1C\\uC790\\uC5D0\\uAC8C \\uC544\\uC26C\\uC6B4 \\uC18C\\uB9AC \\uD558\\uC9C0 \\uB9C8\\uC138\\uC694. \\uB2F9\\uC2E0\\uC774 \\uC0C1\\uC0C1\\uD55C \\uB514\\uC790\\uC778, 100% \\uADF8\\uB300\\uB85C \\uAD6C\\uD604\\uB418\\uB294 \\uC644\\uBCBD\\uD55C \\uBC18\\uC751\\uD615 \\uC6F9\\uC0AC\\uC774\\uD2B8\\uB97C \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      title: \"\\uC678\\uC8FC \\uBE44\\uC6A9\\uC774 \\uBD80\\uB2F4\\uB418\\uB294 1\\uC778 \\uC0AC\\uC5C5\\uAC00, \\uC2A4\\uD0C0\\uD2B8\\uC5C5\",\n      description: \"\\uB79C\\uB529\\uD398\\uC774\\uC9C0 \\uD558\\uB098\\uC5D0 \\uC218\\uBC31\\uB9CC \\uC6D0... \\uC774\\uC81C \\uC9C1\\uC811 \\uB9CC\\uB4E4\\uACE0 5\\uBD84 \\uB9CC\\uC5D0 \\uC218\\uC815\\uD558\\uC138\\uC694. \\uC544\\uB080 \\uC678\\uC8FC\\uBE44\\uB85C \\uBE44\\uC988\\uB2C8\\uC2A4\\uC758 \\uC131\\uACF5 \\uD655\\uB960\\uC744 \\uB192\\uC77C \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      title: \"Framer\\uB85C \\uD558\\uC774\\uC5D4\\uB4DC \\uD504\\uB85C\\uC81D\\uD2B8\\uB97C \\uAFC8\\uAFB8\\uB294 \\uC804\\uBB38\\uAC00\",\n      description: \"\\uB2E8\\uC21C \\uD398\\uC774\\uC9C0 \\uC81C\\uC791\\uC744 \\uB118\\uC5B4, \\uACE0\\uAC1D\\uC744 \\uAC10\\uB3D9\\uC2DC\\uD0A4\\uB294 \\uD558\\uC774\\uC5D4\\uB4DC \\uC778\\uD130\\uB799\\uC158\\uC73C\\uB85C \\uB2F9\\uC2E0\\uC758 \\uC11C\\uBE44\\uC2A4 \\uB2E8\\uAC00\\uB97C 2\\uBC30 \\uC774\\uC0C1 \\uB04C\\uC5B4\\uC62C\\uB9AC\\uC138\\uC694. \\uB300\\uCCB4 \\uBD88\\uAC00\\uB2A5\\uD55C \\uC804\\uBB38\\uAC00\\uAC00 \\uB418\\uC2ED\\uC2DC\\uC624.\"\n    }\n  ];\n  const reviews = [\n    {\n      name: \"\\uAE40\\uC9C0\\uC218\",\n      role: \"UX/UI \\uB514\\uC790\\uC774\\uB108\",\n      text: \"\\uC774 \\uAC15\\uC758 \\uC5C6\\uC5C8\\uC73C\\uBA74 \\uC5B4\\uCA54 \\uBED4 \\uD588\\uB098\\uC694. \\uAC1C\\uBC1C\\uC790\\uC640\\uC758 \\uC18C\\uD1B5 \\uBE44\\uC6A9\\uC774 1/10\\uB85C \\uC904\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uC81C\\uAC00 \\uC9C1\\uC811 \\uB9CC\\uB4DC\\uB294 \\uAC8C \\uD6E8\\uC52C \\uBE60\\uB974\\uACE0 \\uD004\\uB9AC\\uD2F0\\uB3C4 \\uB192\\uC544\\uC694.\"\n    },\n    {\n      name: \"\\uBC15\\uB300\\uD45C\",\n      role: \"\\uC2A4\\uD0C0\\uD2B8\\uC5C5 \\uB300\\uD45C\",\n      text: \"\\uC678\\uC8FC \\uB9E1\\uAE38 \\uB3C8\\uC73C\\uB85C \\uB9C8\\uCF00\\uD305\\uC5D0 \\uB354 \\uC9D1\\uC911\\uD560 \\uC218 \\uC788\\uAC8C \\uB410\\uC2B5\\uB2C8\\uB2E4. MVP \\uC81C\\uC791\\uACFC \\uD14C\\uC2A4\\uD2B8\\uAC00 \\uC815\\uB9D0 \\uBE68\\uB77C\\uC84C\\uACE0, \\uD22C\\uC790 \\uC720\\uCE58\\uC5D0\\uB3C4 \\uD070 \\uB3C4\\uC6C0\\uC774 \\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      name: \"\\uD504\\uB9AC\\uB79C\\uC11C \\uBC15\",\n      role: \"Framer \\uC804\\uBB38\\uAC00\",\n      text: \"\\uC194\\uC9C1\\uD788 \\uC800\\uB9CC \\uC54C\\uACE0 \\uC2F6\\uC740 \\uAC15\\uC758\\uC785\\uB2C8\\uB2E4. \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158 \\uD30C\\uD2B8\\uB294 \\uC815\\uB9D0... \\uC608\\uC220\\uC785\\uB2C8\\uB2E4. \\uD504\\uB85C\\uC81D\\uD2B8 \\uB2E8\\uAC00\\uAC00 \\uB2EC\\uB77C\\uC84C\\uC5B4\\uC694.\"\n    }\n  ];\n  const curriculum = [\n    {\n      module: \"Week 1: Welcome to Framer\",\n      title: \"Framer \\uC2DC\\uC791\\uD558\\uAE30: \\uAE30\\uBCF8\\uAE30 \\uC644\\uC804 \\uC815\\uBCF5\",\n      description: \"Framer\\uC758 \\uC778\\uD130\\uD398\\uC774\\uC2A4\\uBD80\\uD130 \\uC2DC\\uC791\\uD574, \\uB514\\uC790\\uC778\\uC758 \\uAE30\\uBCF8 \\uC694\\uC18C\\uB4E4\\uC744 \\uC775\\uD788\\uACE0, \\uC65C Framer\\uAC00 \\uD604\\uC874 \\uCD5C\\uACE0\\uC758 \\uC6F9 \\uB514\\uC790\\uC778 \\uD234\\uC778\\uC9C0 \\uC9C1\\uC811 \\uACBD\\uD5D8\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"3.5\\uC2DC\\uAC04\",\n      outcome: \"Framer\\uC758 \\uAE30\\uBCF8 \\uC870\\uC791\\uBC95\\uC744 \\uC644\\uC804\\uD788 \\uC775\\uD788\\uACE0, \\uAC04\\uB2E8\\uD55C \\uB514\\uC790\\uC778 \\uCEF4\\uD3EC\\uB10C\\uD2B8\\uB97C \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Framer\\uB780 \\uBB34\\uC5C7\\uC778\\uAC00? (\\uCCA0\\uD559 & \\uBE44\\uC804)\",\n        \"\\uC778\\uD130\\uD398\\uC774\\uC2A4 \\uC644\\uBCBD \\uAC00\\uC774\\uB4DC: \\uD55C \\uBC88\\uC5D0 \\uB05D\\uB0B4\\uAE30\",\n        \"\\uAE30\\uBCF8 \\uB3C4\\uD615\\uACFC \\uD504\\uB808\\uC784 \\uB2E4\\uB8E8\\uAE30\",\n        \"\\uB808\\uC774\\uC544\\uC6C3\\uC758 \\uD575\\uC2EC: \\uC2A4\\uD0DD\\uACFC \\uADF8\\uB9AC\\uB4DC\",\n        \"[\\uC2E4\\uC2B5] \\uAC04\\uB2E8\\uD55C \\uD504\\uB85C\\uD544 \\uCE74\\uB4DC \\uB9CC\\uB4E4\\uAE30\"\n      ]\n    },\n    {\n      module: \"Week 2: Interactive Design\",\n      title: \"\\uC0B4\\uC544 \\uC6C0\\uC9C1\\uC774\\uB294 \\uB514\\uC790\\uC778: \\uC778\\uD130\\uB799\\uC158 \\uAE30\\uCD08\",\n      description: \"\\uB2E8\\uC21C\\uD55C \\uC774\\uBBF8\\uC9C0\\uB97C \\uB118\\uC5B4 \\uC0AC\\uC6A9\\uC790\\uC640 \\uC0C1\\uD638\\uC791\\uC6A9\\uD558\\uB294 \\uB514\\uC790\\uC778\\uC744 \\uB9CC\\uB4ED\\uB2C8\\uB2E4. \\uD074\\uB9AD, \\uD638\\uBC84, \\uB4DC\\uB798\\uADF8 \\uB4F1 \\uD544\\uC218 \\uC778\\uD130\\uB799\\uC158\\uC744 \\uB9C8\\uC2A4\\uD130\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"4\\uC2DC\\uAC04\",\n      outcome: \"\\uC7AC\\uC0AC\\uC6A9 \\uAC00\\uB2A5\\uD55C \\uCEF4\\uD3EC\\uB10C\\uD2B8\\uB97C \\uB9CC\\uB4E4\\uACE0, \\uB2E4\\uC591\\uD55C \\uC0C1\\uD0DC\\uC5D0 \\uB530\\uB978 \\uC778\\uD130\\uB799\\uC158\\uC744 \\uAD6C\\uD604\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Effects: \\uADF8\\uB9BC\\uC790, \\uBE14\\uB7EC \\uB4F1 \\uB514\\uC790\\uC778\\uC5D0 \\uAE4A\\uC774 \\uB354\\uD558\\uAE30\",\n        \"Components: \\uC7AC\\uC0AC\\uC6A9 \\uAC00\\uB2A5\\uD55C \\uB514\\uC790\\uC778 \\uC2DC\\uC2A4\\uD15C \\uB9CC\\uB4E4\\uAE30\",\n        \"Variants: \\uCEF4\\uD3EC\\uB10C\\uD2B8 \\uC0C1\\uD0DC \\uAD00\\uB9AC\\uC758 \\uBAA8\\uB4E0 \\uAC83\",\n        \"\\uAE30\\uBCF8 \\uC778\\uD130\\uB799\\uC158: \\uD074\\uB9AD, \\uD638\\uBC84, \\uB51C\\uB808\\uC774\",\n        \"[\\uC2E4\\uC2B5] \\uC778\\uD130\\uB799\\uD2F0\\uBE0C \\uBC84\\uD2BC \\uBC0F \\uCE74\\uB4DC UI \\uC81C\\uC791\"\n      ]\n    },\n    {\n      module: \"Week 3: Advanced Animations\",\n      title: \"\\uC2DC\\uC120\\uC744 \\uC0AC\\uB85C\\uC7A1\\uB294 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\",\n      description: \"\\uD398\\uC774\\uC9C0 \\uC2A4\\uD06C\\uB864, \\uC694\\uC18C\\uC758 \\uB4F1\\uC7A5\\uACFC \\uC0AC\\uB77C\\uC9D0 \\uB4F1 \\uC815\\uAD50\\uD55C \\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC744 \\uAD6C\\uD604\\uD558\\uC5EC \\uC0AC\\uC6A9\\uC790 \\uACBD\\uD5D8\\uC744 \\uADF9\\uB300\\uD654\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"5\\uC2DC\\uAC04\",\n      outcome: \"\\uC2A4\\uD06C\\uB864\\uACFC \\uC5F0\\uB3D9\\uB418\\uB294 \\uBCF5\\uD569\\uC801\\uC778 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC744 \\uC790\\uC720\\uC790\\uC7AC\\uB85C \\uAD6C\\uD604\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"\\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC758 \\uC6D0\\uB9AC: Timing, Easing, Spring\",\n        \"Scroll Section & Scroll Variants\",\n        \"Stagger: \\uC21C\\uCC28\\uC801\\uC778 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\\uC758 \\uBBF8\\uD559\",\n        \"Code Overrides\\uC758 \\uAE30\\uCD08: \\uC560\\uB2C8\\uBA54\\uC774\\uC158 \\uC81C\\uC5B4\\uD558\\uAE30\",\n        \"[\\uC2E4\\uC2B5] \\uC2A4\\uD06C\\uB864\\uC5D0 \\uBC18\\uC751\\uD558\\uB294 \\uD5E4\\uB354 \\uC81C\\uC791\"\n      ]\n    },\n    {\n      module: \"Week 4: The Apple Way\",\n      title: \"\\uC560\\uD50C \\uC2A4\\uD0C0\\uC77C \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158 \\uC815\\uBCF5\",\n      description: \"\\uBAA8\\uB450\\uAC00 \\uAC10\\uD0C4\\uD558\\uB294 \\uC560\\uD50C \\uC6F9\\uC0AC\\uC774\\uD2B8\\uC758 \\uC2A4\\uD06C\\uB864 \\uC778\\uD130\\uB799\\uC158. \\uADF8 \\uC6D0\\uB9AC\\uB97C \\uD30C\\uD5E4\\uCE58\\uACE0, \\uC6B0\\uB9AC \\uC190\\uC73C\\uB85C \\uC9C1\\uC811 \\uAD6C\\uD604\\uD574\\uBD05\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"6.5\\uC2DC\\uAC04\",\n      outcome: \"\\uB204\\uAD6C\\uB098 \\uAC10\\uD0C4\\uD560 \\uB9CC\\uD55C \\uD558\\uC774\\uC5D4\\uB4DC \\uC6F9\\uC0AC\\uC774\\uD2B8\\uC758 \\uD575\\uC2EC \\uC778\\uD130\\uB799\\uC158\\uC744 \\uC9C1\\uC811 \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Sticky \\uC2A4\\uD06C\\uB864\\uC758 \\uC6D0\\uB9AC\\uC640 \\uD65C\\uC6A9\",\n        \"3D Transform\\uC744 \\uC774\\uC6A9\\uD55C \\uC785\\uCCB4\\uC801 \\uD6A8\\uACFC\",\n        \"\\uB3D9\\uC601\\uC0C1\\uACFC \\uC2A4\\uD06C\\uB864 \\uC5F0\\uB3D9\\uD558\\uAE30\",\n        \"\\uC2A4\\uD06C\\uB864 \\uC9C4\\uD589\\uB3C4\\uC5D0 \\uB530\\uB978 \\uBCF5\\uD569 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\",\n        \"[\\uC2E4\\uC2B5] \\uC560\\uD50C \\uC5D0\\uC5B4\\uD31F \\uD504\\uB85C \\uC2A4\\uD0C0\\uC77C \\uD398\\uC774\\uC9C0 \\uD074\\uB860\"\n      ]\n    },\n    {\n      module: \"Week 5: Real-World Project\",\n      title: \"\\uC2E4\\uC804! \\uBC18\\uC751\\uD615 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC0AC\\uC774\\uD2B8 \\uC81C\\uC791\",\n      description: \"\\uC9C0\\uAE08\\uAE4C\\uC9C0 \\uBC30\\uC6B4 \\uBAA8\\uB4E0 \\uAE30\\uC220\\uC744 \\uCD1D\\uB3D9\\uC6D0\\uD558\\uC5EC, \\uB370\\uC2A4\\uD06C\\uD0D1\\uBD80\\uD130 \\uBAA8\\uBC14\\uC77C\\uAE4C\\uC9C0 \\uC644\\uBCBD\\uD558\\uAC8C \\uB300\\uC751\\uD558\\uB294 \\uB098\\uB9CC\\uC758 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC0AC\\uC774\\uD2B8\\uB97C \\uB9CC\\uB4ED\\uB2C8\\uB2E4.\",\n      lessonsCount: 5,\n      duration: \"8\\uC2DC\\uAC04\",\n      outcome: \"\\uAE30\\uD68D\\uBD80\\uD130 \\uBC30\\uD3EC\\uAE4C\\uC9C0, \\uC6F9 \\uD504\\uB85C\\uC81D\\uD2B8 \\uC804\\uCCB4 \\uC0AC\\uC774\\uD074\\uC744 \\uACBD\\uD5D8\\uD558\\uACE0 \\uB098\\uB9CC\\uC758 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624\\uB97C \\uC644\\uC131\\uD569\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"\\uD504\\uB85C\\uC81D\\uD2B8 \\uAE30\\uD68D \\uBC0F \\uB514\\uC790\\uC778 \\uC2DC\\uC2A4\\uD15C \\uAD6C\\uCD95\",\n        \"CMS\\uB97C \\uD65C\\uC6A9\\uD55C \\uCF58\\uD150\\uCE20 \\uAD00\\uB9AC\",\n        \"\\uB370\\uC2A4\\uD06C\\uD0D1, \\uD0DC\\uBE14\\uB9BF, \\uBAA8\\uBC14\\uC77C \\uBC18\\uC751\\uD615 \\uB514\\uC790\\uC778\",\n        \"\\uC2E4\\uC81C \\uB3C4\\uBA54\\uC778 \\uC5F0\\uACB0 \\uBC0F \\uC0AC\\uC774\\uD2B8 \\uBC30\\uD3EC\",\n        \"[\\uC2E4\\uC804] \\uB098\\uB9CC\\uC758 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC6F9\\uC0AC\\uC774\\uD2B8 \\uC644\\uC131\"\n      ]\n    },\n    {\n      module: \"Week 6: From Skill to Profit\",\n      title: \"Framer\\uB85C \\uB3C8 \\uBC8C\\uAE30: \\uC678\\uC8FC\\uBD80\\uD130 \\uCC3D\\uC5C5\\uAE4C\\uC9C0\",\n      description: \"\\uC0C8\\uB85C\\uC6B4 \\uC2A4\\uD0AC\\uC744 \\uC2E4\\uC81C \\uC218\\uC775\\uC73C\\uB85C \\uC5F0\\uACB0\\uD558\\uB294 \\uBC29\\uBC95\\uC744 \\uBC30\\uC6C1\\uB2C8\\uB2E4. \\uC678\\uC8FC \\uD504\\uB85C\\uC81D\\uD2B8 \\uC218\\uC8FC \\uB178\\uD558\\uC6B0, \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC804\\uB7B5, \\uCC3D\\uC5C5 \\uC544\\uC774\\uB514\\uC5B4\\uAE4C\\uC9C0 \\uBAA8\\uB450 \\uACF5\\uAC1C\\uD569\\uB2C8\\uB2E4.\",\n      lessonsCount: 7,\n      duration: \"5\\uC2DC\\uAC04\",\n      outcome: \"\\uC2B5\\uB4DD\\uD55C Framer \\uC2A4\\uD0AC\\uC744 \\uD1B5\\uD574 \\uC2E4\\uC81C \\uC218\\uC775\\uC744 \\uCC3D\\uCD9C\\uD558\\uB294 \\uAD6C\\uCCB4\\uC801\\uC778 \\uBC29\\uBC95\\uC744 \\uC54C\\uAC8C \\uB429\\uB2C8\\uB2E4.\",\n      lessons: [\n        \"Framer \\uC804\\uBB38\\uAC00\\uB85C \\uD3EC\\uC9C0\\uC154\\uB2DD\\uD558\\uAE30\",\n        \"\\uCCAB \\uC678\\uC8FC, 100\\uB9CC\\uC6D0\\uBD80\\uD130 \\uC2DC\\uC791\\uD558\\uB294 \\uBC95\",\n        \"\\uD074\\uB77C\\uC774\\uC5B8\\uD2B8\\uB97C \\uC124\\uB4DD\\uD558\\uB294 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uC804\\uB7B5\",\n        \"\\uACAC\\uC801\\uBD80\\uD130 \\uACC4\\uC57D\\uAE4C\\uC9C0: \\uC2E4\\uD328 \\uC5C6\\uB294 \\uD504\\uB85C\\uC81D\\uD2B8 \\uAD00\\uB9AC\",\n        \"Framer\\uB85C \\uAC00\\uB2A5\\uD55C 1\\uC778 \\uCC3D\\uC5C5 \\uC544\\uC774\\uD15C\\uB4E4\",\n        \"AI\\uB97C \\uD65C\\uC6A9\\uD55C \\uC0DD\\uC0B0\\uC131 10\\uBC30 \\uB192\\uC774\\uAE30\",\n        \"[\\uD2B9\\uAC15] \\uC6D4 1,000\\uB9CC\\uC6D0 \\uBC84\\uB294 \\uB514\\uC790\\uC774\\uB108\\uC758 \\uC2DC\\uAC04 \\uAD00\\uB9AC\\uBC95\"\n      ]\n    }\n  ];\n  const faqs = [\n    {\n      question: \"\\uCF54\\uB529\\uC744 \\uC804\\uD600 \\uBAA8\\uB974\\uB294\\uB370, \\uC815\\uB9D0 \\uAD1C\\uCC2E\\uC744\\uAE4C\\uC694?\",\n      answer: \"\\uB124, \\uADF8\\uB7FC\\uC694! \\uC774 \\uAC15\\uC758\\uB294 \\uCF54\\uB529 \\uACBD\\uD5D8\\uC774 \\uC804\\uBB34\\uD55C \\uBD84\\uB4E4\\uC744 \\uC704\\uD574 \\uC124\\uACC4\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4. Framer\\uC758 \\uAC15\\uB825\\uD55C \\uB178\\uCF54\\uB4DC \\uAE30\\uB2A5\\uC744 \\uD65C\\uC6A9\\uD558\\uC5EC \\uCF54\\uB529 \\uC5C6\\uC774\\uB3C4 100% \\uC0C1\\uC0C1\\uD558\\uB358 \\uC6F9\\uC0AC\\uC774\\uD2B8\\uB97C \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uCF54\\uB529\\uC740 \\uC120\\uD0DD \\uC0AC\\uD56D\\uC77C \\uBFD0\\uC774\\uBA70, \\uAC15\\uC758 \\uD6C4\\uBC18\\uBD80\\uC758 \\uCF54\\uB4DC \\uCEF4\\uD3EC\\uB10C\\uD2B8 \\uD30C\\uD2B8\\uB3C4 \\uBCF5\\uC0AC/\\uBD99\\uC5EC\\uB123\\uAE30\\uB9CC\\uC73C\\uB85C \\uB530\\uB77C\\uC62C \\uC218 \\uC788\\uB3C4\\uB85D \\uAD6C\\uC131\\uD588\\uC2B5\\uB2C8\\uB2E4.\"\n    },\n    {\n      question: \"\\uAC15\\uC758\\uB97C \\uB4E3\\uAE30 \\uC704\\uD574 \\uBB34\\uC5C7\\uC744 \\uC900\\uBE44\\uD574\\uC57C \\uD558\\uB098\\uC694?\",\n      answer: \"Framer \\uACC4\\uC815\\uACFC \\uC778\\uD130\\uB137\\uC774 \\uC5F0\\uACB0\\uB41C \\uCEF4\\uD4E8\\uD130\\uB9CC \\uC788\\uC73C\\uBA74 \\uB429\\uB2C8\\uB2E4! Framer\\uB294 \\uBB34\\uB8CC \\uD50C\\uB79C\\uC73C\\uB85C\\uB3C4 \\uAC15\\uC758\\uC758 95% \\uC774\\uC0C1\\uC744 \\uC218\\uAC15\\uD558\\uB294 \\uB370 \\uC804\\uD600 \\uBB38\\uC81C\\uAC00 \\uC5C6\\uC2B5\\uB2C8\\uB2E4. \\uCD94\\uAC00\\uB85C \\uC720\\uB8CC \\uD50C\\uB79C\\uC774 \\uD544\\uC694\\uD55C \\uBD80\\uBD84\\uC740 \\uAC15\\uC758\\uC5D0\\uC11C \\uBCC4\\uB3C4\\uB85C \\uC548\\uB0B4\\uD574 \\uB4DC\\uB9BD\\uB2C8\\uB2E4.\"\n    },\n    {\n      question: \"\\uAC15\\uC758 \\uC218\\uAC15 \\uAE30\\uAC04\\uC5D0 \\uC81C\\uD55C\\uC774 \\uC788\\uB098\\uC694?\",\n      answer: \"\\uC544\\uB2C8\\uC694! \\uD55C\\uBC88 \\uAD6C\\uB9E4\\uD558\\uC2DC\\uBA74 \\uBAA8\\uB4E0 \\uAC15\\uC758 \\uC601\\uC0C1\\uACFC \\uC790\\uB8CC\\uB294 \\uD3C9\\uC0DD \\uC18C\\uC7A5\\uC774 \\uAC00\\uB2A5\\uD569\\uB2C8\\uB2E4. \\uC5B8\\uC81C \\uC5B4\\uB514\\uC11C\\uB4E0 \\uD3B8\\uD558\\uAC8C \\uBC18\\uBCF5 \\uD559\\uC2B5\\uD558\\uC138\\uC694.\"\n    },\n    {\n      question: \"\\uAC15\\uC758\\uB97C \\uB4E3\\uB2E4\\uAC00 \\uBAA8\\uB974\\uB294 \\uC810\\uC774 \\uC0DD\\uAE30\\uBA74 \\uC5B4\\uB5BB\\uAC8C \\uD558\\uC8E0?\",\n      answer: \"\\uC218\\uAC15\\uC0DD \\uC804\\uC6A9 \\uC2AC\\uB799 \\uCEE4\\uBBA4\\uB2C8\\uD2F0\\uB97C \\uD1B5\\uD574 \\uC9C8\\uBB38\\uC744 \\uB0A8\\uACA8\\uC8FC\\uC2DC\\uBA74, \\uAC15\\uC0AC\\uB2D8\\uACFC \\uB2E4\\uB978 \\uC218\\uAC15\\uC0DD\\uB4E4\\uC774 \\uB2F5\\uBCC0\\uC744 \\uB2EC\\uC544\\uB4DC\\uB9BD\\uB2C8\\uB2E4. \\uD568\\uAED8 \\uBC30\\uC6B0\\uACE0 \\uC131\\uC7A5\\uD558\\uB294 \\uCEE4\\uBBA4\\uB2C8\\uD2F0\\uC5D0 \\uCC38\\uC5EC\\uD558\\uC138\\uC694!\"\n    }\n  ];\n  const CountdownTimer = ({ targetDate }) => {\n    const calculateTimeLeft = () => {\n      const difference = +new Date(targetDate) - +/* @__PURE__ */ new Date();\n      let timeLeft2 = {};\n      if (difference > 0) {\n        timeLeft2 = {\n          \\uC77C: Math.floor(difference / (1e3 * 60 * 60 * 24)),\n          \\uC2DC\\uAC04: Math.floor(difference / (1e3 * 60 * 60) % 24),\n          \\uBD84: Math.floor(difference / 1e3 / 60 % 60),\n          \\uCD08: Math.floor(difference / 1e3 % 60)\n        };\n      }\n      return timeLeft2;\n    };\n    const [timeLeft, setTimeLeft] = useState(calculateTimeLeft());\n    useEffect(() => {\n      const timer = setTimeout(() => {\n        setTimeLeft(calculateTimeLeft());\n      }, 1e3);\n      return () => clearTimeout(timer);\n    });\n    const timerComponents = [];\n    Object.keys(timeLeft).forEach((interval) => {\n      if (!timeLeft[interval] && Object.keys(timeLeft).length > 1) {\n        return;\n      }\n      timerComponents.push(\n        /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-baseline\", children: [\n          /* @__PURE__ */ jsx(\"span\", { className: \"text-2xl md:text-4xl font-bold\", children: String(timeLeft[interval]).padStart(\n            2,\n            \"0\"\n          ) }),\n          /* @__PURE__ */ jsx(\"span\", { className: \"text-sm ml-1\", children: interval })\n        ] }, interval)\n      );\n    });\n    return /* @__PURE__ */ jsx(\"div\", { className: \"flex justify-center space-x-4\", children: timerComponents.length ? timerComponents : /* @__PURE__ */ jsx(\"span\", { children: \"Time's up!\" }) });\n  };\n  return /* @__PURE__ */ jsxs(\n    \"div\",\n    {\n      style: { backgroundColor: colors.white, color: colors.textDark },\n      className: \"font-sans\",\n      children: [\n        /* @__PURE__ */ jsxs(\"header\", { className: \"text-center py-20 px-4\", children: [\n          /* @__PURE__ */ jsxs(\"h1\", { className: \"text-5xl md:text-7xl font-bold leading-tight mb-4\", children: [\n            /* @__PURE__ */ jsx(\"span\", { className: \"block\", children: \"\\uCF54\\uB4DC\\uC758 \\uC7A5\\uBCBD\\uC744 \\uB118\\uC5B4,\" }),\n            /* @__PURE__ */ jsx(\"span\", { style: { color: colors.harborBlue }, className: \"block\", children: \"\\uB514\\uC790\\uC778\\uC758 \\uC644\\uC804\\uD55C \\uC790\\uC720\\uB97C \\uACBD\\uD5D8\\uD558\\uC138\\uC694\" })\n          ] }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              style: { color: colors.textMedium },\n              className: \"max-w-2xl mx-auto text-lg md:text-xl mb-8\",\n              children: [\n                \"\\uB2F9\\uC2E0\\uC758 \\uC815\\uAD50\\uD55C \\uB514\\uC790\\uC778\\uC774 \\uAC1C\\uBC1C \\uACFC\\uC815\\uC5D0\\uC11C \\uAE38\\uC744 \\uC783\\uC9C0 \\uC54A\\uB3C4\\uB85D.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"Framer\\uB294 \\uC0C1\\uC0C1\\uC744 \\uD604\\uC2E4\\uB85C \\uB9CC\\uB4DC\\uB294 \\uAC00\\uC7A5 \\uBE60\\uB978 \\uAE38\\uC744 \\uC81C\\uC548\\uD569\\uB2C8\\uB2E4.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\n            \"div\",\n            {\n              style: { backgroundColor: colors.harborPink },\n              className: \"text-center py-4 px-6 rounded-lg max-w-lg mx-auto mb-8\",\n              children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"font-bold text-lg\", style: { color: colors.harborBlue }, children: \"\\uC0C8\\uB85C\\uC6B4 \\uC2DC\\uB300\\uC758 \\uB514\\uC790\\uC774\\uB108\\uB97C \\uC704\\uD55C \\uB9C8\\uC9C0\\uB9C9 \\uD560\\uC778\" }),\n                /* @__PURE__ */ jsx(\"div\", { style: { color: colors.harborBlue }, children: /* @__PURE__ */ jsx(\n                  CountdownTimer,\n                  {\n                    targetDate: new Date(\n                      Date.now() + 3 * 24 * 60 * 60 * 1e3\n                    ).toISOString()\n                  }\n                ) })\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsx(\n            \"a\",\n            {\n              href: \"#pricing\",\n              style: { backgroundColor: colors.harborBlue, color: colors.white },\n              className: \"font-bold py-4 px-10 rounded-full text-lg hover:opacity-90 transition-opacity duration-300\",\n              children: \"\\uC790\\uC720\\uB97C \\uD5A5\\uD55C \\uC5EC\\uC815 \\uC2DC\\uC791\\uD558\\uAE30\"\n            }\n          )\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.harborPink },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-3xl mx-auto text-center\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-3xl md:text-4xl font-bold mb-6\", children: \"\\uD639\\uC2DC, \\uB2F9\\uC2E0\\uC758 \\uC774\\uC57C\\uAE30\\uC778\\uAC00\\uC694?\" }),\n              /* @__PURE__ */ jsxs(\n                \"p\",\n                {\n                  className: \"text-lg leading-relaxed\",\n                  style: { color: colors.textMedium },\n                  children: [\n                    '\"\\uBD84\\uBA85 \\uC644\\uBCBD\\uD55C \\uB514\\uC790\\uC778\\uC774\\uC5C8\\uB294\\uB370, \\uC65C \\uAC1C\\uBC1C\\uB9CC \\uAC70\\uCE58\\uBA74 \\uD3C9\\uBC94\\uD574\\uC9C8\\uAE4C?\"',\n                    /* @__PURE__ */ jsx(\"br\", {}),\n                    \"\\uC218\\uB9CE\\uC740 \\uB514\\uC790\\uC774\\uB108\\uAC00 \\uACAA\\uB294 \\uC88C\\uC808\\uC785\\uB2C8\\uB2E4. \\uAC1C\\uBC1C\\uC790\\uC640\\uC758 \\uC18C\\uD1B5 \\uBE44\\uC6A9, \\uAE30\\uC220\\uC801 \\uC81C\\uC57D, \\uAE38\\uC5B4\\uC9C0\\uB294 \\uC81C\\uC791 \\uAE30\\uAC04...\",\n                    /* @__PURE__ */ jsx(\"br\", {}),\n                    \"\\uB2F9\\uC2E0\\uC758 \\uC704\\uB300\\uD55C \\uC544\\uC774\\uB514\\uC5B4\\uB294 \\uADF8\\uB807\\uAC8C \\uBE5B\\uC744 \\uC783\\uC5B4\\uAC11\\uB2C8\\uB2E4.\",\n                    /* @__PURE__ */ jsxs(\"span\", { style: { color: colors.harborBlue }, className: \"font-bold\", children: [\n                      \" \",\n                      \"\\uC774\\uC81C \\uADF8 \\uACE0\\uB9AC\\uB97C \\uB04A\\uC5B4\\uB0BC \\uC2DC\\uAC04\\uC785\\uB2C8\\uB2E4.\"\n                    ] })\n                  ]\n                }\n              )\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-12\", children: \"\\uB2F9\\uC2E0\\uC758 \\uC791\\uC5C5\\uBB3C, \\uC774\\uB807\\uAC8C \\uB2EC\\uB77C\\uC9D1\\uB2C8\\uB2E4\" }),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"grid md:grid-cols-2 gap-8 items-center\", children: [\n            /* @__PURE__ */ jsxs(\"div\", { children: [\n              /* @__PURE__ */ jsx(\"h3\", { className: \"text-2xl font-bold mb-4 text-red-500\", children: \"Before\" }),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"p-4 rounded-lg border border-gray-200 bg-white shadow-lg\", children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-left text-sm font-semibold mb-2\", children: \"[\\uC218\\uAC15 \\uC804] Figma-\\uAC1C\\uBC1C\\uC790 \\uC804\\uB2EC \\uBC29\\uC2DD\" }),\n                /* @__PURE__ */ jsxs(\"div\", { className: \"aspect-video bg-gray-100 rounded flex flex-col items-center justify-center text-gray-400 p-4\", children: [\n                  /* @__PURE__ */ jsx(\"p\", { children: \"\\uC815\\uC801\\uC778 \\uB514\\uC790\\uC778 \\uC2DC\\uC548\" }),\n                  /* @__PURE__ */ jsx(\"p\", { className: \"text-xs mt-2\", children: \"(\\uC778\\uD130\\uB799\\uC158\\uC740 \\uC0C1\\uC0C1\\uC5D0 \\uB9E1\\uACA8\\uC57C \\uD568)\" }),\n                  /* @__PURE__ */ jsx(\"p\", { className: \"text-xs mt-2\", children: \"\\uAC1C\\uBC1C \\uACFC\\uC815\\uC5D0\\uC11C \\uC7A6\\uC740 \\uC218\\uC815, \\uD0C0\\uD611\" })\n                ] })\n              ] }),\n              /* @__PURE__ */ jsx(\"p\", { className: \"mt-4\", style: { color: colors.textLight }, children: \"\\uC18C\\uD1B5 \\uBE44\\uC6A9 \\uC99D\\uAC00, \\uAD6C\\uD604 \\uD004\\uB9AC\\uD2F0 \\uC800\\uD558\" })\n            ] }),\n            /* @__PURE__ */ jsxs(\"div\", { children: [\n              /* @__PURE__ */ jsx(\n                \"h3\",\n                {\n                  className: \"text-2xl font-bold mb-4\",\n                  style: { color: colors.harborBlue },\n                  children: \"After\"\n                }\n              ),\n              /* @__PURE__ */ jsxs(\n                \"div\",\n                {\n                  className: \"p-4 rounded-lg border-2\",\n                  style: { borderColor: colors.harborBlue },\n                  children: [\n                    /* @__PURE__ */ jsx(\n                      \"p\",\n                      {\n                        className: \"text-left text-sm font-semibold mb-2\",\n                        style: { color: colors.harborBlue },\n                        children: \"[\\uC218\\uAC15 \\uD6C4] Framer\\uB97C \\uD1B5\\uD55C \\uC6D0\\uC2A4\\uD1B1 \\uC81C\\uC791\"\n                      }\n                    ),\n                    /* @__PURE__ */ jsxs(\"div\", { className: \"aspect-video bg-gray-100 rounded flex flex-col items-center justify-center p-4\", children: [\n                      /* @__PURE__ */ jsx(\"p\", { className: \"font-bold\", style: { color: colors.harborBlue }, children: \"\\uC778\\uD130\\uB799\\uD2F0\\uBE0C\\uD55C \\uCD5C\\uC885 \\uACB0\\uACFC\\uBB3C\" }),\n                      /* @__PURE__ */ jsx(\n                        \"p\",\n                        {\n                          className: \"text-xs mt-2\",\n                          style: { color: colors.textMedium },\n                          children: \"(\\uB0B4\\uAC00 \\uB514\\uC790\\uC778\\uD55C \\uADF8\\uB300\\uB85C 100% \\uAD6C\\uD604)\"\n                        }\n                      ),\n                      /* @__PURE__ */ jsx(\n                        \"p\",\n                        {\n                          className: \"text-xs mt-2\",\n                          style: { color: colors.textMedium },\n                          children: \"\\uC218\\uC815/\\uBC30\\uD3EC \\uD074\\uB9AD \\uD55C \\uBC88\\uC73C\\uB85C\"\n                        }\n                      )\n                    ] })\n                  ]\n                }\n              ),\n              /* @__PURE__ */ jsx(\n                \"p\",\n                {\n                  className: \"mt-4 font-bold\",\n                  style: { color: colors.harborBlue },\n                  children: \"\\uC555\\uB3C4\\uC801\\uC778 \\uC18D\\uB3C4, \\uC644\\uBCBD\\uD55C \\uD004\\uB9AC\\uD2F0\"\n                }\n              )\n            ] })\n          ] })\n        ] }) }),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-12\", style: { backgroundColor: colors.harborPink }, children: /* @__PURE__ */ jsx(\"div\", { className: \"max-w-6xl mx-auto px-4\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"grid grid-cols-1 md:grid-cols-3 gap-8 text-center\", children: [\n          /* @__PURE__ */ jsxs(\"div\", { children: [\n            /* @__PURE__ */ jsx(\n              \"p\",\n              {\n                className: \"text-4xl font-bold\",\n                style: { color: colors.harborBlue },\n                children: \"1,300+\"\n              }\n            ),\n            /* @__PURE__ */ jsx(\"p\", { className: \"mt-2\", style: { color: colors.textMedium }, children: \"\\uB204\\uC801 \\uC218\\uAC15\\uC0DD\" })\n          ] }),\n          /* @__PURE__ */ jsxs(\"div\", { children: [\n            /* @__PURE__ */ jsx(\n              \"p\",\n              {\n                className: \"text-4xl font-bold\",\n                style: { color: colors.harborBlue },\n                children: \"4.9/5.0\"\n              }\n            ),\n            /* @__PURE__ */ jsx(\"p\", { className: \"mt-2\", style: { color: colors.textMedium }, children: \"\\uC218\\uAC15\\uC0DD \\uB9CC\\uC871\\uB3C4\" })\n          ] }),\n          /* @__PURE__ */ jsxs(\"div\", { children: [\n            /* @__PURE__ */ jsx(\n              \"p\",\n              {\n                className: \"text-4xl font-bold\",\n                style: { color: colors.harborBlue },\n                children: \"30+\"\n              }\n            ),\n            /* @__PURE__ */ jsx(\"p\", { className: \"mt-2\", style: { color: colors.textMedium }, children: \"\\uC2E4\\uC804 \\uD504\\uB85C\\uC81D\\uD2B8 \\uACBD\\uD5D8\" })\n          ] })\n        ] }) }) }),\n        /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl md:text-5xl font-bold mb-6\", children: \"\\uACB0\\uACFC\\uB85C \\uC99D\\uBA85\\uD558\\uB294, \\uB2E8 \\uD558\\uB098\\uC758 \\uB9C8\\uC2A4\\uD130\\uB9AC \\uCF54\\uC2A4\" }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              className: \"max-w-3xl mx-auto text-lg\",\n              style: { color: colors.textMedium },\n              children: [\n                \"\\uC774 \\uAC15\\uC758\\uB294 Framer \\uC0AC\\uC6A9\\uBC95\\uC744 \\uC54C\\uB824\\uC8FC\\uB294 \\uAC15\\uC758\\uAC00 \\uC544\\uB2D9\\uB2C8\\uB2E4.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uB514\\uC790\\uC774\\uB108\\uAC00 \\uC790\\uC2E0\\uC758 \\uAC00\\uCE58\\uB97C \\uC2A4\\uC2A4\\uB85C \\uC99D\\uBA85\\uD558\\uACE0,\",\n                \" \",\n                /* @__PURE__ */ jsx(\"span\", { style: { color: colors.harborBlue }, children: \"\\uB300\\uCCB4 \\uBD88\\uAC00\\uB2A5\\uD55C \\uC804\\uBB38\\uAC00\" }),\n                \"\\uB85C \\uAC70\\uB4ED\\uB098\\uB294 \\uBC29\\uBC95\\uC744 \\uC548\\uB0B4\\uD569\\uB2C8\\uB2E4.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-6xl mx-auto grid md:grid-cols-3 gap-8 mt-12 text-left\", children: [\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: {\n                  backgroundColor: colors.white,\n                  border: `1px solid ${colors.harborPink}`\n                },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h4\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"1. \\uCC3D\\uC791\\uC758 \\uC644\\uC804\\uD55C \\uC790\\uC728\\uC131\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC544\\uC774\\uB514\\uC5B4 \\uC2A4\\uCF00\\uCE58\\uBD80\\uD130 \\uCD5C\\uC885 \\uBC30\\uD3EC\\uAE4C\\uC9C0, \\uBAA8\\uB4E0 \\uCC3D\\uC791 \\uACFC\\uC815\\uC744 \\uC628\\uC804\\uD788 \\uD1B5\\uC81C\\uD558\\uC138\\uC694. \\uB354 \\uC774\\uC0C1 \\uAE30\\uC220\\uC801 \\uC81C\\uC57D\\uC774\\uB098 \\uC18C\\uD1B5\\uC758 \\uC624\\uB958\\uB85C \\uB2F9\\uC2E0\\uC758 \\uBE44\\uC804\\uC774 \\uD0C0\\uD611\\uB418\\uB294 \\uC77C\\uC740 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: {\n                  backgroundColor: colors.white,\n                  border: `1px solid ${colors.harborPink}`\n                },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h4\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"2. \\uC138\\uACC4\\uC801 \\uC218\\uC900\\uC758 \\uC778\\uD130\\uB799\\uC158\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uB2E8\\uC21C\\uD788 '\\uC6C0\\uC9C1\\uC774\\uB294' \\uAC83\\uC744 \\uB118\\uC5B4 '\\uBC18\\uC751\\uD558\\uB294' \\uB514\\uC790\\uC778\\uC744 \\uB9CC\\uB4ED\\uB2C8\\uB2E4. \\uC0AC\\uC6A9\\uC790\\uC758 \\uBAA8\\uB4E0 \\uD589\\uB3D9\\uC5D0 \\uC12C\\uC138\\uD558\\uAC8C \\uBC18\\uC751\\uD558\\uB294 \\uC6D4\\uB4DC\\uD074\\uB798\\uC2A4 \\uC778\\uD130\\uB799\\uC158\\uC73C\\uB85C \\uD504\\uB85C\\uC81D\\uD2B8\\uC758 \\uACA9\\uC744 \\uB192\\uC774\\uC138\\uC694.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: {\n                  backgroundColor: colors.white,\n                  border: `1px solid ${colors.harborPink}`\n                },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h4\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"3. \\uB514\\uC790\\uC774\\uB108 \\uB108\\uBA38\\uC758 \\uBE44\\uC988\\uB2C8\\uC2A4\\uB9E8\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uD6CC\\uB96D\\uD55C \\uB514\\uC790\\uC778\\uC744 \\uB192\\uC740 \\uAC00\\uCE58\\uB85C \\uBCC0\\uD658\\uD558\\uB294 \\uBE44\\uC988\\uB2C8\\uC2A4 \\uC804\\uB7B5\\uAE4C\\uC9C0 \\uD568\\uAED8 \\uBC30\\uC6C1\\uB2C8\\uB2E4. \\uB2F9\\uC2E0\\uC758 \\uC7AC\\uB2A5\\uC744 \\uCD5C\\uACE0\\uC758 \\uC218\\uC775\\uC73C\\uB85C \\uC5F0\\uACB0\\uD558\\uB294 \\uBC29\\uBC95\\uC744 \\uC54C\\uB824\\uB4DC\\uB9BD\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            )\n          ] })\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.harborPink },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uC65C \\uC774 \\uAC15\\uC758\\uAC00 \\uAC00\\uC7A5 \\uBE60\\uB978 \\uAE38\\uC77C\\uAE4C\\uC694?\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"overflow-x-auto\", children: /* @__PURE__ */ jsxs(\"table\", { className: \"w-full text-left border-collapse\", children: [\n                /* @__PURE__ */ jsx(\"thead\", { children: /* @__PURE__ */ jsxs(\"tr\", { children: [\n                  /* @__PURE__ */ jsx(\"th\", { className: \"p-4 border-b-2 font-bold\", children: \"\\uD559\\uC2B5 \\uBC29\\uBC95\" }),\n                  /* @__PURE__ */ jsx(\"th\", { className: \"p-4 border-b-2 font-bold text-center\", children: \"\\uACB0\\uACFC\\uBB3C \\uD004\\uB9AC\\uD2F0\" }),\n                  /* @__PURE__ */ jsx(\"th\", { className: \"p-4 border-b-2 font-bold text-center\", children: \"\\uD559\\uC2B5 \\uC18D\\uB3C4\" }),\n                  /* @__PURE__ */ jsx(\"th\", { className: \"p-4 border-b-2 font-bold text-center\", children: \"\\uC2DC\\uD589\\uCC29\\uC624 \\uBE44\\uC6A9\" }),\n                  /* @__PURE__ */ jsx(\n                    \"th\",\n                    {\n                      className: \"p-4 border-b-2 font-bold bg-blue-100\",\n                      style: { color: colors.harborBlue },\n                      children: \"The Framer Mastery\"\n                    }\n                  )\n                ] }) }),\n                /* @__PURE__ */ jsxs(\"tbody\", { children: [\n                  /* @__PURE__ */ jsxs(\"tr\", { style: { backgroundColor: colors.white }, children: [\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b font-bold\", children: \"\\uB3C5\\uD559 (\\uC720\\uD29C\\uBE0C/\\uBE14\\uB85C\\uADF8)\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F914}\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F422}\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F4B8}\\u{1F4B8}\\u{1F4B8}\" }),\n                    /* @__PURE__ */ jsx(\n                      \"td\",\n                      {\n                        className: \"p-4 border-b text-center row-span-4 align-middle font-bold\",\n                        style: { color: colors.harborBlue },\n                        children: /* @__PURE__ */ jsxs(\"div\", { className: \"flex flex-col items-center justify-center h-full\", children: [\n                          /* @__PURE__ */ jsx(\"p\", { children: \"\\uC555\\uB3C4\\uC801\\uC778\" }),\n                          /* @__PURE__ */ jsx(\"p\", { children: \"\\uD6A8\\uC728\\uACFC \\uACB0\\uACFC\" })\n                        ] })\n                      }\n                    )\n                  ] }),\n                  /* @__PURE__ */ jsxs(\"tr\", { style: { backgroundColor: colors.white }, children: [\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b font-bold\", children: \"\\uD0C0 \\uC628\\uB77C\\uC778 \\uAC15\\uC758\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F642}\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F3C3}\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F4B8}\\u{1F4B8}\" })\n                  ] }),\n                  /* @__PURE__ */ jsxs(\"tr\", { style: { backgroundColor: colors.white }, children: [\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b font-bold\", children: \"\\uB514\\uC790\\uC778 + \\uAC1C\\uBC1C \\uC678\\uC8FC\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F601}\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F6B6}\\u200D\\u2642\\uFE0F\" }),\n                    /* @__PURE__ */ jsx(\"td\", { className: \"p-4 border-b text-center\", children: \"\\u{1F4B8}\\u{1F4B8}\\u{1F4B8}\\u{1F4B8}\\u{1F4B8}\" })\n                  ] })\n                ] })\n              ] }) }),\n              /* @__PURE__ */ jsx(\n                \"p\",\n                {\n                  className: \"text-center mt-4 text-sm\",\n                  style: { color: colors.textLight },\n                  children: \"* \\uC704 \\uD45C\\uB294 \\uC77C\\uBC18\\uC801\\uC778 \\uACBD\\uC6B0\\uB97C \\uAE30\\uC900\\uC73C\\uB85C \\uD55C \\uBE44\\uAD50\\uC774\\uBA70, \\uAC1C\\uC778\\uC5D0 \\uB530\\uB77C \\uCC28\\uC774\\uAC00 \\uC788\\uC744 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n                }\n              )\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-2xl font-bold\", style: { color: colors.harborBlue }, children: \"GAME CHANGER\" }),\n          /* @__PURE__ */ jsx(\"h3\", { className: \"text-4xl md:text-5xl font-bold my-4\", children: \"\\uC65C \\uC9C0\\uAE08, Framer\\uC778\\uAC00?\" }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              className: \"max-w-3xl mx-auto text-lg\",\n              style: { color: colors.textMedium },\n              children: [\n                \"90%\\uC758 \\uBC18\\uBCF5 \\uC791\\uC5C5\\uACFC 10%\\uC758 \\uD06C\\uB9AC\\uC5D0\\uC774\\uD2F0\\uBE0C. \\uC6F9\\uB514\\uC790\\uC778\\uC758 \\uD604\\uC2E4\\uC785\\uB2C8\\uB2E4. \",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"Framer\\uB294 \\uC774 \\uACF5\\uC2DD\\uC744 \\uC644\\uC804\\uD788 \\uB4A4\\uC9D1\\uC2B5\\uB2C8\\uB2E4. \\uC774\\uC81C \\uB2F9\\uC2E0\\uC758 \\uC2DC\\uAC04 90%\\uB97C \\uC624\\uB86F\\uC774 \\uCC3D\\uC758\\uC131\\uC5D0 \\uC3DF\\uC544\\uBD80\\uC73C\\uC138\\uC694.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto grid md:grid-cols-3 gap-8 mt-12\", children: [\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\"h4\", { className: \"text-xl font-bold mb-2\", children: \"\\uC555\\uB3C4\\uC801\\uC778 \\uC18D\\uB3C4\" }),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC544\\uC774\\uB514\\uC5B4\\uB97C \\uD604\\uC2E4\\uB85C \\uB9CC\\uB4DC\\uB294 \\uB370 \\uB2E8 \\uD558\\uB8E8. Framer\\uC758 \\uBE14\\uB85D \\uC2DC\\uC2A4\\uD15C\\uACFC AI \\uAE30\\uB2A5\\uC774 \\uB2F9\\uC2E0\\uC758 \\uC2DC\\uAC04\\uC744 \\uC544\\uAEF4\\uC90D\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\"h4\", { className: \"text-xl font-bold mb-2\", children: \"\\uCF54\\uB4DC \\uC5C6\\uB294 \\uACE0\\uD004\\uB9AC\\uD2F0\" }),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC1C\\uBC1C\\uC790\\uAC00 \\uBA87 \\uC8FC\\uAC04 \\uAD6C\\uD604\\uD560 \\uC778\\uD130\\uB799\\uC158\\uC744 \\uB2E8 \\uBA87 \\uBC88\\uC758 \\uD074\\uB9AD\\uC73C\\uB85C. \\uB2F9\\uC2E0\\uC758 \\uB514\\uC790\\uC778\\uC740 \\uC774\\uC81C \\uC8FD\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\"h4\", { className: \"text-xl font-bold mb-2\", children: \"\\uC2E4\\uC2DC\\uAC04 \\uD611\\uC5C5\\uACFC \\uBC30\\uD3EC\" }),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uB514\\uC790\\uC778\\uBD80\\uD130 \\uBC30\\uD3EC\\uAE4C\\uC9C0 \\uD55C \\uACF3\\uC5D0\\uC11C. \\uD300\\uACFC \\uD568\\uAED8 \\uC2E4\\uC2DC\\uAC04\\uC73C\\uB85C \\uC791\\uC5C5\\uD558\\uACE0, \\uD074\\uB9AD \\uD55C \\uBC88\\uC73C\\uB85C \\uC138\\uC0C1\\uC5D0 \\uACF5\\uAC1C\\uD558\\uC138\\uC694.\" })\n                ]\n              }\n            )\n          ] })\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.harborPink },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uC774 \\uC704\\uB300\\uD55C \\uC5EC\\uC815\\uC744 \\uD568\\uAED8\\uD560 \\uBD84\\uB4E4\\uC744 \\uCC3E\\uC2B5\\uB2C8\\uB2E4\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-3 gap-8\", children: audience.map((person, index) => /* @__PURE__ */ jsxs(\n                \"div\",\n                {\n                  className: \"p-8 rounded-lg bg-white shadow-md hover:shadow-xl transition-shadow duration-300\",\n                  children: [\n                    /* @__PURE__ */ jsx(\n                      \"h3\",\n                      {\n                        className: \"text-xl font-bold mb-4\",\n                        style: { color: colors.harborBlue },\n                        children: person.title\n                      }\n                    ),\n                    /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: person.description })\n                  ]\n                },\n                index\n              )) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto grid md:grid-cols-2 gap-12 items-center\", children: [\n          /* @__PURE__ */ jsxs(\"div\", { className: \"text-center md:text-left\", children: [\n            /* @__PURE__ */ jsx(\"p\", { className: \"font-bold\", style: { color: colors.harborBlue }, children: \"INSTRUCTOR\" }),\n            /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold my-4\", children: \"Yongmin, Harbor School\" }),\n            /* @__PURE__ */ jsx(\"p\", { className: \"mb-6\", style: { color: colors.textMedium }, children: \"Framer\\uAC00 \\uD55C\\uAD6D\\uC5D0 \\uC54C\\uB824\\uC9C0\\uAE30 \\uC804\\uBD80\\uD130 7\\uB144\\uAC04 Framer\\uB9CC\\uC744 \\uC5F0\\uAD6C\\uD558\\uACE0, 30\\uAC1C \\uC774\\uC0C1\\uC758 \\uC2E4\\uC804 \\uD504\\uB85C\\uC81D\\uD2B8\\uB97C \\uC131\\uACF5\\uC2DC\\uD0A8 1\\uC138\\uB300 Framer \\uC804\\uBB38\\uAC00\\uC785\\uB2C8\\uB2E4. \\uB2E8\\uC21C\\uD55C \\uD234 \\uC0AC\\uC6A9\\uBC95\\uC744 \\uB118\\uC5B4, '\\uC5B4\\uB5BB\\uAC8C' \\uB514\\uC790\\uC778\\uC73C\\uB85C \\uBB38\\uC81C\\uB97C \\uD574\\uACB0\\uD558\\uB294\\uC9C0\\uC5D0 \\uB300\\uD55C \\uAE4A\\uC740 \\uD1B5\\uCC30\\uB825\\uC744 \\uACF5\\uC720\\uD569\\uB2C8\\uB2E4.\" }),\n            /* @__PURE__ */ jsxs(\"div\", { className: \"flex justify-center md:justify-start space-x-8\", children: [\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-center\", children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-3xl font-bold\", children: \"7+\" }),\n                /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"\\uAD50\\uC721 \\uACBD\\uB825\" })\n              ] }),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-center\", children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-3xl font-bold\", children: \"30+\" }),\n                /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"\\uC2E4\\uC804 \\uD504\\uB85C\\uC81D\\uD2B8\" })\n              ] }),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-center\", children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-3xl font-bold\", children: \"1,300+\" }),\n                /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"\\uB204\\uC801 \\uC218\\uAC15\\uC0DD\" })\n              ] })\n            ] })\n          ] }),\n          /* @__PURE__ */ jsx(\"div\", { className: \"w-full max-w-sm mx-auto\", children: /* @__PURE__ */ jsx(\n            \"div\",\n            {\n              className: \"aspect-square rounded-full p-2\",\n              style: {\n                background: `linear-gradient(to bottom right, ${colors.harborPink}, ${colors.harborBlue})`\n              },\n              children: /* @__PURE__ */ jsx(\"div\", { className: \"w-full h-full rounded-full flex items-center justify-center bg-gray-100\", children: /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textLight }, children: \"[\\uAC15\\uC0AC \\uC774\\uBBF8\\uC9C0]\" }) })\n            }\n          ) })\n        ] }) }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.harborPink },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-4xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uB2F9\\uC2E0\\uC774 \\uB9C8\\uC2A4\\uD130\\uD560 6\\uAC00\\uC9C0 \\uD575\\uC2EC \\uC5ED\\uB7C9\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-2 gap-x-8 gap-y-6\", children: features.map((feature, index) => /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-start space-x-4\", children: [\n                /* @__PURE__ */ jsx(\n                  CheckIcon,\n                  {\n                    className: \"h-6 w-6 mt-1 flex-shrink-0\",\n                    style: { color: colors.harborBlue }\n                  }\n                ),\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-lg\", style: { color: colors.textMedium }, children: feature })\n              ] }, index)) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-6xl mx-auto text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-4\", children: \"\\uC878\\uC5C5\\uC0DD\\uB4E4\\uC758 \\uC2E4\\uC81C \\uACB0\\uACFC\\uBB3C\" }),\n          /* @__PURE__ */ jsx(\n            \"p\",\n            {\n              className: \"max-w-2xl mx-auto mb-12\",\n              style: { color: colors.textMedium },\n              children: \"\\uC774 \\uAC15\\uC758\\uB97C \\uD1B5\\uD574 \\uB2F9\\uC2E0\\uCC98\\uB7FC \\uD3C9\\uBC94\\uD588\\uB358 \\uB514\\uC790\\uC774\\uB108\\uB4E4\\uC774 \\uB9CC\\uB4E4\\uC5B4\\uB0B8, \\uBE44\\uBC94\\uD55C \\uACB0\\uACFC\\uBB3C\\uB4E4\\uC785\\uB2C8\\uB2E4.\"\n            }\n          ),\n          /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-3 gap-8\", children: [1, 2, 3].map((i) => /* @__PURE__ */ jsxs(\"div\", { className: \"group\", children: [\n            /* @__PURE__ */ jsx(\"div\", { className: \"aspect-video rounded-lg bg-gray-100 mb-4 border border-gray-200 flex items-center justify-center\", children: /* @__PURE__ */ jsxs(\"p\", { style: { color: colors.textLight }, children: [\n              \"[\\uC878\\uC5C5\\uC0DD \\uD504\\uB85C\\uC81D\\uD2B8 \",\n              i,\n              \"]\"\n            ] }) }),\n            /* @__PURE__ */ jsxs(\"h3\", { className: \"text-lg font-bold\", children: [\n              \"Project Title \",\n              i\n            ] }),\n            /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: \"by Alumnus Name\" })\n          ] }, i)) })\n        ] }) }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.harborPink },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto text-center\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-4\", children: \"\\uBC31\\uBB38\\uC774 \\uBD88\\uC5EC\\uC77C\\uACAC\" }),\n              /* @__PURE__ */ jsxs(\"p\", { className: \"text-lg mb-8\", style: { color: colors.textMedium }, children: [\n                \"\\uC774 \\uAC15\\uC758\\uB97C \\uD1B5\\uD574 \\uB2F9\\uC2E0\\uC774 \\uC9C1\\uC811 \\uB9CC\\uB4E4\\uAC8C \\uB420\",\n                \" \",\n                /* @__PURE__ */ jsx(\"span\", { style: { color: colors.harborBlue }, className: \"font-bold\", children: \"\\uC2E4\\uC804 \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uD504\\uB85C\\uC81D\\uD2B8\" }),\n                \"\\uC785\\uB2C8\\uB2E4.\"\n              ] }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"aspect-video rounded-lg shadow-2xl p-2 border border-gray-200 bg-white\", children: /* @__PURE__ */ jsx(\"div\", { className: \"w-full h-full bg-gray-100 rounded flex items-center justify-center\", children: /* @__PURE__ */ jsxs(\"p\", { style: { color: colors.textLight }, children: [\n                \"[\",\n                /* @__PURE__ */ jsx(\n                  \"a\",\n                  {\n                    href: \"https://marianne.framer.website\",\n                    target: \"_blank\",\n                    rel: \"noopener noreferrer\",\n                    className: \"underline\",\n                    style: { color: colors.harborBlue },\n                    children: \"https://marianne.framer.website\"\n                  }\n                ),\n                \"]\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"(\\uC704 \\uB9C1\\uD06C\\uC640 \\uAC19\\uC740 \\uD004\\uB9AC\\uD2F0\\uC758 \\uACB0\\uACFC\\uBB3C\\uC744 \\uB9CC\\uB4ED\\uB2C8\\uB2E4)\"\n              ] }) }) }),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"text-left mt-8 grid md:grid-cols-2 gap-x-8 gap-y-4 max-w-2xl mx-auto\", children: [\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"\\uC644\\uBCBD\\uD55C \\uBC18\\uC751\\uD615 \\uB808\\uC774\\uC544\\uC6C3\"\n                ] }),\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"CMS\\uB97C \\uD1B5\\uD55C \\uB3D9\\uC801 \\uCF58\\uD150\\uCE20 \\uAD00\\uB9AC\"\n                ] }),\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"\\uC2DC\\uC120\\uC744 \\uC0AC\\uB85C\\uC7A1\\uB294 \\uC2A4\\uD06C\\uB864 \\uC560\\uB2C8\\uBA54\\uC774\\uC158\"\n                ] }),\n                /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                  /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-3 flex-shrink-0\" }),\n                  \" \",\n                  \"\\uCF54\\uB4DC \\uCEF4\\uD3EC\\uB10C\\uD2B8\\uB97C \\uD65C\\uC6A9\\uD55C \\uAE30\\uB2A5 \\uD655\\uC7A5\"\n                ] })\n              ] })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsx(\"section\", { className: \"py-20 px-4\", children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-4xl mx-auto\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uC7A0\\uC7AC\\uB825\\uC744 \\uD3ED\\uBC1C\\uC2DC\\uD0AC 6\\uC8FC\\uAC04\\uC758 \\uC555\\uCD95 \\uC131\\uC7A5 \\uD504\\uB85C\\uADF8\\uB7A8\" }),\n          /* @__PURE__ */ jsx(\"div\", { className: \"space-y-4\", children: curriculum.map((week, index) => /* @__PURE__ */ jsxs(\n            \"details\",\n            {\n              className: \"p-6 rounded-lg group border\",\n              open: index === 0,\n              style: {\n                backgroundColor: colors.white,\n                borderColor: colors.harborPink\n              },\n              children: [\n                /* @__PURE__ */ jsxs(\"summary\", { className: \"font-bold text-xl list-none flex justify-between items-center cursor-pointer\", children: [\n                  /* @__PURE__ */ jsxs(\"div\", { children: [\n                    /* @__PURE__ */ jsx(\n                      \"p\",\n                      {\n                        className: \"text-sm font-bold\",\n                        style: { color: colors.harborBlue },\n                        children: week.module\n                      }\n                    ),\n                    /* @__PURE__ */ jsx(\"h3\", { className: \"text-2xl font-bold mt-1 group-hover:opacity-80 transition-opacity\", children: week.title })\n                  ] }),\n                  /* @__PURE__ */ jsxs(\n                    \"span\",\n                    {\n                      className: \"text-sm ml-4 whitespace-nowrap\",\n                      style: { color: colors.textLight },\n                      children: [\n                        week.lessonsCount,\n                        \"\\uAC15 / \",\n                        week.duration\n                      ]\n                    }\n                  )\n                ] }),\n                /* @__PURE__ */ jsxs(\"div\", { className: \"overflow-hidden max-h-0 group-open:max-h-[1000px] transition-all duration-500 ease-in-out\", children: [\n                  /* @__PURE__ */ jsx(\"p\", { className: \"my-4\", style: { color: colors.textMedium }, children: week.description }),\n                  /* @__PURE__ */ jsxs(\n                    \"div\",\n                    {\n                      className: \"p-4 rounded-md mt-4\",\n                      style: { backgroundColor: colors.harborPink },\n                      children: [\n                        /* @__PURE__ */ jsx(\n                          \"p\",\n                          {\n                            className: \"font-bold text-sm\",\n                            style: { color: colors.harborBlue },\n                            children: \"Key Outcome\"\n                          }\n                        ),\n                        /* @__PURE__ */ jsx(\"p\", { className: \"mt-1\", style: { color: colors.textMedium }, children: week.outcome })\n                      ]\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"ul\", { className: \"space-y-2 pt-4 mt-4 border-t border-gray-200\", children: week.lessons.map((lesson, lessonIndex) => /* @__PURE__ */ jsxs(\"li\", { className: \"flex items-start\", children: [\n                    /* @__PURE__ */ jsx(\n                      CheckIcon,\n                      {\n                        className: \"h-5 w-5 mr-3 mt-1 flex-shrink-0\",\n                        style: { color: colors.textLight }\n                      }\n                    ),\n                    /* @__PURE__ */ jsx(\"span\", { style: { color: colors.textMedium }, children: lesson })\n                  ] }, lessonIndex)) })\n                ] })\n              ]\n            },\n            index\n          )) })\n        ] }) }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.harborPink },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-5xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uBA3C\\uC800 \\uACBD\\uD5D8\\uD55C \\uBD84\\uB4E4\\uC758 \\uC758\\uC2EC \\uC5C6\\uB294 \\uCC2C\\uC0AC\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"grid md:grid-cols-3 gap-8\", children: reviews.map((review, i) => /* @__PURE__ */ jsxs(\n                \"div\",\n                {\n                  className: \"bg-white p-6 rounded-lg flex flex-col shadow-md hover:shadow-xl transition-shadow duration-300\",\n                  children: [\n                    /* @__PURE__ */ jsx(\"div\", { className: \"flex mb-4\", children: [...Array(5)].map((_, starIndex) => /* @__PURE__ */ jsx(\n                      StarIcon,\n                      {\n                        className: \"h-5 w-5 text-yellow-400\"\n                      },\n                      starIndex\n                    )) }),\n                    /* @__PURE__ */ jsxs(\"p\", { className: \"flex-grow\", style: { color: colors.textMedium }, children: [\n                      '\"',\n                      review.text,\n                      '\"'\n                    ] }),\n                    /* @__PURE__ */ jsxs(\"div\", { className: \"mt-4\", children: [\n                      /* @__PURE__ */ jsx(\"p\", { className: \"font-bold\", children: review.name }),\n                      /* @__PURE__ */ jsx(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: review.role })\n                    ] })\n                  ]\n                },\n                i\n              )) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"section\", { className: \"py-20 px-4 text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold mb-4\", children: \"\\uB2F9\\uC2E0\\uC758 \\uC131\\uC7A5\\uC744 \\uC704\\uD55C, \\uB2E8 \\uD558\\uB098\\uC758 \\uD0A4\\uD2B8\" }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              className: \"text-lg max-w-2xl mx-auto mb-10\",\n              style: { color: colors.textMedium },\n              children: [\n                \"\\uC131\\uACF5\\uC801\\uC778 \\uC5EC\\uC815\\uC744 \\uC704\\uD574 \\uD544\\uC694\\uD55C \\uBAA8\\uB4E0 \\uAC83\\uC744 \\uB2F4\\uC558\\uC2B5\\uB2C8\\uB2E4.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uB2F9\\uC2E0\\uC740 \\uADF8\\uC800 \\uC131\\uC7A5\\uC5D0\\uB9CC \\uC9D1\\uC911\\uD558\\uC138\\uC694.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-3xl mx-auto grid md:grid-cols-2 gap-8 text-left\", children: [\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uC131\\uC7A5\\uC758 \\uB3D9\\uBC18\\uC790, \\uC2AC\\uB799 \\uCEE4\\uBBA4\\uB2C8\\uD2F0\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC19\\uC740 \\uBAA9\\uD45C\\uB97C \\uAC00\\uC9C4 \\uB3D9\\uB8CC\\uB4E4\\uACFC \\uD568\\uAED8\\uB77C\\uBA74 \\uB354 \\uBA40\\uB9AC, \\uB354 \\uBE60\\uB974\\uAC8C \\uAC08 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uC774\\uACF3\\uC740 \\uB2E8\\uC21C\\uD55C Q&A \\uACF5\\uAC04\\uC774 \\uC544\\uB2CC, \\uC9D1\\uB2E8 \\uC9C0\\uC131\\uC758 \\uD5C8\\uBE0C\\uC785\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uC2DC\\uAC04\\uC744 \\uC9C0\\uBC30\\uD558\\uB294, \\uD575\\uC2EC \\uB9AC\\uC18C\\uC2A4\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC15\\uC758\\uC5D0 \\uC0AC\\uC6A9\\uB41C \\uBAA8\\uB4E0 Framer \\uD30C\\uC77C\\uACFC \\uCF54\\uB4DC \\uC2A4\\uB2C8\\uD3AB\\uC740 \\uB2F9\\uC2E0\\uC758 \\uC2DC\\uAC04\\uC744 \\uC544\\uAEF4\\uC8FC\\uB294 \\uAC00\\uC7A5 \\uAC15\\uB825\\uD55C \\uBB34\\uAE30\\uAC00 \\uB420 \\uAC83\\uC785\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uD504\\uB85C\\uD398\\uC154\\uB110\\uC758 \\uC0C1\\uC9D5, \\uD3EC\\uD2B8\\uD3F4\\uB9AC\\uC624 \\uD15C\\uD50C\\uB9BF\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uAC15\\uC758 \\uC644\\uAC15 \\uD6C4, \\uB2F9\\uC2E0\\uC758 \\uC2E4\\uB825\\uC744 \\uC99D\\uBA85\\uD560 \\uAC00\\uC7A5 \\uBE60\\uB978 \\uBC29\\uBC95. \\uC804\\uBB38\\uAC00\\uAC00 \\uB514\\uC790\\uC778\\uD55C \\uACE0\\uD488\\uC9C8 \\uD15C\\uD50C\\uB9BF\\uC73C\\uB85C \\uB2F9\\uC2E0\\uC758 \\uAC00\\uCE58\\uB97C \\uBCF4\\uC5EC\\uC8FC\\uC138\\uC694.\" })\n                ]\n              }\n            ),\n            /* @__PURE__ */ jsxs(\n              \"div\",\n              {\n                className: \"p-8 rounded-lg\",\n                style: { backgroundColor: colors.harborPink },\n                children: [\n                  /* @__PURE__ */ jsx(\n                    \"h3\",\n                    {\n                      className: \"text-xl font-bold mb-3\",\n                      style: { color: colors.harborBlue },\n                      children: \"\\uC131\\uC7A5\\uC758 \\uD604\\uC7AC\\uC9C4\\uD589\\uD615, \\uD3C9\\uC0DD \\uC5C5\\uB370\\uC774\\uD2B8\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC774 \\uAC15\\uC758\\uB294 \\uC0B4\\uC544\\uC788\\uB294 \\uC720\\uAE30\\uCCB4\\uC785\\uB2C8\\uB2E4. Framer\\uC758 \\uBC1C\\uC804\\uC5D0 \\uB9DE\\uCDB0 \\uB04A\\uC784\\uC5C6\\uC774 \\uC9C4\\uD654\\uD558\\uBA70, \\uB2F9\\uC2E0\\uC758 \\uC2E4\\uB825\\uC744 \\uD56D\\uC0C1 \\uCD5C\\uC2E0\\uC73C\\uB85C \\uC720\\uC9C0\\uD574 \\uB4DC\\uB9BD\\uB2C8\\uB2E4.\" })\n                ]\n              }\n            )\n          ] })\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4\",\n            style: { backgroundColor: colors.harborPink },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-3xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl font-bold text-center mb-12\", children: \"\\uB2F9\\uC2E0\\uC758 \\uB9C8\\uC9C0\\uB9C9 \\uB9DD\\uC124\\uC784\\uC744 \\uD574\\uACB0\\uD574 \\uB4DC\\uB9BD\\uB2C8\\uB2E4\" }),\n              /* @__PURE__ */ jsx(\"div\", { className: \"space-y-4\", children: faqs.map((faq, index) => /* @__PURE__ */ jsxs(\n                \"details\",\n                {\n                  className: \"bg-white p-6 rounded-lg group cursor-pointer shadow-sm\",\n                  children: [\n                    /* @__PURE__ */ jsxs(\"summary\", { className: \"font-bold text-lg list-none flex justify-between items-center\", children: [\n                      faq.question,\n                      /* @__PURE__ */ jsx(\n                        \"span\",\n                        {\n                          style: { color: colors.harborBlue },\n                          className: \"transform transition-transform duration-300 group-open:rotate-45 text-2xl\",\n                          children: \"+\"\n                        }\n                      )\n                    ] }),\n                    /* @__PURE__ */ jsx(\"div\", { className: \"overflow-hidden max-h-0 group-open:max-h-screen transition-all duration-500 ease-in-out\", children: /* @__PURE__ */ jsx(\"p\", { className: \"mt-4\", style: { color: colors.textMedium }, children: faq.answer }) })\n                  ]\n                },\n                index\n              )) })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"section\", { id: \"pricing\", className: \"py-20 px-4 text-center\", children: [\n          /* @__PURE__ */ jsx(\"h2\", { className: \"text-4xl md:text-5xl font-bold mb-4\", children: \"\\uAC00\\uC7A5 \\uC704\\uB300\\uD55C \\uD22C\\uC790\\uB294 \\uB2F9\\uC2E0\\uC758 \\uC131\\uC7A5\\uC785\\uB2C8\\uB2E4\" }),\n          /* @__PURE__ */ jsxs(\n            \"p\",\n            {\n              className: \"text-lg max-w-2xl mx-auto mb-10\",\n              style: { color: colors.textMedium },\n              children: [\n                \"\\uD55C \\uBC88\\uC758 \\uACB0\\uC2EC\\uC73C\\uB85C, \\uB2F9\\uC2E0\\uC758 \\uCEE4\\uB9AC\\uC5B4\\uB294 \\uC0C8\\uB85C\\uC6B4 \\uC2DC\\uB300\\uB97C \\uB9DE\\uC774\\uD569\\uB2C8\\uB2E4.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uC5B4\\uC81C\\uC758 \\uB2F9\\uC2E0\\uACFC \\uC791\\uBCC4\\uD558\\uACE0, \\uB0B4\\uC77C\\uC758 \\uC804\\uBB38\\uAC00\\uC640 \\uB9CC\\uB098\\uC138\\uC694.\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\n            \"div\",\n            {\n              className: \"inline-block rounded-lg p-8 border shadow-xl max-w-md w-full\",\n              style: {\n                borderColor: colors.harborBlue,\n                backgroundColor: colors.white\n              },\n              children: [\n                /* @__PURE__ */ jsx(\"p\", { className: \"text-lg font-bold\", style: { color: colors.harborBlue }, children: \"The Framer Mastery \\uD3C9\\uC0DD\\uC18C\\uC7A5\" }),\n                /* @__PURE__ */ jsxs(\"div\", { className: \"my-4\", children: [\n                  /* @__PURE__ */ jsx(\n                    \"span\",\n                    {\n                      className: \"text-2xl line-through mr-4\",\n                      style: { color: colors.textLight },\n                      children: \"630,000\\uC6D0\"\n                    }\n                  ),\n                  /* @__PURE__ */ jsxs(\"span\", { className: \"text-5xl font-bold\", children: [\n                    new Intl.NumberFormat(\"ko-KR\").format(398e3),\n                    \"\\uC6D0\"\n                  ] })\n                ] }),\n                /* @__PURE__ */ jsx(\"p\", { style: { color: colors.textMedium }, children: \"\\uC6D4 33,166\\uC6D0 (12\\uAC1C\\uC6D4 \\uD560\\uBD80 \\uC2DC)\" }),\n                /* @__PURE__ */ jsx(\"p\", { className: \"my-6 font-bold\", style: { color: colors.harborBlue }, children: \"\\u{1F525} \\uB2F9\\uC2E0\\uC758 \\uC7A0\\uC7AC\\uB825\\uC5D0 \\uD22C\\uC790\\uD558\\uC138\\uC694. \\uD560\\uC778\\uC740 \\uAC70\\uB4E4 \\uBFD0. \\u{1F525}\" }),\n                /* @__PURE__ */ jsx(\n                  \"a\",\n                  {\n                    href: \"#\",\n                    style: { backgroundColor: colors.harborBlue, color: colors.white },\n                    className: \"w-full block font-bold py-4 px-8 rounded-lg text-xl hover:opacity-90 transition-opacity duration-300 transform hover:scale-105\",\n                    children: \"\\uB0B4 \\uAC00\\uCE58\\uB97C \\uC62C\\uB9AC\\uB294 \\uD22C\\uC790 \\uC2DC\\uC791\\uD558\\uAE30\"\n                  }\n                ),\n                /* @__PURE__ */ jsxs(\n                  \"div\",\n                  {\n                    className: \"mt-8 text-left text-sm space-y-2\",\n                    style: { color: colors.textMedium },\n                    children: [\n                      /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                        /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-2\" }),\n                        \" \\uD3C9\\uC0DD \\uC18C\\uC7A5 VOD \\uAC15\\uC758\"\n                      ] }),\n                      /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                        /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-2\" }),\n                        \" \\uC804\\uC6A9 \\uC2AC\\uB799 \\uCEE4\\uBBA4\\uB2C8\\uD2F0 \\uCD08\\uB300\"\n                      ] }),\n                      /* @__PURE__ */ jsxs(\"p\", { className: \"flex items-center\", children: [\n                        /* @__PURE__ */ jsx(CheckIcon, { className: \"h-5 w-5 text-green-500 mr-2\" }),\n                        \" \\uBAA8\\uB4E0 \\uAC15\\uC758 \\uC790\\uB8CC \\uBC0F \\uD575\\uC2EC \\uB9AC\\uC18C\\uC2A4 \\uC81C\\uACF5\"\n                      ] })\n                    ]\n                  }\n                )\n              ]\n            }\n          )\n        ] }),\n        /* @__PURE__ */ jsx(\n          \"section\",\n          {\n            className: \"py-20 px-4 border-t\",\n            style: {\n              borderColor: colors.harborPink,\n              color: colors.textLight,\n              fontSize: \"0.875rem\"\n            },\n            children: /* @__PURE__ */ jsxs(\"div\", { className: \"max-w-4xl mx-auto\", children: [\n              /* @__PURE__ */ jsx(\n                \"h2\",\n                {\n                  className: \"text-2xl font-bold text-center mb-8\",\n                  style: { color: colors.textDark },\n                  children: \"\\uD559\\uC2B5 \\uBC0F \\uD658\\uBD88 \\uADDC\\uC815\"\n                }\n              ),\n              /* @__PURE__ */ jsxs(\"div\", { className: \"space-y-6\", children: [\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\"h3\", { className: \"font-bold mb-2\", style: { color: colors.textDark }, children: \"\\uD559\\uC2B5 \\uADDC\\uC815\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uBCF8 \\uC0C1\\uD488\\uC740 \\uB3D9\\uC601\\uC0C1 \\uD615\\uD0DC\\uC758 \\uAC15\\uC758\\uB97C \\uD3C9\\uC0DD \\uC18C\\uC7A5\\uD558\\uBA70 \\uC218\\uAC15\\uD558\\uB294 \\uC0C1\\uD488\\uC785\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uC218\\uAC15 \\uC2E0\\uCCAD \\uBC0F \\uACB0\\uC81C\\uB97C \\uC644\\uB8CC\\uD558\\uC2DC\\uBA74, \\uB9C8\\uC774\\uD398\\uC774\\uC9C0\\uB97C \\uD1B5\\uD574 \\uBC14\\uB85C \\uC218\\uAC15\\uC774 \\uAC00\\uB2A5\\uD569\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* ID \\uACF5\\uC720, \\uAC15\\uC758 \\uC601\\uC0C1 \\uBB34\\uB2E8 \\uBC30\\uD3EC \\uBC0F \\uAC00\\uACF5, \\uCEA1\\uCCD0, \\uD310\\uB9E4 \\uB4F1 \\uC77C\\uCCB4\\uC758 \\uC800\\uC791\\uAD8C \\uCE68\\uD574 \\uD589\\uC704\\uB97C \\uAE08\\uC9C0\\uD569\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uBD80\\uC815 \\uC0AC\\uC6A9\\uC774 \\uC801\\uBC1C\\uB420 \\uACBD\\uC6B0 \\uC800\\uC791\\uAD8C\\uBC95 \\uC704\\uBC18\\uC5D0 \\uC758\\uD55C \\uBC95\\uC801\\uC778 \\uC81C\\uC7AC\\uB97C \\uBC1B\\uC73C\\uC2E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\" })\n                ] }),\n                /* @__PURE__ */ jsxs(\"div\", { children: [\n                  /* @__PURE__ */ jsx(\"h3\", { className: \"font-bold mb-2\", style: { color: colors.textDark }, children: \"\\uD658\\uBD88 \\uADDC\\uC815\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uD658\\uBD88 \\uAE08\\uC561\\uC740 \\uC815\\uAC00\\uAC00 \\uC544\\uB2CC \\uC2E4\\uC81C \\uACB0\\uC81C \\uAE08\\uC561\\uC744 \\uAE30\\uC900\\uC73C\\uB85C \\uACC4\\uC0B0\\uB429\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uC218\\uAC15 \\uC2DC\\uC791 \\uD6C4 7\\uC77C \\uC774\\uB0B4, 2\\uAC1C \\uAC15\\uC758 \\uBBF8\\uB9CC \\uC218\\uAC15 \\uC2DC\\uC5D0\\uB294 100% \\uD658\\uBD88 \\uAC00\\uB2A5\\uD569\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uC218\\uAC15 \\uC2DC\\uC791 \\uD6C4 7\\uC77C \\uC774\\uB0B4, 2\\uAC1C \\uAC15\\uC758 \\uC774\\uC0C1 \\uC218\\uAC15 \\uC2DC \\uB610\\uB294 7\\uC77C \\uCD08\\uACFC \\uC2DC\\uC5D0\\uB294 \\uD559\\uC2B5\\uB960\\uC5D0 \\uB530\\uB77C \\uCC28\\uAC10 \\uD6C4 \\uD658\\uBD88\\uC774 \\uC9C4\\uD589\\uB429\\uB2C8\\uB2E4.\" }),\n                  /* @__PURE__ */ jsx(\"p\", { children: \"* \\uBCF4\\uB2E4 \\uC790\\uC138\\uD55C \\uD658\\uBD88 \\uADDC\\uC815\\uC740 \\uACE0\\uAC1D\\uC13C\\uD130\\uB85C \\uBB38\\uC758 \\uBC14\\uB78D\\uB2C8\\uB2E4.\" })\n                ] })\n              ] })\n            ] })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\n          \"footer\",\n          {\n            className: \"text-center py-10 border-t\",\n            style: { borderColor: colors.harborPink },\n            children: [\n              /* @__PURE__ */ jsx(\n                \"p\",\n                {\n                  className: \"text-lg font-bold mb-4\",\n                  style: { color: colors.textDark },\n                  children: \"(\\uC8FC) \\uD558\\uBC84\\uC2A4\\uCFE8\"\n                }\n              ),\n              /* @__PURE__ */ jsxs(\"p\", { className: \"text-sm\", style: { color: colors.textLight }, children: [\n                \"\\uB300\\uD45C\\uC790 : OOO | \\uAC1C\\uC778\\uC815\\uBCF4\\uCC45\\uC784\\uAD00\\uB9AC\\uC790 : OOO\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uC0AC\\uC5C5\\uC790\\uBC88\\uD638 : 559-63-00040 | \\uD1B5\\uC2E0\\uD310\\uB9E4\\uC5C5 \\uC2E0\\uACE0\\uBC88\\uD638 : \\uC81C 2019-\\uC11C\\uC6B8\\uAC15\\uB0A8-04995\\uD638\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uC8FC\\uC18C : \\uC11C\\uC6B8\\uD2B9\\uBCC4\\uC2DC \\uAD00\\uC545\\uAD6C \\uC870\\uC6D0\\uB85C 25 109 | \\uC774\\uBA54\\uC77C : help@harbor.school\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                /* @__PURE__ */ jsx(\"a\", { href: \"#\", className: \"underline\", children: \"\\uC774\\uC6A9\\uC57D\\uAD00\" }),\n                \" \",\n                \"|\",\n                \" \",\n                /* @__PURE__ */ jsx(\"a\", { href: \"#\", className: \"underline\", children: \"\\uAC1C\\uC778\\uC815\\uBCF4\\uCC98\\uB9AC\\uBC29\\uCE68\" })\n              ] }),\n              /* @__PURE__ */ jsx(\n                \"p\",\n                {\n                  className: \"mt-4\",\n                  style: { color: colors.textLight, fontSize: \"0.875rem\" },\n                  children: \"\\xA9 2024 Harbor School. All rights reserved.\"\n                }\n              )\n            ]\n          }\n        )\n      ]\n    }\n  );\n}\n\nexport {\n  Framer101_3\n};\n","import {\n  triggerConversionAPI\n} from \"./chunk-SIZSNBFW.mjs\";\n\n// src/utils/useCourseDetailConversionTracking.ts\nimport { useEffect } from \"react\";\nfunction useCourseDetailConversionTracking() {\n  const courseId = getCourseIdFromPath();\n  useEffect(() => {\n    if (!courseId) return;\n    const sessionKey = `conversion:CourseDetail_30s:sent:${courseId}`;\n    if (sessionStorage.getItem(sessionKey) === \"1\") return;\n    const timerId = window.setTimeout(() => {\n      sessionStorage.setItem(sessionKey, \"1\");\n      triggerConversionAPI(\"CourseDetail_30s\");\n    }, 3e4);\n    return () => window.clearTimeout(timerId);\n  }, [courseId]);\n  useEffect(() => {\n    if (!courseId) return;\n    let fired = false;\n    let ticking = false;\n    const getDocumentHeight = () => {\n      const body = document.body;\n      const doc = document.documentElement;\n      return Math.max(\n        (body == null ? void 0 : body.scrollHeight) || 0,\n        (body == null ? void 0 : body.offsetHeight) || 0,\n        (doc == null ? void 0 : doc.clientHeight) || 0,\n        (doc == null ? void 0 : doc.scrollHeight) || 0,\n        (doc == null ? void 0 : doc.offsetHeight) || 0\n      );\n    };\n    const checkScroll = () => {\n      ticking = false;\n      if (fired) return;\n      const doc = document.documentElement;\n      const scrollTop = window.scrollY || doc.scrollTop || 0;\n      const viewport = window.innerHeight || doc.clientHeight || 0;\n      const docHeight = getDocumentHeight();\n      if (!docHeight) return;\n      if ((scrollTop + viewport) / docHeight >= 0.5) {\n        const sessionKey = `conversion:CourseDetail_Scroll50:sent:${courseId}`;\n        if (sessionStorage.getItem(sessionKey) === \"1\") return;\n        fired = true;\n        sessionStorage.setItem(sessionKey, \"1\");\n        window.removeEventListener(\"scroll\", onScroll);\n        triggerConversionAPI(\"CourseDetail_Scroll50\");\n      }\n    };\n    const onScroll = () => {\n      if (ticking) return;\n      ticking = true;\n      window.requestAnimationFrame(checkScroll);\n    };\n    window.addEventListener(\"scroll\", onScroll, { passive: true });\n    checkScroll();\n    return () => window.removeEventListener(\"scroll\", onScroll);\n  }, [courseId]);\n}\nfunction getCourseIdFromPath() {\n  if (typeof window === \"undefined\") return void 0;\n  const pathParts = window.location.pathname.split(\"/\");\n  return pathParts[1] === \"courses\" ? pathParts[2] : void 0;\n}\n\nexport {\n  useCourseDetailConversionTracking\n};\n","var __awaiter = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nconst resolveFetch = (customFetch) => {\n  let _fetch;\n  if (customFetch) {\n    _fetch = customFetch;\n  } else if (typeof fetch === \"undefined\") {\n    _fetch = (...args) => __awaiter(void 0, void 0, void 0, function* () {\n      return yield (yield import(\"/-/cross-fetch@v3.1.5-rZpYflwCvsXnXC1DUbBX/dist=es2019,mode=imports/optimized/cross-fetch.js\")).fetch(...args);\n    });\n  } else {\n    _fetch = fetch;\n  }\n  return (...args) => _fetch(...args);\n};\nclass FunctionsError extends Error {\n  constructor(message, name = \"FunctionsError\", context) {\n    super(message);\n    super.name = name;\n    this.context = context;\n  }\n}\nclass FunctionsFetchError extends FunctionsError {\n  constructor(context) {\n    super(\"Failed to send a request to the Edge Function\", \"FunctionsFetchError\", context);\n  }\n}\nclass FunctionsRelayError extends FunctionsError {\n  constructor(context) {\n    super(\"Relay Error invoking the Edge Function\", \"FunctionsRelayError\", context);\n  }\n}\nclass FunctionsHttpError extends FunctionsError {\n  constructor(context) {\n    super(\"Edge Function returned a non-2xx status code\", \"FunctionsHttpError\", context);\n  }\n}\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nclass FunctionsClient {\n  constructor(url, {headers = {}, customFetch} = {}) {\n    this.url = url;\n    this.headers = headers;\n    this.fetch = resolveFetch(customFetch);\n  }\n  setAuth(token) {\n    this.headers.Authorization = `Bearer ${token}`;\n  }\n  invoke(functionName, options = {}) {\n    var _a;\n    return __awaiter$1(this, void 0, void 0, function* () {\n      try {\n        const {headers, method, body: functionArgs} = options;\n        let _headers = {};\n        let body;\n        if (functionArgs && (headers && !Object.prototype.hasOwnProperty.call(headers, \"Content-Type\") || !headers)) {\n          if (typeof Blob !== \"undefined\" && functionArgs instanceof Blob || functionArgs instanceof ArrayBuffer) {\n            _headers[\"Content-Type\"] = \"application/octet-stream\";\n            body = functionArgs;\n          } else if (typeof functionArgs === \"string\") {\n            _headers[\"Content-Type\"] = \"text/plain\";\n            body = functionArgs;\n          } else if (typeof FormData !== \"undefined\" && functionArgs instanceof FormData) {\n            body = functionArgs;\n          } else {\n            _headers[\"Content-Type\"] = \"application/json\";\n            body = JSON.stringify(functionArgs);\n          }\n        }\n        const response = yield this.fetch(`${this.url}/${functionName}`, {\n          method: method || \"POST\",\n          headers: Object.assign(Object.assign(Object.assign({}, _headers), this.headers), headers),\n          body\n        }).catch((fetchError) => {\n          throw new FunctionsFetchError(fetchError);\n        });\n        const isRelayError = response.headers.get(\"x-relay-error\");\n        if (isRelayError && isRelayError === \"true\") {\n          throw new FunctionsRelayError(response);\n        }\n        if (!response.ok) {\n          throw new FunctionsHttpError(response);\n        }\n        let responseType = ((_a = response.headers.get(\"Content-Type\")) !== null && _a !== void 0 ? _a : \"text/plain\").split(\";\")[0].trim();\n        let data;\n        if (responseType === \"application/json\") {\n          data = yield response.json();\n        } else if (responseType === \"application/octet-stream\") {\n          data = yield response.blob();\n        } else if (responseType === \"multipart/form-data\") {\n          data = yield response.formData();\n        } else {\n          data = yield response.text();\n        }\n        return {data, error: null};\n      } catch (error) {\n        return {data: null, error};\n      }\n    });\n  }\n}\nexport {FunctionsClient, FunctionsError, FunctionsFetchError, FunctionsHttpError, FunctionsRelayError};\nexport default null;\n","import crossFetch from \"/-/cross-fetch@v3.1.5-rZpYflwCvsXnXC1DUbBX/dist=es2019,mode=imports/optimized/cross-fetch.js\";\nclass PostgrestBuilder {\n  constructor(builder) {\n    this.shouldThrowOnError = false;\n    this.method = builder.method;\n    this.url = builder.url;\n    this.headers = builder.headers;\n    this.schema = builder.schema;\n    this.body = builder.body;\n    this.shouldThrowOnError = builder.shouldThrowOnError;\n    this.signal = builder.signal;\n    this.allowEmpty = builder.allowEmpty;\n    if (builder.fetch) {\n      this.fetch = builder.fetch;\n    } else if (typeof fetch === \"undefined\") {\n      this.fetch = crossFetch;\n    } else {\n      this.fetch = fetch;\n    }\n  }\n  throwOnError() {\n    this.shouldThrowOnError = true;\n    return this;\n  }\n  then(onfulfilled, onrejected) {\n    if (this.schema === void 0)\n      ;\n    else if ([\"GET\", \"HEAD\"].includes(this.method)) {\n      this.headers[\"Accept-Profile\"] = this.schema;\n    } else {\n      this.headers[\"Content-Profile\"] = this.schema;\n    }\n    if (this.method !== \"GET\" && this.method !== \"HEAD\") {\n      this.headers[\"Content-Type\"] = \"application/json\";\n    }\n    const _fetch = this.fetch;\n    let res = _fetch(this.url.toString(), {\n      method: this.method,\n      headers: this.headers,\n      body: JSON.stringify(this.body),\n      signal: this.signal\n    }).then(async (res2) => {\n      var _a, _b, _c;\n      let error = null;\n      let data = null;\n      let count = null;\n      let status = res2.status;\n      let statusText = res2.statusText;\n      if (res2.ok) {\n        if (this.method !== \"HEAD\") {\n          const body = await res2.text();\n          if (body === \"\")\n            ;\n          else if (this.headers[\"Accept\"] === \"text/csv\") {\n            data = body;\n          } else if (this.headers[\"Accept\"] && this.headers[\"Accept\"].includes(\"application/vnd.pgrst.plan+text\")) {\n            data = body;\n          } else {\n            data = JSON.parse(body);\n          }\n        }\n        const countHeader = (_a = this.headers[\"Prefer\"]) === null || _a === void 0 ? void 0 : _a.match(/count=(exact|planned|estimated)/);\n        const contentRange = (_b = res2.headers.get(\"content-range\")) === null || _b === void 0 ? void 0 : _b.split(\"/\");\n        if (countHeader && contentRange && contentRange.length > 1) {\n          count = parseInt(contentRange[1]);\n        }\n      } else {\n        const body = await res2.text();\n        try {\n          error = JSON.parse(body);\n          if (Array.isArray(error) && res2.status === 404) {\n            data = [];\n            error = null;\n            status = 200;\n            statusText = \"OK\";\n          }\n        } catch (_d) {\n          if (res2.status === 404 && body === \"\") {\n            status = 204;\n            statusText = \"No Content\";\n          } else {\n            error = {\n              message: body\n            };\n          }\n        }\n        if (error && this.allowEmpty && ((_c = error === null || error === void 0 ? void 0 : error.details) === null || _c === void 0 ? void 0 : _c.includes(\"Results contain 0 rows\"))) {\n          error = null;\n          status = 200;\n          statusText = \"OK\";\n        }\n        if (error && this.shouldThrowOnError) {\n          throw error;\n        }\n      }\n      const postgrestResponse = {\n        error,\n        data,\n        count,\n        status,\n        statusText\n      };\n      return postgrestResponse;\n    });\n    if (!this.shouldThrowOnError) {\n      res = res.catch((fetchError) => ({\n        error: {\n          message: `FetchError: ${fetchError.message}`,\n          details: \"\",\n          hint: \"\",\n          code: fetchError.code || \"\"\n        },\n        data: null,\n        count: null,\n        status: 0,\n        statusText: \"\"\n      }));\n    }\n    return res.then(onfulfilled, onrejected);\n  }\n}\nclass PostgrestTransformBuilder extends PostgrestBuilder {\n  select(columns) {\n    let quoted = false;\n    const cleanedColumns = (columns !== null && columns !== void 0 ? columns : \"*\").split(\"\").map((c) => {\n      if (/\\s/.test(c) && !quoted) {\n        return \"\";\n      }\n      if (c === '\"') {\n        quoted = !quoted;\n      }\n      return c;\n    }).join(\"\");\n    this.url.searchParams.set(\"select\", cleanedColumns);\n    if (this.headers[\"Prefer\"]) {\n      this.headers[\"Prefer\"] += \",\";\n    }\n    this.headers[\"Prefer\"] += \"return=representation\";\n    return this;\n  }\n  order(column, {ascending = true, nullsFirst, foreignTable} = {}) {\n    const key = foreignTable ? `${foreignTable}.order` : \"order\";\n    const existingOrder = this.url.searchParams.get(key);\n    this.url.searchParams.set(key, `${existingOrder ? `${existingOrder},` : \"\"}${column}.${ascending ? \"asc\" : \"desc\"}${nullsFirst === void 0 ? \"\" : nullsFirst ? \".nullsfirst\" : \".nullslast\"}`);\n    return this;\n  }\n  limit(count, {foreignTable} = {}) {\n    const key = typeof foreignTable === \"undefined\" ? \"limit\" : `${foreignTable}.limit`;\n    this.url.searchParams.set(key, `${count}`);\n    return this;\n  }\n  range(from, to, {foreignTable} = {}) {\n    const keyOffset = typeof foreignTable === \"undefined\" ? \"offset\" : `${foreignTable}.offset`;\n    const keyLimit = typeof foreignTable === \"undefined\" ? \"limit\" : `${foreignTable}.limit`;\n    this.url.searchParams.set(keyOffset, `${from}`);\n    this.url.searchParams.set(keyLimit, `${to - from + 1}`);\n    return this;\n  }\n  abortSignal(signal) {\n    this.signal = signal;\n    return this;\n  }\n  single() {\n    this.headers[\"Accept\"] = \"application/vnd.pgrst.object+json\";\n    return this;\n  }\n  maybeSingle() {\n    this.headers[\"Accept\"] = \"application/vnd.pgrst.object+json\";\n    this.allowEmpty = true;\n    return this;\n  }\n  csv() {\n    this.headers[\"Accept\"] = \"text/csv\";\n    return this;\n  }\n  geojson() {\n    this.headers[\"Accept\"] = \"application/geo+json\";\n    return this;\n  }\n  explain({analyze = false, verbose = false, settings = false, buffers = false, wal = false, format = \"text\"} = {}) {\n    const options = [\n      analyze ? \"analyze\" : null,\n      verbose ? \"verbose\" : null,\n      settings ? \"settings\" : null,\n      buffers ? \"buffers\" : null,\n      wal ? \"wal\" : null\n    ].filter(Boolean).join(\"|\");\n    const forMediatype = this.headers[\"Accept\"];\n    this.headers[\"Accept\"] = `application/vnd.pgrst.plan+${format}; for=\"${forMediatype}\"; options=${options};`;\n    if (format === \"json\")\n      return this;\n    else\n      return this;\n  }\n  rollback() {\n    var _a;\n    if (((_a = this.headers[\"Prefer\"]) !== null && _a !== void 0 ? _a : \"\").trim().length > 0) {\n      this.headers[\"Prefer\"] += \",tx=rollback\";\n    } else {\n      this.headers[\"Prefer\"] = \"tx=rollback\";\n    }\n    return this;\n  }\n  returns() {\n    return this;\n  }\n}\nclass PostgrestFilterBuilder extends PostgrestTransformBuilder {\n  eq(column, value) {\n    this.url.searchParams.append(column, `eq.${value}`);\n    return this;\n  }\n  neq(column, value) {\n    this.url.searchParams.append(column, `neq.${value}`);\n    return this;\n  }\n  gt(column, value) {\n    this.url.searchParams.append(column, `gt.${value}`);\n    return this;\n  }\n  gte(column, value) {\n    this.url.searchParams.append(column, `gte.${value}`);\n    return this;\n  }\n  lt(column, value) {\n    this.url.searchParams.append(column, `lt.${value}`);\n    return this;\n  }\n  lte(column, value) {\n    this.url.searchParams.append(column, `lte.${value}`);\n    return this;\n  }\n  like(column, pattern) {\n    this.url.searchParams.append(column, `like.${pattern}`);\n    return this;\n  }\n  ilike(column, pattern) {\n    this.url.searchParams.append(column, `ilike.${pattern}`);\n    return this;\n  }\n  is(column, value) {\n    this.url.searchParams.append(column, `is.${value}`);\n    return this;\n  }\n  in(column, values) {\n    const cleanedValues = values.map((s) => {\n      if (typeof s === \"string\" && new RegExp(\"[,()]\").test(s))\n        return `\"${s}\"`;\n      else\n        return `${s}`;\n    }).join(\",\");\n    this.url.searchParams.append(column, `in.(${cleanedValues})`);\n    return this;\n  }\n  contains(column, value) {\n    if (typeof value === \"string\") {\n      this.url.searchParams.append(column, `cs.${value}`);\n    } else if (Array.isArray(value)) {\n      this.url.searchParams.append(column, `cs.{${value.join(\",\")}}`);\n    } else {\n      this.url.searchParams.append(column, `cs.${JSON.stringify(value)}`);\n    }\n    return this;\n  }\n  containedBy(column, value) {\n    if (typeof value === \"string\") {\n      this.url.searchParams.append(column, `cd.${value}`);\n    } else if (Array.isArray(value)) {\n      this.url.searchParams.append(column, `cd.{${value.join(\",\")}}`);\n    } else {\n      this.url.searchParams.append(column, `cd.${JSON.stringify(value)}`);\n    }\n    return this;\n  }\n  rangeGt(column, range) {\n    this.url.searchParams.append(column, `sr.${range}`);\n    return this;\n  }\n  rangeGte(column, range) {\n    this.url.searchParams.append(column, `nxl.${range}`);\n    return this;\n  }\n  rangeLt(column, range) {\n    this.url.searchParams.append(column, `sl.${range}`);\n    return this;\n  }\n  rangeLte(column, range) {\n    this.url.searchParams.append(column, `nxr.${range}`);\n    return this;\n  }\n  rangeAdjacent(column, range) {\n    this.url.searchParams.append(column, `adj.${range}`);\n    return this;\n  }\n  overlaps(column, value) {\n    if (typeof value === \"string\") {\n      this.url.searchParams.append(column, `ov.${value}`);\n    } else {\n      this.url.searchParams.append(column, `ov.{${value.join(\",\")}}`);\n    }\n    return this;\n  }\n  textSearch(column, query, {config, type} = {}) {\n    let typePart = \"\";\n    if (type === \"plain\") {\n      typePart = \"pl\";\n    } else if (type === \"phrase\") {\n      typePart = \"ph\";\n    } else if (type === \"websearch\") {\n      typePart = \"w\";\n    }\n    const configPart = config === void 0 ? \"\" : `(${config})`;\n    this.url.searchParams.append(column, `${typePart}fts${configPart}.${query}`);\n    return this;\n  }\n  match(query) {\n    Object.entries(query).forEach(([column, value]) => {\n      this.url.searchParams.append(column, `eq.${value}`);\n    });\n    return this;\n  }\n  not(column, operator, value) {\n    this.url.searchParams.append(column, `not.${operator}.${value}`);\n    return this;\n  }\n  or(filters, {foreignTable} = {}) {\n    const key = foreignTable ? `${foreignTable}.or` : \"or\";\n    this.url.searchParams.append(key, `(${filters})`);\n    return this;\n  }\n  filter(column, operator, value) {\n    this.url.searchParams.append(column, `${operator}.${value}`);\n    return this;\n  }\n}\nclass PostgrestQueryBuilder {\n  constructor(url, {headers = {}, schema, fetch: fetch2}) {\n    this.url = url;\n    this.headers = headers;\n    this.schema = schema;\n    this.fetch = fetch2;\n  }\n  select(columns, {head = false, count} = {}) {\n    const method = head ? \"HEAD\" : \"GET\";\n    let quoted = false;\n    const cleanedColumns = (columns !== null && columns !== void 0 ? columns : \"*\").split(\"\").map((c) => {\n      if (/\\s/.test(c) && !quoted) {\n        return \"\";\n      }\n      if (c === '\"') {\n        quoted = !quoted;\n      }\n      return c;\n    }).join(\"\");\n    this.url.searchParams.set(\"select\", cleanedColumns);\n    if (count) {\n      this.headers[\"Prefer\"] = `count=${count}`;\n    }\n    return new PostgrestFilterBuilder({\n      method,\n      url: this.url,\n      headers: this.headers,\n      schema: this.schema,\n      fetch: this.fetch,\n      allowEmpty: false\n    });\n  }\n  insert(values, {count} = {}) {\n    const method = \"POST\";\n    const prefersHeaders = [];\n    const body = values;\n    if (count) {\n      prefersHeaders.push(`count=${count}`);\n    }\n    if (this.headers[\"Prefer\"]) {\n      prefersHeaders.unshift(this.headers[\"Prefer\"]);\n    }\n    this.headers[\"Prefer\"] = prefersHeaders.join(\",\");\n    if (Array.isArray(values)) {\n      const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\n      if (columns.length > 0) {\n        const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\n        this.url.searchParams.set(\"columns\", uniqueColumns.join(\",\"));\n      }\n    }\n    return new PostgrestFilterBuilder({\n      method,\n      url: this.url,\n      headers: this.headers,\n      schema: this.schema,\n      body,\n      fetch: this.fetch,\n      allowEmpty: false\n    });\n  }\n  upsert(values, {onConflict, ignoreDuplicates = false, count} = {}) {\n    const method = \"POST\";\n    const prefersHeaders = [`resolution=${ignoreDuplicates ? \"ignore\" : \"merge\"}-duplicates`];\n    if (onConflict !== void 0)\n      this.url.searchParams.set(\"on_conflict\", onConflict);\n    const body = values;\n    if (count) {\n      prefersHeaders.push(`count=${count}`);\n    }\n    if (this.headers[\"Prefer\"]) {\n      prefersHeaders.unshift(this.headers[\"Prefer\"]);\n    }\n    this.headers[\"Prefer\"] = prefersHeaders.join(\",\");\n    return new PostgrestFilterBuilder({\n      method,\n      url: this.url,\n      headers: this.headers,\n      schema: this.schema,\n      body,\n      fetch: this.fetch,\n      allowEmpty: false\n    });\n  }\n  update(values, {count} = {}) {\n    const method = \"PATCH\";\n    const prefersHeaders = [];\n    const body = values;\n    if (count) {\n      prefersHeaders.push(`count=${count}`);\n    }\n    if (this.headers[\"Prefer\"]) {\n      prefersHeaders.unshift(this.headers[\"Prefer\"]);\n    }\n    this.headers[\"Prefer\"] = prefersHeaders.join(\",\");\n    return new PostgrestFilterBuilder({\n      method,\n      url: this.url,\n      headers: this.headers,\n      schema: this.schema,\n      body,\n      fetch: this.fetch,\n      allowEmpty: false\n    });\n  }\n  delete({count} = {}) {\n    const method = \"DELETE\";\n    const prefersHeaders = [];\n    if (count) {\n      prefersHeaders.push(`count=${count}`);\n    }\n    if (this.headers[\"Prefer\"]) {\n      prefersHeaders.unshift(this.headers[\"Prefer\"]);\n    }\n    this.headers[\"Prefer\"] = prefersHeaders.join(\",\");\n    return new PostgrestFilterBuilder({\n      method,\n      url: this.url,\n      headers: this.headers,\n      schema: this.schema,\n      fetch: this.fetch,\n      allowEmpty: false\n    });\n  }\n}\nconst version = \"1.4.1\";\nconst DEFAULT_HEADERS = {\"X-Client-Info\": `postgrest-js/${version}`};\nclass PostgrestClient {\n  constructor(url, {headers = {}, schema, fetch: fetch2} = {}) {\n    this.url = url;\n    this.headers = Object.assign(Object.assign({}, DEFAULT_HEADERS), headers);\n    this.schema = schema;\n    this.fetch = fetch2;\n  }\n  from(relation) {\n    const url = new URL(`${this.url}/${relation}`);\n    return new PostgrestQueryBuilder(url, {\n      headers: Object.assign({}, this.headers),\n      schema: this.schema,\n      fetch: this.fetch\n    });\n  }\n  rpc(fn, args = {}, {head = false, count} = {}) {\n    let method;\n    const url = new URL(`${this.url}/rpc/${fn}`);\n    let body;\n    if (head) {\n      method = \"HEAD\";\n      Object.entries(args).forEach(([name, value]) => {\n        url.searchParams.append(name, `${value}`);\n      });\n    } else {\n      method = \"POST\";\n      body = args;\n    }\n    const headers = Object.assign({}, this.headers);\n    if (count) {\n      headers[\"Prefer\"] = `count=${count}`;\n    }\n    return new PostgrestFilterBuilder({\n      method,\n      url,\n      headers,\n      schema: this.schema,\n      body,\n      fetch: this.fetch,\n      allowEmpty: false\n    });\n  }\n}\nexport {PostgrestBuilder, PostgrestClient, PostgrestFilterBuilder, PostgrestQueryBuilder, PostgrestTransformBuilder};\nexport default null;\n","var naiveFallback = function() {\n  if (typeof self === \"object\" && self)\n    return self;\n  if (typeof window === \"object\" && window)\n    return window;\n  throw new Error(\"Unable to resolve global `this`\");\n};\nvar __VIRTUAL_FILE = function() {\n  if (this)\n    return this;\n  if (typeof globalThis === \"object\" && globalThis)\n    return globalThis;\n  try {\n    Object.defineProperty(Object.prototype, \"__global__\", {\n      get: function() {\n        return this;\n      },\n      configurable: true\n    });\n  } catch (error) {\n    return naiveFallback();\n  }\n  try {\n    if (!__global__)\n      return naiveFallback();\n    return __global__;\n  } finally {\n    delete Object.prototype.__global__;\n  }\n}();\nexport default __VIRTUAL_FILE;\n","import require$$0$1 from \"/-/es5-ext@v0.10.53-QgoIgxGeG8vPfAwjei6y/dist=es2019,mode=imports/unoptimized/global.js\";\nconst name = \"websocket\";\nconst description = \"Websocket Client & Server Library implementing the WebSocket protocol as specified in RFC 6455.\";\nconst keywords = [\n  \"websocket\",\n  \"websockets\",\n  \"socket\",\n  \"networking\",\n  \"comet\",\n  \"push\",\n  \"RFC-6455\",\n  \"realtime\",\n  \"server\",\n  \"client\"\n];\nconst author = \"Brian McKelvey <theturtle32@gmail.com> (https://github.com/theturtle32)\";\nconst contributors = [\n  \"I\\xF1aki Baz Castillo <ibc@aliax.net> (http://dev.sipdoc.net)\"\n];\nconst version = \"1.0.34\";\nconst repository = {\n  type: \"git\",\n  url: \"https://github.com/theturtle32/WebSocket-Node.git\"\n};\nconst homepage = \"https://github.com/theturtle32/WebSocket-Node\";\nconst engines = {\n  node: \">=4.0.0\"\n};\nconst dependencies = {\n  bufferutil: \"^4.0.1\",\n  debug: \"^2.2.0\",\n  \"es5-ext\": \"^0.10.50\",\n  \"typedarray-to-buffer\": \"^3.1.5\",\n  \"utf-8-validate\": \"^5.0.2\",\n  yaeti: \"^0.0.6\"\n};\nconst devDependencies = {\n  \"buffer-equal\": \"^1.0.0\",\n  gulp: \"^4.0.2\",\n  \"gulp-jshint\": \"^2.0.4\",\n  \"jshint-stylish\": \"^2.2.1\",\n  jshint: \"^2.0.0\",\n  tape: \"^4.9.1\"\n};\nconst config = {\n  verbose: false\n};\nconst scripts = {\n  test: \"tape test/unit/*.js\",\n  gulp: \"gulp\"\n};\nconst main = \"index\";\nconst directories = {\n  lib: \"./lib\"\n};\nconst browser = \"lib/browser.js\";\nconst license = \"Apache-2.0\";\nvar require$$0 = {\n  name,\n  description,\n  keywords,\n  author,\n  contributors,\n  version,\n  repository,\n  homepage,\n  engines,\n  dependencies,\n  devDependencies,\n  config,\n  scripts,\n  main,\n  directories,\n  browser,\n  license\n};\nvar version$1 = require$$0.version;\nvar _globalThis;\nif (typeof globalThis === \"object\") {\n  _globalThis = globalThis;\n} else {\n  try {\n    _globalThis = require$$0$1;\n  } catch (error) {\n  } finally {\n    if (!_globalThis && typeof window !== \"undefined\") {\n      _globalThis = window;\n    }\n    if (!_globalThis) {\n      throw new Error(\"Could not determine global this\");\n    }\n  }\n}\nvar NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;\nfunction W3CWebSocket(uri, protocols) {\n  var native_instance;\n  if (protocols) {\n    native_instance = new NativeWebSocket(uri, protocols);\n  } else {\n    native_instance = new NativeWebSocket(uri);\n  }\n  return native_instance;\n}\nif (NativeWebSocket) {\n  [\"CONNECTING\", \"OPEN\", \"CLOSING\", \"CLOSED\"].forEach(function(prop) {\n    Object.defineProperty(W3CWebSocket, prop, {\n      get: function() {\n        return NativeWebSocket[prop];\n      }\n    });\n  });\n}\nvar browser$1 = {\n  w3cwebsocket: NativeWebSocket ? W3CWebSocket : null,\n  version: version$1\n};\nexport default browser$1;\nvar w3cwebsocket = browser$1.w3cwebsocket;\nexport {browser$1 as __moduleExports, w3cwebsocket};\n","import __commonjs_module0 from \"/-/websocket@v1.0.34-bITKCQn27Ks1QQoRgk94/dist=es2019,mode=imports/optimized/websocket.js\";\nconst {w3cwebsocket} = __commonjs_module0;\n;\nconst version = \"2.6.0\";\nconst DEFAULT_HEADERS = {\"X-Client-Info\": `realtime-js/${version}`};\nconst VSN = \"1.0.0\";\nconst DEFAULT_TIMEOUT = 1e4;\nconst WS_CLOSE_NORMAL = 1e3;\nvar SOCKET_STATES;\n(function(SOCKET_STATES2) {\n  SOCKET_STATES2[SOCKET_STATES2[\"connecting\"] = 0] = \"connecting\";\n  SOCKET_STATES2[SOCKET_STATES2[\"open\"] = 1] = \"open\";\n  SOCKET_STATES2[SOCKET_STATES2[\"closing\"] = 2] = \"closing\";\n  SOCKET_STATES2[SOCKET_STATES2[\"closed\"] = 3] = \"closed\";\n})(SOCKET_STATES || (SOCKET_STATES = {}));\nvar CHANNEL_STATES;\n(function(CHANNEL_STATES2) {\n  CHANNEL_STATES2[\"closed\"] = \"closed\";\n  CHANNEL_STATES2[\"errored\"] = \"errored\";\n  CHANNEL_STATES2[\"joined\"] = \"joined\";\n  CHANNEL_STATES2[\"joining\"] = \"joining\";\n  CHANNEL_STATES2[\"leaving\"] = \"leaving\";\n})(CHANNEL_STATES || (CHANNEL_STATES = {}));\nvar CHANNEL_EVENTS;\n(function(CHANNEL_EVENTS2) {\n  CHANNEL_EVENTS2[\"close\"] = \"phx_close\";\n  CHANNEL_EVENTS2[\"error\"] = \"phx_error\";\n  CHANNEL_EVENTS2[\"join\"] = \"phx_join\";\n  CHANNEL_EVENTS2[\"reply\"] = \"phx_reply\";\n  CHANNEL_EVENTS2[\"leave\"] = \"phx_leave\";\n  CHANNEL_EVENTS2[\"access_token\"] = \"access_token\";\n})(CHANNEL_EVENTS || (CHANNEL_EVENTS = {}));\nvar TRANSPORTS;\n(function(TRANSPORTS2) {\n  TRANSPORTS2[\"websocket\"] = \"websocket\";\n})(TRANSPORTS || (TRANSPORTS = {}));\nvar CONNECTION_STATE;\n(function(CONNECTION_STATE2) {\n  CONNECTION_STATE2[\"Connecting\"] = \"connecting\";\n  CONNECTION_STATE2[\"Open\"] = \"open\";\n  CONNECTION_STATE2[\"Closing\"] = \"closing\";\n  CONNECTION_STATE2[\"Closed\"] = \"closed\";\n})(CONNECTION_STATE || (CONNECTION_STATE = {}));\nclass Timer {\n  constructor(callback, timerCalc) {\n    this.callback = callback;\n    this.timerCalc = timerCalc;\n    this.timer = void 0;\n    this.tries = 0;\n    this.callback = callback;\n    this.timerCalc = timerCalc;\n  }\n  reset() {\n    this.tries = 0;\n    clearTimeout(this.timer);\n  }\n  scheduleTimeout() {\n    clearTimeout(this.timer);\n    this.timer = setTimeout(() => {\n      this.tries = this.tries + 1;\n      this.callback();\n    }, this.timerCalc(this.tries + 1));\n  }\n}\nclass Serializer {\n  constructor() {\n    this.HEADER_LENGTH = 1;\n  }\n  decode(rawPayload, callback) {\n    if (rawPayload.constructor === ArrayBuffer) {\n      return callback(this._binaryDecode(rawPayload));\n    }\n    if (typeof rawPayload === \"string\") {\n      return callback(JSON.parse(rawPayload));\n    }\n    return callback({});\n  }\n  _binaryDecode(buffer) {\n    const view = new DataView(buffer);\n    const decoder = new TextDecoder();\n    return this._decodeBroadcast(buffer, view, decoder);\n  }\n  _decodeBroadcast(buffer, view, decoder) {\n    const topicSize = view.getUint8(1);\n    const eventSize = view.getUint8(2);\n    let offset = this.HEADER_LENGTH + 2;\n    const topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n    offset = offset + topicSize;\n    const event = decoder.decode(buffer.slice(offset, offset + eventSize));\n    offset = offset + eventSize;\n    const data = JSON.parse(decoder.decode(buffer.slice(offset, buffer.byteLength)));\n    return {ref: null, topic, event, payload: data};\n  }\n}\nclass Push {\n  constructor(channel, event, payload = {}, timeout = DEFAULT_TIMEOUT) {\n    this.channel = channel;\n    this.event = event;\n    this.payload = payload;\n    this.timeout = timeout;\n    this.sent = false;\n    this.timeoutTimer = void 0;\n    this.ref = \"\";\n    this.receivedResp = null;\n    this.recHooks = [];\n    this.refEvent = null;\n    this.rateLimited = false;\n  }\n  resend(timeout) {\n    this.timeout = timeout;\n    this._cancelRefEvent();\n    this.ref = \"\";\n    this.refEvent = null;\n    this.receivedResp = null;\n    this.sent = false;\n    this.send();\n  }\n  send() {\n    if (this._hasReceived(\"timeout\")) {\n      return;\n    }\n    this.startTimeout();\n    this.sent = true;\n    const status = this.channel.socket.push({\n      topic: this.channel.topic,\n      event: this.event,\n      payload: this.payload,\n      ref: this.ref,\n      join_ref: this.channel._joinRef()\n    });\n    if (status === \"rate limited\") {\n      this.rateLimited = true;\n    }\n  }\n  updatePayload(payload) {\n    this.payload = Object.assign(Object.assign({}, this.payload), payload);\n  }\n  receive(status, callback) {\n    var _a;\n    if (this._hasReceived(status)) {\n      callback((_a = this.receivedResp) === null || _a === void 0 ? void 0 : _a.response);\n    }\n    this.recHooks.push({status, callback});\n    return this;\n  }\n  startTimeout() {\n    if (this.timeoutTimer) {\n      return;\n    }\n    this.ref = this.channel.socket._makeRef();\n    this.refEvent = this.channel._replyEventName(this.ref);\n    const callback = (payload) => {\n      this._cancelRefEvent();\n      this._cancelTimeout();\n      this.receivedResp = payload;\n      this._matchReceive(payload);\n    };\n    this.channel._on(this.refEvent, {}, callback);\n    this.timeoutTimer = setTimeout(() => {\n      this.trigger(\"timeout\", {});\n    }, this.timeout);\n  }\n  trigger(status, response) {\n    if (this.refEvent)\n      this.channel._trigger(this.refEvent, {status, response});\n  }\n  destroy() {\n    this._cancelRefEvent();\n    this._cancelTimeout();\n  }\n  _cancelRefEvent() {\n    if (!this.refEvent) {\n      return;\n    }\n    this.channel._off(this.refEvent, {});\n  }\n  _cancelTimeout() {\n    clearTimeout(this.timeoutTimer);\n    this.timeoutTimer = void 0;\n  }\n  _matchReceive({status, response}) {\n    this.recHooks.filter((h) => h.status === status).forEach((h) => h.callback(response));\n  }\n  _hasReceived(status) {\n    return this.receivedResp && this.receivedResp.status === status;\n  }\n}\nvar REALTIME_PRESENCE_LISTEN_EVENTS;\n(function(REALTIME_PRESENCE_LISTEN_EVENTS2) {\n  REALTIME_PRESENCE_LISTEN_EVENTS2[\"SYNC\"] = \"sync\";\n  REALTIME_PRESENCE_LISTEN_EVENTS2[\"JOIN\"] = \"join\";\n  REALTIME_PRESENCE_LISTEN_EVENTS2[\"LEAVE\"] = \"leave\";\n})(REALTIME_PRESENCE_LISTEN_EVENTS || (REALTIME_PRESENCE_LISTEN_EVENTS = {}));\nclass RealtimePresence {\n  constructor(channel, opts) {\n    this.channel = channel;\n    this.state = {};\n    this.pendingDiffs = [];\n    this.joinRef = null;\n    this.caller = {\n      onJoin: () => {\n      },\n      onLeave: () => {\n      },\n      onSync: () => {\n      }\n    };\n    const events = (opts === null || opts === void 0 ? void 0 : opts.events) || {\n      state: \"presence_state\",\n      diff: \"presence_diff\"\n    };\n    this.channel._on(events.state, {}, (newState) => {\n      const {onJoin, onLeave, onSync} = this.caller;\n      this.joinRef = this.channel._joinRef();\n      this.state = RealtimePresence.syncState(this.state, newState, onJoin, onLeave);\n      this.pendingDiffs.forEach((diff) => {\n        this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\n      });\n      this.pendingDiffs = [];\n      onSync();\n    });\n    this.channel._on(events.diff, {}, (diff) => {\n      const {onJoin, onLeave, onSync} = this.caller;\n      if (this.inPendingSyncState()) {\n        this.pendingDiffs.push(diff);\n      } else {\n        this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\n        onSync();\n      }\n    });\n    this.onJoin((key, currentPresences, newPresences) => {\n      this.channel._trigger(\"presence\", {\n        event: \"join\",\n        key,\n        currentPresences,\n        newPresences\n      });\n    });\n    this.onLeave((key, currentPresences, leftPresences) => {\n      this.channel._trigger(\"presence\", {\n        event: \"leave\",\n        key,\n        currentPresences,\n        leftPresences\n      });\n    });\n    this.onSync(() => {\n      this.channel._trigger(\"presence\", {event: \"sync\"});\n    });\n  }\n  static syncState(currentState, newState, onJoin, onLeave) {\n    const state = this.cloneDeep(currentState);\n    const transformedState = this.transformState(newState);\n    const joins = {};\n    const leaves = {};\n    this.map(state, (key, presences) => {\n      if (!transformedState[key]) {\n        leaves[key] = presences;\n      }\n    });\n    this.map(transformedState, (key, newPresences) => {\n      const currentPresences = state[key];\n      if (currentPresences) {\n        const newPresenceRefs = newPresences.map((m) => m.presence_ref);\n        const curPresenceRefs = currentPresences.map((m) => m.presence_ref);\n        const joinedPresences = newPresences.filter((m) => curPresenceRefs.indexOf(m.presence_ref) < 0);\n        const leftPresences = currentPresences.filter((m) => newPresenceRefs.indexOf(m.presence_ref) < 0);\n        if (joinedPresences.length > 0) {\n          joins[key] = joinedPresences;\n        }\n        if (leftPresences.length > 0) {\n          leaves[key] = leftPresences;\n        }\n      } else {\n        joins[key] = newPresences;\n      }\n    });\n    return this.syncDiff(state, {joins, leaves}, onJoin, onLeave);\n  }\n  static syncDiff(state, diff, onJoin, onLeave) {\n    const {joins, leaves} = {\n      joins: this.transformState(diff.joins),\n      leaves: this.transformState(diff.leaves)\n    };\n    if (!onJoin) {\n      onJoin = () => {\n      };\n    }\n    if (!onLeave) {\n      onLeave = () => {\n      };\n    }\n    this.map(joins, (key, newPresences) => {\n      var _a;\n      const currentPresences = (_a = state[key]) !== null && _a !== void 0 ? _a : [];\n      state[key] = this.cloneDeep(newPresences);\n      if (currentPresences.length > 0) {\n        const joinedPresenceRefs = state[key].map((m) => m.presence_ref);\n        const curPresences = currentPresences.filter((m) => joinedPresenceRefs.indexOf(m.presence_ref) < 0);\n        state[key].unshift(...curPresences);\n      }\n      onJoin(key, currentPresences, newPresences);\n    });\n    this.map(leaves, (key, leftPresences) => {\n      let currentPresences = state[key];\n      if (!currentPresences)\n        return;\n      const presenceRefsToRemove = leftPresences.map((m) => m.presence_ref);\n      currentPresences = currentPresences.filter((m) => presenceRefsToRemove.indexOf(m.presence_ref) < 0);\n      state[key] = currentPresences;\n      onLeave(key, currentPresences, leftPresences);\n      if (currentPresences.length === 0)\n        delete state[key];\n    });\n    return state;\n  }\n  static map(obj, func) {\n    return Object.getOwnPropertyNames(obj).map((key) => func(key, obj[key]));\n  }\n  static transformState(state) {\n    state = this.cloneDeep(state);\n    return Object.getOwnPropertyNames(state).reduce((newState, key) => {\n      const presences = state[key];\n      if (\"metas\" in presences) {\n        newState[key] = presences.metas.map((presence) => {\n          presence[\"presence_ref\"] = presence[\"phx_ref\"];\n          delete presence[\"phx_ref\"];\n          delete presence[\"phx_ref_prev\"];\n          return presence;\n        });\n      } else {\n        newState[key] = presences;\n      }\n      return newState;\n    }, {});\n  }\n  static cloneDeep(obj) {\n    return JSON.parse(JSON.stringify(obj));\n  }\n  onJoin(callback) {\n    this.caller.onJoin = callback;\n  }\n  onLeave(callback) {\n    this.caller.onLeave = callback;\n  }\n  onSync(callback) {\n    this.caller.onSync = callback;\n  }\n  inPendingSyncState() {\n    return !this.joinRef || this.joinRef !== this.channel._joinRef();\n  }\n}\nvar PostgresTypes;\n(function(PostgresTypes2) {\n  PostgresTypes2[\"abstime\"] = \"abstime\";\n  PostgresTypes2[\"bool\"] = \"bool\";\n  PostgresTypes2[\"date\"] = \"date\";\n  PostgresTypes2[\"daterange\"] = \"daterange\";\n  PostgresTypes2[\"float4\"] = \"float4\";\n  PostgresTypes2[\"float8\"] = \"float8\";\n  PostgresTypes2[\"int2\"] = \"int2\";\n  PostgresTypes2[\"int4\"] = \"int4\";\n  PostgresTypes2[\"int4range\"] = \"int4range\";\n  PostgresTypes2[\"int8\"] = \"int8\";\n  PostgresTypes2[\"int8range\"] = \"int8range\";\n  PostgresTypes2[\"json\"] = \"json\";\n  PostgresTypes2[\"jsonb\"] = \"jsonb\";\n  PostgresTypes2[\"money\"] = \"money\";\n  PostgresTypes2[\"numeric\"] = \"numeric\";\n  PostgresTypes2[\"oid\"] = \"oid\";\n  PostgresTypes2[\"reltime\"] = \"reltime\";\n  PostgresTypes2[\"text\"] = \"text\";\n  PostgresTypes2[\"time\"] = \"time\";\n  PostgresTypes2[\"timestamp\"] = \"timestamp\";\n  PostgresTypes2[\"timestamptz\"] = \"timestamptz\";\n  PostgresTypes2[\"timetz\"] = \"timetz\";\n  PostgresTypes2[\"tsrange\"] = \"tsrange\";\n  PostgresTypes2[\"tstzrange\"] = \"tstzrange\";\n})(PostgresTypes || (PostgresTypes = {}));\nconst convertChangeData = (columns, record, options = {}) => {\n  var _a;\n  const skipTypes = (_a = options.skipTypes) !== null && _a !== void 0 ? _a : [];\n  return Object.keys(record).reduce((acc, rec_key) => {\n    acc[rec_key] = convertColumn(rec_key, columns, record, skipTypes);\n    return acc;\n  }, {});\n};\nconst convertColumn = (columnName, columns, record, skipTypes) => {\n  const column = columns.find((x) => x.name === columnName);\n  const colType = column === null || column === void 0 ? void 0 : column.type;\n  const value = record[columnName];\n  if (colType && !skipTypes.includes(colType)) {\n    return convertCell(colType, value);\n  }\n  return noop(value);\n};\nconst convertCell = (type, value) => {\n  if (type.charAt(0) === \"_\") {\n    const dataType = type.slice(1, type.length);\n    return toArray(value, dataType);\n  }\n  switch (type) {\n    case PostgresTypes.bool:\n      return toBoolean(value);\n    case PostgresTypes.float4:\n    case PostgresTypes.float8:\n    case PostgresTypes.int2:\n    case PostgresTypes.int4:\n    case PostgresTypes.int8:\n    case PostgresTypes.numeric:\n    case PostgresTypes.oid:\n      return toNumber(value);\n    case PostgresTypes.json:\n    case PostgresTypes.jsonb:\n      return toJson(value);\n    case PostgresTypes.timestamp:\n      return toTimestampString(value);\n    case PostgresTypes.abstime:\n    case PostgresTypes.date:\n    case PostgresTypes.daterange:\n    case PostgresTypes.int4range:\n    case PostgresTypes.int8range:\n    case PostgresTypes.money:\n    case PostgresTypes.reltime:\n    case PostgresTypes.text:\n    case PostgresTypes.time:\n    case PostgresTypes.timestamptz:\n    case PostgresTypes.timetz:\n    case PostgresTypes.tsrange:\n    case PostgresTypes.tstzrange:\n      return noop(value);\n    default:\n      return noop(value);\n  }\n};\nconst noop = (value) => {\n  return value;\n};\nconst toBoolean = (value) => {\n  switch (value) {\n    case \"t\":\n      return true;\n    case \"f\":\n      return false;\n    default:\n      return value;\n  }\n};\nconst toNumber = (value) => {\n  if (typeof value === \"string\") {\n    const parsedValue = parseFloat(value);\n    if (!Number.isNaN(parsedValue)) {\n      return parsedValue;\n    }\n  }\n  return value;\n};\nconst toJson = (value) => {\n  if (typeof value === \"string\") {\n    try {\n      return JSON.parse(value);\n    } catch (error) {\n      console.log(`JSON parse error: ${error}`);\n      return value;\n    }\n  }\n  return value;\n};\nconst toArray = (value, type) => {\n  if (typeof value !== \"string\") {\n    return value;\n  }\n  const lastIdx = value.length - 1;\n  const closeBrace = value[lastIdx];\n  const openBrace = value[0];\n  if (openBrace === \"{\" && closeBrace === \"}\") {\n    let arr;\n    const valTrim = value.slice(1, lastIdx);\n    try {\n      arr = JSON.parse(\"[\" + valTrim + \"]\");\n    } catch (_) {\n      arr = valTrim ? valTrim.split(\",\") : [];\n    }\n    return arr.map((val) => convertCell(type, val));\n  }\n  return value;\n};\nconst toTimestampString = (value) => {\n  if (typeof value === \"string\") {\n    return value.replace(\" \", \"T\");\n  }\n  return value;\n};\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nvar REALTIME_POSTGRES_CHANGES_LISTEN_EVENT;\n(function(REALTIME_POSTGRES_CHANGES_LISTEN_EVENT2) {\n  REALTIME_POSTGRES_CHANGES_LISTEN_EVENT2[\"ALL\"] = \"*\";\n  REALTIME_POSTGRES_CHANGES_LISTEN_EVENT2[\"INSERT\"] = \"INSERT\";\n  REALTIME_POSTGRES_CHANGES_LISTEN_EVENT2[\"UPDATE\"] = \"UPDATE\";\n  REALTIME_POSTGRES_CHANGES_LISTEN_EVENT2[\"DELETE\"] = \"DELETE\";\n})(REALTIME_POSTGRES_CHANGES_LISTEN_EVENT || (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = {}));\nvar REALTIME_LISTEN_TYPES;\n(function(REALTIME_LISTEN_TYPES2) {\n  REALTIME_LISTEN_TYPES2[\"BROADCAST\"] = \"broadcast\";\n  REALTIME_LISTEN_TYPES2[\"PRESENCE\"] = \"presence\";\n  REALTIME_LISTEN_TYPES2[\"POSTGRES_CHANGES\"] = \"postgres_changes\";\n})(REALTIME_LISTEN_TYPES || (REALTIME_LISTEN_TYPES = {}));\nvar REALTIME_SUBSCRIBE_STATES;\n(function(REALTIME_SUBSCRIBE_STATES2) {\n  REALTIME_SUBSCRIBE_STATES2[\"SUBSCRIBED\"] = \"SUBSCRIBED\";\n  REALTIME_SUBSCRIBE_STATES2[\"TIMED_OUT\"] = \"TIMED_OUT\";\n  REALTIME_SUBSCRIBE_STATES2[\"CLOSED\"] = \"CLOSED\";\n  REALTIME_SUBSCRIBE_STATES2[\"CHANNEL_ERROR\"] = \"CHANNEL_ERROR\";\n})(REALTIME_SUBSCRIBE_STATES || (REALTIME_SUBSCRIBE_STATES = {}));\nclass RealtimeChannel {\n  constructor(topic, params = {config: {}}, socket) {\n    this.topic = topic;\n    this.params = params;\n    this.socket = socket;\n    this.bindings = {};\n    this.state = CHANNEL_STATES.closed;\n    this.joinedOnce = false;\n    this.pushBuffer = [];\n    this.params.config = Object.assign({\n      broadcast: {ack: false, self: false},\n      presence: {key: \"\"}\n    }, params.config);\n    this.timeout = this.socket.timeout;\n    this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout);\n    this.rejoinTimer = new Timer(() => this._rejoinUntilConnected(), this.socket.reconnectAfterMs);\n    this.joinPush.receive(\"ok\", () => {\n      this.state = CHANNEL_STATES.joined;\n      this.rejoinTimer.reset();\n      this.pushBuffer.forEach((pushEvent) => pushEvent.send());\n      this.pushBuffer = [];\n    });\n    this._onClose(() => {\n      this.rejoinTimer.reset();\n      this.socket.log(\"channel\", `close ${this.topic} ${this._joinRef()}`);\n      this.state = CHANNEL_STATES.closed;\n      this.socket._remove(this);\n    });\n    this._onError((reason) => {\n      if (this._isLeaving() || this._isClosed()) {\n        return;\n      }\n      this.socket.log(\"channel\", `error ${this.topic}`, reason);\n      this.state = CHANNEL_STATES.errored;\n      this.rejoinTimer.scheduleTimeout();\n    });\n    this.joinPush.receive(\"timeout\", () => {\n      if (!this._isJoining()) {\n        return;\n      }\n      this.socket.log(\"channel\", `timeout ${this.topic}`, this.joinPush.timeout);\n      this.state = CHANNEL_STATES.errored;\n      this.rejoinTimer.scheduleTimeout();\n    });\n    this._on(CHANNEL_EVENTS.reply, {}, (payload, ref) => {\n      this._trigger(this._replyEventName(ref), payload);\n    });\n    this.presence = new RealtimePresence(this);\n  }\n  subscribe(callback, timeout = this.timeout) {\n    var _a, _b;\n    if (this.joinedOnce) {\n      throw `tried to subscribe multiple times. 'subscribe' can only be called a single time per channel instance`;\n    } else {\n      const {config: {broadcast, presence}} = this.params;\n      this._onError((e) => callback && callback(\"CHANNEL_ERROR\", e));\n      this._onClose(() => callback && callback(\"CLOSED\"));\n      const accessTokenPayload = {};\n      const config = {\n        broadcast,\n        presence,\n        postgres_changes: (_b = (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.map((r) => r.filter)) !== null && _b !== void 0 ? _b : []\n      };\n      if (this.socket.accessToken) {\n        accessTokenPayload.access_token = this.socket.accessToken;\n      }\n      this.updateJoinPayload(Object.assign({config}, accessTokenPayload));\n      this.joinedOnce = true;\n      this._rejoin(timeout);\n      this.joinPush.receive(\"ok\", ({postgres_changes: serverPostgresFilters}) => {\n        var _a2;\n        this.socket.accessToken && this.socket.setAuth(this.socket.accessToken);\n        if (serverPostgresFilters === void 0) {\n          callback && callback(\"SUBSCRIBED\");\n          return;\n        } else {\n          const clientPostgresBindings = this.bindings.postgres_changes;\n          const bindingsLen = (_a2 = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a2 !== void 0 ? _a2 : 0;\n          const newPostgresBindings = [];\n          for (let i = 0; i < bindingsLen; i++) {\n            const clientPostgresBinding = clientPostgresBindings[i];\n            const {filter: {event, schema, table, filter}} = clientPostgresBinding;\n            const serverPostgresFilter = serverPostgresFilters && serverPostgresFilters[i];\n            if (serverPostgresFilter && serverPostgresFilter.event === event && serverPostgresFilter.schema === schema && serverPostgresFilter.table === table && serverPostgresFilter.filter === filter) {\n              newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), {id: serverPostgresFilter.id}));\n            } else {\n              this.unsubscribe();\n              callback && callback(\"CHANNEL_ERROR\", new Error(\"mismatch between server and client bindings for postgres changes\"));\n              return;\n            }\n          }\n          this.bindings.postgres_changes = newPostgresBindings;\n          callback && callback(\"SUBSCRIBED\");\n          return;\n        }\n      }).receive(\"error\", (error) => {\n        callback && callback(\"CHANNEL_ERROR\", new Error(JSON.stringify(Object.values(error).join(\", \") || \"error\")));\n        return;\n      }).receive(\"timeout\", () => {\n        callback && callback(\"TIMED_OUT\");\n        return;\n      });\n    }\n    return this;\n  }\n  presenceState() {\n    return this.presence.state;\n  }\n  track(payload, opts = {}) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return yield this.send({\n        type: \"presence\",\n        event: \"track\",\n        payload\n      }, opts.timeout || this.timeout);\n    });\n  }\n  untrack(opts = {}) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return yield this.send({\n        type: \"presence\",\n        event: \"untrack\"\n      }, opts);\n    });\n  }\n  on(type, filter, callback) {\n    return this._on(type, filter, callback);\n  }\n  send(payload, opts = {}) {\n    return new Promise((resolve) => {\n      var _a, _b, _c;\n      const push = this._push(payload.type, payload, opts.timeout || this.timeout);\n      if (push.rateLimited) {\n        resolve(\"rate limited\");\n      }\n      if (payload.type === \"broadcast\" && !((_c = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.broadcast) === null || _c === void 0 ? void 0 : _c.ack)) {\n        resolve(\"ok\");\n      }\n      push.receive(\"ok\", () => resolve(\"ok\"));\n      push.receive(\"timeout\", () => resolve(\"timed out\"));\n    });\n  }\n  updateJoinPayload(payload) {\n    this.joinPush.updatePayload(payload);\n  }\n  unsubscribe(timeout = this.timeout) {\n    this.state = CHANNEL_STATES.leaving;\n    const onClose = () => {\n      this.socket.log(\"channel\", `leave ${this.topic}`);\n      this._trigger(CHANNEL_EVENTS.close, \"leave\", this._joinRef());\n    };\n    this.rejoinTimer.reset();\n    this.joinPush.destroy();\n    return new Promise((resolve) => {\n      const leavePush = new Push(this, CHANNEL_EVENTS.leave, {}, timeout);\n      leavePush.receive(\"ok\", () => {\n        onClose();\n        resolve(\"ok\");\n      }).receive(\"timeout\", () => {\n        onClose();\n        resolve(\"timed out\");\n      }).receive(\"error\", () => {\n        resolve(\"error\");\n      });\n      leavePush.send();\n      if (!this._canPush()) {\n        leavePush.trigger(\"ok\", {});\n      }\n    });\n  }\n  _push(event, payload, timeout = this.timeout) {\n    if (!this.joinedOnce) {\n      throw `tried to push '${event}' to '${this.topic}' before joining. Use channel.subscribe() before pushing events`;\n    }\n    let pushEvent = new Push(this, event, payload, timeout);\n    if (this._canPush()) {\n      pushEvent.send();\n    } else {\n      pushEvent.startTimeout();\n      this.pushBuffer.push(pushEvent);\n    }\n    return pushEvent;\n  }\n  _onMessage(_event, payload, _ref) {\n    return payload;\n  }\n  _isMember(topic) {\n    return this.topic === topic;\n  }\n  _joinRef() {\n    return this.joinPush.ref;\n  }\n  _trigger(type, payload, ref) {\n    var _a, _b;\n    const typeLower = type.toLocaleLowerCase();\n    const {close, error, leave, join} = CHANNEL_EVENTS;\n    const events = [close, error, leave, join];\n    if (ref && events.indexOf(typeLower) >= 0 && ref !== this._joinRef()) {\n      return;\n    }\n    let handledPayload = this._onMessage(typeLower, payload, ref);\n    if (payload && !handledPayload) {\n      throw \"channel onMessage callbacks must return the payload, modified or unmodified\";\n    }\n    if ([\"insert\", \"update\", \"delete\"].includes(typeLower)) {\n      (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.filter((bind) => {\n        var _a2, _b2, _c;\n        return ((_a2 = bind.filter) === null || _a2 === void 0 ? void 0 : _a2.event) === \"*\" || ((_c = (_b2 = bind.filter) === null || _b2 === void 0 ? void 0 : _b2.event) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase()) === typeLower;\n      }).map((bind) => bind.callback(handledPayload, ref));\n    } else {\n      (_b = this.bindings[typeLower]) === null || _b === void 0 ? void 0 : _b.filter((bind) => {\n        var _a2, _b2, _c, _d, _e, _f;\n        if ([\"broadcast\", \"presence\", \"postgres_changes\"].includes(typeLower)) {\n          if (\"id\" in bind) {\n            const bindId = bind.id;\n            const bindEvent = (_a2 = bind.filter) === null || _a2 === void 0 ? void 0 : _a2.event;\n            return bindId && ((_b2 = payload.ids) === null || _b2 === void 0 ? void 0 : _b2.includes(bindId)) && (bindEvent === \"*\" || (bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) === ((_c = payload.data) === null || _c === void 0 ? void 0 : _c.type.toLocaleLowerCase()));\n          } else {\n            const bindEvent = (_e = (_d = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _d === void 0 ? void 0 : _d.event) === null || _e === void 0 ? void 0 : _e.toLocaleLowerCase();\n            return bindEvent === \"*\" || bindEvent === ((_f = payload === null || payload === void 0 ? void 0 : payload.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase());\n          }\n        } else {\n          return bind.type.toLocaleLowerCase() === typeLower;\n        }\n      }).map((bind) => {\n        if (typeof handledPayload === \"object\" && \"ids\" in handledPayload) {\n          const postgresChanges = handledPayload.data;\n          const {schema, table, commit_timestamp, type: type2, errors} = postgresChanges;\n          const enrichedPayload = {\n            schema,\n            table,\n            commit_timestamp,\n            eventType: type2,\n            new: {},\n            old: {},\n            errors\n          };\n          handledPayload = Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));\n        }\n        bind.callback(handledPayload, ref);\n      });\n    }\n  }\n  _isClosed() {\n    return this.state === CHANNEL_STATES.closed;\n  }\n  _isJoined() {\n    return this.state === CHANNEL_STATES.joined;\n  }\n  _isJoining() {\n    return this.state === CHANNEL_STATES.joining;\n  }\n  _isLeaving() {\n    return this.state === CHANNEL_STATES.leaving;\n  }\n  _replyEventName(ref) {\n    return `chan_reply_${ref}`;\n  }\n  _on(type, filter, callback) {\n    const typeLower = type.toLocaleLowerCase();\n    const binding = {\n      type: typeLower,\n      filter,\n      callback\n    };\n    if (this.bindings[typeLower]) {\n      this.bindings[typeLower].push(binding);\n    } else {\n      this.bindings[typeLower] = [binding];\n    }\n    return this;\n  }\n  _off(type, filter) {\n    const typeLower = type.toLocaleLowerCase();\n    this.bindings[typeLower] = this.bindings[typeLower].filter((bind) => {\n      var _a;\n      return !(((_a = bind.type) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) === typeLower && RealtimeChannel.isEqual(bind.filter, filter));\n    });\n    return this;\n  }\n  static isEqual(obj1, obj2) {\n    if (Object.keys(obj1).length !== Object.keys(obj2).length) {\n      return false;\n    }\n    for (const k in obj1) {\n      if (obj1[k] !== obj2[k]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  _rejoinUntilConnected() {\n    this.rejoinTimer.scheduleTimeout();\n    if (this.socket.isConnected()) {\n      this._rejoin();\n    }\n  }\n  _onClose(callback) {\n    this._on(CHANNEL_EVENTS.close, {}, callback);\n  }\n  _onError(callback) {\n    this._on(CHANNEL_EVENTS.error, {}, (reason) => callback(reason));\n  }\n  _canPush() {\n    return this.socket.isConnected() && this._isJoined();\n  }\n  _rejoin(timeout = this.timeout) {\n    if (this._isLeaving()) {\n      return;\n    }\n    this.socket._leaveOpenTopic(this.topic);\n    this.state = CHANNEL_STATES.joining;\n    this.joinPush.resend(timeout);\n  }\n  _getPayloadRecords(payload) {\n    const records = {\n      new: {},\n      old: {}\n    };\n    if (payload.type === \"INSERT\" || payload.type === \"UPDATE\") {\n      records.new = convertChangeData(payload.columns, payload.record);\n    }\n    if (payload.type === \"UPDATE\" || payload.type === \"DELETE\") {\n      records.old = convertChangeData(payload.columns, payload.old_record);\n    }\n    return records;\n  }\n}\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nconst noop$1 = () => {\n};\nclass RealtimeClient {\n  constructor(endPoint, options) {\n    var _a;\n    this.accessToken = null;\n    this.channels = [];\n    this.endPoint = \"\";\n    this.headers = DEFAULT_HEADERS;\n    this.params = {};\n    this.timeout = DEFAULT_TIMEOUT;\n    this.transport = w3cwebsocket;\n    this.heartbeatIntervalMs = 3e4;\n    this.heartbeatTimer = void 0;\n    this.pendingHeartbeatRef = null;\n    this.ref = 0;\n    this.logger = noop$1;\n    this.conn = null;\n    this.sendBuffer = [];\n    this.serializer = new Serializer();\n    this.stateChangeCallbacks = {\n      open: [],\n      close: [],\n      error: [],\n      message: []\n    };\n    this.eventsPerSecondLimitMs = 100;\n    this.inThrottle = false;\n    this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`;\n    if (options === null || options === void 0 ? void 0 : options.params)\n      this.params = options.params;\n    if (options === null || options === void 0 ? void 0 : options.headers)\n      this.headers = Object.assign(Object.assign({}, this.headers), options.headers);\n    if (options === null || options === void 0 ? void 0 : options.timeout)\n      this.timeout = options.timeout;\n    if (options === null || options === void 0 ? void 0 : options.logger)\n      this.logger = options.logger;\n    if (options === null || options === void 0 ? void 0 : options.transport)\n      this.transport = options.transport;\n    if (options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs)\n      this.heartbeatIntervalMs = options.heartbeatIntervalMs;\n    const eventsPerSecond = (_a = options === null || options === void 0 ? void 0 : options.params) === null || _a === void 0 ? void 0 : _a.eventsPerSecond;\n    if (eventsPerSecond)\n      this.eventsPerSecondLimitMs = Math.floor(1e3 / eventsPerSecond);\n    this.reconnectAfterMs = (options === null || options === void 0 ? void 0 : options.reconnectAfterMs) ? options.reconnectAfterMs : (tries) => {\n      return [1e3, 2e3, 5e3, 1e4][tries - 1] || 1e4;\n    };\n    this.encode = (options === null || options === void 0 ? void 0 : options.encode) ? options.encode : (payload, callback) => {\n      return callback(JSON.stringify(payload));\n    };\n    this.decode = (options === null || options === void 0 ? void 0 : options.decode) ? options.decode : this.serializer.decode.bind(this.serializer);\n    this.reconnectTimer = new Timer(() => __awaiter$1(this, void 0, void 0, function* () {\n      this.disconnect();\n      this.connect();\n    }), this.reconnectAfterMs);\n  }\n  connect() {\n    if (this.conn) {\n      return;\n    }\n    this.conn = new this.transport(this._endPointURL(), [], null, this.headers);\n    if (this.conn) {\n      this.conn.binaryType = \"arraybuffer\";\n      this.conn.onopen = () => this._onConnOpen();\n      this.conn.onerror = (error) => this._onConnError(error);\n      this.conn.onmessage = (event) => this._onConnMessage(event);\n      this.conn.onclose = (event) => this._onConnClose(event);\n    }\n  }\n  disconnect(code, reason) {\n    if (this.conn) {\n      this.conn.onclose = function() {\n      };\n      if (code) {\n        this.conn.close(code, reason !== null && reason !== void 0 ? reason : \"\");\n      } else {\n        this.conn.close();\n      }\n      this.conn = null;\n      this.heartbeatTimer && clearInterval(this.heartbeatTimer);\n      this.reconnectTimer.reset();\n    }\n  }\n  getChannels() {\n    return this.channels;\n  }\n  removeChannel(channel) {\n    return channel.unsubscribe().then((status) => {\n      if (this.channels.length === 0) {\n        this.disconnect();\n      }\n      return status;\n    });\n  }\n  removeAllChannels() {\n    return Promise.all(this.channels.map((channel) => channel.unsubscribe())).then((values) => {\n      this.disconnect();\n      return values;\n    });\n  }\n  log(kind, msg, data) {\n    this.logger(kind, msg, data);\n  }\n  connectionState() {\n    switch (this.conn && this.conn.readyState) {\n      case SOCKET_STATES.connecting:\n        return CONNECTION_STATE.Connecting;\n      case SOCKET_STATES.open:\n        return CONNECTION_STATE.Open;\n      case SOCKET_STATES.closing:\n        return CONNECTION_STATE.Closing;\n      default:\n        return CONNECTION_STATE.Closed;\n    }\n  }\n  isConnected() {\n    return this.connectionState() === CONNECTION_STATE.Open;\n  }\n  channel(topic, params = {config: {}}) {\n    if (!this.isConnected()) {\n      this.connect();\n    }\n    const chan = new RealtimeChannel(`realtime:${topic}`, params, this);\n    this.channels.push(chan);\n    return chan;\n  }\n  push(data) {\n    const {topic, event, payload, ref} = data;\n    let callback = () => {\n      this.encode(data, (result) => {\n        var _a;\n        (_a = this.conn) === null || _a === void 0 ? void 0 : _a.send(result);\n      });\n    };\n    this.log(\"push\", `${topic} ${event} (${ref})`, payload);\n    if (this.isConnected()) {\n      if ([\"broadcast\", \"presence\", \"postgres_changes\"].includes(event)) {\n        const isThrottled = this._throttle(callback)();\n        if (isThrottled) {\n          return \"rate limited\";\n        }\n      } else {\n        callback();\n      }\n    } else {\n      this.sendBuffer.push(callback);\n    }\n  }\n  setAuth(token) {\n    this.accessToken = token;\n    this.channels.forEach((channel) => {\n      token && channel.updateJoinPayload({access_token: token});\n      if (channel.joinedOnce && channel._isJoined()) {\n        channel._push(CHANNEL_EVENTS.access_token, {access_token: token});\n      }\n    });\n  }\n  _makeRef() {\n    let newRef = this.ref + 1;\n    if (newRef === this.ref) {\n      this.ref = 0;\n    } else {\n      this.ref = newRef;\n    }\n    return this.ref.toString();\n  }\n  _leaveOpenTopic(topic) {\n    let dupChannel = this.channels.find((c) => c.topic === topic && (c._isJoined() || c._isJoining()));\n    if (dupChannel) {\n      this.log(\"transport\", `leaving duplicate topic \"${topic}\"`);\n      dupChannel.unsubscribe();\n    }\n  }\n  _remove(channel) {\n    this.channels = this.channels.filter((c) => c._joinRef() !== channel._joinRef());\n  }\n  _endPointURL() {\n    return this._appendParams(this.endPoint, Object.assign({}, this.params, {vsn: VSN}));\n  }\n  _onConnMessage(rawMessage) {\n    this.decode(rawMessage.data, (msg) => {\n      let {topic, event, payload, ref} = msg;\n      if (ref && ref === this.pendingHeartbeatRef || event === (payload === null || payload === void 0 ? void 0 : payload.type)) {\n        this.pendingHeartbeatRef = null;\n      }\n      this.log(\"receive\", `${payload.status || \"\"} ${topic} ${event} ${ref && \"(\" + ref + \")\" || \"\"}`, payload);\n      this.channels.filter((channel) => channel._isMember(topic)).forEach((channel) => channel._trigger(event, payload, ref));\n      this.stateChangeCallbacks.message.forEach((callback) => callback(msg));\n    });\n  }\n  _onConnOpen() {\n    this.log(\"transport\", `connected to ${this._endPointURL()}`);\n    this._flushSendBuffer();\n    this.reconnectTimer.reset();\n    this.heartbeatTimer && clearInterval(this.heartbeatTimer);\n    this.heartbeatTimer = setInterval(() => this._sendHeartbeat(), this.heartbeatIntervalMs);\n    this.stateChangeCallbacks.open.forEach((callback) => callback());\n  }\n  _onConnClose(event) {\n    this.log(\"transport\", \"close\", event);\n    this._triggerChanError();\n    this.heartbeatTimer && clearInterval(this.heartbeatTimer);\n    this.reconnectTimer.scheduleTimeout();\n    this.stateChangeCallbacks.close.forEach((callback) => callback(event));\n  }\n  _onConnError(error) {\n    this.log(\"transport\", error.message);\n    this._triggerChanError();\n    this.stateChangeCallbacks.error.forEach((callback) => callback(error));\n  }\n  _triggerChanError() {\n    this.channels.forEach((channel) => channel._trigger(CHANNEL_EVENTS.error));\n  }\n  _appendParams(url, params) {\n    if (Object.keys(params).length === 0) {\n      return url;\n    }\n    const prefix = url.match(/\\?/) ? \"&\" : \"?\";\n    const query = new URLSearchParams(params);\n    return `${url}${prefix}${query}`;\n  }\n  _flushSendBuffer() {\n    if (this.isConnected() && this.sendBuffer.length > 0) {\n      this.sendBuffer.forEach((callback) => callback());\n      this.sendBuffer = [];\n    }\n  }\n  _sendHeartbeat() {\n    var _a;\n    if (!this.isConnected()) {\n      return;\n    }\n    if (this.pendingHeartbeatRef) {\n      this.pendingHeartbeatRef = null;\n      this.log(\"transport\", \"heartbeat timeout. Attempting to re-establish connection\");\n      (_a = this.conn) === null || _a === void 0 ? void 0 : _a.close(WS_CLOSE_NORMAL, \"hearbeat timeout\");\n      return;\n    }\n    this.pendingHeartbeatRef = this._makeRef();\n    this.push({\n      topic: \"phoenix\",\n      event: \"heartbeat\",\n      payload: {},\n      ref: this.pendingHeartbeatRef\n    });\n    this.setAuth(this.accessToken);\n  }\n  _throttle(callback, eventsPerSecondLimitMs = this.eventsPerSecondLimitMs) {\n    return () => {\n      if (this.inThrottle)\n        return true;\n      callback();\n      if (eventsPerSecondLimitMs > 0) {\n        this.inThrottle = true;\n        setTimeout(() => {\n          this.inThrottle = false;\n        }, eventsPerSecondLimitMs);\n      }\n      return false;\n    };\n  }\n}\nexport {REALTIME_LISTEN_TYPES, REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, REALTIME_PRESENCE_LISTEN_EVENTS, REALTIME_SUBSCRIBE_STATES, RealtimeChannel, RealtimeClient, RealtimePresence};\nexport default null;\n","class StorageError extends Error {\n  constructor(message) {\n    super(message);\n    this.__isStorageError = true;\n    this.name = \"StorageError\";\n  }\n}\nfunction isStorageError(error) {\n  return typeof error === \"object\" && error !== null && \"__isStorageError\" in error;\n}\nclass StorageApiError extends StorageError {\n  constructor(message, status) {\n    super(message);\n    this.name = \"StorageApiError\";\n    this.status = status;\n  }\n  toJSON() {\n    return {\n      name: this.name,\n      message: this.message,\n      status: this.status\n    };\n  }\n}\nclass StorageUnknownError extends StorageError {\n  constructor(message, originalError) {\n    super(message);\n    this.name = \"StorageUnknownError\";\n    this.originalError = originalError;\n  }\n}\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nconst resolveFetch = (customFetch) => {\n  let _fetch;\n  if (customFetch) {\n    _fetch = customFetch;\n  } else if (typeof fetch === \"undefined\") {\n    _fetch = (...args) => __awaiter(void 0, void 0, void 0, function* () {\n      return yield (yield import(\"/-/cross-fetch@v3.1.5-rZpYflwCvsXnXC1DUbBX/dist=es2019,mode=imports/optimized/cross-fetch.js\")).fetch(...args);\n    });\n  } else {\n    _fetch = fetch;\n  }\n  return (...args) => _fetch(...args);\n};\nconst resolveResponse = () => __awaiter(void 0, void 0, void 0, function* () {\n  if (typeof Response === \"undefined\") {\n    return (yield import(\"/-/cross-fetch@v3.1.5-rZpYflwCvsXnXC1DUbBX/dist=es2019,mode=imports/optimized/cross-fetch.js\")).Response;\n  }\n  return Response;\n});\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\nconst handleError = (error, reject) => __awaiter$1(void 0, void 0, void 0, function* () {\n  const Res = yield resolveResponse();\n  if (error instanceof Res) {\n    error.json().then((err) => {\n      reject(new StorageApiError(_getErrorMessage(err), error.status || 500));\n    }).catch((err) => {\n      reject(new StorageUnknownError(_getErrorMessage(err), err));\n    });\n  } else {\n    reject(new StorageUnknownError(_getErrorMessage(error), error));\n  }\n});\nconst _getRequestParams = (method, options, parameters, body) => {\n  const params = {method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {}};\n  if (method === \"GET\") {\n    return params;\n  }\n  params.headers = Object.assign({\"Content-Type\": \"application/json\"}, options === null || options === void 0 ? void 0 : options.headers);\n  params.body = JSON.stringify(body);\n  return Object.assign(Object.assign({}, params), parameters);\n};\nfunction _handleRequest(fetcher, method, url, options, parameters, body) {\n  return __awaiter$1(this, void 0, void 0, function* () {\n    return new Promise((resolve, reject) => {\n      fetcher(url, _getRequestParams(method, options, parameters, body)).then((result) => {\n        if (!result.ok)\n          throw result;\n        if (options === null || options === void 0 ? void 0 : options.noResolveJson)\n          return result;\n        return result.json();\n      }).then((data) => resolve(data)).catch((error) => handleError(error, reject));\n    });\n  });\n}\nfunction get(fetcher, url, options, parameters) {\n  return __awaiter$1(this, void 0, void 0, function* () {\n    return _handleRequest(fetcher, \"GET\", url, options, parameters);\n  });\n}\nfunction post(fetcher, url, body, options, parameters) {\n  return __awaiter$1(this, void 0, void 0, function* () {\n    return _handleRequest(fetcher, \"POST\", url, options, parameters, body);\n  });\n}\nfunction put(fetcher, url, body, options, parameters) {\n  return __awaiter$1(this, void 0, void 0, function* () {\n    return _handleRequest(fetcher, \"PUT\", url, options, parameters, body);\n  });\n}\nfunction remove(fetcher, url, body, options, parameters) {\n  return __awaiter$1(this, void 0, void 0, function* () {\n    return _handleRequest(fetcher, \"DELETE\", url, options, parameters, body);\n  });\n}\nvar __awaiter$2 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nconst DEFAULT_SEARCH_OPTIONS = {\n  limit: 100,\n  offset: 0,\n  sortBy: {\n    column: \"name\",\n    order: \"asc\"\n  }\n};\nconst DEFAULT_FILE_OPTIONS = {\n  cacheControl: \"3600\",\n  contentType: \"text/plain;charset=UTF-8\",\n  upsert: false\n};\nclass StorageFileApi {\n  constructor(url, headers = {}, bucketId, fetch2) {\n    this.url = url;\n    this.headers = headers;\n    this.bucketId = bucketId;\n    this.fetch = resolveFetch(fetch2);\n  }\n  uploadOrUpdate(method, path, fileBody, fileOptions) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        let body;\n        const options = Object.assign(Object.assign({}, DEFAULT_FILE_OPTIONS), fileOptions);\n        const headers = Object.assign(Object.assign({}, this.headers), method === \"POST\" && {\"x-upsert\": String(options.upsert)});\n        if (typeof Blob !== \"undefined\" && fileBody instanceof Blob) {\n          body = new FormData();\n          body.append(\"cacheControl\", options.cacheControl);\n          body.append(\"\", fileBody);\n        } else if (typeof FormData !== \"undefined\" && fileBody instanceof FormData) {\n          body = fileBody;\n          body.append(\"cacheControl\", options.cacheControl);\n        } else {\n          body = fileBody;\n          headers[\"cache-control\"] = `max-age=${options.cacheControl}`;\n          headers[\"content-type\"] = options.contentType;\n        }\n        const cleanPath = this._removeEmptyFolders(path);\n        const _path = this._getFinalPath(cleanPath);\n        const res = yield this.fetch(`${this.url}/object/${_path}`, {\n          method,\n          body,\n          headers\n        });\n        if (res.ok) {\n          return {\n            data: {path: cleanPath},\n            error: null\n          };\n        } else {\n          const error = yield res.json();\n          return {data: null, error};\n        }\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  upload(path, fileBody, fileOptions) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      return this.uploadOrUpdate(\"POST\", path, fileBody, fileOptions);\n    });\n  }\n  update(path, fileBody, fileOptions) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      return this.uploadOrUpdate(\"PUT\", path, fileBody, fileOptions);\n    });\n  }\n  move(fromPath, toPath) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const data = yield post(this.fetch, `${this.url}/object/move`, {bucketId: this.bucketId, sourceKey: fromPath, destinationKey: toPath}, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  copy(fromPath, toPath) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const data = yield post(this.fetch, `${this.url}/object/copy`, {bucketId: this.bucketId, sourceKey: fromPath, destinationKey: toPath}, {headers: this.headers});\n        return {data: {path: data.Key}, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  createSignedUrl(path, expiresIn, options) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        let _path = this._getFinalPath(path);\n        let data = yield post(this.fetch, `${this.url}/object/sign/${_path}`, Object.assign({expiresIn}, (options === null || options === void 0 ? void 0 : options.transform) ? {transform: options.transform} : {}), {headers: this.headers});\n        const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download) ? `&download=${options.download === true ? \"\" : options.download}` : \"\";\n        const signedUrl = encodeURI(`${this.url}${data.signedURL}${downloadQueryParam}`);\n        data = {signedUrl};\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  createSignedUrls(paths, expiresIn, options) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const data = yield post(this.fetch, `${this.url}/object/sign/${this.bucketId}`, {expiresIn, paths}, {headers: this.headers});\n        const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download) ? `&download=${options.download === true ? \"\" : options.download}` : \"\";\n        return {\n          data: data.map((datum) => Object.assign(Object.assign({}, datum), {signedUrl: datum.signedURL ? encodeURI(`${this.url}${datum.signedURL}${downloadQueryParam}`) : null})),\n          error: null\n        };\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  download(path, options) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== \"undefined\";\n      const renderPath = wantsTransformation ? \"render/image/authenticated\" : \"object\";\n      const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\n      const queryString = transformationQuery ? `?${transformationQuery}` : \"\";\n      try {\n        const _path = this._getFinalPath(path);\n        const res = yield get(this.fetch, `${this.url}/${renderPath}/${_path}${queryString}`, {\n          headers: this.headers,\n          noResolveJson: true\n        });\n        const data = yield res.blob();\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  getPublicUrl(path, options) {\n    const _path = this._getFinalPath(path);\n    const _queryString = [];\n    const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download) ? `download=${options.download === true ? \"\" : options.download}` : \"\";\n    if (downloadQueryParam !== \"\") {\n      _queryString.push(downloadQueryParam);\n    }\n    const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== \"undefined\";\n    const renderPath = wantsTransformation ? \"render/image\" : \"object\";\n    const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\n    if (transformationQuery !== \"\") {\n      _queryString.push(transformationQuery);\n    }\n    let queryString = _queryString.join(\"&\");\n    if (queryString !== \"\") {\n      queryString = `?${queryString}`;\n    }\n    return {\n      data: {publicUrl: encodeURI(`${this.url}/${renderPath}/public/${_path}${queryString}`)}\n    };\n  }\n  remove(paths) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const data = yield remove(this.fetch, `${this.url}/object/${this.bucketId}`, {prefixes: paths}, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  list(path, options, parameters) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const body = Object.assign(Object.assign(Object.assign({}, DEFAULT_SEARCH_OPTIONS), options), {prefix: path || \"\"});\n        const data = yield post(this.fetch, `${this.url}/object/list/${this.bucketId}`, body, {headers: this.headers}, parameters);\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _getFinalPath(path) {\n    return `${this.bucketId}/${path}`;\n  }\n  _removeEmptyFolders(path) {\n    return path.replace(/^\\/|\\/$/g, \"\").replace(/\\/+/g, \"/\");\n  }\n  transformOptsToQueryString(transform) {\n    const params = [];\n    if (transform.width) {\n      params.push(`width=${transform.width}`);\n    }\n    if (transform.height) {\n      params.push(`height=${transform.height}`);\n    }\n    if (transform.resize) {\n      params.push(`resize=${transform.resize}`);\n    }\n    if (transform.format) {\n      params.push(`format=${transform.format}`);\n    }\n    if (transform.quality) {\n      params.push(`quality=${transform.quality}`);\n    }\n    return params.join(\"&\");\n  }\n}\nconst version = \"2.3.1\";\nconst DEFAULT_HEADERS = {\"X-Client-Info\": `storage-js/${version}`};\nvar __awaiter$3 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nclass StorageBucketApi {\n  constructor(url, headers = {}, fetch2) {\n    this.url = url;\n    this.headers = Object.assign(Object.assign({}, DEFAULT_HEADERS), headers);\n    this.fetch = resolveFetch(fetch2);\n  }\n  listBuckets() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const data = yield get(this.fetch, `${this.url}/bucket`, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  getBucket(id) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const data = yield get(this.fetch, `${this.url}/bucket/${id}`, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  createBucket(id, options = {public: false}) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const data = yield post(this.fetch, `${this.url}/bucket`, {id, name: id, public: options.public}, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  updateBucket(id, options) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const data = yield put(this.fetch, `${this.url}/bucket/${id}`, {id, name: id, public: options.public}, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  emptyBucket(id) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const data = yield post(this.fetch, `${this.url}/bucket/${id}/empty`, {}, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  deleteBucket(id) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const data = yield remove(this.fetch, `${this.url}/bucket/${id}`, {}, {headers: this.headers});\n        return {data, error: null};\n      } catch (error) {\n        if (isStorageError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n}\nclass StorageClient extends StorageBucketApi {\n  constructor(url, headers = {}, fetch2) {\n    super(url, headers, fetch2);\n  }\n  from(id) {\n    return new StorageFileApi(this.url, this.headers, id, this.fetch);\n  }\n}\nexport {StorageApiError, StorageClient, StorageError, StorageUnknownError, isStorageError};\nexport default null;\n","var __awaiter = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nfunction expiresAt(expiresIn) {\n  const timeNow = Math.round(Date.now() / 1e3);\n  return timeNow + expiresIn;\n}\nfunction uuid() {\n  return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function(c) {\n    const r = Math.random() * 16 | 0, v = c == \"x\" ? r : r & 3 | 8;\n    return v.toString(16);\n  });\n}\nconst isBrowser = () => typeof document !== \"undefined\";\nconst localStorageWriteTests = {\n  tested: false,\n  writable: false\n};\nconst supportsLocalStorage = () => {\n  if (!isBrowser()) {\n    return false;\n  }\n  try {\n    if (typeof globalThis.localStorage !== \"object\") {\n      return false;\n    }\n  } catch (e) {\n    return false;\n  }\n  if (localStorageWriteTests.tested) {\n    return localStorageWriteTests.writable;\n  }\n  const randomKey = `lswt-${Math.random()}${Math.random()}`;\n  try {\n    globalThis.localStorage.setItem(randomKey, randomKey);\n    globalThis.localStorage.removeItem(randomKey);\n    localStorageWriteTests.tested = true;\n    localStorageWriteTests.writable = true;\n  } catch (e) {\n    localStorageWriteTests.tested = true;\n    localStorageWriteTests.writable = false;\n  }\n  return localStorageWriteTests.writable;\n};\nfunction getParameterByName(name, url) {\n  var _a;\n  if (!url)\n    url = ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.href) || \"\";\n  name = name.replace(/[\\[\\]]/g, \"\\\\$&\");\n  const regex = new RegExp(\"[?&#]\" + name + \"(=([^&#]*)|&|#|$)\"), results = regex.exec(url);\n  if (!results)\n    return null;\n  if (!results[2])\n    return \"\";\n  return decodeURIComponent(results[2].replace(/\\+/g, \" \"));\n}\nconst resolveFetch = (customFetch) => {\n  let _fetch;\n  if (customFetch) {\n    _fetch = customFetch;\n  } else if (typeof fetch === \"undefined\") {\n    _fetch = (...args) => __awaiter(void 0, void 0, void 0, function* () {\n      return yield (yield import(\"/-/cross-fetch@v3.1.5-rZpYflwCvsXnXC1DUbBX/dist=es2019,mode=imports/optimized/cross-fetch.js\")).fetch(...args);\n    });\n  } else {\n    _fetch = fetch;\n  }\n  return (...args) => _fetch(...args);\n};\nconst looksLikeFetchResponse = (maybeResponse) => {\n  return typeof maybeResponse === \"object\" && maybeResponse !== null && \"status\" in maybeResponse && \"ok\" in maybeResponse && \"json\" in maybeResponse && typeof maybeResponse.json === \"function\";\n};\nconst setItemAsync = (storage, key, data) => __awaiter(void 0, void 0, void 0, function* () {\n  yield storage.setItem(key, JSON.stringify(data));\n});\nconst getItemAsync = (storage, key) => __awaiter(void 0, void 0, void 0, function* () {\n  const value = yield storage.getItem(key);\n  if (!value) {\n    return null;\n  }\n  try {\n    return JSON.parse(value);\n  } catch (_a) {\n    return value;\n  }\n});\nconst removeItemAsync = (storage, key) => __awaiter(void 0, void 0, void 0, function* () {\n  yield storage.removeItem(key);\n});\nfunction decodeBase64URL(value) {\n  const key = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n  let base64 = \"\";\n  let chr1, chr2, chr3;\n  let enc1, enc2, enc3, enc4;\n  let i = 0;\n  value = value.replace(\"-\", \"+\").replace(\"_\", \"/\");\n  while (i < value.length) {\n    enc1 = key.indexOf(value.charAt(i++));\n    enc2 = key.indexOf(value.charAt(i++));\n    enc3 = key.indexOf(value.charAt(i++));\n    enc4 = key.indexOf(value.charAt(i++));\n    chr1 = enc1 << 2 | enc2 >> 4;\n    chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n    chr3 = (enc3 & 3) << 6 | enc4;\n    base64 = base64 + String.fromCharCode(chr1);\n    if (enc3 != 64 && chr2 != 0) {\n      base64 = base64 + String.fromCharCode(chr2);\n    }\n    if (enc4 != 64 && chr3 != 0) {\n      base64 = base64 + String.fromCharCode(chr3);\n    }\n  }\n  return base64;\n}\nclass Deferred {\n  constructor() {\n    this.promise = new Deferred.promiseConstructor((res, rej) => {\n      this.resolve = res;\n      this.reject = rej;\n    });\n  }\n}\nDeferred.promiseConstructor = Promise;\nfunction decodeJWTPayload(token) {\n  const base64UrlRegex = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}=?$|[a-z0-9_-]{2}(==)?$)$/i;\n  const parts = token.split(\".\");\n  if (parts.length !== 3) {\n    throw new Error(\"JWT is not valid: not a JWT structure\");\n  }\n  if (!base64UrlRegex.test(parts[1])) {\n    throw new Error(\"JWT is not valid: payload is not in base64url format\");\n  }\n  const base64Url = parts[1];\n  return JSON.parse(decodeBase64URL(base64Url));\n}\nfunction sleep(time) {\n  return new Promise((accept) => {\n    setTimeout(() => accept(null), time);\n  });\n}\nfunction retryable(fn, isRetryable) {\n  const promise = new Promise((accept, reject) => {\n    (() => __awaiter(this, void 0, void 0, function* () {\n      for (let attempt = 0; attempt < Infinity; attempt++) {\n        try {\n          const result = yield fn(attempt);\n          if (!isRetryable(attempt, null, result)) {\n            accept(result);\n            return;\n          }\n        } catch (e) {\n          if (!isRetryable(attempt, e)) {\n            reject(e);\n            return;\n          }\n        }\n      }\n    }))();\n  });\n  return promise;\n}\nclass AuthError extends Error {\n  constructor(message, status) {\n    super(message);\n    this.__isAuthError = true;\n    this.name = \"AuthError\";\n    this.status = status;\n  }\n}\nfunction isAuthError(error) {\n  return typeof error === \"object\" && error !== null && \"__isAuthError\" in error;\n}\nclass AuthApiError extends AuthError {\n  constructor(message, status) {\n    super(message, status);\n    this.name = \"AuthApiError\";\n    this.status = status;\n  }\n  toJSON() {\n    return {\n      name: this.name,\n      message: this.message,\n      status: this.status\n    };\n  }\n}\nfunction isAuthApiError(error) {\n  return isAuthError(error) && error.name === \"AuthApiError\";\n}\nclass AuthUnknownError extends AuthError {\n  constructor(message, originalError) {\n    super(message);\n    this.name = \"AuthUnknownError\";\n    this.originalError = originalError;\n  }\n}\nclass CustomAuthError extends AuthError {\n  constructor(message, name, status) {\n    super(message);\n    this.name = name;\n    this.status = status;\n  }\n  toJSON() {\n    return {\n      name: this.name,\n      message: this.message,\n      status: this.status\n    };\n  }\n}\nclass AuthSessionMissingError extends CustomAuthError {\n  constructor() {\n    super(\"Auth session missing!\", \"AuthSessionMissingError\", 400);\n  }\n}\nclass AuthInvalidCredentialsError extends CustomAuthError {\n  constructor(message) {\n    super(message, \"AuthInvalidCredentialsError\", 400);\n  }\n}\nclass AuthImplicitGrantRedirectError extends CustomAuthError {\n  constructor(message, details = null) {\n    super(message, \"AuthImplicitGrantRedirectError\", 500);\n    this.details = null;\n    this.details = details;\n  }\n  toJSON() {\n    return {\n      name: this.name,\n      message: this.message,\n      status: this.status,\n      details: this.details\n    };\n  }\n}\nclass AuthRetryableFetchError extends CustomAuthError {\n  constructor(message, status) {\n    super(message, \"AuthRetryableFetchError\", status);\n  }\n}\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nvar __rest = function(s, e) {\n  var t = {};\n  for (var p in s)\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n    for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n      if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n        t[p[i]] = s[p[i]];\n    }\n  return t;\n};\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\nconst handleError = (error, reject) => __awaiter$1(void 0, void 0, void 0, function* () {\n  const NETWORK_ERROR_CODES = [502, 503, 504];\n  if (!looksLikeFetchResponse(error)) {\n    reject(new AuthRetryableFetchError(_getErrorMessage(error), 0));\n  } else if (NETWORK_ERROR_CODES.includes(error.status)) {\n    reject(new AuthRetryableFetchError(_getErrorMessage(error), error.status));\n  } else {\n    error.json().then((err) => {\n      reject(new AuthApiError(_getErrorMessage(err), error.status || 500));\n    }).catch((e) => {\n      reject(new AuthUnknownError(_getErrorMessage(e), e));\n    });\n  }\n});\nconst _getRequestParams = (method, options, parameters, body) => {\n  const params = {method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {}};\n  if (method === \"GET\") {\n    return params;\n  }\n  params.headers = Object.assign({\"Content-Type\": \"application/json;charset=UTF-8\"}, options === null || options === void 0 ? void 0 : options.headers);\n  params.body = JSON.stringify(body);\n  return Object.assign(Object.assign({}, params), parameters);\n};\nfunction _request(fetcher, method, url, options) {\n  var _a;\n  return __awaiter$1(this, void 0, void 0, function* () {\n    const headers = Object.assign({}, options === null || options === void 0 ? void 0 : options.headers);\n    if (options === null || options === void 0 ? void 0 : options.jwt) {\n      headers[\"Authorization\"] = `Bearer ${options.jwt}`;\n    }\n    const qs = (_a = options === null || options === void 0 ? void 0 : options.query) !== null && _a !== void 0 ? _a : {};\n    if (options === null || options === void 0 ? void 0 : options.redirectTo) {\n      qs[\"redirect_to\"] = options.redirectTo;\n    }\n    const queryString = Object.keys(qs).length ? \"?\" + new URLSearchParams(qs).toString() : \"\";\n    const data = yield _handleRequest(fetcher, method, url + queryString, {headers, noResolveJson: options === null || options === void 0 ? void 0 : options.noResolveJson}, {}, options === null || options === void 0 ? void 0 : options.body);\n    return (options === null || options === void 0 ? void 0 : options.xform) ? options === null || options === void 0 ? void 0 : options.xform(data) : {data: Object.assign({}, data), error: null};\n  });\n}\nfunction _handleRequest(fetcher, method, url, options, parameters, body) {\n  return __awaiter$1(this, void 0, void 0, function* () {\n    return new Promise((resolve, reject) => {\n      fetcher(url, _getRequestParams(method, options, parameters, body)).then((result) => {\n        if (!result.ok)\n          throw result;\n        if (options === null || options === void 0 ? void 0 : options.noResolveJson)\n          return result;\n        return result.json();\n      }).then((data) => resolve(data)).catch((error) => handleError(error, reject));\n    });\n  });\n}\nfunction _sessionResponse(data) {\n  var _a;\n  let session = null;\n  if (hasSession(data)) {\n    session = Object.assign({}, data);\n    session.expires_at = expiresAt(data.expires_in);\n  }\n  const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\n  return {data: {session, user}, error: null};\n}\nfunction _userResponse(data) {\n  var _a;\n  const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\n  return {data: {user}, error: null};\n}\nfunction _ssoResponse(data) {\n  return {data, error: null};\n}\nfunction _generateLinkResponse(data) {\n  const {action_link, email_otp, hashed_token, redirect_to, verification_type} = data, rest = __rest(data, [\"action_link\", \"email_otp\", \"hashed_token\", \"redirect_to\", \"verification_type\"]);\n  const properties = {\n    action_link,\n    email_otp,\n    hashed_token,\n    redirect_to,\n    verification_type\n  };\n  const user = Object.assign({}, rest);\n  return {\n    data: {\n      properties,\n      user\n    },\n    error: null\n  };\n}\nfunction _noResolveJsonResponse(data) {\n  return data;\n}\nfunction hasSession(data) {\n  return data.access_token && data.refresh_token && data.expires_in;\n}\nvar __awaiter$2 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nvar __rest$1 = function(s, e) {\n  var t = {};\n  for (var p in s)\n    if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n    for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n      if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n        t[p[i]] = s[p[i]];\n    }\n  return t;\n};\nclass GoTrueAdminApi {\n  constructor({url = \"\", headers = {}, fetch: fetch2}) {\n    this.url = url;\n    this.headers = headers;\n    this.fetch = resolveFetch(fetch2);\n    this.mfa = {\n      listFactors: this._listFactors.bind(this),\n      deleteFactor: this._deleteFactor.bind(this)\n    };\n  }\n  signOut(jwt) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        yield _request(this.fetch, \"POST\", `${this.url}/logout`, {\n          headers: this.headers,\n          jwt,\n          noResolveJson: true\n        });\n        return {data: null, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  inviteUserByEmail(email, options = {}) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        return yield _request(this.fetch, \"POST\", `${this.url}/invite`, {\n          body: {email, data: options.data},\n          headers: this.headers,\n          redirectTo: options.redirectTo,\n          xform: _userResponse\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  generateLink(params) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const {options} = params, rest = __rest$1(params, [\"options\"]);\n        const body = Object.assign(Object.assign({}, rest), options);\n        if (\"newEmail\" in rest) {\n          body.new_email = rest === null || rest === void 0 ? void 0 : rest.newEmail;\n          delete body[\"newEmail\"];\n        }\n        return yield _request(this.fetch, \"POST\", `${this.url}/admin/generate_link`, {\n          body,\n          headers: this.headers,\n          xform: _generateLinkResponse,\n          redirectTo: options === null || options === void 0 ? void 0 : options.redirectTo\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {\n            data: {\n              properties: null,\n              user: null\n            },\n            error\n          };\n        }\n        throw error;\n      }\n    });\n  }\n  createUser(attributes) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        return yield _request(this.fetch, \"POST\", `${this.url}/admin/users`, {\n          body: attributes,\n          headers: this.headers,\n          xform: _userResponse\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  listUsers(params) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const pagination = {nextPage: null, lastPage: 0, total: 0};\n        const response = yield _request(this.fetch, \"GET\", `${this.url}/admin/users`, {\n          headers: this.headers,\n          noResolveJson: true,\n          query: {\n            page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : \"\",\n            per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : \"\"\n          },\n          xform: _noResolveJsonResponse\n        });\n        if (response.error)\n          throw response.error;\n        const users = yield response.json();\n        const total = (_e = response.headers.get(\"x-total-count\")) !== null && _e !== void 0 ? _e : 0;\n        const links = (_g = (_f = response.headers.get(\"link\")) === null || _f === void 0 ? void 0 : _f.split(\",\")) !== null && _g !== void 0 ? _g : [];\n        if (links.length > 0) {\n          links.forEach((link) => {\n            const page = parseInt(link.split(\";\")[0].split(\"=\")[1].substring(0, 1));\n            const rel = JSON.parse(link.split(\";\")[1].split(\"=\")[1]);\n            pagination[`${rel}Page`] = page;\n          });\n          pagination.total = parseInt(total);\n        }\n        return {data: Object.assign(Object.assign({}, users), pagination), error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {users: []}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  getUserById(uid) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        return yield _request(this.fetch, \"GET\", `${this.url}/admin/users/${uid}`, {\n          headers: this.headers,\n          xform: _userResponse\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  updateUserById(uid, attributes) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        return yield _request(this.fetch, \"PUT\", `${this.url}/admin/users/${uid}`, {\n          body: attributes,\n          headers: this.headers,\n          xform: _userResponse\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  deleteUser(id, shouldSoftDelete = false) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        return yield _request(this.fetch, \"DELETE\", `${this.url}/admin/users/${id}`, {\n          headers: this.headers,\n          body: {\n            should_soft_delete: shouldSoftDelete\n          },\n          xform: _userResponse\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _listFactors(params) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const {data, error} = yield _request(this.fetch, \"GET\", `${this.url}/admin/users/${params.userId}/factors`, {\n          headers: this.headers,\n          xform: (factors) => {\n            return {data: {factors}, error: null};\n          }\n        });\n        return {data, error};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _deleteFactor(params) {\n    return __awaiter$2(this, void 0, void 0, function* () {\n      try {\n        const data = yield _request(this.fetch, \"DELETE\", `${this.url}/admin/users/${params.userId}/factors/${params.id}`, {\n          headers: this.headers\n        });\n        return {data, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n}\nconst version = \"2.12.1\";\nconst GOTRUE_URL = \"http://localhost:9999\";\nconst STORAGE_KEY = \"supabase.auth.token\";\nconst DEFAULT_HEADERS = {\"X-Client-Info\": `gotrue-js/${version}`};\nconst EXPIRY_MARGIN = 10;\nconst localStorageAdapter = {\n  getItem: (key) => {\n    if (!supportsLocalStorage()) {\n      return null;\n    }\n    return globalThis.localStorage.getItem(key);\n  },\n  setItem: (key, value) => {\n    if (!supportsLocalStorage()) {\n      return;\n    }\n    globalThis.localStorage.setItem(key, value);\n  },\n  removeItem: (key) => {\n    if (!supportsLocalStorage()) {\n      return;\n    }\n    globalThis.localStorage.removeItem(key);\n  }\n};\nfunction polyfillGlobalThis() {\n  if (typeof globalThis === \"object\")\n    return;\n  try {\n    Object.defineProperty(Object.prototype, \"__magic__\", {\n      get: function() {\n        return this;\n      },\n      configurable: true\n    });\n    __magic__.globalThis = __magic__;\n    delete Object.prototype.__magic__;\n  } catch (e) {\n    if (typeof self !== \"undefined\") {\n      self.globalThis = self;\n    }\n  }\n}\nvar __awaiter$3 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\npolyfillGlobalThis();\nconst DEFAULT_OPTIONS = {\n  url: GOTRUE_URL,\n  storageKey: STORAGE_KEY,\n  autoRefreshToken: true,\n  persistSession: true,\n  detectSessionInUrl: true,\n  headers: DEFAULT_HEADERS\n};\nconst AUTO_REFRESH_TICK_DURATION = 10 * 1e3;\nconst AUTO_REFRESH_TICK_THRESHOLD = 3;\nclass GoTrueClient {\n  constructor(options) {\n    this.stateChangeEmitters = new Map();\n    this.autoRefreshTicker = null;\n    this.visibilityChangedCallback = null;\n    this.refreshingDeferred = null;\n    this.initializePromise = null;\n    this.detectSessionInUrl = true;\n    this.broadcastChannel = null;\n    const settings = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n    this.inMemorySession = null;\n    this.storageKey = settings.storageKey;\n    this.autoRefreshToken = settings.autoRefreshToken;\n    this.persistSession = settings.persistSession;\n    this.storage = settings.storage || localStorageAdapter;\n    this.admin = new GoTrueAdminApi({\n      url: settings.url,\n      headers: settings.headers,\n      fetch: settings.fetch\n    });\n    this.url = settings.url;\n    this.headers = settings.headers;\n    this.fetch = resolveFetch(settings.fetch);\n    this.detectSessionInUrl = settings.detectSessionInUrl;\n    this.mfa = {\n      verify: this._verify.bind(this),\n      enroll: this._enroll.bind(this),\n      unenroll: this._unenroll.bind(this),\n      challenge: this._challenge.bind(this),\n      listFactors: this._listFactors.bind(this),\n      challengeAndVerify: this._challengeAndVerify.bind(this),\n      getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this)\n    };\n    if (isBrowser() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) {\n      this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey);\n      this.broadcastChannel.addEventListener(\"message\", (event) => {\n        this._notifyAllSubscribers(event.data.event, event.data.session, false);\n      });\n    }\n    this.initialize();\n  }\n  initialize() {\n    if (!this.initializePromise) {\n      this.initializePromise = this._initialize();\n    }\n    return this.initializePromise;\n  }\n  _initialize() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      if (this.initializePromise) {\n        return this.initializePromise;\n      }\n      try {\n        if (this.detectSessionInUrl && this._isImplicitGrantFlow()) {\n          const {data, error} = yield this._getSessionFromUrl();\n          if (error) {\n            yield this._removeSession();\n            return {error};\n          }\n          const {session, redirectType} = data;\n          yield this._saveSession(session);\n          this._notifyAllSubscribers(\"SIGNED_IN\", session);\n          if (redirectType === \"recovery\") {\n            this._notifyAllSubscribers(\"PASSWORD_RECOVERY\", session);\n          }\n          return {error: null};\n        }\n        yield this._recoverAndRefresh();\n        return {error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {error};\n        }\n        return {\n          error: new AuthUnknownError(\"Unexpected error during initialization\", error)\n        };\n      } finally {\n        yield this._handleVisibilityChange();\n      }\n    });\n  }\n  signUp(credentials) {\n    var _a, _b;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        yield this._removeSession();\n        let res;\n        if (\"email\" in credentials) {\n          const {email, password, options} = credentials;\n          res = yield _request(this.fetch, \"POST\", `${this.url}/signup`, {\n            headers: this.headers,\n            redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n            body: {\n              email,\n              password,\n              data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n              gotrue_meta_security: {captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken}\n            },\n            xform: _sessionResponse\n          });\n        } else if (\"phone\" in credentials) {\n          const {phone, password, options} = credentials;\n          res = yield _request(this.fetch, \"POST\", `${this.url}/signup`, {\n            headers: this.headers,\n            body: {\n              phone,\n              password,\n              data: (_b = options === null || options === void 0 ? void 0 : options.data) !== null && _b !== void 0 ? _b : {},\n              gotrue_meta_security: {captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken}\n            },\n            xform: _sessionResponse\n          });\n        } else {\n          throw new AuthInvalidCredentialsError(\"You must provide either an email or phone number and a password\");\n        }\n        const {data, error} = res;\n        if (error || !data) {\n          return {data: {user: null, session: null}, error};\n        }\n        const session = data.session;\n        const user = data.user;\n        if (data.session) {\n          yield this._saveSession(data.session);\n          this._notifyAllSubscribers(\"SIGNED_IN\", session);\n        }\n        return {data: {user, session}, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null, session: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  signInWithPassword(credentials) {\n    var _a, _b;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        yield this._removeSession();\n        let res;\n        if (\"email\" in credentials) {\n          const {email, password, options} = credentials;\n          res = yield _request(this.fetch, \"POST\", `${this.url}/token?grant_type=password`, {\n            headers: this.headers,\n            body: {\n              email,\n              password,\n              data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n              gotrue_meta_security: {captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken}\n            },\n            xform: _sessionResponse\n          });\n        } else if (\"phone\" in credentials) {\n          const {phone, password, options} = credentials;\n          res = yield _request(this.fetch, \"POST\", `${this.url}/token?grant_type=password`, {\n            headers: this.headers,\n            body: {\n              phone,\n              password,\n              data: (_b = options === null || options === void 0 ? void 0 : options.data) !== null && _b !== void 0 ? _b : {},\n              gotrue_meta_security: {captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken}\n            },\n            xform: _sessionResponse\n          });\n        } else {\n          throw new AuthInvalidCredentialsError(\"You must provide either an email or phone number and a password\");\n        }\n        const {data, error} = res;\n        if (error || !data)\n          return {data: {user: null, session: null}, error};\n        if (data.session) {\n          yield this._saveSession(data.session);\n          this._notifyAllSubscribers(\"SIGNED_IN\", data.session);\n        }\n        return {data, error};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null, session: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  signInWithOAuth(credentials) {\n    var _a, _b, _c, _d;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      yield this._removeSession();\n      return this._handleProviderSignIn(credentials.provider, {\n        redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\n        scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\n        queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\n        skipBrowserRedirect: (_d = credentials.options) === null || _d === void 0 ? void 0 : _d.skipBrowserRedirect\n      });\n    });\n  }\n  signInWithIdToken(credentials) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      yield this._removeSession();\n      try {\n        const {options, provider, token, nonce} = credentials;\n        const res = yield _request(this.fetch, \"POST\", `${this.url}/token?grant_type=id_token`, {\n          headers: this.headers,\n          body: {\n            provider,\n            id_token: token,\n            nonce,\n            gotrue_meta_security: {captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken}\n          },\n          xform: _sessionResponse\n        });\n        const {data, error} = res;\n        if (error || !data)\n          return {data: {user: null, session: null}, error};\n        if (data.session) {\n          yield this._saveSession(data.session);\n          this._notifyAllSubscribers(\"SIGNED_IN\", data.session);\n        }\n        return {data, error};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null, session: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  signInWithOtp(credentials) {\n    var _a, _b, _c, _d;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        yield this._removeSession();\n        if (\"email\" in credentials) {\n          const {email, options} = credentials;\n          const {error} = yield _request(this.fetch, \"POST\", `${this.url}/otp`, {\n            headers: this.headers,\n            body: {\n              email,\n              data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n              create_user: (_b = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _b !== void 0 ? _b : true,\n              gotrue_meta_security: {captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken}\n            },\n            redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo\n          });\n          return {data: {user: null, session: null}, error};\n        }\n        if (\"phone\" in credentials) {\n          const {phone, options} = credentials;\n          const {error} = yield _request(this.fetch, \"POST\", `${this.url}/otp`, {\n            headers: this.headers,\n            body: {\n              phone,\n              data: (_c = options === null || options === void 0 ? void 0 : options.data) !== null && _c !== void 0 ? _c : {},\n              create_user: (_d = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _d !== void 0 ? _d : true,\n              gotrue_meta_security: {captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken}\n            }\n          });\n          return {data: {user: null, session: null}, error};\n        }\n        throw new AuthInvalidCredentialsError(\"You must provide either an email or phone number.\");\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null, session: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  verifyOtp(params) {\n    var _a, _b;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        yield this._removeSession();\n        const {data, error} = yield _request(this.fetch, \"POST\", `${this.url}/verify`, {\n          headers: this.headers,\n          body: Object.assign(Object.assign({}, params), {gotrue_meta_security: {captcha_token: (_a = params.options) === null || _a === void 0 ? void 0 : _a.captchaToken}}),\n          redirectTo: (_b = params.options) === null || _b === void 0 ? void 0 : _b.redirectTo,\n          xform: _sessionResponse\n        });\n        if (error) {\n          throw error;\n        }\n        if (!data) {\n          throw \"An error occurred on token verification.\";\n        }\n        const session = data.session;\n        const user = data.user;\n        if (session === null || session === void 0 ? void 0 : session.access_token) {\n          yield this._saveSession(session);\n          this._notifyAllSubscribers(\"SIGNED_IN\", session);\n        }\n        return {data: {user, session}, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null, session: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  signInWithSSO(params) {\n    var _a, _b, _c;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        yield this._removeSession();\n        return yield _request(this.fetch, \"POST\", `${this.url}/sso`, {\n          body: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, \"providerId\" in params ? {provider_id: params.providerId} : null), \"domain\" in params ? {domain: params.domain} : null), {redirect_to: (_b = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo) !== null && _b !== void 0 ? _b : void 0}), ((_c = params === null || params === void 0 ? void 0 : params.options) === null || _c === void 0 ? void 0 : _c.captchaToken) ? {gotrue_meta_security: {captcha_token: params.options.captchaToken}} : null), {skip_http_redirect: true}),\n          headers: this.headers,\n          xform: _ssoResponse\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  getSession() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      yield this.initializePromise;\n      let currentSession = null;\n      if (this.persistSession) {\n        const maybeSession = yield getItemAsync(this.storage, this.storageKey);\n        if (maybeSession !== null) {\n          if (this._isValidSession(maybeSession)) {\n            currentSession = maybeSession;\n          } else {\n            yield this._removeSession();\n          }\n        }\n      } else {\n        currentSession = this.inMemorySession;\n      }\n      if (!currentSession) {\n        return {data: {session: null}, error: null};\n      }\n      const hasExpired = currentSession.expires_at ? currentSession.expires_at <= Date.now() / 1e3 : false;\n      if (!hasExpired) {\n        return {data: {session: currentSession}, error: null};\n      }\n      const {session, error} = yield this._callRefreshToken(currentSession.refresh_token);\n      if (error) {\n        return {data: {session: null}, error};\n      }\n      return {data: {session}, error: null};\n    });\n  }\n  getUser(jwt) {\n    var _a, _b;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        if (!jwt) {\n          const {data, error} = yield this.getSession();\n          if (error) {\n            throw error;\n          }\n          jwt = (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : void 0;\n        }\n        return yield _request(this.fetch, \"GET\", `${this.url}/user`, {\n          headers: this.headers,\n          jwt,\n          xform: _userResponse\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  updateUser(attributes, options = {}) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const {data: sessionData, error: sessionError} = yield this.getSession();\n        if (sessionError) {\n          throw sessionError;\n        }\n        if (!sessionData.session) {\n          throw new AuthSessionMissingError();\n        }\n        const session = sessionData.session;\n        const {data, error: userError} = yield _request(this.fetch, \"PUT\", `${this.url}/user`, {\n          headers: this.headers,\n          redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n          body: attributes,\n          jwt: session.access_token,\n          xform: _userResponse\n        });\n        if (userError)\n          throw userError;\n        session.user = data.user;\n        yield this._saveSession(session);\n        this._notifyAllSubscribers(\"USER_UPDATED\", session);\n        return {data: {user: session.user}, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _decodeJWT(jwt) {\n    return decodeJWTPayload(jwt);\n  }\n  setSession(currentSession) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        if (!currentSession.access_token || !currentSession.refresh_token) {\n          throw new AuthSessionMissingError();\n        }\n        const timeNow = Date.now() / 1e3;\n        let expiresAt2 = timeNow;\n        let hasExpired = true;\n        let session = null;\n        const payload = decodeJWTPayload(currentSession.access_token);\n        if (payload.exp) {\n          expiresAt2 = payload.exp;\n          hasExpired = expiresAt2 <= timeNow;\n        }\n        if (hasExpired) {\n          const {session: refreshedSession, error} = yield this._callRefreshToken(currentSession.refresh_token);\n          if (error) {\n            return {data: {user: null, session: null}, error};\n          }\n          if (!refreshedSession) {\n            return {data: {user: null, session: null}, error: null};\n          }\n          session = refreshedSession;\n        } else {\n          const {data, error} = yield this.getUser(currentSession.access_token);\n          if (error) {\n            throw error;\n          }\n          session = {\n            access_token: currentSession.access_token,\n            refresh_token: currentSession.refresh_token,\n            user: data.user,\n            token_type: \"bearer\",\n            expires_in: expiresAt2 - timeNow,\n            expires_at: expiresAt2\n          };\n          yield this._saveSession(session);\n          this._notifyAllSubscribers(\"SIGNED_IN\", session);\n        }\n        return {data: {user: session.user, session}, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {session: null, user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  refreshSession(currentSession) {\n    var _a;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        if (!currentSession) {\n          const {data, error: error2} = yield this.getSession();\n          if (error2) {\n            throw error2;\n          }\n          currentSession = (_a = data.session) !== null && _a !== void 0 ? _a : void 0;\n        }\n        if (!(currentSession === null || currentSession === void 0 ? void 0 : currentSession.refresh_token)) {\n          throw new AuthSessionMissingError();\n        }\n        const {session, error} = yield this._callRefreshToken(currentSession.refresh_token);\n        if (error) {\n          return {data: {user: null, session: null}, error};\n        }\n        if (!session) {\n          return {data: {user: null, session: null}, error: null};\n        }\n        return {data: {user: session.user, session}, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {user: null, session: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _getSessionFromUrl() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        if (!isBrowser())\n          throw new AuthImplicitGrantRedirectError(\"No browser detected.\");\n        if (!this._isImplicitGrantFlow()) {\n          throw new AuthImplicitGrantRedirectError(\"Not a valid implicit grant flow url.\");\n        }\n        const error_description = getParameterByName(\"error_description\");\n        if (error_description) {\n          const error_code = getParameterByName(\"error_code\");\n          if (!error_code)\n            throw new AuthImplicitGrantRedirectError(\"No error_code detected.\");\n          const error2 = getParameterByName(\"error\");\n          if (!error2)\n            throw new AuthImplicitGrantRedirectError(\"No error detected.\");\n          throw new AuthImplicitGrantRedirectError(error_description, {error: error2, code: error_code});\n        }\n        const provider_token = getParameterByName(\"provider_token\");\n        const provider_refresh_token = getParameterByName(\"provider_refresh_token\");\n        const access_token = getParameterByName(\"access_token\");\n        if (!access_token)\n          throw new AuthImplicitGrantRedirectError(\"No access_token detected.\");\n        const expires_in = getParameterByName(\"expires_in\");\n        if (!expires_in)\n          throw new AuthImplicitGrantRedirectError(\"No expires_in detected.\");\n        const refresh_token = getParameterByName(\"refresh_token\");\n        if (!refresh_token)\n          throw new AuthImplicitGrantRedirectError(\"No refresh_token detected.\");\n        const token_type = getParameterByName(\"token_type\");\n        if (!token_type)\n          throw new AuthImplicitGrantRedirectError(\"No token_type detected.\");\n        const timeNow = Math.round(Date.now() / 1e3);\n        const expires_at = timeNow + parseInt(expires_in);\n        const {data, error} = yield this.getUser(access_token);\n        if (error)\n          throw error;\n        const user = data.user;\n        const session = {\n          provider_token,\n          provider_refresh_token,\n          access_token,\n          expires_in: parseInt(expires_in),\n          expires_at,\n          refresh_token,\n          token_type,\n          user\n        };\n        const redirectType = getParameterByName(\"type\");\n        window.location.hash = \"\";\n        return {data: {session, redirectType}, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {session: null, redirectType: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _isImplicitGrantFlow() {\n    return isBrowser() && (Boolean(getParameterByName(\"access_token\")) || Boolean(getParameterByName(\"error_description\")));\n  }\n  signOut() {\n    var _a;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      const {data, error: sessionError} = yield this.getSession();\n      if (sessionError) {\n        return {error: sessionError};\n      }\n      const accessToken = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token;\n      if (accessToken) {\n        const {error} = yield this.admin.signOut(accessToken);\n        if (error) {\n          if (!(isAuthApiError(error) && (error.status === 404 || error.status === 401))) {\n            return {error};\n          }\n        }\n      }\n      yield this._removeSession();\n      this._notifyAllSubscribers(\"SIGNED_OUT\", null);\n      return {error: null};\n    });\n  }\n  onAuthStateChange(callback) {\n    const id = uuid();\n    const subscription = {\n      id,\n      callback,\n      unsubscribe: () => {\n        this.stateChangeEmitters.delete(id);\n      }\n    };\n    this.stateChangeEmitters.set(id, subscription);\n    return {data: {subscription}};\n  }\n  resetPasswordForEmail(email, options = {}) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        return yield _request(this.fetch, \"POST\", `${this.url}/recover`, {\n          body: {email, gotrue_meta_security: {captcha_token: options.captchaToken}},\n          headers: this.headers,\n          redirectTo: options.redirectTo\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _refreshAccessToken(refreshToken) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const startedAt = Date.now();\n        return yield retryable((attempt) => __awaiter$3(this, void 0, void 0, function* () {\n          yield sleep(attempt * 200);\n          return yield _request(this.fetch, \"POST\", `${this.url}/token?grant_type=refresh_token`, {\n            body: {refresh_token: refreshToken},\n            headers: this.headers,\n            xform: _sessionResponse\n          });\n        }), (attempt, _, result) => result && result.error && result.error instanceof AuthRetryableFetchError && Date.now() + (attempt + 1) * 200 - startedAt < AUTO_REFRESH_TICK_DURATION);\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: {session: null, user: null}, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _isValidSession(maybeSession) {\n    const isValidSession = typeof maybeSession === \"object\" && maybeSession !== null && \"access_token\" in maybeSession && \"refresh_token\" in maybeSession && \"expires_at\" in maybeSession;\n    return isValidSession;\n  }\n  _handleProviderSignIn(provider, options = {}) {\n    const url = this._getUrlForProvider(provider, {\n      redirectTo: options.redirectTo,\n      scopes: options.scopes,\n      queryParams: options.queryParams\n    });\n    if (isBrowser() && !options.skipBrowserRedirect) {\n      window.location.assign(url);\n    }\n    return {data: {provider, url}, error: null};\n  }\n  _recoverAndRefresh() {\n    var _a;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const currentSession = yield getItemAsync(this.storage, this.storageKey);\n        if (!this._isValidSession(currentSession)) {\n          if (currentSession !== null) {\n            yield this._removeSession();\n          }\n          return;\n        }\n        const timeNow = Math.round(Date.now() / 1e3);\n        if (((_a = currentSession.expires_at) !== null && _a !== void 0 ? _a : Infinity) < timeNow + EXPIRY_MARGIN) {\n          if (this.autoRefreshToken && currentSession.refresh_token) {\n            const {error} = yield this._callRefreshToken(currentSession.refresh_token);\n            if (error) {\n              console.log(error.message);\n              yield this._removeSession();\n            }\n          } else {\n            yield this._removeSession();\n          }\n        } else {\n          if (this.persistSession) {\n            yield this._saveSession(currentSession);\n          }\n          this._notifyAllSubscribers(\"SIGNED_IN\", currentSession);\n        }\n      } catch (err) {\n        console.error(err);\n        return;\n      }\n    });\n  }\n  _callRefreshToken(refreshToken) {\n    var _a, _b;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      if (this.refreshingDeferred) {\n        return this.refreshingDeferred.promise;\n      }\n      try {\n        this.refreshingDeferred = new Deferred();\n        if (!refreshToken) {\n          throw new AuthSessionMissingError();\n        }\n        const {data, error} = yield this._refreshAccessToken(refreshToken);\n        if (error)\n          throw error;\n        if (!data.session)\n          throw new AuthSessionMissingError();\n        yield this._saveSession(data.session);\n        this._notifyAllSubscribers(\"TOKEN_REFRESHED\", data.session);\n        const result = {session: data.session, error: null};\n        this.refreshingDeferred.resolve(result);\n        return result;\n      } catch (error) {\n        if (isAuthError(error)) {\n          const result = {session: null, error};\n          (_a = this.refreshingDeferred) === null || _a === void 0 ? void 0 : _a.resolve(result);\n          return result;\n        }\n        (_b = this.refreshingDeferred) === null || _b === void 0 ? void 0 : _b.reject(error);\n        throw error;\n      } finally {\n        this.refreshingDeferred = null;\n      }\n    });\n  }\n  _notifyAllSubscribers(event, session, broadcast = true) {\n    if (this.broadcastChannel && broadcast) {\n      this.broadcastChannel.postMessage({event, session});\n    }\n    this.stateChangeEmitters.forEach((x) => x.callback(event, session));\n  }\n  _saveSession(session) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      if (!this.persistSession) {\n        this.inMemorySession = session;\n      }\n      if (this.persistSession && session.expires_at) {\n        yield this._persistSession(session);\n      }\n    });\n  }\n  _persistSession(currentSession) {\n    return setItemAsync(this.storage, this.storageKey, currentSession);\n  }\n  _removeSession() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      if (this.persistSession) {\n        yield removeItemAsync(this.storage, this.storageKey);\n      } else {\n        this.inMemorySession = null;\n      }\n    });\n  }\n  _removeVisibilityChangedCallback() {\n    const callback = this.visibilityChangedCallback;\n    this.visibilityChangedCallback = null;\n    try {\n      if (callback && isBrowser() && (window === null || window === void 0 ? void 0 : window.removeEventListener)) {\n        window.removeEventListener(\"visibilitychange\", callback);\n      }\n    } catch (e) {\n      console.error(\"removing visibilitychange callback failed\", e);\n    }\n  }\n  _startAutoRefresh() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      yield this._stopAutoRefresh();\n      const ticker = setInterval(() => this._autoRefreshTokenTick(), AUTO_REFRESH_TICK_DURATION);\n      this.autoRefreshTicker = ticker;\n      if (ticker && typeof ticker === \"object\" && typeof ticker.unref === \"function\") {\n        ticker.unref();\n      }\n      yield this._autoRefreshTokenTick();\n    });\n  }\n  _stopAutoRefresh() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      const ticker = this.autoRefreshTicker;\n      this.autoRefreshTicker = null;\n      if (ticker) {\n        clearInterval(ticker);\n      }\n    });\n  }\n  startAutoRefresh() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      this._removeVisibilityChangedCallback();\n      yield this._startAutoRefresh();\n    });\n  }\n  stopAutoRefresh() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      this._removeVisibilityChangedCallback();\n      yield this._stopAutoRefresh();\n    });\n  }\n  _autoRefreshTokenTick() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      const now = Date.now();\n      try {\n        const {data: {session}} = yield this.getSession();\n        if (!session || !session.refresh_token || !session.expires_at) {\n          return;\n        }\n        const expiresInTicks = Math.floor((session.expires_at * 1e3 - now) / AUTO_REFRESH_TICK_DURATION);\n        if (expiresInTicks < AUTO_REFRESH_TICK_THRESHOLD) {\n          yield this._callRefreshToken(session.refresh_token);\n        }\n      } catch (e) {\n        console.error(\"Auto refresh tick failed with error. This is likely a transient error.\", e);\n      }\n    });\n  }\n  _handleVisibilityChange() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      if (!isBrowser() || !(window === null || window === void 0 ? void 0 : window.addEventListener)) {\n        if (this.autoRefreshToken) {\n          this.startAutoRefresh();\n        }\n        return false;\n      }\n      try {\n        this.visibilityChangedCallback = () => __awaiter$3(this, void 0, void 0, function* () {\n          return yield this._onVisibilityChanged(false);\n        });\n        window === null || window === void 0 ? void 0 : window.addEventListener(\"visibilitychange\", this.visibilityChangedCallback);\n        yield this._onVisibilityChanged(true);\n      } catch (error) {\n        console.error(\"_handleVisibilityChange\", error);\n      }\n    });\n  }\n  _onVisibilityChanged(isInitial) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      if (document.visibilityState === \"visible\") {\n        if (!isInitial) {\n          yield this.initializePromise;\n          yield this._recoverAndRefresh();\n        }\n        if (this.autoRefreshToken) {\n          this._startAutoRefresh();\n        }\n      } else if (document.visibilityState === \"hidden\") {\n        if (this.autoRefreshToken) {\n          this._stopAutoRefresh();\n        }\n      }\n    });\n  }\n  _getUrlForProvider(provider, options) {\n    const urlParams = [`provider=${encodeURIComponent(provider)}`];\n    if (options === null || options === void 0 ? void 0 : options.redirectTo) {\n      urlParams.push(`redirect_to=${encodeURIComponent(options.redirectTo)}`);\n    }\n    if (options === null || options === void 0 ? void 0 : options.scopes) {\n      urlParams.push(`scopes=${encodeURIComponent(options.scopes)}`);\n    }\n    if (options === null || options === void 0 ? void 0 : options.queryParams) {\n      const query = new URLSearchParams(options.queryParams);\n      urlParams.push(query.toString());\n    }\n    return `${this.url}/authorize?${urlParams.join(\"&\")}`;\n  }\n  _unenroll(params) {\n    var _a;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const {data: sessionData, error: sessionError} = yield this.getSession();\n        if (sessionError) {\n          return {data: null, error: sessionError};\n        }\n        return yield _request(this.fetch, \"DELETE\", `${this.url}/factors/${params.factorId}`, {\n          headers: this.headers,\n          jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _enroll(params) {\n    var _a, _b;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const {data: sessionData, error: sessionError} = yield this.getSession();\n        if (sessionError) {\n          return {data: null, error: sessionError};\n        }\n        const {data, error} = yield _request(this.fetch, \"POST\", `${this.url}/factors`, {\n          body: {\n            friendly_name: params.friendlyName,\n            factor_type: params.factorType,\n            issuer: params.issuer\n          },\n          headers: this.headers,\n          jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token\n        });\n        if (error) {\n          return {data: null, error};\n        }\n        if ((_b = data === null || data === void 0 ? void 0 : data.totp) === null || _b === void 0 ? void 0 : _b.qr_code) {\n          data.totp.qr_code = `data:image/svg+xml;utf-8,${data.totp.qr_code}`;\n        }\n        return {data, error: null};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _verify(params) {\n    var _a;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const {data: sessionData, error: sessionError} = yield this.getSession();\n        if (sessionError) {\n          return {data: null, error: sessionError};\n        }\n        const {data, error} = yield _request(this.fetch, \"POST\", `${this.url}/factors/${params.factorId}/verify`, {\n          body: {code: params.code, challenge_id: params.challengeId},\n          headers: this.headers,\n          jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token\n        });\n        if (error) {\n          return {data: null, error};\n        }\n        yield this._saveSession(Object.assign({expires_at: Math.round(Date.now() / 1e3) + data.expires_in}, data));\n        this._notifyAllSubscribers(\"MFA_CHALLENGE_VERIFIED\", data);\n        return {data, error};\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _challenge(params) {\n    var _a;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      try {\n        const {data: sessionData, error: sessionError} = yield this.getSession();\n        if (sessionError) {\n          return {data: null, error: sessionError};\n        }\n        return yield _request(this.fetch, \"POST\", `${this.url}/factors/${params.factorId}/challenge`, {\n          headers: this.headers,\n          jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token\n        });\n      } catch (error) {\n        if (isAuthError(error)) {\n          return {data: null, error};\n        }\n        throw error;\n      }\n    });\n  }\n  _challengeAndVerify(params) {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      const {data: challengeData, error: challengeError} = yield this._challenge({\n        factorId: params.factorId\n      });\n      if (challengeError) {\n        return {data: null, error: challengeError};\n      }\n      return yield this._verify({\n        factorId: params.factorId,\n        challengeId: challengeData.id,\n        code: params.code\n      });\n    });\n  }\n  _listFactors() {\n    return __awaiter$3(this, void 0, void 0, function* () {\n      const {data: {user}, error: userError} = yield this.getUser();\n      if (userError) {\n        return {data: null, error: userError};\n      }\n      const factors = (user === null || user === void 0 ? void 0 : user.factors) || [];\n      const totp = factors.filter((factor) => factor.factor_type === \"totp\" && factor.status === \"verified\");\n      return {\n        data: {\n          all: factors,\n          totp\n        },\n        error: null\n      };\n    });\n  }\n  _getAuthenticatorAssuranceLevel() {\n    var _a, _b;\n    return __awaiter$3(this, void 0, void 0, function* () {\n      const {data: {session}, error: sessionError} = yield this.getSession();\n      if (sessionError) {\n        return {data: null, error: sessionError};\n      }\n      if (!session) {\n        return {\n          data: {currentLevel: null, nextLevel: null, currentAuthenticationMethods: []},\n          error: null\n        };\n      }\n      const payload = this._decodeJWT(session.access_token);\n      let currentLevel = null;\n      if (payload.aal) {\n        currentLevel = payload.aal;\n      }\n      let nextLevel = currentLevel;\n      const verifiedFactors = (_b = (_a = session.user.factors) === null || _a === void 0 ? void 0 : _a.filter((factor) => factor.status === \"verified\")) !== null && _b !== void 0 ? _b : [];\n      if (verifiedFactors.length > 0) {\n        nextLevel = \"aal2\";\n      }\n      const currentAuthenticationMethods = payload.amr || [];\n      return {data: {currentLevel, nextLevel, currentAuthenticationMethods}, error: null};\n    });\n  }\n}\nexport {AuthApiError, AuthError, AuthImplicitGrantRedirectError, AuthInvalidCredentialsError, AuthRetryableFetchError, AuthSessionMissingError, AuthUnknownError, CustomAuthError, GoTrueAdminApi, GoTrueClient, isAuthApiError, isAuthError};\nexport default null;\n","import {FunctionsClient} from \"/-/@supabase/functions-js@v2.1.0-RnZ2mgdVtYJw6BDBGbAJ/dist=es2019,mode=imports/optimized/@supabase/functions-js.js\";\nexport {FunctionsError, FunctionsFetchError, FunctionsHttpError, FunctionsRelayError} from \"/-/@supabase/functions-js@v2.1.0-RnZ2mgdVtYJw6BDBGbAJ/dist=es2019,mode=imports/optimized/@supabase/functions-js.js\";\nimport {PostgrestClient} from \"/-/@supabase/postgrest-js@v1.4.1-M6VL6LW6WNlsBWTBZFbq/dist=es2019,mode=imports/optimized/@supabase/postgrest-js.js\";\nimport {RealtimeClient} from \"/-/@supabase/realtime-js@v2.6.0-KChn2jQyrOOE0GhQ08fE/dist=es2019,mode=imports/optimized/@supabase/realtime-js.js\";\nexport * from \"/-/@supabase/realtime-js@v2.6.0-KChn2jQyrOOE0GhQ08fE/dist=es2019,mode=imports/optimized/@supabase/realtime-js.js\";\nimport {StorageClient} from \"/-/@supabase/storage-js@v2.3.1-BHfs8j7jU6qHoJRSHZPL/dist=es2019,mode=imports/optimized/@supabase/storage-js.js\";\nimport crossFetch from \"/-/cross-fetch@v3.1.5-rZpYflwCvsXnXC1DUbBX/dist=es2019,mode=imports/optimized/cross-fetch.js\";\nconst {Headers: Headers$1} = crossFetch;\n;\nimport {GoTrueClient} from \"/-/@supabase/gotrue-js@v2.12.1-U9V71OI5x9GUonOWwkxZ/dist=es2019,mode=imports/optimized/@supabase/gotrue-js.js\";\nexport * from \"/-/@supabase/gotrue-js@v2.12.1-U9V71OI5x9GUonOWwkxZ/dist=es2019,mode=imports/optimized/@supabase/gotrue-js.js\";\nconst version = \"2.10.0\";\nconst DEFAULT_HEADERS = {\"X-Client-Info\": `supabase-js/${version}`};\nvar __awaiter = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nconst resolveFetch = (customFetch) => {\n  let _fetch;\n  if (customFetch) {\n    _fetch = customFetch;\n  } else if (typeof fetch === \"undefined\") {\n    _fetch = crossFetch;\n  } else {\n    _fetch = fetch;\n  }\n  return (...args) => _fetch(...args);\n};\nconst resolveHeadersConstructor = () => {\n  if (typeof Headers === \"undefined\") {\n    return Headers$1;\n  }\n  return Headers;\n};\nconst fetchWithAuth = (supabaseKey, getAccessToken, customFetch) => {\n  const fetch2 = resolveFetch(customFetch);\n  const HeadersConstructor = resolveHeadersConstructor();\n  return (input, init) => __awaiter(void 0, void 0, void 0, function* () {\n    var _a;\n    const accessToken = (_a = yield getAccessToken()) !== null && _a !== void 0 ? _a : supabaseKey;\n    let headers = new HeadersConstructor(init === null || init === void 0 ? void 0 : init.headers);\n    if (!headers.has(\"apikey\")) {\n      headers.set(\"apikey\", supabaseKey);\n    }\n    if (!headers.has(\"Authorization\")) {\n      headers.set(\"Authorization\", `Bearer ${accessToken}`);\n    }\n    return fetch2(input, Object.assign(Object.assign({}, init), {headers}));\n  });\n};\nfunction stripTrailingSlash(url) {\n  return url.replace(/\\/$/, \"\");\n}\nfunction applySettingDefaults(options, defaults) {\n  const {db: dbOptions, auth: authOptions, realtime: realtimeOptions, global: globalOptions} = options;\n  const {db: DEFAULT_DB_OPTIONS2, auth: DEFAULT_AUTH_OPTIONS2, realtime: DEFAULT_REALTIME_OPTIONS2, global: DEFAULT_GLOBAL_OPTIONS2} = defaults;\n  return {\n    db: Object.assign(Object.assign({}, DEFAULT_DB_OPTIONS2), dbOptions),\n    auth: Object.assign(Object.assign({}, DEFAULT_AUTH_OPTIONS2), authOptions),\n    realtime: Object.assign(Object.assign({}, DEFAULT_REALTIME_OPTIONS2), realtimeOptions),\n    global: Object.assign(Object.assign({}, DEFAULT_GLOBAL_OPTIONS2), globalOptions)\n  };\n}\nclass SupabaseAuthClient extends GoTrueClient {\n  constructor(options) {\n    super(options);\n  }\n}\nvar __awaiter$1 = function(thisArg, _arguments, P, generator) {\n  function adopt(value) {\n    return value instanceof P ? value : new P(function(resolve) {\n      resolve(value);\n    });\n  }\n  return new (P || (P = Promise))(function(resolve, reject) {\n    function fulfilled(value) {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function rejected(value) {\n      try {\n        step(generator[\"throw\"](value));\n      } catch (e) {\n        reject(e);\n      }\n    }\n    function step(result) {\n      result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n    }\n    step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n};\nconst DEFAULT_GLOBAL_OPTIONS = {\n  headers: DEFAULT_HEADERS\n};\nconst DEFAULT_DB_OPTIONS = {\n  schema: \"public\"\n};\nconst DEFAULT_AUTH_OPTIONS = {\n  autoRefreshToken: true,\n  persistSession: true,\n  detectSessionInUrl: true\n};\nconst DEFAULT_REALTIME_OPTIONS = {};\nclass SupabaseClient {\n  constructor(supabaseUrl, supabaseKey, options) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    this.supabaseUrl = supabaseUrl;\n    this.supabaseKey = supabaseKey;\n    if (!supabaseUrl)\n      throw new Error(\"supabaseUrl is required.\");\n    if (!supabaseKey)\n      throw new Error(\"supabaseKey is required.\");\n    const _supabaseUrl = stripTrailingSlash(supabaseUrl);\n    this.realtimeUrl = `${_supabaseUrl}/realtime/v1`.replace(/^http/i, \"ws\");\n    this.authUrl = `${_supabaseUrl}/auth/v1`;\n    this.storageUrl = `${_supabaseUrl}/storage/v1`;\n    const isPlatform = _supabaseUrl.match(/(supabase\\.co)|(supabase\\.in)/);\n    if (isPlatform) {\n      const urlParts = _supabaseUrl.split(\".\");\n      this.functionsUrl = `${urlParts[0]}.functions.${urlParts[1]}.${urlParts[2]}`;\n    } else {\n      this.functionsUrl = `${_supabaseUrl}/functions/v1`;\n    }\n    const defaultStorageKey = `sb-${new URL(this.authUrl).hostname.split(\".\")[0]}-auth-token`;\n    const DEFAULTS = {\n      db: DEFAULT_DB_OPTIONS,\n      realtime: DEFAULT_REALTIME_OPTIONS,\n      auth: Object.assign(Object.assign({}, DEFAULT_AUTH_OPTIONS), {storageKey: defaultStorageKey}),\n      global: DEFAULT_GLOBAL_OPTIONS\n    };\n    const settings = applySettingDefaults(options !== null && options !== void 0 ? options : {}, DEFAULTS);\n    this.storageKey = (_b = (_a = settings.auth) === null || _a === void 0 ? void 0 : _a.storageKey) !== null && _b !== void 0 ? _b : \"\";\n    this.headers = (_d = (_c = settings.global) === null || _c === void 0 ? void 0 : _c.headers) !== null && _d !== void 0 ? _d : {};\n    this.auth = this._initSupabaseAuthClient((_e = settings.auth) !== null && _e !== void 0 ? _e : {}, this.headers, (_f = settings.global) === null || _f === void 0 ? void 0 : _f.fetch);\n    this.fetch = fetchWithAuth(supabaseKey, this._getAccessToken.bind(this), (_g = settings.global) === null || _g === void 0 ? void 0 : _g.fetch);\n    this.realtime = this._initRealtimeClient(Object.assign({headers: this.headers}, settings.realtime));\n    this.rest = new PostgrestClient(`${_supabaseUrl}/rest/v1`, {\n      headers: this.headers,\n      schema: (_h = settings.db) === null || _h === void 0 ? void 0 : _h.schema,\n      fetch: this.fetch\n    });\n    this._listenForAuthEvents();\n  }\n  get functions() {\n    return new FunctionsClient(this.functionsUrl, {\n      headers: this.headers,\n      customFetch: this.fetch\n    });\n  }\n  get storage() {\n    return new StorageClient(this.storageUrl, this.headers, this.fetch);\n  }\n  from(relation) {\n    return this.rest.from(relation);\n  }\n  rpc(fn, args = {}, options) {\n    return this.rest.rpc(fn, args, options);\n  }\n  channel(name, opts = {config: {}}) {\n    return this.realtime.channel(name, opts);\n  }\n  getChannels() {\n    return this.realtime.getChannels();\n  }\n  removeChannel(channel) {\n    return this.realtime.removeChannel(channel);\n  }\n  removeAllChannels() {\n    return this.realtime.removeAllChannels();\n  }\n  _getAccessToken() {\n    var _a, _b;\n    return __awaiter$1(this, void 0, void 0, function* () {\n      const {data} = yield this.auth.getSession();\n      return (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : null;\n    });\n  }\n  _initSupabaseAuthClient({autoRefreshToken, persistSession, detectSessionInUrl, storage, storageKey}, headers, fetch2) {\n    const authHeaders = {\n      Authorization: `Bearer ${this.supabaseKey}`,\n      apikey: `${this.supabaseKey}`\n    };\n    return new SupabaseAuthClient({\n      url: this.authUrl,\n      headers: Object.assign(Object.assign({}, authHeaders), headers),\n      storageKey,\n      autoRefreshToken,\n      persistSession,\n      detectSessionInUrl,\n      storage,\n      fetch: fetch2\n    });\n  }\n  _initRealtimeClient(options) {\n    return new RealtimeClient(this.realtimeUrl, Object.assign(Object.assign({}, options), {params: Object.assign({apikey: this.supabaseKey}, options === null || options === void 0 ? void 0 : options.params)}));\n  }\n  _listenForAuthEvents() {\n    let data = this.auth.onAuthStateChange((event, session) => {\n      this._handleTokenChanged(event, session === null || session === void 0 ? void 0 : session.access_token, \"CLIENT\");\n    });\n    return data;\n  }\n  _handleTokenChanged(event, token, source) {\n    if ((event === \"TOKEN_REFRESHED\" || event === \"SIGNED_IN\") && this.changedAccessToken !== token) {\n      this.realtime.setAuth(token !== null && token !== void 0 ? token : null);\n      this.changedAccessToken = token;\n    } else if (event === \"SIGNED_OUT\" || event === \"USER_DELETED\") {\n      this.realtime.setAuth(this.supabaseKey);\n      if (source == \"STORAGE\")\n        this.auth.signOut();\n      this.changedAccessToken = void 0;\n    }\n  }\n}\nconst createClient = (supabaseUrl, supabaseKey, options) => {\n  return new SupabaseClient(supabaseUrl, supabaseKey, options);\n};\nexport {SupabaseClient, createClient};\nexport default null;\n","/*\n * Skypack CDN - @supabase/supabase-js@2.10.0\n *\n * Learn more:\n *   📙 Package Documentation: https://www.skypack.dev/view/@supabase/supabase-js\n *   📘 Skypack Documentation: https://www.skypack.dev/docs\n *\n * Pinned URL: (Optimized for Production)\n *   ▶️ Normal: https://cdn.skypack.dev/pin/@supabase/supabase-js@v2.10.0-iuC42NKMzc0WgF6sPBaq/mode=imports/optimized/@supabase/supabase-js.js\n *   ⏩ Minified: https://cdn.skypack.dev/pin/@supabase/supabase-js@v2.10.0-iuC42NKMzc0WgF6sPBaq/mode=imports,min/optimized/@supabase/supabase-js.js\n *\n */\n\n// Browser-Optimized Imports (Don't directly import the URLs below in your application!)\nexport * from '/-/@supabase/supabase-js@v2.10.0-iuC42NKMzc0WgF6sPBaq/dist=es2019,mode=imports/optimized/@supabase/supabase-js.js';\nexport {default} from '/-/@supabase/supabase-js@v2.10.0-iuC42NKMzc0WgF6sPBaq/dist=es2019,mode=imports/optimized/@supabase/supabase-js.js';\n","import {\n  useCourseDetailConversionTracking\n} from \"./chunk-TAP4VNEF.mjs\";\nimport {\n  triggerConversionAPI,\n  useTailwind\n} from \"./chunk-SIZSNBFW.mjs\";\nimport {\n  CLERK_SRC,\n  PUBLISHABLE_KEY,\n  showDebug\n} from \"./chunk-77OKAR3P.mjs\";\nimport {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\nimport {\n  __async,\n  __spreadValues\n} from \"./chunk-JWK35I2R.mjs\";\n\n// src/auth/Init.tsx\nimport { useEffect, useLayoutEffect, useState } from \"react\";\nimport { ControlType } from \"framer\";\nimport { createClient } from \"https://cdn.skypack.dev/@supabase/supabase-js@2.10.0\";\n\n// node_modules/.pnpm/@clerk+localizations@2.8.1/node_modules/@clerk/localizations/dist/index.mjs\nvar nlNL = {\n  locale: \"nl-NL\",\n  backButton: \"Terug\",\n  badge__default: \"Standaard\",\n  badge__otherImpersonatorDevice: \"Ander immitatie apparaat\",\n  badge__primary: \"Hoofd\",\n  badge__requiresAction: \"Actie nodig\",\n  badge__thisDevice: \"Dit apparaat\",\n  badge__unverified: \"Ongeverifieerd\",\n  badge__userDevice: \"Gebruikersapparaat\",\n  badge__you: \"Jij\",\n  createOrganization: {\n    formButtonSubmit: \"Maak organisatie aan\",\n    invitePage: {\n      formButtonReset: \"Overslaan\"\n    },\n    title: \"Organisatie aanmaken\"\n  },\n  dates: {\n    lastDay: \"Gisteren om {{ date | timeString('nl-NL') }}\",\n    next6Days: \"{{ date | weekday('nl-NL','long') }} om {{ date | timeString('nl-NL') }}\",\n    nextDay: \"Morgen om {{ date | timeString('nl-NL') }}\",\n    numeric: \"{{ date | numeric('nl-NL') }}\",\n    previous6Days: \"Vorige {{ date | weekday('nl-NL','long') }} om {{ date | timeString('nl-NL') }}\",\n    sameDay: \"Vandaag om {{ date | timeString('nl-NL') }}\"\n  },\n  dividerText: \"or\",\n  footerActionLink__useAnotherMethod: \"Een andere methode gebruiken\",\n  footerPageLink__help: \"Help\",\n  footerPageLink__privacy: \"Privacy\",\n  footerPageLink__terms: \"Voorwaarden\",\n  formButtonPrimary: \"Doorgaan\",\n  formButtonPrimary__verify: \"Verify\",\n  formFieldAction__forgotPassword: \"Wachtwoord vergeten?\",\n  formFieldError__matchingPasswords: \"Passwords match.\",\n  formFieldError__notMatchingPasswords: \"Passwords don't match.\",\n  formFieldError__verificationLinkExpired: \"The verification link expired. Please request a new link.\",\n  formFieldHintText__optional: \"Optioneel\",\n  formFieldHintText__slug: \"A slug is a human-readable ID that must be unique. It\\u2019s often used in URLs.\",\n  formFieldInputPlaceholder__backupCode: \"\",\n  formFieldInputPlaceholder__confirmDeletionUserAccount: \"Delete account\",\n  formFieldInputPlaceholder__emailAddress: \"\",\n  formFieldInputPlaceholder__emailAddress_username: \"\",\n  formFieldInputPlaceholder__emailAddresses: \"Typ of plak \\xE9\\xE9n of meerdere emailadressen, gescheiden door spaties of komma's.\",\n  formFieldInputPlaceholder__firstName: \"\",\n  formFieldInputPlaceholder__lastName: \"\",\n  formFieldInputPlaceholder__organizationDomain: \"\",\n  formFieldInputPlaceholder__organizationDomainEmailAddress: \"\",\n  formFieldInputPlaceholder__organizationName: \"\",\n  formFieldInputPlaceholder__organizationSlug: \"\",\n  formFieldInputPlaceholder__password: \"\",\n  formFieldInputPlaceholder__phoneNumber: \"\",\n  formFieldInputPlaceholder__username: \"\",\n  formFieldLabel__automaticInvitations: \"Enable automatic invitations for this domain\",\n  formFieldLabel__backupCode: \"Backupcode\",\n  formFieldLabel__confirmDeletion: \"Confirmation\",\n  formFieldLabel__confirmPassword: \"Wachtwoord bevestigen\",\n  formFieldLabel__currentPassword: \"Current password\",\n  formFieldLabel__emailAddress: \"E-mailadres\",\n  formFieldLabel__emailAddress_username: \"E-mailadres of gebruikersnaam\",\n  formFieldLabel__emailAddresses: \"E-mailadressen\",\n  formFieldLabel__firstName: \"Voornaam\",\n  formFieldLabel__lastName: \"Achternaam\",\n  formFieldLabel__newPassword: \"Nieuw wachtwoord\",\n  formFieldLabel__organizationDomain: \"Domain\",\n  formFieldLabel__organizationDomainDeletePending: \"Delete pending invitations and suggestions\",\n  formFieldLabel__organizationDomainEmailAddress: \"Verification email address\",\n  formFieldLabel__organizationDomainEmailAddressDescription: \"Enter an email address under this domain to receive a code and verify this domain.\",\n  formFieldLabel__organizationName: \"Organisatienaam\",\n  formFieldLabel__organizationSlug: \"Slug\",\n  formFieldLabel__passkeyName: void 0,\n  formFieldLabel__password: \"Wachtwoord\",\n  formFieldLabel__phoneNumber: \"Telefoonnummer\",\n  formFieldLabel__role: \"Rol\",\n  formFieldLabel__signOutOfOtherSessions: \"Sign out of all other devices\",\n  formFieldLabel__username: \"Gebruikersnaam\",\n  impersonationFab: {\n    action__signOut: \"Uitloggen\",\n    title: \"Ingelogd als {{identifier}}\"\n  },\n  maintenanceMode: void 0,\n  membershipRole__admin: \"Admin\",\n  membershipRole__basicMember: \"Lid\",\n  membershipRole__guestMember: \"Gast\",\n  organizationList: {\n    action__createOrganization: \"Create organization\",\n    action__invitationAccept: \"Join\",\n    action__suggestionsAccept: \"Request to join\",\n    createOrganization: \"Create Organization\",\n    invitationAcceptedLabel: \"Joined\",\n    subtitle: \"to continue to {{applicationName}}\",\n    suggestionsAcceptedLabel: \"Pending approval\",\n    title: \"Choose an account\",\n    titleWithoutPersonal: \"Choose an organization\"\n  },\n  organizationProfile: {\n    badge__automaticInvitation: \"Automatic invitations\",\n    badge__automaticSuggestion: \"Automatic suggestions\",\n    badge__manualInvitation: \"No automatic enrollment\",\n    badge__unverified: \"Unverified\",\n    createDomainPage: {\n      subtitle: \"Add the domain to verify. Users with email addresses at this domain can join the organization automatically or request to join.\",\n      title: \"Add domain\"\n    },\n    invitePage: {\n      detailsTitle__inviteFailed: \"De uitnodigingen konden niet verzonden worden. Los het volgende op en probeer het opnieuw:\",\n      formButtonPrimary__continue: \"Uitnodigingen verzenden\",\n      selectDropdown__role: \"Select role\",\n      subtitle: \"Nodig nieuwe leden uit voor deze organisatie\",\n      successMessage: \"Uitnodigingen succesvol verzonden\",\n      title: \"Leden uitnodigen\"\n    },\n    membersPage: {\n      action__invite: \"Uitnodigen\",\n      activeMembersTab: {\n        menuAction__remove: \"Verwijder lid\",\n        tableHeader__actions: \"\",\n        tableHeader__joined: \"Toegetreden\",\n        tableHeader__role: \"Rol\",\n        tableHeader__user: \"Gebruiker\"\n      },\n      detailsTitle__emptyRow: \"Geen leden gevonden\",\n      invitationsTab: {\n        autoInvitations: {\n          headerSubtitle: \"Invite users by connecting an email domain with your organization. Anyone who signs up with a matching email domain will be able to join the organization anytime.\",\n          headerTitle: \"Automatic invitations\",\n          primaryButton: \"Manage verified domains\"\n        },\n        table__emptyRow: \"No invitations to display\"\n      },\n      invitedMembersTab: {\n        menuAction__revoke: \"Uitnodiging intrekken\",\n        tableHeader__invited: \"Uitgenodigd\"\n      },\n      requestsTab: {\n        autoSuggestions: {\n          headerSubtitle: \"Users who sign up with a matching email domain, will be able to see a suggestion to request to join your organization.\",\n          headerTitle: \"Automatic suggestions\",\n          primaryButton: \"Manage verified domains\"\n        },\n        menuAction__approve: \"Approve\",\n        menuAction__reject: \"Reject\",\n        tableHeader__requested: \"Requested access\",\n        table__emptyRow: \"No requests to display\"\n      },\n      start: {\n        headerTitle__invitations: \"Invitations\",\n        headerTitle__members: \"Members\",\n        headerTitle__requests: \"Requests\"\n      }\n    },\n    navbar: {\n      description: \"Manage your organization.\",\n      general: \"General\",\n      members: \"Members\",\n      title: \"Organization\"\n    },\n    profilePage: {\n      dangerSection: {\n        deleteOrganization: {\n          actionDescription: 'Type \"{{organizationName}}\" below to continue.',\n          messageLine1: \"Are you sure you want to delete this organization?\",\n          messageLine2: \"This action is permanent and irreversible.\",\n          successMessage: \"You have deleted the organization.\",\n          title: \"Delete organization\"\n        },\n        leaveOrganization: {\n          actionDescription: 'Type \"{{organizationName}}\" below to continue.',\n          messageLine1: \"Weet je zeker dat je deze organisatie wilt verlaten? Je zult toegang verliezen tot deze organisatie en haar applicaties.\",\n          messageLine2: \"Deze actie is permanent en onomkeerbaar.\",\n          successMessage: \"Je hebt deze organisatie verlaten.\",\n          title: \"Verlaat organisatie\"\n        },\n        title: \"Gevaar\"\n      },\n      domainSection: {\n        menuAction__manage: \"Manage\",\n        menuAction__remove: \"Delete\",\n        menuAction__verify: \"Verify\",\n        primaryButton: \"Add domain\",\n        subtitle: \"Allow users to join the organization automatically or request to join based on a verified email domain.\",\n        title: \"Verified domains\"\n      },\n      successMessage: \"De organisatie is bijgewerkt.\",\n      title: \"Organisatieprofiel\"\n    },\n    removeDomainPage: {\n      messageLine1: \"The email domain {{domain}} will be removed.\",\n      messageLine2: \"Users won\\u2019t be able to join the organization automatically after this.\",\n      successMessage: \"{{domain}} has been removed.\",\n      title: \"Remove domain\"\n    },\n    start: {\n      headerTitle__general: \"General\",\n      headerTitle__members: \"Leden\",\n      profileSection: {\n        primaryButton: \"\",\n        title: \"Organization Profile\",\n        uploadAction__title: \"Logo\"\n      }\n    },\n    verifiedDomainPage: {\n      dangerTab: {\n        calloutInfoLabel: \"Removing this domain will affect invited users.\",\n        removeDomainActionLabel__remove: \"Remove domain\",\n        removeDomainSubtitle: \"Remove this domain from your verified domains\",\n        removeDomainTitle: \"Remove domain\"\n      },\n      enrollmentTab: {\n        automaticInvitationOption__description: \"Users are automatically invited to join the organization when they sign-up and can join anytime.\",\n        automaticInvitationOption__label: \"Automatic invitations\",\n        automaticSuggestionOption__description: \"Users receive a suggestion to request to join, but must be approved by an admin before they are able to join the organization.\",\n        automaticSuggestionOption__label: \"Automatic suggestions\",\n        calloutInfoLabel: \"Changing the enrollment mode will only affect new users.\",\n        calloutInvitationCountLabel: \"Pending invitations sent to users: {{count}}\",\n        calloutSuggestionCountLabel: \"Pending suggestions sent to users: {{count}}\",\n        manualInvitationOption__description: \"Users can only be invited manually to the organization.\",\n        manualInvitationOption__label: \"No automatic enrollment\",\n        subtitle: \"Choose how users from this domain can join the organization.\"\n      },\n      start: {\n        headerTitle__danger: \"Danger\",\n        headerTitle__enrollment: \"Enrollment options\"\n      },\n      subtitle: \"The domain {{domain}} is now verified. Continue by selecting enrollment mode.\",\n      title: \"Update {{domain}}\"\n    },\n    verifyDomainPage: {\n      formSubtitle: \"Enter the verification code sent to your email address\",\n      formTitle: \"Verification code\",\n      resendButton: \"Didn't receive a code? Resend\",\n      subtitle: \"The domain {{domainName}} needs to be verified via email.\",\n      subtitleVerificationCodeScreen: \"A verification code was sent to {{emailAddress}}. Enter the code to continue.\",\n      title: \"Verify domain\"\n    }\n  },\n  organizationSwitcher: {\n    action__createOrganization: \"Maak organisatie aan\",\n    action__invitationAccept: \"Join\",\n    action__manageOrganization: \"Beheer organisatie\",\n    action__suggestionsAccept: \"Request to join\",\n    notSelected: \"Geen organisatie geselecteerd\",\n    personalWorkspace: \"Persoonlijke werkruimte\",\n    suggestionsAcceptedLabel: \"Pending approval\"\n  },\n  paginationButton__next: \"Volgende\",\n  paginationButton__previous: \"Vorige\",\n  paginationRowText__displaying: \"Weergeven\",\n  paginationRowText__of: \"van\",\n  signIn: {\n    accountSwitcher: {\n      action__addAccount: \"Add account\",\n      action__signOutAll: \"Sign out of all accounts\",\n      subtitle: \"Select the account with which you wish to continue.\",\n      title: \"Choose an account\"\n    },\n    alternativeMethods: {\n      actionLink: \"Help\",\n      actionText: \"Don\\u2019t have any of these?\",\n      blockButton__backupCode: \"Gebruik een backupcode\",\n      blockButton__emailCode: \"Verzend code naar {{identifier}}\",\n      blockButton__emailLink: \"Verzend link naar {{identifier}}\",\n      blockButton__passkey: void 0,\n      blockButton__password: \"Inloggen met je wachtwoord\",\n      blockButton__phoneCode: \"Verzend code naar {{identifier}}\",\n      blockButton__totp: \"Gebruik je authenticator app\",\n      getHelp: {\n        blockButton__emailSupport: \"E-mail klantenservice\",\n        content: \"Als je geen toegang hebt neem dan contact op met de klantenservice en we helpen je verder.\",\n        title: \"Help\"\n      },\n      subtitle: \"Facing issues? You can use any of these methods to sign in.\",\n      title: \"Gebruik een andere methode\"\n    },\n    backupCodeMfa: {\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Voer een backupcode in\"\n    },\n    emailCode: {\n      formTitle: \"Verificatiecode\",\n      resendButton: \"Verstuur code opnieuw\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Check je e-mail\"\n    },\n    emailLink: {\n      clientMismatch: {\n        subtitle: void 0,\n        title: void 0\n      },\n      expired: {\n        subtitle: \"Ga naar de oorspronkelijke tab om verder te gaan.\",\n        title: \"Deze verificatielink is verlopen\"\n      },\n      failed: {\n        subtitle: \"Ga naar de oorspronkelijke tab om verder te gaan.\",\n        title: \"Deze verificatielink is niet geldig\"\n      },\n      formSubtitle: \"Gebruik de verificatielink die verzonden is naar je e-mailadres\",\n      formTitle: \"Verificatielink\",\n      loading: {\n        subtitle: \"Je zal weldra doorgestuurd worden\",\n        title: \"Inloggen ...\"\n      },\n      resendButton: \"Verstuur link opnieuw\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Check je e-mail\",\n      unusedTab: {\n        title: \"Je kan deze tab sluiten.\"\n      },\n      verified: {\n        subtitle: \"Je zal weldra doorgestuurd worden\",\n        title: \"Successvol ingelogd\"\n      },\n      verifiedSwitchTab: {\n        subtitle: \"Ga naar de oorspronkelijke tab om verder te gaan\",\n        subtitleNewTab: \"Ga naar de pasgeopende tab om verder te gaan\",\n        titleNewTab: \"Ingelogd in andere tab\"\n      }\n    },\n    forgotPassword: {\n      formTitle: \"Reset password code\",\n      resendButton: \"Didn't receive a code? Resend\",\n      subtitle: \"to reset your password\",\n      subtitle_email: \"First, enter the code sent to your email ID\",\n      subtitle_phone: \"First, enter the code sent to your phone\",\n      title: \"Reset password\"\n    },\n    forgotPasswordAlternativeMethods: {\n      blockButton__resetPassword: \"Reset your password\",\n      label__alternativeMethods: \"Or, sign in with another method\",\n      title: \"Forgot Password?\"\n    },\n    noAvailableMethods: {\n      message: \"Het is niet mogelijk om door te gaan met inloggen. Er is geen beschikbare authenticatiefactor.\",\n      subtitle: \"Er heeft zich een fout voorgedaan\",\n      title: \"Inloggen onmogelijk\"\n    },\n    passkey: {\n      subtitle: void 0,\n      title: void 0\n    },\n    password: {\n      actionLink: \"Gebruik een andere methode\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Vul je wachtwoord in\"\n    },\n    passwordPwned: {\n      title: void 0\n    },\n    phoneCode: {\n      formTitle: \"Verificatie code\",\n      resendButton: \"Verstuur code opnieuw\",\n      subtitle: \"om verder te gaan naar {{applicationName}}\",\n      title: \"Check je telefoon\"\n    },\n    phoneCodeMfa: {\n      formTitle: \"Verificatie code\",\n      resendButton: \"Verstuur code opnieuw\",\n      subtitle: \"\",\n      title: \"Check je telefoon\"\n    },\n    resetPassword: {\n      formButtonPrimary: \"Reset Password\",\n      requiredMessage: \"For security reasons, it is required to reset your password.\",\n      successMessage: \"Your password was successfully changed. Signing you in, please wait a moment.\",\n      title: \"Set new password\"\n    },\n    resetPasswordMfa: {\n      detailsLabel: \"We need to verify your identity before resetting your password.\"\n    },\n    start: {\n      actionLink: \"Registreren\",\n      actionLink__use_email: \"Use email\",\n      actionLink__use_email_username: \"Use email or username\",\n      actionLink__use_passkey: void 0,\n      actionLink__use_phone: \"Use phone\",\n      actionLink__use_username: \"Use username\",\n      actionText: \"Geen account?\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Log in\"\n    },\n    totpMfa: {\n      formTitle: \"Verificatiecode\",\n      subtitle: \"\",\n      title: \"Tweestapsverificatie\"\n    }\n  },\n  signInEnterPasswordTitle: \"Vul je wachtwoord in\",\n  signUp: {\n    continue: {\n      actionLink: \"Inloggen\",\n      actionText: \"Heb je een account?\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Vul de ontbrekende velden in\"\n    },\n    emailCode: {\n      formSubtitle: \"Voer de verificatiecode in die verzonden is naar je e-mailadres\",\n      formTitle: \"Verificatiecode\",\n      resendButton: \"Verstuur code opnieuw\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Bevestig je e-mailadres\"\n    },\n    emailLink: {\n      clientMismatch: {\n        subtitle: void 0,\n        title: void 0\n      },\n      formSubtitle: \"Gebruik de verificatielink die verzonden is naar je e-mailadres\",\n      formTitle: \"Verificatielink\",\n      loading: {\n        title: \"Registreren ...\"\n      },\n      resendButton: \"Verstuur link opnieuw\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Bevestig je e-mailadres\",\n      verified: {\n        title: \"Succesvol geregistreerd\"\n      },\n      verifiedSwitchTab: {\n        subtitle: \"Ga naar de pas geopende tab om verder te gaan\",\n        subtitleNewTab: \"Ga naar de vorige tab om verder te gaan\",\n        title: \"E-mail bevestigd\"\n      }\n    },\n    phoneCode: {\n      formSubtitle: \"Voer de verificatiecode in die verzonden is naar je telefoonnummer\",\n      formTitle: \"Verificatiecode\",\n      resendButton: \"Verstuur code opnieuw\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Bevestig je telefoonnummer\"\n    },\n    start: {\n      actionLink: \"Inloggen\",\n      actionLink__use_email: void 0,\n      actionLink__use_phone: void 0,\n      actionText: \"Heb je al een account?\",\n      subtitle: \"om door te gaan naar {{applicationName}}\",\n      title: \"Maak je account aan\"\n    }\n  },\n  socialButtonsBlockButton: \"Ga verder met {{provider|titleize}}\",\n  socialButtonsBlockButtonManyInView: void 0,\n  unstable__errors: {\n    captcha_invalid: \"Sign up unsuccessful due to failed security validations. Please refresh the page to try again or reach out to support for more assistance.\",\n    captcha_unavailable: \"Sign up unsuccessful due to failed bot validation. Please refresh the page to try again or reach out to support for more assistance.\",\n    form_code_incorrect: \"\",\n    form_identifier_exists: \"\",\n    form_identifier_exists__email_address: void 0,\n    form_identifier_exists__phone_number: void 0,\n    form_identifier_exists__username: void 0,\n    form_identifier_not_found: \"\",\n    form_param_format_invalid: \"\",\n    form_param_format_invalid__email_address: \"Email address must be a valid email address.\",\n    form_param_format_invalid__phone_number: \"Phone number must be in a valid international format\",\n    form_param_max_length_exceeded__first_name: \"First name should not exceed 256 characters.\",\n    form_param_max_length_exceeded__last_name: \"Last name should not exceed 256 characters.\",\n    form_param_max_length_exceeded__name: \"Name should not exceed 256 characters.\",\n    form_param_nil: \"\",\n    form_password_incorrect: \"\",\n    form_password_length_too_short: \"\",\n    form_password_not_strong_enough: \"Your password is not strong enough.\",\n    form_password_pwned: \"\",\n    form_password_pwned__sign_in: void 0,\n    form_password_size_in_bytes_exceeded: \"Your password has exceeded the maximum number of bytes allowed, please shorten it or remove some special characters.\",\n    form_password_validation_failed: \"Incorrect Password\",\n    form_username_invalid_character: \"\",\n    form_username_invalid_length: \"\",\n    identification_deletion_failed: \"You cannot delete your last identification.\",\n    not_allowed_access: \"\",\n    passkey_already_exists: void 0,\n    passkey_not_supported: void 0,\n    passkey_pa_not_supported: void 0,\n    passkey_registration_cancelled: void 0,\n    passkey_retrieval_cancelled: void 0,\n    passwordComplexity: {\n      maximumLength: \"\",\n      minimumLength: \"\",\n      requireLowercase: \"\",\n      requireNumbers: \"\",\n      requireSpecialCharacter: \"\",\n      requireUppercase: \"\",\n      sentencePrefix: \"\"\n    },\n    phone_number_exists: \"This phone number is taken. Please try another.\",\n    zxcvbn: {\n      couldBeStronger: \"Your password works, but could be stronger. Try adding more characters.\",\n      goodPassword: \"Your password meets all the necessary requirements.\",\n      notEnough: \"Je wachtwoord is niet sterk genoeg.\",\n      suggestions: {\n        allUppercase: \"Zet een deel in hoofdletters, maar niet alle letters.\",\n        anotherWord: \"Voeg meer woorden toe die minder vaak voorkomen.\",\n        associatedYears: \"Vermijd jaartallen die met jou geassocieerd zijn.\",\n        capitalization: \"Zet meer dan de eerste letter in hoofdletter.\",\n        dates: \"Vermijd data en jaartallen die met jou geassocieerd zijn.\",\n        l33t: \"Vermijd voorspelbare vervangingen, zoals '@' voor 'a'.\",\n        longerKeyboardPattern: \"Gebruik langere toetsenbord patronen, en wissel meerdere keren van richting.\",\n        noNeed: \"Je kan ook een sterk wachtwoord maken zonder speciale tekens, hoofdletters of nummers.\",\n        pwned: \"Als u dit wachtwoord elders gebruikt, moet u het veranderen.\",\n        recentYears: \"Vermijd recente jaartallen.\",\n        repeated: \"Vermijd herhalende woorden en letters.\",\n        reverseWords: \"Vermijd het omdraaien van veelvoorkomende woorden.\",\n        sequences: \"Vermijd veelvoorkomende tekstreeksen.\",\n        useWords: \"Gebruik meerdere woorden, maar vermijd veelvoorkomende zinnen.\"\n      },\n      warnings: {\n        common: \"Dit wachtwoord wordt veel gebruikt.\",\n        commonNames: \"Veelvoorkomende voor- en achternamen zijn makkelijk te raden.\",\n        dates: \"Datums zijn makkelijk te raden.\",\n        extendedRepeat: 'Herhalende patronen zoals \"abcabcabc\" zijn makkelijk te raden.',\n        keyPattern: \"Korte toetsenbord patronen zijn makkelijk te raden.\",\n        namesByThemselves: \"Voor- en achternamen op zich zijn makkelijk te raden.\",\n        pwned: \"Dit wachtwoord is in een datalek gevonden.\",\n        recentYears: \"Recente jaartallen zijn makkelijk te raden.\",\n        sequences: 'Veelvoorkomende tekstreeksen zoals \"abc\" zijn makkelijk te raden.',\n        similarToCommon: \"Dit lijkt op een veelvoorkomend wachtwoord.\",\n        simpleRepeat: 'Herhalende letters zoals \"aaa\" zijn makkelijk te raden.',\n        straightRow: \"Opeenvolgende toetsen op jouw toetsenbord zijn makkelijk te raden.\",\n        topHundred: \"Dit wachtwoord wordt erg veel gebruikt.\",\n        topTen: \"Dit wachtwoord wordt heel erg veel gebruikt.\",\n        userInputs: \"Vermijd persoonlijke of website gerelateerde woorden.\",\n        wordByItself: \"Woorden op zich zijn makkelijk te raden.\"\n      }\n    }\n  },\n  userButton: {\n    action__addAccount: \"Account toevoegen\",\n    action__manageAccount: \"Account beheren\",\n    action__signOut: \"Uitloggen\",\n    action__signOutAll: \"Uitloggen uit alle accounts\"\n  },\n  userProfile: {\n    backupCodePage: {\n      actionLabel__copied: \"Gekopieerd!\",\n      actionLabel__copy: \"Kopieer\",\n      actionLabel__download: \"Download .txt\",\n      actionLabel__print: \"Print\",\n      infoText1: \"Backupcodes zullen voor dit account ingeschakeld zijn.\",\n      infoText2: \"Houd de backupcodes geheim en bewaar ze veilig. U kunt backupcodes opnieuw genereren als u vermoedt dat ze zijn aangetast.\",\n      subtitle__codelist: \"Sla ze veilig op en hou ze geheim.\",\n      successMessage: \"Backupcodes zijn nu ingeschakeld. U kunt er een van gebruiken om in te loggen op uw account als u geen toegang meer heeft tot uw authenticatieapparaat. Elke code kan maar \\xE9\\xE9n keer gebruikt worden.\",\n      successSubtitle: \"Je kunt \\xE9\\xE9n van deze gebruiken om in te loggen op je account als je geen toegang meer hebt tot je authenticatieapparaat.\",\n      title: \"Voeg backup code verificatie toe\",\n      title__codelist: \"Backup codes\"\n    },\n    connectedAccountPage: {\n      formHint: \"Kies een provider om je account te verbinden.\",\n      formHint__noAccounts: \"Er zijn geen beschikbare externe accountproviders.\",\n      removeResource: {\n        messageLine1: \"{{identifier}} zal verwijderd worden uit dit account.\",\n        messageLine2: \"Je kunt deze verbonden account niet meer gebruiken en afhankelijke functies zullen niet meer werken.\",\n        successMessage: \"{{connectedAccount}} is verwijderd uit je account.\",\n        title: \"Verwijder externe account\"\n      },\n      socialButtonsBlockButton: \"Verbind {{provider|titleize}} account\",\n      successMessage: \"Deze provider is toegevoegd aan je account.\",\n      title: \"Verbind externe account\"\n    },\n    deletePage: {\n      actionDescription: 'Type \"Delete account\" below to continue.',\n      confirm: \"Delete account\",\n      messageLine1: \"Are you sure you want to delete your account?\",\n      messageLine2: \"This action is permanent and irreversible.\",\n      title: \"Delete account\"\n    },\n    emailAddressPage: {\n      emailCode: {\n        formHint: \"Een mail met daarin een verificatiecode is verstuurd naar dit adres.\",\n        formSubtitle: \"Voer de verificatiecode in die verstuurd is naar {{identifier}}\",\n        formTitle: \"Verificatiecode\",\n        resendButton: \"Verstuur code opnieuw\",\n        successMessage: \"Het e-mailadres {{identifier}} is toegevoegd aan je account.\"\n      },\n      emailLink: {\n        formHint: \"Een mail met daarin een verificatielink is verstuurd naar dit adres.\",\n        formSubtitle: \"Klik op de verificatielink die verstuurd is naar {{identifier}}\",\n        formTitle: \"Verificatielink\",\n        resendButton: \"Verstuur link opnieuw\",\n        successMessage: \"Het e-mailadres {{identifier}} is toegevoegd aan je account.\"\n      },\n      removeResource: {\n        messageLine1: \"{{identifier}} zal verwijderd worden uit dit account.\",\n        messageLine2: \"Je zal niet meer kunnen inloggen met dit e-mailadres.\",\n        successMessage: \"{{emailAddress}} is verwijderd uit je account.\",\n        title: \"Verwijder e-mailadres\"\n      },\n      title: \"E-mailadres toevoegen\",\n      verifyTitle: \"Verify email address\"\n    },\n    formButtonPrimary__add: \"Add\",\n    formButtonPrimary__continue: \"Doorgaan\",\n    formButtonPrimary__finish: \"Afronden\",\n    formButtonPrimary__remove: \"Remove\",\n    formButtonPrimary__save: \"Save\",\n    formButtonReset: \"Annuleren\",\n    mfaPage: {\n      formHint: \"Kies een methode om toe te voegen.\",\n      title: \"Tweestapsverificatie toevoegen\"\n    },\n    mfaPhoneCodePage: {\n      backButton: \"Use existing number\",\n      primaryButton__addPhoneNumber: \"Telefoonnummer toevoegen\",\n      removeResource: {\n        messageLine1: \"{{identifier}} zal niet langer verificatiecodes ontvangen bij het inloggen.\",\n        messageLine2: \"Uw account is mogelijk niet zo veilig. Weet je zeker dat je door wilt gaan?\",\n        successMessage: \"SMS-code tweestapsverificatie is verwijderd voor {{mfaPhoneCode}}\",\n        title: \"Verwijder tweestapsverificatie\"\n      },\n      subtitle__availablePhoneNumbers: \"Selecteer een telefoonnummer om je te registreren voor SMS-code twee-stapsverificatie.\",\n      subtitle__unavailablePhoneNumbers: \"Er zijn geen beschikbare telefoonnummers om te registreren voor SMS-code tweestapsverificatie.\",\n      successMessage1: \"When signing in, you will need to enter a verification code sent to this phone number as an additional step.\",\n      successMessage2: \"Save these backup codes and store them somewhere safe. If you lose access to your authentication device, you can use backup codes to sign in.\",\n      successTitle: \"SMS code verification enabled\",\n      title: \"Voeg SMS-code verificatie toe\"\n    },\n    mfaTOTPPage: {\n      authenticatorApp: {\n        buttonAbleToScan__nonPrimary: \"Alternatief, scan een QR code\",\n        buttonUnableToScan__nonPrimary: \"Kan je de code niet scannen?\",\n        infoText__ableToScan: \"Scan de QR code met je authenticator app om de authenticator toe te voegen.\",\n        infoText__unableToScan: \"Stel een nieuwe aanmeldmethode in op je authenticator en voer de onderstaande sleutel in.\",\n        inputLabel__unableToScan1: \"Zorg ervoor dat tijdsgebaseerde of eenmalige wachtwoorden zijn ingeschakeld, en voltooi vervolgens het koppelen van uw account.\",\n        inputLabel__unableToScan2: \"Als je authenticator TOTP-URI's ondersteunt, kun je ook de volledige URI kopi\\xEBren.\"\n      },\n      removeResource: {\n        messageLine1: \"Verificatiecodes van deze authenticator zullen niet langer vereist zijn bij het inloggen.\",\n        messageLine2: \"Uw account is mogelijk niet zo veilig. Weet je zeker dat je door wilt gaan?\",\n        successMessage: \"Tweestapsverificatie via authenticator-applicatie is verwijderd.\",\n        title: \"Verwijder tweestapsverificatie\"\n      },\n      successMessage: \"Tweestapsverificatie is nu ingesteld. Bij het inloggen zal je een verificatiecode van je authenticator app moeten invoeren.\",\n      title: \"Voeg authenticator toe\",\n      verifySubtitle: \"Voer de verificatiecode in die je authenticator app heeft gegenereerd.\",\n      verifyTitle: \"Verificatiecode\"\n    },\n    mobileButton__menu: \"Menu\",\n    navbar: {\n      account: \"Profile\",\n      description: \"Manage your account info.\",\n      security: \"Security\",\n      title: \"Account\"\n    },\n    passkeyScreen: {\n      removeResource: {\n        messageLine1: void 0,\n        title: void 0\n      },\n      subtitle__rename: void 0,\n      title__rename: void 0\n    },\n    passwordPage: {\n      checkboxInfoText__signOutOfOtherSessions: \"It is recommended to sign out of all other devices which may have used your old password.\",\n      readonly: \"Your password can currently not be edited because you can sign in only via the enterprise connection.\",\n      successMessage__set: \"Je wachtwoord is ingesteld.\",\n      successMessage__signOutOfOtherSessions: \"All other devices have been signed out.\",\n      successMessage__update: \"Your password has been updated.\",\n      title__set: \"Stel wachtwoord in\",\n      title__update: \"Change password\"\n    },\n    phoneNumberPage: {\n      infoText: \"Een SMS met daarin een verificatiecode is verstuurd naar dit nummer.\",\n      removeResource: {\n        messageLine1: \"{{identifier}} zal van deze account verwijderd worden.\",\n        messageLine2: \"Je zal niet meer kunnen inloggen met dit telefoonnummer.\",\n        successMessage: \"{{phoneNumber}} is verwijderd uit je account.\",\n        title: \"Verwijder telefoonnummer\"\n      },\n      successMessage: \"{{identifier}} is toegevoegd aan je account.\",\n      title: \"Telefoonnummer toevoegen\",\n      verifySubtitle: \"Enter the verification code sent to {{identifier}}\",\n      verifyTitle: \"Verify phone number\"\n    },\n    profilePage: {\n      fileDropAreaHint: \"Upload een JPG, PNG, GIF, of WEBP afbeelding kleiner dan 10 MB\",\n      imageFormDestructiveActionSubtitle: \"Verwijder afbeelding\",\n      imageFormSubtitle: \"Afbeelding uploaden\",\n      imageFormTitle: \"Profielfoto\",\n      readonly: \"Your profile information has been provided by the enterprise connection and cannot be edited.\",\n      successMessage: \"Je profiel is bijgewerkt.\",\n      title: \"Profiel bijwerken\"\n    },\n    start: {\n      activeDevicesSection: {\n        destructiveAction: \"Log uit op apparaat\",\n        title: \"Actieve apparaten\"\n      },\n      connectedAccountsSection: {\n        actionLabel__connectionFailed: \"Probeer opnieuw\",\n        actionLabel__reauthorize: \"Authoriseer nu\",\n        destructiveActionTitle: \"Verwijderen\",\n        primaryButton: \"Verbind een account\",\n        subtitle__disconnected: void 0,\n        subtitle__reauthorize: \"The required scopes have been updated, and you may be experiencing limited functionality. Please re-authorize this application to avoid any issues\",\n        title: \"Aangesloten accounts\"\n      },\n      dangerSection: {\n        deleteAccountButton: \"Delete Account\",\n        title: \"Account termination\"\n      },\n      emailAddressesSection: {\n        destructiveAction: \"Verwijder e-mailadres\",\n        detailsAction__nonPrimary: \"Stel in als hoofd\",\n        detailsAction__primary: \"Rond verificatie af\",\n        detailsAction__unverified: \"Rond verificatie af\",\n        primaryButton: \"Voeg een e-mailadres toe\",\n        title: \"E-mailadressen\"\n      },\n      enterpriseAccountsSection: {\n        title: \"Enterprise accounts\"\n      },\n      headerTitle__account: \"Account\",\n      headerTitle__security: \"Beveiliging\",\n      mfaSection: {\n        backupCodes: {\n          actionLabel__regenerate: \"Hergenereer codes\",\n          headerTitle: \"Backupcodes\",\n          subtitle__regenerate: \"Genereer een nieuwe set backupcodes. De vorige kunnen niet meer gebruikt worden.\",\n          title__regenerate: \"Hergenereer backupcodes\"\n        },\n        phoneCode: {\n          actionLabel__setDefault: \"Stel in als standaard\",\n          destructiveActionLabel: \"Verwijder telefoonnummer\"\n        },\n        primaryButton: \"Tweestapsverificatie instellen\",\n        title: \"Tweestapsverificatie\",\n        totp: {\n          destructiveActionTitle: \"Verwijderen\",\n          headerTitle: \"Authenticatorapplicatie\"\n        }\n      },\n      passkeysSection: {\n        menuAction__destructive: void 0,\n        menuAction__rename: void 0,\n        title: void 0\n      },\n      passwordSection: {\n        primaryButton__setPassword: \"Wachtwoord instellen\",\n        primaryButton__updatePassword: \"Wachtwoord wijzigen\",\n        title: \"Wachtwoord\"\n      },\n      phoneNumbersSection: {\n        destructiveAction: \"Verwijder telefoonnummer\",\n        detailsAction__nonPrimary: \"Stel in als hoofd\",\n        detailsAction__primary: \"Rond verificatie af\",\n        detailsAction__unverified: \"Rond verificatie af\",\n        primaryButton: \"Voeg een telefoonnummer toe\",\n        title: \"Telefoonnummers\"\n      },\n      profileSection: {\n        primaryButton: \"\",\n        title: \"Profiel\"\n      },\n      usernameSection: {\n        primaryButton__setUsername: \"Stel gebruikersnaam in\",\n        primaryButton__updateUsername: \"Wijzig gebruikersnaam\",\n        title: \"Gebruikersnaam\"\n      },\n      web3WalletsSection: {\n        destructiveAction: \"Verwijder portefeuille\",\n        primaryButton: \"Web3 portefeuilles\",\n        title: \"Web3 portefeuilles\"\n      }\n    },\n    usernamePage: {\n      successMessage: \"Je gebruikersnaam is bijgewerkt.\",\n      title__set: \"Gebruikersnaam bijwerken\",\n      title__update: \"Gebruikersnaam bijwerken\"\n    },\n    web3WalletPage: {\n      removeResource: {\n        messageLine1: \"{{identifier}} zal verwijderd worden uit dit account.\",\n        messageLine2: \"Je zal niet meer kunnen inloggen met deze web3 portefeuille.\",\n        successMessage: \"{{web3Wallet}} is verwijderd uit je account.\",\n        title: \"Verwijder web3 portefeuille\"\n      },\n      subtitle__availableWallets: \"Selecteer een web3 portefeuille om toe te voegen.\",\n      subtitle__unavailableWallets: \"Er zijn geen beschikbare web3 portefeuilles.\",\n      successMessage: \"De portefeuille is toegevoegd aan dit account.\",\n      title: \"Web3 portefeuille toevoegen.\"\n    }\n  }\n};\nvar nlBE = __spreadValues({\n  locale: \"nl-BE\"\n}, nlNL);\nvar koKR = {\n  locale: \"ko-KR\",\n  backButton: \"\\uB3CC\\uC544\\uAC00\\uAE30\",\n  badge__default: \"\\uAE30\\uBCF8\\uAC12\",\n  badge__otherImpersonatorDevice: \"\\uAE30\\uD0C0 \\uC0AC\\uCE6D \\uC7A5\\uCE58\",\n  badge__primary: \"\\uAE30\\uBCF8\",\n  badge__requiresAction: \"\\uC870\\uCE58 \\uD544\\uC694\",\n  badge__thisDevice: \"\\uC774 \\uC7A5\\uCE58\",\n  badge__unverified: \"\\uBBF8\\uD655\\uC778\",\n  badge__userDevice: \"\\uC0AC\\uC6A9\\uC790 \\uC7A5\\uCE58\",\n  badge__you: \"\\uB2F9\\uC2E0\",\n  createOrganization: {\n    formButtonSubmit: \"\\uC870\\uC9C1 \\uB9CC\\uB4E4\\uAE30\",\n    invitePage: {\n      formButtonReset: \"\\uB118\\uAE30\\uAE30\"\n    },\n    title: \"\\uC870\\uC9C1 \\uB9CC\\uB4E4\\uAE30\"\n  },\n  dates: {\n    lastDay: \"\\uC5B4\\uC81C {{ date | timeString('ko-KR') }}\",\n    next6Days: \"\\uB2E4\\uC74C {{ date | weekday('ko-KR','long') }} {{ date | timeString('ko-KR') }}\",\n    nextDay: \"\\uB0B4\\uC77C {{ date | timeString('ko-KR') }}\",\n    numeric: \"{{ date | numeric('ko-KR') }}\",\n    previous6Days: \"\\uC9C0\\uB09C {{ date | weekday('ko-KR','long') }} {{ date | timeString('ko-KR') }}\",\n    sameDay: \"\\uC624\\uB298 {{ date | timeString('ko-KR') }}\"\n  },\n  dividerText: \"\\uB610\\uB294\",\n  footerActionLink__useAnotherMethod: \"\\uB2E4\\uB978 \\uBC29\\uBC95 \\uC0AC\\uC6A9\\uD558\\uAE30\",\n  footerPageLink__help: \"\\uB3C4\\uC6C0\",\n  footerPageLink__privacy: \"\\uAC1C\\uC778\\uC815\\uBCF4\\uCC98\\uB9AC\\uBC29\\uCE68\",\n  footerPageLink__terms: \"\\uC57D\\uAD00\",\n  formButtonPrimary: \"\\uACC4\\uC18D\",\n  formButtonPrimary__verify: \"Verify\",\n  formFieldAction__forgotPassword: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC78A\\uC73C\\uC168\\uB098\\uC694?\",\n  formFieldError__matchingPasswords: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uC77C\\uCE58\\uD569\\uB2C8\\uB2E4.\",\n  formFieldError__notMatchingPasswords: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uC77C\\uCE58\\uD558\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\",\n  formFieldError__verificationLinkExpired: \"The verification link expired. Please request a new link.\",\n  formFieldHintText__optional: \"\\uC120\\uD0DD\\uC0AC\\uD56D\",\n  formFieldHintText__slug: \"A slug is a human-readable ID that must be unique. It\\u2019s often used in URLs.\",\n  formFieldInputPlaceholder__backupCode: \"\",\n  formFieldInputPlaceholder__confirmDeletionUserAccount: \"\\uACC4\\uC815 \\uC0AD\\uC81C\",\n  formFieldInputPlaceholder__emailAddress: \"\",\n  formFieldInputPlaceholder__emailAddress_username: \"\",\n  formFieldInputPlaceholder__emailAddresses: \"\\uD558\\uB098 \\uC774\\uC0C1\\uC758 \\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\\uB97C \\uACF5\\uBC31 \\uB610\\uB294 \\uC27C\\uD45C\\uB85C \\uAD6C\\uBD84\\uD558\\uC5EC \\uC785\\uB825\\uD558\\uAC70\\uB098 \\uBD99\\uC5EC\\uB123\\uC2B5\\uB2C8\\uB2E4\",\n  formFieldInputPlaceholder__firstName: \"\",\n  formFieldInputPlaceholder__lastName: \"\",\n  formFieldInputPlaceholder__organizationDomain: \"\",\n  formFieldInputPlaceholder__organizationDomainEmailAddress: \"\",\n  formFieldInputPlaceholder__organizationName: \"\",\n  formFieldInputPlaceholder__organizationSlug: \"\",\n  formFieldInputPlaceholder__password: \"\",\n  formFieldInputPlaceholder__phoneNumber: \"\",\n  formFieldInputPlaceholder__username: \"\",\n  formFieldLabel__automaticInvitations: \"Enable automatic invitations for this domain\",\n  formFieldLabel__backupCode: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC\",\n  formFieldLabel__confirmDeletion: \"\\uD655\\uC778\",\n  formFieldLabel__confirmPassword: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uD655\\uC778\",\n  formFieldLabel__currentPassword: \"\\uD604\\uC7AC \\uBE44\\uBC00\\uBC88\\uD638\",\n  formFieldLabel__emailAddress: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\",\n  formFieldLabel__emailAddress_username: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C \\uD639\\uC740 \\uC0AC\\uC6A9\\uC790 \\uC774\\uB984\",\n  formFieldLabel__emailAddresses: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\",\n  formFieldLabel__firstName: \"\\uC774\\uB984\",\n  formFieldLabel__lastName: \"\\uC131\",\n  formFieldLabel__newPassword: \"\\uC0C8 \\uBE44\\uBC00\\uBC88\\uD638\",\n  formFieldLabel__organizationDomain: \"\\uB3C4\\uBA54\\uC778\",\n  formFieldLabel__organizationDomainDeletePending: \"Delete pending invitations and suggestions\",\n  formFieldLabel__organizationDomainEmailAddress: \"Verification email address\",\n  formFieldLabel__organizationDomainEmailAddressDescription: \"Enter an email address under this domain to receive a code and verify this domain.\",\n  formFieldLabel__organizationName: \"\\uC774\\uB984\",\n  formFieldLabel__organizationSlug: \"\\uC2AC\\uB7EC\\uADF8\",\n  formFieldLabel__passkeyName: void 0,\n  formFieldLabel__password: \"\\uBE44\\uBC00\\uBC88\\uD638\",\n  formFieldLabel__phoneNumber: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638\",\n  formFieldLabel__role: \"\\uC5ED\\uD560\",\n  formFieldLabel__signOutOfOtherSessions: \"\\uB2E4\\uB978 \\uBAA8\\uB4E0 \\uAE30\\uAE30\\uC5D0\\uC11C \\uB85C\\uADF8\\uC544\\uC6C3\",\n  formFieldLabel__username: \"\\uC0AC\\uC6A9\\uC790 \\uC774\\uB984\",\n  impersonationFab: {\n    action__signOut: \"\\uB85C\\uADF8\\uC544\\uC6C3\",\n    title: \"{{identifier}}\\uB85C \\uB85C\\uADF8\\uC778\\uD588\\uC2B5\\uB2C8\\uB2E4\"\n  },\n  maintenanceMode: void 0,\n  membershipRole__admin: \"\\uAD00\\uB9AC\\uC790\",\n  membershipRole__basicMember: \"\\uBA64\\uBC84\",\n  membershipRole__guestMember: \"\\uAC8C\\uC2A4\\uD2B8\",\n  organizationList: {\n    action__createOrganization: \"Create organization\",\n    action__invitationAccept: \"Join\",\n    action__suggestionsAccept: \"Request to join\",\n    createOrganization: \"Create Organization\",\n    invitationAcceptedLabel: \"Joined\",\n    subtitle: \"to continue to {{applicationName}}\",\n    suggestionsAcceptedLabel: \"Pending approval\",\n    title: \"Choose an account\",\n    titleWithoutPersonal: \"Choose an organization\"\n  },\n  organizationProfile: {\n    badge__automaticInvitation: \"Automatic invitations\",\n    badge__automaticSuggestion: \"Automatic suggestions\",\n    badge__manualInvitation: \"No automatic enrollment\",\n    badge__unverified: \"Unverified\",\n    createDomainPage: {\n      subtitle: \"Add the domain to verify. Users with email addresses at this domain can join the organization automatically or request to join.\",\n      title: \"Add domain\"\n    },\n    invitePage: {\n      detailsTitle__inviteFailed: \"\\uCD08\\uB300\\uB97C \\uBCF4\\uB0BC \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uC74C\\uC744 \\uC218\\uC815\\uD558\\uACE0 \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD558\\uC138\\uC694:\",\n      formButtonPrimary__continue: \"\\uCD08\\uB300 \\uBCF4\\uB0B4\\uAE30\",\n      selectDropdown__role: \"Select role\",\n      subtitle: \"\\uC774 \\uC870\\uC9C1\\uC5D0 \\uC0C8 \\uBA64\\uBC84 \\uCD08\\uB300\",\n      successMessage: \"\\uCD08\\uB300\\uAC00 \\uC131\\uACF5\\uC801\\uC73C\\uB85C \\uC804\\uC1A1\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4\",\n      title: \"\\uD68C\\uC6D0 \\uCD08\\uB300\"\n    },\n    membersPage: {\n      action__invite: \"\\uCD08\\uB300\",\n      activeMembersTab: {\n        menuAction__remove: \"\\uD68C\\uC6D0 \\uC81C\\uAC70\",\n        tableHeader__actions: \"\",\n        tableHeader__joined: \"\\uAC00\\uC785\\uB428\",\n        tableHeader__role: \"\\uC5ED\\uD560\",\n        tableHeader__user: \"\\uC0AC\\uC6A9\\uC790\"\n      },\n      detailsTitle__emptyRow: \"\\uD45C\\uC2DC\\uD560 \\uBA64\\uBC84 \\uC5C6\\uC74C\",\n      invitationsTab: {\n        autoInvitations: {\n          headerSubtitle: \"Invite users by connecting an email domain with your organization. Anyone who signs up with a matching email domain will be able to join the organization anytime.\",\n          headerTitle: \"Automatic invitations\",\n          primaryButton: \"Manage verified domains\"\n        },\n        table__emptyRow: \"No invitations to display\"\n      },\n      invitedMembersTab: {\n        menuAction__revoke: \"\\uCD08\\uB300 \\uCDE8\\uC18C\",\n        tableHeader__invited: \"\\uCD08\\uB300\\uB428\"\n      },\n      requestsTab: {\n        autoSuggestions: {\n          headerSubtitle: \"Users who sign up with a matching email domain, will be able to see a suggestion to request to join your organization.\",\n          headerTitle: \"Automatic suggestions\",\n          primaryButton: \"Manage verified domains\"\n        },\n        menuAction__approve: \"Approve\",\n        menuAction__reject: \"Reject\",\n        tableHeader__requested: \"Requested access\",\n        table__emptyRow: \"No requests to display\"\n      },\n      start: {\n        headerTitle__invitations: \"Invitations\",\n        headerTitle__members: \"Members\",\n        headerTitle__requests: \"Requests\"\n      }\n    },\n    navbar: {\n      description: \"Manage your organization.\",\n      general: \"General\",\n      members: \"Members\",\n      title: \"Organization\"\n    },\n    profilePage: {\n      dangerSection: {\n        deleteOrganization: {\n          actionDescription: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC544\\uB798\\uC5D0 {{organizationName}}\\uC744(\\uB97C) \\uC785\\uB825\\uD558\\uC138\\uC694.\",\n          messageLine1: \"\\uC774 \\uC870\\uC9C1\\uC744 \\uC0AD\\uC81C\\uD558\\uC2DC\\uACA0\\uC2B5\\uB2C8\\uAE4C?\",\n          messageLine2: \"\\uC774 \\uC791\\uC5C5\\uC740 \\uC601\\uAD6C\\uC801\\uC774\\uBA70 \\uB418\\uB3CC\\uB9B4 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n          successMessage: \"\\uC870\\uC9C1\\uC744 \\uC0AD\\uC81C\\uD588\\uC2B5\\uB2C8\\uB2E4.\",\n          title: \"\\uC870\\uC9C1 \\uC0AD\\uC81C\"\n        },\n        leaveOrganization: {\n          actionDescription: 'Type \"{{organizationName}}\" below to continue.',\n          messageLine1: \"\\uC774 \\uC870\\uC9C1\\uC744 \\uD0C8\\uD1F4\\uD558\\uC2DC\\uACA0\\uC2B5\\uB2C8\\uAE4C? \\uC774 \\uC870\\uC9C1 \\uBC0F \\uD574\\uB2F9 \\uC560\\uD50C\\uB9AC\\uCF00\\uC774\\uC158\\uC5D0 \\uB300\\uD55C \\uC561\\uC138\\uC2A4 \\uAD8C\\uD55C\\uC744 \\uC783\\uAC8C\\uB429\\uB2C8\\uB2E4.\",\n          messageLine2: \"\\uC774 \\uC791\\uC5C5\\uC740 \\uC601\\uAD6C\\uC801\\uC774\\uBA70 \\uB418\\uB3CC\\uB9B4 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4\",\n          successMessage: \"\\uC870\\uC9C1\\uC744 \\uD0C8\\uD1F4\\uD588\\uC2B5\\uB2C8\\uB2E4.\",\n          title: \"\\uC870\\uC9C1 \\uB5A0\\uB098\\uAE30\"\n        },\n        title: \"\\uC704\\uD5D8\"\n      },\n      domainSection: {\n        menuAction__manage: \"Manage\",\n        menuAction__remove: \"Delete\",\n        menuAction__verify: \"Verify\",\n        primaryButton: \"\\uB3C4\\uBA54\\uC778 \\uCD94\\uAC00\",\n        subtitle: \"\\uC778\\uC99D\\uB41C \\uC774\\uBA54\\uC77C \\uB3C4\\uBA54\\uC778\\uC744 \\uAE30\\uBC18\\uC73C\\uB85C \\uC0AC\\uC6A9\\uC790\\uAC00 \\uC870\\uC9C1\\uC5D0 \\uC790\\uB3D9\\uC73C\\uB85C \\uAC00\\uC785\\uD558\\uAC70\\uB098 \\uAC00\\uC785 \\uC694\\uCCAD\\uC744 \\uD560 \\uC218 \\uC788\\uAC8C \\uD569\\uB2C8\\uB2E4.\",\n        title: \"\\uC778\\uC99D\\uB41C \\uB3C4\\uBA54\\uC778\"\n      },\n      successMessage: \"\\uC870\\uC9C1\\uC774 \\uC5C5\\uB370\\uC774\\uD2B8\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      title: \"\\uC870\\uC9C1 \\uD504\\uB85C\\uD544\"\n    },\n    removeDomainPage: {\n      messageLine1: \"The email domain {{domain}} will be removed.\",\n      messageLine2: \"Users won\\u2019t be able to join the organization automatically after this.\",\n      successMessage: \"{{domain}} has been removed.\",\n      title: \"Remove domain\"\n    },\n    start: {\n      headerTitle__general: \"General\",\n      headerTitle__members: \"\\uBA64\\uBC84\",\n      profileSection: {\n        primaryButton: \"\",\n        title: \"Organization Profile\",\n        uploadAction__title: \"Logo\"\n      }\n    },\n    verifiedDomainPage: {\n      dangerTab: {\n        calloutInfoLabel: \"Removing this domain will affect invited users.\",\n        removeDomainActionLabel__remove: \"Remove domain\",\n        removeDomainSubtitle: \"Remove this domain from your verified domains\",\n        removeDomainTitle: \"Remove domain\"\n      },\n      enrollmentTab: {\n        automaticInvitationOption__description: \"Users are automatically invited to join the organization when they sign-up and can join anytime.\",\n        automaticInvitationOption__label: \"Automatic invitations\",\n        automaticSuggestionOption__description: \"Users receive a suggestion to request to join, but must be approved by an admin before they are able to join the organization.\",\n        automaticSuggestionOption__label: \"Automatic suggestions\",\n        calloutInfoLabel: \"Changing the enrollment mode will only affect new users.\",\n        calloutInvitationCountLabel: \"Pending invitations sent to users: {{count}}\",\n        calloutSuggestionCountLabel: \"Pending suggestions sent to users: {{count}}\",\n        manualInvitationOption__description: \"Users can only be invited manually to the organization.\",\n        manualInvitationOption__label: \"No automatic enrollment\",\n        subtitle: \"Choose how users from this domain can join the organization.\"\n      },\n      start: {\n        headerTitle__danger: \"Danger\",\n        headerTitle__enrollment: \"Enrollment options\"\n      },\n      subtitle: \"The domain {{domain}} is now verified. Continue by selecting enrollment mode.\",\n      title: \"Update {{domain}}\"\n    },\n    verifyDomainPage: {\n      formSubtitle: \"Enter the verification code sent to your email address\",\n      formTitle: \"Verification code\",\n      resendButton: \"Didn't receive a code? Resend\",\n      subtitle: \"The domain {{domainName}} needs to be verified via email.\",\n      subtitleVerificationCodeScreen: \"A verification code was sent to {{emailAddress}}. Enter the code to continue.\",\n      title: \"Verify domain\"\n    }\n  },\n  organizationSwitcher: {\n    action__createOrganization: \"\\uC870\\uC9C1 \\uB9CC\\uB4E4\\uAE30\",\n    action__invitationAccept: \"Join\",\n    action__manageOrganization: \"\\uC870\\uC9C1 \\uAD00\\uB9AC\",\n    action__suggestionsAccept: \"Request to join\",\n    notSelected: \"\\uC120\\uD0DD\\uD55C \\uC870\\uC9C1 \\uC5C6\\uC74C\",\n    personalWorkspace: \"\\uAC1C\\uC778 \\uC6CC\\uD06C\\uC2A4\\uD398\\uC774\\uC2A4\",\n    suggestionsAcceptedLabel: \"Pending approval\"\n  },\n  paginationButton__next: \"\\uB2E4\\uC74C\",\n  paginationButton__previous: \"\\uC774\\uC804\",\n  paginationRowText__displaying: \"\\uD45C\\uC2DC\\uC911\",\n  paginationRowText__of: \"\\uC758\",\n  signIn: {\n    accountSwitcher: {\n      action__addAccount: \"Add account\",\n      action__signOutAll: \"Sign out of all accounts\",\n      subtitle: \"Select the account with which you wish to continue.\",\n      title: \"Choose an account\"\n    },\n    alternativeMethods: {\n      actionLink: \"\\uB3C4\\uC6C0 \\uC694\\uCCAD\\uD558\\uAE30\",\n      actionText: \"Don\\u2019t have any of these?\",\n      blockButton__backupCode: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC \\uC0AC\\uC6A9\\uD558\\uAE30\",\n      blockButton__emailCode: \"{{identifier}}\\uB85C \\uC774\\uBA54\\uC77C \\uCF54\\uB4DC \\uBCF4\\uB0B4\\uAE30\",\n      blockButton__emailLink: \"{{identifier}}\\uB85C \\uC774\\uBA54\\uC77C \\uB9C1\\uD06C \\uBCF4\\uB0B4\\uAE30\",\n      blockButton__passkey: void 0,\n      blockButton__password: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB85C \\uB85C\\uADF8\\uC778\",\n      blockButton__phoneCode: \"{{identifier}}\\uB85C SMS \\uCF54\\uB4DC \\uBCF4\\uB0B4\\uAE30\",\n      blockButton__totp: \"\\uC778\\uC99D \\uC571 \\uC0AC\\uC6A9\\uD558\\uAE30\",\n      getHelp: {\n        blockButton__emailSupport: \"\\uC774\\uBA54\\uC77C \\uC9C0\\uC6D0\",\n        content: \"\\uACC4\\uC815\\uC5D0 \\uB85C\\uADF8\\uC778\\uD558\\uB294 \\uB370 \\uBB38\\uC81C\\uAC00 \\uC788\\uB294 \\uACBD\\uC6B0 \\uC774\\uBA54\\uC77C\\uC744 \\uBCF4\\uB0B4\\uC8FC\\uC2DC\\uBA74 \\uCD5C\\uB300\\uD55C \\uBE68\\uB9AC \\uC561\\uC138\\uC2A4\\uB97C \\uBCF5\\uAD6C\\uD574 \\uB4DC\\uB9AC\\uACA0\\uC2B5\\uB2C8\\uB2E4.\",\n        title: \"\\uB3C4\\uC6C0 \\uC694\\uCCAD\\uD558\\uAE30\"\n      },\n      subtitle: \"\\uBB38\\uC81C\\uAC00 \\uC788\\uB098\\uC694? \\uB2E4\\uB978 \\uBC29\\uBC95\\uC73C\\uB85C \\uB85C\\uADF8\\uC778\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      title: \"\\uB2E4\\uB978 \\uBC29\\uBC95 \\uC0AC\\uC6A9\\uD558\\uAE30\"\n    },\n    backupCodeMfa: {\n      subtitle: \"\\uBC31\\uC5C5\\uCF54\\uB4DC\\uB294 2\\uB2E8\\uACC4 \\uC778\\uC99D\\uC744 \\uC124\\uC815\\uD560 \\uB54C \\uC5BB\\uC740 \\uCF54\\uB4DC\\uC785\\uB2C8\\uB2E4\",\n      title: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC \\uC785\\uB825\"\n    },\n    emailCode: {\n      formTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\",\n      resendButton: \"\\uCF54\\uB4DC \\uC7AC\\uC804\\uC1A1\",\n      subtitle: \"{{applicationName}}\\uB85C \\uACC4\\uC18D\\uD558\\uB824\\uBA74\",\n      title: \"\\uC774\\uBA54\\uC77C\\uC744 \\uD655\\uC778\\uD558\\uC138\\uC694\"\n    },\n    emailLink: {\n      clientMismatch: {\n        subtitle: void 0,\n        title: void 0\n      },\n      expired: {\n        subtitle: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC6D0\\uB798 \\uD0ED\\uC73C\\uB85C \\uB3CC\\uC544\\uAC00\\uC138\\uC694.\",\n        title: \"\\uC774 \\uC778\\uC99D \\uB9C1\\uD06C\\uB294 \\uB9CC\\uB8CC\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4\"\n      },\n      failed: {\n        subtitle: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC6D0\\uB798 \\uD0ED\\uC73C\\uB85C \\uB3CC\\uC544\\uAC00\\uC138\\uC694.\",\n        title: \"\\uC774 \\uC778\\uC99D \\uB9C1\\uD06C\\uB294 \\uC720\\uD6A8\\uD558\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4\"\n      },\n      formSubtitle: \"\\uC774\\uBA54\\uC77C\\uB85C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uB9C1\\uD06C\\uB97C \\uC0AC\\uC6A9\\uD558\\uC138\\uC694\",\n      formTitle: \"\\uC778\\uC99D \\uB9C1\\uD06C\",\n      loading: {\n        subtitle: \"\\uACE7 \\uB9AC\\uB2E4\\uC774\\uB809\\uC158 \\uB429\\uB2C8\\uB2E4\",\n        title: \"\\uB85C\\uADF8\\uC778 \\uC911...\"\n      },\n      resendButton: \"\\uB9C1\\uD06C \\uC7AC\\uC804\\uC1A1\",\n      subtitle: \"{{applicationName}}\\uB85C \\uACC4\\uC18D\\uD558\\uB824\\uBA74\",\n      title: \"\\uC774\\uBA54\\uC77C\\uC744 \\uD655\\uC778\\uD558\\uC138\\uC694\",\n      unusedTab: {\n        title: \"\\uC774 \\uD0ED\\uC744 \\uB2EB\\uC73C\\uC154\\uB3C4 \\uB429\\uB2C8\\uB2E4\"\n      },\n      verified: {\n        subtitle: \"\\uACE7 \\uB9AC\\uB2E4\\uC774\\uB809\\uC158 \\uB420 \\uC608\\uC815\\uC785\\uB2C8\\uB2E4\",\n        title: \"\\uB85C\\uADF8\\uC778\\uC5D0 \\uC131\\uACF5\\uD588\\uC2B5\\uB2C8\\uB2E4\"\n      },\n      verifiedSwitchTab: {\n        subtitle: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC6D0\\uB798 \\uD0ED\\uC73C\\uB85C \\uB3CC\\uC544\\uAC00\\uC138\\uC694\",\n        subtitleNewTab: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC0C8\\uB85C \\uC5F0 \\uD0ED\\uC73C\\uB85C \\uB3CC\\uC544\\uAC00\\uC138\\uC694\",\n        titleNewTab: \"\\uB2E4\\uB978 \\uD0ED\\uC5D0\\uC11C \\uB85C\\uADF8\\uC778\"\n      }\n    },\n    forgotPassword: {\n      formTitle: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uC7AC\\uC124\\uC815 \\uCF54\\uB4DC\",\n      resendButton: \"\\uCF54\\uB4DC \\uC7AC\\uC804\\uC1A1\",\n      subtitle: \"to reset your password\",\n      subtitle_email: \"\\uBA3C\\uC800 \\uC774\\uBA54\\uC77C\\uB85C \\uC804\\uC1A1\\uB41C \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      subtitle_phone: \"\\uBA3C\\uC800 \\uD734\\uB300\\uD3F0\\uC73C\\uB85C \\uC804\\uC1A1\\uB41C \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      title: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uC7AC\\uC124\\uC815\"\n    },\n    forgotPasswordAlternativeMethods: {\n      blockButton__resetPassword: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uC7AC\\uC124\\uC815\",\n      label__alternativeMethods: \"\\uB610\\uB294 \\uB2E4\\uB978 \\uBC29\\uBC95\\uC73C\\uB85C \\uB85C\\uADF8\\uC778\",\n      title: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC78A\\uC73C\\uC168\\uB098\\uC694?\"\n    },\n    noAvailableMethods: {\n      message: \"\\uB85C\\uADF8\\uC778\\uC744 \\uACC4\\uC18D\\uD560 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4. \\uC0AC\\uC6A9 \\uAC00\\uB2A5\\uD55C \\uC778\\uC99D \\uBC29\\uBC95\\uC774 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n      subtitle: \"\\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4\",\n      title: \"\\uB85C\\uADF8\\uC778\\uD560 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4\"\n    },\n    passkey: {\n      subtitle: void 0,\n      title: void 0\n    },\n    password: {\n      actionLink: \"\\uB2E4\\uB978 \\uBC29\\uBC95 \\uC0AC\\uC6A9\\uD558\\uAE30\",\n      subtitle: \"\\uACC4\\uC815\\uC5D0 \\uB4F1\\uB85D\\uB41C \\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC785\\uB825\\uD574 \\uC8FC\\uC138\\uC694\",\n      title: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\"\n    },\n    passwordPwned: {\n      title: void 0\n    },\n    phoneCode: {\n      formTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\",\n      resendButton: \"\\uCF54\\uB4DC \\uB2E4\\uC2DC \\uBCF4\\uB0B4\\uAE30\",\n      subtitle: \"{{applicationName}}\\uB85C \\uACC4\\uC18D\\uD558\\uB824\\uBA74\",\n      title: \"\\uD734\\uB300\\uD3F0 \\uD655\\uC778\"\n    },\n    phoneCodeMfa: {\n      formTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\",\n      resendButton: \"\\uCF54\\uB4DC \\uB2E4\\uC2DC \\uBCF4\\uB0B4\\uAE30\",\n      subtitle: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uD734\\uB300\\uD3F0\\uC73C\\uB85C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      title: \"\\uD734\\uB300\\uD3F0 \\uD655\\uC778\"\n    },\n    resetPassword: {\n      formButtonPrimary: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uC7AC\\uC124\\uC815\",\n      requiredMessage: \"For security reasons, it is required to reset your password.\",\n      successMessage: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uC131\\uACF5\\uC801\\uC73C\\uB85C \\uBCC0\\uACBD\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uB85C\\uADF8\\uC778\\uD558\\uB294 \\uC911\\uC785\\uB2C8\\uB2E4. \\uC7A0\\uC2DC\\uB9CC \\uAE30\\uB2E4\\uB824\\uC8FC\\uC138\\uC694.\",\n      title: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uC7AC\\uC124\\uC815\"\n    },\n    resetPasswordMfa: {\n      detailsLabel: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC7AC\\uC124\\uC815\\uD558\\uAE30 \\uC804\\uC5D0 \\uC2E0\\uC6D0\\uC744 \\uD655\\uC778\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4.\"\n    },\n    start: {\n      actionLink: \"\\uD68C\\uC6D0\\uAC00\\uC785\",\n      actionLink__use_email: \"\\uC774\\uBA54\\uC77C \\uC0AC\\uC6A9\\uD558\\uAE30\",\n      actionLink__use_email_username: \"\\uC774\\uBA54\\uC77C \\uB610\\uB294 \\uC0AC\\uC6A9\\uC790 \\uC774\\uB984 \\uC0AC\\uC6A9\\uD558\\uAE30\",\n      actionLink__use_passkey: void 0,\n      actionLink__use_phone: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uC0AC\\uC6A9\\uD558\\uAE30\",\n      actionLink__use_username: \"\\uC0AC\\uC6A9\\uC790 \\uC774\\uB984 \\uC0AC\\uC6A9\\uD558\\uAE30\",\n      actionText: \"\\uACC4\\uC815\\uC774 \\uC5C6\\uC73C\\uC2E0\\uAC00\\uC694?\",\n      subtitle: \"\\uD658\\uC601\\uD569\\uB2C8\\uB2E4! \\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uB85C\\uADF8\\uC778\\uD574 \\uC8FC\\uC138\\uC694\",\n      title: \"{{applicationName}}\\uC5D0 \\uB85C\\uADF8\\uC778\"\n    },\n    totpMfa: {\n      formTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\",\n      subtitle: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC778\\uC99D \\uC571\\uC5D0\\uC11C \\uC0DD\\uC131\\uB41C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      title: \"2\\uB2E8\\uACC4 \\uC778\\uC99D\"\n    }\n  },\n  signInEnterPasswordTitle: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n  signUp: {\n    continue: {\n      actionLink: \"\\uB85C\\uADF8\\uC778\",\n      actionText: \"\\uACC4\\uC815\\uC774 \\uC788\\uC73C\\uC2E0\\uAC00\\uC694?\",\n      subtitle: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uB204\\uB77D\\uB41C \\uD544\\uB4DC\\uC5D0 \\uAC12\\uC744 \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      title: \"\\uB204\\uB77D\\uB41C \\uD544\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\"\n    },\n    emailCode: {\n      formSubtitle: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\\uB85C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      formTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\",\n      resendButton: \"\\uCF54\\uB4DC \\uC7AC\\uC804\\uC1A1\",\n      subtitle: \"\\uC774\\uBA54\\uC77C\\uB85C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      title: \"\\uC774\\uBA54\\uC77C \\uC778\\uC99D\"\n    },\n    emailLink: {\n      clientMismatch: {\n        subtitle: void 0,\n        title: void 0\n      },\n      formSubtitle: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\\uB85C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uB9C1\\uD06C\\uB97C \\uC0AC\\uC6A9\\uD569\\uB2C8\\uB2E4.\",\n      formTitle: \"\\uC778\\uC99D \\uB9C1\\uD06C\",\n      loading: {\n        title: \"\\uAC00\\uC785 \\uC911...\"\n      },\n      resendButton: \"\\uB9C1\\uD06C \\uC7AC\\uC804\\uC1A1\",\n      subtitle: \"{{applicationName}}\\uB85C \\uACC4\\uC18D\\uD558\\uB824\\uBA74\",\n      title: \"\\uC774\\uBA54\\uC77C \\uC778\\uC99D\\uD558\\uAE30\",\n      verified: {\n        title: \"\\uC131\\uACF5\\uC801\\uC73C\\uB85C \\uAC00\\uC785\\uC5D0 \\uC131\\uACF5\\uD588\\uC2B5\\uB2C8\\uB2E4\"\n      },\n      verifiedSwitchTab: {\n        subtitle: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC0C8\\uB85C \\uC5F0 \\uD0ED\\uC73C\\uB85C \\uB3CC\\uC544\\uAC00\\uAE30\",\n        subtitleNewTab: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC774\\uC804 \\uD0ED\\uC73C\\uB85C \\uB3CC\\uC544\\uAC00\\uAE30\",\n        title: \"\\uC774\\uBA54\\uC77C \\uC778\\uC99D \\uC131\\uACF5\"\n      }\n    },\n    phoneCode: {\n      formSubtitle: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638\\uB85C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694.\",\n      formTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\",\n      resendButton: \"\\uCF54\\uB4DC \\uC7AC\\uC804\\uC1A1\",\n      subtitle: \"\\uD734\\uB300\\uD3F0\\uC73C\\uB85C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694\",\n      title: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uC778\\uC99D\"\n    },\n    start: {\n      actionLink: \"\\uB85C\\uADF8\\uC778\\uD558\\uAE30\",\n      actionLink__use_email: void 0,\n      actionLink__use_phone: void 0,\n      actionText: \"\\uACC4\\uC815\\uC774 \\uC788\\uC73C\\uC2E0\\uAC00\\uC694?\",\n      subtitle: \"\\uD658\\uC601\\uD569\\uB2C8\\uB2E4! \\uC544\\uB798 \\uC815\\uBCF4\\uB97C \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\",\n      title: \"\\uACC4\\uC815 \\uB9CC\\uB4E4\\uAE30\"\n    }\n  },\n  socialButtonsBlockButton: \"{{provider|titleize}}\\uB85C \\uACC4\\uC18D\\uD558\\uAE30\",\n  socialButtonsBlockButtonManyInView: void 0,\n  unstable__errors: {\n    captcha_invalid: \"Sign up unsuccessful due to failed security validations. Please refresh the page to try again or reach out to support for more assistance.\",\n    captcha_unavailable: \"Sign up unsuccessful due to failed bot validation. Please refresh the page to try again or reach out to support for more assistance.\",\n    form_code_incorrect: \"\",\n    form_identifier_exists: \"\",\n    form_identifier_exists__email_address: void 0,\n    form_identifier_exists__phone_number: void 0,\n    form_identifier_exists__username: void 0,\n    form_identifier_not_found: \"\",\n    form_param_format_invalid: \"\",\n    form_param_format_invalid__email_address: \"Email address must be a valid email address.\",\n    form_param_format_invalid__phone_number: \"Phone number must be in a valid international format\",\n    form_param_max_length_exceeded__first_name: \"First name should not exceed 256 characters.\",\n    form_param_max_length_exceeded__last_name: \"Last name should not exceed 256 characters.\",\n    form_param_max_length_exceeded__name: \"Name should not exceed 256 characters.\",\n    form_param_nil: \"\",\n    form_password_incorrect: \"\",\n    form_password_length_too_short: \"\",\n    form_password_not_strong_enough: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uCDA9\\uBD84\\uD788 \\uC548\\uC804\\uD558\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\",\n    form_password_pwned: \"\\uC774 \\uBE44\\uBC00\\uBC88\\uD638\\uB294 \\uC720\\uCD9C\\uC0AC\\uD56D\\uC774 \\uBC1C\\uACAC\\uB418\\uC5B4 \\uC0AC\\uC6A9\\uD560 \\uC218 \\uC5C6\\uC73C\\uBBC0\\uB85C \\uB300\\uC2E0 \\uB2E4\\uB978 \\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC0AC\\uC6A9\\uD574 \\uBCF4\\uC138\\uC694.\",\n    form_password_pwned__sign_in: void 0,\n    form_password_size_in_bytes_exceeded: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uD5C8\\uC6A9\\uB418\\uB294 \\uCD5C\\uB300 \\uBC14\\uC774\\uD2B8 \\uC218\\uB97C \\uCD08\\uACFC\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uC904\\uC774\\uAC70\\uB098 \\uC77C\\uBD80 \\uD2B9\\uC218 \\uBB38\\uC790\\uB97C \\uC81C\\uAC70\\uD574 \\uC8FC\\uC138\\uC694.\",\n    form_password_validation_failed: \"\\uC798\\uBABB\\uB41C \\uBE44\\uBC00\\uBC88\\uD638\",\n    form_username_invalid_character: \"\",\n    form_username_invalid_length: \"\",\n    identification_deletion_failed: \"You cannot delete your last identification.\",\n    not_allowed_access: \"\",\n    passkey_already_exists: void 0,\n    passkey_not_supported: void 0,\n    passkey_pa_not_supported: void 0,\n    passkey_registration_cancelled: void 0,\n    passkey_retrieval_cancelled: void 0,\n    passwordComplexity: {\n      maximumLength: \"{{length}} \\uBCF4\\uB2E4 \\uC9E7\\uC740 \\uBB38\\uC790\\uC5F4\",\n      minimumLength: \"{{length}} \\uB610\\uB294 \\uADF8 \\uC774\\uC0C1\\uC758 \\uBB38\\uC790\\uC5F4\",\n      requireLowercase: \"\\uC18C\\uBB38\\uC790\",\n      requireNumbers: \"\\uC22B\\uC790\",\n      requireSpecialCharacter: \"\\uD2B9\\uC218\\uBB38\\uC790\",\n      requireUppercase: \"\\uB300\\uBB38\\uC790\",\n      sentencePrefix: \"\\uB2F9\\uC2E0\\uC758 \\uBE44\\uBC00\\uBC88\\uD638\\uB294 \\uBC18\\uB4DC\\uC2DC \\uD3EC\\uD568\\uD574\\uC57C\\uD569\\uB2C8\\uB2E4\"\n    },\n    phone_number_exists: \"This phone number is taken. Please try another.\",\n    zxcvbn: {\n      couldBeStronger: \"\\uBE44\\uBC00\\uBC88\\uD638\\uB294 \\uC791\\uB3D9\\uD558\\uC9C0\\uB9CC \\uB354 \\uAC15\\uB825\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uBB38\\uC790\\uB97C \\uB354 \\uCD94\\uAC00\\uD574 \\uBCF4\\uC138\\uC694.\",\n      goodPassword: \"\\uC218\\uACE0\\uD558\\uC168\\uC2B5\\uB2C8\\uB2E4. \\uD6CC\\uB96D\\uD55C \\uBE44\\uBC00\\uBC88\\uD638\\uC785\\uB2C8\\uB2E4.\",\n      notEnough: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uCDA9\\uBD84\\uD788 \\uC548\\uC804\\uD558\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\",\n      suggestions: {\n        allUppercase: \"\\uBAA8\\uB4E0 \\uBB38\\uC790\\uAC00 \\uC544\\uB2CC \\uC77C\\uBD80 \\uBB38\\uC790\\uB97C \\uB300\\uBB38\\uC790\\uB85C \\uD45C\\uC2DC\\uD569\\uB2C8\\uB2E4.\",\n        anotherWord: \"\\uB35C \\uC77C\\uBC18\\uC801\\uC778 \\uB2E8\\uC5B4\\uB97C \\uB354 \\uCD94\\uAC00\\uD569\\uB2C8\\uB2E4.\",\n        associatedYears: \"\\uADC0\\uD558\\uC640 \\uC5F0\\uAD00\\uB41C \\uC5F0\\uB3C4\\uB294 \\uD53C\\uD558\\uC138\\uC694.\",\n        capitalization: \"\\uD55C \\uAE00\\uC790 \\uC774\\uC0C1\\uC744 \\uB300\\uBB38\\uC790\\uB85C \\uD45C\\uAE30\\uD558\\uC138\\uC694.\",\n        dates: \"\\uC790\\uC2E0\\uACFC \\uAD00\\uB828\\uB41C \\uB0A0\\uC9DC\\uC640 \\uC5F0\\uB3C4\\uB294 \\uD53C\\uD558\\uC138\\uC694.\",\n        l33t: \"'a'\\uC5D0\\uC11C '@'\\uC640 \\uAC19\\uC774 \\uC608\\uCE21 \\uAC00\\uB2A5\\uD55C \\uBB38\\uC790 \\uB300\\uCCB4\\uB97C \\uD53C\\uD558\\uC138\\uC694.\",\n        longerKeyboardPattern: \"\\uB354 \\uAE34 \\uD0A4\\uBCF4\\uB4DC \\uD328\\uD134\\uC744 \\uC0AC\\uC6A9\\uD558\\uACE0 \\uD0C0\\uC774\\uD551 \\uBC29\\uD5A5\\uC744 \\uC5EC\\uB7EC \\uBC88 \\uBCC0\\uACBD\\uD569\\uB2C8\\uB2E4.\",\n        noNeed: \"\\uAE30\\uD638, \\uC22B\\uC790 \\uB610\\uB294 \\uB300\\uBB38\\uC790\\uB97C \\uC0AC\\uC6A9\\uD558\\uC9C0 \\uC54A\\uACE0\\uB3C4 \\uAC15\\uB825\\uD55C \\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uB9CC\\uB4E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n        pwned: \"\\uC774 \\uBE44\\uBC00\\uBC88\\uD638\\uB97C \\uB2E4\\uB978 \\uACF3\\uC5D0\\uC11C \\uC0AC\\uC6A9\\uD558\\uB294 \\uACBD\\uC6B0 \\uBCC0\\uACBD\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4.\",\n        recentYears: \"\\uCD5C\\uADFC \\uC5F0\\uB3C4\\uB294 \\uD53C\\uD558\\uC138\\uC694.\",\n        repeated: \"\\uBC18\\uBCF5\\uB418\\uB294 \\uB2E8\\uC5B4\\uC640 \\uBB38\\uC790\\uB97C \\uD53C\\uD558\\uC138\\uC694.\",\n        reverseWords: \"\\uC77C\\uBC18\\uC801\\uC778 \\uB2E8\\uC5B4\\uC758 \\uCCA0\\uC790\\uB97C \\uAC70\\uAFB8\\uB85C \\uC4F0\\uC9C0 \\uB9C8\\uC138\\uC694.\",\n        sequences: \"\\uC77C\\uBC18\\uC801\\uC778 \\uBB38\\uC790 \\uC2DC\\uD000\\uC2A4\\uB97C \\uD53C\\uD558\\uC138\\uC694.\",\n        useWords: \"\\uC5EC\\uB7EC \\uB2E8\\uC5B4\\uB97C \\uC0AC\\uC6A9\\uD558\\uB418 \\uC77C\\uBC18\\uC801\\uC778 \\uBB38\\uAD6C\\uB294 \\uD53C\\uD558\\uC138\\uC694.\"\n      },\n      warnings: {\n        common: \"\\uC77C\\uBC18\\uC801\\uC73C\\uB85C \\uC0AC\\uC6A9\\uB418\\uB294 \\uBE44\\uBC00\\uBC88\\uD638\\uC785\\uB2C8\\uB2E4.\",\n        commonNames: \"\\uC77C\\uBC18\\uC801\\uC778 \\uC774\\uB984\\uACFC \\uC131\\uC740 \\uCD94\\uCE21\\uD558\\uAE30 \\uC27D\\uC2B5\\uB2C8\\uB2E4.\",\n        dates: \"\\uB0A0\\uC9DC\\uB294 \\uC27D\\uAC8C \\uCD94\\uCE21\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n        extendedRepeat: '\"abcabcabc\"\\uC640 \\uAC19\\uC774 \\uBC18\\uBCF5\\uB418\\uB294 \\uBB38\\uC790 \\uD328\\uD134\\uC740 \\uC27D\\uAC8C \\uCD94\\uCE21\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.',\n        keyPattern: \"\\uC9E7\\uC740 \\uD328\\uD134\\uC740 \\uCD94\\uCE21\\uD558\\uAE30 \\uC27D\\uC2B5\\uB2C8\\uB2E4.\",\n        namesByThemselves: \"\\uB2E8\\uC77C \\uC774\\uB984\\uC774\\uB098 \\uC131\\uC740 \\uCD94\\uCE21\\uD558\\uAE30 \\uC27D\\uC2B5\\uB2C8\\uB2E4.\",\n        pwned: \"\\uC778\\uD130\\uB137\\uC5D0\\uC11C \\uB370\\uC774\\uD130 \\uC720\\uCD9C\\uB85C \\uC778\\uD574 \\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uB178\\uCD9C\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n        recentYears: \"\\uCD5C\\uADFC\\uC5F0\\uB3C4\\uB294 \\uC27D\\uAC8C \\uCD94\\uCE21\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n        sequences: '\"abc\"\\uC640 \\uAC19\\uC740 \\uC77C\\uBC18\\uC801\\uC778 \\uBB38\\uC790 \\uC2DC\\uD000\\uC2A4\\uB294 \\uC27D\\uAC8C \\uCD94\\uCE21\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.',\n        similarToCommon: \"\\uC77C\\uBC18\\uC801\\uC73C\\uB85C \\uC0AC\\uC6A9\\uB418\\uB294 \\uBE44\\uBC00\\uBC88\\uD638\\uC640 \\uC720\\uC0AC\\uD569\\uB2C8\\uB2E4.\",\n        simpleRepeat: '\"aaa\"\\uC640 \\uAC19\\uC774 \\uBC18\\uBCF5\\uB418\\uB294 \\uBB38\\uC790\\uB294 \\uC27D\\uAC8C \\uCD94\\uCE21\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.',\n        straightRow: \"\\uAC19\\uC740 \\uC904\\uC5D0 \\uC704\\uCE58\\uD55C \\uD0A4\\uBCF4\\uB4DC\\uB97C \\uC0AC\\uC6A9\\uD558\\uB294 \\uAC83\\uC740 \\uCD94\\uCE21\\uD558\\uAE30 \\uC27D\\uC2B5\\uB2C8\\uB2E4.\",\n        topHundred: \"\\uC790\\uC8FC \\uC0AC\\uC6A9\\uB418\\uB294 \\uBE44\\uBC00\\uBC88\\uD638\\uC785\\uB2C8\\uB2E4.\",\n        topTen: \"\\uC544\\uC8FC \\uB9CE\\uC774 \\uC0AC\\uC6A9\\uB418\\uB294 \\uBE44\\uBC00\\uBC88\\uD638\\uC785\\uB2C8\\uB2E4.\",\n        userInputs: \"\\uAC1C\\uC778 \\uC815\\uBCF4\\uB098 \\uD398\\uC774\\uC9C0 \\uAD00\\uB828 \\uB370\\uC774\\uD130\\uAC00 \\uC5C6\\uC5B4\\uC57C \\uD569\\uB2C8\\uB2E4.\",\n        wordByItself: \"\\uD55C \\uB2E8\\uC5B4\\uB294 \\uC27D\\uAC8C \\uCD94\\uCE21\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n      }\n    }\n  },\n  userButton: {\n    action__addAccount: \"\\uACC4\\uC815 \\uCD94\\uAC00\",\n    action__manageAccount: \"\\uACC4\\uC815 \\uAD00\\uB9AC\",\n    action__signOut: \"\\uB85C\\uADF8\\uC544\\uC6C3\",\n    action__signOutAll: \"\\uBAA8\\uB4E0 \\uACC4\\uC815\\uC5D0\\uC11C \\uB85C\\uADF8\\uC544\\uC6C3\"\n  },\n  userProfile: {\n    backupCodePage: {\n      actionLabel__copied: \"\\uBCF5\\uC0AC \\uC644\\uB8CC!\",\n      actionLabel__copy: \"\\uC804\\uCCB4 \\uBCF5\\uC0AC\",\n      actionLabel__download: \".txt \\uB2E4\\uC6B4\\uB85C\\uB4DC\",\n      actionLabel__print: \"\\uC778\\uC1C4\",\n      infoText1: \"\\uC774 \\uACC4\\uC815\\uC5D0 \\uB300\\uD574 \\uBC31\\uC5C5 \\uCF54\\uB4DC\\uAC00 \\uD65C\\uC131\\uD654\\uB429\\uB2C8\\uB2E4.\",\n      infoText2: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC\\uB97C \\uBE44\\uBC00\\uB85C \\uC720\\uC9C0\\uD558\\uACE0 \\uC548\\uC804\\uD558\\uAC8C \\uBCF4\\uAD00\\uD558\\uC138\\uC694. \\uBC31\\uC5C5 \\uCF54\\uB4DC\\uAC00 \\uC190\\uC0C1\\uB41C \\uAC83\\uC73C\\uB85C \\uC758\\uC2EC\\uB418\\uB294 \\uACBD\\uC6B0 \\uBC31\\uC5C5 \\uCF54\\uB4DC\\uB97C \\uB2E4\\uC2DC \\uC0DD\\uC131\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      subtitle__codelist: \"\\uC548\\uC804\\uD558\\uAC8C \\uC800\\uC7A5\\uD558\\uACE0 \\uBE44\\uBC00\\uB85C \\uC720\\uC9C0\\uD558\\uC138\\uC694.\",\n      successMessage: \"\\uC774\\uC81C \\uBC31\\uC5C5 \\uCF54\\uB4DC\\uAC00 \\uD65C\\uC131\\uD654\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uC778\\uC99D \\uC7A5\\uCE58\\uC5D0 \\uC561\\uC138\\uC2A4\\uD560 \\uC218 \\uC5C6\\uB294 \\uACBD\\uC6B0 \\uC774 \\uC911 \\uD558\\uB098\\uB97C \\uC0AC\\uC6A9\\uD558\\uC5EC \\uACC4\\uC815\\uC5D0 \\uB85C\\uADF8\\uC778\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uAC01 \\uCF54\\uB4DC\\uB294 \\uD55C \\uBC88\\uB9CC \\uC0AC\\uC6A9\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      successSubtitle: \"\\uC778\\uC99D \\uC7A5\\uCE58\\uC5D0 \\uC561\\uC138\\uC2A4\\uD560 \\uC218 \\uC5C6\\uB294 \\uACBD\\uC6B0 \\uC774 \\uC911 \\uD558\\uB098\\uB97C \\uC0AC\\uC6A9\\uD558\\uC5EC \\uACC4\\uC815\\uC5D0 \\uB85C\\uADF8\\uC778\\uD560 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\",\n      title: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC \\uC778\\uC99D \\uCD94\\uAC00\",\n      title__codelist: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC\"\n    },\n    connectedAccountPage: {\n      formHint: \"\\uACC4\\uC815\\uC744 \\uC5F0\\uACB0\\uD560 \\uC81C\\uACF5\\uC790\\uB97C \\uC120\\uD0DD\\uD558\\uC138\\uC694\",\n      formHint__noAccounts: \"\\uC0AC\\uC6A9 \\uAC00\\uB2A5\\uD55C \\uC678\\uBD80 \\uACC4\\uC815 \\uC81C\\uACF5\\uC790\\uAC00 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n      removeResource: {\n        messageLine1: \"{{identifier}}\\uAC00 \\uC774 \\uACC4\\uC815\\uC5D0\\uC11C \\uC81C\\uAC70 \\uB420 \\uC608\\uC815\\uC785\\uB2C8\\uB2E4.\",\n        messageLine2: \"\\uC774 \\uC5F0\\uACB0\\uB41C \\uACC4\\uC815\\uC744 \\uB354 \\uC774\\uC0C1 \\uC0AC\\uC6A9\\uD560 \\uC218 \\uC5C6\\uC73C\\uBA70 \\uC885\\uC18D\\uB41C \\uBAA8\\uB4E0 \\uAE30\\uB2A5\\uC774 \\uB354 \\uC774\\uC0C1 \\uC791\\uB3D9\\uD558\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\",\n        successMessage: \"{{connectedAccount}}\\uAC00 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0\\uC11C \\uC81C\\uAC70\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n        title: \"\\uC5F0\\uACB0\\uB41C \\uACC4\\uC815 \\uC81C\\uAC70\"\n      },\n      socialButtonsBlockButton: \"{{provider|titleize}} \\uACC4\\uC815 \\uC5F0\\uACB0\",\n      successMessage: \"\\uC774 \\uC81C\\uACF5\\uC790\\uAC00 \\uACC4\\uC815\\uC5D0 \\uCD94\\uAC00\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      title: \"\\uC5F0\\uACB0\\uB41C \\uACC4\\uC815 \\uCD94\\uAC00\\uD558\\uAE30\"\n    },\n    deletePage: {\n      actionDescription: \"\\uACC4\\uC18D\\uD558\\uB824\\uBA74 \\uC544\\uB798\\uC5D0 \\uACC4\\uC815 \\uC0AD\\uC81C\\uB97C \\uC785\\uB825\\uD558\\uC138\\uC694.\",\n      confirm: \"\\uACC4\\uC815 \\uC0AD\\uC81C\",\n      messageLine1: \"\\uC815\\uB9D0\\uB85C \\uACC4\\uC815\\uC744 \\uC0AD\\uC81C\\uD558\\uC2DC\\uACA0\\uC2B5\\uB2C8\\uAE4C?\",\n      messageLine2: \"\\uC774 \\uC791\\uC5C5\\uC740 \\uC601\\uAD6C\\uC801\\uC774\\uBA70 \\uB418\\uB3CC\\uB9B4 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n      title: \"\\uACC4\\uC815 \\uC0AD\\uC81C\"\n    },\n    emailAddressPage: {\n      emailCode: {\n        formHint: \"\\uC774 \\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\\uB85C \\uC778\\uC99D \\uCF54\\uB4DC\\uAC00 \\uD3EC\\uD568\\uB41C \\uC774\\uBA54\\uC77C\\uC774 \\uC804\\uC1A1\\uB429\\uB2C8\\uB2E4.\",\n        formSubtitle: \"{{identifier}}\\uC5D0\\uAC8C \\uC804\\uC1A1\\uB41C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD569\\uB2C8\\uB2E4\",\n        formTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\",\n        resendButton: \"\\uCF54\\uB4DC \\uC7AC\\uC804\\uC1A1\",\n        successMessage: \"{{identifier}} \\uC774\\uBA54\\uC77C\\uC774 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0 \\uCD94\\uAC00\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\"\n      },\n      emailLink: {\n        formHint: \"\\uC778\\uC99D \\uB9C1\\uD06C\\uAC00 \\uD3EC\\uD568\\uB41C \\uC774\\uBA54\\uC77C\\uC774 \\uC774 \\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\\uB85C \\uC804\\uC1A1\\uB429\\uB2C8\\uB2E4.\",\n        formSubtitle: \"{{identifier}}\\uC5D0\\uAC8C \\uC804\\uC1A1\\uB41C \\uC774\\uBA54\\uC77C\\uC758 \\uB9C1\\uD06C\\uB97C \\uD074\\uB9AD\\uD569\\uB2C8\\uB2E4.\",\n        formTitle: \"\\uC778\\uC99D \\uB9C1\\uD06C\",\n        resendButton: \"\\uB9C1\\uD06C \\uC7AC\\uC804\\uC1A1\",\n        successMessage: \"{{identifier}} \\uC774\\uBA54\\uC77C\\uC774 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0 \\uCD94\\uAC00\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\"\n      },\n      removeResource: {\n        messageLine1: \"{{identifier}} \\uC774\\uBA54\\uC77C\\uC774 \\uC774 \\uACC4\\uC815\\uC5D0\\uC11C \\uC81C\\uAC70 \\uB420 \\uC5D0\\uC815\\uC785\\uB2C8\\uB2E4.\",\n        messageLine2: \"\\uB354 \\uC774\\uC0C1 \\uC774 \\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\\uB85C \\uB85C\\uADF8\\uC778\\uD560 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n        successMessage: \"{{emailAddress}} \\uC774\\uBA54\\uC77C\\uC774 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0\\uC11C \\uC0AD\\uC81C\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4\",\n        title: \"\\uC774\\uBA54\\uC77C \\uC81C\\uAC70\"\n      },\n      title: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C \\uCD94\\uAC00\",\n      verifyTitle: \"Verify email address\"\n    },\n    formButtonPrimary__add: \"Add\",\n    formButtonPrimary__continue: \"\\uACC4\\uC18D\",\n    formButtonPrimary__finish: \"\\uC644\\uB8CC\",\n    formButtonPrimary__remove: \"Remove\",\n    formButtonPrimary__save: \"Save\",\n    formButtonReset: \"\\uCDE8\\uC18C\",\n    mfaPage: {\n      formHint: \"\\uCD94\\uAC00\\uD560 \\uBC29\\uBC95\\uC744 \\uC120\\uD0DD\\uD569\\uB2C8\\uB2E4.\",\n      title: \"2\\uB2E8\\uACC4 \\uC778\\uC99D \\uCD94\\uAC00\"\n    },\n    mfaPhoneCodePage: {\n      backButton: \"Use existing number\",\n      primaryButton__addPhoneNumber: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uCD94\\uAC00\",\n      removeResource: {\n        messageLine1: \"{{identifier}}\\uB294 \\uB85C\\uADF8\\uC778\\uD560 \\uB54C \\uB354 \\uC774\\uC0C1 \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uBC1B\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\",\n        messageLine2: \"\\uACC4\\uC815\\uC774 \\uC548\\uC804\\uD558\\uC9C0 \\uC54A\\uC744 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uACC4\\uC18D\\uD558\\uC2DC\\uACA0\\uC2B5\\uB2C8\\uAE4C?\",\n        successMessage: \"{{mfaPhoneCode}}\\uC5D0 \\uB300\\uD55C SMS \\uCF54\\uB4DC 2\\uB2E8\\uACC4 \\uC778\\uC99D\\uC774 \\uC81C\\uAC70\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4\",\n        title: \"2\\uB2E8\\uACC4 \\uC778\\uC99D \\uC81C\\uAC70\"\n      },\n      subtitle__availablePhoneNumbers: \"SMS \\uCF54\\uB4DC 2\\uB2E8\\uACC4 \\uC778\\uC99D\\uC744 \\uC704\\uD574 \\uB4F1\\uB85D\\uD560 \\uD734\\uB300\\uD3F0 \\uBC88\\uD638\\uB97C \\uC120\\uD0DD\\uD558\\uC138\\uC694.\",\n      subtitle__unavailablePhoneNumbers: \"SMS \\uCF54\\uB4DC 2\\uB2E8\\uACC4 \\uC778\\uC99D\\uC5D0 \\uB4F1\\uB85D\\uD560 \\uC218 \\uC788\\uB294 \\uD734\\uB300\\uD3F0 \\uBC88\\uD638\\uAC00 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n      successMessage1: \"When signing in, you will need to enter a verification code sent to this phone number as an additional step.\",\n      successMessage2: \"Save these backup codes and store them somewhere safe. If you lose access to your authentication device, you can use backup codes to sign in.\",\n      successTitle: \"SMS code verification enabled\",\n      title: \"SMS \\uCF54\\uB4DC \\uC778\\uC99D \\uCD94\\uAC00\"\n    },\n    mfaTOTPPage: {\n      authenticatorApp: {\n        buttonAbleToScan__nonPrimary: \"\\uB300\\uC2E0 QR \\uCF54\\uB4DC \\uC2A4\\uCE94 \\uD558\\uC138\\uC694\",\n        buttonUnableToScan__nonPrimary: \"QR \\uCF54\\uB4DC\\uB97C \\uC2A4\\uCE94\\uD560 \\uC218 \\uC5C6\\uB098\\uC694?\",\n        infoText__ableToScan: \"\\uC778\\uC99D \\uC571\\uC5D0\\uC11C \\uC0C8 \\uB85C\\uADF8\\uC778 \\uBC29\\uBC95\\uC744 \\uC124\\uC815\\uD558\\uACE0 \\uB2E4\\uC74C QR \\uCF54\\uB4DC\\uB97C \\uC2A4\\uCE94\\uD558\\uC5EC \\uACC4\\uC815\\uC5D0 \\uC5F0\\uACB0\\uD569\\uB2C8\\uB2E4.\",\n        infoText__unableToScan: \"\\uC778\\uC99D \\uC7A5\\uCE58\\uC5D0\\uC11C \\uC0C8 \\uB85C\\uADF8\\uC778 \\uBC29\\uBC95\\uC744 \\uC124\\uC815\\uD558\\uACE0 \\uC544\\uB798\\uC5D0 \\uC81C\\uACF5\\uB41C \\uD0A4\\uB97C \\uC785\\uB825\\uD569\\uB2C8\\uB2E4.\",\n        inputLabel__unableToScan1: \"\\uC2DC\\uAC04 \\uAE30\\uBC18 \\uB610\\uB294 \\uC77C\\uD68C\\uC6A9 \\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uC0AC\\uC6A9 \\uC124\\uC815\\uB418\\uC5B4 \\uC788\\uB294\\uC9C0 \\uD655\\uC778\\uD55C \\uB2E4\\uC74C \\uACC4\\uC815 \\uC5F0\\uACB0\\uC744 \\uC644\\uB8CC\\uD569\\uB2C8\\uB2E4.\",\n        inputLabel__unableToScan2: \"\\uB610\\uB294 \\uC778\\uC99D\\uC790\\uAC00 TOTP URI\\uB97C \\uC9C0\\uC6D0\\uD558\\uB294 \\uACBD\\uC6B0 \\uC804\\uCCB4 URI\\uB97C \\uBCF5\\uC0AC\\uD560 \\uC218\\uB3C4 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n      },\n      removeResource: {\n        messageLine1: \"\\uB85C\\uADF8\\uC778\\uD560 \\uB54C \\uB354 \\uC774\\uC0C1 \\uC774 \\uC778\\uC99D\\uC790\\uC758 \\uC778\\uC99D \\uCF54\\uB4DC\\uAC00 \\uD544\\uC694\\uD558\\uC9C0 \\uC54A\\uC2B5\\uB2C8\\uB2E4.\",\n        messageLine2: \"\\uACC4\\uC815\\uC774 \\uC548\\uC804\\uD558\\uC9C0 \\uC54A\\uC744 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uACC4\\uC18D \\uC9C4\\uD589\\uD558\\uC2DC\\uACA0\\uC2B5\\uB2C8\\uAE4C?\",\n        successMessage: \"\\uC778\\uC99D\\uC790 \\uC560\\uD50C\\uB9AC\\uCF00\\uC774\\uC158\\uC744 \\uD1B5\\uD55C 2\\uB2E8\\uACC4 \\uC778\\uC99D\\uC774 \\uC81C\\uAC70\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n        title: \"2\\uB2E8\\uACC4 \\uC778\\uC99D \\uC81C\\uAC70\"\n      },\n      successMessage: \"\\uC774\\uC81C 2\\uB2E8\\uACC4 \\uC778\\uC99D\\uC774 \\uD65C\\uC131\\uD654\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4. \\uB85C\\uADF8\\uC778\\uD560 \\uB54C \\uCD94\\uAC00 \\uB2E8\\uACC4\\uB85C \\uC774 \\uC778\\uC99D\\uC790\\uC758 \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD574\\uC57C \\uD569\\uB2C8\\uB2E4.\",\n      title: \"\\uC778\\uC99D \\uC560\\uD50C\\uB9AC\\uCF00\\uC774\\uC158 \\uCD94\\uAC00\",\n      verifySubtitle: \"\\uC778\\uC99D\\uC790\\uAC00 \\uC0DD\\uC131\\uD55C \\uC778\\uC99D \\uCF54\\uB4DC\\uB97C \\uC785\\uB825\\uD569\\uB2C8\\uB2E4\",\n      verifyTitle: \"\\uC778\\uC99D \\uCF54\\uB4DC\"\n    },\n    mobileButton__menu: \"\\uBA54\\uB274\",\n    navbar: {\n      account: \"\\uD504\\uB85C\\uD544\",\n      description: \"\\uACC4\\uC815 \\uC815\\uBCF4\\uB97C \\uAD00\\uB9AC\\uD558\\uC138\\uC694.\",\n      security: \"\\uBCF4\\uC548\",\n      title: \"\\uACC4\\uC815\"\n    },\n    passkeyScreen: {\n      removeResource: {\n        messageLine1: void 0,\n        title: void 0\n      },\n      subtitle__rename: void 0,\n      title__rename: void 0\n    },\n    passwordPage: {\n      checkboxInfoText__signOutOfOtherSessions: \"It is recommended to sign out of all other devices which may have used your old password.\",\n      readonly: \"Your password can currently not be edited because you can sign in only via the enterprise connection.\",\n      successMessage__set: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uC124\\uC815\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      successMessage__signOutOfOtherSessions: \"\\uB2E4\\uB978 \\uBAA8\\uB4E0 \\uAE30\\uAE30\\uB294 \\uB85C\\uADF8\\uC544\\uC6C3\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      successMessage__update: \"\\uBE44\\uBC00\\uBC88\\uD638\\uAC00 \\uC5C5\\uB370\\uC774\\uD2B8\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      title__set: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uC124\\uC815\",\n      title__update: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uBCC0\\uACBD\"\n    },\n    phoneNumberPage: {\n      infoText: \"\\uC778\\uC99D \\uB9C1\\uD06C\\uAC00 \\uD3EC\\uD568\\uB41C \\uBB38\\uC790 \\uBA54\\uC2DC\\uC9C0\\uAC00 \\uC774 \\uD734\\uB300\\uD3F0 \\uBC88\\uD638\\uB85C \\uC804\\uC1A1\\uB429\\uB2C8\\uB2E4.\",\n      removeResource: {\n        messageLine1: \"{{identifier}}\\uAC00 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0\\uC11C \\uC81C\\uAC70 \\uB420 \\uC608\\uC815\\uC785\\uB2C8\\uB2E4.\",\n        messageLine2: \"\\uB354 \\uC774\\uC0C1 \\uC774 \\uD734\\uB300\\uD3F0 \\uBC88\\uD638\\uB85C \\uB85C\\uADF8\\uC778\\uD560 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n        successMessage: \"{{phoneNumber}}\\uAC00 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0\\uC11C \\uC81C\\uAC70\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n        title: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uC81C\\uAC70\"\n      },\n      successMessage: \"{{identifier}}\\uAC00 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0 \\uCD94\\uAC00\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      title: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uCD94\\uAC00\",\n      verifySubtitle: \"Enter the verification code sent to {{identifier}}\",\n      verifyTitle: \"Verify phone number\"\n    },\n    profilePage: {\n      fileDropAreaHint: \"10MB\\uBCF4\\uB2E4 \\uC791\\uC740 JPG, PNG, GIF \\uB610\\uB294 WEBP \\uC774\\uBBF8\\uC9C0\\uB97C \\uC5C5\\uB85C\\uB4DC\\uD569\\uB2C8\\uB2E4\",\n      imageFormDestructiveActionSubtitle: \"\\uC774\\uBBF8\\uC9C0 \\uC81C\\uAC70\",\n      imageFormSubtitle: \"\\uC774\\uBBF8\\uC9C0 \\uC5C5\\uB85C\\uB4DC\",\n      imageFormTitle: \"\\uD504\\uB85C\\uD544 \\uC774\\uBBF8\\uC9C0\",\n      readonly: \"Your profile information has been provided by the enterprise connection and cannot be edited.\",\n      successMessage: \"\\uD504\\uB85C\\uD544\\uC774 \\uC5C5\\uB370\\uC774\\uD2B8\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      title: \"\\uD504\\uB85C\\uD544 \\uC5C5\\uB370\\uC774\\uD2B8\"\n    },\n    start: {\n      activeDevicesSection: {\n        destructiveAction: \"\\uC774 \\uC7A5\\uCE58\\uC5D0\\uC11C \\uB85C\\uADF8\\uC544\\uC6C3\",\n        title: \"\\uD65C\\uC131\\uD654\\uB41C \\uC7A5\\uCE58\"\n      },\n      connectedAccountsSection: {\n        actionLabel__connectionFailed: \"\\uC7AC\\uC2DC\\uB3C4\",\n        actionLabel__reauthorize: \"\\uC9C0\\uAE08 \\uC778\\uC99D\\uD558\\uAE30\",\n        destructiveActionTitle: \"\\uC81C\\uAC70\",\n        primaryButton: \"\\uACC4\\uC815 \\uC5F0\\uACB0\\uD558\\uAE30\",\n        subtitle__disconnected: void 0,\n        subtitle__reauthorize: \"The required scopes have been updated, and you may be experiencing limited functionality. Please re-authorize this application to avoid any issues\",\n        title: \"\\uC5F0\\uACB0\\uB41C \\uACC4\\uC815\"\n      },\n      dangerSection: {\n        deleteAccountButton: \"\\uACC4\\uC815 \\uC0AD\\uC81C\",\n        title: \"\\uC704\\uD5D8\"\n      },\n      emailAddressesSection: {\n        destructiveAction: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C \\uC81C\\uAC70\",\n        detailsAction__nonPrimary: \"\\uAE30\\uBCF8\\uC73C\\uB85C \\uC124\\uC815\",\n        detailsAction__primary: \"\\uC778\\uC99D \\uC644\\uB8CC\",\n        detailsAction__unverified: \"\\uC778\\uC99D \\uC644\\uB8CC\",\n        primaryButton: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C \\uCD94\\uAC00\",\n        title: \"\\uC774\\uBA54\\uC77C \\uC8FC\\uC18C\"\n      },\n      enterpriseAccountsSection: {\n        title: \"\\uAE30\\uC5C5 \\uACC4\\uC815\"\n      },\n      headerTitle__account: \"\\uD504\\uB85C\\uD544\",\n      headerTitle__security: \"\\uBCF4\\uC548\",\n      mfaSection: {\n        backupCodes: {\n          actionLabel__regenerate: \"\\uCF54\\uB4DC \\uC7AC\\uC0DD\\uC131\",\n          headerTitle: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC\",\n          subtitle__regenerate: \"\\uC0C8\\uB85C\\uC6B4 \\uBCF4\\uC548 \\uBC31\\uC5C5 \\uCF54\\uB4DC \\uC138\\uD2B8\\uB97C \\uBC1B\\uC73C\\uC138\\uC694. \\uC774\\uC804 \\uBC31\\uC5C5 \\uCF54\\uB4DC\\uB294 \\uC0AD\\uC81C\\uB418\\uBA70 \\uC0AC\\uC6A9\\uD560 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n          title__regenerate: \"\\uBC31\\uC5C5 \\uCF54\\uB4DC \\uC7AC\\uC0DD\\uC131\"\n        },\n        phoneCode: {\n          actionLabel__setDefault: \"\\uAE30\\uBCF8\\uC73C\\uB85C \\uC124\\uC815\",\n          destructiveActionLabel: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uC81C\\uAC70\"\n        },\n        primaryButton: \"2\\uB2E8\\uACC4 \\uC778\\uC99D \\uCD94\\uAC00\",\n        title: \"2\\uB2E8\\uACC4 \\uC778\\uC99D\",\n        totp: {\n          destructiveActionTitle: \"\\uC81C\\uAC70\",\n          headerTitle: \"\\uC778\\uC99D \\uC560\\uD50C\\uB9AC\\uCF00\\uC774\\uC158\"\n        }\n      },\n      passkeysSection: {\n        menuAction__destructive: void 0,\n        menuAction__rename: void 0,\n        title: void 0\n      },\n      passwordSection: {\n        primaryButton__setPassword: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uC124\\uC815\",\n        primaryButton__updatePassword: \"\\uBE44\\uBC00\\uBC88\\uD638 \\uBCC0\\uACBD\",\n        title: \"\\uBE44\\uBC00\\uBC88\\uD638\"\n      },\n      phoneNumbersSection: {\n        destructiveAction: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uC81C\\uAC70\",\n        detailsAction__nonPrimary: \"\\uAE30\\uBCF8\\uC73C\\uB85C \\uC124\\uC815\",\n        detailsAction__primary: \"\\uC778\\uC99D \\uC644\\uB8CC\",\n        detailsAction__unverified: \"\\uC778\\uC99D \\uC644\\uB8CC\",\n        primaryButton: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638 \\uCD94\\uAC00\",\n        title: \"\\uD734\\uB300\\uD3F0 \\uBC88\\uD638\"\n      },\n      profileSection: {\n        primaryButton: \"\\uD504\\uB85C\\uD544 \\uC218\\uC815\",\n        title: \"\\uD504\\uB85C\\uD544\"\n      },\n      usernameSection: {\n        primaryButton__setUsername: \"\\uC0AC\\uC6A9\\uC790 \\uC774\\uB984 \\uC124\\uC815\",\n        primaryButton__updateUsername: \"\\uC0AC\\uC6A9\\uC790 \\uC774\\uB984 \\uBCC0\\uACBD\",\n        title: \"\\uC0AC\\uC6A9\\uC790 \\uC774\\uB984\"\n      },\n      web3WalletsSection: {\n        destructiveAction: \"\\uC9C0\\uAC11 \\uC81C\\uAC70\",\n        primaryButton: \"Web3 \\uC9C0\\uAC11\",\n        title: \"Web3 \\uC9C0\\uAC11\"\n      }\n    },\n    usernamePage: {\n      successMessage: \"\\uB2F9\\uC2E0\\uC76D \\uC0AC\\uC6A9\\uC790 \\uC774\\uB984\\uC774 \\uC5C5\\uB370\\uC774\\uD2B8\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n      title__set: \"\\uC0AC\\uC6A9\\uC790 \\uC774\\uB984 \\uC5C5\\uB370\\uC774\\uD2B8\",\n      title__update: \"\\uC0AC\\uC6A9\\uC790 \\uC774\\uB984 \\uC5C5\\uB370\\uC774\\uD2B8\"\n    },\n    web3WalletPage: {\n      removeResource: {\n        messageLine1: \"{{identifier}}\\uAC00 \\uC774 \\uACC4\\uC815\\uC5D0\\uC11C \\uC81C\\uAC70 \\uB420 \\uC608\\uC815\\uC785\\uB2C8\\uB2E4.\",\n        messageLine2: \"\\uB354 \\uC774\\uC0C1 \\uC774 web3 \\uC9C0\\uAC11\\uC744 \\uC0AC\\uC6A9\\uD558\\uC5EC \\uB85C\\uADF8\\uC778\\uD560 \\uC218 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n        successMessage: \"{{web3Wallet}}\\uAC00 \\uB2F9\\uC2E0\\uC758 \\uACC4\\uC815\\uC5D0\\uC11C \\uC81C\\uAC70\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n        title: \"web3 \\uC9C0\\uAC11 \\uC81C\\uAC70\"\n      },\n      subtitle__availableWallets: \"\\uACC4\\uC815\\uC5D0 \\uC5F0\\uACB0\\uD560 web3 \\uC9C0\\uAC11\\uC744 \\uC120\\uD0DD\\uD558\\uC138\\uC694.\",\n      subtitle__unavailableWallets: \"\\uC0AC\\uC6A9 \\uAC00\\uB2A5\\uD55C web3 \\uC9C0\\uAC11\\uC774 \\uC5C6\\uC2B5\\uB2C8\\uB2E4.\",\n      successMessage: \"\\uC9C0\\uAC11\\uC774 \\uACC4\\uC815\\uC5D0 \\uCD94\\uAC00\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4\\xDF.\",\n      title: \"web3 \\uC9C0\\uAC11 \\uCD94\\uAC00\"\n    }\n  }\n};\n\n// src/auth/Init.tsx\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction Init(props) {\n  const { databaseURL, anonKey } = props;\n  const [store, setStore] = useGlobalStore();\n  const { clerk, supabase, user } = store;\n  useEffect(() => {\n    triggerConversionAPI(\"PageView\");\n  }, []);\n  useCourseDetailConversionTracking();\n  useEffect(() => {\n    console.log(\"load script\");\n    const script = document.createElement(\"script\");\n    script.async = true;\n    script.crossOrigin = \"anonymous\";\n    script.dataset.clerkPublishableKey = PUBLISHABLE_KEY;\n    script.src = CLERK_SRC;\n    script.type = \"text/javascript\";\n    document.head.appendChild(script);\n    return () => {\n      console.log(\"remove script\");\n      document.head.removeChild(script);\n    };\n  }, []);\n  const seconds = useCountdown(3);\n  useEffect(() => {\n    console.log(\"seconds\", seconds);\n    console.log({ clerk, Clerk: typeof Clerk });\n    if (seconds == 0 && typeof Clerk && !clerk) loadClerk({ setStore });\n  }, [seconds]);\n  useWindowLoad(() => __async(null, null, function* () {\n    console.log(\"Window loaded\");\n    loadClerk({ setStore });\n  }));\n  useEffect(() => {\n    if (store.supabase == null || store.supabase == void 0) {\n      const supabase2 = createClient(databaseURL, anonKey);\n      setStore({ supabase: supabase2 });\n    }\n  }, []);\n  useEffect(() => {\n    if (clerk == null ? void 0 : clerk.user) initUser({ supabase, clerkUser: clerk.user, setStore });\n  }, [clerk, supabase]);\n  const tailwindLoaded = useTailwind();\n  if (!showDebug) return;\n  return /* @__PURE__ */ jsxs(\"ul\", { children: [\n    /* @__PURE__ */ jsxs(\"li\", { children: [\n      clerk ? /* @__PURE__ */ jsx(\"span\", { className: \"text-green-500\", children: \"loaded\" }) : \"loading..\",\n      \" \",\n      \"(clerk)\"\n    ] }),\n    /* @__PURE__ */ jsxs(\"li\", { children: [\n      supabase ? /* @__PURE__ */ jsx(\"span\", { className: \"text-green-500\", children: \"loaded\" }) : \"loading..\",\n      \" \",\n      \"(supabase)\"\n    ] }),\n    /* @__PURE__ */ jsxs(\"li\", { children: [\n      user ? /* @__PURE__ */ jsx(\"span\", { className: \"text-green-500\", children: \"loaded\" }) : \"loading..\",\n      \" \",\n      \"(user)\"\n    ] }),\n    /* @__PURE__ */ jsx(\"br\", {}),\n    /* @__PURE__ */ jsxs(\"li\", { children: [\n      tailwindLoaded ? /* @__PURE__ */ jsx(\"span\", { className: \"text-green-500\", children: \"loaded\" }) : \"loading..\",\n      \"(tailwind)\"\n    ] })\n  ] });\n}\nfunction loadClerk(_0) {\n  return __async(this, arguments, function* ({ setStore }) {\n    yield Clerk.load({\n      localization: koKR\n      // signInForceRedirectUrl: \"https://harbor.school/my-courses\", // not working\n    });\n    console.log(\"ClerkJS is loaded\");\n    setStore({ clerk: Clerk });\n  });\n}\nvar useWindowLoad = (asyncCallback) => {\n  const [loaded, setLoaded] = useState(false);\n  useLayoutEffect(() => {\n    const onLoad = () => __async(null, null, function* () {\n      yield asyncCallback();\n      setLoaded(true);\n    });\n    window.addEventListener(\"load\", onLoad);\n    return () => {\n      window.removeEventListener(\"load\", onLoad);\n    };\n  }, [asyncCallback]);\n  return loaded;\n};\nvar useCountdown = (initialSeconds) => {\n  const [seconds, setSeconds] = useState(initialSeconds);\n  useEffect(() => {\n    if (seconds <= 0) {\n      return;\n    }\n    const intervalId = setInterval(() => {\n      setSeconds((prevSeconds) => prevSeconds - 1);\n    }, 1e3);\n    return () => clearInterval(intervalId);\n  }, [seconds]);\n  return seconds;\n};\nfunction initUser(_0) {\n  return __async(this, arguments, function* ({ supabase, clerkUser, setStore }) {\n    const email = clerkUser.primaryEmailAddress.emailAddress;\n    const { data, error } = yield supabase.from(\"users\").select().eq(\"email\", email);\n    console.log(\"data\", data);\n    if (data.length >= 1) setStore({ user: data[0] });\n    else {\n      const { data: created, error: error2 } = yield supabase.from(\"users\").insert({\n        email,\n        username: clerkUser.fullName\n      }).select();\n      console.log(\"error\", error2);\n      console.log(\"created\", created);\n      setStore({ user: created[0] });\n    }\n  });\n}\nInit.propertyControls = {\n  databaseURL: {\n    title: \"DB URL\",\n    type: ControlType.String,\n    defaultValue: \"\"\n  },\n  anonKey: {\n    type: ControlType.String,\n    defaultValue: \"\"\n  }\n};\n\nexport {\n  Init\n};\n","import {\n  Spinner\n} from \"./chunk-SDKSBXQ2.mjs\";\nimport {\n  isDev\n} from \"./chunk-SIZSNBFW.mjs\";\nimport {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\n\n// src/auth/Login.tsx\nimport { useEffect } from \"react\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction Login(props) {\n  const [store, setStore] = useGlobalStore();\n  const { clerk, user } = store;\n  useEffect(() => {\n    if (!clerk) return;\n    if (!clerk.user) {\n      const signInDiv = document.getElementById(\"sign-in\");\n      const signInProps = {\n        afterSignInUrl: \"/my-courses\",\n        afterSignUpUrl: \"/courses\"\n      };\n      console.log(\"signInProps\", signInProps);\n      clerk.mountSignIn(signInDiv, signInProps);\n    }\n  }, [clerk]);\n  if (!clerk && !isDev)\n    return /* @__PURE__ */ jsx(\"div\", { style: { display: \"flex\", justifyContent: \"center\" }, children: /* @__PURE__ */ jsx(Spinner, { style: { width: 24, height: 24 } }) });\n  return /* @__PURE__ */ jsxs(\"div\", { children: [\n    /* @__PURE__ */ jsx(\"style\", { children: `\n            .cl-internal-b3fm6y {\n                display: none !important;\n            }\n        ` }),\n    !(clerk == null ? void 0 : clerk.user) && /* @__PURE__ */ jsx(\"div\", { style: { display: \"flex\", justifyContent: \"center\" }, children: /* @__PURE__ */ jsx(\"div\", { id: \"sign-in\" }) })\n  ] });\n}\n\nexport {\n  Login\n};\n","import {\n  MenuItem\n} from \"./chunk-SDKSBXQ2.mjs\";\nimport {\n  afterSignOutUrl\n} from \"./chunk-77OKAR3P.mjs\";\nimport {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\n\n// src/auth/UserButton.tsx\nimport { useEffect } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nfunction UserButton(props) {\n  const [store, setStore] = useGlobalStore();\n  const { clerk, user } = store;\n  useEffect(() => {\n    if (!clerk) return;\n    if (clerk.user) {\n      const userButtonDiv = document.getElementById(\"user-button\");\n      clerk.mountUserButton(userButtonDiv, { afterSignOutUrl });\n    }\n  }, [clerk]);\n  if (!clerk) return /* @__PURE__ */ jsx(MenuItem, { title: \"...\" });\n  return /* @__PURE__ */ jsxs(Fragment, { children: [\n    /* @__PURE__ */ jsx(\"style\", { children: `\n            .cl-userButtonPopoverActionButton__manageAccount, .cl-userButtonPopoverFooter {\n                display: none !important;\n            }\n        ` }),\n    (clerk == null ? void 0 : clerk.user) ? /* @__PURE__ */ jsxs(\n      \"div\",\n      {\n        style: {\n          display: \"flex\",\n          gap: 36,\n          justifyContent: \"end\"\n        },\n        className: \"flex-col md:flex-row items-start md:items-center\",\n        children: [\n          /* @__PURE__ */ jsx(\n            MenuItem,\n            {\n              title: \"\\uB0B4 \\uAC15\\uC758\\uC2E4\",\n              onClick: () => window.open(`/my-courses`, \"_self\")\n            }\n          ),\n          /* @__PURE__ */ jsx(\"div\", { id: \"user-button\" })\n        ]\n      }\n    ) : /* @__PURE__ */ jsx(\n      MenuItem,\n      {\n        title: \"\\uB85C\\uADF8\\uC778\",\n        onClick: () => window.open(`/login`, \"_self\")\n      }\n    )\n  ] });\n}\n\nexport {\n  UserButton\n};\n","import {\n  __objRest,\n  __spreadProps,\n  __spreadValues\n} from \"./chunk-JWK35I2R.mjs\";\n\n// src/CompareImage.tsx\nimport { ControlType } from \"framer\";\n\n// node_modules/.pnpm/react-compare-slider@3.1.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-compare-slider/dist/index.mjs\nimport { forwardRef as be, useCallback as P, useEffect as k, useImperativeHandle as He, useRef as M, useState as V } from \"react\";\nimport { forwardRef as ee } from \"react\";\nimport { jsx as te } from \"react/jsx-runtime\";\nimport { jsx as H, jsxs as ne } from \"react/jsx-runtime\";\nimport { useCallback as ge, useEffect as O, useLayoutEffect as Le, useRef as N } from \"react\";\nimport { jsx as Y, jsxs as xe } from \"react/jsx-runtime\";\nimport { forwardRef as we } from \"react\";\nimport { jsx as Ae } from \"react/jsx-runtime\";\nimport { useRef as De } from \"react\";\nvar B = ee((_a, r) => {\n  var _b = _a, { transition: e } = _b, t = __objRest(_b, [\"transition\"]);\n  let o = { position: \"absolute\", top: 0, left: 0, width: \"100%\", height: \"100%\", transition: e ? `clip-path ${e}` : void 0, userSelect: \"none\", willChange: \"clip-path, transition\", KhtmlUserSelect: \"none\", MozUserSelect: \"none\", WebkitUserSelect: \"none\" };\n  return te(\"div\", __spreadProps(__spreadValues({}, t), { style: o, \"data-rcs\": \"clip-item\", ref: r }));\n});\nB.displayName = \"ContainerClip\";\nvar W = ee(({ children: e, disabled: t, portrait: r, position: o, transition: i }, m) => {\n  let u = { position: \"absolute\", top: 0, width: r ? \"100%\" : void 0, height: r ? void 0 : \"100%\", background: \"none\", border: 0, padding: 0, pointerEvents: \"all\", appearance: \"none\", WebkitAppearance: \"none\", MozAppearance: \"none\", outline: 0, transform: r ? \"translate3d(0, -50% ,0)\" : \"translate3d(-50%, 0, 0)\", transition: i ? `${r ? \"top\" : \"left\"} ${i}` : void 0 };\n  return te(\"button\", { ref: m, \"aria-label\": \"Drag to move or focus and use arrow keys\", \"aria-orientation\": r ? \"vertical\" : \"horizontal\", \"aria-valuemin\": 0, \"aria-valuemax\": 100, \"aria-valuenow\": o, \"data-rcs\": \"handle-container\", disabled: t, role: \"slider\", style: u, children: e });\n});\nW.displayName = \"ThisHandleContainer\";\nvar re = ({ flip: e }) => H(\"div\", { className: \"__rcs-handle-arrow\", style: { width: 0, height: 0, borderTop: \"8px solid transparent\", borderRight: \"10px solid\", borderBottom: \"8px solid transparent\", transform: e ? \"rotate(180deg)\" : void 0 } });\nvar F = (_a) => {\n  var _b = _a, { className: e = \"__rcs-handle-root\", disabled: t, buttonStyle: r, linesStyle: o, portrait: i, style: m } = _b, C = __objRest(_b, [\"className\", \"disabled\", \"buttonStyle\", \"linesStyle\", \"portrait\", \"style\"]);\n  let u = __spreadValues({ display: \"flex\", flexDirection: i ? \"row\" : \"column\", placeItems: \"center\", height: \"100%\", cursor: t ? \"not-allowed\" : i ? \"ns-resize\" : \"ew-resize\", pointerEvents: \"none\", color: \"#fff\" }, m), E = __spreadValues({ flexGrow: 1, height: i ? 2 : \"100%\", width: i ? \"100%\" : 2, backgroundColor: \"currentColor\", pointerEvents: \"auto\", boxShadow: \"0 0 4px rgba(0,0,0,.5)\" }, o), y = __spreadValues({ display: \"grid\", gridAutoFlow: \"column\", gap: 8, placeContent: \"center\", flexShrink: 0, width: 56, height: 56, borderRadius: \"50%\", borderStyle: \"solid\", borderWidth: 2, pointerEvents: \"auto\", backdropFilter: \"blur(7px)\", WebkitBackdropFilter: \"blur(7px)\", backgroundColor: \"rgba(0, 0, 0, 0.125)\", boxShadow: \"0 0 4px rgba(0,0,0,.35)\", transform: i ? \"rotate(90deg)\" : void 0 }, r);\n  return ne(\"div\", __spreadProps(__spreadValues({}, C), { className: e, style: u, children: [H(\"div\", { className: \"__rcs-handle-line\", style: E }), ne(\"div\", { className: \"__rcs-handle-button\", style: y, children: [H(re, {}), H(re, { flip: true })] }), H(\"div\", { className: \"__rcs-handle-line\", style: E })] }));\n};\nvar $ = ((i) => (i.ARROW_LEFT = \"ArrowLeft\", i.ARROW_RIGHT = \"ArrowRight\", i.ARROW_UP = \"ArrowUp\", i.ARROW_DOWN = \"ArrowDown\", i))($ || {});\nvar G = (_a = {}) => {\n  var _b = _a, { boxSizing: e = \"border-box\", objectFit: t = \"cover\", objectPosition: r = \"center center\" } = _b, o = __objRest(_b, [\"boxSizing\", \"objectFit\", \"objectPosition\"]);\n  return __spreadValues({ display: \"block\", width: \"100%\", height: \"100%\", maxWidth: \"100%\", boxSizing: e, objectFit: t, objectPosition: r }, o);\n};\nvar oe = (e) => {\n  let t = N(e);\n  return O(() => {\n    t.current = e;\n  }), t.current;\n};\nvar U = (e, t, r, o) => {\n  let i = N();\n  O(() => {\n    i.current = t;\n  }, [t]), O(() => {\n    if (!(r && r.addEventListener)) return;\n    let m = (C) => i.current && i.current(C);\n    return r.addEventListener(e, m, o), () => {\n      r.removeEventListener(e, m, o);\n    };\n  }, [e, r, o]);\n};\nvar Te = typeof window < \"u\" && typeof window.document < \"u\" && typeof window.document.createElement < \"u\" ? Le : O;\nvar ie = (e, t) => {\n  let r = N(), o = ge(() => {\n    e.current && r.current && r.current.observe(e.current);\n  }, [e]);\n  Te(() => (r.current = new ResizeObserver(([i]) => t(i.contentRect)), o(), () => {\n    r.current && r.current.disconnect();\n  }), [t, o]);\n};\nvar I = { capture: false, passive: true };\nvar X = { capture: true, passive: false };\nvar Me = (e) => {\n  e.preventDefault(), e.currentTarget.focus();\n};\nvar se = be((_a, de) => {\n  var _b = _a, { boundsPadding: e = 0, browsingContext: t = globalThis, changePositionOnHover: r = false, disabled: o = false, handle: i, itemOne: m, itemTwo: C, keyboardIncrement: u = \"5%\", onlyHandleDraggable: E = false, onPositionChange: y, portrait: a = false, position: g = 50, style: le, transition: ce } = _b, pe = __objRest(_b, [\"boundsPadding\", \"browsingContext\", \"changePositionOnHover\", \"disabled\", \"handle\", \"itemOne\", \"itemTwo\", \"keyboardIncrement\", \"onlyHandleDraggable\", \"onPositionChange\", \"portrait\", \"position\", \"style\", \"transition\"]);\n  let p = M(null), j = M(null), f = M(null), d = M(g), [L, q] = V(false), [me, x] = V(true), w = M(false), [ue, fe] = V(), J = oe(g), l = P(function({ x: s, y: c, isOffset: R }) {\n    let b = p.current, A = f.current, D = j.current, { width: h, height: S, left: Pe, top: Ee } = b.getBoundingClientRect();\n    if (h === 0 || S === 0) return;\n    let ye = a ? R ? c - Ee - t.scrollY : c : R ? s - Pe - t.scrollX : s, Q = Math.min(Math.max(ye / (a ? S : h) * 100, 0), 100), z = a ? S / (b.offsetHeight || 1) : h / (b.offsetWidth || 1), Z = e * z / (a ? S : h) * 100, _ = Math.min(Math.max(Q, Z * z), 100 - Z * z);\n    d.current = Q, A.setAttribute(\"aria-valuenow\", `${Math.round(d.current)}`), A.style.top = a ? `${_}%` : \"0\", A.style.left = a ? \"0\" : `${_}%`, D.style.clipPath = a ? `inset(${_}% 0 0 0)` : `inset(0 0 0 ${_}%)`, y && y(d.current);\n  }, [e, y, a, t]);\n  k(() => {\n    let { width: n, height: s } = p.current.getBoundingClientRect(), c = g === J ? d.current : g;\n    l({ x: n / 100 * c, y: s / 100 * c });\n  }, [e, g, a, J, l]);\n  let Re = P((n) => {\n    n.preventDefault(), !(o || n.button !== 0) && (l({ isOffset: true, x: n.pageX, y: n.pageY }), q(true), x(true));\n  }, [o, l]), v = P(function(s) {\n    l({ isOffset: true, x: s.pageX, y: s.pageY }), x(false);\n  }, [l]), T = P(() => {\n    q(false), x(true);\n  }, []), Se = P(({ width: n, height: s }) => {\n    let { width: c, height: R } = p.current.getBoundingClientRect();\n    l({ x: n / 100 * d.current * c / n, y: s / 100 * d.current * R / s });\n  }, [l]), Ce = P((n) => {\n    if (!Object.values($).includes(n.key)) return;\n    n.preventDefault(), x(true);\n    let { top: s, left: c } = f.current.getBoundingClientRect(), { width: R, height: b } = p.current.getBoundingClientRect(), D = typeof u == \"string\" ? parseFloat(u) : u / R * 100, h = a ? n.key === \"ArrowLeft\" || n.key === \"ArrowDown\" : n.key === \"ArrowRight\" || n.key === \"ArrowUp\", S = Math.min(Math.max(h ? d.current + D : d.current - D, 0), 100);\n    l({ x: a ? c : R * S / 100, y: a ? b * S / 100 : s });\n  }, [u, a, l]);\n  k(() => {\n    fe(E ? f.current : p.current);\n  }, [E]), k(() => {\n    let n = p.current, s = () => {\n      L || T();\n    };\n    return r && (n.addEventListener(\"pointermove\", v, I), n.addEventListener(\"pointerleave\", s, I)), () => {\n      n.removeEventListener(\"pointermove\", v), n.removeEventListener(\"pointerleave\", s);\n    };\n  }, [r, v, T, L]), k(() => (L && !w.current && (t.addEventListener(\"pointermove\", v, I), t.addEventListener(\"pointerup\", T, I), w.current = true), () => {\n    w.current && (t.removeEventListener(\"pointermove\", v), t.removeEventListener(\"pointerup\", T), w.current = false);\n  }), [v, T, L, t]), He(de, () => ({ rootContainer: p.current, handleContainer: f.current, setPosition(n) {\n    let { width: s, height: c } = p.current.getBoundingClientRect();\n    l({ x: s / 100 * n, y: c / 100 * n });\n  } }), [l]), ie(p, Se), U(\"keydown\", Ce, f.current, X), U(\"click\", Me, f.current, X), U(\"pointerdown\", Re, ue, X);\n  let ve = i || Y(F, { disabled: o, portrait: a }), K = me ? ce : void 0, he = __spreadValues({ position: \"relative\", display: \"flex\", overflow: \"hidden\", cursor: L ? a ? \"ns-resize\" : \"ew-resize\" : void 0, touchAction: \"none\", userSelect: \"none\", KhtmlUserSelect: \"none\", msUserSelect: \"none\", MozUserSelect: \"none\", WebkitUserSelect: \"none\" }, le);\n  return xe(\"div\", __spreadProps(__spreadValues({}, pe), { ref: p, style: he, \"data-rcs\": \"root\", children: [m, Y(B, { ref: j, transition: K, children: C }), Y(W, { disabled: o, portrait: a, position: Math.round(d.current), ref: f, transition: K, children: ve })] }));\n});\nse.displayName = \"ReactCompareSlider\";\nvar ae = we((_a, r) => {\n  var _b = _a, { style: e } = _b, t = __objRest(_b, [\"style\"]);\n  let o = G(e);\n  return Ae(\"img\", __spreadProps(__spreadValues({ ref: r }, t), { style: o, \"data-rcs\": \"image\" }));\n});\nae.displayName = \"ReactCompareSliderImage\";\n\n// src/CompareImage.tsx\nimport { jsx } from \"react/jsx-runtime\";\nfunction CompareImage({\n  image1 = \"https://upload.wikimedia.org/wikipedia/commons/f/f5/Poster-sized_portrait_of_Barack_Obama.jpg\",\n  image2 = \"https://upload.wikimedia.org/wikipedia/en/b/b7/President_Barack_Obama_by_Kehinde_Wiley.jpg\",\n  position\n}) {\n  return /* @__PURE__ */ jsx(\n    se,\n    {\n      itemOne: /* @__PURE__ */ jsx(ae, { src: image1, alt: \"Image one\" }),\n      itemTwo: /* @__PURE__ */ jsx(ae, { src: image2, alt: \"Image two\" }),\n      onlyHandleDraggable: true,\n      position,\n      style: { touchAction: \"pan-y\" }\n    }\n  );\n}\nCompareImage.propertyControls = {\n  image1: {\n    type: ControlType.Image,\n    defaultValue: \"https://upload.wikimedia.org/wikipedia/commons/f/f5/Poster-sized_portrait_of_Barack_Obama.jpg\"\n  },\n  image2: {\n    type: ControlType.Image,\n    defaultValue: \"https://upload.wikimedia.org/wikipedia/en/b/b7/President_Barack_Obama_by_Kehinde_Wiley.jpg\"\n  },\n  position: {\n    type: ControlType.Number,\n    min: 0,\n    max: 100,\n    defaultValue: 50\n  }\n};\n\nexport {\n  CompareImage\n};\n","import {\n  useMounted\n} from \"./chunk-SIZSNBFW.mjs\";\n\n// src/Counter.tsx\nimport { ControlType } from \"framer\";\nimport { useState, useEffect } from \"react\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar systemFont = `ui-sans-serif, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, \"Apple Color Emoji\", Arial, sans-serif, \"Segoe UI Emoji\", \"Segoe UI Symbol\"`;\nvar getHighlightStyle = (size) => ({\n  color: \"#005DFA\",\n  // 원하는 하이라이트 색상\n  fontWeight: \"bold\",\n  backgroundColor: \"#FCEBEF\",\n  // 배경색\n  padding: size === \"small\" ? \"0 3px\" : size === \"large\" ? \"0 8px\" : size === \"extra-large\" ? \"0 12px\" : \"0 5px\",\n  borderRadius: size === \"small\" ? \"3px\" : size === \"large\" ? \"6px\" : size === \"extra-large\" ? \"8px\" : \"4px\"\n});\nvar getSizeClass = (size) => {\n  switch (size) {\n    case \"small\":\n      return \"text-sm max-md:text-xs\";\n    case \"large\":\n      return \"text-3xl max-md:text-xl\";\n    case \"extra-large\":\n      return \"text-6xl max-md:text-3xl\";\n    default:\n      return \"text-xl max-md:text-xs\";\n  }\n};\nfunction Counter({\n  targetDate = \"2024-06-31T00:00:00\",\n  slotLeft,\n  suffix,\n  size = \"medium\",\n  showSeconds = false\n}) {\n  const calculateTimeLeft = () => {\n    const difference = +new Date(targetDate) - +/* @__PURE__ */ new Date();\n    let timeLeft2 = {};\n    if (difference > 0) {\n      timeLeft2 = {\n        days: Math.floor(difference / (1e3 * 60 * 60 * 24)),\n        hours: Math.floor(difference / (1e3 * 60 * 60) % 24),\n        minutes: Math.floor(difference / 1e3 / 60 % 60),\n        seconds: Math.floor(difference / 1e3 % 60)\n      };\n    }\n    return timeLeft2;\n  };\n  const [timeLeft, setTimeLeft] = useState(calculateTimeLeft());\n  useEffect(() => {\n    const timer = setTimeout(() => {\n      setTimeLeft(calculateTimeLeft());\n    }, 1e3);\n    return () => clearTimeout(timer);\n  }, [timeLeft]);\n  const isMounted = useMounted();\n  const highlightStyle = getHighlightStyle(size);\n  const sizeClass = getSizeClass(size);\n  if (!isMounted) return;\n  return /* @__PURE__ */ jsx(\n    \"div\",\n    {\n      style: { fontFamily: systemFont, color: \"black\" },\n      className: `${sizeClass} text-center max-md:text-left`,\n      children: slotLeft ? /* @__PURE__ */ jsxs(\"span\", { children: [\n        /* @__PURE__ */ jsx(\"span\", { style: highlightStyle, children: slotLeft }),\n        /* @__PURE__ */ jsx(\"span\", { style: { whiteSpace: \"nowrap\" }, children: suffix })\n      ] }) : timeLeft.days !== void 0 ? /* @__PURE__ */ jsxs(\"span\", { children: [\n        /* @__PURE__ */ jsxs(\"span\", { style: highlightStyle, children: [\n          timeLeft.days,\n          \"\\uC77C\"\n        ] }),\n        \" \",\n        /* @__PURE__ */ jsxs(\"span\", { style: highlightStyle, children: [\n          timeLeft.hours,\n          \"\\uC2DC\\uAC04\"\n        ] }),\n        \" \",\n        /* @__PURE__ */ jsxs(\"span\", { style: highlightStyle, children: [\n          timeLeft.minutes,\n          \"\\uBD84\"\n        ] }),\n        showSeconds && /* @__PURE__ */ jsxs(Fragment, { children: [\n          \" \",\n          /* @__PURE__ */ jsxs(\"span\", { style: highlightStyle, children: [\n            timeLeft.seconds,\n            \"\\uCD08\"\n          ] })\n        ] }),\n        /* @__PURE__ */ jsx(\"span\", { style: { whiteSpace: \"nowrap\" }, children: suffix })\n      ] }) : (\n        //  {/* <span>Time's up!</span>*/}\n        /* @__PURE__ */ jsxs(\"span\", { children: [\n          /* @__PURE__ */ jsx(\"span\", { style: highlightStyle, children: \"0\\uC77C\" }),\n          \" \",\n          /* @__PURE__ */ jsx(\"span\", { style: highlightStyle, children: \"0\\uC2DC\\uAC04\" }),\n          \" \",\n          /* @__PURE__ */ jsx(\"span\", { style: highlightStyle, children: \"0\\uBD84\" }),\n          showSeconds && /* @__PURE__ */ jsxs(Fragment, { children: [\n            \" \",\n            /* @__PURE__ */ jsx(\"span\", { style: highlightStyle, children: \"0\\uCD08\" })\n          ] }),\n          /* @__PURE__ */ jsx(\"span\", { style: { whiteSpace: \"nowrap\" }, children: suffix })\n        ] })\n      )\n    }\n  );\n}\nCounter.propertyControls = {\n  targetDate: {\n    type: ControlType.String,\n    defaultValue: \"2024-07-30T00:00:00\"\n  },\n  slotLeft: {\n    type: ControlType.String,\n    defaultValue: \"2\\uC790\\uB9AC\"\n  },\n  suffix: {\n    type: ControlType.String,\n    defaultValue: \" \\uD6C4 \\uAC00\\uACA9 \\uC778\\uC0C1\"\n  },\n  size: {\n    type: ControlType.Enum,\n    options: [\"small\", \"medium\", \"large\", \"extra-large\"],\n    defaultValue: \"medium\"\n  },\n  showSeconds: {\n    type: ControlType.Boolean,\n    defaultValue: false\n  }\n};\n\nexport {\n  Counter\n};\n","import {\n  Ae\n} from \"./chunk-PO4BOMMR.mjs\";\nimport {\n  cx\n} from \"./chunk-SIZSNBFW.mjs\";\n\n// src/MuxPlayer.tsx\nimport { useState, useRef } from \"react\";\nimport { ControlType } from \"framer\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction MuxPlayer({\n  playbackId,\n  thumbnailUrl,\n  thumbnailTime,\n  title,\n  autoPlay = true,\n  startTime = 5,\n  endTime = 167\n}) {\n  const [isPlaying, setIsPlaying] = useState(false);\n  const [isClosed, setIsClosed] = useState(false);\n  const playerRef = useRef(null);\n  const handlePlay = () => {\n    setIsPlaying(true);\n  };\n  const handlePause = () => {\n    if (playerRef.current) {\n      playerRef.current.pause();\n    }\n    setIsPlaying(false);\n  };\n  const handleClose = () => {\n    setIsPlaying(false);\n    setIsClosed(true);\n  };\n  return /* @__PURE__ */ jsxs(\n    \"div\",\n    {\n      className: `overflow-hidden video-container ${isPlaying ? \"playing\" : \"\"} ${isClosed ? \"closed\" : \"\"}`,\n      children: [\n        /* @__PURE__ */ jsx(\n          \"button\",\n          {\n            onClick: (e) => {\n              if (isPlaying) handlePause();\n              else handleClose();\n            },\n            className: \"absolute top-2 left-2 md:top-4 md:left-4 z-20 bg-black bg-opacity-50 rounded-full w-10 h-10 flex items-center justify-center text-white hover:bg-opacity-70 transition-all\",\n            children: /* @__PURE__ */ jsx(\n              \"svg\",\n              {\n                width: \"16\",\n                height: \"16\",\n                viewBox: \"0 0 24 24\",\n                fill: \"none\",\n                xmlns: \"http://www.w3.org/2000/svg\",\n                children: /* @__PURE__ */ jsx(\n                  \"path\",\n                  {\n                    d: \"M18 6L6 18M6 6L18 18\",\n                    stroke: \"currentColor\",\n                    strokeWidth: \"2\",\n                    strokeLinecap: \"round\",\n                    strokeLinejoin: \"round\"\n                  }\n                )\n              }\n            )\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"div\", { className: \"absolute left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2 video-wrapper\", children: [\n          /* @__PURE__ */ jsx(\n            \"img\",\n            {\n              src: thumbnailUrl,\n              className: cx(\n                \"w-full h-full object-cover absolute z-10 pointer-events-none\",\n                isPlaying ? \"opacity-0\" : \"opacity-100\"\n              )\n            }\n          ),\n          /* @__PURE__ */ jsx(PlayButton, { isPlaying }),\n          /* @__PURE__ */ jsx(\n            Ae,\n            {\n              ref: playerRef,\n              playbackId,\n              thumbnailTime,\n              metadataVideoTitle: title,\n              primaryColor: \"#FFFFFF\",\n              secondaryColor: \"#000000\",\n              accentColor: \"#005DFA\",\n              autoPlay: false,\n              startTime,\n              loop: true,\n              endTime,\n              onPlay: handlePlay,\n              onPause: handlePause\n            }\n          )\n        ] }),\n        /* @__PURE__ */ jsx(\"style\", { children: `\n        .video-container {\n          position: fixed;\n          bottom: 20px;\n          left: 20px;\n          width: 168px;\n          height: 258px;\n          transition: all 0.3s ease;\n          z-index: 1;\n          border-radius: 32px;\n        }\n\n        .video-wrapper {\n          width: 486px;\n          height: 300px;\n        }\n\n        .video-container.playing {\n          left: 50%;\n          bottom: 50%;\n          transform: translate(-50%, 50%);\n          width: 70%;\n          height: 70%;\n        }\n\n        .video-container.closed {\n          transform: translateX(-200%);\n          opacity: 0;\n        }\n\n        .video-container.playing .video-wrapper {\n          width: 100%;\n          height: 100%;\n        }\n\n        mux-player {\n          --seek-backward-button: none;\n          --seek-forward-button: none;\n          width: 100%;\n          height: auto;\n          display: block;\n        }\n        \n        @media (max-width: 768px) {\n          .video-container {\n            width: 100px;\n            height: 190px;\n            bottom: 50px;\n            border-radius: 20px;\n            left: 16px;\n          }\n          .video-wrapper {\n            width: 400px;\n            height: 190px;\n          }\n\n         \n\n          .video-container.playing {\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            width: 100%;\n            height: 100%;\n            transform: none;\n            border-radius: 0;\n          }\n          .video-container.playing .video-wrapper {\n            width: 300%;\n            height: 100%;\n          }\n\n          .video-container.playing mux-player {\n            height: 100%;\n          }\n          \n          .video-container.closed {\n            transform: translateX(-200%);\n            opacity: 0;\n          }\n        }\n      ` })\n      ]\n    }\n  );\n}\nfunction PlayButton({ isPlaying }) {\n  return /* @__PURE__ */ jsx(\n    \"div\",\n    {\n      className: cx(\n        \"absolute inset-0 flex items-center justify-center pointer-events-none top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 z-10\",\n        isPlaying ? \"opacity-0\" : \"opacity-100\"\n      ),\n      children: /* @__PURE__ */ jsx(\"div\", { className: \"w-16 h-16 rounded-full bg-black bg-opacity-25 flex items-center justify-center\", children: /* @__PURE__ */ jsx(\n        \"svg\",\n        {\n          className: \"w-8 h-8 text-white\",\n          fill: \"currentColor\",\n          viewBox: \"0 0 24 24\",\n          children: /* @__PURE__ */ jsx(\"path\", { d: \"M8 5v14l11-7z\" })\n        }\n      ) })\n    }\n  );\n}\nMuxPlayer.propertyControls = {\n  playbackId: {\n    type: ControlType.String,\n    title: \"Playback ID\",\n    defaultValue: \"5duxZe1PdSCnujI3H2fOrJ01JM53ePc2bYxJ0000xcuo0000\"\n  },\n  thumbnailUrl: {\n    type: ControlType.String,\n    title: \"Thumbnail URL\",\n    defaultValue: \"https://cdn.monthlystartup.co/comfy-for-real-ads-thumbnail.webp\"\n  },\n  thumbnailTime: {\n    type: ControlType.Number,\n    title: \"Thumbnail Time\"\n  },\n  title: {\n    type: ControlType.String,\n    title: \"Title\"\n  },\n  autoPlay: {\n    type: ControlType.Boolean,\n    title: \"Auto Play\",\n    defaultValue: true\n  },\n  startTime: {\n    type: ControlType.Number,\n    title: \"Start Time (seconds)\",\n    defaultValue: 5\n  },\n  endTime: {\n    type: ControlType.Number,\n    title: \"End Time (seconds)\",\n    defaultValue: 167\n  }\n};\n\nexport {\n  MuxPlayer\n};\n","import {\n  useGlobalStore\n} from \"./chunk-QHMWAEE2.mjs\";\nimport {\n  __async,\n  __spreadProps,\n  __spreadValues\n} from \"./chunk-JWK35I2R.mjs\";\n\n// src/Waitlist.tsx\nimport { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nfunction Waitlist() {\n  const [store] = useGlobalStore();\n  const { supabase } = store;\n  const [formData, setFormData] = useState({\n    name: \"\",\n    email: \"\",\n    phone: \"\"\n  });\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [isSubmitted, setIsSubmitted] = useState(false);\n  const [error, setError] = useState(\"\");\n  const handleInputChange = (e) => {\n    const { name, value } = e.target;\n    setFormData((prev) => __spreadProps(__spreadValues({}, prev), {\n      [name]: value\n    }));\n    if (error) setError(\"\");\n  };\n  const validateForm = () => {\n    if (!formData.name.trim()) return \"\\uC774\\uB984\\uC744 \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\";\n    if (!formData.email.trim()) return \"\\uC774\\uBA54\\uC77C\\uC744 \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\";\n    if (!formData.phone.trim()) return \"\\uC804\\uD654\\uBC88\\uD638\\uB97C \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\";\n    const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n    if (!emailRegex.test(formData.email))\n      return \"\\uC62C\\uBC14\\uB978 \\uC774\\uBA54\\uC77C \\uD615\\uC2DD\\uC744 \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694.\";\n    const phoneRegex = /^01[0-9]-?[0-9]{4}-?[0-9]{4}$/;\n    if (!phoneRegex.test(formData.phone.replace(/\\s/g, \"\"))) {\n      return \"\\uC62C\\uBC14\\uB978 \\uC804\\uD654\\uBC88\\uD638 \\uD615\\uC2DD\\uC744 \\uC785\\uB825\\uD574\\uC8FC\\uC138\\uC694. (\\uC608: 010-1234-5678)\";\n    }\n    return null;\n  };\n  const handleSubmit = (e) => __async(null, null, function* () {\n    e.preventDefault();\n    const validationError = validateForm();\n    if (validationError) {\n      setError(validationError);\n      return;\n    }\n    if (!supabase) {\n      setError(\n        \"\\uB370\\uC774\\uD130\\uBCA0\\uC774\\uC2A4 \\uC5F0\\uACB0\\uC5D0 \\uBB38\\uC81C\\uAC00 \\uC788\\uC2B5\\uB2C8\\uB2E4. \\uC7A0\\uC2DC \\uD6C4 \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD574\\uC8FC\\uC138\\uC694.\"\n      );\n      return;\n    }\n    setIsSubmitting(true);\n    setError(\"\");\n    try {\n      const { data: existingUser } = yield supabase.from(\"users\").select(\"email, access\").eq(\"email\", formData.email).single();\n      if (existingUser) {\n        const currentAccess = existingUser.access || {};\n        const updatedAccess = __spreadProps(__spreadValues({}, currentAccess), {\n          \"vibe-coding-waitlist\": true\n        });\n        const { error: updateError } = yield supabase.from(\"users\").update({\n          username: formData.name,\n          phone: formData.phone,\n          access: updatedAccess\n        }).eq(\"email\", formData.email);\n        if (updateError) {\n          console.error(\"Update error:\", updateError);\n          setError(\"\\uB4F1\\uB85D \\uC911 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD574\\uC8FC\\uC138\\uC694.\");\n          return;\n        }\n      } else {\n        const { error: insertError } = yield supabase.from(\"users\").insert({\n          username: formData.name,\n          email: formData.email,\n          phone: formData.phone,\n          access: { \"vibe-coding-waitlist\": true }\n        });\n        if (insertError) {\n          console.error(\"Insert error:\", insertError);\n          setError(\"\\uB4F1\\uB85D \\uC911 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD574\\uC8FC\\uC138\\uC694.\");\n          return;\n        }\n      }\n      setIsSubmitted(true);\n      setFormData({\n        name: \"\",\n        email: \"\",\n        phone: \"\"\n      });\n    } catch (err) {\n      console.error(\"Submission error:\", err);\n      setError(\"\\uB4F1\\uB85D \\uC911 \\uC624\\uB958\\uAC00 \\uBC1C\\uC0DD\\uD588\\uC2B5\\uB2C8\\uB2E4. \\uB2E4\\uC2DC \\uC2DC\\uB3C4\\uD574\\uC8FC\\uC138\\uC694.\");\n    } finally {\n      setIsSubmitting(false);\n    }\n  });\n  if (isSubmitted) {\n    return /* @__PURE__ */ jsxs(\n      motion.div,\n      {\n        initial: { opacity: 0, scale: 0.8 },\n        animate: { opacity: 1, scale: 1 },\n        transition: { duration: 0.5 },\n        className: \"max-w-md mx-auto p-8 bg-white rounded-3xl shadow-xl border border-gray-100\",\n        children: [\n          /* @__PURE__ */ jsx(\n            motion.div,\n            {\n              initial: { scale: 0 },\n              animate: { scale: 1 },\n              transition: { delay: 0.2, type: \"spring\", stiffness: 200 },\n              className: \"w-16 h-16 mx-auto mb-6 bg-green-100 rounded-full flex items-center justify-center\",\n              children: /* @__PURE__ */ jsx(\n                \"svg\",\n                {\n                  className: \"w-8 h-8 text-green-600\",\n                  fill: \"none\",\n                  stroke: \"currentColor\",\n                  viewBox: \"0 0 24 24\",\n                  children: /* @__PURE__ */ jsx(\n                    \"path\",\n                    {\n                      strokeLinecap: \"round\",\n                      strokeLinejoin: \"round\",\n                      strokeWidth: 2,\n                      d: \"M5 13l4 4L19 7\"\n                    }\n                  )\n                }\n              )\n            }\n          ),\n          /* @__PURE__ */ jsx(\n            motion.h2,\n            {\n              initial: { opacity: 0, y: 20 },\n              animate: { opacity: 1, y: 0 },\n              transition: { delay: 0.3 },\n              className: \"text-2xl font-bold text-gray-900 text-center mb-4\",\n              children: \"\\uB4F1\\uB85D \\uC644\\uB8CC!\"\n            }\n          ),\n          /* @__PURE__ */ jsxs(\n            motion.p,\n            {\n              initial: { opacity: 0, y: 20 },\n              animate: { opacity: 1, y: 0 },\n              transition: { delay: 0.4 },\n              className: \"text-gray-600 text-center leading-relaxed\",\n              children: [\n                \"\\uB300\\uAE30\\uBA85\\uB2E8\\uC5D0 \\uC131\\uACF5\\uC801\\uC73C\\uB85C \\uB4F1\\uB85D\\uB418\\uC5C8\\uC2B5\\uB2C8\\uB2E4.\",\n                /* @__PURE__ */ jsx(\"br\", {}),\n                \"\\uACE7 \\uC5F0\\uB77D\\uB4DC\\uB9AC\\uACA0\\uC2B5\\uB2C8\\uB2E4!\"\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsx(\n            motion.button,\n            {\n              initial: { opacity: 0, y: 20 },\n              animate: { opacity: 1, y: 0 },\n              transition: { delay: 0.5 },\n              onClick: () => setIsSubmitted(false),\n              className: \"w-full mt-6 px-6 py-3 bg-gray-100 text-gray-700 rounded-xl font-medium hover:bg-gray-200 transition-colors\",\n              children: \"\\uB2E4\\uC2DC \\uB4F1\\uB85D\\uD558\\uAE30\"\n            }\n          )\n        ]\n      }\n    );\n  }\n  return /* @__PURE__ */ jsxs(\n    motion.div,\n    {\n      initial: { opacity: 0, y: 20 },\n      animate: { opacity: 1, y: 0 },\n      transition: { duration: 0.6 },\n      className: \"max-w-md mx-auto p-8 bg-white rounded-3xl shadow-xl border border-gray-100\",\n      children: [\n        /* @__PURE__ */ jsx(\n          motion.div,\n          {\n            initial: { scale: 0.8, opacity: 0 },\n            animate: { scale: 1, opacity: 1 },\n            transition: { delay: 0.1, duration: 0.5 },\n            className: \"text-center mb-8\",\n            children: /* @__PURE__ */ jsx(\"h1\", { className: \"text-3xl font-bold text-gray-900 mb-2\", children: \"10\\uC6D4 \\uC54C\\uB9BC\\uC2E0\\uCCAD\" })\n          }\n        ),\n        /* @__PURE__ */ jsxs(\"form\", { onSubmit: handleSubmit, className: \"space-y-6\", children: [\n          /* @__PURE__ */ jsxs(\n            motion.div,\n            {\n              initial: { x: -20, opacity: 0 },\n              animate: { x: 0, opacity: 1 },\n              transition: { delay: 0.2 },\n              children: [\n                /* @__PURE__ */ jsx(\n                  \"label\",\n                  {\n                    htmlFor: \"name\",\n                    className: \"block text-sm font-medium text-gray-700 mb-2\",\n                    children: \"\\uC774\\uB984\"\n                  }\n                ),\n                /* @__PURE__ */ jsx(\n                  \"input\",\n                  {\n                    type: \"text\",\n                    id: \"name\",\n                    name: \"name\",\n                    value: formData.name,\n                    onChange: handleInputChange,\n                    className: \"w-full px-4 py-3 border border-gray-200 rounded-xl focus:ring-2 focus:ring-[#005DFA] focus:border-transparent transition-all duration-200 bg-gray-50 focus:bg-white\",\n                    placeholder: \"\\uD64D\\uAE38\\uB3D9\"\n                  }\n                )\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\n            motion.div,\n            {\n              initial: { x: -20, opacity: 0 },\n              animate: { x: 0, opacity: 1 },\n              transition: { delay: 0.3 },\n              children: [\n                /* @__PURE__ */ jsx(\n                  \"label\",\n                  {\n                    htmlFor: \"email\",\n                    className: \"block text-sm font-medium text-gray-700 mb-2\",\n                    children: \"\\uC774\\uBA54\\uC77C\"\n                  }\n                ),\n                /* @__PURE__ */ jsx(\n                  \"input\",\n                  {\n                    type: \"email\",\n                    id: \"email\",\n                    name: \"email\",\n                    value: formData.email,\n                    onChange: handleInputChange,\n                    className: \"w-full px-4 py-3 border border-gray-200 rounded-xl focus:ring-2 focus:ring-[#005DFA] focus:border-transparent transition-all duration-200 bg-gray-50 focus:bg-white\",\n                    placeholder: \"example@email.com\"\n                  }\n                )\n              ]\n            }\n          ),\n          /* @__PURE__ */ jsxs(\n            motion.div,\n            {\n              initial: { x: -20, opacity: 0 },\n              animate: { x: 0, opacity: 1 },\n              transition: { delay: 0.4 },\n              children: [\n                /* @__PURE__ */ jsx(\n                  \"label\",\n                  {\n                    htmlFor: \"phone\",\n                    className: \"block text-sm font-medium text-gray-700 mb-2\",\n                    children: \"\\uC804\\uD654\\uBC88\\uD638\"\n                  }\n                ),\n                /* @__PURE__ */ jsx(\n                  \"input\",\n                  {\n                    type: \"tel\",\n                    id: \"phone\",\n                    name: \"phone\",\n                    value: formData.phone,\n                    onChange: handleInputChange,\n                    className: \"w-full px-4 py-3 border border-gray-200 rounded-xl focus:ring-2 focus:ring-[#005DFA] focus:border-transparent transition-all duration-200 bg-gray-50 focus:bg-white\",\n                    placeholder: \"010-1234-5678\"\n                  }\n                )\n              ]\n            }\n          ),\n          error && /* @__PURE__ */ jsx(\n            motion.div,\n            {\n              initial: { opacity: 0, scale: 0.95 },\n              animate: { opacity: 1, scale: 1 },\n              className: \"p-4 bg-red-50 border border-red-200 rounded-xl\",\n              children: /* @__PURE__ */ jsx(\"p\", { className: \"text-sm text-red-600 text-center\", children: error })\n            }\n          ),\n          /* @__PURE__ */ jsx(\n            motion.button,\n            {\n              initial: { y: 20, opacity: 0 },\n              animate: { y: 0, opacity: 1 },\n              transition: { delay: 0.5 },\n              type: \"submit\",\n              disabled: isSubmitting,\n              className: \"w-full px-6 py-4 bg-gradient-to-r from-blue-500 to-[#005DFA] text-white font-semibold rounded-xl shadow-lg hover:shadow-xl transform hover:scale-[1.02] transition-all duration-200 disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none\",\n              children: isSubmitting ? /* @__PURE__ */ jsxs(\"div\", { className: \"flex items-center justify-center\", children: [\n                /* @__PURE__ */ jsxs(\n                  \"svg\",\n                  {\n                    className: \"animate-spin -ml-1 mr-3 h-5 w-5 text-white\",\n                    xmlns: \"http://www.w3.org/2000/svg\",\n                    fill: \"none\",\n                    viewBox: \"0 0 24 24\",\n                    children: [\n                      /* @__PURE__ */ jsx(\n                        \"circle\",\n                        {\n                          className: \"opacity-25\",\n                          cx: \"12\",\n                          cy: \"12\",\n                          r: \"10\",\n                          stroke: \"currentColor\",\n                          strokeWidth: \"4\"\n                        }\n                      ),\n                      /* @__PURE__ */ jsx(\n                        \"path\",\n                        {\n                          className: \"opacity-75\",\n                          fill: \"currentColor\",\n                          d: \"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n                        }\n                      )\n                    ]\n                  }\n                ),\n                \"\\uB4F1\\uB85D \\uC911...\"\n              ] }) : \"\\uB300\\uAE30\\uBA85\\uB2E8 \\uB4F1\\uB85D\\uD558\\uAE30\"\n            }\n          )\n        ] }),\n        /* @__PURE__ */ jsx(\n          motion.div,\n          {\n            initial: { opacity: 0 },\n            animate: { opacity: 1 },\n            transition: { delay: 0.6 },\n            className: \"mt-6 text-center\",\n            children: /* @__PURE__ */ jsxs(\"p\", { className: \"text-xs text-gray-500 leading-relaxed\", children: [\n              \"\\uB4F1\\uB85D\\uD558\\uC2DC\\uBA74 \\uC0C8\\uB85C\\uC6B4 \\uC18C\\uC2DD\\uACFC \\uCD9C\\uC2DC \\uC54C\\uB9BC\\uC744\",\n              /* @__PURE__ */ jsx(\"br\", {}),\n              \"\\uAC00\\uC7A5 \\uBA3C\\uC800 \\uBC1B\\uC544\\uBCF4\\uC2E4 \\uC218 \\uC788\\uC2B5\\uB2C8\\uB2E4.\"\n            ] })\n          }\n        )\n      ]\n    }\n  );\n}\n\nexport {\n  Waitlist\n};\n","import {\n  Framer101\n} from \"./chunk-NLIN542D.mjs\";\nimport {\n  Reviews\n} from \"./chunk-QGPPRTJS.mjs\";\nimport {\n  VideoList\n} from \"./chunk-TEDLZ3D6.mjs\";\nimport \"./chunk-5VZGXROV.mjs\";\nimport {\n  HandleMobileRedirection\n} from \"./chunk-2LOYQZCH.mjs\";\nimport {\n  NeedPayment\n} from \"./chunk-RZ4MXR2C.mjs\";\nimport {\n  BootcampPointsDashboard\n} from \"./chunk-EWPOG4AQ.mjs\";\nimport \"./chunk-7STDMDMA.mjs\";\nimport \"./chunk-EJKG6TUT.mjs\";\nimport \"./chunk-6OBOGQ5Q.mjs\";\nimport {\n  ClassList\n} from \"./chunk-RP45HKMD.mjs\";\nimport {\n  Framer101_2\n} from \"./chunk-SVBYECQE.mjs\";\nimport {\n  Framer101_3\n} from \"./chunk-WTDJDUJN.mjs\";\nimport {\n  Init\n} from \"./chunk-AEFPPVC4.mjs\";\nimport \"./chunk-TAP4VNEF.mjs\";\nimport {\n  Login\n} from \"./chunk-77M2HTGP.mjs\";\nimport {\n  UserButton\n} from \"./chunk-O2UFHUW4.mjs\";\nimport \"./chunk-SDKSBXQ2.mjs\";\nimport {\n  CompareImage\n} from \"./chunk-M4QTGDPE.mjs\";\nimport {\n  Counter\n} from \"./chunk-T2GIHYPT.mjs\";\nimport {\n  MuxPlayer\n} from \"./chunk-AWVVVBQN.mjs\";\nimport \"./chunk-PO4BOMMR.mjs\";\nimport \"./chunk-4QCHTQPJ.mjs\";\nimport \"./chunk-7GXNFAUY.mjs\";\nimport \"./chunk-SIZSNBFW.mjs\";\nimport \"./chunk-77OKAR3P.mjs\";\nimport \"./chunk-OPROYRJW.mjs\";\nimport \"./chunk-IJ6VUMFQ.mjs\";\nimport {\n  Waitlist\n} from \"./chunk-C3VYQ5YF.mjs\";\nimport \"./chunk-QHMWAEE2.mjs\";\nimport \"./chunk-LBSMWCWB.mjs\";\nimport \"./chunk-JWK35I2R.mjs\";\nexport {\n  BootcampPointsDashboard,\n  ClassList,\n  CompareImage,\n  Counter,\n  Framer101,\n  Framer101_2,\n  Framer101_3,\n  HandleMobileRedirection,\n  Init,\n  Login,\n  MuxPlayer,\n  NeedPayment,\n  Reviews,\n  UserButton,\n  VideoList,\n  Waitlist\n};\n","// import * as m from \"https://framershop.s3.us-east-1.amazonaws.com/harbor.school-esm@0.0.18/index.mjs\"\n// import { useRealtimeComponent } from \"https://framershop.s3.us-east-1.amazonaws.com/harbor.school-esm@0.0.18/utils/live-reload/useRealtimeComponent.mjs\"\nimport{jsx as _jsx}from\"react/jsx-runtime\";import*as m from\"https://esm.ngrok.dev/index.mjs\";import{addPropertyControls}from\"framer\";/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export function Init(props){const Component=m.Init;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(Init,m.Init.propertyControls||{});/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export function UserButton(props){const Component=m.UserButton;return /*#__PURE__*/_jsx(Component,{...props});}/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export function Login(props){const Component=m.Login;return /*#__PURE__*/_jsx(Component,{...props});}/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight auto\n */export function CompareImage(props){const Component=m.CompareImage;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(CompareImage,m.CompareImage.propertyControls||{});/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export function Counter(props){const Component=m.Counter;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(Counter,m.Counter.propertyControls||{});/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight auto\n */export function ClassList(props){const Component=m.ClassList;return /*#__PURE__*/_jsx(Component,{...props});}/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight any\n */export function VideoList(props){const Component=m.VideoList;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(VideoList,m.VideoList.propertyControls||{});/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export function MuxPlayer(props){const Component=m.MuxPlayer;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(MuxPlayer,m.MuxPlayer.propertyControls||{});/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export function Reviews(props){const Component=m.Reviews;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(Reviews,m.Reviews.propertyControls||{});/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export function Framer101(props){const Component=m.Framer101;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(Framer101,m.Framer101.propertyControls||{});/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export function Framer101_2(props){const Component=m.Framer101_2;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(Framer101_2,m.Framer101_2.propertyControls||{});/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export function Framer101_3(props){const Component=m.Framer101_3;return /*#__PURE__*/_jsx(Component,{...props});}addPropertyControls(Framer101_3,m.Framer101_3.propertyControls||{});/**\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export function Waitlist(props){const Component=m.Waitlist;return /*#__PURE__*/_jsx(Component,{...props});}/**\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight auto\n */export function BootcampPointsDashboard(props){const Component=m.BootcampPointsDashboard;return /*#__PURE__*/_jsx(Component,{...props});}//------------------------------------------------ Payments\n/**\n * @framerSupportedLayoutWidth auto\n * @framerSupportedLayoutHeight auto\n */export function HandleMobileRedirection(props){const Component=m.HandleMobileRedirection;return /*#__PURE__*/_jsx(Component,{...props});}\nexport const __FramerMetadata__ = {\"exports\":{\"HandleMobileRedirection\":{\"type\":\"reactComponent\",\"name\":\"HandleMobileRedirection\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"Init\":{\"type\":\"reactComponent\",\"name\":\"Init\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\"}},\"BootcampPointsDashboard\":{\"type\":\"reactComponent\",\"name\":\"BootcampPointsDashboard\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"fixed\"}},\"Counter\":{\"type\":\"reactComponent\",\"name\":\"Counter\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"Reviews\":{\"type\":\"reactComponent\",\"name\":\"Reviews\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\"}},\"Framer101\":{\"type\":\"reactComponent\",\"name\":\"Framer101\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\"}},\"UserButton\":{\"type\":\"reactComponent\",\"name\":\"UserButton\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"auto\",\"framerSupportedLayoutHeight\":\"auto\"}},\"Framer101_3\":{\"type\":\"reactComponent\",\"name\":\"Framer101_3\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\"}},\"Framer101_2\":{\"type\":\"reactComponent\",\"name\":\"Framer101_2\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutHeight\":\"any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\"}},\"CompareImage\":{\"type\":\"reactComponent\",\"name\":\"CompareImage\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"fixed\"}},\"Waitlist\":{\"type\":\"reactComponent\",\"name\":\"Waitlist\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\"}},\"VideoList\":{\"type\":\"reactComponent\",\"name\":\"VideoList\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\"}},\"Login\":{\"type\":\"reactComponent\",\"name\":\"Login\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"auto\",\"framerSupportedLayoutWidth\":\"auto\"}},\"ClassList\":{\"type\":\"reactComponent\",\"name\":\"ClassList\",\"slots\":[],\"annotations\":{\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"auto\",\"framerContractVersion\":\"1\"}},\"MuxPlayer\":{\"type\":\"reactComponent\",\"name\":\"MuxPlayer\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutWidth\":\"any\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Components.map"],"mappings":"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SAAU,QACV,QAAS,oDACT,QAAS,CACP,0BACA,yBACA,iBACA,oBACA,sBACD,CACF,CACD,CACE,OAAQ,6BACR,MAAO,uBACP,YAAa,oEACb,aAAc,EACd,SAAU,MACV,QAAS,kDACT,QAAS,CACP,iCACA,kCACA,6BACA,uBACA,2BACD,CACF,CACD,CACE,OAAQ,8BACR,MAAO,iBACP,YAAa,yDACb,aAAc,EACd,SAAU,MACV,QAAS,0CACT,QAAS,CACP,oCACA,mCACA,0BACA,iCACA,uBACD,CACF,CACD,CACE,OAAQ,wBACR,MAAO,qBACP,YAAa,4DACb,aAAc,EACd,SAAU,QACV,QAAS,+CACT,QAAS,CACP,qBACA,2BACA,gBACA,uBACA,4BACD,CACF,CACD,CACE,OAAQ,6BACR,MAAO,uBACP,YAAa,oEACb,aAAc,EACd,SAAU,MACV,QAAS,mDACT,QAAS,CACP,uBACA,kBACA,yBACA,qBACA,yBACD,CACF,CACD,CACE,OAAQ,+BACR,MAAO,0BACP,YAAa,+EACb,aAAc,EACd,SAAU,MACV,QAAS,iDACT,QAAS,CACP,qBACA,uBACA,uBACA,2BACA,yBACA,sBACA,iCACD,CACF,CACF,CAwlBiF,KAAK,EAAM,IAA0B,EAC7G,UACA,CACE,UAAW,8BACX,KAAM,IAAU,EAChB,MAAO,CACL,gBAAiB,EAAO,MACxB,YAAa,EAAO,WACrB,CACD,SAAU,CACQ,EAAK,UAAW,CAAE,UAAW,+EAAgF,SAAU,CACrH,EAAK,MAAO,CAAE,SAAU,CACtB,EACd,IACA,CACE,UAAW,oBACX,MAAO,CAAE,MAAO,EAAO,WAAY,CACnC,SAAU,EAAK,OAChB,CACF,CACe,EAAI,KAAM,CAAE,UAAW,oEAAqE,SAAU,EAAK,MAAO,CAAC,CACpI,CAAE,CAAC,CACY,EACd,OACA,CACE,UAAW,iCACX,MAAO,CAAE,MAAO,EAAO,UAAW,CAClC,SAAU,CACR,EAAK,aACL,OACA,EAAK,SACN,CACF,CACF,CACF,CAAE,CAAC,CACY,EAAK,MAAO,CAAE,UAAW,4FAA6F,SAAU,CAC9H,EAAI,IAAK,CAAE,UAAW,O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"}