@readium/speech 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -4
- package/build/SpeechServer/chunkText.d.ts +6 -0
- package/build/SpeechServer/errors.d.ts +20 -0
- package/build/SpeechServer/index.d.ts +7 -0
- package/build/SpeechServer/selectFormat.d.ts +18 -0
- package/build/SpeechServer/speechServerEngine.d.ts +91 -0
- package/build/SpeechServer/speechServerEngineProvider.d.ts +16 -0
- package/build/SpeechServer/speechServerVoiceMapping.d.ts +3 -0
- package/build/SpeechServer/types.d.ts +56 -0
- package/build/WebSpeech/index.d.ts +0 -1
- package/build/WebSpeech/webSpeechEngineProvider.d.ts +1 -1
- package/build/engine.d.ts +1 -0
- package/build/index.cjs +28 -28
- package/build/index.d.ts +3 -0
- package/build/index.js +1866 -1256
- package/build/navigator.d.ts +1 -1
- package/build/providerRegistry.d.ts +19 -0
- package/build/{WebSpeech/TmpNavigator.d.ts → speechNavigator.d.ts} +6 -6
- package/build/voices/types.d.ts +13 -1
- package/package.json +1 -1
package/build/index.cjs
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const U=t=>{if(!t)return["",void 0];const e=t.replace(/_/g,"-");try{const r=new Intl.Locale(e);return[r.language.toLowerCase(),r.region?.toUpperCase()]}catch{const r=e.split("-");return[r[0].toLowerCase(),r[1]?.toUpperCase()]}},H={ar:{defaultRegion:"SA",availableRegions:["001","AE","AS","BH","DZ","EG","IQ","JO","KW","LB","LY","MA","OM","QA","SA","SY","TN","YE"],testUtterance:"مرحبًا، اسمي {name} وأنا صوت عربي."},bg:{defaultRegion:"BG",availableRegions:["BG"],testUtterance:"Здравейте, казвам се {name} и съм български глас."},bho:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"नमस्कार, हमार नाम {name} ह आ हम भोजपुरी आवाज हईं"},bn:{defaultRegion:"IN",availableRegions:["BD","IN"],testUtterance:"হ্যালো, আমার নাম {name} এবং আমি একজন বাংলা ভয়েস।"},ca:{defaultRegion:"ES",availableRegions:["ES"],testUtterance:"Hola, em dic {name} i sóc una veu catalana"},cmn:{defaultRegion:"CN",availableRegions:["CN","CTW","TW"],testUtterance:"你好,我的名字是 {name},我是普通话配音。"},cs:{defaultRegion:"CZ",availableRegions:["CZ"],testUtterance:"Dobrý den, jmenuji se {name} a jsem český hlas."},da:{defaultRegion:"DK",availableRegions:["DK"],testUtterance:"Hej, mit navn er {name} og jeg er en dansk stemme."},de:{defaultRegion:"DE",availableRegions:["AT","CH","DE"],testUtterance:"Hallo, mein Name ist {name} und ich bin eine deutsche Stimme."},el:{defaultRegion:"GR",availableRegions:["GR"],testUtterance:"Γεια σας, με λένε {name} και είμαι ελληνική φωνή."},en:{defaultRegion:"US",availableRegions:["AU","CA","GB","HK","IE","IN","KE","NG","NZ","PH","SG","TZ","US","ZA"],testUtterance:"Hello, my name is {name} and I am an English voice."},es:{defaultRegion:"ES",availableRegions:["AR","BO","CL","CO","CR","CU","DO","EC","ES","GQ","GT","HN","MX","NI","PA","PE","PR","PY","SV","US","UY","VE"],testUtterance:"Hola, mi nombre es {name} y soy una voz española."},eu:{defaultRegion:"ES",availableRegions:["ES"],testUtterance:"Kaixo, nire izena {name} da eta euskal ahotsa naiz."},fa:{defaultRegion:"IR",availableRegions:["IR"],testUtterance:"سلام اسم من {name} و صدای فارسی هستم"},fi:{defaultRegion:"FI",availableRegions:["FI"],testUtterance:"Hei, nimeni on {name} ja olen suomalainen ääni."},fr:{defaultRegion:"FR",availableRegions:["BE","CA","CH","FR"],testUtterance:"Bonjour, mon nom est {name} et je suis une voix française."},gl:{defaultRegion:"ES",availableRegions:["ES"],testUtterance:"Ola, chámome {name} e son unha voz galega."},he:{defaultRegion:"IL",availableRegions:["IL"],testUtterance:"שלום, שמי {name} ואני קול עברי."},hi:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"नमस्कार, मेरा नाम {name} है और मैं एक हिंदी आवाज़ हूँ।"},hr:{defaultRegion:"HR",availableRegions:["HR"],testUtterance:"Pozdrav, ja sam {name} i hrvatski sam glas."},hu:{defaultRegion:"HU",availableRegions:["HU"],testUtterance:"Helló, a nevem {name} és magyar hangú vagyok."},id:{defaultRegion:"ID",availableRegions:["ID"],testUtterance:"Halo, nama saya {name} dan saya suara Indonesia."},it:{defaultRegion:"IT",availableRegions:["IT"],testUtterance:"Ciao, mi chiamo {name} e sono una voce italiana."},ja:{defaultRegion:"JP",availableRegions:["JP"],testUtterance:"こんにちは。私の名前は{name}で、日本語の声を担当しています。"},kk:{defaultRegion:"KZ",availableRegions:["KZ"],testUtterance:"Sälemetsiz be, meniñ atım {name} jäne men qazaq dawısımın."},kn:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"ಹಲೋ, ನನ್ನ ಹೆಸರು {name} ಮತ್ತು ನಾನು ಕನ್ನಡ ಧ್ವನಿ."},ko:{defaultRegion:"KR",availableRegions:["KR"],testUtterance:"안녕하세요, 저는 {name}이고 한국어 음성입니다."},mr:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"नमस्कार, माझे नाव {name} आहे आणि मी एक मराठी आवाज आहे."},ms:{defaultRegion:"MY",availableRegions:["MY"],testUtterance:"Hello, nama saya {name} dan saya suara Melayu."},nb:{defaultRegion:"NO",availableRegions:["NO"],testUtterance:"Hei, jeg heter {name} og er en norsk stemme."},nl:{defaultRegion:"NL",availableRegions:["BE","NL"],testUtterance:"Hallo, mijn naam is {name} en ik ben een Nederlandse stem."},pl:{defaultRegion:"PL",availableRegions:["PL"],testUtterance:"Cześć, nazywam się {name} i mam polski głos."},pt:{defaultRegion:"BR",availableRegions:["BR","PT"],testUtterance:"Olá, o meu nome é {name} e sou uma voz portuguesa."},ro:{defaultRegion:"RO",availableRegions:["RO"],testUtterance:"Buna ziua, ma numesc {name} si sunt o voce romaneasca."},ru:{defaultRegion:"RU",availableRegions:["RU"],testUtterance:"Здравствуйте, меня зовут {name} и я русский голос."},sk:{defaultRegion:"SK",availableRegions:["SK"],testUtterance:"Dobrý deň, volám sa {name} a som slovenský hlas."},sl:{defaultRegion:"SI",availableRegions:["SI"],testUtterance:"Pozdravljeni, moje ime je {name} in sem slovenski glas."},sv:{defaultRegion:"SE",availableRegions:["SE"],testUtterance:"Hej, jag heter {name} och jag är en svensk röst."},ta:{defaultRegion:"IN",availableRegions:["IN","LK","MY","SG"],testUtterance:"வணக்கம், என் பெயர் {name} மற்றும் நான் ஒரு தமிழ் குரல்"},te:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"హలో, నా పేరు {name} మరియు నేను తెలుగు వాణిని."},th:{defaultRegion:"TH",availableRegions:["TH"],testUtterance:"สวัสดีค่ะ ฉันชื่อ {name} และฉันเป็นคนมีเสียงภาษาไทย"},tr:{defaultRegion:"TR",availableRegions:["TR"],testUtterance:"Merhaba, adım {name} ve Türk sesiyim."},uk:{defaultRegion:"UA",availableRegions:["UA"],testUtterance:"Здравствуйте, меня зовут {name} и я украинский голос."},vi:{defaultRegion:"VN",availableRegions:["VN"],testUtterance:"Xin chào, tôi tên là {name} và tôi là giọng nói tiếng Việt."},wuu:{defaultRegion:"CN",availableRegions:["CN"],testUtterance:"你好,我的名字是 {name},我是吴语配音。"},yue:{defaultRegion:"HK",availableRegions:["HK"],testUtterance:"你好,我叫 {name},係越中文聲。"}},Je=new Map,Dn=Object.assign({"../../json/ar.json":()=>Promise.resolve().then(()=>require("./ar-BYWkyZgW.cjs")),"../../json/bg.json":()=>Promise.resolve().then(()=>require("./bg-D7xe9YTl.cjs")),"../../json/bho.json":()=>Promise.resolve().then(()=>require("./bho-UB6aO8oz.cjs")),"../../json/bn.json":()=>Promise.resolve().then(()=>require("./bn-boRZ2pl5.cjs")),"../../json/ca.json":()=>Promise.resolve().then(()=>require("./ca-DkC8kSJ8.cjs")),"../../json/cmn.json":()=>Promise.resolve().then(()=>require("./cmn-BsNLjyA4.cjs")),"../../json/cs.json":()=>Promise.resolve().then(()=>require("./cs-p05r08p7.cjs")),"../../json/da.json":()=>Promise.resolve().then(()=>require("./da-crefCup9.cjs")),"../../json/de.json":()=>Promise.resolve().then(()=>require("./de-xoW-RuhZ.cjs")),"../../json/el.json":()=>Promise.resolve().then(()=>require("./el-C025sTug.cjs")),"../../json/en.json":()=>Promise.resolve().then(()=>require("./en-CbfmLXbR.cjs")),"../../json/es.json":()=>Promise.resolve().then(()=>require("./es-DW7IPf8I.cjs")),"../../json/eu.json":()=>Promise.resolve().then(()=>require("./eu-uq15ZgwW.cjs")),"../../json/fa.json":()=>Promise.resolve().then(()=>require("./fa-CHOnwiFr.cjs")),"../../json/fi.json":()=>Promise.resolve().then(()=>require("./fi-Bxlno6Zi.cjs")),"../../json/fr.json":()=>Promise.resolve().then(()=>require("./fr-yAth5-FC.cjs")),"../../json/gl.json":()=>Promise.resolve().then(()=>require("./gl-BEgzCAO0.cjs")),"../../json/he.json":()=>Promise.resolve().then(()=>require("./he-B-CTHJPL.cjs")),"../../json/hi.json":()=>Promise.resolve().then(()=>require("./hi-C0yUjV1-.cjs")),"../../json/hr.json":()=>Promise.resolve().then(()=>require("./hr-CZvFOcdo.cjs")),"../../json/hu.json":()=>Promise.resolve().then(()=>require("./hu-_2PInItj.cjs")),"../../json/id.json":()=>Promise.resolve().then(()=>require("./id-BROcb7-t.cjs")),"../../json/it.json":()=>Promise.resolve().then(()=>require("./it-Bmc8Ycff.cjs")),"../../json/ja.json":()=>Promise.resolve().then(()=>require("./ja-B8t6WOeg.cjs")),"../../json/kk.json":()=>Promise.resolve().then(()=>require("./kk-DskO1CW8.cjs")),"../../json/kn.json":()=>Promise.resolve().then(()=>require("./kn-Cy3NH6na.cjs")),"../../json/ko.json":()=>Promise.resolve().then(()=>require("./ko-CZdQzppZ.cjs")),"../../json/mr.json":()=>Promise.resolve().then(()=>require("./mr-9hGqBYlV.cjs")),"../../json/ms.json":()=>Promise.resolve().then(()=>require("./ms-DzpBxNFZ.cjs")),"../../json/nb.json":()=>Promise.resolve().then(()=>require("./nb-BQfw9EEH.cjs")),"../../json/nl.json":()=>Promise.resolve().then(()=>require("./nl-CyM0R4Gr.cjs")),"../../json/pl.json":()=>Promise.resolve().then(()=>require("./pl-Da8XOMa1.cjs")),"../../json/pt.json":()=>Promise.resolve().then(()=>require("./pt-tubyvYaM.cjs")),"../../json/ro.json":()=>Promise.resolve().then(()=>require("./ro-C-rXDfuM.cjs")),"../../json/ru.json":()=>Promise.resolve().then(()=>require("./ru-DJocRaDd.cjs")),"../../json/sk.json":()=>Promise.resolve().then(()=>require("./sk-BvpojIXp.cjs")),"../../json/sl.json":()=>Promise.resolve().then(()=>require("./sl-D0X3JKvQ.cjs")),"../../json/sv.json":()=>Promise.resolve().then(()=>require("./sv-4lEgrHda.cjs")),"../../json/ta.json":()=>Promise.resolve().then(()=>require("./ta-CyeVPdIs.cjs")),"../../json/te.json":()=>Promise.resolve().then(()=>require("./te-DqWIZZxL.cjs")),"../../json/th.json":()=>Promise.resolve().then(()=>require("./th-BcoSVZAp.cjs")),"../../json/tr.json":()=>Promise.resolve().then(()=>require("./tr-BuafNhfw.cjs")),"../../json/uk.json":()=>Promise.resolve().then(()=>require("./uk-DkXNxnD9.cjs")),"../../json/vi.json":()=>Promise.resolve().then(()=>require("./vi-Ct2avSE6.cjs")),"../../json/wuu.json":()=>Promise.resolve().then(()=>require("./wuu-DnwGQ6c-.cjs")),"../../json/yue.json":()=>Promise.resolve().then(()=>require("./yue-j9Y48sR-.cjs"))});async function Bn(t){try{const e=t.split("-")[0],r=Dn[`../../json/${e}.json`];if(!r)throw new Error(`No voice data found for language: ${t}`);const i=(await r()).default;return{...i,voices:i.voices.map(zn)}}catch(e){return console.warn(`Failed to load voice data for ${t}:`,e),{language:t,defaultRegion:"",testUtterance:"",voices:[]}}}function Vt(t){return Je.has(t)||Je.set(t,Bn(t)),Je.get(t)}const jn=["veryLow","low","normal","high","veryHigh"],Un=["android","apple"],zn=t=>({...t,quality:t.quality?.filter(e=>jn.includes(e)),localizedName:t.localizedName&&Un.includes(t.localizedName)?t.localizedName:void 0}),se={cmn:"cmn","cmn-CN":"cmn-CN","cmn-TW":"cmn-TW",zh:"cmn","zh-CN":"cmn-CN","zh-TW":"cmn-TW",yue:"yue","yue-HK":"yue-HK","zh-HK":"yue-HK",wuu:"wuu","wuu-CN":"wuu-CN"},D=t=>{if(!t)return"";let e=t.toLowerCase().replace(/_/g,"-");if(/\w{2,3}-\w{2,3}/.test(e)){const[r,n]=e.split("-");e=`${r.toLowerCase()}-${n.toUpperCase()}`}return se[e]||e},ft=async t=>{if(!t)return[];try{const e=D(t);try{const n=await Vt(e);if(n?.voices?.length)return n.voices}catch(n){console.warn(`Failed to load voices for ${e}:`,n)}const[r]=U(e);if(r!==e)try{const n=await Vt(r);if(n?.voices?.length)return n.voices}catch(n){console.warn(`Failed to load voices for base language ${r}:`,n)}return[]}catch(e){return console.error(`Error in getVoices for ${t}:`,e),[]}},Wt=t=>{if(!t)return"";try{const e=D(t),r=H[e];if(r?.testUtterance)return r.testUtterance;if(e in se){const i=se[e];if(i&&H[i]?.testUtterance)return H[i].testUtterance}const[n]=U(e);return n!==e&&H[n]?.testUtterance?H[n].testUtterance:""}catch(e){return console.error(`Error in getTestUtterance for ${t}:`,e),""}},je=t=>{if(!t)return"";try{const e=D(t),r=H[e];if(r?.defaultRegion)return`${e}-${r.defaultRegion}`;if(e in se){const i=se[e];if(i){const s=H[i];if(s?.defaultRegion)return`${i}-${s.defaultRegion}`}}const[n]=U(e);if(n!==e){const i=H[n];if(i?.defaultRegion)return`${n}-${i.defaultRegion}`}return""}catch(e){return console.error(`Failed to get default region for ${t}:`,e),""}},Gt=t=>{if(!t?.length)return[];const e=new Set,r=new Map,n=new Map;for(const[i,s]of t.entries()){if(!s)continue;const a=D(s),[o,c]=U(a);c&&(e.add(c),n.has(c)||n.set(c,i)),r.has(o)||r.set(o,new Set),c&&r.get(o).add(c)}return Array.from(r.entries()).map(([i,s])=>{const a=new Set(H[i]?.availableRegions||[]),o=Array.from(s),c=Array.from(e).filter(h=>a.has(h)&&!o.includes(h)),l=Array.from(new Set([...o,...c])).sort((h,d)=>{const g=n.get(h)??Number.MAX_SAFE_INTEGER,f=n.get(d)??Number.MAX_SAFE_INTEGER;return g-f});if(l.length===0){const h=je(i),[,d]=U(h);d&&l.push(d)}return{baseLang:i,regions:l}})};async function Ne(t){const e=new Map;for(const n of t){if(n.source!=="json")continue;const[i]=U(n.language);e.has(i)||e.set(i,[]),e.get(i).push(n)}const r=new Map;for(const[n,i]of e.entries()){const s=new Map,a=await ft(n),o=new Map;a.forEach((c,l)=>{o.set(c.name.toLowerCase(),l),c.altNames?.forEach(h=>{o.set(h.toLowerCase(),l)})});for(const c of i){const l=c.name.toLowerCase(),h=o.get(l);h!==void 0&&s.set(c.name,h)}s.size>0&&r.set(n,s)}return r}const Hn=[{name:"Albert",nativeID:["com.apple.speech.synthesis.voice.Albert"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bad News",nativeID:["com.apple.speech.synthesis.voice.BadNews"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Mauvaises nouvelles","Malas noticias","Brutte notizie"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bahh",nativeID:["com.apple.speech.synthesis.voice.Bahh"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bells",nativeID:["com.apple.speech.synthesis.voice.Bells"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Cloches","Campanas","Campane"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Boing",nativeID:["com.apple.speech.synthesis.voice.Boing"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bubbles",nativeID:["com.apple.speech.synthesis.voice.Bubbles"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Bulles","Burbujas","Bollicine"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Cellos",nativeID:["com.apple.speech.synthesis.voice.Cellos"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Violoncelles","Violonchelos","Violoncelli"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Good News",nativeID:["com.apple.speech.synthesis.voice.GoodNews"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Bonnes nouvelles","Buenas noticias","Buone notizie"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Jester",nativeID:["com.apple.speech.synthesis.voice.Hysterical"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Bouffon","Bufón","Giullare"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Organ",nativeID:["com.apple.speech.synthesis.voice.Organ"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Orgue","Órgano","Organo"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Superstar",nativeID:["com.apple.speech.synthesis.voice.Princess"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Superestrella"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Trinoids",nativeID:["com.apple.speech.synthesis.voice.Trinoids"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Trinoïdes"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Whisper",nativeID:["com.apple.speech.synthesis.voice.Whisper"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Murmure","Susurro","Sussurro"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Wobble",nativeID:["com.apple.speech.synthesis.voice.Deranged"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Zarvox",nativeID:["com.apple.speech.synthesis.voice.Zarvox"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0}],_n={voices:Hn},Fn=[{name:"Eddy",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Flo",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Grandma",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Grandpa",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Jacques",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Reed",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Rocko",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Sandy",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Shelley",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Fred",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Junior",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Kathy",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Ralph",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"eSpeak Arabic",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ar",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Bulgarian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"bg",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Bengali",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"bn",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Catalan",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ca",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Chinese (Mandarin, latin as English)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"cmn",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Czech",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"cs",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Danish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"da",os:["ChromeOS"],preloaded:!0},{name:"eSpeak German",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"de",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Greek",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"el",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Spanish (Spain)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"es",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Estonian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"et",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Finnish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"fi",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Gujarati",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"gu",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Croatian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"hr",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Hungarian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"hu",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Indonesian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"id",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Italian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"it",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Kannada",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"kn",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Korean",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ko",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Lithuanian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"lt",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Latvian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"lv",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Malayalm",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ml",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Marathi",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"mr",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Malay",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ms",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Norwegian Bokmål",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"nb",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Polish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"pl",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Portuguese (Brazil)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"pt-br",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Romanian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ro",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Russian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ru",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Slovak",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sk",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Slovenian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sl",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Serbian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sv",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Swedish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sv",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Swahili",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sw",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Tamil",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ta",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Telugu",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"te",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Turkish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"tr",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Vietnamese (Northern)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"vi",os:["ChromeOS"],preloaded:!0}],Mn={voices:Fn},Vn=_n,Wn=Mn,pt=(t,e)=>Vn.voices.some(r=>t.includes(r.name)||e&&r.nativeID?.some(n=>e.includes(n))||r.altNames?.some(n=>t.includes(n))),mt=(t,e)=>Wn.voices.some(r=>t.includes(r.name))||e==="veryLow",Kt=t=>t?.length?t.filter(e=>!(e.isNovelty||pt(e.name,e.voiceURI))):[],Jt=t=>t?.length?t.filter(e=>!mt(e.name,e.quality)):[],Gn={ar:{normal:"محسن",high:"استثنائي"},ca:{normal:"millorada",high:"prèmium"},"cmn-CN":{normal:"优化音质",high:"高音质"},"cmn-TW":{normal:"增強音質",high:"高音質"},cs:{normal:"vylepšená verze",high:"prémiový"},da:{normal:"forbedret",high:"høj kvalitet"},de:{normal:"erweitert",high:"premium"},el:{normal:"βελτιωμένη",high:"υψηλής ποιότητας"},en:{normal:"Enhanced",high:"Premium"},es:{normal:"mejorada",high:"premium"},fi:{normal:"parannettu",high:"korkealaatuinen"},fr:{normal:"premium",high:"de qualité"},he:{normal:"משופר",high:"פרימיום"},hi:{normal:"बेहतर",high:"प्रीमियम"},hr:{normal:"poboljšani",high:"vrhunski"},hu:{normal:"továbbfejlesztett",high:"prémium"},id:{normal:"Ditingkatkan",high:"Premium"},it:{normal:"ottimizzata",high:"premium"},ja:{normal:"拡張",high:"プレミアム"},ko:{normal:"고품질",high:"프리미엄"},ms:{normal:"Dipertingkat",high:"Premium"},nb:{normal:"forbedret",high:"premium"},nl:{normal:"verbeterd",high:"premium"},pl:{normal:"rozszerzony",high:"premium"},pt:{normal:"melhorada",high:"premium"},ro:{normal:"îmbunătățită",high:"premium"},ru:{normal:"улучшенный",high:"высшее качество"},sk:{normal:"vylepšený",high:"prémiový"},sl:{normal:"izboljšano",high:"prvovrsten"},sv:{normal:"förbättrad",high:"premium"},th:{normal:"คุณภาพสูง",high:"คุณภาพสูง"},tr:{normal:"Geliştirilmiş",high:"Yüksek Kaliteli"},uk:{normal:"вдосконалений",high:"високої якості"},vi:{normal:"Nâng cao",high:"Cao cấp"}},Kn={quality:Gn},yt={apple:Kn.quality},Jn=(t,e,r)=>{if(!t)return;const n=Array.isArray(r)?r:r?[r]:[];for(const i of n)if(i&&yt[i]){const s=yt[i],a=U(e)[0],o=s[e]||s[a];if(o){const c=t.toLowerCase(),{normal:l,high:h}=o;if(h&&c.includes(h.toLowerCase()))return"high";if(l&&c.includes(l.toLowerCase()))return"normal"}}},Qn=(t,e)=>{const r=yt[e];if(r)for(const[n,{high:i,normal:s}]of Object.entries(r)){const a=i&&t.some(c=>c.includes(i)),o=s&&t.some(c=>c.includes(s));if(a&&o)return n}},Xn={low:{values:["super-compact","compact"],quality:"low"},normal:{values:["enhanced"],quality:"normal"},high:{values:["premium"],quality:"high"}},Qt=t=>{if(!t)return;const r=t.toLowerCase().split(/[._-]/);for(const n of Object.values(Xn))if(n.values.some(i=>r.includes(i)))return n.quality};function Zn(t,e){if(t.name===t.originalName)return t;if(e.name===e.originalName)return e;const r=[t.originalName,...t.altNames||[]],n=[e.originalName,...e.altNames||[]],i=r.findIndex(a=>n.includes(a)),s=n.findIndex(a=>r.includes(a));return i===-1&&s===-1||i!==-1&&(s===-1||i<=s)?t:e}function Yn(t,e){if(!t.altNames&&!e.altNames)return!1;const r=t.originalName,n=e.originalName,i=t.altNames||[],s=e.altNames||[];return s.includes(r)||i.includes(n)?!0:i.filter(o=>s.includes(o)).length>0}class O{static instance;static initializationPromise=null;systemLocale;voices=[];browserVoices=[];isInitialized=!1;scopedLanguages=null;broadenPromises=new Map;constructor(){if(typeof window>"u"||!window.speechSynthesis)throw new Error("Web Speech API is not available in this environment");this.systemLocale=navigator.languages?.[0]?.split("-")[0]||"en"}static async initialize(e){if(O.instance?.isInitialized){const r=O.instance;return e?.languages&&e.languages.length>0&&await r.broadenLanguages(e.languages),r}return O.initializationPromise||(O.initializationPromise=(async()=>{try{const r=new O;O.instance=r,r.browserVoices=await r.getBrowserVoices(e?.maxTimeout,e?.interval),r.updateSystemLocale(r.browserVoices);let n=r.browserVoices;return e?.languages&&e.languages.length>0?(n=r.filterBrowserVoicesByLanguages(r.browserVoices,e.languages),r.scopedLanguages=O.toBaseLangSet(e.languages)):r.scopedLanguages=null,r.voices=await r.parseToReadiumSpeechVoices(n),r.isInitialized=!0,r}catch(r){throw O.initializationPromise=null,console.error("Failed to initialize WebSpeechVoiceManager:",r),r}})()),O.initializationPromise}filterBrowserVoicesByLanguages(e,r){if(!r?.length)return e;const n=O.toBaseLangSet(r);return e.filter(i=>{if(!i?.lang)return!1;const s=D(i.lang),[a]=O.extractLangRegionFromBCP47(s);return n.has(a)})}static toBaseLangSet(e){return new Set(e.map(r=>{const n=D(r),[i]=O.extractLangRegionFromBCP47(n);return i}))}async broadenLanguages(e){if(this.scopedLanguages===null)return;const n=[...O.toBaseLangSet(e)].filter(o=>!this.scopedLanguages.has(o));if(n.length===0)return;const i=n.filter(o=>this.broadenPromises.has(o)),s=n.filter(o=>!this.broadenPromises.has(o));let a;s.length>0&&(a=(async()=>{const o=this.filterBrowserVoicesByLanguages(this.browserVoices,s),c=await this.parseToReadiumSpeechVoices(o);this.voices=[...this.voices,...c],s.forEach(l=>this.scopedLanguages.add(l)),s.forEach(l=>this.broadenPromises.delete(l))})(),s.forEach(o=>this.broadenPromises.set(o,a))),await Promise.all([...a?[a]:[],...i.map(o=>this.broadenPromises.get(o))])}static extractLangRegionFromBCP47(e){return U(e)}static getLanguageDisplayName(e,r){try{return new Intl.DisplayNames(r?[r]:[],{type:"language",languageDisplay:"standard"}).of(e)||e.toUpperCase()}catch{return e.toUpperCase()}}cleanVoiceName(e){return e?e.replace(/\s*\([^)]*\)/g,"").replace(/[^\p{L}\p{N}\s-]/gu,"").replace(/\s+/g," ").trim():""}normalizeVoiceName(e){return this.cleanVoiceName(e.toLowerCase())}countVoiceDuplicates(e){const r=new Map;for(const n of e){if(!n?.name||!n?.lang)continue;const i=`${n.lang.toLowerCase()}_${this.normalizeVoiceName(n.name)}`;r.set(i,(r.get(i)||0)+1)}return r}updateSystemLocale(e){if(!e?.length)return;const r=e.map(i=>i.name),n=Qn(r,"apple");n&&(this.systemLocale=n)}inferVoiceQuality(e,r,n){const i=e.voiceURI?Qt(e.voiceURI):void 0;if(i)return i;if(r?.nativeID&&Array.isArray(r.nativeID))for(const s of r.nativeID){const a=Qt(s);if(a)return a}if(r?.localizedName&&e.voiceURI&&e.lang){const s=Jn(e.voiceURI,this.systemLocale,r.localizedName);if(s)return s}if(r?.quality&&r.quality.length>0){const s=Math.min(n-1,r.quality.length-1),a=r.quality[s];if(a)return a}return null}findMatchingJsonVoice(e,r){return e.find(n=>this.normalizeVoiceName(n.name)===r||n.altNames?.some(i=>this.normalizeVoiceName(i)===r))}removeDuplicates(e){const r=new Map;for(const n of e){const i=`${n.language.toLowerCase()}_${this.normalizeVoiceName(n.name)}`,s=r.get(i);if(!s)r.set(i,n);else if(Yn(n,s)){const a=Zn(n,s);r.set(i,a)}else{const a=O.getQualityValue(s.quality);O.getQualityValue(n.quality)>=a&&r.set(i,n)}}return Array.from(r.values())}getTestUtterance(e){if(!e)return"";const r=Wt(e);if(r)return r;const[n]=O.extractLangRegionFromBCP47(e);if(n&&n!==e){const i=Wt(n);if(i)return i}return""}getVoices(e={}){if(!this.isInitialized)throw new Error("WebSpeechVoiceManager not initialized. Call initialize() first.");return this.filterVoices(e,[...this.voices])}getLanguages(e,r,n){if(!n&&!this.isInitialized)throw new Error("WebSpeechVoiceManager not initialized. Call initialize() first.");const i=n??this.voices,s=r?this.filterVoices(r,i):i,a=[],o=new Set;for(const c of s){const h=D(c.language).split("-")[0];if(!o.has(h)){const d=O.getLanguageDisplayName(h,e),g=s.filter(f=>D(f.language).split("-")[0]===h).length;a.push({code:h,label:d,count:g}),o.add(h)}}return n?a:a.sort((c,l)=>c.label.localeCompare(l.label))}getRegions(e,r,n){if(!n&&!this.isInitialized)throw new Error("WebSpeechVoiceManager not initialized. Call initialize() first.");const i=n??this.voices,s=r?this.filterVoices(r,i):i,a=[],o=new Set,c=new Map;for(const l of s){const[,h]=O.extractLangRegionFromBCP47(l.language);h&&c.set(h,(c.get(h)||0)+1)}for(const l of s){const[,h]=O.extractLangRegionFromBCP47(l.language);if(h&&!o.has(h)){let d=l.language;try{const g=e||navigator.language;d=new Intl.DisplayNames([g],{type:"region"}).of(h)||l.language}catch(g){console.warn(`Failed to get display name for region ${h}`,g)}a.push({code:h,label:d,count:c.get(h)||0}),o.add(h)}}return n?a:a.sort((l,h)=>l.label.localeCompare(h.label))}async getDefaultVoice(e,r){if(!e)return null;const n=Array.isArray(e)?e:[e];let i=r||this.getVoices({languages:n});return i.length?(i=await this.sortVoicesByRegions(n,i),i[0]):null}getBrowserVoices(e=1e4,r=10){const n=()=>window.speechSynthesis?.getVoices()||[];if(!window.speechSynthesis)return Promise.resolve([]);const i=n();return Array.isArray(i)&&i.length?Promise.resolve(i):new Promise((s,a)=>{let o=Math.floor(e/r),c=!1;const l=()=>{if(c)return;c=!0;const h=()=>{if(o<1)return s([]);--o;const d=n();if(Array.isArray(d)&&d.length)return s(d);setTimeout(h,r)};setTimeout(h,r)};window.speechSynthesis.onvoiceschanged!==void 0?window.speechSynthesis.onvoiceschanged=()=>{const h=n();Array.isArray(h)&&h.length?s(h):l()}:l(),setTimeout(()=>s([]),e)})}async parseToReadiumSpeechVoices(e){const r=this.countVoiceDuplicates(e);return await Promise.all(e.filter(i=>i?.name&&i?.lang).map(async i=>{const s=D(i.lang),[a]=O.extractLangRegionFromBCP47(s),o=this.normalizeVoiceName(i.name),c=`${i.lang.toLowerCase()}_${o}`,l=r.get(c)||1;let h=await ft(s);(!h||h.length===0)&&(h=await ft(a));const d=this.findMatchingJsonVoice(h,o),g=this.inferVoiceQuality(i,d,l);return d?{...d,label:d.label??this.cleanVoiceName(i.name),source:"json",originalName:i.name,language:d.language??s,voiceURI:i.voiceURI,quality:g,isDefault:i.default||!1,offlineAvailability:i.localService||!1,isNovelty:pt(i.name,i.voiceURI),isLowQuality:mt(i.name,g)}:{source:"browser",label:this.cleanVoiceName(i.name),name:i.name,originalName:i.name,language:s,voiceURI:i.voiceURI,quality:g,isDefault:i.default||!1,offlineAvailability:i.localService||!1,isNovelty:pt(i.name,i.voiceURI),isLowQuality:mt(i.name,g)}}))}convertToSpeechSynthesisVoice(e){if(e)return this.browserVoices.find(r=>r.voiceURI===e.voiceURI||r.name===e.originalName||this.normalizeVoiceName(r.name)===this.normalizeVoiceName(e.name))}filterVoices(e,r){let n=r?[...r]:[...this.voices];const i={excludeNovelty:!0,excludeVeryLowQuality:!0,removeDuplicates:!0,...e};if(i.languages){const s=Array.isArray(i.languages)?i.languages:[i.languages];n=n.filter(a=>s.some(o=>{const c=o.toLowerCase(),l=a.language?.toLowerCase(),h=a.altLanguage?.toLowerCase();if(l===c||h===c)return!0;const[d]=c.split("-");return l&&l.startsWith(d)||h&&h.startsWith(d)}))}if(i.source&&(n=n.filter(s=>s.source===i.source)),i.gender&&(n=n.filter(s=>s.gender===i.gender)),i.quality){const s=Array.isArray(i.quality)?i.quality:[i.quality];n=n.filter(a=>a.quality&&s.includes(a.quality))}return i.offlineOnly&&(n=n.filter(s=>s.offlineAvailability===!0)),i.provider&&(n=n.filter(s=>s.provider?.toLowerCase()===i.provider?.toLowerCase())),i.excludeNovelty&&(n=Kt(n)),i.excludeVeryLowQuality&&(n=Jt(n)),i.removeDuplicates&&(n=this.removeDuplicates(n)),n}filterOutNoveltyVoices(e){const r=e??this.voices;return Kt(r)}filterOutVeryLowQualityVoices(e){const r=e??this.voices;return Jt(r)}static getQualityValue(e){return e?{veryLow:1,low:2,normal:3,high:4,veryHigh:5}[e]??0:0}static sortByQuality(e,r,n,i){const s=O.getQualityValue(e.quality),a=O.getQualityValue(r.quality);if(n&&i&&e.source==="json"&&r.source==="json"){const o=n.get(i);if(o){const c=o.get(e.name),l=o.get(r.name);if(c!==void 0&&l!==void 0)return c-l}}return a!==s?a-s:e.name.localeCompare(r.name)}async sortVoicesByQuality(e){const r=e||this.voices;if(!r?.length)return[];const n=await Ne(r);return[...r].sort((i,s)=>O.sortByQuality(i,s,n))}static groupVoicesByLanguage(e,r){const n=new Map(r.map(a=>[a.baseLang,a])),i=new Map,s=[];for(const a of e){const[o]=O.extractLangRegionFromBCP47(a.language);n.get(o)?(i.has(o)||i.set(o,[]),i.get(o).push(a)):s.push(a)}return{voicesByLang:i,otherLangVoices:s}}static async sortByDefaultRegion(e,r){const n=await Ne(e),i=je(r);e.sort((s,a)=>{const[,o]=O.extractLangRegionFromBCP47(s.language),[,c]=O.extractLangRegionFromBCP47(a.language),l=i&&o===i.split("-")[1],h=i&&c===i.split("-")[1];return l&&!h?-1:!l&&h?1:O.sortByQuality(s,a,n,r)})}static async sortAlphabetically(e){const r=await Ne(e);e.sort((n,i)=>{const[s]=O.extractLangRegionFromBCP47(n.language),[a]=O.extractLangRegionFromBCP47(i.language),o=O.getLanguageDisplayName(s).toLowerCase(),c=O.getLanguageDisplayName(a).toLowerCase(),l=o.localeCompare(c);if(l!==0)return l;if(s===a){const h=je(s),[,d]=O.extractLangRegionFromBCP47(n.language),[,g]=O.extractLangRegionFromBCP47(i.language),f=h&&d===h.split("-")[1],y=h&&g===h.split("-")[1];if(f&&!y)return-1;if(!f&&y)return 1;if(d&&g){const p=d.localeCompare(g);if(p!==0)return p}return d&&!g?-1:!d&&g?1:O.sortByQuality(n,i,r,s)}return O.sortByQuality(n,i,r,s)})}async sortVoicesByLanguages(e,r){const n=r||this.voices;if(!n?.length)return[];if(!e?.length){const c=[...n];return await O.sortAlphabetically(c),c}const i=Gt(e),{voicesByLang:s,otherLangVoices:a}=O.groupVoicesByLanguage(n,i),o=[];for(const c of i){const l=s.get(c.baseLang);l&&(await O.sortByDefaultRegion(l,c.baseLang),o.push(...l))}return await O.sortAlphabetically(a),o.push(...a),o}static async sortByPreferredRegion(e,r){const n=await Ne(e);e.sort((i,s)=>{const[,a]=O.extractLangRegionFromBCP47(i.language),[,o]=O.extractLangRegionFromBCP47(s.language),c=a&&r.regions.includes(a),l=o&&r.regions.includes(o);if(c&&l){const y=r.regions.indexOf(a),p=r.regions.indexOf(o);return y===p?O.sortByQuality(i,s,n,r.baseLang):y-p}if(c)return-1;if(l)return 1;const h=je(r.baseLang),[,d]=O.extractLangRegionFromBCP47(h),g=a===d,f=o===d;if(g&&!f)return-1;if(!g&&f)return 1;if(a&&o){const y=a.localeCompare(o);return y!==0?y:O.sortByQuality(i,s,n,r.baseLang)}return a?-1:o?1:O.sortByQuality(i,s,n,r.baseLang)})}async sortVoicesByRegions(e,r){const n=r||this.voices;if(!n?.length)return[];const i=Gt(e||[]),{voicesByLang:s,otherLangVoices:a}=O.groupVoicesByLanguage(n,i),o=[];for(const c of i){const l=s.get(c.baseLang);l&&(await O.sortByPreferredRegion(l,c),o.push(...l))}return await O.sortAlphabetically(a),o.push(...a),o}groupVoices(e,r){const n={},i=r||this.voices;for(const s of i){let a="Unknown";switch(e){case"languages":a=O.extractLangRegionFromBCP47(s.language)[0];break;case"gender":a=s.gender||"unknown";break;case"quality":a=s.quality||"unknown";break;case"region":const[,o]=O.extractLangRegionFromBCP47(s.language);a=o||"unknown";break}n[a]||(n[a]=[]),n[a].push(s)}return n}}const ei=["webKit","moz","ms","o"],ti=["boundary","end","error","mark","pause","resume","start"],ri=t=>`${t.charAt(0).toUpperCase()}${t.slice(1)}`,fe=(t={},e)=>Object.hasOwnProperty.call(t,e)||e in t||!!t[e],ni=t=>typeof window<"u"&&t in window,ii=t=>{const e=ri(t),r=ei.map(i=>`${i}${e}`),n=[t,e].concat(r).find(ni);return n&&typeof window<"u"?window[n]:void 0},si=()=>{const t={};["speechSynthesis","speechSynthesisUtterance","speechSynthesisVoice","speechSynthesisEvent","speechSynthesisErrorEvent"].forEach(r=>{t[r]=ii(r)}),t.onvoiceschanged=fe(t.speechSynthesis,"onvoiceschanged"),t.speechSynthesisSpeaking=fe(t.speechSynthesis,"speaking"),t.speechSynthesisPaused=fe(t.speechSynthesis,"paused");const e=t.speechSynthesisUtterance?fe(t.speechSynthesisUtterance,"prototype"):!1;return ti.forEach(r=>{const n=`on${r}`;t[n]=e&&t.speechSynthesisUtterance?fe(t.speechSynthesisUtterance.prototype,n):!1}),t},oi=()=>{const e=typeof window<"u"&&(window.navigator||{}).userAgent||"",r=()=>/android/i.test(e),n=()=>/kaios/i.test(e),i=()=>typeof window.InstallTrigger<"u"?!0:/firefox/i.test(e),s=()=>typeof window.GestureEvent<"u"||/safari/i.test(e);return{isAndroid:r(),isFirefox:i()||n(),isSafari:s(),isKaiOS:n()}};function ai(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Qe,Xt;function li(){if(Xt)return Qe;Xt=1,Qe=e;function t(n){return n instanceof Buffer?Buffer.from(n):new n.constructor(n.buffer.slice(),n.byteOffset,n.length)}function e(n){if(n=n||{},n.circles)return r(n);const i=new Map;if(i.set(Date,l=>new Date(l)),i.set(Map,(l,h)=>new Map(a(Array.from(l),h))),i.set(Set,(l,h)=>new Set(a(Array.from(l),h))),n.constructorHandlers)for(const l of n.constructorHandlers)i.set(l[0],l[1]);let s=null;return n.proto?c:o;function a(l,h){const d=Object.keys(l),g=new Array(d.length);for(let f=0;f<d.length;f++){const y=d[f],p=l[y];typeof p!="object"||p===null?g[y]=p:p.constructor!==Object&&(s=i.get(p.constructor))?g[y]=s(p,h):ArrayBuffer.isView(p)?g[y]=t(p):g[y]=h(p)}return g}function o(l){if(typeof l!="object"||l===null)return l;if(Array.isArray(l))return a(l,o);if(l.constructor!==Object&&(s=i.get(l.constructor)))return s(l,o);const h={};for(const d in l){if(Object.hasOwnProperty.call(l,d)===!1)continue;const g=l[d];typeof g!="object"||g===null?h[d]=g:g.constructor!==Object&&(s=i.get(g.constructor))?h[d]=s(g,o):ArrayBuffer.isView(g)?h[d]=t(g):h[d]=o(g)}return h}function c(l){if(typeof l!="object"||l===null)return l;if(Array.isArray(l))return a(l,c);if(l.constructor!==Object&&(s=i.get(l.constructor)))return s(l,c);const h={};for(const d in l){const g=l[d];typeof g!="object"||g===null?h[d]=g:g.constructor!==Object&&(s=i.get(g.constructor))?h[d]=s(g,c):ArrayBuffer.isView(g)?h[d]=t(g):h[d]=c(g)}return h}}function r(n){const i=[],s=[],a=new Map;if(a.set(Date,d=>new Date(d)),a.set(Map,(d,g)=>new Map(c(Array.from(d),g))),a.set(Set,(d,g)=>new Set(c(Array.from(d),g))),n.constructorHandlers)for(const d of n.constructorHandlers)a.set(d[0],d[1]);let o=null;return n.proto?h:l;function c(d,g){const f=Object.keys(d),y=new Array(f.length);for(let p=0;p<f.length;p++){const m=f[p],w=d[m];if(typeof w!="object"||w===null)y[m]=w;else if(w.constructor!==Object&&(o=a.get(w.constructor)))y[m]=o(w,g);else if(ArrayBuffer.isView(w))y[m]=t(w);else{const E=i.indexOf(w);E!==-1?y[m]=s[E]:y[m]=g(w)}}return y}function l(d){if(typeof d!="object"||d===null)return d;if(Array.isArray(d))return c(d,l);if(d.constructor!==Object&&(o=a.get(d.constructor)))return o(d,l);const g={};i.push(d),s.push(g);for(const f in d){if(Object.hasOwnProperty.call(d,f)===!1)continue;const y=d[f];if(typeof y!="object"||y===null)g[f]=y;else if(y.constructor!==Object&&(o=a.get(y.constructor)))g[f]=o(y,l);else if(ArrayBuffer.isView(y))g[f]=t(y);else{const p=i.indexOf(y);p!==-1?g[f]=s[p]:g[f]=l(y)}}return i.pop(),s.pop(),g}function h(d){if(typeof d!="object"||d===null)return d;if(Array.isArray(d))return c(d,h);if(d.constructor!==Object&&(o=a.get(d.constructor)))return o(d,h);const g={};i.push(d),s.push(g);for(const f in d){const y=d[f];if(typeof y!="object"||y===null)g[f]=y;else if(y.constructor!==Object&&(o=a.get(y.constructor)))g[f]=o(y,h);else if(ArrayBuffer.isView(y))g[f]=t(y);else{const p=i.indexOf(y);p!==-1?g[f]=s[p]:g[f]=h(y)}}return i.pop(),s.pop(),g}}return Qe}var ci=li();const Pr=ai(ci);Pr();function bt(t){if(t==null||typeof t!="object")return!1;let e=Object.getPrototypeOf(t);return e!==null&&e!==Object.prototype&&Object.getPrototypeOf(e)!==null?!1:!(Symbol.iterator in t)&&!(Symbol.toStringTag in t)}function ee(t){return typeof t=="string"}function ui(t){return Number.isFinite(t)}function X(t){return Number.isSafeInteger(t)&&t>=0}function V(t){return t!=null}function hi(t,e){return bt(t)&&ee(e)&&e in t}var di=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,gi=typeof self=="object"&&self&&self.Object===Object&&self,It=di||gi||Function("return this")(),oe=It.Symbol,$r=Object.prototype,fi=$r.hasOwnProperty,pi=$r.toString,pe=oe?oe.toStringTag:void 0;function mi(t){var e=fi.call(t,pe),r=t[pe];try{t[pe]=void 0;var n=!0}catch{}var i=pi.call(t);return n&&(e?t[pe]=r:delete t[pe]),i}var yi=Object.prototype,bi=yi.toString;function vi(t){return bi.call(t)}var wi="[object Null]",Si="[object Undefined]",Zt=oe?oe.toStringTag:void 0;function Dr(t){return t==null?t===void 0?Si:wi:Zt&&Zt in Object(t)?mi(t):vi(t)}function Br(t){return t!=null&&typeof t=="object"}var ki="[object Symbol]";function Oi(t){return typeof t=="symbol"||Br(t)&&Dr(t)==ki}function xi(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}var Ei=Array.isArray,Yt=oe?oe.prototype:void 0,er=Yt?Yt.toString:void 0;function Pt(t){if(typeof t=="string")return t;if(Ei(t))return xi(t,Pt)+"";if(Oi(t))return er?er.call(t):"";var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}var Ci=/\s/;function Ai(t){for(var e=t.length;e--&&Ci.test(t.charAt(e)););return e}var Ti=/^\s+/;function Ri(t){return t&&t.slice(0,Ai(t)+1).replace(Ti,"")}function jr(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function Ur(t){return t}var Ni="[object AsyncFunction]",Li="[object Function]",qi="[object GeneratorFunction]",Ii="[object Proxy]";function zr(t){if(!jr(t))return!1;var e=Dr(t);return e==Li||e==qi||e==Ni||e==Ii}var Xe=It["__core-js_shared__"],tr=(function(){var t=/[^.]+$/.exec(Xe&&Xe.keys&&Xe.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();function Pi(t){return!!tr&&tr in t}var $i=Function.prototype,Di=$i.toString;function Bi(t){if(t!=null){try{return Di.call(t)}catch{}try{return t+""}catch{}}return""}var ji=/[\\^$.*+?()[\]{}|]/g,Ui=/^\[object .+?Constructor\]$/,zi=Function.prototype,Hi=Object.prototype,_i=zi.toString,Fi=Hi.hasOwnProperty,Mi=RegExp("^"+_i.call(Fi).replace(ji,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Vi(t){if(!jr(t)||Pi(t))return!1;var e=zr(t)?Mi:Ui;return e.test(Bi(t))}function Wi(t,e){return t?.[e]}function $t(t,e){var r=Wi(t,e);return Vi(r)?r:void 0}function Gi(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var Ki=800,Ji=16,Qi=Date.now;function Xi(t){var e=0,r=0;return function(){var n=Qi(),i=Ji-(n-r);if(r=n,i>0){if(++e>=Ki)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function Zi(t){return function(){return t}}var rr=(function(){try{var t=$t(Object,"defineProperty");return t({},"",{}),t}catch{}})(),Yi=rr?function(t,e){return rr(t,"toString",{configurable:!0,enumerable:!1,value:Zi(e),writable:!0})}:Ur,es=Xi(Yi);function ts(t,e,r,n){for(var i=t.length,s=r+-1;++s<i;)if(e(t[s],s,t))return s;return-1}function rs(t){return t!==t}function ns(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}function Dt(t,e,r){return e===e?ns(t,e,r):ts(t,rs,r)}function is(t,e){var r=t==null?0:t.length;return!!r&&Dt(t,e,0)>-1}function ss(t,e){return t===e||t!==t&&e!==e}var nr=Math.max;function os(t,e,r){return e=nr(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,s=nr(n.length-e,0),a=Array(s);++i<s;)a[i]=n[e+i];i=-1;for(var o=Array(e+1);++i<e;)o[i]=n[i];return o[e]=r(a),Gi(t,this,o)}}function as(t,e){return es(os(t,e,Ur),t+"")}var ls=9007199254740991;function cs(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=ls}function us(t){return t!=null&&cs(t.length)&&!zr(t)}var Oe=$t(Object,"create");function hs(){this.__data__=Oe?Oe(null):{},this.size=0}function ds(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var gs="__lodash_hash_undefined__",fs=Object.prototype,ps=fs.hasOwnProperty;function ms(t){var e=this.__data__;if(Oe){var r=e[t];return r===gs?void 0:r}return ps.call(e,t)?e[t]:void 0}var ys=Object.prototype,bs=ys.hasOwnProperty;function vs(t){var e=this.__data__;return Oe?e[t]!==void 0:bs.call(e,t)}var ws="__lodash_hash_undefined__";function Ss(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Oe&&e===void 0?ws:e,this}function K(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}K.prototype.clear=hs;K.prototype.delete=ds;K.prototype.get=ms;K.prototype.has=vs;K.prototype.set=Ss;function ks(){this.__data__=[],this.size=0}function We(t,e){for(var r=t.length;r--;)if(ss(t[r][0],e))return r;return-1}var Os=Array.prototype,xs=Os.splice;function Es(t){var e=this.__data__,r=We(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():xs.call(e,r,1),--this.size,!0}function Cs(t){var e=this.__data__,r=We(e,t);return r<0?void 0:e[r][1]}function As(t){return We(this.__data__,t)>-1}function Ts(t,e){var r=this.__data__,n=We(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function ce(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}ce.prototype.clear=ks;ce.prototype.delete=Es;ce.prototype.get=Cs;ce.prototype.has=As;ce.prototype.set=Ts;var Rs=$t(It,"Map");function Ns(){this.size=0,this.__data__={hash:new K,map:new(Rs||ce),string:new K}}function Ls(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function Ge(t,e){var r=t.__data__;return Ls(e)?r[typeof e=="string"?"string":"hash"]:r.map}function qs(t){var e=Ge(this,t).delete(t);return this.size-=e?1:0,e}function Is(t){return Ge(this,t).get(t)}function Ps(t){return Ge(this,t).has(t)}function $s(t,e){var r=Ge(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}function ue(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}ue.prototype.clear=Ns;ue.prototype.delete=qs;ue.prototype.get=Is;ue.prototype.has=Ps;ue.prototype.set=$s;function Ds(t){return t==null?"":Pt(t)}function Bs(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var s=Array(i);++n<i;)s[n]=t[n+e];return s}function js(t,e,r){var n=t.length;return r=r===void 0?n:r,!e&&r>=n?t:Bs(t,e,r)}var Us="\\ud800-\\udfff",zs="\\u0300-\\u036f",Hs="\\ufe20-\\ufe2f",_s="\\u20d0-\\u20ff",Fs=zs+Hs+_s,Ms="\\ufe0e\\ufe0f",Vs="\\u200d",Ws=RegExp("["+Vs+Us+Fs+Ms+"]");function Gs(t){return Ws.test(t)}function Ks(t){return t.split("")}var Hr="\\ud800-\\udfff",Js="\\u0300-\\u036f",Qs="\\ufe20-\\ufe2f",Xs="\\u20d0-\\u20ff",Zs=Js+Qs+Xs,Ys="\\ufe0e\\ufe0f",eo="["+Hr+"]",vt="["+Zs+"]",wt="\\ud83c[\\udffb-\\udfff]",to="(?:"+vt+"|"+wt+")",_r="[^"+Hr+"]",Fr="(?:\\ud83c[\\udde6-\\uddff]){2}",Mr="[\\ud800-\\udbff][\\udc00-\\udfff]",ro="\\u200d",Vr=to+"?",Wr="["+Ys+"]?",no="(?:"+ro+"(?:"+[_r,Fr,Mr].join("|")+")"+Wr+Vr+")*",io=Wr+Vr+no,so="(?:"+[_r+vt+"?",vt,Fr,Mr,eo].join("|")+")",oo=RegExp(wt+"(?="+wt+")|"+so+io,"g");function ao(t){return t.match(oo)||[]}function ir(t){return Gs(t)?ao(t):Ks(t)}var lo="__lodash_hash_undefined__";function co(t){return this.__data__.set(t,lo),this}function uo(t){return this.__data__.has(t)}function ze(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new ue;++e<r;)this.add(t[e])}ze.prototype.add=ze.prototype.push=co;ze.prototype.has=uo;function ho(t,e){return t.has(e)}function go(t){return Br(t)&&us(t)}var fo=200;function po(t,e,r,n){var i=-1,s=is,a=!0,o=t.length,c=[],l=e.length;if(!o)return c;e.length>=fo&&(s=ho,a=!1,e=new ze(e));e:for(;++i<o;){var h=t[i],d=h;if(h=h!==0?h:0,a&&d===d){for(var g=l;g--;)if(e[g]===d)continue e;c.push(h)}else s(e,d,n)||c.push(h)}return c}function mo(t,e){for(var r=t.length;r--&&Dt(e,t[r],0)>-1;);return r}function yo(t,e){for(var r=-1,n=t.length;++r<n&&Dt(e,t[r],0)>-1;);return r}function sr(t,e,r){if(t=Ds(t),t&&e===void 0)return Ri(t);if(!t||!(e=Pt(e)))return t;var n=ir(t),i=ir(e),s=yo(n,i),a=mo(n,i)+1;return js(n,s,a).join("")}var bo=as(function(t,e){return go(t)?po(t,e):[]}),ne=function(){return ne=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])}return t},ne.apply(this,arguments)},vo="~",wo="~~";function Bt(t,e){for(var r={},n={},i=t.split(wo),s=!1,a=0;i.length>a;a++){for(var o=i[a].split(vo),c=0;c<o.length;c+=2){var l=o[c],h=o[c+1],d="&"+l+";";r[d]=h,s&&(r["&"+l]=h),n[h]=d}s=!0}return e?{entities:ne(ne({},r),e.entities),characters:ne(ne({},n),e.characters)}:{entities:r,characters:n}}var Ze={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/∉|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/·|℗|⋇|⪧|⩺|⋗|⦕|⩼|⪆|⥸|⋗|⋛|⪌|≷|≳|⪦|⩹|⋖|⋋|⋉|⥶|⩻|⦖|◃|⊴|◂|∉|⋹̸|⋵̸|∉|⋷|⋶|∌|∌|⋾|⋽|∥|⊠|⨱|⨰|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},ae={};ae.xml=Bt(`lt~<~gt~>~quot~"~apos~'~amp~&`);ae.html4=Bt(`apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~~zwj~~lrm~~rlm~~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~"~amp~&~lt~<~gt~>`);ae.html5=Bt('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~~InvisibleTimes~~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~~NegativeThickSpace~~NegativeThinSpace~~NegativeVeryThinSpace~~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~Nfr~𝔑~NoBreak~~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~ ~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~ ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',ae.html4);var So={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},ko=String.fromCodePoint||function(t){return String.fromCharCode(Math.floor((t-65536)/1024)+55296,(t-65536)%1024+56320)},le=function(){return le=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])}return t},le.apply(this,arguments)},Oo=le(le({},ae),{all:ae.html5}),xo={scope:"body",level:"all"},Ye=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,et=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,or={xml:{strict:Ye,attribute:et,body:Ze.xml},html4:{strict:Ye,attribute:et,body:Ze.html4},html5:{strict:Ye,attribute:et,body:Ze.html5}},Eo=le(le({},or),{all:or.html5}),Gr=String.fromCharCode,Co=Gr(65533);function Ao(t,e,r,n){var i=t,s=t[t.length-1];if(r&&s==="=")i=t;else if(n&&s!==";")i=t;else{var a=e[t];if(a)i=a;else if(t[0]==="&"&&t[1]==="#"){var o=t[2],c=o=="x"||o=="X"?parseInt(t.substr(3),16):parseInt(t.substr(2));i=c>=1114111?Co:c>65535?ko(c):Gr(So[c]||c)}}return i}function ar(t,e){var r=e===void 0?xo:e,n=r.level,i=n===void 0?"all":n,s=r.scope,a=s===void 0?i==="xml"?"strict":"body":s;if(!t)return"";var o=Eo[i][a],c=Oo[i].entities,l=a==="attribute",h=a==="strict";return t.replace(o,function(d){return Ao(d,c,l,h)})}var To={strictlyTwoElementsInRangeArrays:!1,progressFn:null};function He(t,e){if(!Array.isArray(t)||!t.length)return t;let r={...To,...e},n,i;if(r.strictlyTwoElementsInRangeArrays&&!t.every((o,c)=>!Array.isArray(o)||o.length!==2?(n=c,i=o.length,!1):!0))throw new TypeError(`ranges-sort: [THROW_ID_03] The first argument should be an array and must consist of arrays which are natural number indexes representing TWO string index ranges. However, ${n}th range (${JSON.stringify(t[n],null,4)}) has not two but ${i} elements!`);if(!t.every((o,c)=>!Array.isArray(o)||!Number.isInteger(o[0])||o[0]<0||!Number.isInteger(o[1])||o[1]<0?(n=c,!1):!0))throw new TypeError(`ranges-sort: [THROW_ID_04] The first argument should be an array and must consist of arrays which are natural number indexes representing string index ranges. However, ${n}th range (${JSON.stringify(t[n],null,4)}) does not consist of only natural numbers!`);let s=t.length**2,a=0;return Array.from(t).sort((o,c)=>(r.progressFn&&(a+=1,r.progressFn(Math.floor(a*100/s))),o[0]===c[0]?o[1]<c[1]?-1:o[1]>c[1]?1:0:o[0]<c[0]?-1:1))}var lr={mergeType:1,progressFn:null,joinRangesThatTouchEdges:!0};function Ro(t,e){function r(l){return!!l&&typeof l=="object"&&!Array.isArray(l)}if(!Array.isArray(t)||!t.length)return null;let n;if(e)if(r(e)){if(n={...lr,...e},n.progressFn&&r(n.progressFn)&&!Object.keys(n.progressFn).length)n.progressFn=null;else if(n.progressFn&&typeof n.progressFn!="function")throw new Error(`ranges-merge: [THROW_ID_01] opts.progressFn must be a function! It was given of a type: "${typeof n.progressFn}", equal to ${JSON.stringify(n.progressFn,null,4)}`);if(![1,2,"1","2"].includes(n.mergeType))throw new Error(`ranges-merge: [THROW_ID_02] opts.mergeType was customised to a wrong thing! It was given of a type: "${typeof n.mergeType}", equal to ${JSON.stringify(n.mergeType,null,4)}`);if(typeof n.joinRangesThatTouchEdges!="boolean")throw new Error(`ranges-merge: [THROW_ID_04] opts.joinRangesThatTouchEdges was customised to a wrong thing! It was given of a type: "${typeof n.joinRangesThatTouchEdges}", equal to ${JSON.stringify(n.joinRangesThatTouchEdges,null,4)}`)}else throw new Error(`emlint: [THROW_ID_03] the second input argument must be a plain object. It was given as:
|
|
2
|
-
${JSON.stringify(e,null,4)} (type ${typeof e})`);else n={...
|
|
3
|
-
`:"\r",l=
|
|
4
|
-
`;if(!s)return s;let
|
|
5
|
-
`.includes(s[g])||s[g]===r?s[g]===r?
|
|
6
|
-
${JSON.stringify(e,null,4)} (type ${typeof e})`);else n={...
|
|
7
|
-
${JSON.stringify(n,null,4)}`);if(V(this.ranges)&&Array.isArray(this.last())&&i===this.last()[1]){if(this.last()[1]=s,this.last()[2],this.last()[2]!==null&&V(n)){let
|
|
8
|
-
\r`.includes(t[e+1])||n&&t[e+1]===
|
|
9
|
-
\r`.includes(t[e+2])||n&&t[e+2]===
|
|
10
|
-
\r`.includes(t[i])||n&&t[i]===
|
|
11
|
-
`)&&
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=t=>{if(!t)return["",void 0];const e=t.replace(/_/g,"-");try{const r=new Intl.Locale(e);return[r.language.toLowerCase(),r.region?.toUpperCase()]}catch{const r=e.split("-");return[r[0].toLowerCase(),r[1]?.toUpperCase()]}},_={ar:{defaultRegion:"SA",availableRegions:["001","AE","AS","BH","DZ","EG","IQ","JO","KW","LB","LY","MA","OM","QA","SA","SY","TN","YE"],testUtterance:"مرحبًا، اسمي {name} وأنا صوت عربي."},bg:{defaultRegion:"BG",availableRegions:["BG"],testUtterance:"Здравейте, казвам се {name} и съм български глас."},bho:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"नमस्कार, हमार नाम {name} ह आ हम भोजपुरी आवाज हईं"},bn:{defaultRegion:"IN",availableRegions:["BD","IN"],testUtterance:"হ্যালো, আমার নাম {name} এবং আমি একজন বাংলা ভয়েস।"},ca:{defaultRegion:"ES",availableRegions:["ES"],testUtterance:"Hola, em dic {name} i sóc una veu catalana"},cmn:{defaultRegion:"CN",availableRegions:["CN","CTW","TW"],testUtterance:"你好,我的名字是 {name},我是普通话配音。"},cs:{defaultRegion:"CZ",availableRegions:["CZ"],testUtterance:"Dobrý den, jmenuji se {name} a jsem český hlas."},da:{defaultRegion:"DK",availableRegions:["DK"],testUtterance:"Hej, mit navn er {name} og jeg er en dansk stemme."},de:{defaultRegion:"DE",availableRegions:["AT","CH","DE"],testUtterance:"Hallo, mein Name ist {name} und ich bin eine deutsche Stimme."},el:{defaultRegion:"GR",availableRegions:["GR"],testUtterance:"Γεια σας, με λένε {name} και είμαι ελληνική φωνή."},en:{defaultRegion:"US",availableRegions:["AU","CA","GB","HK","IE","IN","KE","NG","NZ","PH","SG","TZ","US","ZA"],testUtterance:"Hello, my name is {name} and I am an English voice."},es:{defaultRegion:"ES",availableRegions:["AR","BO","CL","CO","CR","CU","DO","EC","ES","GQ","GT","HN","MX","NI","PA","PE","PR","PY","SV","US","UY","VE"],testUtterance:"Hola, mi nombre es {name} y soy una voz española."},eu:{defaultRegion:"ES",availableRegions:["ES"],testUtterance:"Kaixo, nire izena {name} da eta euskal ahotsa naiz."},fa:{defaultRegion:"IR",availableRegions:["IR"],testUtterance:"سلام اسم من {name} و صدای فارسی هستم"},fi:{defaultRegion:"FI",availableRegions:["FI"],testUtterance:"Hei, nimeni on {name} ja olen suomalainen ääni."},fr:{defaultRegion:"FR",availableRegions:["BE","CA","CH","FR"],testUtterance:"Bonjour, mon nom est {name} et je suis une voix française."},gl:{defaultRegion:"ES",availableRegions:["ES"],testUtterance:"Ola, chámome {name} e son unha voz galega."},he:{defaultRegion:"IL",availableRegions:["IL"],testUtterance:"שלום, שמי {name} ואני קול עברי."},hi:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"नमस्कार, मेरा नाम {name} है और मैं एक हिंदी आवाज़ हूँ।"},hr:{defaultRegion:"HR",availableRegions:["HR"],testUtterance:"Pozdrav, ja sam {name} i hrvatski sam glas."},hu:{defaultRegion:"HU",availableRegions:["HU"],testUtterance:"Helló, a nevem {name} és magyar hangú vagyok."},id:{defaultRegion:"ID",availableRegions:["ID"],testUtterance:"Halo, nama saya {name} dan saya suara Indonesia."},it:{defaultRegion:"IT",availableRegions:["IT"],testUtterance:"Ciao, mi chiamo {name} e sono una voce italiana."},ja:{defaultRegion:"JP",availableRegions:["JP"],testUtterance:"こんにちは。私の名前は{name}で、日本語の声を担当しています。"},kk:{defaultRegion:"KZ",availableRegions:["KZ"],testUtterance:"Sälemetsiz be, meniñ atım {name} jäne men qazaq dawısımın."},kn:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"ಹಲೋ, ನನ್ನ ಹೆಸರು {name} ಮತ್ತು ನಾನು ಕನ್ನಡ ಧ್ವನಿ."},ko:{defaultRegion:"KR",availableRegions:["KR"],testUtterance:"안녕하세요, 저는 {name}이고 한국어 음성입니다."},mr:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"नमस्कार, माझे नाव {name} आहे आणि मी एक मराठी आवाज आहे."},ms:{defaultRegion:"MY",availableRegions:["MY"],testUtterance:"Hello, nama saya {name} dan saya suara Melayu."},nb:{defaultRegion:"NO",availableRegions:["NO"],testUtterance:"Hei, jeg heter {name} og er en norsk stemme."},nl:{defaultRegion:"NL",availableRegions:["BE","NL"],testUtterance:"Hallo, mijn naam is {name} en ik ben een Nederlandse stem."},pl:{defaultRegion:"PL",availableRegions:["PL"],testUtterance:"Cześć, nazywam się {name} i mam polski głos."},pt:{defaultRegion:"BR",availableRegions:["BR","PT"],testUtterance:"Olá, o meu nome é {name} e sou uma voz portuguesa."},ro:{defaultRegion:"RO",availableRegions:["RO"],testUtterance:"Buna ziua, ma numesc {name} si sunt o voce romaneasca."},ru:{defaultRegion:"RU",availableRegions:["RU"],testUtterance:"Здравствуйте, меня зовут {name} и я русский голос."},sk:{defaultRegion:"SK",availableRegions:["SK"],testUtterance:"Dobrý deň, volám sa {name} a som slovenský hlas."},sl:{defaultRegion:"SI",availableRegions:["SI"],testUtterance:"Pozdravljeni, moje ime je {name} in sem slovenski glas."},sv:{defaultRegion:"SE",availableRegions:["SE"],testUtterance:"Hej, jag heter {name} och jag är en svensk röst."},ta:{defaultRegion:"IN",availableRegions:["IN","LK","MY","SG"],testUtterance:"வணக்கம், என் பெயர் {name} மற்றும் நான் ஒரு தமிழ் குரல்"},te:{defaultRegion:"IN",availableRegions:["IN"],testUtterance:"హలో, నా పేరు {name} మరియు నేను తెలుగు వాణిని."},th:{defaultRegion:"TH",availableRegions:["TH"],testUtterance:"สวัสดีค่ะ ฉันชื่อ {name} และฉันเป็นคนมีเสียงภาษาไทย"},tr:{defaultRegion:"TR",availableRegions:["TR"],testUtterance:"Merhaba, adım {name} ve Türk sesiyim."},uk:{defaultRegion:"UA",availableRegions:["UA"],testUtterance:"Здравствуйте, меня зовут {name} и я украинский голос."},vi:{defaultRegion:"VN",availableRegions:["VN"],testUtterance:"Xin chào, tôi tên là {name} và tôi là giọng nói tiếng Việt."},wuu:{defaultRegion:"CN",availableRegions:["CN"],testUtterance:"你好,我的名字是 {name},我是吴语配音。"},yue:{defaultRegion:"HK",availableRegions:["HK"],testUtterance:"你好,我叫 {name},係越中文聲。"}},Ze=new Map,Xn=Object.assign({"../../json/ar.json":()=>Promise.resolve().then(()=>require("./ar-BYWkyZgW.cjs")),"../../json/bg.json":()=>Promise.resolve().then(()=>require("./bg-D7xe9YTl.cjs")),"../../json/bho.json":()=>Promise.resolve().then(()=>require("./bho-UB6aO8oz.cjs")),"../../json/bn.json":()=>Promise.resolve().then(()=>require("./bn-boRZ2pl5.cjs")),"../../json/ca.json":()=>Promise.resolve().then(()=>require("./ca-DkC8kSJ8.cjs")),"../../json/cmn.json":()=>Promise.resolve().then(()=>require("./cmn-BsNLjyA4.cjs")),"../../json/cs.json":()=>Promise.resolve().then(()=>require("./cs-p05r08p7.cjs")),"../../json/da.json":()=>Promise.resolve().then(()=>require("./da-crefCup9.cjs")),"../../json/de.json":()=>Promise.resolve().then(()=>require("./de-xoW-RuhZ.cjs")),"../../json/el.json":()=>Promise.resolve().then(()=>require("./el-C025sTug.cjs")),"../../json/en.json":()=>Promise.resolve().then(()=>require("./en-CbfmLXbR.cjs")),"../../json/es.json":()=>Promise.resolve().then(()=>require("./es-DW7IPf8I.cjs")),"../../json/eu.json":()=>Promise.resolve().then(()=>require("./eu-uq15ZgwW.cjs")),"../../json/fa.json":()=>Promise.resolve().then(()=>require("./fa-CHOnwiFr.cjs")),"../../json/fi.json":()=>Promise.resolve().then(()=>require("./fi-Bxlno6Zi.cjs")),"../../json/fr.json":()=>Promise.resolve().then(()=>require("./fr-yAth5-FC.cjs")),"../../json/gl.json":()=>Promise.resolve().then(()=>require("./gl-BEgzCAO0.cjs")),"../../json/he.json":()=>Promise.resolve().then(()=>require("./he-B-CTHJPL.cjs")),"../../json/hi.json":()=>Promise.resolve().then(()=>require("./hi-C0yUjV1-.cjs")),"../../json/hr.json":()=>Promise.resolve().then(()=>require("./hr-CZvFOcdo.cjs")),"../../json/hu.json":()=>Promise.resolve().then(()=>require("./hu-_2PInItj.cjs")),"../../json/id.json":()=>Promise.resolve().then(()=>require("./id-BROcb7-t.cjs")),"../../json/it.json":()=>Promise.resolve().then(()=>require("./it-Bmc8Ycff.cjs")),"../../json/ja.json":()=>Promise.resolve().then(()=>require("./ja-B8t6WOeg.cjs")),"../../json/kk.json":()=>Promise.resolve().then(()=>require("./kk-DskO1CW8.cjs")),"../../json/kn.json":()=>Promise.resolve().then(()=>require("./kn-Cy3NH6na.cjs")),"../../json/ko.json":()=>Promise.resolve().then(()=>require("./ko-CZdQzppZ.cjs")),"../../json/mr.json":()=>Promise.resolve().then(()=>require("./mr-9hGqBYlV.cjs")),"../../json/ms.json":()=>Promise.resolve().then(()=>require("./ms-DzpBxNFZ.cjs")),"../../json/nb.json":()=>Promise.resolve().then(()=>require("./nb-BQfw9EEH.cjs")),"../../json/nl.json":()=>Promise.resolve().then(()=>require("./nl-CyM0R4Gr.cjs")),"../../json/pl.json":()=>Promise.resolve().then(()=>require("./pl-Da8XOMa1.cjs")),"../../json/pt.json":()=>Promise.resolve().then(()=>require("./pt-tubyvYaM.cjs")),"../../json/ro.json":()=>Promise.resolve().then(()=>require("./ro-C-rXDfuM.cjs")),"../../json/ru.json":()=>Promise.resolve().then(()=>require("./ru-DJocRaDd.cjs")),"../../json/sk.json":()=>Promise.resolve().then(()=>require("./sk-BvpojIXp.cjs")),"../../json/sl.json":()=>Promise.resolve().then(()=>require("./sl-D0X3JKvQ.cjs")),"../../json/sv.json":()=>Promise.resolve().then(()=>require("./sv-4lEgrHda.cjs")),"../../json/ta.json":()=>Promise.resolve().then(()=>require("./ta-CyeVPdIs.cjs")),"../../json/te.json":()=>Promise.resolve().then(()=>require("./te-DqWIZZxL.cjs")),"../../json/th.json":()=>Promise.resolve().then(()=>require("./th-BcoSVZAp.cjs")),"../../json/tr.json":()=>Promise.resolve().then(()=>require("./tr-BuafNhfw.cjs")),"../../json/uk.json":()=>Promise.resolve().then(()=>require("./uk-DkXNxnD9.cjs")),"../../json/vi.json":()=>Promise.resolve().then(()=>require("./vi-Ct2avSE6.cjs")),"../../json/wuu.json":()=>Promise.resolve().then(()=>require("./wuu-DnwGQ6c-.cjs")),"../../json/yue.json":()=>Promise.resolve().then(()=>require("./yue-j9Y48sR-.cjs"))});async function Zn(t){try{const e=t.split("-")[0],r=Xn[`../../json/${e}.json`];if(!r)throw new Error(`No voice data found for language: ${t}`);const i=(await r()).default;return{...i,voices:i.voices.map(ti)}}catch(e){return console.warn(`Failed to load voice data for ${t}:`,e),{language:t,defaultRegion:"",testUtterance:"",voices:[]}}}function Xt(t){return Ze.has(t)||Ze.set(t,Zn(t)),Ze.get(t)}const Yn=["veryLow","low","normal","high","veryHigh"],ei=["android","apple"],ti=t=>({...t,quality:t.quality?.filter(e=>Yn.includes(e)),localizedName:t.localizedName&&ei.includes(t.localizedName)?t.localizedName:void 0}),ae={cmn:"cmn","cmn-CN":"cmn-CN","cmn-TW":"cmn-TW",zh:"cmn","zh-CN":"cmn-CN","zh-TW":"cmn-TW",yue:"yue","yue-HK":"yue-HK","zh-HK":"yue-HK",wuu:"wuu","wuu-CN":"wuu-CN"},D=t=>{if(!t)return"";let e=t.toLowerCase().replace(/_/g,"-");if(/\w{2,3}-\w{2,3}/.test(e)){const[r,n]=e.split("-");e=`${r.toLowerCase()}-${n.toUpperCase()}`}return ae[e]||e},yt=async t=>{if(!t)return[];try{const e=D(t);try{const n=await Xt(e);if(n?.voices?.length)return n.voices}catch(n){console.warn(`Failed to load voices for ${e}:`,n)}const[r]=j(e);if(r!==e)try{const n=await Xt(r);if(n?.voices?.length)return n.voices}catch(n){console.warn(`Failed to load voices for base language ${r}:`,n)}return[]}catch(e){return console.error(`Error in getVoices for ${t}:`,e),[]}},Zt=t=>{if(!t)return"";try{const e=D(t),r=_[e];if(r?.testUtterance)return r.testUtterance;if(e in ae){const i=ae[e];if(i&&_[i]?.testUtterance)return _[i].testUtterance}const[n]=j(e);return n!==e&&_[n]?.testUtterance?_[n].testUtterance:""}catch(e){return console.error(`Error in getTestUtterance for ${t}:`,e),""}},Fe=t=>{if(!t)return"";try{const e=D(t),r=_[e];if(r?.defaultRegion)return`${e}-${r.defaultRegion}`;if(e in ae){const i=ae[e];if(i){const s=_[i];if(s?.defaultRegion)return`${i}-${s.defaultRegion}`}}const[n]=j(e);if(n!==e){const i=_[n];if(i?.defaultRegion)return`${n}-${i.defaultRegion}`}return""}catch(e){return console.error(`Failed to get default region for ${t}:`,e),""}},Yt=t=>{if(!t?.length)return[];const e=new Set,r=new Map,n=new Map;for(const[i,s]of t.entries()){if(!s)continue;const o=D(s),[a,c]=j(o);c&&(e.add(c),n.has(c)||n.set(c,i)),r.has(a)||r.set(a,new Set),c&&r.get(a).add(c)}return Array.from(r.entries()).map(([i,s])=>{const o=new Set(_[i]?.availableRegions||[]),a=Array.from(s),c=Array.from(e).filter(d=>o.has(d)&&!a.includes(d)),l=Array.from(new Set([...a,...c])).sort((d,h)=>{const g=n.get(d)??Number.MAX_SAFE_INTEGER,f=n.get(h)??Number.MAX_SAFE_INTEGER;return g-f});if(l.length===0){const d=Fe(i),[,h]=j(d);h&&l.push(h)}return{baseLang:i,regions:l}})};async function Pe(t){const e=new Map;for(const n of t){if(n.source!=="json")continue;const[i]=j(n.language);e.has(i)||e.set(i,[]),e.get(i).push(n)}const r=new Map;for(const[n,i]of e.entries()){const s=new Map,o=await yt(n),a=new Map;o.forEach((c,l)=>{a.set(c.name.toLowerCase(),l),c.altNames?.forEach(d=>{a.set(d.toLowerCase(),l)})});for(const c of i){const l=c.name.toLowerCase(),d=a.get(l);d!==void 0&&s.set(c.name,d)}s.size>0&&r.set(n,s)}return r}const ri=[{name:"Albert",nativeID:["com.apple.speech.synthesis.voice.Albert"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bad News",nativeID:["com.apple.speech.synthesis.voice.BadNews"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Mauvaises nouvelles","Malas noticias","Brutte notizie"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bahh",nativeID:["com.apple.speech.synthesis.voice.Bahh"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bells",nativeID:["com.apple.speech.synthesis.voice.Bells"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Cloches","Campanas","Campane"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Boing",nativeID:["com.apple.speech.synthesis.voice.Boing"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Bubbles",nativeID:["com.apple.speech.synthesis.voice.Bubbles"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Bulles","Burbujas","Bollicine"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Cellos",nativeID:["com.apple.speech.synthesis.voice.Cellos"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Violoncelles","Violonchelos","Violoncelli"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Good News",nativeID:["com.apple.speech.synthesis.voice.GoodNews"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Bonnes nouvelles","Buenas noticias","Buone notizie"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Jester",nativeID:["com.apple.speech.synthesis.voice.Hysterical"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Bouffon","Bufón","Giullare"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Organ",nativeID:["com.apple.speech.synthesis.voice.Organ"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Orgue","Órgano","Organo"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Superstar",nativeID:["com.apple.speech.synthesis.voice.Princess"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Superestrella"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Trinoids",nativeID:["com.apple.speech.synthesis.voice.Trinoids"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Trinoïdes"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Whisper",nativeID:["com.apple.speech.synthesis.voice.Whisper"],note:"This novelty voice is part of a pack preloaded by Apple.",altNames:["Murmure","Susurro","Sussurro"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Wobble",nativeID:["com.apple.speech.synthesis.voice.Deranged"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Zarvox",nativeID:["com.apple.speech.synthesis.voice.Zarvox"],note:"This novelty voice is part of a pack preloaded by Apple.",os:["macOS","iOS","iPadOS"],preloaded:!0}],ni={voices:ri},ii=[{name:"Eddy",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Flo",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Grandma",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Grandpa",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Jacques",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Reed",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Rocko",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Sandy",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Shelley",localizedName:"apple",note:"Eloquence voices are preloaded by default on Apple devices.",language:"en-US",otherLanguages:["en-GB","de-DE","fr-FR","fr-CA","es-ES","es-MX","fi-FI","it-IT","ja-JP","ko-KR","pt-BR","zh-CN","zh-HK"],os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Fred",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Junior",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Kathy",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"Ralph",language:"en-US",os:["macOS","iOS","iPadOS"],preloaded:!0},{name:"eSpeak Arabic",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ar",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Bulgarian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"bg",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Bengali",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"bn",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Catalan",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ca",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Chinese (Mandarin, latin as English)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"cmn",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Czech",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"cs",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Danish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"da",os:["ChromeOS"],preloaded:!0},{name:"eSpeak German",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"de",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Greek",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"el",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Spanish (Spain)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"es",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Estonian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"et",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Finnish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"fi",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Gujarati",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"gu",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Croatian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"hr",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Hungarian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"hu",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Indonesian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"id",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Italian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"it",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Kannada",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"kn",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Korean",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ko",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Lithuanian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"lt",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Latvian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"lv",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Malayalm",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ml",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Marathi",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"mr",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Malay",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ms",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Norwegian Bokmål",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"nb",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Polish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"pl",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Portuguese (Brazil)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"pt-br",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Romanian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ro",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Russian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ru",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Slovak",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sk",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Slovenian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sl",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Serbian",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sv",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Swedish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sv",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Swahili",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"sw",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Tamil",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"ta",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Telugu",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"te",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Turkish",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"tr",os:["ChromeOS"],preloaded:!0},{name:"eSpeak Vietnamese (Northern)",note:"eSpeak voices are preloaded by default on Chrome OS.",language:"vi",os:["ChromeOS"],preloaded:!0}],si={voices:ii},ai=ni,oi=si,bt=(t,e)=>ai.voices.some(r=>t.includes(r.name)||e&&r.nativeID?.some(n=>e.includes(n))||r.altNames?.some(n=>t.includes(n))),vt=(t,e)=>oi.voices.some(r=>t.includes(r.name))||e==="veryLow",er=t=>t?.length?t.filter(e=>!(e.isNovelty||bt(e.name,e.voiceURI))):[],tr=t=>t?.length?t.filter(e=>!vt(e.name,e.quality)):[],li={ar:{normal:"محسن",high:"استثنائي"},ca:{normal:"millorada",high:"prèmium"},"cmn-CN":{normal:"优化音质",high:"高音质"},"cmn-TW":{normal:"增強音質",high:"高音質"},cs:{normal:"vylepšená verze",high:"prémiový"},da:{normal:"forbedret",high:"høj kvalitet"},de:{normal:"erweitert",high:"premium"},el:{normal:"βελτιωμένη",high:"υψηλής ποιότητας"},en:{normal:"Enhanced",high:"Premium"},es:{normal:"mejorada",high:"premium"},fi:{normal:"parannettu",high:"korkealaatuinen"},fr:{normal:"premium",high:"de qualité"},he:{normal:"משופר",high:"פרימיום"},hi:{normal:"बेहतर",high:"प्रीमियम"},hr:{normal:"poboljšani",high:"vrhunski"},hu:{normal:"továbbfejlesztett",high:"prémium"},id:{normal:"Ditingkatkan",high:"Premium"},it:{normal:"ottimizzata",high:"premium"},ja:{normal:"拡張",high:"プレミアム"},ko:{normal:"고품질",high:"프리미엄"},ms:{normal:"Dipertingkat",high:"Premium"},nb:{normal:"forbedret",high:"premium"},nl:{normal:"verbeterd",high:"premium"},pl:{normal:"rozszerzony",high:"premium"},pt:{normal:"melhorada",high:"premium"},ro:{normal:"îmbunătățită",high:"premium"},ru:{normal:"улучшенный",high:"высшее качество"},sk:{normal:"vylepšený",high:"prémiový"},sl:{normal:"izboljšano",high:"prvovrsten"},sv:{normal:"förbättrad",high:"premium"},th:{normal:"คุณภาพสูง",high:"คุณภาพสูง"},tr:{normal:"Geliştirilmiş",high:"Yüksek Kaliteli"},uk:{normal:"вдосконалений",high:"високої якості"},vi:{normal:"Nâng cao",high:"Cao cấp"}},ci={quality:li},wt={apple:ci.quality},ui=(t,e,r)=>{if(!t)return;const n=Array.isArray(r)?r:r?[r]:[];for(const i of n)if(i&&wt[i]){const s=wt[i],o=j(e)[0],a=s[e]||s[o];if(a){const c=t.toLowerCase(),{normal:l,high:d}=a;if(d&&c.includes(d.toLowerCase()))return"high";if(l&&c.includes(l.toLowerCase()))return"normal"}}},hi=(t,e)=>{const r=wt[e];if(r)for(const[n,{high:i,normal:s}]of Object.entries(r)){const o=i&&t.some(c=>c.includes(i)),a=s&&t.some(c=>c.includes(s));if(o&&a)return n}},di={low:{values:["super-compact","compact"],quality:"low"},normal:{values:["enhanced"],quality:"normal"},high:{values:["premium"],quality:"high"}},rr=t=>{if(!t)return;const r=t.toLowerCase().split(/[._-]/);for(const n of Object.values(di))if(n.values.some(i=>r.includes(i)))return n.quality};function gi(t,e){if(t.name===t.originalName)return t;if(e.name===e.originalName)return e;const r=[t.originalName,...t.altNames||[]],n=[e.originalName,...e.altNames||[]],i=r.findIndex(o=>n.includes(o)),s=n.findIndex(o=>r.includes(o));return i===-1&&s===-1||i!==-1&&(s===-1||i<=s)?t:e}function fi(t,e){if(!t.altNames&&!e.altNames)return!1;const r=t.originalName,n=e.originalName,i=t.altNames||[],s=e.altNames||[];return s.includes(r)||i.includes(n)?!0:i.filter(a=>s.includes(a)).length>0}class x{static instance;static initializationPromise=null;systemLocale;voices=[];browserVoices=[];isInitialized=!1;scopedLanguages=null;broadenPromises=new Map;constructor(){if(typeof window>"u"||!window.speechSynthesis)throw new Error("Web Speech API is not available in this environment");this.systemLocale=navigator.languages?.[0]?.split("-")[0]||"en"}static async initialize(e){if(x.instance?.isInitialized){const r=x.instance;return e?.languages&&e.languages.length>0&&await r.broadenLanguages(e.languages),r}return x.initializationPromise||(x.initializationPromise=(async()=>{try{const r=new x;x.instance=r,r.browserVoices=await r.getBrowserVoices(e?.maxTimeout,e?.interval),r.updateSystemLocale(r.browserVoices);let n=r.browserVoices;return e?.languages&&e.languages.length>0?(n=r.filterBrowserVoicesByLanguages(r.browserVoices,e.languages),r.scopedLanguages=x.toBaseLangSet(e.languages)):r.scopedLanguages=null,r.voices=await r.parseToReadiumSpeechVoices(n),r.isInitialized=!0,r}catch(r){throw x.initializationPromise=null,console.error("Failed to initialize WebSpeechVoiceManager:",r),r}})()),x.initializationPromise}filterBrowserVoicesByLanguages(e,r){if(!r?.length)return e;const n=x.toBaseLangSet(r);return e.filter(i=>{if(!i?.lang)return!1;const s=D(i.lang),[o]=x.extractLangRegionFromBCP47(s);return n.has(o)})}static toBaseLangSet(e){return new Set(e.map(r=>{const n=D(r),[i]=x.extractLangRegionFromBCP47(n);return i}))}async broadenLanguages(e){if(this.scopedLanguages===null)return;const n=[...x.toBaseLangSet(e)].filter(a=>!this.scopedLanguages.has(a));if(n.length===0)return;const i=n.filter(a=>this.broadenPromises.has(a)),s=n.filter(a=>!this.broadenPromises.has(a));let o;s.length>0&&(o=(async()=>{const a=this.filterBrowserVoicesByLanguages(this.browserVoices,s),c=await this.parseToReadiumSpeechVoices(a);this.voices=[...this.voices,...c],s.forEach(l=>this.scopedLanguages.add(l)),s.forEach(l=>this.broadenPromises.delete(l))})(),s.forEach(a=>this.broadenPromises.set(a,o))),await Promise.all([...o?[o]:[],...i.map(a=>this.broadenPromises.get(a))])}static extractLangRegionFromBCP47(e){return j(e)}static getLanguageDisplayName(e,r){try{return new Intl.DisplayNames(r?[r]:[],{type:"language",languageDisplay:"standard"}).of(e)||e.toUpperCase()}catch{return e.toUpperCase()}}cleanVoiceName(e){return e?e.replace(/\s*\([^)]*\)/g,"").replace(/[^\p{L}\p{N}\s-]/gu,"").replace(/\s+/g," ").trim():""}normalizeVoiceName(e){return this.cleanVoiceName(e.toLowerCase())}countVoiceDuplicates(e){const r=new Map;for(const n of e){if(!n?.name||!n?.lang)continue;const i=`${n.lang.toLowerCase()}_${this.normalizeVoiceName(n.name)}`;r.set(i,(r.get(i)||0)+1)}return r}updateSystemLocale(e){if(!e?.length)return;const r=e.map(i=>i.name),n=hi(r,"apple");n&&(this.systemLocale=n)}inferVoiceQuality(e,r,n){const i=e.voiceURI?rr(e.voiceURI):void 0;if(i)return i;if(r?.nativeID&&Array.isArray(r.nativeID))for(const s of r.nativeID){const o=rr(s);if(o)return o}if(r?.localizedName&&e.voiceURI&&e.lang){const s=ui(e.voiceURI,this.systemLocale,r.localizedName);if(s)return s}if(r?.quality&&r.quality.length>0){const s=Math.min(n-1,r.quality.length-1),o=r.quality[s];if(o)return o}return null}findMatchingJsonVoice(e,r){return e.find(n=>this.normalizeVoiceName(n.name)===r||n.altNames?.some(i=>this.normalizeVoiceName(i)===r))}removeDuplicates(e){const r=new Map;for(const n of e){const i=`${n.language.toLowerCase()}_${this.normalizeVoiceName(n.name)}`,s=r.get(i);if(!s)r.set(i,n);else if(fi(n,s)){const o=gi(n,s);r.set(i,o)}else{const o=x.getQualityValue(s.quality);x.getQualityValue(n.quality)>=o&&r.set(i,n)}}return Array.from(r.values())}getTestUtterance(e){if(!e)return"";const r=Zt(e);if(r)return r;const[n]=x.extractLangRegionFromBCP47(e);if(n&&n!==e){const i=Zt(n);if(i)return i}return""}getVoices(e={}){if(!this.isInitialized)throw new Error("WebSpeechVoiceManager not initialized. Call initialize() first.");return this.filterVoices(e,[...this.voices])}getLanguages(e,r,n){if(!n&&!this.isInitialized)throw new Error("WebSpeechVoiceManager not initialized. Call initialize() first.");const i=n??this.voices,s=r?this.filterVoices(r,i):i,o=[],a=new Set;for(const c of s){const d=D(c.language).split("-")[0];if(!a.has(d)){const h=x.getLanguageDisplayName(d,e),g=s.filter(f=>D(f.language).split("-")[0]===d).length;o.push({code:d,label:h,count:g}),a.add(d)}}return n?o:o.sort((c,l)=>c.label.localeCompare(l.label))}getRegions(e,r,n){if(!n&&!this.isInitialized)throw new Error("WebSpeechVoiceManager not initialized. Call initialize() first.");const i=n??this.voices,s=r?this.filterVoices(r,i):i,o=[],a=new Set,c=new Map;for(const l of s){const[,d]=x.extractLangRegionFromBCP47(l.language);d&&c.set(d,(c.get(d)||0)+1)}for(const l of s){const[,d]=x.extractLangRegionFromBCP47(l.language);if(d&&!a.has(d)){let h=l.language;try{const g=e||navigator.language;h=new Intl.DisplayNames([g],{type:"region"}).of(d)||l.language}catch(g){console.warn(`Failed to get display name for region ${d}`,g)}o.push({code:d,label:h,count:c.get(d)||0}),a.add(d)}}return n?o:o.sort((l,d)=>l.label.localeCompare(d.label))}async getDefaultVoice(e,r){if(!e)return null;const n=Array.isArray(e)?e:[e];let i=r||this.getVoices({languages:n});return i.length?(i=await this.sortVoicesByRegions(n,i),i[0]):null}getBrowserVoices(e=1e4,r=10){const n=()=>window.speechSynthesis?.getVoices()||[];if(!window.speechSynthesis)return Promise.resolve([]);const i=n();return Array.isArray(i)&&i.length?Promise.resolve(i):new Promise((s,o)=>{let a=Math.floor(e/r),c=!1;const l=()=>{if(c)return;c=!0;const d=()=>{if(a<1)return s([]);--a;const h=n();if(Array.isArray(h)&&h.length)return s(h);setTimeout(d,r)};setTimeout(d,r)};window.speechSynthesis.onvoiceschanged!==void 0?window.speechSynthesis.onvoiceschanged=()=>{const d=n();Array.isArray(d)&&d.length?s(d):l()}:l(),setTimeout(()=>s([]),e)})}async parseToReadiumSpeechVoices(e){const r=this.countVoiceDuplicates(e);return await Promise.all(e.filter(i=>i?.name&&i?.lang).map(async i=>{const s=D(i.lang),[o]=x.extractLangRegionFromBCP47(s),a=this.normalizeVoiceName(i.name),c=`${i.lang.toLowerCase()}_${a}`,l=r.get(c)||1;let d=await yt(s);(!d||d.length===0)&&(d=await yt(o));const h=this.findMatchingJsonVoice(d,a),g=this.inferVoiceQuality(i,h,l);return h?{...h,label:h.label??this.cleanVoiceName(i.name),source:"json",originalName:i.name,language:h.language??s,voiceURI:i.voiceURI,quality:g,isDefault:i.default||!1,offlineAvailability:i.localService||!1,isNovelty:bt(i.name,i.voiceURI),isLowQuality:vt(i.name,g)}:{source:"browser",label:this.cleanVoiceName(i.name),name:i.name,originalName:i.name,language:s,voiceURI:i.voiceURI,quality:g,isDefault:i.default||!1,offlineAvailability:i.localService||!1,isNovelty:bt(i.name,i.voiceURI),isLowQuality:vt(i.name,g)}}))}convertToSpeechSynthesisVoice(e){if(e)return this.browserVoices.find(r=>r.voiceURI===e.voiceURI||r.name===e.originalName||this.normalizeVoiceName(r.name)===this.normalizeVoiceName(e.name))}filterVoices(e,r){let n=r?[...r]:[...this.voices];const i={excludeNovelty:!0,excludeVeryLowQuality:!0,removeDuplicates:!0,...e};if(i.languages){const s=Array.isArray(i.languages)?i.languages:[i.languages];n=n.filter(o=>s.some(a=>{const c=a.toLowerCase(),l=o.language?.toLowerCase(),d=o.altLanguage?.toLowerCase();if(l===c||d===c)return!0;const[h]=c.split("-");return l&&l.startsWith(h)||d&&d.startsWith(h)}))}if(i.source&&(n=n.filter(s=>s.source===i.source)),i.gender&&(n=n.filter(s=>s.gender===i.gender)),i.quality){const s=Array.isArray(i.quality)?i.quality:[i.quality];n=n.filter(o=>o.quality&&s.includes(o.quality))}return i.offlineOnly&&(n=n.filter(s=>s.offlineAvailability===!0)),i.provider&&(n=n.filter(s=>s.provider?.toLowerCase()===i.provider?.toLowerCase())),i.excludeNovelty&&(n=er(n)),i.excludeVeryLowQuality&&(n=tr(n)),i.removeDuplicates&&(n=this.removeDuplicates(n)),n}filterOutNoveltyVoices(e){const r=e??this.voices;return er(r)}filterOutVeryLowQualityVoices(e){const r=e??this.voices;return tr(r)}static getQualityValue(e){return e?{veryLow:1,low:2,normal:3,high:4,veryHigh:5}[e]??0:0}static sortByQuality(e,r,n,i){const s=x.getQualityValue(e.quality),o=x.getQualityValue(r.quality);if(n&&i&&e.source==="json"&&r.source==="json"){const a=n.get(i);if(a){const c=a.get(e.name),l=a.get(r.name);if(c!==void 0&&l!==void 0)return c-l}}return o!==s?o-s:e.name.localeCompare(r.name)}async sortVoicesByQuality(e){const r=e||this.voices;if(!r?.length)return[];const n=await Pe(r);return[...r].sort((i,s)=>x.sortByQuality(i,s,n))}static groupVoicesByLanguage(e,r){const n=new Map(r.map(o=>[o.baseLang,o])),i=new Map,s=[];for(const o of e){const[a]=x.extractLangRegionFromBCP47(o.language);n.get(a)?(i.has(a)||i.set(a,[]),i.get(a).push(o)):s.push(o)}return{voicesByLang:i,otherLangVoices:s}}static async sortByDefaultRegion(e,r){const n=await Pe(e),i=Fe(r);e.sort((s,o)=>{const[,a]=x.extractLangRegionFromBCP47(s.language),[,c]=x.extractLangRegionFromBCP47(o.language),l=i&&a===i.split("-")[1],d=i&&c===i.split("-")[1];return l&&!d?-1:!l&&d?1:x.sortByQuality(s,o,n,r)})}static async sortAlphabetically(e){const r=await Pe(e);e.sort((n,i)=>{const[s]=x.extractLangRegionFromBCP47(n.language),[o]=x.extractLangRegionFromBCP47(i.language),a=x.getLanguageDisplayName(s).toLowerCase(),c=x.getLanguageDisplayName(o).toLowerCase(),l=a.localeCompare(c);if(l!==0)return l;if(s===o){const d=Fe(s),[,h]=x.extractLangRegionFromBCP47(n.language),[,g]=x.extractLangRegionFromBCP47(i.language),f=d&&h===d.split("-")[1],y=d&&g===d.split("-")[1];if(f&&!y)return-1;if(!f&&y)return 1;if(h&&g){const p=h.localeCompare(g);if(p!==0)return p}return h&&!g?-1:!h&&g?1:x.sortByQuality(n,i,r,s)}return x.sortByQuality(n,i,r,s)})}async sortVoicesByLanguages(e,r){const n=r||this.voices;if(!n?.length)return[];if(!e?.length){const c=[...n];return await x.sortAlphabetically(c),c}const i=Yt(e),{voicesByLang:s,otherLangVoices:o}=x.groupVoicesByLanguage(n,i),a=[];for(const c of i){const l=s.get(c.baseLang);l&&(await x.sortByDefaultRegion(l,c.baseLang),a.push(...l))}return await x.sortAlphabetically(o),a.push(...o),a}static async sortByPreferredRegion(e,r){const n=await Pe(e);e.sort((i,s)=>{const[,o]=x.extractLangRegionFromBCP47(i.language),[,a]=x.extractLangRegionFromBCP47(s.language),c=o&&r.regions.includes(o),l=a&&r.regions.includes(a);if(c&&l){const y=r.regions.indexOf(o),p=r.regions.indexOf(a);return y===p?x.sortByQuality(i,s,n,r.baseLang):y-p}if(c)return-1;if(l)return 1;const d=Fe(r.baseLang),[,h]=x.extractLangRegionFromBCP47(d),g=o===h,f=a===h;if(g&&!f)return-1;if(!g&&f)return 1;if(o&&a){const y=o.localeCompare(a);return y!==0?y:x.sortByQuality(i,s,n,r.baseLang)}return o?-1:a?1:x.sortByQuality(i,s,n,r.baseLang)})}async sortVoicesByRegions(e,r){const n=r||this.voices;if(!n?.length)return[];const i=Yt(e||[]),{voicesByLang:s,otherLangVoices:o}=x.groupVoicesByLanguage(n,i),a=[];for(const c of i){const l=s.get(c.baseLang);l&&(await x.sortByPreferredRegion(l,c),a.push(...l))}return await x.sortAlphabetically(o),a.push(...o),a}groupVoices(e,r){const n={},i=r||this.voices;for(const s of i){let o="Unknown";switch(e){case"languages":o=x.extractLangRegionFromBCP47(s.language)[0];break;case"gender":o=s.gender||"unknown";break;case"quality":o=s.quality||"unknown";break;case"region":const[,a]=x.extractLangRegionFromBCP47(s.language);o=a||"unknown";break}n[o]||(n[o]=[]),n[o].push(s)}return n}}const pi=["webKit","moz","ms","o"],mi=["boundary","end","error","mark","pause","resume","start"],yi=t=>`${t.charAt(0).toUpperCase()}${t.slice(1)}`,pe=(t={},e)=>Object.hasOwnProperty.call(t,e)||e in t||!!t[e],bi=t=>typeof window<"u"&&t in window,vi=t=>{const e=yi(t),r=pi.map(i=>`${i}${e}`),n=[t,e].concat(r).find(bi);return n&&typeof window<"u"?window[n]:void 0},wi=()=>{const t={};["speechSynthesis","speechSynthesisUtterance","speechSynthesisVoice","speechSynthesisEvent","speechSynthesisErrorEvent"].forEach(r=>{t[r]=vi(r)}),t.onvoiceschanged=pe(t.speechSynthesis,"onvoiceschanged"),t.speechSynthesisSpeaking=pe(t.speechSynthesis,"speaking"),t.speechSynthesisPaused=pe(t.speechSynthesis,"paused");const e=t.speechSynthesisUtterance?pe(t.speechSynthesisUtterance,"prototype"):!1;return mi.forEach(r=>{const n=`on${r}`;t[n]=e&&t.speechSynthesisUtterance?pe(t.speechSynthesisUtterance.prototype,n):!1}),t},Si=()=>{const e=typeof window<"u"&&(window.navigator||{}).userAgent||"",r=()=>/android/i.test(e),n=()=>/kaios/i.test(e),i=()=>typeof window.InstallTrigger<"u"?!0:/firefox/i.test(e),s=()=>typeof window.GestureEvent<"u"||/safari/i.test(e);return{isAndroid:r(),isFirefox:i()||n(),isSafari:s(),isKaiOS:n()}};function ki(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ye,nr;function xi(){if(nr)return Ye;nr=1,Ye=e;function t(n){return n instanceof Buffer?Buffer.from(n):new n.constructor(n.buffer.slice(),n.byteOffset,n.length)}function e(n){if(n=n||{},n.circles)return r(n);const i=new Map;if(i.set(Date,l=>new Date(l)),i.set(Map,(l,d)=>new Map(o(Array.from(l),d))),i.set(Set,(l,d)=>new Set(o(Array.from(l),d))),n.constructorHandlers)for(const l of n.constructorHandlers)i.set(l[0],l[1]);let s=null;return n.proto?c:a;function o(l,d){const h=Object.keys(l),g=new Array(h.length);for(let f=0;f<h.length;f++){const y=h[f],p=l[y];typeof p!="object"||p===null?g[y]=p:p.constructor!==Object&&(s=i.get(p.constructor))?g[y]=s(p,d):ArrayBuffer.isView(p)?g[y]=t(p):g[y]=d(p)}return g}function a(l){if(typeof l!="object"||l===null)return l;if(Array.isArray(l))return o(l,a);if(l.constructor!==Object&&(s=i.get(l.constructor)))return s(l,a);const d={};for(const h in l){if(Object.hasOwnProperty.call(l,h)===!1)continue;const g=l[h];typeof g!="object"||g===null?d[h]=g:g.constructor!==Object&&(s=i.get(g.constructor))?d[h]=s(g,a):ArrayBuffer.isView(g)?d[h]=t(g):d[h]=a(g)}return d}function c(l){if(typeof l!="object"||l===null)return l;if(Array.isArray(l))return o(l,c);if(l.constructor!==Object&&(s=i.get(l.constructor)))return s(l,c);const d={};for(const h in l){const g=l[h];typeof g!="object"||g===null?d[h]=g:g.constructor!==Object&&(s=i.get(g.constructor))?d[h]=s(g,c):ArrayBuffer.isView(g)?d[h]=t(g):d[h]=c(g)}return d}}function r(n){const i=[],s=[],o=new Map;if(o.set(Date,h=>new Date(h)),o.set(Map,(h,g)=>new Map(c(Array.from(h),g))),o.set(Set,(h,g)=>new Set(c(Array.from(h),g))),n.constructorHandlers)for(const h of n.constructorHandlers)o.set(h[0],h[1]);let a=null;return n.proto?d:l;function c(h,g){const f=Object.keys(h),y=new Array(f.length);for(let p=0;p<f.length;p++){const m=f[p],w=h[m];if(typeof w!="object"||w===null)y[m]=w;else if(w.constructor!==Object&&(a=o.get(w.constructor)))y[m]=a(w,g);else if(ArrayBuffer.isView(w))y[m]=t(w);else{const C=i.indexOf(w);C!==-1?y[m]=s[C]:y[m]=g(w)}}return y}function l(h){if(typeof h!="object"||h===null)return h;if(Array.isArray(h))return c(h,l);if(h.constructor!==Object&&(a=o.get(h.constructor)))return a(h,l);const g={};i.push(h),s.push(g);for(const f in h){if(Object.hasOwnProperty.call(h,f)===!1)continue;const y=h[f];if(typeof y!="object"||y===null)g[f]=y;else if(y.constructor!==Object&&(a=o.get(y.constructor)))g[f]=a(y,l);else if(ArrayBuffer.isView(y))g[f]=t(y);else{const p=i.indexOf(y);p!==-1?g[f]=s[p]:g[f]=l(y)}}return i.pop(),s.pop(),g}function d(h){if(typeof h!="object"||h===null)return h;if(Array.isArray(h))return c(h,d);if(h.constructor!==Object&&(a=o.get(h.constructor)))return a(h,d);const g={};i.push(h),s.push(g);for(const f in h){const y=h[f];if(typeof y!="object"||y===null)g[f]=y;else if(y.constructor!==Object&&(a=o.get(y.constructor)))g[f]=a(y,d);else if(ArrayBuffer.isView(y))g[f]=t(y);else{const p=i.indexOf(y);p!==-1?g[f]=s[p]:g[f]=d(y)}}return i.pop(),s.pop(),g}}return Ye}var Ei=xi();const _r=ki(Ei);_r();function St(t){if(t==null||typeof t!="object")return!1;let e=Object.getPrototypeOf(t);return e!==null&&e!==Object.prototype&&Object.getPrototypeOf(e)!==null?!1:!(Symbol.iterator in t)&&!(Symbol.toStringTag in t)}function ee(t){return typeof t=="string"}function Ci(t){return Number.isFinite(t)}function X(t){return Number.isSafeInteger(t)&&t>=0}function V(t){return t!=null}function Oi(t,e){return St(t)&&ee(e)&&e in t}var Ai=typeof globalThis=="object"&&globalThis&&globalThis.Object===Object&&globalThis,Ti=typeof self=="object"&&self&&self.Object===Object&&self,Dt=Ai||Ti||Function("return this")(),oe=Dt.Symbol,Fr=Object.prototype,Ri=Fr.hasOwnProperty,Ni=Fr.toString,me=oe?oe.toStringTag:void 0;function Li(t){var e=Ri.call(t,me),r=t[me];try{t[me]=void 0;var n=!0}catch{}var i=Ni.call(t);return n&&(e?t[me]=r:delete t[me]),i}var Ii=Object.prototype,Pi=Ii.toString;function qi(t){return Pi.call(t)}var $i="[object Null]",Di="[object Undefined]",ir=oe?oe.toStringTag:void 0;function Hr(t){return t==null?t===void 0?Di:$i:ir&&ir in Object(t)?Li(t):qi(t)}function Mr(t){return t!=null&&typeof t=="object"}var Bi="[object Symbol]";function Ui(t){return typeof t=="symbol"||Mr(t)&&Hr(t)==Bi}function ji(t,e){for(var r=-1,n=t==null?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}var zi=Array.isArray,sr=oe?oe.prototype:void 0,ar=sr?sr.toString:void 0;function Bt(t){if(typeof t=="string")return t;if(zi(t))return ji(t,Bt)+"";if(Ui(t))return ar?ar.call(t):"";var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}var _i=/\s/;function Fi(t){for(var e=t.length;e--&&_i.test(t.charAt(e)););return e}var Hi=/^\s+/;function Mi(t){return t&&t.slice(0,Fi(t)+1).replace(Hi,"")}function Vr(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}function Gr(t){return t}var Vi="[object AsyncFunction]",Gi="[object Function]",Wi="[object GeneratorFunction]",Ki="[object Proxy]";function Wr(t){if(!Vr(t))return!1;var e=Hr(t);return e==Gi||e==Wi||e==Vi||e==Ki}var et=Dt["__core-js_shared__"],or=(function(){var t=/[^.]+$/.exec(et&&et.keys&&et.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();function Ji(t){return!!or&&or in t}var Qi=Function.prototype,Xi=Qi.toString;function Zi(t){if(t!=null){try{return Xi.call(t)}catch{}try{return t+""}catch{}}return""}var Yi=/[\\^$.*+?()[\]{}|]/g,es=/^\[object .+?Constructor\]$/,ts=Function.prototype,rs=Object.prototype,ns=ts.toString,is=rs.hasOwnProperty,ss=RegExp("^"+ns.call(is).replace(Yi,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function as(t){if(!Vr(t)||Ji(t))return!1;var e=Wr(t)?ss:es;return e.test(Zi(t))}function os(t,e){return t?.[e]}function Ut(t,e){var r=os(t,e);return as(r)?r:void 0}function ls(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var cs=800,us=16,hs=Date.now;function ds(t){var e=0,r=0;return function(){var n=hs(),i=us-(n-r);if(r=n,i>0){if(++e>=cs)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}function gs(t){return function(){return t}}var lr=(function(){try{var t=Ut(Object,"defineProperty");return t({},"",{}),t}catch{}})(),fs=lr?function(t,e){return lr(t,"toString",{configurable:!0,enumerable:!1,value:gs(e),writable:!0})}:Gr,ps=ds(fs);function ms(t,e,r,n){for(var i=t.length,s=r+-1;++s<i;)if(e(t[s],s,t))return s;return-1}function ys(t){return t!==t}function bs(t,e,r){for(var n=r-1,i=t.length;++n<i;)if(t[n]===e)return n;return-1}function jt(t,e,r){return e===e?bs(t,e,r):ms(t,ys,r)}function vs(t,e){var r=t==null?0:t.length;return!!r&&jt(t,e,0)>-1}function ws(t,e){return t===e||t!==t&&e!==e}var cr=Math.max;function Ss(t,e,r){return e=cr(e===void 0?t.length-1:e,0),function(){for(var n=arguments,i=-1,s=cr(n.length-e,0),o=Array(s);++i<s;)o[i]=n[e+i];i=-1;for(var a=Array(e+1);++i<e;)a[i]=n[i];return a[e]=r(o),ls(t,this,a)}}function ks(t,e){return ps(Ss(t,e,Gr),t+"")}var xs=9007199254740991;function Es(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=xs}function Cs(t){return t!=null&&Es(t.length)&&!Wr(t)}var Ce=Ut(Object,"create");function Os(){this.__data__=Ce?Ce(null):{},this.size=0}function As(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var Ts="__lodash_hash_undefined__",Rs=Object.prototype,Ns=Rs.hasOwnProperty;function Ls(t){var e=this.__data__;if(Ce){var r=e[t];return r===Ts?void 0:r}return Ns.call(e,t)?e[t]:void 0}var Is=Object.prototype,Ps=Is.hasOwnProperty;function qs(t){var e=this.__data__;return Ce?e[t]!==void 0:Ps.call(e,t)}var $s="__lodash_hash_undefined__";function Ds(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=Ce&&e===void 0?$s:e,this}function K(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}K.prototype.clear=Os;K.prototype.delete=As;K.prototype.get=Ls;K.prototype.has=qs;K.prototype.set=Ds;function Bs(){this.__data__=[],this.size=0}function Je(t,e){for(var r=t.length;r--;)if(ws(t[r][0],e))return r;return-1}var Us=Array.prototype,js=Us.splice;function zs(t){var e=this.__data__,r=Je(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():js.call(e,r,1),--this.size,!0}function _s(t){var e=this.__data__,r=Je(e,t);return r<0?void 0:e[r][1]}function Fs(t){return Je(this.__data__,t)>-1}function Hs(t,e){var r=this.__data__,n=Je(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function ue(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}ue.prototype.clear=Bs;ue.prototype.delete=zs;ue.prototype.get=_s;ue.prototype.has=Fs;ue.prototype.set=Hs;var Ms=Ut(Dt,"Map");function Vs(){this.size=0,this.__data__={hash:new K,map:new(Ms||ue),string:new K}}function Gs(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function Qe(t,e){var r=t.__data__;return Gs(e)?r[typeof e=="string"?"string":"hash"]:r.map}function Ws(t){var e=Qe(this,t).delete(t);return this.size-=e?1:0,e}function Ks(t){return Qe(this,t).get(t)}function Js(t){return Qe(this,t).has(t)}function Qs(t,e){var r=Qe(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}function he(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}he.prototype.clear=Vs;he.prototype.delete=Ws;he.prototype.get=Ks;he.prototype.has=Js;he.prototype.set=Qs;function Xs(t){return t==null?"":Bt(t)}function Zs(t,e,r){var n=-1,i=t.length;e<0&&(e=-e>i?0:i+e),r=r>i?i:r,r<0&&(r+=i),i=e>r?0:r-e>>>0,e>>>=0;for(var s=Array(i);++n<i;)s[n]=t[n+e];return s}function Ys(t,e,r){var n=t.length;return r=r===void 0?n:r,!e&&r>=n?t:Zs(t,e,r)}var ea="\\ud800-\\udfff",ta="\\u0300-\\u036f",ra="\\ufe20-\\ufe2f",na="\\u20d0-\\u20ff",ia=ta+ra+na,sa="\\ufe0e\\ufe0f",aa="\\u200d",oa=RegExp("["+aa+ea+ia+sa+"]");function la(t){return oa.test(t)}function ca(t){return t.split("")}var Kr="\\ud800-\\udfff",ua="\\u0300-\\u036f",ha="\\ufe20-\\ufe2f",da="\\u20d0-\\u20ff",ga=ua+ha+da,fa="\\ufe0e\\ufe0f",pa="["+Kr+"]",kt="["+ga+"]",xt="\\ud83c[\\udffb-\\udfff]",ma="(?:"+kt+"|"+xt+")",Jr="[^"+Kr+"]",Qr="(?:\\ud83c[\\udde6-\\uddff]){2}",Xr="[\\ud800-\\udbff][\\udc00-\\udfff]",ya="\\u200d",Zr=ma+"?",Yr="["+fa+"]?",ba="(?:"+ya+"(?:"+[Jr,Qr,Xr].join("|")+")"+Yr+Zr+")*",va=Yr+Zr+ba,wa="(?:"+[Jr+kt+"?",kt,Qr,Xr,pa].join("|")+")",Sa=RegExp(xt+"(?="+xt+")|"+wa+va,"g");function ka(t){return t.match(Sa)||[]}function ur(t){return la(t)?ka(t):ca(t)}var xa="__lodash_hash_undefined__";function Ea(t){return this.__data__.set(t,xa),this}function Ca(t){return this.__data__.has(t)}function Me(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new he;++e<r;)this.add(t[e])}Me.prototype.add=Me.prototype.push=Ea;Me.prototype.has=Ca;function Oa(t,e){return t.has(e)}function Aa(t){return Mr(t)&&Cs(t)}var Ta=200;function Ra(t,e,r,n){var i=-1,s=vs,o=!0,a=t.length,c=[],l=e.length;if(!a)return c;e.length>=Ta&&(s=Oa,o=!1,e=new Me(e));e:for(;++i<a;){var d=t[i],h=d;if(d=d!==0?d:0,o&&h===h){for(var g=l;g--;)if(e[g]===h)continue e;c.push(d)}else s(e,h,n)||c.push(d)}return c}function Na(t,e){for(var r=t.length;r--&&jt(e,t[r],0)>-1;);return r}function La(t,e){for(var r=-1,n=t.length;++r<n&&jt(e,t[r],0)>-1;);return r}function hr(t,e,r){if(t=Xs(t),t&&e===void 0)return Mi(t);if(!t||!(e=Bt(e)))return t;var n=ur(t),i=ur(e),s=La(n,i),o=Na(n,i)+1;return Ys(n,s,o).join("")}var Ia=ks(function(t,e){return Aa(t)?Ra(t,e):[]}),ne=function(){return ne=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])}return t},ne.apply(this,arguments)},Pa="~",qa="~~";function zt(t,e){for(var r={},n={},i=t.split(qa),s=!1,o=0;i.length>o;o++){for(var a=i[o].split(Pa),c=0;c<a.length;c+=2){var l=a[c],d=a[c+1],h="&"+l+";";r[h]=d,s&&(r["&"+l]=d),n[d]=h}s=!0}return e?{entities:ne(ne({},r),e.entities),characters:ne(ne({},n),e.characters)}:{entities:r,characters:n}}var tt={xml:/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html4:/∉|&(?:nbsp|iexcl|cent|pound|curren|yen|brvbar|sect|uml|copy|ordf|laquo|not|shy|reg|macr|deg|plusmn|sup2|sup3|acute|micro|para|middot|cedil|sup1|ordm|raquo|frac14|frac12|frac34|iquest|Agrave|Aacute|Acirc|Atilde|Auml|Aring|AElig|Ccedil|Egrave|Eacute|Ecirc|Euml|Igrave|Iacute|Icirc|Iuml|ETH|Ntilde|Ograve|Oacute|Ocirc|Otilde|Ouml|times|Oslash|Ugrave|Uacute|Ucirc|Uuml|Yacute|THORN|szlig|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|quot|amp|lt|gt|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g,html5:/·|℗|⋇|⪧|⩺|⋗|⦕|⩼|⪆|⥸|⋗|⋛|⪌|≷|≳|⪦|⩹|⋖|⋋|⋉|⥶|⩻|⦖|◃|⊴|◂|∉|⋹̸|⋵̸|∉|⋷|⋶|∌|∌|⋾|⋽|∥|⊠|⨱|⨰|&(?:AElig|AMP|Aacute|Acirc|Agrave|Aring|Atilde|Auml|COPY|Ccedil|ETH|Eacute|Ecirc|Egrave|Euml|GT|Iacute|Icirc|Igrave|Iuml|LT|Ntilde|Oacute|Ocirc|Ograve|Oslash|Otilde|Ouml|QUOT|REG|THORN|Uacute|Ucirc|Ugrave|Uuml|Yacute|aacute|acirc|acute|aelig|agrave|amp|aring|atilde|auml|brvbar|ccedil|cedil|cent|copy|curren|deg|divide|eacute|ecirc|egrave|eth|euml|frac12|frac14|frac34|gt|iacute|icirc|iexcl|igrave|iquest|iuml|laquo|lt|macr|micro|middot|nbsp|not|ntilde|oacute|ocirc|ograve|ordf|ordm|oslash|otilde|ouml|para|plusmn|pound|quot|raquo|reg|sect|shy|sup1|sup2|sup3|szlig|thorn|times|uacute|ucirc|ugrave|uml|uuml|yacute|yen|yuml|#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);?/g},le={};le.xml=zt(`lt~<~gt~>~quot~"~apos~'~amp~&`);le.html4=zt(`apos~'~OElig~Œ~oelig~œ~Scaron~Š~scaron~š~Yuml~Ÿ~circ~ˆ~tilde~˜~ensp~ ~emsp~ ~thinsp~ ~zwnj~~zwj~~lrm~~rlm~~ndash~–~mdash~—~lsquo~‘~rsquo~’~sbquo~‚~ldquo~“~rdquo~”~bdquo~„~dagger~†~Dagger~‡~permil~‰~lsaquo~‹~rsaquo~›~euro~€~fnof~ƒ~Alpha~Α~Beta~Β~Gamma~Γ~Delta~Δ~Epsilon~Ε~Zeta~Ζ~Eta~Η~Theta~Θ~Iota~Ι~Kappa~Κ~Lambda~Λ~Mu~Μ~Nu~Ν~Xi~Ξ~Omicron~Ο~Pi~Π~Rho~Ρ~Sigma~Σ~Tau~Τ~Upsilon~Υ~Phi~Φ~Chi~Χ~Psi~Ψ~Omega~Ω~alpha~α~beta~β~gamma~γ~delta~δ~epsilon~ε~zeta~ζ~eta~η~theta~θ~iota~ι~kappa~κ~lambda~λ~mu~μ~nu~ν~xi~ξ~omicron~ο~pi~π~rho~ρ~sigmaf~ς~sigma~σ~tau~τ~upsilon~υ~phi~φ~chi~χ~psi~ψ~omega~ω~thetasym~ϑ~upsih~ϒ~piv~ϖ~bull~•~hellip~…~prime~′~Prime~″~oline~‾~frasl~⁄~weierp~℘~image~ℑ~real~ℜ~trade~™~alefsym~ℵ~larr~←~uarr~↑~rarr~→~darr~↓~harr~↔~crarr~↵~lArr~⇐~uArr~⇑~rArr~⇒~dArr~⇓~hArr~⇔~forall~∀~part~∂~exist~∃~empty~∅~nabla~∇~isin~∈~notin~∉~ni~∋~prod~∏~sum~∑~minus~−~lowast~∗~radic~√~prop~∝~infin~∞~ang~∠~and~∧~or~∨~cap~∩~cup~∪~int~∫~there4~∴~sim~∼~cong~≅~asymp~≈~ne~≠~equiv~≡~le~≤~ge~≥~sub~⊂~sup~⊃~nsub~⊄~sube~⊆~supe~⊇~oplus~⊕~otimes~⊗~perp~⊥~sdot~⋅~lceil~⌈~rceil~⌉~lfloor~⌊~rfloor~⌋~lang~〈~rang~〉~loz~◊~spades~♠~clubs~♣~hearts~♥~diams~♦~~nbsp~ ~iexcl~¡~cent~¢~pound~£~curren~¤~yen~¥~brvbar~¦~sect~§~uml~¨~copy~©~ordf~ª~laquo~«~not~¬~shy~~reg~®~macr~¯~deg~°~plusmn~±~sup2~²~sup3~³~acute~´~micro~µ~para~¶~middot~·~cedil~¸~sup1~¹~ordm~º~raquo~»~frac14~¼~frac12~½~frac34~¾~iquest~¿~Agrave~À~Aacute~Á~Acirc~Â~Atilde~Ã~Auml~Ä~Aring~Å~AElig~Æ~Ccedil~Ç~Egrave~È~Eacute~É~Ecirc~Ê~Euml~Ë~Igrave~Ì~Iacute~Í~Icirc~Î~Iuml~Ï~ETH~Ð~Ntilde~Ñ~Ograve~Ò~Oacute~Ó~Ocirc~Ô~Otilde~Õ~Ouml~Ö~times~×~Oslash~Ø~Ugrave~Ù~Uacute~Ú~Ucirc~Û~Uuml~Ü~Yacute~Ý~THORN~Þ~szlig~ß~agrave~à~aacute~á~acirc~â~atilde~ã~auml~ä~aring~å~aelig~æ~ccedil~ç~egrave~è~eacute~é~ecirc~ê~euml~ë~igrave~ì~iacute~í~icirc~î~iuml~ï~eth~ð~ntilde~ñ~ograve~ò~oacute~ó~ocirc~ô~otilde~õ~ouml~ö~divide~÷~oslash~ø~ugrave~ù~uacute~ú~ucirc~û~uuml~ü~yacute~ý~thorn~þ~yuml~ÿ~quot~"~amp~&~lt~<~gt~>`);le.html5=zt('Abreve~Ă~Acy~А~Afr~𝔄~Amacr~Ā~And~⩓~Aogon~Ą~Aopf~𝔸~ApplyFunction~~Ascr~𝒜~Assign~≔~Backslash~∖~Barv~⫧~Barwed~⌆~Bcy~Б~Because~∵~Bernoullis~ℬ~Bfr~𝔅~Bopf~𝔹~Breve~˘~Bscr~ℬ~Bumpeq~≎~CHcy~Ч~Cacute~Ć~Cap~⋒~CapitalDifferentialD~ⅅ~Cayleys~ℭ~Ccaron~Č~Ccirc~Ĉ~Cconint~∰~Cdot~Ċ~Cedilla~¸~CenterDot~·~Cfr~ℭ~CircleDot~⊙~CircleMinus~⊖~CirclePlus~⊕~CircleTimes~⊗~ClockwiseContourIntegral~∲~CloseCurlyDoubleQuote~”~CloseCurlyQuote~’~Colon~∷~Colone~⩴~Congruent~≡~Conint~∯~ContourIntegral~∮~Copf~ℂ~Coproduct~∐~CounterClockwiseContourIntegral~∳~Cross~⨯~Cscr~𝒞~Cup~⋓~CupCap~≍~DD~ⅅ~DDotrahd~⤑~DJcy~Ђ~DScy~Ѕ~DZcy~Џ~Darr~↡~Dashv~⫤~Dcaron~Ď~Dcy~Д~Del~∇~Dfr~𝔇~DiacriticalAcute~´~DiacriticalDot~˙~DiacriticalDoubleAcute~˝~DiacriticalGrave~`~DiacriticalTilde~˜~Diamond~⋄~DifferentialD~ⅆ~Dopf~𝔻~Dot~¨~DotDot~⃜~DotEqual~≐~DoubleContourIntegral~∯~DoubleDot~¨~DoubleDownArrow~⇓~DoubleLeftArrow~⇐~DoubleLeftRightArrow~⇔~DoubleLeftTee~⫤~DoubleLongLeftArrow~⟸~DoubleLongLeftRightArrow~⟺~DoubleLongRightArrow~⟹~DoubleRightArrow~⇒~DoubleRightTee~⊨~DoubleUpArrow~⇑~DoubleUpDownArrow~⇕~DoubleVerticalBar~∥~DownArrow~↓~DownArrowBar~⤓~DownArrowUpArrow~⇵~DownBreve~̑~DownLeftRightVector~⥐~DownLeftTeeVector~⥞~DownLeftVector~↽~DownLeftVectorBar~⥖~DownRightTeeVector~⥟~DownRightVector~⇁~DownRightVectorBar~⥗~DownTee~⊤~DownTeeArrow~↧~Downarrow~⇓~Dscr~𝒟~Dstrok~Đ~ENG~Ŋ~Ecaron~Ě~Ecy~Э~Edot~Ė~Efr~𝔈~Element~∈~Emacr~Ē~EmptySmallSquare~◻~EmptyVerySmallSquare~▫~Eogon~Ę~Eopf~𝔼~Equal~⩵~EqualTilde~≂~Equilibrium~⇌~Escr~ℰ~Esim~⩳~Exists~∃~ExponentialE~ⅇ~Fcy~Ф~Ffr~𝔉~FilledSmallSquare~◼~FilledVerySmallSquare~▪~Fopf~𝔽~ForAll~∀~Fouriertrf~ℱ~Fscr~ℱ~GJcy~Ѓ~Gammad~Ϝ~Gbreve~Ğ~Gcedil~Ģ~Gcirc~Ĝ~Gcy~Г~Gdot~Ġ~Gfr~𝔊~Gg~⋙~Gopf~𝔾~GreaterEqual~≥~GreaterEqualLess~⋛~GreaterFullEqual~≧~GreaterGreater~⪢~GreaterLess~≷~GreaterSlantEqual~⩾~GreaterTilde~≳~Gscr~𝒢~Gt~≫~HARDcy~Ъ~Hacek~ˇ~Hat~^~Hcirc~Ĥ~Hfr~ℌ~HilbertSpace~ℋ~Hopf~ℍ~HorizontalLine~─~Hscr~ℋ~Hstrok~Ħ~HumpDownHump~≎~HumpEqual~≏~IEcy~Е~IJlig~IJ~IOcy~Ё~Icy~И~Idot~İ~Ifr~ℑ~Im~ℑ~Imacr~Ī~ImaginaryI~ⅈ~Implies~⇒~Int~∬~Integral~∫~Intersection~⋂~InvisibleComma~~InvisibleTimes~~Iogon~Į~Iopf~𝕀~Iscr~ℐ~Itilde~Ĩ~Iukcy~І~Jcirc~Ĵ~Jcy~Й~Jfr~𝔍~Jopf~𝕁~Jscr~𝒥~Jsercy~Ј~Jukcy~Є~KHcy~Х~KJcy~Ќ~Kcedil~Ķ~Kcy~К~Kfr~𝔎~Kopf~𝕂~Kscr~𝒦~LJcy~Љ~Lacute~Ĺ~Lang~⟪~Laplacetrf~ℒ~Larr~↞~Lcaron~Ľ~Lcedil~Ļ~Lcy~Л~LeftAngleBracket~⟨~LeftArrow~←~LeftArrowBar~⇤~LeftArrowRightArrow~⇆~LeftCeiling~⌈~LeftDoubleBracket~⟦~LeftDownTeeVector~⥡~LeftDownVector~⇃~LeftDownVectorBar~⥙~LeftFloor~⌊~LeftRightArrow~↔~LeftRightVector~⥎~LeftTee~⊣~LeftTeeArrow~↤~LeftTeeVector~⥚~LeftTriangle~⊲~LeftTriangleBar~⧏~LeftTriangleEqual~⊴~LeftUpDownVector~⥑~LeftUpTeeVector~⥠~LeftUpVector~↿~LeftUpVectorBar~⥘~LeftVector~↼~LeftVectorBar~⥒~Leftarrow~⇐~Leftrightarrow~⇔~LessEqualGreater~⋚~LessFullEqual~≦~LessGreater~≶~LessLess~⪡~LessSlantEqual~⩽~LessTilde~≲~Lfr~𝔏~Ll~⋘~Lleftarrow~⇚~Lmidot~Ŀ~LongLeftArrow~⟵~LongLeftRightArrow~⟷~LongRightArrow~⟶~Longleftarrow~⟸~Longleftrightarrow~⟺~Longrightarrow~⟹~Lopf~𝕃~LowerLeftArrow~↙~LowerRightArrow~↘~Lscr~ℒ~Lsh~↰~Lstrok~Ł~Lt~≪~Map~⤅~Mcy~М~MediumSpace~ ~Mellintrf~ℳ~Mfr~𝔐~MinusPlus~∓~Mopf~𝕄~Mscr~ℳ~NJcy~Њ~Nacute~Ń~Ncaron~Ň~Ncedil~Ņ~Ncy~Н~NegativeMediumSpace~~NegativeThickSpace~~NegativeThinSpace~~NegativeVeryThinSpace~~NestedGreaterGreater~≫~NestedLessLess~≪~NewLine~\n~Nfr~𝔑~NoBreak~~NonBreakingSpace~ ~Nopf~ℕ~Not~⫬~NotCongruent~≢~NotCupCap~≭~NotDoubleVerticalBar~∦~NotElement~∉~NotEqual~≠~NotEqualTilde~≂̸~NotExists~∄~NotGreater~≯~NotGreaterEqual~≱~NotGreaterFullEqual~≧̸~NotGreaterGreater~≫̸~NotGreaterLess~≹~NotGreaterSlantEqual~⩾̸~NotGreaterTilde~≵~NotHumpDownHump~≎̸~NotHumpEqual~≏̸~NotLeftTriangle~⋪~NotLeftTriangleBar~⧏̸~NotLeftTriangleEqual~⋬~NotLess~≮~NotLessEqual~≰~NotLessGreater~≸~NotLessLess~≪̸~NotLessSlantEqual~⩽̸~NotLessTilde~≴~NotNestedGreaterGreater~⪢̸~NotNestedLessLess~⪡̸~NotPrecedes~⊀~NotPrecedesEqual~⪯̸~NotPrecedesSlantEqual~⋠~NotReverseElement~∌~NotRightTriangle~⋫~NotRightTriangleBar~⧐̸~NotRightTriangleEqual~⋭~NotSquareSubset~⊏̸~NotSquareSubsetEqual~⋢~NotSquareSuperset~⊐̸~NotSquareSupersetEqual~⋣~NotSubset~⊂⃒~NotSubsetEqual~⊈~NotSucceeds~⊁~NotSucceedsEqual~⪰̸~NotSucceedsSlantEqual~⋡~NotSucceedsTilde~≿̸~NotSuperset~⊃⃒~NotSupersetEqual~⊉~NotTilde~≁~NotTildeEqual~≄~NotTildeFullEqual~≇~NotTildeTilde~≉~NotVerticalBar~∤~Nscr~𝒩~Ocy~О~Odblac~Ő~Ofr~𝔒~Omacr~Ō~Oopf~𝕆~OpenCurlyDoubleQuote~“~OpenCurlyQuote~‘~Or~⩔~Oscr~𝒪~Otimes~⨷~OverBar~‾~OverBrace~⏞~OverBracket~⎴~OverParenthesis~⏜~PartialD~∂~Pcy~П~Pfr~𝔓~PlusMinus~±~Poincareplane~ℌ~Popf~ℙ~Pr~⪻~Precedes~≺~PrecedesEqual~⪯~PrecedesSlantEqual~≼~PrecedesTilde~≾~Product~∏~Proportion~∷~Proportional~∝~Pscr~𝒫~Qfr~𝔔~Qopf~ℚ~Qscr~𝒬~RBarr~⤐~Racute~Ŕ~Rang~⟫~Rarr~↠~Rarrtl~⤖~Rcaron~Ř~Rcedil~Ŗ~Rcy~Р~Re~ℜ~ReverseElement~∋~ReverseEquilibrium~⇋~ReverseUpEquilibrium~⥯~Rfr~ℜ~RightAngleBracket~⟩~RightArrow~→~RightArrowBar~⇥~RightArrowLeftArrow~⇄~RightCeiling~⌉~RightDoubleBracket~⟧~RightDownTeeVector~⥝~RightDownVector~⇂~RightDownVectorBar~⥕~RightFloor~⌋~RightTee~⊢~RightTeeArrow~↦~RightTeeVector~⥛~RightTriangle~⊳~RightTriangleBar~⧐~RightTriangleEqual~⊵~RightUpDownVector~⥏~RightUpTeeVector~⥜~RightUpVector~↾~RightUpVectorBar~⥔~RightVector~⇀~RightVectorBar~⥓~Rightarrow~⇒~Ropf~ℝ~RoundImplies~⥰~Rrightarrow~⇛~Rscr~ℛ~Rsh~↱~RuleDelayed~⧴~SHCHcy~Щ~SHcy~Ш~SOFTcy~Ь~Sacute~Ś~Sc~⪼~Scedil~Ş~Scirc~Ŝ~Scy~С~Sfr~𝔖~ShortDownArrow~↓~ShortLeftArrow~←~ShortRightArrow~→~ShortUpArrow~↑~SmallCircle~∘~Sopf~𝕊~Sqrt~√~Square~□~SquareIntersection~⊓~SquareSubset~⊏~SquareSubsetEqual~⊑~SquareSuperset~⊐~SquareSupersetEqual~⊒~SquareUnion~⊔~Sscr~𝒮~Star~⋆~Sub~⋐~Subset~⋐~SubsetEqual~⊆~Succeeds~≻~SucceedsEqual~⪰~SucceedsSlantEqual~≽~SucceedsTilde~≿~SuchThat~∋~Sum~∑~Sup~⋑~Superset~⊃~SupersetEqual~⊇~Supset~⋑~TRADE~™~TSHcy~Ћ~TScy~Ц~Tab~ ~Tcaron~Ť~Tcedil~Ţ~Tcy~Т~Tfr~𝔗~Therefore~∴~ThickSpace~ ~ThinSpace~ ~Tilde~∼~TildeEqual~≃~TildeFullEqual~≅~TildeTilde~≈~Topf~𝕋~TripleDot~⃛~Tscr~𝒯~Tstrok~Ŧ~Uarr~↟~Uarrocir~⥉~Ubrcy~Ў~Ubreve~Ŭ~Ucy~У~Udblac~Ű~Ufr~𝔘~Umacr~Ū~UnderBar~_~UnderBrace~⏟~UnderBracket~⎵~UnderParenthesis~⏝~Union~⋃~UnionPlus~⊎~Uogon~Ų~Uopf~𝕌~UpArrow~↑~UpArrowBar~⤒~UpArrowDownArrow~⇅~UpDownArrow~↕~UpEquilibrium~⥮~UpTee~⊥~UpTeeArrow~↥~Uparrow~⇑~Updownarrow~⇕~UpperLeftArrow~↖~UpperRightArrow~↗~Upsi~ϒ~Uring~Ů~Uscr~𝒰~Utilde~Ũ~VDash~⊫~Vbar~⫫~Vcy~В~Vdash~⊩~Vdashl~⫦~Vee~⋁~Verbar~‖~Vert~‖~VerticalBar~∣~VerticalLine~|~VerticalSeparator~❘~VerticalTilde~≀~VeryThinSpace~ ~Vfr~𝔙~Vopf~𝕍~Vscr~𝒱~Vvdash~⊪~Wcirc~Ŵ~Wedge~⋀~Wfr~𝔚~Wopf~𝕎~Wscr~𝒲~Xfr~𝔛~Xopf~𝕏~Xscr~𝒳~YAcy~Я~YIcy~Ї~YUcy~Ю~Ycirc~Ŷ~Ycy~Ы~Yfr~𝔜~Yopf~𝕐~Yscr~𝒴~ZHcy~Ж~Zacute~Ź~Zcaron~Ž~Zcy~З~Zdot~Ż~ZeroWidthSpace~~Zfr~ℨ~Zopf~ℤ~Zscr~𝒵~abreve~ă~ac~∾~acE~∾̳~acd~∿~acy~а~af~~afr~𝔞~aleph~ℵ~amacr~ā~amalg~⨿~andand~⩕~andd~⩜~andslope~⩘~andv~⩚~ange~⦤~angle~∠~angmsd~∡~angmsdaa~⦨~angmsdab~⦩~angmsdac~⦪~angmsdad~⦫~angmsdae~⦬~angmsdaf~⦭~angmsdag~⦮~angmsdah~⦯~angrt~∟~angrtvb~⊾~angrtvbd~⦝~angsph~∢~angst~Å~angzarr~⍼~aogon~ą~aopf~𝕒~ap~≈~apE~⩰~apacir~⩯~ape~≊~apid~≋~approx~≈~approxeq~≊~ascr~𝒶~ast~*~asympeq~≍~awconint~∳~awint~⨑~bNot~⫭~backcong~≌~backepsilon~϶~backprime~‵~backsim~∽~backsimeq~⋍~barvee~⊽~barwed~⌅~barwedge~⌅~bbrk~⎵~bbrktbrk~⎶~bcong~≌~bcy~б~becaus~∵~because~∵~bemptyv~⦰~bepsi~϶~bernou~ℬ~beth~ℶ~between~≬~bfr~𝔟~bigcap~⋂~bigcirc~◯~bigcup~⋃~bigodot~⨀~bigoplus~⨁~bigotimes~⨂~bigsqcup~⨆~bigstar~★~bigtriangledown~▽~bigtriangleup~△~biguplus~⨄~bigvee~⋁~bigwedge~⋀~bkarow~⤍~blacklozenge~⧫~blacksquare~▪~blacktriangle~▴~blacktriangledown~▾~blacktriangleleft~◂~blacktriangleright~▸~blank~␣~blk12~▒~blk14~░~blk34~▓~block~█~bne~=⃥~bnequiv~≡⃥~bnot~⌐~bopf~𝕓~bot~⊥~bottom~⊥~bowtie~⋈~boxDL~╗~boxDR~╔~boxDl~╖~boxDr~╓~boxH~═~boxHD~╦~boxHU~╩~boxHd~╤~boxHu~╧~boxUL~╝~boxUR~╚~boxUl~╜~boxUr~╙~boxV~║~boxVH~╬~boxVL~╣~boxVR~╠~boxVh~╫~boxVl~╢~boxVr~╟~boxbox~⧉~boxdL~╕~boxdR~╒~boxdl~┐~boxdr~┌~boxh~─~boxhD~╥~boxhU~╨~boxhd~┬~boxhu~┴~boxminus~⊟~boxplus~⊞~boxtimes~⊠~boxuL~╛~boxuR~╘~boxul~┘~boxur~└~boxv~│~boxvH~╪~boxvL~╡~boxvR~╞~boxvh~┼~boxvl~┤~boxvr~├~bprime~‵~breve~˘~bscr~𝒷~bsemi~⁏~bsim~∽~bsime~⋍~bsol~\\~bsolb~⧅~bsolhsub~⟈~bullet~•~bump~≎~bumpE~⪮~bumpe~≏~bumpeq~≏~cacute~ć~capand~⩄~capbrcup~⩉~capcap~⩋~capcup~⩇~capdot~⩀~caps~∩︀~caret~⁁~caron~ˇ~ccaps~⩍~ccaron~č~ccirc~ĉ~ccups~⩌~ccupssm~⩐~cdot~ċ~cemptyv~⦲~centerdot~·~cfr~𝔠~chcy~ч~check~✓~checkmark~✓~cir~○~cirE~⧃~circeq~≗~circlearrowleft~↺~circlearrowright~↻~circledR~®~circledS~Ⓢ~circledast~⊛~circledcirc~⊚~circleddash~⊝~cire~≗~cirfnint~⨐~cirmid~⫯~cirscir~⧂~clubsuit~♣~colon~:~colone~≔~coloneq~≔~comma~,~commat~@~comp~∁~compfn~∘~complement~∁~complexes~ℂ~congdot~⩭~conint~∮~copf~𝕔~coprod~∐~copysr~℗~cross~✗~cscr~𝒸~csub~⫏~csube~⫑~csup~⫐~csupe~⫒~ctdot~⋯~cudarrl~⤸~cudarrr~⤵~cuepr~⋞~cuesc~⋟~cularr~↶~cularrp~⤽~cupbrcap~⩈~cupcap~⩆~cupcup~⩊~cupdot~⊍~cupor~⩅~cups~∪︀~curarr~↷~curarrm~⤼~curlyeqprec~⋞~curlyeqsucc~⋟~curlyvee~⋎~curlywedge~⋏~curvearrowleft~↶~curvearrowright~↷~cuvee~⋎~cuwed~⋏~cwconint~∲~cwint~∱~cylcty~⌭~dHar~⥥~daleth~ℸ~dash~‐~dashv~⊣~dbkarow~⤏~dblac~˝~dcaron~ď~dcy~д~dd~ⅆ~ddagger~‡~ddarr~⇊~ddotseq~⩷~demptyv~⦱~dfisht~⥿~dfr~𝔡~dharl~⇃~dharr~⇂~diam~⋄~diamond~⋄~diamondsuit~♦~die~¨~digamma~ϝ~disin~⋲~div~÷~divideontimes~⋇~divonx~⋇~djcy~ђ~dlcorn~⌞~dlcrop~⌍~dollar~$~dopf~𝕕~dot~˙~doteq~≐~doteqdot~≑~dotminus~∸~dotplus~∔~dotsquare~⊡~doublebarwedge~⌆~downarrow~↓~downdownarrows~⇊~downharpoonleft~⇃~downharpoonright~⇂~drbkarow~⤐~drcorn~⌟~drcrop~⌌~dscr~𝒹~dscy~ѕ~dsol~⧶~dstrok~đ~dtdot~⋱~dtri~▿~dtrif~▾~duarr~⇵~duhar~⥯~dwangle~⦦~dzcy~џ~dzigrarr~⟿~eDDot~⩷~eDot~≑~easter~⩮~ecaron~ě~ecir~≖~ecolon~≕~ecy~э~edot~ė~ee~ⅇ~efDot~≒~efr~𝔢~eg~⪚~egs~⪖~egsdot~⪘~el~⪙~elinters~⏧~ell~ℓ~els~⪕~elsdot~⪗~emacr~ē~emptyset~∅~emptyv~∅~emsp13~ ~emsp14~ ~eng~ŋ~eogon~ę~eopf~𝕖~epar~⋕~eparsl~⧣~eplus~⩱~epsi~ε~epsiv~ϵ~eqcirc~≖~eqcolon~≕~eqsim~≂~eqslantgtr~⪖~eqslantless~⪕~equals~=~equest~≟~equivDD~⩸~eqvparsl~⧥~erDot~≓~erarr~⥱~escr~ℯ~esdot~≐~esim~≂~excl~!~expectation~ℰ~exponentiale~ⅇ~fallingdotseq~≒~fcy~ф~female~♀~ffilig~ffi~fflig~ff~ffllig~ffl~ffr~𝔣~filig~fi~fjlig~fj~flat~♭~fllig~fl~fltns~▱~fopf~𝕗~fork~⋔~forkv~⫙~fpartint~⨍~frac13~⅓~frac15~⅕~frac16~⅙~frac18~⅛~frac23~⅔~frac25~⅖~frac35~⅗~frac38~⅜~frac45~⅘~frac56~⅚~frac58~⅝~frac78~⅞~frown~⌢~fscr~𝒻~gE~≧~gEl~⪌~gacute~ǵ~gammad~ϝ~gap~⪆~gbreve~ğ~gcirc~ĝ~gcy~г~gdot~ġ~gel~⋛~geq~≥~geqq~≧~geqslant~⩾~ges~⩾~gescc~⪩~gesdot~⪀~gesdoto~⪂~gesdotol~⪄~gesl~⋛︀~gesles~⪔~gfr~𝔤~gg~≫~ggg~⋙~gimel~ℷ~gjcy~ѓ~gl~≷~glE~⪒~gla~⪥~glj~⪤~gnE~≩~gnap~⪊~gnapprox~⪊~gne~⪈~gneq~⪈~gneqq~≩~gnsim~⋧~gopf~𝕘~grave~`~gscr~ℊ~gsim~≳~gsime~⪎~gsiml~⪐~gtcc~⪧~gtcir~⩺~gtdot~⋗~gtlPar~⦕~gtquest~⩼~gtrapprox~⪆~gtrarr~⥸~gtrdot~⋗~gtreqless~⋛~gtreqqless~⪌~gtrless~≷~gtrsim~≳~gvertneqq~≩︀~gvnE~≩︀~hairsp~ ~half~½~hamilt~ℋ~hardcy~ъ~harrcir~⥈~harrw~↭~hbar~ℏ~hcirc~ĥ~heartsuit~♥~hercon~⊹~hfr~𝔥~hksearow~⤥~hkswarow~⤦~hoarr~⇿~homtht~∻~hookleftarrow~↩~hookrightarrow~↪~hopf~𝕙~horbar~―~hscr~𝒽~hslash~ℏ~hstrok~ħ~hybull~⁃~hyphen~‐~ic~~icy~и~iecy~е~iff~⇔~ifr~𝔦~ii~ⅈ~iiiint~⨌~iiint~∭~iinfin~⧜~iiota~℩~ijlig~ij~imacr~ī~imagline~ℐ~imagpart~ℑ~imath~ı~imof~⊷~imped~Ƶ~in~∈~incare~℅~infintie~⧝~inodot~ı~intcal~⊺~integers~ℤ~intercal~⊺~intlarhk~⨗~intprod~⨼~iocy~ё~iogon~į~iopf~𝕚~iprod~⨼~iscr~𝒾~isinE~⋹~isindot~⋵~isins~⋴~isinsv~⋳~isinv~∈~it~~itilde~ĩ~iukcy~і~jcirc~ĵ~jcy~й~jfr~𝔧~jmath~ȷ~jopf~𝕛~jscr~𝒿~jsercy~ј~jukcy~є~kappav~ϰ~kcedil~ķ~kcy~к~kfr~𝔨~kgreen~ĸ~khcy~х~kjcy~ќ~kopf~𝕜~kscr~𝓀~lAarr~⇚~lAtail~⤛~lBarr~⤎~lE~≦~lEg~⪋~lHar~⥢~lacute~ĺ~laemptyv~⦴~lagran~ℒ~langd~⦑~langle~⟨~lap~⪅~larrb~⇤~larrbfs~⤟~larrfs~⤝~larrhk~↩~larrlp~↫~larrpl~⤹~larrsim~⥳~larrtl~↢~lat~⪫~latail~⤙~late~⪭~lates~⪭︀~lbarr~⤌~lbbrk~❲~lbrace~{~lbrack~[~lbrke~⦋~lbrksld~⦏~lbrkslu~⦍~lcaron~ľ~lcedil~ļ~lcub~{~lcy~л~ldca~⤶~ldquor~„~ldrdhar~⥧~ldrushar~⥋~ldsh~↲~leftarrow~←~leftarrowtail~↢~leftharpoondown~↽~leftharpoonup~↼~leftleftarrows~⇇~leftrightarrow~↔~leftrightarrows~⇆~leftrightharpoons~⇋~leftrightsquigarrow~↭~leftthreetimes~⋋~leg~⋚~leq~≤~leqq~≦~leqslant~⩽~les~⩽~lescc~⪨~lesdot~⩿~lesdoto~⪁~lesdotor~⪃~lesg~⋚︀~lesges~⪓~lessapprox~⪅~lessdot~⋖~lesseqgtr~⋚~lesseqqgtr~⪋~lessgtr~≶~lesssim~≲~lfisht~⥼~lfr~𝔩~lg~≶~lgE~⪑~lhard~↽~lharu~↼~lharul~⥪~lhblk~▄~ljcy~љ~ll~≪~llarr~⇇~llcorner~⌞~llhard~⥫~lltri~◺~lmidot~ŀ~lmoust~⎰~lmoustache~⎰~lnE~≨~lnap~⪉~lnapprox~⪉~lne~⪇~lneq~⪇~lneqq~≨~lnsim~⋦~loang~⟬~loarr~⇽~lobrk~⟦~longleftarrow~⟵~longleftrightarrow~⟷~longmapsto~⟼~longrightarrow~⟶~looparrowleft~↫~looparrowright~↬~lopar~⦅~lopf~𝕝~loplus~⨭~lotimes~⨴~lowbar~_~lozenge~◊~lozf~⧫~lpar~(~lparlt~⦓~lrarr~⇆~lrcorner~⌟~lrhar~⇋~lrhard~⥭~lrtri~⊿~lscr~𝓁~lsh~↰~lsim~≲~lsime~⪍~lsimg~⪏~lsqb~[~lsquor~‚~lstrok~ł~ltcc~⪦~ltcir~⩹~ltdot~⋖~lthree~⋋~ltimes~⋉~ltlarr~⥶~ltquest~⩻~ltrPar~⦖~ltri~◃~ltrie~⊴~ltrif~◂~lurdshar~⥊~luruhar~⥦~lvertneqq~≨︀~lvnE~≨︀~mDDot~∺~male~♂~malt~✠~maltese~✠~map~↦~mapsto~↦~mapstodown~↧~mapstoleft~↤~mapstoup~↥~marker~▮~mcomma~⨩~mcy~м~measuredangle~∡~mfr~𝔪~mho~℧~mid~∣~midast~*~midcir~⫰~minusb~⊟~minusd~∸~minusdu~⨪~mlcp~⫛~mldr~…~mnplus~∓~models~⊧~mopf~𝕞~mp~∓~mscr~𝓂~mstpos~∾~multimap~⊸~mumap~⊸~nGg~⋙̸~nGt~≫⃒~nGtv~≫̸~nLeftarrow~⇍~nLeftrightarrow~⇎~nLl~⋘̸~nLt~≪⃒~nLtv~≪̸~nRightarrow~⇏~nVDash~⊯~nVdash~⊮~nacute~ń~nang~∠⃒~nap~≉~napE~⩰̸~napid~≋̸~napos~ʼn~napprox~≉~natur~♮~natural~♮~naturals~ℕ~nbump~≎̸~nbumpe~≏̸~ncap~⩃~ncaron~ň~ncedil~ņ~ncong~≇~ncongdot~⩭̸~ncup~⩂~ncy~н~neArr~⇗~nearhk~⤤~nearr~↗~nearrow~↗~nedot~≐̸~nequiv~≢~nesear~⤨~nesim~≂̸~nexist~∄~nexists~∄~nfr~𝔫~ngE~≧̸~nge~≱~ngeq~≱~ngeqq~≧̸~ngeqslant~⩾̸~nges~⩾̸~ngsim~≵~ngt~≯~ngtr~≯~nhArr~⇎~nharr~↮~nhpar~⫲~nis~⋼~nisd~⋺~niv~∋~njcy~њ~nlArr~⇍~nlE~≦̸~nlarr~↚~nldr~‥~nle~≰~nleftarrow~↚~nleftrightarrow~↮~nleq~≰~nleqq~≦̸~nleqslant~⩽̸~nles~⩽̸~nless~≮~nlsim~≴~nlt~≮~nltri~⋪~nltrie~⋬~nmid~∤~nopf~𝕟~notinE~⋹̸~notindot~⋵̸~notinva~∉~notinvb~⋷~notinvc~⋶~notni~∌~notniva~∌~notnivb~⋾~notnivc~⋽~npar~∦~nparallel~∦~nparsl~⫽⃥~npart~∂̸~npolint~⨔~npr~⊀~nprcue~⋠~npre~⪯̸~nprec~⊀~npreceq~⪯̸~nrArr~⇏~nrarr~↛~nrarrc~⤳̸~nrarrw~↝̸~nrightarrow~↛~nrtri~⋫~nrtrie~⋭~nsc~⊁~nsccue~⋡~nsce~⪰̸~nscr~𝓃~nshortmid~∤~nshortparallel~∦~nsim~≁~nsime~≄~nsimeq~≄~nsmid~∤~nspar~∦~nsqsube~⋢~nsqsupe~⋣~nsubE~⫅̸~nsube~⊈~nsubset~⊂⃒~nsubseteq~⊈~nsubseteqq~⫅̸~nsucc~⊁~nsucceq~⪰̸~nsup~⊅~nsupE~⫆̸~nsupe~⊉~nsupset~⊃⃒~nsupseteq~⊉~nsupseteqq~⫆̸~ntgl~≹~ntlg~≸~ntriangleleft~⋪~ntrianglelefteq~⋬~ntriangleright~⋫~ntrianglerighteq~⋭~num~#~numero~№~numsp~ ~nvDash~⊭~nvHarr~⤄~nvap~≍⃒~nvdash~⊬~nvge~≥⃒~nvgt~>⃒~nvinfin~⧞~nvlArr~⤂~nvle~≤⃒~nvlt~<⃒~nvltrie~⊴⃒~nvrArr~⤃~nvrtrie~⊵⃒~nvsim~∼⃒~nwArr~⇖~nwarhk~⤣~nwarr~↖~nwarrow~↖~nwnear~⤧~oS~Ⓢ~oast~⊛~ocir~⊚~ocy~о~odash~⊝~odblac~ő~odiv~⨸~odot~⊙~odsold~⦼~ofcir~⦿~ofr~𝔬~ogon~˛~ogt~⧁~ohbar~⦵~ohm~Ω~oint~∮~olarr~↺~olcir~⦾~olcross~⦻~olt~⧀~omacr~ō~omid~⦶~ominus~⊖~oopf~𝕠~opar~⦷~operp~⦹~orarr~↻~ord~⩝~order~ℴ~orderof~ℴ~origof~⊶~oror~⩖~orslope~⩗~orv~⩛~oscr~ℴ~osol~⊘~otimesas~⨶~ovbar~⌽~par~∥~parallel~∥~parsim~⫳~parsl~⫽~pcy~п~percnt~%~period~.~pertenk~‱~pfr~𝔭~phiv~ϕ~phmmat~ℳ~phone~☎~pitchfork~⋔~planck~ℏ~planckh~ℎ~plankv~ℏ~plus~+~plusacir~⨣~plusb~⊞~pluscir~⨢~plusdo~∔~plusdu~⨥~pluse~⩲~plussim~⨦~plustwo~⨧~pm~±~pointint~⨕~popf~𝕡~pr~≺~prE~⪳~prap~⪷~prcue~≼~pre~⪯~prec~≺~precapprox~⪷~preccurlyeq~≼~preceq~⪯~precnapprox~⪹~precneqq~⪵~precnsim~⋨~precsim~≾~primes~ℙ~prnE~⪵~prnap~⪹~prnsim~⋨~profalar~⌮~profline~⌒~profsurf~⌓~propto~∝~prsim~≾~prurel~⊰~pscr~𝓅~puncsp~ ~qfr~𝔮~qint~⨌~qopf~𝕢~qprime~⁗~qscr~𝓆~quaternions~ℍ~quatint~⨖~quest~?~questeq~≟~rAarr~⇛~rAtail~⤜~rBarr~⤏~rHar~⥤~race~∽̱~racute~ŕ~raemptyv~⦳~rangd~⦒~range~⦥~rangle~⟩~rarrap~⥵~rarrb~⇥~rarrbfs~⤠~rarrc~⤳~rarrfs~⤞~rarrhk~↪~rarrlp~↬~rarrpl~⥅~rarrsim~⥴~rarrtl~↣~rarrw~↝~ratail~⤚~ratio~∶~rationals~ℚ~rbarr~⤍~rbbrk~❳~rbrace~}~rbrack~]~rbrke~⦌~rbrksld~⦎~rbrkslu~⦐~rcaron~ř~rcedil~ŗ~rcub~}~rcy~р~rdca~⤷~rdldhar~⥩~rdquor~”~rdsh~↳~realine~ℛ~realpart~ℜ~reals~ℝ~rect~▭~rfisht~⥽~rfr~𝔯~rhard~⇁~rharu~⇀~rharul~⥬~rhov~ϱ~rightarrow~→~rightarrowtail~↣~rightharpoondown~⇁~rightharpoonup~⇀~rightleftarrows~⇄~rightleftharpoons~⇌~rightrightarrows~⇉~rightsquigarrow~↝~rightthreetimes~⋌~ring~˚~risingdotseq~≓~rlarr~⇄~rlhar~⇌~rmoust~⎱~rmoustache~⎱~rnmid~⫮~roang~⟭~roarr~⇾~robrk~⟧~ropar~⦆~ropf~𝕣~roplus~⨮~rotimes~⨵~rpar~)~rpargt~⦔~rppolint~⨒~rrarr~⇉~rscr~𝓇~rsh~↱~rsqb~]~rsquor~’~rthree~⋌~rtimes~⋊~rtri~▹~rtrie~⊵~rtrif~▸~rtriltri~⧎~ruluhar~⥨~rx~℞~sacute~ś~sc~≻~scE~⪴~scap~⪸~sccue~≽~sce~⪰~scedil~ş~scirc~ŝ~scnE~⪶~scnap~⪺~scnsim~⋩~scpolint~⨓~scsim~≿~scy~с~sdotb~⊡~sdote~⩦~seArr~⇘~searhk~⤥~searr~↘~searrow~↘~semi~;~seswar~⤩~setminus~∖~setmn~∖~sext~✶~sfr~𝔰~sfrown~⌢~sharp~♯~shchcy~щ~shcy~ш~shortmid~∣~shortparallel~∥~sigmav~ς~simdot~⩪~sime~≃~simeq~≃~simg~⪞~simgE~⪠~siml~⪝~simlE~⪟~simne~≆~simplus~⨤~simrarr~⥲~slarr~←~smallsetminus~∖~smashp~⨳~smeparsl~⧤~smid~∣~smile~⌣~smt~⪪~smte~⪬~smtes~⪬︀~softcy~ь~sol~/~solb~⧄~solbar~⌿~sopf~𝕤~spadesuit~♠~spar~∥~sqcap~⊓~sqcaps~⊓︀~sqcup~⊔~sqcups~⊔︀~sqsub~⊏~sqsube~⊑~sqsubset~⊏~sqsubseteq~⊑~sqsup~⊐~sqsupe~⊒~sqsupset~⊐~sqsupseteq~⊒~squ~□~square~□~squarf~▪~squf~▪~srarr~→~sscr~𝓈~ssetmn~∖~ssmile~⌣~sstarf~⋆~star~☆~starf~★~straightepsilon~ϵ~straightphi~ϕ~strns~¯~subE~⫅~subdot~⪽~subedot~⫃~submult~⫁~subnE~⫋~subne~⊊~subplus~⪿~subrarr~⥹~subset~⊂~subseteq~⊆~subseteqq~⫅~subsetneq~⊊~subsetneqq~⫋~subsim~⫇~subsub~⫕~subsup~⫓~succ~≻~succapprox~⪸~succcurlyeq~≽~succeq~⪰~succnapprox~⪺~succneqq~⪶~succnsim~⋩~succsim~≿~sung~♪~supE~⫆~supdot~⪾~supdsub~⫘~supedot~⫄~suphsol~⟉~suphsub~⫗~suplarr~⥻~supmult~⫂~supnE~⫌~supne~⊋~supplus~⫀~supset~⊃~supseteq~⊇~supseteqq~⫆~supsetneq~⊋~supsetneqq~⫌~supsim~⫈~supsub~⫔~supsup~⫖~swArr~⇙~swarhk~⤦~swarr~↙~swarrow~↙~swnwar~⤪~target~⌖~tbrk~⎴~tcaron~ť~tcedil~ţ~tcy~т~tdot~⃛~telrec~⌕~tfr~𝔱~therefore~∴~thetav~ϑ~thickapprox~≈~thicksim~∼~thkap~≈~thksim~∼~timesb~⊠~timesbar~⨱~timesd~⨰~tint~∭~toea~⤨~top~⊤~topbot~⌶~topcir~⫱~topf~𝕥~topfork~⫚~tosa~⤩~tprime~‴~triangle~▵~triangledown~▿~triangleleft~◃~trianglelefteq~⊴~triangleq~≜~triangleright~▹~trianglerighteq~⊵~tridot~◬~trie~≜~triminus~⨺~triplus~⨹~trisb~⧍~tritime~⨻~trpezium~⏢~tscr~𝓉~tscy~ц~tshcy~ћ~tstrok~ŧ~twixt~≬~twoheadleftarrow~↞~twoheadrightarrow~↠~uHar~⥣~ubrcy~ў~ubreve~ŭ~ucy~у~udarr~⇅~udblac~ű~udhar~⥮~ufisht~⥾~ufr~𝔲~uharl~↿~uharr~↾~uhblk~▀~ulcorn~⌜~ulcorner~⌜~ulcrop~⌏~ultri~◸~umacr~ū~uogon~ų~uopf~𝕦~uparrow~↑~updownarrow~↕~upharpoonleft~↿~upharpoonright~↾~uplus~⊎~upsi~υ~upuparrows~⇈~urcorn~⌝~urcorner~⌝~urcrop~⌎~uring~ů~urtri~◹~uscr~𝓊~utdot~⋰~utilde~ũ~utri~▵~utrif~▴~uuarr~⇈~uwangle~⦧~vArr~⇕~vBar~⫨~vBarv~⫩~vDash~⊨~vangrt~⦜~varepsilon~ϵ~varkappa~ϰ~varnothing~∅~varphi~ϕ~varpi~ϖ~varpropto~∝~varr~↕~varrho~ϱ~varsigma~ς~varsubsetneq~⊊︀~varsubsetneqq~⫋︀~varsupsetneq~⊋︀~varsupsetneqq~⫌︀~vartheta~ϑ~vartriangleleft~⊲~vartriangleright~⊳~vcy~в~vdash~⊢~vee~∨~veebar~⊻~veeeq~≚~vellip~⋮~verbar~|~vert~|~vfr~𝔳~vltri~⊲~vnsub~⊂⃒~vnsup~⊃⃒~vopf~𝕧~vprop~∝~vrtri~⊳~vscr~𝓋~vsubnE~⫋︀~vsubne~⊊︀~vsupnE~⫌︀~vsupne~⊋︀~vzigzag~⦚~wcirc~ŵ~wedbar~⩟~wedge~∧~wedgeq~≙~wfr~𝔴~wopf~𝕨~wp~℘~wr~≀~wreath~≀~wscr~𝓌~xcap~⋂~xcirc~◯~xcup~⋃~xdtri~▽~xfr~𝔵~xhArr~⟺~xharr~⟷~xlArr~⟸~xlarr~⟵~xmap~⟼~xnis~⋻~xodot~⨀~xopf~𝕩~xoplus~⨁~xotime~⨂~xrArr~⟹~xrarr~⟶~xscr~𝓍~xsqcup~⨆~xuplus~⨄~xutri~△~xvee~⋁~xwedge~⋀~yacy~я~ycirc~ŷ~ycy~ы~yfr~𝔶~yicy~ї~yopf~𝕪~yscr~𝓎~yucy~ю~zacute~ź~zcaron~ž~zcy~з~zdot~ż~zeetrf~ℨ~zfr~𝔷~zhcy~ж~zigrarr~⇝~zopf~𝕫~zscr~𝓏~~AMP~&~COPY~©~GT~>~LT~<~QUOT~"~REG~®',le.html4);var $a={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376},Da=String.fromCodePoint||function(t){return String.fromCharCode(Math.floor((t-65536)/1024)+55296,(t-65536)%1024+56320)},ce=function(){return ce=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++){e=arguments[r];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])}return t},ce.apply(this,arguments)},Ba=ce(ce({},le),{all:le.html5}),Ua={scope:"body",level:"all"},rt=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+);/g,nt=/&(?:#\d+|#[xX][\da-fA-F]+|[0-9a-zA-Z]+)[;=]?/g,dr={xml:{strict:rt,attribute:nt,body:tt.xml},html4:{strict:rt,attribute:nt,body:tt.html4},html5:{strict:rt,attribute:nt,body:tt.html5}},ja=ce(ce({},dr),{all:dr.html5}),en=String.fromCharCode,za=en(65533);function _a(t,e,r,n){var i=t,s=t[t.length-1];if(r&&s==="=")i=t;else if(n&&s!==";")i=t;else{var o=e[t];if(o)i=o;else if(t[0]==="&"&&t[1]==="#"){var a=t[2],c=a=="x"||a=="X"?parseInt(t.substr(3),16):parseInt(t.substr(2));i=c>=1114111?za:c>65535?Da(c):en($a[c]||c)}}return i}function gr(t,e){var r=e===void 0?Ua:e,n=r.level,i=n===void 0?"all":n,s=r.scope,o=s===void 0?i==="xml"?"strict":"body":s;if(!t)return"";var a=ja[i][o],c=Ba[i].entities,l=o==="attribute",d=o==="strict";return t.replace(a,function(h){return _a(h,c,l,d)})}var Fa={strictlyTwoElementsInRangeArrays:!1,progressFn:null};function Ve(t,e){if(!Array.isArray(t)||!t.length)return t;let r={...Fa,...e},n,i;if(r.strictlyTwoElementsInRangeArrays&&!t.every((a,c)=>!Array.isArray(a)||a.length!==2?(n=c,i=a.length,!1):!0))throw new TypeError(`ranges-sort: [THROW_ID_03] The first argument should be an array and must consist of arrays which are natural number indexes representing TWO string index ranges. However, ${n}th range (${JSON.stringify(t[n],null,4)}) has not two but ${i} elements!`);if(!t.every((a,c)=>!Array.isArray(a)||!Number.isInteger(a[0])||a[0]<0||!Number.isInteger(a[1])||a[1]<0?(n=c,!1):!0))throw new TypeError(`ranges-sort: [THROW_ID_04] The first argument should be an array and must consist of arrays which are natural number indexes representing string index ranges. However, ${n}th range (${JSON.stringify(t[n],null,4)}) does not consist of only natural numbers!`);let s=t.length**2,o=0;return Array.from(t).sort((a,c)=>(r.progressFn&&(o+=1,r.progressFn(Math.floor(o*100/s))),a[0]===c[0]?a[1]<c[1]?-1:a[1]>c[1]?1:0:a[0]<c[0]?-1:1))}var fr={mergeType:1,progressFn:null,joinRangesThatTouchEdges:!0};function Ha(t,e){function r(l){return!!l&&typeof l=="object"&&!Array.isArray(l)}if(!Array.isArray(t)||!t.length)return null;let n;if(e)if(r(e)){if(n={...fr,...e},n.progressFn&&r(n.progressFn)&&!Object.keys(n.progressFn).length)n.progressFn=null;else if(n.progressFn&&typeof n.progressFn!="function")throw new Error(`ranges-merge: [THROW_ID_01] opts.progressFn must be a function! It was given of a type: "${typeof n.progressFn}", equal to ${JSON.stringify(n.progressFn,null,4)}`);if(![1,2,"1","2"].includes(n.mergeType))throw new Error(`ranges-merge: [THROW_ID_02] opts.mergeType was customised to a wrong thing! It was given of a type: "${typeof n.mergeType}", equal to ${JSON.stringify(n.mergeType,null,4)}`);if(typeof n.joinRangesThatTouchEdges!="boolean")throw new Error(`ranges-merge: [THROW_ID_04] opts.joinRangesThatTouchEdges was customised to a wrong thing! It was given of a type: "${typeof n.joinRangesThatTouchEdges}", equal to ${JSON.stringify(n.joinRangesThatTouchEdges,null,4)}`)}else throw new Error(`emlint: [THROW_ID_03] the second input argument must be a plain object. It was given as:
|
|
2
|
+
${JSON.stringify(e,null,4)} (type ${typeof e})`);else n={...fr};let i=t.filter(l=>Array.isArray(l)).map(l=>[...l]).filter(l=>l[2]!==void 0||l[0]!==l[1]),s,o,a;n.progressFn?s=Ve(i,{progressFn:l=>{a=Math.floor(l/5),a!==o&&(o=a,n.progressFn(a))}}):s=Ve(i);let c=s.length-1;for(let l=c;l>0;l--)n.progressFn&&(a=Math.floor((1-l/c)*78)+21,a!==o&&a>o&&(o=a,n.progressFn(a))),(s[l][0]<=s[l-1][0]||!n.joinRangesThatTouchEdges&&s[l][0]<s[l-1][1]||n.joinRangesThatTouchEdges&&s[l][0]<=s[l-1][1])&&(s[l-1][0]=Math.min(s[l][0],s[l-1][0]),s[l-1][1]=Math.max(s[l][1],s[l-1][1]),s[l][2]!==void 0&&(s[l-1][0]>=s[l][0]||s[l-1][1]<=s[l][1])&&s[l-1][2]!==null&&(s[l][2]===null&&s[l-1][2]!==null?s[l-1][2]=null:s[l-1][2]!=null?+n.mergeType==2&&s[l-1][0]===s[l][0]?s[l-1][2]=s[l][2]:s[l-1][2]+=s[l][2]:s[l-1][2]=s[l][2]),s.splice(l,1),l=s.length);return s.length?s:null}var Ma={},Va=Ma.NODE_ENV==="production",pr="Invariant failed";function Ga(t,e){if(!t){if(Va)throw new Error(pr);var r=pr;throw new Error(r)}}function Wa(t,e,r){if(arguments.length===0)throw new Error("ranges-apply: [THROW_ID_01] inputs missing!");if(typeof t!="string")throw new TypeError(`ranges-apply: [THROW_ID_02] first input argument must be a string! Currently it's: ${typeof t}, equal to: ${JSON.stringify(t,null,4)}`);if(e&&!Array.isArray(e))throw new TypeError(`ranges-apply: [THROW_ID_03] second input argument must be an array (or null)! Currently it's: ${typeof e}, equal to: ${JSON.stringify(e,null,4)}`);if(!e?.filter(o=>o).length)return t;let n;Array.isArray(e)&&Number.isInteger(e[0])&&Number.isInteger(e[1])?n=[Array.from(e)]:n=Array.from(e),n.length,n.filter(o=>o).forEach((o,a)=>{if(!Array.isArray(o))throw new TypeError(`ranges-apply: [THROW_ID_05] ranges array, second input arg., has ${a}th element not an array: ${JSON.stringify(o,null,4)}, which is ${typeof o}`);if(!Number.isInteger(o[0])){if(!Number.isInteger(+o[0])||+o[0]<0)throw new TypeError(`ranges-apply: [THROW_ID_06] ranges array, second input arg. has ${a}th element, array ${JSON.stringify(o,null,0)}. Its first element is not an integer, string index, but ${typeof o[0]}, equal to: ${JSON.stringify(o[0],null,4)}.`);n[a][0]=+n[a][0]}if(!Number.isInteger(o[1])){if(!Number.isInteger(+o[1])||+o[1]<0)throw new TypeError(`ranges-apply: [THROW_ID_07] ranges array, second input arg. has ${a}th element, array ${JSON.stringify(o,null,0)}. Its second element is not an integer, string index, but ${typeof o[1]}, equal to: ${JSON.stringify(o[1],null,4)}.`);n[a][1]=+n[a][1]}});let i=Ha(n,{progressFn:o=>{}});Ga(i);let s=i.length;if(s>0){let o=t.slice(i[s-1][1]);t=i.reduce((a,c,l,d)=>{let h=l===0?0:d[l-1][1],g=d[l][0];return`${a}${t.slice(h,g)}${d[l][2]||""}`},""),t+=o}return t}function it(t,e=1){let r=" ";function n(s){return Array.from(s).reverse().join("")}function i(s,o,a){let c=a?`
|
|
3
|
+
`:"\r",l=a?"\r":`
|
|
4
|
+
`;if(!s)return s;let d=0,h="";for(let g=0,f=s.length;g<f;g++)(s[g]===c||s[g]===l&&s[g-1]!==c)&&d++,`\r
|
|
5
|
+
`.includes(s[g])||s[g]===r?s[g]===r?h+=s[g]:s[g]===c?d<=o&&(h+=s[g],s[g+1]===l&&(h+=s[g+1],g++)):s[g]===l&&s?.[g-1]!==c&&d<=o&&(h+=s[g]):!s[g+1]&&!d&&(h+=" ");return h}if(typeof t=="string"&&t.length){let s=1;typeof+e=="number"&&Number.isInteger(+e)&&+e>=0&&(s=+e);let o="",a="";if(!t.trim())o=t;else if(!t[0].trim()){for(let c=0,l=t.length;c<l;c++)if(t[c].trim()){o=t.slice(0,c);break}}if(t.trim()&&(t.slice(-1).trim()===""||t.slice(-1)===r)){for(let c=t.length;c--;)if(t[c].trim()){a=t.slice(c+1);break}}return`${i(o,s,!1)}${t.trim()}${n(i(n(a),s,!0))}`}return t}var mr={mergeType:1,progressFn:null,joinRangesThatTouchEdges:!0};function Ka(t,e){function r(l){return!!l&&typeof l=="object"&&!Array.isArray(l)}if(!Array.isArray(t)||!t.length)return null;let n;if(e)if(r(e)){if(n={...mr,...e},n.progressFn&&r(n.progressFn)&&!Object.keys(n.progressFn).length)n.progressFn=null;else if(n.progressFn&&typeof n.progressFn!="function")throw new Error(`ranges-merge: [THROW_ID_01] resolvedOpts.progressFn must be a function! It was given of a type: "${typeof n.progressFn}", equal to ${JSON.stringify(n.progressFn,null,4)}`);if(![1,2,"1","2"].includes(n.mergeType))throw new Error(`ranges-merge: [THROW_ID_02] resolvedOpts.mergeType was customised to a wrong thing! It was given of a type: "${typeof n.mergeType}", equal to ${JSON.stringify(n.mergeType,null,4)}`);if(typeof n.joinRangesThatTouchEdges!="boolean")throw new Error(`ranges-merge: [THROW_ID_04] resolvedOpts.joinRangesThatTouchEdges was customised to a wrong thing! It was given of a type: "${typeof n.joinRangesThatTouchEdges}", equal to ${JSON.stringify(n.joinRangesThatTouchEdges,null,4)}`)}else throw new Error(`ranges-merge: [THROW_ID_03] the second input argument must be a plain object. It was given as:
|
|
6
|
+
${JSON.stringify(e,null,4)} (type ${typeof e})`);else n={...mr};let i=t.filter(l=>Array.isArray(l)).map(l=>[...l]).filter(l=>l[2]!==void 0||l[0]!==l[1]),s,o,a;n.progressFn?s=Ve(i,{progressFn:l=>{a=Math.floor(l/5),a!==o&&(o=a,n.progressFn!=null&&n.progressFn(a))}}):s=Ve(i);let c=s.length-1;for(let l=c;l>0;l--)n.progressFn&&(a=Math.floor((1-l/c)*78)+21,a!==o&&a>o&&(o=a,n.progressFn(a))),(s[l][0]<=s[l-1][0]||!n.joinRangesThatTouchEdges&&s[l][0]<s[l-1][1]||n.joinRangesThatTouchEdges&&s[l][0]<=s[l-1][1])&&(s[l-1][0]=Math.min(s[l][0],s[l-1][0]),s[l-1][1]=Math.max(s[l][1],s[l-1][1]),s[l][2]!==void 0&&(s[l-1][0]>=s[l][0]||s[l-1][1]<=s[l][1])&&s[l-1][2]!==null&&(s[l][2]===null&&s[l-1][2]!==null?s[l-1][2]=null:s[l-1][2]!=null?+(n||{})?.mergeType==2&&s[l-1][0]===s[l][0]?s[l-1][2]=s[l][2]:s[l-1][2]+=s[l][2]:s[l-1][2]=s[l][2]),s.splice(l,1),l=s.length);return s.length?s:null}var Ja={limitToBeAddedWhitespace:!1,limitLinebreaksCount:1,mergeType:1},Qa=class{constructor(e){let r={...Ja,...e};if(r.mergeType&&r.mergeType!==1&&r.mergeType!==2)if(ee(r.mergeType)&&r.mergeType.trim()==="1")r.mergeType=1;else if(ee(r.mergeType)&&r.mergeType.trim()==="2")r.mergeType=2;else throw new Error(`ranges-push: [THROW_ID_02] opts.mergeType was customised to a wrong thing! It was given of a type: "${typeof r.mergeType}", equal to ${JSON.stringify(r.mergeType,null,4)}`);this.opts=r,this.ranges=[]}ranges;opts;add(e,r,n){if(e==null&&r==null)return;if(V(e)&&!V(r)){if(Array.isArray(e)){if(e.length){if(e.some(o=>Array.isArray(o))){e.forEach(o=>{Array.isArray(o)&&this.add(...o)});return}e.length&&X(+e[0])&&X(+e[1])&&this.add(...e)}return}throw new TypeError(`ranges-push/Ranges/add(): [THROW_ID_12] the first input argument, "from" is set (${JSON.stringify(e,null,0)}) but second-one, "to" is not (${JSON.stringify(r,null,0)})`)}else if(!V(e)&&V(r))throw new TypeError(`ranges-push/Ranges/add(): [THROW_ID_13] the second input argument, "to" is set (${JSON.stringify(r,null,0)}) but first-one, "from" is not (${JSON.stringify(e,null,0)})`);let i=+e,s=+r;if(X(i)&&X(s)){if(V(n)&&!ee(n)&&!Ci(n))throw new TypeError(`ranges-push/Ranges/add(): [THROW_ID_08] The third argument, the value to add, was given not as string but ${typeof n}, equal to:
|
|
7
|
+
${JSON.stringify(n,null,4)}`);if(V(this.ranges)&&Array.isArray(this.last())&&i===this.last()[1]){if(this.last()[1]=s,this.last()[2],this.last()[2]!==null&&V(n)){let o=this.last()[2]&&this.last()[2].length&&(!this.opts?.mergeType||this.opts.mergeType===1)?`${this.last()[2]}${n}`:n;this.opts.limitToBeAddedWhitespace&&(o=it(o,this.opts.limitLinebreaksCount)),ee(o)&&!o.length||(this.last()[2]=o)}}else{this.ranges||(this.ranges=[]);let o=n!==void 0&&!(ee(n)&&!n.length)?[i,s,n&&this.opts.limitToBeAddedWhitespace?it(n,this.opts.limitLinebreaksCount):n]:[i,s];this.ranges.push(o)}}else throw X(i)&&i>=0?new TypeError(`ranges-push/Ranges/add(): [THROW_ID_10] "to" value, the second input argument, must be a natural number or zero! Currently it's of a type "${typeof s}" equal to: ${JSON.stringify(s,null,4)}`):new TypeError(`ranges-push/Ranges/add(): [THROW_ID_09] "from" value, the first input argument, must be a natural number or zero! Currently it's of a type "${typeof i}" equal to: ${JSON.stringify(i,null,4)}`)}push(e,r,n){this.add(e,r,n)}current(){return Array.isArray(this.ranges)&&this.ranges.length?(this.ranges=Ka(this.ranges,{mergeType:this.opts.mergeType}),this.ranges&&this.opts.limitToBeAddedWhitespace?this.ranges.map(e=>V(e[2])?[e[0],e[1],it(e[2],this.opts.limitLinebreaksCount)]:e):this.ranges):null}wipe(){this.ranges=[]}replace(e){if(Array.isArray(e)&&e.length)if(Array.isArray(e[0])&&X(e[0][0]))this.ranges=Array.from(e);else throw new Error(`ranges-push/Ranges/replace(): [THROW_ID_11] Single range was given but we expected array of arrays! The first element, ${JSON.stringify(e[0],null,4)} should be an array and its first element should be an integer, a string index.`);else this.ranges=[]}last(){return Array.isArray(this.ranges)&&this.ranges.length?this.ranges[this.ranges.length-1]:null}};_r();var st=" ";function Xa({str:t,idx:e=0,stopAtNewlines:r=!1,stopAtRawNbsp:n=!1}){if(typeof t!="string"||!t.length||((!e||typeof e!="number")&&(e=0),!t[e+1]))return null;if(t[e+1]&&(t[e+1].trim()||r&&`
|
|
8
|
+
\r`.includes(t[e+1])||n&&t[e+1]===st))return e+1;if(t[e+2]&&(t[e+2].trim()||r&&`
|
|
9
|
+
\r`.includes(t[e+2])||n&&t[e+2]===st))return e+2;for(let i=e+1,s=t.length;i<s;i++)if(t[i].trim()||r&&`
|
|
10
|
+
\r`.includes(t[i])||n&&t[i]===st)return i;return null}function U(t,e=0){return Xa({str:t,idx:e,stopAtNewlines:!1,stopAtRawNbsp:!1})}function Za(t){return/[-_A-Za-z0-9]/.test(t)}function yr(t,e){if(!t)return[];if(Array.isArray(t))return t.filter(r=>typeof r=="string"&&r.trim());if(typeof t=="string")return t.trim()?[t]:[];throw new TypeError(`string-strip-html/stripHtml(): [THROW_ID_05] ${e} must be array containing zero or more strings or something falsey. Currently it's equal to: ${t}, that a type of ${typeof t}.`)}function qe(t,e,r,n){for(let i=e,s=t.length;i<s;i++){if(t.startsWith(r,i))return!0;if(t.startsWith(n,i))return!1}return!1}function br(t,e,r){return t?.quotes,t?.quotes?.value&&qe(e,r+1,t.quotes.value,">"),t?.quotes?.next,qe(e,t?.quotes?.next-1,t?.quotes?.value,">"),!t?.quotes||!qe(e,r+1,t.quotes.value,">")&&t?.quotes?.next!==-1&&qe(e,t?.quotes?.next-1,t?.quotes?.value,">")}function Ya(t,e){return(e.match(new RegExp(t,"g"))||[]).length}var ye=new Set(["!doctype","abbr","address","area","article","aside","audio","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","doctype","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","math","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","param","picture","pre","progress","rb","rp","rt","rtc","ruby","samp","script","section","select","slot","small","source","span","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","ul","var","video","wbr","xml"]),at=new Set(["a","b","i","p","q","s","u"]),ot=new Set([".",",",";","!","?"]),vr=new Set([".",",","?",";",")","…",'"',"»"]),eo=new Set(["a","abbr","acronym","audio","b","bdi","bdo","big","button","canvas","cite","code","data","datalist","del","dfn","em","embed","i","iframe","input","ins","kbd","label","map","mark","meter","noscript","object","output","picture","progress","q","ruby","s","samp","select","slot","small","span","strong","sub","sup","svg","template","textarea","time","u","tt","var","video","wbr"]),wr={ignoreTags:[],ignoreTagsWithTheirContents:[],onlyStripTags:[],stripTogetherWithTheirContents:["script","style","xml"],skipHtmlDecoding:!1,trimOnlySpaces:!1,stripRecognisedHTMLOnly:!1,dumpLinkHrefsNearby:{enabled:!1,putOnNewLine:!1,wrapHeads:"",wrapTails:""},ignoreIndentations:!1,cb:null,reportProgressFunc:null,reportProgressFuncFrom:0,reportProgressFuncTo:100};function tn(t,e){let r=Date.now(),n=[],i=[],s=[],o=[],a={};function c(){a={attributes:[]}}c();let l=null,d=null,h=null,g=!1,f={},y={tagName:"",hrefValue:"",openingTagEnds:void 0},p="",m=!1,w=null,C=!0;function E(u,v,k){if(Array.isArray(v.stripTogetherWithTheirContents)&&(v.stripTogetherWithTheirContents.includes(a.name)||v.stripTogetherWithTheirContents.includes("*")))if(a.slashPresent&&Array.isArray(n)&&n.some(S=>S.name===a.name)){for(let S=n.length;S--;)if(n[S].name===a.name){o=o.filter(([T,L])=>(T<n[S].lastOpeningBracketAt||T>=u+1)&&(L<=n[S].lastOpeningBracketAt||L>u+1));let R=u+1;a.lastClosingBracketAt&&(R=a.lastClosingBracketAt+1),o.push([n[S].lastOpeningBracketAt,R]),vr.has(t[u])&&v.cb?v.cb({tag:a,deleteFrom:n[S].lastOpeningBracketAt,deleteTo:u+1,insert:null,rangesArr:k,proposedReturn:[n[S].lastOpeningBracketAt,u,null]}):v.cb&&v.cb({tag:a,deleteFrom:n[S].lastOpeningBracketAt,deleteTo:u,insert:"",rangesArr:k,proposedReturn:[n[S].lastOpeningBracketAt,u,""]}),n.splice(S,1);break}}else a.slashPresent||n.push(a);else Array.isArray(v.ignoreTagsWithTheirContents)&&de(u,v,a)&&(C=!1)}function N(u,v,k,S,R,T){if(Array.isArray(A.current())&&typeof k=="number"&&A.current()[0][0]===0&&A.current()[0][1]>=k)return"";if(t.length===S&&T&&!b?.dumpLinkHrefsNearby?.enabled)return null;let L="";if(Number.isInteger(k)&&k<R&&(L+=u.slice(k,R)),Number.isInteger(S)&&S>T+1){let z=u.slice(T+1,S);S&&!U(t,S-1)&&(z=z.trimEnd()),z.includes(`
|
|
11
|
+
`)&&P(S,u)?L+=" ":L+=z}let Q=!vr.has(u[v]),Jt=u[S-1]!==">"||!u[k].trim(),Qt=!['"',"("].includes(u[R-1]),Qn=![";",".",":","!"].includes(u[v]);if((Q||Jt&&Qt&&Qn)&&(Jt||Qt)&&u[v]!=="!"&&(!eo.has(a.name)||typeof k=="number"&&k<R||typeof S=="number"&&S>T+1)){let z=L.match(/\n/g);return Array.isArray(z)&&z.length?z.length===1?`
|
|
12
12
|
`:z.length===2?`
|
|
13
13
|
|
|
14
14
|
`:`
|
|
15
15
|
|
|
16
16
|
|
|
17
|
-
`:" "}return""}function
|
|
17
|
+
`:" "}return""}function I(u,v){if(u.dumpLinkHrefsNearby?.enabled&&y.tagName&&y.tagName===a.name&&a.lastOpeningBracketAt&&(y.openingTagEnds&&a.lastOpeningBracketAt>y.openingTagEnds||!y.openingTagEnds)&&(m=!0),m){let k=u.dumpLinkHrefsNearby?.putOnNewLine?`
|
|
18
18
|
|
|
19
|
-
`:"";p=`${k}${y.hrefValue}`,(typeof v!="number"||
|
|
20
|
-
${JSON.stringify(t,null,4)}`);if(e)if(
|
|
21
|
-
${JSON.stringify(e,null,4)}`);function
|
|
22
|
-
`.includes(t[u])){let v=
|
|
19
|
+
`:"";p=`${k}${y.hrefValue}`,(typeof v!="number"||U(t,v-1))&&(p+=k)}}function P(u,v){return v?v[u]==="<"&&v[u+1]!=="%":t[u]==="<"&&t[u+1]!=="%"}function B(u){return t[u]===">"&&t[u-1]!=="%"}function de(u,v,k){if(v.ignoreTagsWithTheirContents.includes("*"))return!0;let S=t.indexOf(`<${k.name}`,u),R=t.indexOf(`</${k.name}`,u);return!k.slashPresent&&R===-1||k.slashPresent&&!i.some(T=>T.name===k.name)||R>-1&&S>-1&&S<R?!1:v.ignoreTagsWithTheirContents.includes(k.name)}if(typeof t!="string")throw new TypeError(`string-strip-html/stripHtml(): [THROW_ID_01] Input must be string! Currently it's: ${(typeof t).toLowerCase()}, equal to:
|
|
20
|
+
${JSON.stringify(t,null,4)}`);if(e)if(St(e)){if(e.reportProgressFunc&&typeof e.reportProgressFunc!="function")throw new Error(`string-strip-html/stripHtml(): [THROW_ID_03] The Optional Options Object's key reportProgressFunc, callback function, should be a function but it was given as type ${typeof e.reportProgressFunc}, equal to ${JSON.stringify(e.reportProgressFunc,null,4)}`);if(typeof e.dumpLinkHrefsNearby=="boolean"&&e.dumpLinkHrefsNearby!=null)throw new Error(`string-strip-html/stripHtml(): [THROW_ID_04] The Optional Options Object's key should be a plain object but it was given as type ${typeof e.dumpLinkHrefsNearby}, equal to ${JSON.stringify(e.dumpLinkHrefsNearby,null,4)}`)}else throw new TypeError(`string-strip-html/stripHtml(): [THROW_ID_02] Optional Options Object must be a plain object! Currently it's: ${(typeof e).toLowerCase()}, equal to:
|
|
21
|
+
${JSON.stringify(e,null,4)}`);function ge(){m&&(y={tagName:"",hrefValue:"",openingTagEnds:void 0},m=!1)}let b={...wr,...e,dumpLinkHrefsNearby:Object.assign({},wr.dumpLinkHrefsNearby,e?.dumpLinkHrefsNearby)};if(Oi(b,"returnRangesOnly"))throw new TypeError("string-strip-html/stripHtml(): [THROW_ID_05] The Optional Options Object's key returnRangesOnly has been removed from the API since v.5 release.");if(b.reportProgressFunc){if(typeof b.reportProgressFuncFrom!="number")throw new Error(`string-strip-html/stripHtml(): [THROW_ID_06] The Optional Options Object's key reportProgressFuncFrom, callback function's "from" range, should be a number but it was given as type ${typeof b.reportProgressFuncFrom}, equal to ${JSON.stringify(b.reportProgressFuncFrom,null,4)}`);if(typeof b.reportProgressFuncTo!="number")throw new Error(`string-strip-html/stripHtml(): [THROW_ID_07] The Optional Options Object's key reportProgressFuncTo, callback function's "to" range, should be a number but it was given as type ${typeof b.reportProgressFuncTo}, equal to ${JSON.stringify(b.reportProgressFuncTo,null,4)}`)}b.ignoreTags=yr(b.ignoreTags,"resolvedOpts.ignoreTags"),b.onlyStripTags=yr(b.onlyStripTags,"resolvedOpts.onlyStripTags");let Wt=!!b.onlyStripTags.length;b.onlyStripTags.length&&b.ignoreTags.length&&(b.onlyStripTags=Ia(b.onlyStripTags,...b.ignoreTags)),b.stripTogetherWithTheirContents?typeof b.stripTogetherWithTheirContents=="string"&&b.stripTogetherWithTheirContents.length&&(b.stripTogetherWithTheirContents=[b.stripTogetherWithTheirContents]):b.stripTogetherWithTheirContents=[];let fe={};if(b.stripTogetherWithTheirContents&&Array.isArray(b.stripTogetherWithTheirContents)&&b.stripTogetherWithTheirContents.length&&!b.stripTogetherWithTheirContents.every((u,v)=>typeof u!="string"?(fe.el=u,fe.i=v,!1):!0))throw new TypeError(`string-strip-html/stripHtml(): [THROW_ID_08] Optional Options Object's key stripTogetherWithTheirContents was set to contain not just string elements! For example, element at index ${fe.i} has a value ${fe.el} which is not string but ${(typeof fe.el).toLowerCase()}.`);b.cb||(b.cb=({rangesArr:u,proposedReturn:v})=>{v&&u.push(...v)});let A=new Qa({limitToBeAddedWhitespace:!0,limitLinebreaksCount:2});if(!b.skipHtmlDecoding)for(;t!==gr(t,{scope:"strict"});)t=gr(t,{scope:"strict"});let W=!1,H=!1,Ie=0,Kt=0,$=t.length,Jn=Math.floor($/2);for(let u=0;u<$;u++){if(b.reportProgressFunc&&($>1e3&&$<2e3?u===Jn&&b.reportProgressFunc(Math.floor((b.reportProgressFuncTo-b.reportProgressFuncFrom)/2)):$>=2e3&&(Ie=b.reportProgressFuncFrom+Math.floor(u/$*(b.reportProgressFuncTo-b.reportProgressFuncFrom)),Ie!==Kt&&(Kt=Ie,b.reportProgressFunc(Ie)))),Object.keys(a).length>1&&a.lastClosingBracketAt&&a.lastClosingBracketAt<u&&t[u]!==" "&&w===null&&(w=u),!W&&t[u]==="%"&&t[u-1]==="{"&&t.includes("%}",u+1)){h=null;let v=t.indexOf("%}",u)-1;if(v>u){u=v;continue}}if(!W&&B(u)&&(!a||Object.keys(a).length<2)&&u>1){for(let v=u;v--;)if(t[v-1]===void 0||B(v)){let k=t[v-1]===void 0?v:v+1,S=t.slice(k,u+1)||"";if((S.includes("/>")||S.includes("/ >")||S.includes('="')||S.includes("='"))&&t!==`<${hr(S.trim(),"/>")}>`&&[...ye].some(R=>hr(S.trim().split(/\s+/).filter(T=>T.trim()).filter((T,L)=>L===0),"/>").toLowerCase()===R)&&tn(`<${S.trim()}>`,b).result===""){(!s.length||s[s.length-1][0]!==a.lastOpeningBracketAt)&&s.push([k,u+1]),(!o.length||o[o.length-1][0]!==a.lastOpeningBracketAt)&&o.push([k,u+1]);let R=N(t,u,k,u+1,k,u+1),T=u+1;if(t[T]&&!t[T].trim()){for(let L=T;L<$;L++)if(t[L].trim()){T=L;break}}b.cb({tag:a,deleteFrom:k,deleteTo:T,insert:R,rangesArr:A,proposedReturn:[k,T,R]})}break}}if(!H&&t[u]==="/"&&!a.quotes?.value&&Number.isInteger(a.lastOpeningBracketAt)&&!Number.isInteger(a.lastClosingBracketAt)&&(a.slashPresent=u),t[u]==='"'||t[u]==="'")if(!H&&a.nameStarts&&a?.quotes?.value===t[u])if(f.valueStarts===void 0)f={},delete a.quotes;else{f.valueEnds=u,f.value=t.slice(f.valueStarts,u),a.attributes.push(f),f={},delete a.quotes;let v;b.dumpLinkHrefsNearby?.enabled&&!n.length&&a.attributes.some(k=>{if(typeof k.name=="string"&&k.name.toLowerCase()==="href")return v=`${b.dumpLinkHrefsNearby?.wrapHeads||""}${k.value}${b.dumpLinkHrefsNearby?.wrapTails||""}`,!0})&&(y={tagName:a.name,hrefValue:v,openingTagEnds:void 0})}else!H&&!a.quotes&&a.nameStarts&&(a.quotes={},a.quotes.value=t[u],a.quotes.start=u,a.quotes.next=t.indexOf(t[u],u+1),f.nameStarts&&f.nameEnds&&f.nameEnds<u&&f.nameStarts<u&&!f.valueStarts&&(f.name=t.slice(f.nameStarts,f.nameEnds)));if(a.nameStarts!==void 0&&a.nameEnds===void 0&&(!t[u].trim()||!Za(t[u]))){if(a.nameEnds=u,a.name=t.slice(a.nameStarts,a.nameEnds+(!B(u)&&t[u]!=="/"&&t[u+1]===void 0?1:0)),t[a.nameStarts-1]!=="!"&&!a.name.replace(/-/g,"").length||/^\d+$/.test(a.name[0])){a={};continue}if(typeof a.name=="string"&&a.name.toLowerCase()==="doctype"&&(H=!0),P(u)){I(b);let v=N(t,u,a.leftOuterWhitespace,u,a.lastOpeningBracketAt,u);(b.stripTogetherWithTheirContents.includes(a.name)||b.stripTogetherWithTheirContents.includes("*"))&&(o=o.filter(([k,S])=>!(k===a.leftOuterWhitespace&&S===u))),b.cb({tag:a,deleteFrom:a.leftOuterWhitespace,deleteTo:u,insert:`${v}${p}${v}`,rangesArr:A,proposedReturn:[a.leftOuterWhitespace,u,`${v}${p}${v}`]}),ge(),E(u,b,A)}}if(a.quotes?.start&&a.quotes.start<u&&!a.quotes.end&&f.nameEnds&&f.equalsAt&&!f.valueStarts&&(f.valueStarts=u),!a.quotes&&f.nameEnds&&t[u]==="="&&!f.valueStarts&&!f.equalsAt&&(f.equalsAt=u),!a.quotes&&f.nameStarts&&f.nameEnds&&!f.valueStarts&&t[u].trim()&&t[u]!=="="&&(a.attributes.push(f),f={}),!a.quotes&&f.nameStarts&&!f.nameEnds&&(H&&`'"`.includes(t[f.nameStarts])?f.nameStarts<u&&t[u]===t[f.nameStarts]&&(f.nameEnds=u+1,f.name=t.slice(f.nameStarts,f.nameEnds)):t[u].trim()?t[u]==="="?f.equalsAt||(f.nameEnds=u,f.equalsAt=u,f.name=t.slice(f.nameStarts,f.nameEnds)):t[u]==="/"||B(u)?(f.nameEnds=u,f.name=t.slice(f.nameStarts,f.nameEnds),a.attributes.push(f),f={}):P(u)&&(f.nameEnds=u,f.name=t.slice(f.nameStarts,f.nameEnds),a.attributes.push(f),f={}):(f.nameEnds=u,f.name=t.slice(f.nameStarts,f.nameEnds))),!a.quotes&&a.nameEnds<u&&!t[u-1].trim()&&t[u].trim()&&!"<>/!".includes(t[u])&&!f.nameStarts&&!a.lastClosingBracketAt&&(f.nameStarts=u),a.lastOpeningBracketAt!==null&&a.lastOpeningBracketAt<u&&t[u]==="/"&&a.onlyPlausible&&(a.onlyPlausible=!1),a.lastOpeningBracketAt!==null&&a.lastOpeningBracketAt<u&&t[u]!=="/"&&(a.onlyPlausible===void 0&&((!t[u].trim()||P(u))&&!a.slashPresent?a.onlyPlausible=!0:a.onlyPlausible=!1),t[u].trim()&&a.nameStarts===void 0&&!P(u)&&t[u]!=="/"&&!B(u)&&t[u]!=="!"&&(a.nameStarts=u,a.nameContainsLetters=!1)),a.nameStarts&&!a.quotes&&typeof t[u]=="string"&&t[u].toLowerCase()!==t[u].toUpperCase()&&(a.nameContainsLetters=!0),B(u)&&(br(a,t,u)||a.quotes.value&&typeof a.lastOpeningBracketAt=="number"&&Ya(a.quotes.value,t.slice(a.lastOpeningBracketAt,u))%2===1&&!t.slice(a.lastOpeningBracketAt+1,u).includes("<")&&!t.slice(a.lastOpeningBracketAt+1,u).includes(">"))&&a.lastOpeningBracketAt!==void 0&&(a.lastClosingBracketAt=u,w=null,Object.keys(f).length&&(a.attributes.push(f),f={}),b.dumpLinkHrefsNearby?.enabled&&y.tagName&&!y.openingTagEnds&&(y.openingTagEnds=u)),(!H||t[u]===">")&&a.lastOpeningBracketAt!==void 0){if(a.lastClosingBracketAt===void 0){if(a.lastOpeningBracketAt<u&&!P(u)&&(t[u+1]===void 0||P(u+1)&&!a?.quotes?.value)&&a.nameContainsLetters&&typeof a.nameStarts=="number"){if(a.name=t.slice(a.nameStarts,a.nameEnds||u+1).toLowerCase(),(!s.length||s[s.length-1][0]!==a.lastOpeningBracketAt)&&s.push([a.lastOpeningBracketAt,u+1]),b.ignoreTags.includes(a.name)||de(u,b,a)||!ye.has(a.name)&&(a.onlyPlausible||b.stripRecognisedHTMLOnly)){a={},f={};continue}if((ye.has(a.name)||at.has(a.name))&&(a.onlyPlausible===!1||a.onlyPlausible===!0&&a.attributes.length)||t[u+1]===void 0){I(b);let v=N(t,u,a.leftOuterWhitespace,u+1,a.lastOpeningBracketAt,a.lastClosingBracketAt);W&&a.name==="script"&&a.slashPresent&&(W=!1);let k;v===null||p===null?k=null:k=`${v}${p}${v}`,b.cb({tag:a,deleteFrom:a.leftOuterWhitespace,deleteTo:u+1,insert:k,rangesArr:A,proposedReturn:[a.leftOuterWhitespace,u+1,k]}),ge(),E(u,b,A)}if(!o.length||o[o.length-1][0]!==a.lastOpeningBracketAt&&o[o.length-1][1]!==u+1)if(b.stripTogetherWithTheirContents.includes(a.name)||b.stripTogetherWithTheirContents.includes("*")){let v;for(let k=n.length;k--;)n[k].name===a.name&&(v=n[k]);v?(o=o.filter(([k])=>k!==v.lastOpeningBracketAt),o.push([v.lastOpeningBracketAt,u+1])):o.push([a.lastOpeningBracketAt,u+1])}else o.push([a.lastOpeningBracketAt,u+1])}}else if(u>a.lastClosingBracketAt&&t[u].trim()||t[u+1]===void 0||b.ignoreIndentations&&`\r
|
|
22
|
+
`.includes(t[u])){let v=a.lastClosingBracketAt===u?u+1:u;b.trimOnlySpaces&&v===$-1&&w!==null&&w<u&&(v=w),(!s.length||s[s.length-1][0]!==a.lastOpeningBracketAt)&&s.push([a.lastOpeningBracketAt,a.lastClosingBracketAt+1]);let k=b.ignoreTags.includes(a.name),S=de(u,b,a);if(!C||b.stripRecognisedHTMLOnly&&typeof a.name=="string"&&!ye.has(a.name.toLowerCase())&&!at.has(a.name.toLowerCase())||!Wt&&(k||S)||Wt&&!b.onlyStripTags.includes(a.name)||b.ignoreTagsWithTheirContents.includes(a.name)){if(S)if(a.slashPresent){for(let R=i.length;R--;)if(i[R].name===a.name){i.splice(R,1);break}i.length||(C=!0)}else C&&(C=!1),i.push(a);b.cb({tag:a,deleteFrom:null,deleteTo:null,insert:null,rangesArr:A,proposedReturn:null}),a={},f={}}else if(!a.onlyPlausible||a.attributes.length===0&&a.name&&(ye.has(a.name.toLowerCase())||at.has(a.name.toLowerCase()))||a.attributes?.some(R=>R.equalsAt)){(!o.length||o[o.length-1][0]!==a.lastOpeningBracketAt)&&o.push([a.lastOpeningBracketAt,a.lastClosingBracketAt+1]);let R=N(t,u,a.leftOuterWhitespace,v,a.lastOpeningBracketAt,a.lastClosingBracketAt);p="",m=!1,I(b,v);let T;typeof p=="string"&&p.length?(T=`${R}${p}${R===`
|
|
23
23
|
|
|
24
24
|
`?`
|
|
25
|
-
`:R}`,v===
|
|
26
|
-
`)?L+=Q-u:(!Q||Q>u)&&L++}b.cb({tag:
|
|
27
|
-
`||t[u]==="\r")&&(d=u,g&&(g=!1))):(l!==null&&(!o.quotes&&f.equalsAt>l-1&&f.nameEnds&&f.equalsAt>f.nameEnds&&t[u]!=='"'&&t[u]!=="'"&&(bt(f)&&o.attributes.push(f),f={},o.equalsSpottedAt=void 0),l=null),g||(g=!0,E&&!G&&typeof d=="number"&&u&&d<u-1&&(t.slice(d+1,u).trim()?d=null:b.ignoreIndentations||A.push([d+1,u])))),t[u]===" "?h===null&&(h=u):h!==null&&(h=null),o.name==="script"&&(G=!o.slashPresent)}if(t&&!b.ignoreIndentations&&(b.trimOnlySpaces&&t[0]===" "||!b.trimOnlySpaces&&!t[0].trim()))for(let u=0;u<$;u++)if(b.trimOnlySpaces&&t[u]!==" "||!b.trimOnlySpaces&&t[u].trim()){A.push([0,u]);break}else t[u+1]||A.push([0,u+1]);if(t&&(b.trimOnlySpaces&&t[~-t.length]===" "||!b.trimOnlySpaces&&!t[~-t.length].trim())){for(let u=t.length;u--;)if(b.trimOnlySpaces&&t[u]!==" "||!b.trimOnlySpaces&&t[u].trim()){A.push([u+1,$]);break}}let M=A.current();if(!e?.cb&&M&&(M[0]&&!M[0][0]&&(M[0][1],A.ranges[0]=[A.ranges[0][0],A.ranges[0][1]]),M[M.length-1]?.[1]===t.length&&(M[M.length-1][0],A.ranges))){let u=A.ranges[A.ranges.length-1][0];t[u-1]&&(b.trimOnlySpaces&&t[u-1]===" "||!b.trimOnlySpaces&&!t[u-1].trim())&&(u-=1);let v=A.ranges[A.ranges.length-1][2];A.ranges[A.ranges.length-1]=[u,A.ranges[A.ranges.length-1][1]],v?.trim()&&A.ranges[A.ranges.length-1].push(v.trimEnd())}return{log:{timeTakenInMilliseconds:Date.now()-r},result:Io(t,A.current()),ranges:A.current(),allTagLocations:s,filteredTagLocations:a}}class _e{speechSynthesis;speechSynthesisUtterance;currentVoice=null;currentUtterances=[];currentUtteranceIndex=0;playbackState="idle";eventListeners=new Map;voiceManager=null;voices=[];defaultVoice=null;speakInContentLanguage=!1;languageVoiceCache=new Map;warmingLanguages=new Map;speakGeneration=0;resumeInfinityTimer;isSpeakingInternal=!1;isPausedInternal=!1;isAndroidPaused=!1;pausedAtUtteranceIndex=null;initialized=!1;maxLengthExceeded="warn";utterancesBeingCancelled=!1;rate=1;pitch=1;volume=1;features;patches;constructor(){if(this.features=si(),this.patches=oi(),!this.features.speechSynthesis||!this.features.speechSynthesisUtterance)throw new Error("Web Speech API is not available in this environment");this.speechSynthesis=this.features.speechSynthesis,this.speechSynthesisUtterance=this.features.speechSynthesisUtterance}shouldUseResumeInfinity(){const e=this.currentVoice,r=!!(e?.name&&typeof e.name=="string"&&e.name.toLocaleLowerCase().includes("(natural)"));return this.patches.isAndroid!==!0&&!this.patches.isFirefox&&!this.patches.isSafari&&!r}createUtterance(e){return new this.speechSynthesisUtterance(e)}async initialize(e={}){const{languages:r,maxTimeout:n,interval:i,maxLengthExceeded:s="warn"}=e;if(this.initialized)return!1;this.maxLengthExceeded=s;try{this.voiceManager=await O.initialize({languages:r,maxTimeout:n,interval:i}),this.voices=this.voiceManager.getVoices();const a=r||[...navigator.languages||["en"]];return this.defaultVoice=await this.voiceManager.getDefaultVoice(a,this.voices),this.initialized=!0,!0}catch(a){return console.error("Failed to initialize WebSpeechEngine:",a),this.initialized=!1,!1}}validateText(e){if(new TextEncoder().encode(e).length>4096){const n="Text exceeds max length of 4096 bytes, which may not work with some voices.";switch(this.maxLengthExceeded){case"none":break;case"error":throw new Error(`WebSpeechEngine: ${n}`);default:console.warn(`WebSpeechEngine: ${n}`)}}}getCurrentVoiceForUtterance(e){return e&&typeof e=="object"?e:typeof e=="string"?this.voices.find(r=>r.name===e||r.language===e)||null:this.currentVoice||this.defaultVoice}voiceMatchesLanguage(e,r){const[n,i]=U(r),[s,a]=U(e.language);return s===n&&(!i||a===i)}voiceForUtteranceSync(e){const r=this.getCurrentVoiceForUtterance(this.currentVoice);if(!this.speakInContentLanguage||!e.language)return r;const n=D(e.language);if(r&&this.voiceMatchesLanguage(r,n))return r;if(this.languageVoiceCache.has(n))return this.languageVoiceCache.get(n)??r}async voiceForUtterance(e){const r=this.voiceForUtteranceSync(e);return r!==void 0?r:(await this.warmLanguageVoiceCache([e]),this.voiceForUtteranceSync(e)??this.getCurrentVoiceForUtterance(this.currentVoice))}async warmLanguageVoiceCache(e){if(!this.speakInContentLanguage||!this.voiceManager)return;const r=new Set(e.map(a=>a.language).filter(a=>!!a).map(a=>D(a)).filter(a=>!this.languageVoiceCache.has(a))),n=[...r].filter(a=>this.warmingLanguages.has(a)),s=[...r].filter(a=>!this.warmingLanguages.has(a)).map(a=>{const o=(async()=>{await O.initialize({languages:[a]}),this.voices=this.voiceManager.getVoices();const c=this.voices.filter(d=>this.voiceMatchesLanguage(d,a)),h=(await this.voiceManager.sortVoicesByQuality(c))[0]??null;this.languageVoiceCache.set(a,h),h||this.emitEvent({type:"languagefallback",detail:{language:a,reason:"no-matching-voice"}})})();return this.warmingLanguages.set(a,o.finally(()=>this.warmingLanguages.delete(a))),this.warmingLanguages.get(a)});await Promise.all([...s,...n.map(a=>this.warmingLanguages.get(a))])}getCurrentVoice(){return this.currentVoice}setSpeakInContentLanguage(e){this.speakInContentLanguage=e,e&&this.warmLanguageVoiceCache(this.currentUtterances)}getSpeakInContentLanguage(){return this.speakInContentLanguage}toPlainText(e){return e.map(r=>({...r,plain:r.plain??(r.ssml?Kr(r.ssml).result:"")}))}loadUtterances(e){this.currentUtterances=this.toPlainText(e),this.currentUtteranceIndex=0,this.warmLanguageVoiceCache(this.currentUtterances),this.setState("ready"),this.emitEvent({type:"ready"})}async setVoice(e){const r=this.currentVoice;if(typeof e=="string"){const n=this.voices.find(i=>i.name===e||i.language===e);n?(this.currentVoice=n,r&&r.name!==n.name&&(this.currentUtteranceIndex=0)):console.warn(`Voice "${e}" not found`)}else this.currentVoice=e,r&&r.name!==e.name&&(this.currentUtteranceIndex=0);this.voiceManager&&this.defaultVoice&&this.currentVoice&&this.currentVoice.language!==this.defaultVoice.language&&(this.defaultVoice=await this.voiceManager.getDefaultVoice([this.currentVoice.language],this.voices))}async getAvailableVoices(){if(this.voices.length>0)return this.voices;try{return await this.initialize(),this.voices}catch{return[]}}speak(e){if(e!==void 0){if(e<0||e>=this.currentUtterances.length)throw new Error("Invalid utterance index");this.currentUtteranceIndex=e}if(this.currentUtterances.length===0){console.warn("No utterances loaded");return}this.cancelCurrentSpeech();const r=++this.speakGeneration;this.isSpeakingInternal=!0,this.isPausedInternal=!1,this.setState("playing"),this.emitEvent({type:"start"}),this.stopResumeInfinity(),this.currentUtteranceIndex=e??0,this.currentUtteranceIndex>=this.currentUtterances.length&&(this.currentUtteranceIndex=0),this.speakCurrentUtterance(r)}cancelCurrentSpeech(){this.patches.isFirefox&&this.speechSynthesis.speaking&&(this.utterancesBeingCancelled=!0,setTimeout(()=>{this.utterancesBeingCancelled=!1},100)),this.speechSynthesis.cancel()}async speakCurrentUtterance(e){if(this.currentUtteranceIndex>=this.currentUtterances.length){this.setState("idle"),this.emitEvent({type:"end"});return}const r=this.currentUtterances[this.currentUtteranceIndex],n=r.plain??"";this.validateText(n);const i=this.createUtterance(n),s=await this.voiceForUtterance(r);if(e===this.speakGeneration){if(s&&this.voiceManager){const a=this.voiceManager.convertToSpeechSynthesisVoice(s);a&&(i.voice=a,i.lang=a.lang)}r.language&&(i.lang=r.language),i.rate=this.rate,i.pitch=this.pitch,i.volume=this.volume,i.onstart=()=>{this.isSpeakingInternal=!0,this.isPausedInternal=!1,this.setState("playing"),this.emitEvent({type:"start"}),this.patches.isAndroid&&this.isAndroidPaused&&(this.isAndroidPaused=!1),this.shouldUseResumeInfinity()&&this.startResumeInfinity(i)},i.onend=()=>{if(this.utterancesBeingCancelled){this.utterancesBeingCancelled=!1;return}this.playbackState!=="idle"&&(this.isSpeakingInternal=!1,this.isPausedInternal=!1,this.stopResumeInfinity(),this.currentUtteranceIndex>=this.currentUtterances.length-1&&this.setState("idle"),this.emitEvent({type:"end"}))},i.onerror=a=>{if(a.error==="interrupted"&&this.patches.isAndroid&&this.isAndroidPaused)return;this.isSpeakingInternal=!1,this.isPausedInternal=!1,this.stopResumeInfinity(),this.setState("idle"),["synthesis-unavailable","audio-hardware","voice-unavailable"].includes(a.error)&&(console.log("[ENGINE] fatal error detected, resetting index to 0"),this.currentUtteranceIndex=0),a.error==="interrupted"||a.error==="canceled"?this.emitEvent({type:"stop"}):this.emitEvent({type:"error",detail:{error:a.error,message:`Speech synthesis error: ${a.error}`}})},i.onpause=()=>{this.isPausedInternal=!0,this.isSpeakingInternal=!1,this.emitEvent({type:"pause"})},i.onresume=()=>{this.isPausedInternal=!1,this.isSpeakingInternal=!0,this.emitEvent({type:"resume"})},i.onboundary=a=>{this.emitEvent({type:"boundary",detail:{charIndex:a.charIndex,charLength:a.charLength,elapsedTime:a.elapsedTime,name:a.name}})},i.onmark=a=>{this.emitEvent({type:"mark",detail:{name:a.name}})},this.speechSynthesis.speak(i)}}startResumeInfinity(e){this.shouldUseResumeInfinity()&&(this.resumeInfinityTimer=window.setTimeout(()=>{if(e){const{paused:n,speaking:i}=this.speechSynthesis,s=i||this.isSpeakingInternal,a=n||this.isPausedInternal;s&&!a&&(this.speechSynthesis.pause(),this.speechSynthesis.resume())}this.startResumeInfinity(e)},5e3))}stopResumeInfinity(){this.resumeInfinityTimer&&(clearTimeout(this.resumeInfinityTimer),this.resumeInfinityTimer=void 0)}pause(){this.playbackState==="playing"&&(this.pausedAtUtteranceIndex=this.currentUtteranceIndex,this.patches.isAndroid?(this.isAndroidPaused=!0,this.speechSynthesis.cancel()):this.speechSynthesis.pause(),this.isPausedInternal=!0,this.isSpeakingInternal=!1,this.setState("paused"),this.emitEvent({type:"pause"}))}resume(){this.playbackState==="paused"&&this.currentUtteranceIndex<this.currentUtterances.length&&(this.isPausedInternal=!1,this.isSpeakingInternal=!0,this.setState("playing"),this.emitEvent({type:"resume"}),this.patches.isAndroid||this.pausedAtUtteranceIndex!==this.currentUtteranceIndex?this.speak(this.currentUtteranceIndex):this.speechSynthesis.resume(),this.pausedAtUtteranceIndex=null)}stop(){this.speechSynthesis.cancel(),this.speakGeneration++,this.currentUtteranceIndex=0,this.patches.isAndroid&&(this.isAndroidPaused=!1),this.setState("idle"),this.emitEvent({type:"stop"})}setRate(e){this.rate=Math.max(.1,Math.min(10,e))}getRate(){return this.rate}setPitch(e){this.pitch=Math.max(0,Math.min(2,e))}getPitch(){return this.pitch}setVolume(e){this.volume=Math.max(0,Math.min(1,e))}getVolume(){return this.volume}getState(){return this.playbackState}getCurrentUtteranceIndex(){return this.currentUtteranceIndex}setCurrentUtteranceIndex(e,r){if(e<0||e>=this.currentUtterances.length){r?.(!1);return}e!==this.currentUtteranceIndex&&(!this.isPausedInternal&&this.isSpeakingInternal&&this.cancelCurrentSpeech(),this.currentUtteranceIndex=e,r?.(!0))}getUtteranceCount(){return this.currentUtterances.length}on(e,r){return this.eventListeners.has(e)||this.eventListeners.set(e,[]),this.eventListeners.get(e).push(r),()=>{const n=this.eventListeners.get(e);if(n){const i=n.indexOf(r);i>-1&&n.splice(i,1)}}}emitEvent(e){const r=this.eventListeners.get(e.type);r&&r.forEach(n=>n(e))}setState(e){const r=this.playbackState;if(this.playbackState=e,r!==e)switch(e){case"idle":this.emitEvent({type:"idle"});break;case"loading":this.emitEvent({type:"loading"});break;case"ready":this.emitEvent({type:"ready"});break}}async destroy(){this.stop(),this.stopResumeInfinity(),this.eventListeners.clear(),this.currentUtterances=[],this.currentVoice=null,this.voices=[],this.defaultVoice=null,this.languageVoiceCache.clear(),this.warmingLanguages.clear(),this.initialized=!1}}class Ho{id="webspeech";name="Web Speech API";engine=null;async getVoices(){if(!this.engine)throw new Error("No engine available. Create an engine first.");return this.engine.getAvailableVoices()}async createEngine(e){const r=new _e;return await r.initialize(),e&&await r.setVoice(e),r}async destroy(){this.engine&&(await this.engine.destroy(),this.engine=null)}}class _o{engine;contentQueue=[];eventListeners=new Map;navigatorState="idle";constructor(e){this.engine=e||new _e,this.setupEngineListeners(),this.initializeEngine()}async initializeEngine(){if(this.engine instanceof _e)try{await this.engine.initialize()}catch(e){console.warn("Failed to initialize WebSpeechEngine:",e)}}setupEngineListeners(){this.engine.on("start",()=>{this.setNavigatorState("playing"),this.emitEvent({type:"start"})}),this.engine.on("end",()=>{const e=this.engine.getCurrentUtteranceIndex(),r=this.engine.getUtteranceCount();e<r-1?this.engine.speak(e+1):this.setNavigatorState("idle"),this.emitEvent({type:"end"})}),this.engine.on("pause",()=>{this.setNavigatorState("paused"),this.emitEvent({type:"pause"})}),this.engine.on("resume",()=>{this.setNavigatorState("playing"),this.emitEvent({type:"resume"})}),this.engine.on("stop",()=>{this.setNavigatorState("idle"),this.emitEvent({type:"stop"})}),this.engine.on("error",e=>{this.setNavigatorState("idle"),this.emitEvent(e)}),this.engine.on("ready",()=>{this.contentQueue.length>0&&(this.setNavigatorState("ready"),this.emitEvent({type:"ready"}))}),this.engine.on("boundary",e=>{this.emitEvent(e)}),this.engine.on("mark",e=>{this.emitEvent(e)}),this.engine.on("voiceschanged",()=>{this.emitEvent({type:"voiceschanged"})}),this.engine.on("languagefallback",e=>{this.emitEvent(e)})}setNavigatorState(e){this.navigatorState=e}async getVoices(){return this.engine.getAvailableVoices()}setVoice(e){this.engine.setVoice(e)}getCurrentVoice(){return this.engine.getCurrentVoice()}setSpeakInContentLanguage(e){this.engine.setSpeakInContentLanguage(e)}getSpeakInContentLanguage(){return this.engine.getSpeakInContentLanguage()}loadContent(e){const r=Array.isArray(e)?e:[e];this.contentQueue=[...r],this.engine.loadUtterances(r),this.setNavigatorState("ready"),this.emitContentChangeEvent({content:r})}getCurrentContent(){const e=this.getCurrentUtteranceIndex();return e<this.contentQueue.length?this.contentQueue[e]:null}getContentQueue(){return[...this.contentQueue]}getCurrentUtteranceIndex(){return this.engine.getCurrentUtteranceIndex()}play(){if(this.navigatorState==="paused")this.setNavigatorState("playing"),this.engine.resume();else if(this.navigatorState==="ready"||this.navigatorState==="idle")this.setNavigatorState("playing"),this.engine.speak();else if(this.navigatorState==="playing")return}pause(){this.navigatorState==="playing"&&(this.setNavigatorState("paused"),this.engine.pause())}stop(){this.setNavigatorState("idle"),this.engine.stop(),this.emitEvent({type:"stop"})}skipToPosition(e,r=!1){const n=this.getCurrentUtteranceIndex();return e<0||e>=this.contentQueue.length?!1:(e===n||(this.navigatorState==="paused"&&!r?this.engine.setCurrentUtteranceIndex(e,i=>{i&&this.emitEvent({type:"skip",detail:{position:e}})}):(this.setNavigatorState("playing"),this.engine.speak(e))),!0)}next(e=!1){const r=this.getCurrentUtteranceIndex();return this.skipToPosition(r+1,e)}previous(e=!1){const r=this.getCurrentUtteranceIndex();return this.skipToPosition(r-1,e)}jumpTo(e,r=!1){return this.skipToPosition(e,r)}setRate(e){this.engine.setRate(e)}getRate(){return this.engine.getRate()}setPitch(e){this.engine.setPitch(e)}getPitch(){return this.engine.getPitch()}setVolume(e){this.engine.setVolume(e)}getVolume(){return this.engine.getVolume()}getState(){return this.navigatorState}on(e,r){return this.eventListeners.has(e)||this.eventListeners.set(e,[]),this.eventListeners.get(e).push(r),()=>{const n=this.eventListeners.get(e);if(n){const i=n.indexOf(r);i>-1&&n.splice(i,1)}}}emitEvent(e){const r=this.eventListeners.get(e.type);r&&r.forEach(n=>n(e))}emitContentChangeEvent(e){const r=this.eventListeners.get("contentchange");r&&r.forEach(n=>n({type:"contentchange",detail:e}))}async destroy(){this.eventListeners.clear(),await this.engine.destroy()}}let Fo=class{};function Mo(t){return(t.getComputedStyle(t.document.documentElement).writingMode||t.getComputedStyle(t.document.body).writingMode)==="vertical-lr"}function Vo(t){const e=t.getComputedStyle(t.document.documentElement).writingMode||t.getComputedStyle(t.document.body).writingMode;return e==="vertical-rl"||e==="vertical-lr"}function ye(t){const e=Vo(t),r=e&&Mo(t),n=t.innerWidth,i=t.innerHeight,s=t.document.scrollingElement,a=s.scrollLeft,o=s.scrollTop,c=parseInt(t.getComputedStyle(t.document.documentElement).getPropertyValue("column-count")),l=e&&!r?s.scrollWidth-n+a:a,h=o;return{isVertical:e,isVertLR:r,viewportInlineSize:e?i:n,viewportBlockSize:e?n:i,pageInlineSize:e?i:n/(c||1),xDocOffset:l,yDocOffset:h,inlineScrollOffset:e?h:l,blockScrollOffset:e?l:h,inlineStart:d=>e?d.top:d.left,blockStart:d=>e?d.left:d.top,inlineSize:d=>e?d.height:d.width,blockSize:d=>e?d.width:d.height,applyPosition(d,g,f,y,p,m){d.style.position="absolute",e?(d.style.top=`${g*m}px`,d.style.left=`${f*m}px`,d.style.height=`${y*m}px`,d.style.width=`${p*m}px`):(d.style.left=`${g*m}px`,d.style.top=`${f*m}px`,d.style.width=`${y*m}px`,d.style.height=`${p*m}px`)},toRect(d,g,f,y){return e?new DOMRect(g,d,y,f):new DOMRect(d,g,f,y)}}}function pr(t,e){return t.document.documentElement.style.getPropertyValue(e)}function Wo(t){return t&&Array.isArray(t)?t:void 0}function Go(t){return t&&typeof t=="string"?[t]:Wo(t)}function st(t){return isNaN(t)?void 0:t}function qe(t){return t.otherLocations?.get("cssSelector")}let be=class Jr{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const r=st(e.progression),n=st(e.totalProgression),i=st(e.position),s=new Map,a=new Set(["fragment","fragments","progression","totalProgression","position","otherLocations"]);return Object.entries(e).forEach(([o,c])=>{a.has(o)||s.set(o,c)}),e.otherLocations instanceof Map&&e.otherLocations.forEach((o,c)=>s.set(c,o)),new Jr({fragments:Go(e.fragments||e.fragment),progression:r!==void 0&&r>=0&&r<=1?r:void 0,totalProgression:n!==void 0&&n>=0&&n<=1?n:void 0,position:i!==void 0&&i>0?i:void 0,otherLocations:s.size===0?void 0:s})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((r,n)=>e[n]=r),e}},Ko=class Qr{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new Qr({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}},Jo=class St{constructor(e){const r=e.href.indexOf("#"),n=r>=0?e.href.slice(r+1):void 0;this.href=r>=0?e.href.slice(0,r):e.href,this.type=e.type,this.title=e.title;const i=e.locations?.fragments,s=n&&(!i||i.length===0);this.locations=e.locations?s?new be({...e.locations,fragments:[n]}):e.locations:n?new be({fragments:[n]}):new be({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new St({href:e.href,type:e.type,title:e.title,locations:be.deserialize(e.locations),text:Ko.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new St({href:this.href,type:this.type,title:this.title,text:this.text,locations:new be({...this.locations,...e})})}};function mr(t){return t.split("").reverse().join("")}function Qo(t,e,r){const n=mr(e);return r.map(i=>{const s=Math.max(0,i.end-e.length-i.errors),a=mr(t.slice(s,i.end));return{start:Xr(a,n,i.errors).reduce((o,c)=>i.end-c.end<o?i.end-c.end:o,i.end),end:i.end,errors:i.errors}})}function ot(t){return(t|-t)>>31&1}function yr(t,e,r,n){let i=t.P[r],s=t.M[r];const a=n>>>31,o=e[r]|a,c=o|s,l=(o&i)+i^i|o;let h=s|~(l|i),d=i&l;const g=ot(h&t.lastRowMask[r])-ot(d&t.lastRowMask[r]);return h<<=1,d<<=1,d|=a,h|=ot(n)-a,i=d|~(c|h),s=h&c,t.P[r]=i,t.M[r]=s,g}function Xr(t,e,r){if(e.length===0)return[];r=Math.min(r,e.length);const n=[],i=32,s=Math.ceil(e.length/i)-1,a={P:new Uint32Array(s+1),M:new Uint32Array(s+1),lastRowMask:new Uint32Array(s+1)};a.lastRowMask.fill(1<<31),a.lastRowMask[s]=1<<(e.length-1)%i;const o=new Uint32Array(s+1),c=new Map,l=[];for(let g=0;g<256;g++)l.push(o);for(let g=0;g<e.length;g+=1){const f=e.charCodeAt(g);if(c.has(f))continue;const y=new Uint32Array(s+1);c.set(f,y),f<l.length&&(l[f]=y);for(let p=0;p<=s;p+=1){y[p]=0;for(let m=0;m<i;m+=1){const w=p*i+m;w>=e.length||e.charCodeAt(w)===f&&(y[p]|=1<<m)}}}let h=Math.max(0,Math.ceil(r/i)-1);const d=new Uint32Array(s+1);for(let g=0;g<=h;g+=1)d[g]=(g+1)*i;d[s]=e.length;for(let g=0;g<=h;g+=1)a.P[g]=-1,a.M[g]=0;for(let g=0;g<t.length;g+=1){const f=t.charCodeAt(g);let y;f<l.length?y=l[f]:(y=c.get(f),typeof y>"u"&&(y=o));let p=0;for(let m=0;m<=h;m+=1)p=yr(a,y,m,p),d[m]+=p;if(d[h]-p<=r&&h<s&&(y[h+1]&1||p<0)){h+=1,a.P[h]=-1,a.M[h]=0;let m;if(h===s){const w=e.length%i;m=w===0?i:w}else m=i;d[h]=d[h-1]+m-p+yr(a,y,h,p)}else for(;h>0&&d[h]>=r+i;)h-=1;h===s&&d[h]<=r&&(d[h]<r&&n.splice(0,n.length),n.push({start:-1,end:g+1,errors:d[h]}),r=d[h])}return n}function Xo(t,e,r){const n=Xr(t,e,r);return Qo(t,e,n)}function Zr(t,e,r){let n=0;const i=[];for(;n!==-1;)n=t.indexOf(e,n),n!==-1&&(i.push({start:n,end:n+e.length,errors:0}),n+=1);return i.length>0?i:Xo(t,e,r)}function br(t,e){return e.length===0||t.length===0?0:1-Zr(t,e,e.length)[0].errors/e.length}function Zo(t,e,r={}){if(e.length===0)return null;const n=Math.min(256,e.length/2),i=Zr(t,e,n);if(i.length===0)return null;const s=o=>{const c=1-o.errors/e.length,l=r.prefix?br(t.slice(Math.max(0,o.start-r.prefix.length),o.start),r.prefix):1,h=r.suffix?br(t.slice(o.end,o.end+r.suffix.length),r.suffix):1;let d=1;return typeof r.hint=="number"&&(d=1-Math.abs(o.start-r.hint)/t.length),(50*c+20*l+20*h+2*d)/92},a=i.map(o=>({start:o.start,end:o.end,score:s(o)}));return a.sort((o,c)=>c.score-o.score),a[0]}function kt(t,e,r){const n=r===1?e:e-1;if(t.charAt(n).trim()!=="")return e;let i,s;if(r===2?(i=t.substring(0,e),s=i.trimEnd()):(i=t.substring(e),s=i.trimStart()),!s.length)return-1;const a=i.length-s.length;return r===2?e-a:e+a}function vr(t,e){const r=t.commonAncestorContainer.ownerDocument.createNodeIterator(t.commonAncestorContainer,NodeFilter.SHOW_TEXT),n=e===1?t.startContainer:t.endContainer,i=e===1?t.endContainer:t.startContainer;let s=r.nextNode();for(;s&&s!==n;)s=r.nextNode();e===2&&(s=r.previousNode());let a=-1;const o=()=>{if(s=e===1?r.nextNode():r.previousNode(),s){const c=s.textContent,l=e===1?0:c.length;a=kt(c,l,e)}};for(;s&&a===-1&&s!==i;)o();if(s&&a>=0)return{node:s,offset:a};throw new RangeError("No text nodes with non-whitespace text found in range")}function Yo(t){if(!t.toString().trim().length)throw new RangeError("Range contains no non-whitespace text");if(t.startContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range startContainer is not a text node");if(t.endContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range endContainer is not a text node");const e=t.cloneRange();let r=!1,n=!1;const i={start:kt(t.startContainer.textContent,t.startOffset,1),end:kt(t.endContainer.textContent,t.endOffset,2)};if(i.start>=0&&(e.setStart(t.startContainer,i.start),r=!0),i.end>0&&(e.setEnd(t.endContainer,i.end),n=!0),r&&n)return e;if(!r){const{node:s,offset:a}=vr(e,1);s&&a>=0&&e.setStart(s,a)}if(!n){const{node:s,offset:a}=vr(e,2);s&&a>0&&e.setEnd(s,a)}return e}function Yr(t){switch(t.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return t.textContent?.length??0;default:return 0}}function wr(t){let e=t.previousSibling,r=0;for(;e;)r+=Yr(e),e=e.previousSibling;return r}function en(t,...e){let r=e.shift();const n=t.ownerDocument.createNodeIterator(t,NodeFilter.SHOW_TEXT),i=[];let s=n.nextNode(),a,o=0;for(;r!==void 0&&s;)a=s,o+a.data.length>r?(i.push({node:a,offset:r-o}),r=e.shift()):(s=n.nextNode(),o+=a.data.length);for(;r!==void 0&&a&&o===r;)i.push({node:a,offset:a.data.length}),r=e.shift();if(r!==void 0)throw new RangeError("Offset exceeds text length");return i}let Ie=class te{constructor(e,r){if(r<0)throw new Error("Offset is invalid");this.element=e,this.offset=r}relativeTo(e){if(!e.contains(this.element))throw new Error("Parent is not an ancestor of current element");let r=this.element,n=this.offset;for(;r!==e;)n+=wr(r),r=r.parentElement;return new te(r,n)}resolve(e={}){try{return en(this.element,this.offset)[0]}catch(r){if(this.offset===0&&e.direction!==void 0){const n=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);n.currentNode=this.element;const i=e.direction===1,s=i?n.nextNode():n.previousNode();if(!s)throw r;return{node:s,offset:i?0:s.data.length}}else throw r}}static fromCharOffset(e,r){switch(e.nodeType){case Node.TEXT_NODE:return te.fromPoint(e,r);case Node.ELEMENT_NODE:return new te(e,r);default:throw new Error("Node is not an element or text node")}}static fromPoint(e,r){switch(e.nodeType){case Node.TEXT_NODE:{if(r<0||r>e.data.length)throw new Error("Text node offset is out of range");if(!e.parentElement)throw new Error("Text node has no parent");const n=wr(e)+r;return new te(e.parentElement,n)}case Node.ELEMENT_NODE:{if(r<0||r>e.childNodes.length)throw new Error("Child node offset is out of range");let n=0;for(let i=0;i<r;i++)n+=Yr(e.childNodes[i]);return new te(e,n)}default:throw new Error("Point is not in an element or text node")}}},Ot=class we{constructor(e,r){this.start=e,this.end=r}relativeTo(e){return new we(this.start.relativeTo(e),this.end.relativeTo(e))}toRange(){let e,r;this.start.element===this.end.element&&this.start.offset<=this.end.offset?[e,r]=en(this.start.element,this.start.offset,this.end.offset):(e=this.start.resolve({direction:1}),r=this.end.resolve({direction:2}));const n=new Range;return n.setStart(e.node,e.offset),n.setEnd(r.node,r.offset),n}static fromRange(e){const r=Ie.fromPoint(e.startContainer,e.startOffset),n=Ie.fromPoint(e.endContainer,e.endOffset);return new we(r,n)}static fromOffsets(e,r,n){return new we(new Ie(e,r),new Ie(e,n))}static trimmedRange(e){return Yo(we.fromRange(e).toRange())}},ea=class xt{constructor(e,r,n){this.root=e,this.start=r,this.end=n}static fromRange(e,r){const n=Ot.fromRange(r).relativeTo(e);return new xt(e,n.start.offset,n.end.offset)}static fromSelector(e,r){return new xt(e,r.start,r.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return Ot.fromOffsets(this.root,this.start,this.end).toRange()}},ta=class Et{constructor(e,r,n={}){this.root=e,this.exact=r,this.context=n}static fromRange(e,r){const n=e.textContent,i=Ot.fromRange(r).relativeTo(e),s=i.start.offset,a=i.end.offset,o=32;return new Et(e,n.slice(s,a),{prefix:n.slice(Math.max(0,s-o),s),suffix:n.slice(a,Math.min(n.length,a+o))})}static fromSelector(e,r){const{prefix:n,suffix:i}=r;return new Et(e,r.exact,{prefix:n,suffix:i})}toSelector(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}toRange(e={}){return this.toPositionAnchor(e).toRange()}toPositionAnchor(e={}){const r=this.root.textContent,n=Zo(r,this.exact,{...this.context,hint:e.hint});if(!n)throw new Error("Quote not found");return new ea(this.root,n.start,n.end)}};function ra(t){const e=t.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function na(t,e){try{const r=e.locations,n=e.text;if(n&&n.highlight){let i;r&&qe(r)&&(i=t.querySelector(qe(r))),i||(i=t.body);const s=new ta(i,n.highlight,{prefix:n.before,suffix:n.after});try{return s.toRange()}catch{return console.warn("Quote not found:",s),null}}if(r){let i=null;if(!i&&qe(r)&&(i=t.querySelector(qe(r))),!i&&r.fragments){for(const s of r.fragments)if(i=t.getElementById(s),i)break}if(i){const s=t.createRange();return i.childNodes.length===0||ra(i)?(s.selectNode(i),s):(s.setStartBefore(i),s.setEndAfter(i),s)}}}catch(r){console.error(r)}return null}function ia(t,e){const r=e.map(c=>c.toUpperCase()),n=[],i=t.commonAncestorContainer,s=i.nodeType===Node.TEXT_NODE?i.parentNode:i,a=t.startContainer.ownerDocument.createTreeWalker(s,NodeFilter.SHOW_TEXT);let o=a.nextNode();for(;o;){if(t.intersectsNode(o)){let c=o.parentNode,l=!1;for(;c;){if(c.nodeType===Node.ELEMENT_NODE&&r.includes(c.tagName.toUpperCase())){l=!0;break}c=c.parentNode}if(!l){const h=t.cloneRange();h.selectNode(o),h.compareBoundaryPoints(Range.START_TO_START,t)<0&&h.setStart(t.startContainer,t.startOffset),h.compareBoundaryPoints(Range.END_TO_END,t)>0&&h.setEnd(t.endContainer,t.endOffset);for(const d of h.getClientRects())n.push({left:d.left,right:d.right,top:d.top,bottom:d.bottom,width:d.width,height:d.height})}}o=a.nextNode()}return n}function Pe(t,e,r=!1,n=0){let i;if(Array.isArray(t))i=t;else{let l=t.getClientRects();l.length||t.commonAncestorContainer.nodeType===Node.ELEMENT_NODE&&(l=t.commonAncestorContainer.getClientRects()),i=[];for(const h of l)i.push({bottom:h.bottom,height:h.height,left:h.left,right:h.right,top:h.top,width:h.width})}if(n)for(const l of i)l.left-=n,l.top-=n,l.right+=n,l.bottom+=n,l.width+=n*2,l.height+=n*2;const s=tn(i,1,e,r),a=oa(s,1),o=rn(a),c=4;for(let l=o.length-1;l>=0;l--){const h=o[l];if(!(h.width*h.height>c))if(o.length>1)o.splice(l,1);else break}return o}function tn(t,e,r,n=!1){for(let i=0;i<t.length;i++)for(let s=i+1;s<t.length;s++){const a=t[i],o=t[s];if(a===o)continue;const c=P(a.top,o.top,e)&&P(a.bottom,o.bottom,e),l=P(a.left,o.left,e)&&P(a.right,o.right,e);if((l&&!r&&!n||c&&!l)&&nn(a,o,e)){const h=t.filter(g=>g!==a&&g!==o),d=sa(a,o);return h.push(d),tn(h,e,r,n)}}return t}function sa(t,e){const r=Math.min(t.left,e.left),n=Math.max(t.right,e.right),i=Math.min(t.top,e.top),s=Math.max(t.bottom,e.bottom);return{bottom:s,height:s-i,left:r,right:n,top:i,width:n-r}}function oa(t,e){const r=new Set(t);for(const n of t){if(!(n.width>1&&n.height>1)){r.delete(n);continue}for(const i of t)if(n!==i&&r.has(i)&&aa(i,n,e)){r.delete(n);break}}return Array.from(r)}function aa(t,e,r){return W(t,e.left,e.top,r)&&W(t,e.right,e.top,r)&&W(t,e.left,e.bottom,r)&&W(t,e.right,e.bottom,r)}function W(t,e,r,n){return(t.left<e||P(t.left,e,n))&&(t.right>e||P(t.right,e,n))&&(t.top<r||P(t.top,r,n))&&(t.bottom>r||P(t.bottom,r,n))}function rn(t){for(let e=0;e<t.length;e++)for(let r=e+1;r<t.length;r++){const n=t[e],i=t[r];if(n!==i&&nn(n,i,-1)){let s=[],a;const o=Sr(n,i);if(o.length===1)s=o,a=n;else{const l=Sr(i,n);o.length<l.length?(s=o,a=n):(s=l,a=i)}const c=t.filter(l=>l!==a);return Array.prototype.push.apply(c,s),rn(c)}}return t}function Sr(t,e){const r=la(e,t);if(r.height===0||r.width===0)return[t];const n=[];{const i={bottom:t.bottom,height:0,left:t.left,right:r.left,top:t.top,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}{const i={bottom:r.top,height:0,left:r.left,right:r.right,top:t.top,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}{const i={bottom:t.bottom,height:0,left:r.left,right:r.right,top:r.bottom,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}{const i={bottom:t.bottom,height:0,left:r.right,right:t.right,top:t.top,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}return n}function la(t,e){const r=Math.max(t.left,e.left),n=Math.min(t.right,e.right),i=Math.max(t.top,e.top),s=Math.min(t.bottom,e.bottom);return{bottom:s,height:Math.max(0,s-i),left:r,right:n,top:i,width:Math.max(0,n-r)}}function nn(t,e,r){return(t.left<e.right||r>=0&&P(t.left,e.right,r))&&(e.left<t.right||r>=0&&P(e.left,t.right,r))&&(t.top<e.bottom||r>=0&&P(t.top,e.bottom,r))&&(e.top<t.bottom||r>=0&&P(e.top,t.bottom,r))}function P(t,e,r){return Math.abs(t-e)<=r}let $e=null,at=null,ve=0;const re={r:255,g:255,b:255,a:1},Z=new Map,ca=()=>{if(!$e)if(typeof OffscreenCanvas<"u")$e=new OffscreenCanvas(5,5),at=$e.getContext("2d",{willReadFrequently:!0,desynchronized:!0});else{const t=document.createElement("canvas");t.width=5,t.height=5,$e=t,at=t.getContext("2d",{willReadFrequently:!0,desynchronized:!0})}return at},ua=t=>{if(!t)return!0;const e=t.trim().toLowerCase();return e.startsWith("var(")||["transparent","currentcolor","inherit","initial","revert","unset","revert-layer"].includes(e)?!0:["linear-gradient","radial-gradient","conic-gradient","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient"].some(r=>e.includes(r))},De=(t,e)=>{console.warn(`[Decorator] Could not parse color: "${t}". ${e} Falling back to ${JSON.stringify(re)} to compute contrast. Please use a CSS color value that can be computed to RGB(A).`)},J=(t,e=null)=>{const r=e?`${t}|${e}`:t,n=Z.get(r);if(n!==void 0)return n??re;if(ua(t))return De(t,"Unsupported color format or special value."),Z.set(r,null),re;const i=ca();if(!i)return De(t,"Could not get canvas context."),Z.set(r,null),re;try{ve===0&&i.clearRect(0,0,5,5);const s=ve%5,a=Math.floor(ve/5);i.clearRect(s,a,1,1),e&&(i.fillStyle=e,i.fillRect(s,a,1,1)),i.fillStyle=t,i.fillRect(s,a,1,1);const o=i.getImageData(s,a,1,1);ve=(ve+1)%25;const[c,l,h,d]=o.data;if(d===0)return De(t,"Fully transparent color."),Z.set(r,null),re;const g={r:c,g:l,b:h,a:d/255};return Z.set(r,g),g}catch(s){return De(t,`Error: ${s instanceof Error?s.message:String(s)}`),Z.set(r,null),re}},lt=t=>{const e=t/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)},Ct=t=>{const e=lt(t.r),r=lt(t.g),n=lt(t.b);return .2126*e+.7152*r+.0722*n},Fe=(t,e)=>{const r=typeof t=="string"?J(t):t,n=typeof e=="string"?J(e):e,i=Ct(r),s=Ct(n),a=Math.max(i,s),o=Math.min(i,s);return(a+.05)/(o+.05)},sn=(t,e=null)=>{const r=J(t,e),n=Fe(r,{r:255,g:255,b:255,a:1}),i=Fe(r,{r:0,g:0,b:0,a:1});return n>i},kr=(t,e=null)=>sn(t,e)?"white":"black",ha=t=>{const e=t.a!==void 0?t.a:1;return`rgba(${Math.round(t.r)}, ${Math.round(t.g)}, ${Math.round(t.b)}, ${e})`},da=(t,e)=>({r:Math.min(255,t.r+(255-t.r)*e),g:Math.min(255,t.g+(255-t.g)*e),b:Math.min(255,t.b+(255-t.b)*e),a:t.a??1}),ga=(t,e)=>({r:Math.max(0,t.r*(1-e)),g:Math.max(0,t.g*(1-e)),b:Math.max(0,t.b*(1-e)),a:t.a??1}),Y=(t,e=null,r=3)=>{const n=J(t),i=e?J(e):{r:255,g:255,b:255,a:1};let s=Fe(n,i);if(s>=r)return t;const a=Ct(i)<.5;let o={...n,a:n.a??1};const c=20,l=.1;for(let h=0;h<c&&(a?o=da(o,l):o=ga(o,l),s=Fe(o,i),!(s>=r));h++);return ha(o)},on=()=>typeof navigator>"u"?"":navigator.userAgent||"",an=()=>typeof navigator>"u"?void 0:navigator.userAgentData||void 0;let ln=class{constructor(){const e=an(),r=on(),n=s=>(typeof s=="string"||typeof s=="number")&&s?String(s).replace(/_/g,".").split(".").map(a=>parseInt(a)||0):[],i=(s="")=>{if(!s)return[];const a=new RegExp("^.*"+s+"[ :\\/]?(\\d+([\\._]\\d+)*).*$");return a.test(r)?n(r.replace(a,"$1")):[]};this.OS=(s=>(/(macOS|Mac OS X)/.test(r)?(/\(iP(hone|od touch);/.test(r)&&(s.iOS=i("CPU (?:iPhone )?OS ")),/\(iPad;/.test(r)?s.iOS=s.iPadOS=i("CPU (?:iPhone )?OS "):/(macOS|Mac OS X) \d/.test(r)&&(document.ontouchend!==void 0?s.iOS=s.iPadOS=i():s.macOS=i("(?:macOS|Mac OS X) "))):/Windows( NT)? \d/.test(r)?s.Windows=(a=>a[0]!==6||!a[1]?a:a[1]===1?[7]:a[1]===2?[8]:[8,1])(i("Windows(?: NT)?")):/Android \d/.test(r)?s.Android=i("Android"):/CrOS/.test(r)?s.ChromeOS=i():/X11;/.test(r)&&(s.Linux=i()),s))({}),e&&e.getHighEntropyValues(["architecture","model","platform","platformVersion","uaFullVersion"]).then(s=>(a=>{const o=s.platform,c=s.platformVersion;if(!(!o||!c)){if(/^i(OS|P(hone|od touch))$/.test(o))a.iOS=n(c);else if(/^iPad(OS)?$/.test(o))a.iOS=a.iPadOS=n(c);else if(/^(macOS|(Mac )?OS X|Mac(Intel)?)$/.test(o))document.ontouchend!==void 0?a.iOS=a.iPadOS=n():a.macOS=n(c);else if(/^(Microsoft )?Windows$/.test(o))a.Windows=n(c);else if(/^(Google )?Android$/.test(o))a.Android=n(c);else if(/^((Google )?Chrome OS|CrOS)$/.test(o))a.ChromeOS=n(c);else if(/^(Linux|Ubuntu|X11)$/.test(o))a.Linux=n(c);else return;Object.keys(this.OS).forEach(l=>delete this.OS[l]),Object.assign(this.OS,a)}})({})),this.UA=(s=>{let a=!1;if(e&&Array.isArray(e.brands)){const o=e.brands.reduce((c,l)=>(c[l.brand]=[l.version*1],c),{});o["Google Chrome"]?(a=!0,s.Blink=s.Chromium=o.Chromium||[],s.Chrome=o["Google Chrome"]):o["Microsoft Edge"]?(a=!0,s.Blink=s.Chromium=o.Chromium||[],s.Edge=o["Microsoft Edge"]):o.Opera&&(a=!0,s.Blink=s.Chromium=o.Chromium||[],s.Opera=o.Opera)}return a||(/ Gecko\/\d/.test(r)?(s.Gecko=i("rv"),/ Waterfox\/\d/.test(r)?s.Waterfox=i("Waterfox"):/ Firefox\/\d/.test(r)&&(s.Firefox=i("Firefox"))):/ Edge\/\d/.test(r)?(s.EdgeHTML=i("Edge"),s.Edge=s.EdgeHTML):/ Chrom(ium|e)\/\d/.test(r)?(s.Blink=s.Chromium=(o=>o[0]?o:i("Chrome"))(i("Chromium")),/ EdgA?\/\d/.test(r)?s.Edge=(o=>o[0]?o:i("Edg"))(i("EdgA")):/ OPR\/\d/.test(r)?s.Opera=i("OPR"):/ Vivaldi\/\d/.test(r)?s.Vivaldi=i("Vivaldi"):/ Silk\/\d/.test(r)?s.Silk=i("Silk"):/ UCBrowser\/\d/.test(r)?s.UCBrowser=i("UCBrowser"):/ Phoebe\/\d/.test(r)?s.Phoebe=i("Phoebe"):s.Chrome=(o=>o[0]?o:s.Chromium)(i("Chrome"))):/ AppleWebKit\/\d/.test(r)?(s.WebKit=i("AppleWebKit"),/ CriOS \d/.test(r)?s.Chrome=i("CriOS"):/ FxiOS \d/.test(r)?s.Firefox=i("FxiOS"):/ EdgiOS\/\d/.test(r)?s.Edge=i("EdgiOS"):/ Version\/\d/.test(r)&&(s.Safari=i("Version"))):/ Trident\/\d/.test(r)&&(s.Trident=i("Trident"),s.InternetExplorer=(o=>o[0]?o:i("MSIE"))(i("rv")))),/[\[; ]FB(AN|_IAB)\//.test(r)&&(s.Facebook=i("FBAV")),/ Line\/\d/.test(r)&&(s.LINE=i("Line")),s})({}),this.Env={get:()=>[this.OS,this.UA].reduce((s,a)=>{for(const o in a)a[o]&&s.push(o);return s},[])}}};class fa extends ln{get iOSRequest(){const e=an(),r=on();if(this.OS.iOS&&!this.OS.iPadOS)return"mobile";if(this.OS.iPadOS)return/\(iPad;/.test(r)||e&&/^iPad(OS)?$/.test(e.platform)?"mobile":"desktop"}}const pa=new ln;new fa;const Or=["div","span","p","br","hr","b","i","em","strong","s","u","mark","small","sub","sup","abbr","cite","code","data","dfn","kbd","q","samp","time","var","blockquote","pre","svg","g","path","circle","ellipse","rect","line","polygon","polyline","text","tspan","defs","use"],ma=/^on/i,ya=new Set(["href","src","action","formaction","xlink:href"]),ba=/^\s*(javascript|data):/i;function va(t,e){const r=t.document.createElement("div");if("Sanitizer"in t&&typeof r.setHTML=="function")try{const i=new t.Sanitizer({allowElements:Or});return r.setHTML(e,{sanitizer:i}),r.firstElementChild}catch{}const n=t.document.implementation.createHTMLDocument("");for(n.body.innerHTML=e,wa(n.body,new Set(Or));n.body.firstChild;)r.appendChild(t.document.adoptNode(n.body.firstChild));return r.firstElementChild}function wa(t,e){const r=Array.from(t.querySelectorAll("*")).reverse();for(const n of r){if(!e.has(n.localName)){n.replaceWith(...Array.from(n.childNodes));continue}for(const{name:i,value:s}of Array.from(n.attributes))(ma.test(i)||ya.has(i)&&ba.test(s))&&n.removeAttribute(i)}}function ct(t){switch(t){case C.Mask:return"rgba(255, 255, 255, 0.5)";case C.Highlight:case C.HighlightUnderline:return"#FFFF00";default:return"#FF0000"}}const C={Highlight:"highlight",HighlightUnderline:"highlightUnderline",Underline:"underline",Strikethrough:"strikethrough",Outline:"outline",TextColor:"textColor",Mask:"mask",Template:"template"};var cn=(t=>(t.Wrap="wrap",t.Viewport="viewport",t.Bounds="bounds",t.Page="page",t))(cn||{}),un=(t=>(t.Boxes="boxes",t.Bounds="bounds",t))(un||{});const Sa=()=>"Highlight"in window,xr=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class ka{constructor(e,r,n,i){this.wnd=e,this.comms=r,this.id=n,this.name=i,this.items=[],this.lastItemId=0,this.container=void 0,this._activatable=!1,this._hoverable=!1,this.hoveredItem=void 0,this.experimentalHighlights=!1,this._tintSubKeys=new Map,this._subKeyCounter=0,this.maskSvg=void 0,this.shadowHost=void 0,this.shadowRoot=void 0,this.currentRender=0,Sa()&&(this.experimentalHighlights=!0,this.notTextFlag=new Map),this.activationHandler=this.handleActivation.bind(this),this.wnd.document.addEventListener("pointerup",this.activationHandler),this.hoverHandler=this.handleHover.bind(this),this.wnd.document.addEventListener("pointermove",this.hoverHandler)}get activatable(){return this._activatable}set activatable(e){this._activatable=e}get hoverable(){return this._hoverable}set hoverable(e){if(this._hoverable=e,!e&&this.hoveredItem){const r=this.hoveredItem.range.getBoundingClientRect(),n=this.wnd.devicePixelRatio;this.comms.send("decoration_pointer_leave",{decorationId:this.hoveredItem.decoration.id,group:this.name,rect:{top:r.top*n,left:r.left*n,width:r.width*n,height:r.height*n}}),this.hoveredItem=void 0}}add(e){const r=`${this.id}-${this.lastItemId++}`,n=na(this.wnd.document,e.locator);if(!n){this.comms.log("Can't locate DOM range for decoration",e);return}const i=n.commonAncestorContainer;if(i.nodeType!==Node.TEXT_NODE&&this.experimentalHighlights&&(xr.includes(i.nodeName.toUpperCase())&&this.notTextFlag?.set(r,!0),n.cloneContents().querySelector(xr.join(", ").toLowerCase())&&this.notTextFlag?.set(r,!0),(i.textContent?.trim()||"").length===0&&this.notTextFlag?.set(r,!0)),this.experimentalHighlights&&!this.notTextFlag?.has(r)){const a=o=>{for(;o&&o.nodeType===Node.ELEMENT_NODE;){if(o.namespaceURI?.includes("svg"))return!0;o=o.parentNode}return!1};(a(n.startContainer)||a(n.endContainer))&&this.notTextFlag?.set(r,!0)}if(this.experimentalHighlights){const{type:a}=e.style,{layout:o,width:c,expand:l}=e.style;a!==C.TextColor&&(a===C.Outline||a===C.Template||a===C.Mask||o!==void 0&&o!=="boxes"||c!==void 0&&c!=="wrap"||l)&&this.notTextFlag?.set(r,!0)}const s={decoration:e,id:r,range:n,hitRects:[],clickableElements:void 0,container:void 0};this.items.push(s),this.layout(s),s.hitRects=this.clientRectsToDocCoords(Pe(s.range,!1,!1,(s.decoration.style.expand??0)+this.hitGap())),this.renderLayout([s])}remove(e){const r=this.items.findIndex(s=>s.decoration.id===e);if(r<0)return;const n=this.items[r],i=n.decoration.style?.type===C.Mask;if(this.items.splice(r,1),n.clickableElements=void 0,n.container&&(n.container.remove(),n.container=void 0),this.experimentalHighlights&&!this.notTextFlag?.has(n.id)&&n.highlightSubKey){const s=this.wnd.CSS.highlights;s.get(n.highlightSubKey)?.delete(n.range),this.items.some(o=>o.highlightSubKey===n.highlightSubKey)||s.delete(n.highlightSubKey);const a=this.wnd.document.getElementById(`${this.id}-style`);a&&this._rebuildHighlightStylesheet(a)}this.notTextFlag?.delete(n.id),this.hoveredItem===n&&(this.hoveredItem=void 0),i&&this.updateSharedMask()}update(e){this.remove(e.id),this.add(e)}clear(){this.clearContainer(),this.items.length=0,this.notTextFlag?.clear(),this.hoveredItem=void 0,this.maskSvg&&(this.maskSvg.remove(),this.maskSvg=void 0),this.shadowHost&&(this.shadowHost.remove(),this.shadowHost=void 0,this.shadowRoot=void 0)}destroy(){this.clear(),this.wnd.document.removeEventListener("pointerup",this.activationHandler),this.wnd.document.removeEventListener("pointermove",this.hoverHandler)}clientRectsToDocCoords(e){const r=ye(this.wnd),n=r.xDocOffset,i=r.yDocOffset;return n===0&&i===0?e:e.map(s=>({left:s.left+n,top:s.top+i,right:s.right+n,bottom:s.bottom+i,width:s.width,height:s.height}))}pointerToDocCoords(e){const r=ye(this.wnd);return{docX:e.clientX+r.xDocOffset,docY:e.clientY+r.yDocOffset}}effectiveZoom(){if(!pa.UA.Blink)return 1;const e=parseFloat(this.wnd.getComputedStyle(this.wnd.document.documentElement).zoom),r=parseFloat(this.wnd.getComputedStyle(this.wnd.document.body).zoom);return(e||1)*(r||1)}hitGap(){return 2*this.effectiveZoom()}handleActivation(e){if(!this._activatable)return;const{docX:r,docY:n}=this.pointerToDocCoords(e),i=this.wnd.devicePixelRatio;for(const s of this.items){let a;if(s.decoration.style.type===C.Template)for(const o of s.clickableElements??[]){const c=o.getBoundingClientRect();if(W(c,e.clientX,e.clientY,0)){a=c;break}}else for(const o of s.hitRects)if(W(o,r,n,0)){a=s.range.getBoundingClientRect();break}if(a){this.comms.send("decoration_activated",{decorationId:s.decoration.id,group:this.name,rect:{top:a.top*i,left:a.left*i,width:a.width*i,height:a.height*i},point:{x:e.clientX*i,y:e.clientY*i}});return}}}handleHover(e){if(!this._hoverable)return;const{docX:r,docY:n}=this.pointerToDocCoords(e),i=this.wnd.devicePixelRatio;let s,a;for(const o of this.items){if(o.decoration.style.type===C.Template)for(const c of o.clickableElements??[]){const l=c.getBoundingClientRect();if(W(l,e.clientX,e.clientY,0)){s=o,a=l;break}}else for(const c of o.hitRects)if(W(c,r,n,0)){s=o,a=o.range.getBoundingClientRect();break}if(s)break}if(s!==this.hoveredItem){if(this.hoveredItem){const o=this.hoveredItem.range.commonAncestorContainer.isConnected?this.hoveredItem.range.getBoundingClientRect():null;this.comms.send("decoration_pointer_leave",{decorationId:this.hoveredItem.decoration.id,group:this.name,rect:o?{top:o.top*i,left:o.left*i,width:o.width*i,height:o.height*i}:void 0,point:{x:e.clientX*i,y:e.clientY*i}})}this.hoveredItem=s,s&&a&&this.comms.send("decoration_pointer_enter",{decorationId:s.decoration.id,group:this.name,rect:{top:a.top*i,left:a.left*i,width:a.width*i,height:a.height*i},point:{x:e.clientX*i,y:e.clientY*i}})}}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.wnd.document.fonts.ready.then(()=>{this.currentRender=this.wnd.requestAnimationFrame(()=>{this.items.forEach(e=>{this.layout(e),e.hitRects=this.clientRectsToDocCoords(Pe(e.range,!1,!1,(e.decoration.style.expand??0)+this.hitGap()))}),this.renderLayout(this.items),this.updateSharedMask()})})}experimentalLayout(e){const r=this.requireContainer(!0),n=this.wnd.CSS.highlights,i=e.decoration.style,s=i.type??C.Highlight,a=i.tint??ct(s),o=i.width,c=i.layout,l=this._getSubKey(s,a);e.highlightSubKey&&(n.get(e.highlightSubKey)?.delete(e.range),e.highlightSubKey!==l&&!this.items.some(p=>p!==e&&p.highlightSubKey===e.highlightSubKey)&&n.delete(e.highlightSubKey)),e.highlightSubKey=l;let h;n.has(l)?h=n.get(l):(h=new this.wnd.Highlight,n.set(l,h));const d=(p,m)=>this.wnd.document.caretPositionFromPoint?.(p,m)??null;if(s===C.TextColor&&(c==="bounds"||o==="bounds"||o==="page")){const p=ye(this.wnd);if(p.isVertical)console.warn("Vertical writing detected: caretPositionFromPoint has known bugs, falling back to original range"),h.add(e.range);else{const m=e.range.getBoundingClientRect();let w,E;o==="page"?(w=Math.floor(p.inlineStart(m)/p.pageInlineSize)*p.pageInlineSize,E=p.pageInlineSize):(w=p.inlineStart(m),E=p.inlineSize(m));const x=d(w,p.blockStart(m)+1),N=d(w+E,p.blockStart(m)+p.blockSize(m)-1);if(x&&N){const q=this.wnd.document.createRange();q.setStart(x.offsetNode,x.offset),q.setEnd(N.offsetNode,N.offset),h.add(q),e.range=q}else h.add(e.range)}}else h.add(e.range);const g=this.getBackgroundColor(),f=i.enforceContrast!==!1?Y(a,g):a;let y;switch(s){case C.Underline:y=`::highlight(${l}) {
|
|
25
|
+
`:R}`,v===a.lastClosingBracketAt+1&&(!t[v]||!ot.has(t[v]))&&(T+=" "),a.leftOuterWhitespace===a.lastOpeningBracketAt&&A.last()&&A.last()[1]<a.lastOpeningBracketAt&&(!b?.dumpLinkHrefsNearby?.putOnNewLine||!ot.has(t[v]))&&(T=" "+T)):T=R,T!==null&&(a.leftOuterWhitespace===0||!U(t,v-1))&&(!b.dumpLinkHrefsNearby?.enabled||a.name!=="a")&&(T=void 0);let L=0;if(m&&ot.has(t[v])){b.dumpLinkHrefsNearby?.putOnNewLine&&(T=`${t[v]}${T||""}`);let Q=U(t,v);Q&&T?.endsWith(`
|
|
26
|
+
`)?L+=Q-u:(!Q||Q>u)&&L++}b.cb({tag:a,deleteFrom:a.leftOuterWhitespace,deleteTo:v+L,insert:T,rangesArr:A,proposedReturn:[a.leftOuterWhitespace,v+L,T]}),ge(),E(u,b,A)}else a={};B(u)||(a={})}H&&(H=!1)}if((!W||t[u]==="<"&&U(t,U(t,u))&&t[U(t,u)]==="/"&&t.startsWith("script",U(t,U(t,u))))&&P(u)&&!P(u-1)&&!`'"`.includes(t[u+1])&&(!`'"`.includes(t[u+2])||/\w/.test(t[u+1]))&&!(t[u+1]==="c"&&t[u+2]===":")&&!(t[u+1]==="f"&&t[u+2]==="m"&&t[u+3]==="t"&&t[u+4]===":")&&!(t[u+1]==="s"&&t[u+2]==="q"&&t[u+3]==="l"&&t[u+4]===":")&&!(t[u+1]==="x"&&t[u+2]===":")&&!(t[u+1]==="f"&&t[u+2]==="n"&&t[u+3]===":")&&br(a,t,u)){if(B(U(t,u)))continue;if(a.nameEnds&&a.nameEnds<u&&!a.lastClosingBracketAt&&(a.onlyPlausible===!0&&a.attributes?.length||a.onlyPlausible===!1)){let v=N(t,u,a.leftOuterWhitespace,u,a.lastOpeningBracketAt,u);b.cb({tag:a,deleteFrom:a.leftOuterWhitespace,deleteTo:u,insert:v,rangesArr:A,proposedReturn:[a.leftOuterWhitespace,u,v]}),E(u,b,A),a={},f={}}if(a.lastOpeningBracketAt!==void 0&&a.onlyPlausible&&a.name&&!a.quotes&&(a.lastOpeningBracketAt=void 0,a.name=void 0,a.onlyPlausible=!1),(a.lastOpeningBracketAt===void 0||!a.onlyPlausible)&&!a.quotes&&(a.lastOpeningBracketAt=u,a.slashPresent=!1,a.attributes=[],l===null?a.leftOuterWhitespace=u:b.trimOnlySpaces&&l===0?a.leftOuterWhitespace=d||u:a.leftOuterWhitespace=l,`${t[u+1]}${t[u+2]}${t[u+3]}`=="!--"||`${t[u+1]}${t[u+2]}${t[u+3]}${t[u+4]}${t[u+5]}${t[u+6]}${t[u+7]}${t[u+8]}`=="![CDATA[")){let v=!0;t[u+2]==="-"&&(v=!1);let k;for(let S=u;S<$;S++)if((!k&&v&&`${t[S-2]}${t[S-1]}${t[S]}`=="]]>"||!v&&`${t[S-2]}${t[S-1]}${t[S]}`=="-->")&&(k=S),k&&(k<S&&t[S].trim()||t[S+1]===void 0)){let R=S;(t[S+1]===void 0&&!t[S].trim()||t[S]===">")&&(R+=1),(!s.length||s[s.length-1][0]!==a.lastOpeningBracketAt)&&s.push([a.lastOpeningBracketAt,k+1]),(!o.length||o[o.length-1][0]!==a.lastOpeningBracketAt)&&o.push([a.lastOpeningBracketAt,k+1]);let T=N(t,S,a.leftOuterWhitespace,R,a.lastOpeningBracketAt,k);b.cb({tag:a,deleteFrom:a.leftOuterWhitespace,deleteTo:R,insert:T,rangesArr:A,proposedReturn:[a.leftOuterWhitespace,R,T]}),u=S-1,t[S]===">"&&(u=S),a={},f={};break}}}!t[u].trim()||t[u].charCodeAt(0)===847?(l===null&&(l=u,a.lastOpeningBracketAt!==void 0&&a.lastOpeningBracketAt<u&&a.nameStarts&&a.nameStarts<a.lastOpeningBracketAt&&u===a.lastOpeningBracketAt+1&&!n.some(v=>v.name===a.name)&&(a.onlyPlausible=!0,a.name=void 0,a.nameStarts=void 0)),(t[u]===`
|
|
27
|
+
`||t[u]==="\r")&&(h=u,g&&(g=!1))):(l!==null&&(!a.quotes&&f.equalsAt>l-1&&f.nameEnds&&f.equalsAt>f.nameEnds&&t[u]!=='"'&&t[u]!=="'"&&(St(f)&&a.attributes.push(f),f={},a.equalsSpottedAt=void 0),l=null),g||(g=!0,C&&!W&&typeof h=="number"&&u&&h<u-1&&(t.slice(h+1,u).trim()?h=null:b.ignoreIndentations||A.push([h+1,u])))),t[u]===" "?d===null&&(d=u):d!==null&&(d=null),a.name==="script"&&(W=!a.slashPresent)}if(t&&!b.ignoreIndentations&&(b.trimOnlySpaces&&t[0]===" "||!b.trimOnlySpaces&&!t[0].trim()))for(let u=0;u<$;u++)if(b.trimOnlySpaces&&t[u]!==" "||!b.trimOnlySpaces&&t[u].trim()){A.push([0,u]);break}else t[u+1]||A.push([0,u+1]);if(t&&(b.trimOnlySpaces&&t[~-t.length]===" "||!b.trimOnlySpaces&&!t[~-t.length].trim())){for(let u=t.length;u--;)if(b.trimOnlySpaces&&t[u]!==" "||!b.trimOnlySpaces&&t[u].trim()){A.push([u+1,$]);break}}let M=A.current();if(!e?.cb&&M&&(M[0]&&!M[0][0]&&(M[0][1],A.ranges[0]=[A.ranges[0][0],A.ranges[0][1]]),M[M.length-1]?.[1]===t.length&&(M[M.length-1][0],A.ranges))){let u=A.ranges[A.ranges.length-1][0];t[u-1]&&(b.trimOnlySpaces&&t[u-1]===" "||!b.trimOnlySpaces&&!t[u-1].trim())&&(u-=1);let v=A.ranges[A.ranges.length-1][2];A.ranges[A.ranges.length-1]=[u,A.ranges[A.ranges.length-1][1]],v?.trim()&&A.ranges[A.ranges.length-1].push(v.trimEnd())}return{log:{timeTakenInMilliseconds:Date.now()-r},result:Wa(t,A.current()),ranges:A.current(),allTagLocations:s,filteredTagLocations:o}}class Et{speechSynthesis;speechSynthesisUtterance;currentVoice=null;currentUtterances=[];currentUtteranceIndex=0;playbackState="idle";eventListeners=new Map;voiceManager=null;voices=[];defaultVoice=null;speakInContentLanguage=!1;languageVoiceCache=new Map;warmingLanguages=new Map;speakGeneration=0;resumeInfinityTimer;isSpeakingInternal=!1;isPausedInternal=!1;isAndroidPaused=!1;pausedAtUtteranceIndex=null;initialized=!1;maxLengthExceeded="warn";utterancesBeingCancelled=!1;rate=1;pitch=1;volume=1;features;patches;constructor(){if(this.features=wi(),this.patches=Si(),!this.features.speechSynthesis||!this.features.speechSynthesisUtterance)throw new Error("Web Speech API is not available in this environment");this.speechSynthesis=this.features.speechSynthesis,this.speechSynthesisUtterance=this.features.speechSynthesisUtterance}shouldUseResumeInfinity(){const e=this.currentVoice,r=!!(e?.name&&typeof e.name=="string"&&e.name.toLocaleLowerCase().includes("(natural)"));return this.patches.isAndroid!==!0&&!this.patches.isFirefox&&!this.patches.isSafari&&!r}createUtterance(e){return new this.speechSynthesisUtterance(e)}async initialize(e={}){const{languages:r,maxTimeout:n,interval:i,maxLengthExceeded:s="warn"}=e;if(this.initialized)return!1;this.maxLengthExceeded=s;try{this.voiceManager=await x.initialize({languages:r,maxTimeout:n,interval:i}),this.voices=this.voiceManager.getVoices();const o=r||[...navigator.languages||["en"]];return this.defaultVoice=await this.voiceManager.getDefaultVoice(o,this.voices),this.initialized=!0,!0}catch(o){return console.error("Failed to initialize WebSpeechEngine:",o),this.initialized=!1,!1}}validateText(e){if(new TextEncoder().encode(e).length>4096){const n="Text exceeds max length of 4096 bytes, which may not work with some voices.";switch(this.maxLengthExceeded){case"none":break;case"error":throw new Error(`WebSpeechEngine: ${n}`);default:console.warn(`WebSpeechEngine: ${n}`)}}}getCurrentVoiceForUtterance(e){return e&&typeof e=="object"?e:typeof e=="string"?this.voices.find(r=>r.name===e||r.language===e)||null:this.currentVoice||this.defaultVoice}voiceMatchesLanguage(e,r){const[n,i]=j(r),[s,o]=j(e.language);return s===n&&(!i||o===i)}voiceForUtteranceSync(e){const r=this.getCurrentVoiceForUtterance(this.currentVoice);if(!this.speakInContentLanguage||!e.language)return r;const n=D(e.language);if(r&&this.voiceMatchesLanguage(r,n))return r;if(this.languageVoiceCache.has(n))return this.languageVoiceCache.get(n)??r}async voiceForUtterance(e){const r=this.voiceForUtteranceSync(e);return r!==void 0?r:(await this.warmLanguageVoiceCache([e]),this.voiceForUtteranceSync(e)??this.getCurrentVoiceForUtterance(this.currentVoice))}async warmLanguageVoiceCache(e){if(!this.speakInContentLanguage||!this.voiceManager)return;const r=new Set(e.map(o=>o.language).filter(o=>!!o).map(o=>D(o)).filter(o=>!this.languageVoiceCache.has(o))),n=[...r].filter(o=>this.warmingLanguages.has(o)),s=[...r].filter(o=>!this.warmingLanguages.has(o)).map(o=>{const a=(async()=>{await x.initialize({languages:[o]}),this.voices=this.voiceManager.getVoices();const c=this.voices.filter(h=>this.voiceMatchesLanguage(h,o)),d=(await this.voiceManager.sortVoicesByQuality(c))[0]??null;this.languageVoiceCache.set(o,d),d||this.emitEvent({type:"languagefallback",detail:{language:o,reason:"no-matching-voice"}})})();return this.warmingLanguages.set(o,a.finally(()=>this.warmingLanguages.delete(o))),this.warmingLanguages.get(o)});await Promise.all([...s,...n.map(o=>this.warmingLanguages.get(o))])}getCurrentVoice(){return this.currentVoice}setSpeakInContentLanguage(e){this.speakInContentLanguage=e,e&&this.warmLanguageVoiceCache(this.currentUtterances)}getSpeakInContentLanguage(){return this.speakInContentLanguage}toPlainText(e){return e.map(r=>({...r,plain:r.plain??(r.ssml?tn(r.ssml).result:"")}))}loadUtterances(e){this.currentUtterances=this.toPlainText(e),this.currentUtteranceIndex=0,this.warmLanguageVoiceCache(this.currentUtterances),this.setState("ready"),this.emitEvent({type:"ready"})}async setVoice(e){const r=this.currentVoice;if(typeof e=="string"){const n=this.voices.find(i=>i.name===e||i.language===e);n?(this.currentVoice=n,r&&r.name!==n.name&&(this.currentUtteranceIndex=0)):console.warn(`Voice "${e}" not found`)}else this.currentVoice=e,r&&r.name!==e.name&&(this.currentUtteranceIndex=0);this.voiceManager&&this.defaultVoice&&this.currentVoice&&this.currentVoice.language!==this.defaultVoice.language&&(this.defaultVoice=await this.voiceManager.getDefaultVoice([this.currentVoice.language],this.voices))}async getAvailableVoices(){if(this.voices.length>0)return this.voices;try{return await this.initialize(),this.voices}catch{return[]}}speak(e){if(e!==void 0){if(e<0||e>=this.currentUtterances.length)throw new Error("Invalid utterance index");this.currentUtteranceIndex=e}if(this.currentUtterances.length===0){console.warn("No utterances loaded");return}this.cancelCurrentSpeech();const r=++this.speakGeneration;this.isSpeakingInternal=!0,this.isPausedInternal=!1,this.setState("playing"),this.emitEvent({type:"start"}),this.stopResumeInfinity(),this.currentUtteranceIndex=e??0,this.currentUtteranceIndex>=this.currentUtterances.length&&(this.currentUtteranceIndex=0),this.speakCurrentUtterance(r)}cancelCurrentSpeech(){this.patches.isFirefox&&this.speechSynthesis.speaking&&(this.utterancesBeingCancelled=!0,setTimeout(()=>{this.utterancesBeingCancelled=!1},100)),this.speechSynthesis.cancel()}async speakCurrentUtterance(e){if(this.currentUtteranceIndex>=this.currentUtterances.length){this.setState("idle"),this.emitEvent({type:"end"});return}const r=this.currentUtterances[this.currentUtteranceIndex],n=r.plain??"";this.validateText(n);const i=this.createUtterance(n),s=await this.voiceForUtterance(r);if(e===this.speakGeneration){if(s&&this.voiceManager){const o=this.voiceManager.convertToSpeechSynthesisVoice(s);o&&(i.voice=o,i.lang=o.lang)}r.language&&(i.lang=r.language),i.rate=this.rate,i.pitch=this.pitch,i.volume=this.volume,i.onstart=()=>{this.isSpeakingInternal=!0,this.isPausedInternal=!1,this.setState("playing"),this.emitEvent({type:"start"}),this.patches.isAndroid&&this.isAndroidPaused&&(this.isAndroidPaused=!1),this.shouldUseResumeInfinity()&&this.startResumeInfinity(i)},i.onend=()=>{if(this.utterancesBeingCancelled){this.utterancesBeingCancelled=!1;return}this.playbackState!=="idle"&&(this.isSpeakingInternal=!1,this.isPausedInternal=!1,this.stopResumeInfinity(),this.currentUtteranceIndex>=this.currentUtterances.length-1&&this.setState("idle"),this.emitEvent({type:"end"}))},i.onerror=o=>{if(o.error==="interrupted"&&this.patches.isAndroid&&this.isAndroidPaused)return;this.isSpeakingInternal=!1,this.isPausedInternal=!1,this.stopResumeInfinity(),this.setState("idle"),["synthesis-unavailable","audio-hardware","voice-unavailable"].includes(o.error)&&(console.log("[ENGINE] fatal error detected, resetting index to 0"),this.currentUtteranceIndex=0),o.error==="interrupted"||o.error==="canceled"?this.emitEvent({type:"stop"}):this.emitEvent({type:"error",detail:{error:o.error,message:`Speech synthesis error: ${o.error}`}})},i.onpause=()=>{this.isPausedInternal=!0,this.isSpeakingInternal=!1,this.emitEvent({type:"pause"})},i.onresume=()=>{this.isPausedInternal=!1,this.isSpeakingInternal=!0,this.emitEvent({type:"resume"})},i.onboundary=o=>{this.emitEvent({type:"boundary",detail:{charIndex:o.charIndex,charLength:o.charLength,elapsedTime:o.elapsedTime,name:o.name}})},i.onmark=o=>{this.emitEvent({type:"mark",detail:{name:o.name}})},this.speechSynthesis.speak(i)}}startResumeInfinity(e){this.shouldUseResumeInfinity()&&(this.resumeInfinityTimer=window.setTimeout(()=>{if(e){const{paused:n,speaking:i}=this.speechSynthesis,s=i||this.isSpeakingInternal,o=n||this.isPausedInternal;s&&!o&&(this.speechSynthesis.pause(),this.speechSynthesis.resume())}this.startResumeInfinity(e)},5e3))}stopResumeInfinity(){this.resumeInfinityTimer&&(clearTimeout(this.resumeInfinityTimer),this.resumeInfinityTimer=void 0)}pause(){this.playbackState==="playing"&&(this.pausedAtUtteranceIndex=this.currentUtteranceIndex,this.patches.isAndroid?(this.isAndroidPaused=!0,this.speechSynthesis.cancel()):this.speechSynthesis.pause(),this.isPausedInternal=!0,this.isSpeakingInternal=!1,this.setState("paused"),this.emitEvent({type:"pause"}))}resume(){this.playbackState==="paused"&&this.currentUtteranceIndex<this.currentUtterances.length&&(this.isPausedInternal=!1,this.isSpeakingInternal=!0,this.setState("playing"),this.emitEvent({type:"resume"}),this.patches.isAndroid||this.pausedAtUtteranceIndex!==this.currentUtteranceIndex?this.speak(this.currentUtteranceIndex):this.speechSynthesis.resume(),this.pausedAtUtteranceIndex=null)}stop(){this.speechSynthesis.cancel(),this.speakGeneration++,this.currentUtteranceIndex=0,this.patches.isAndroid&&(this.isAndroidPaused=!1),this.setState("idle"),this.emitEvent({type:"stop"})}setRate(e){this.rate=Math.max(.1,Math.min(10,e))}getRate(){return this.rate}setPitch(e){this.pitch=Math.max(0,Math.min(2,e))}getPitch(){return this.pitch}setVolume(e){this.volume=Math.max(0,Math.min(1,e))}getVolume(){return this.volume}getState(){return this.playbackState}getCurrentUtteranceIndex(){return this.currentUtteranceIndex}setCurrentUtteranceIndex(e,r){if(e<0||e>=this.currentUtterances.length){r?.(!1);return}e!==this.currentUtteranceIndex&&(!this.isPausedInternal&&this.isSpeakingInternal&&this.cancelCurrentSpeech(),this.currentUtteranceIndex=e,r?.(!0))}getUtteranceCount(){return this.currentUtterances.length}on(e,r){return this.eventListeners.has(e)||this.eventListeners.set(e,[]),this.eventListeners.get(e).push(r),()=>{const n=this.eventListeners.get(e);if(n){const i=n.indexOf(r);i>-1&&n.splice(i,1)}}}emitEvent(e){const r=this.eventListeners.get(e.type);r&&r.forEach(n=>n(e))}setState(e){const r=this.playbackState;if(this.playbackState=e,r!==e)switch(e){case"idle":this.emitEvent({type:"idle"});break;case"loading":this.emitEvent({type:"loading"});break;case"ready":this.emitEvent({type:"ready"});break}}async destroy(){this.stop(),this.stopResumeInfinity(),this.eventListeners.clear(),this.currentUtterances=[],this.currentVoice=null,this.voices=[],this.defaultVoice=null,this.languageVoiceCache.clear(),this.warmingLanguages.clear(),this.initialized=!1}}class to{id="webspeech";name="Web Speech API";voiceEngine=null;async getVoices(){return this.voiceEngine||(this.voiceEngine=new Et,await this.voiceEngine.initialize()),this.voiceEngine.getAvailableVoices()}async createEngine(e){const r=new Et;return await r.initialize(),e&&await r.setVoice(e),r}async destroy(){this.voiceEngine&&(await this.voiceEngine.destroy(),this.voiceEngine=null)}}const ie="\\p{Pe}\\p{Pf}.,;:!?,。、;:!?،؛؟",Ct="\\p{Ps}\\p{Pi}¿¡",ro=new RegExp(`^[${ie}]`,"u"),no=new RegExp(`^[${Ct}]`,"u");function Xe(t){return ro.test(t)}function io(t){return no.test(t)}function rn(t,e){const r=[];let n=-1,i=-1;const s=()=>{n!==-1&&(r.push({text:so(t,n,i),offset:t[n].offset}),n=-1,i=-1)};for(let o=0;o<t.length;o++){const a=t[o];if(a.text.length>e){s(),r.push({text:a.text,offset:a.offset});continue}const c=a.offset+a.text.length,l=n===-1?a.text.length:c-t[n].offset;n!==-1&&l>e&&s(),n===-1&&(n=o),i=o}return s(),r}function so(t,e,r){const n=t[e],i=t[r];return n===i?n.text:t.slice(e,r+1).map(s=>s.text).join("")}const nn=new RegExp(`[^${ie}]*[${ie}]+\\s*|[^${ie}]+$`,"gu"),ao=/\S+\s*|\s+/g;function _t(t,e,r){const n=[];for(const i of t.matchAll(r))i[0].length!==0&&n.push({text:i[0],offset:e+i.index,atomic:!1});return n}function Ft(t,e){if(t.text.length<=e||t.atomic)return[t];const r=_t(t.text,t.offset,ao);if(r.length>1)return r.flatMap(o=>Ft(o,e));const n=[];let i=t.offset,s="";for(const o of t.text)s.length>0&&s.length+o.length>e&&(n.push({text:s,offset:i,atomic:!1}),i+=s.length,s=""),s+=o;return s.length>0&&n.push({text:s,offset:i,atomic:!1}),n}function sn(t,e){if(t.length<=e)return[{text:t,offset:0}];const n=_t(t,0,nn).flatMap(i=>Ft(i,e));return rn(n,e)}const oo=/<([a-zA-Z][\w-]*)\b[^>]*>[\s\S]*?<\/\1>|<[a-zA-Z][\w-]*\b[^>]*\/>|[^<]+/g;function an(t,e){if(t.length<=e)return[{text:t,offset:0}];const r=[];for(const i of t.matchAll(oo))i[0][0]==="<"?r.push({text:i[0],offset:i.index,atomic:!0}):r.push(..._t(i[0],i.index,nn));const n=r.flatMap(i=>Ft(i,e));return rn(n,e)}const lo={wav:"audio/wav",mp3:"audio/mpeg",opus:"audio/ogg",ogg:"audio/ogg",aac:"audio/aac",flac:"audio/flac",webm:"audio/webm",m4a:"audio/mp4"};function on(t){return lo[t]??`audio/${t}`}const co=["flac","wav","opus","aac","ogg","webm","mp3"],uo=["opus","aac","webm","ogg","mp3","wav","flac"];function ln(t,e,r){const n=a=>r(on(a))!=="",i=t.formats.filter(n);if(e.preferredFormat&&i.includes(e.preferredFormat))return e.preferredFormat;const s=e.strategy==="bandwidth"?uo:co,o=[...s,...i.filter(a=>!s.includes(a))];for(const a of o)if(i.includes(a))return a;return t.default}const ho=new Set(["wav","flac"]),go={mp3:48e3,opus:24e3,aac:48e3,ogg:48e3,webm:32e3};function cn(t,e,r){return ho.has(t)||!e||!r?void 0:r.saveData===!0||/2g/.test(r.effectiveType??"")?go[t]:void 0}function Ht(t){return{source:"server",label:t.name,name:t.name,originalName:t.originalName,language:t.language,otherLanguages:t.otherLanguages,gender:t.gender??void 0,quality:t.quality,provider:t.provider,identifier:t.identifier,controls:t.controls}}class Oe extends Error{status;type;title;instance;constructor(e,r){super(e),this.name="SpeechServerError",this.status=r.status,this.type=r.type,this.title=r.title,this.instance=r.instance}}async function Ee(t){if((t.headers.get("content-type")??"").includes("application/problem+json"))try{const r=await t.json();return new Oe(r.detail||r.title||`Request failed with status ${t.status}`,{status:r.status??t.status,type:r.type,title:r.title,instance:r.instance})}catch{}return new Oe(`Request failed with status ${t.status}`,{status:t.status})}const fo=3,po=400;function mo(t){const e=atob(t),r=new Uint8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return r.buffer}function yo(t){return Math.max(.25,Math.min(4,t))}function $e(t){return t?.plain??t?.ssml??void 0}function Sr(t){return t instanceof Oe?{message:t.message,status:t.status,type:t.type,title:t.title,instance:t.instance}:t instanceof Error?{message:t.message}:{message:String(t)}}class un{endpoints;fetchImpl;currentVoice=null;voices=[];serviceInfo=null;serviceInfoPromise=null;currentUtterances=[];currentUtteranceIndex=0;playbackState="idle";eventListeners=new Map;speakInContentLanguage=!1;speakGeneration=0;loadGeneration=0;prefetchWindow;readyBufferChars;overLengthText;formatOptions;canPlayType;prefetchCache=new Map;prefetchChainTail=Promise.resolve();audioContext=null;masterGain=null;scheduledChunks=[];boundaryRafHandle=null;rate=1;pitch=1;volume=1;constructor(e){this.endpoints=e.endpoints,this.fetchImpl=e.fetch??fetch.bind(globalThis),this.prefetchWindow=e.prefetchWindow??fo,this.readyBufferChars=e.readyBufferChars??po,this.overLengthText=e.overLengthText??"split",this.formatOptions=e.format??{},this.canPlayType=typeof Audio<"u"?r=>new Audio().canPlayType(r):()=>""}setAvailableVoices(e){this.voices=e}loadUtterances(e){this.clearPrefetchCache(),this.currentUtterances=e,this.currentUtteranceIndex=0,this.setState("loading"),this.bufferUntilReady(++this.loadGeneration)}async bufferUntilReady(e){const r=Math.min(this.indexCoveringChars(this.readyBufferChars),this.prefetchWindow),n=[];for(let i=0;i<=r;i++){this.queuePrefetch(i);const s=this.prefetchCache.get(i);s&&n.push(s.then(o=>o[0]))}try{await Promise.all(n)}catch{}e!==this.loadGeneration||this.playbackState!=="loading"||(this.setState("ready"),this.emitEvent({type:"ready"}))}indexCoveringChars(e){if(this.currentUtterances.length===0)return-1;let r=0;for(let n=0;n<this.currentUtterances.length;n++)if(r+=($e(this.currentUtterances[n])??"").length,r>=e)return n;return this.currentUtterances.length-1}setVoice(e){if(typeof e=="string"){const r=this.voices.find(n=>n.identifier===e||n.name===e);r?this.currentVoice=r:(this.currentVoice={source:"server",label:e,name:e,originalName:e,language:"",identifier:e},this.getAvailableVoices().then(n=>{if(this.currentVoice?.identifier!==e)return;const i=n.find(s=>s.identifier===e||s.name===e);i&&(this.currentVoice=i)}).catch(()=>{}))}else this.currentVoice=e;this.clearPrefetchCache()}getCurrentVoice(){return this.currentVoice}async getAvailableVoices(){if(this.voices.length>0)return this.voices;const e=await this.fetchImpl(this.endpoints.voices);if(!e.ok)throw await Ee(e);const r=await e.json();return this.voices=r.map(Ht),this.voices}async getServiceInfo(){return this.serviceInfo?this.serviceInfo:(this.serviceInfoPromise||(this.serviceInfoPromise=this.fetchServiceInfo().catch(e=>{throw this.serviceInfoPromise=null,e})),this.serviceInfo=await this.serviceInfoPromise,this.serviceInfo)}async fetchServiceInfo(){const e=await this.fetchImpl(this.endpoints.service);if(!e.ok)throw await Ee(e);return e.json()}setSpeakInContentLanguage(e){this.speakInContentLanguage=e,this.clearPrefetchCache()}getSpeakInContentLanguage(){return this.speakInContentLanguage}speak(e){if(e!==void 0){if(e<0||e>=this.currentUtterances.length)throw new Error("Invalid utterance index");this.currentUtteranceIndex=e}if(this.currentUtterances.length===0){console.warn("No utterances loaded");return}this.stopAudio();const r=++this.speakGeneration;this.setState("loading"),this.synthesizeAndPlay(r)}async synthesizeAndPlay(e){const r=this.currentUtteranceIndex;try{const n=await this.resolveSynthesisStream(r);if(e!==this.speakGeneration)return;await this.scheduleChunksStreaming(n,e),this.fillPrefetchWindow(r)}catch(n){if(e!==this.speakGeneration)return;this.setState("idle"),this.emitEvent({type:"error",detail:Sr(n)})}}async resolveSynthesisStream(e){const r=this.prefetchCache.get(e);if(r){this.prefetchCache.delete(e);try{return await r}catch{}}return this.synthesizeStream(e)}fillPrefetchWindow(e){const r=Math.min(e+this.prefetchWindow,this.currentUtterances.length-1);for(let n=e+1;n<=r;n++)this.queuePrefetch(n)}queuePrefetch(e){if(this.prefetchCache.has(e))return;const r=this.prefetchChainTail.then(()=>this.synthesizeStream(e));this.prefetchCache.set(e,r),this.prefetchChainTail=r.then(n=>Promise.all(n)).then(()=>{},()=>{}),r.catch(()=>{}),r.then(n=>n.forEach(i=>i.catch(()=>{}))).catch(()=>{})}clearPrefetchCache(){this.prefetchCache.clear()}async synthesizeStream(e){const r=this.currentUtterances[e],n=!r.plain&&!!r.ssml,i=this.speakInContentLanguage?r.language:void 0,s=$e(r)??"",o=$e(this.currentUtterances[e-1]),a=$e(this.currentUtterances[e+1]),c=await this.getServiceInfo(),l=ln(c.output,this.formatOptions,this.canPlayType),d=navigator.connection,h=cn(l,this.formatOptions.adaptBitrateToNetwork??!1,d);if(s.length<=c.limits.maxTextLength)return[this.synthesizeChunk(r,s,0,n,i,o,a,l,h)];if(this.overLengthText==="error")throw new Oe(`Text exceeds this server's maximum length of ${c.limits.maxTextLength} characters`,{status:413,type:"https://readium.org/speech-server/error#payload_too_large",title:"Payload Too Large"});const g=Math.min(c.limits.maxTextLength,this.readyBufferChars),f=n?an(s,g):sn(s,g),y=[];let p=Promise.resolve();for(let m=0;m<f.length;m++){const w=m===0?o:f[m-1].text,C=m===f.length-1?a:f[m+1].text,E=f[m],N=p.then(()=>this.synthesizeChunk(r,E.text,E.offset,n,i,w,C,l,h));y.push(N),p=N}return y}async synthesizeChunk(e,r,n,i,s,o,a,c,l){const d=await this.fetchImpl(this.endpoints.synthesize,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({id:e.id,text:r,ssml:i,language:s,voice:this.currentVoice?.identifier??this.currentVoice?.name,prev_utterance:o,next_utterance:a,boundary:!0,output:{format:c,bitrate:l,speed:this.rate,pitch:this.pitch}})});if(!d.ok)throw await Ee(d);const h=await d.json(),g=mo(h.audio);let f;try{f=await this.ensureAudioContext().decodeAudioData(g)}catch{throw new Error("Audio playback failed")}return{audioBuffer:f,format:h.format,boundaries:h.boundaries,textOffset:n}}ensureAudioContext(){return this.audioContext||(this.audioContext=new AudioContext,this.masterGain=this.audioContext.createGain(),this.masterGain.gain.value=this.volume,this.masterGain.connect(this.audioContext.destination)),this.audioContext.state==="suspended"&&this.audioContext.resume().catch(()=>{}),this.audioContext}async scheduleChunksStreaming(e,r){const n=await e[0];if(r!==this.speakGeneration)return;const i=this.ensureAudioContext(),s=this.masterGain,a=this.currentVoice?.controls?.speed===!0?1:yo(this.rate);this.scheduledChunks=[],this.setState("playing"),this.emitEvent({type:"start"});let c=i.currentTime,l=null;const d=h=>{const g=i.createBufferSource();g.buffer=h.audioBuffer,g.playbackRate.value=a,g.connect(s),g.start(c),l&&(l.onended=null),g.onended=()=>this.handleUtteranceEnded(r),l=g,this.scheduledChunks.push({chunk:h,startTime:c,node:g,nextBoundaryIndex:0,rate:a}),c+=h.audioBuffer.duration/a};d(n),this.startBoundaryPolling(r);for(let h=1;h<e.length;h++){let g;try{g=await e[h]}catch(f){r===this.speakGeneration&&this.emitEvent({type:"error",detail:Sr(f)});return}if(r!==this.speakGeneration)return;d(g)}}handleUtteranceEnded(e){e===this.speakGeneration&&(this.checkBoundaries(),this.stopBoundaryPolling(),this.currentUtteranceIndex>=this.currentUtterances.length-1&&this.setState("idle"),this.emitEvent({type:"end"}))}startBoundaryPolling(e){const r=()=>{e===this.speakGeneration&&(this.checkBoundaries(),this.boundaryRafHandle=requestAnimationFrame(r))};this.boundaryRafHandle=requestAnimationFrame(r)}stopBoundaryPolling(){this.boundaryRafHandle!==null&&(cancelAnimationFrame(this.boundaryRafHandle),this.boundaryRafHandle=null)}checkBoundaries(){if(!this.audioContext)return;const e=this.audioContext.currentTime;for(const r of this.scheduledChunks){const n=r.chunk.boundaries??[];for(;r.nextBoundaryIndex<n.length&&e>=r.startTime+n[r.nextBoundaryIndex].elapsedTime/r.rate;){const i=n[r.nextBoundaryIndex];this.emitEvent({type:"boundary",detail:{name:i.name,charIndex:i.charIndex+r.chunk.textOffset,charLength:i.charLength,elapsedTime:i.elapsedTime}}),r.nextBoundaryIndex++}}}stopAudio(){this.stopBoundaryPolling();for(const e of this.scheduledChunks){e.node.onended=null;try{e.node.stop()}catch{}e.node.disconnect()}this.scheduledChunks=[]}pause(){this.playbackState==="playing"&&this.audioContext&&(this.audioContext.suspend().catch(()=>{}),this.stopBoundaryPolling(),this.setState("paused"),this.emitEvent({type:"pause"}))}resume(){this.playbackState==="paused"&&this.audioContext&&(this.audioContext.resume().catch(()=>{}),this.startBoundaryPolling(this.speakGeneration),this.setState("playing"),this.emitEvent({type:"resume"}))}stop(){this.speakGeneration++,this.loadGeneration++,this.stopAudio(),this.clearPrefetchCache(),this.currentUtteranceIndex=0,this.setState("idle"),this.emitEvent({type:"stop"})}setRate(e){this.rate=Math.max(.1,Math.min(10,e)),this.clearPrefetchCache()}getRate(){return this.rate}setPitch(e){this.pitch=Math.max(0,Math.min(2,e)),this.clearPrefetchCache()}getPitch(){return this.pitch}setVolume(e){this.volume=Math.max(0,Math.min(1,e)),this.masterGain&&(this.masterGain.gain.value=this.volume)}getVolume(){return this.volume}getState(){return this.playbackState}getCurrentUtteranceIndex(){return this.currentUtteranceIndex}setCurrentUtteranceIndex(e,r){if(e<0||e>=this.currentUtterances.length){r?.(!1);return}if(e===this.currentUtteranceIndex){r?.(!0);return}this.stopAudio(),this.currentUtteranceIndex=e,r?.(!0)}getUtteranceCount(){return this.currentUtterances.length}on(e,r){return this.eventListeners.has(e)||this.eventListeners.set(e,[]),this.eventListeners.get(e).push(r),()=>{const n=this.eventListeners.get(e);if(n){const i=n.indexOf(r);i>-1&&n.splice(i,1)}}}emitEvent(e){const r=this.eventListeners.get(e.type);r&&r.forEach(n=>n(e))}setState(e){const r=this.playbackState;if(this.playbackState=e,r!==e)switch(e){case"idle":this.emitEvent({type:"idle"});break;case"loading":this.emitEvent({type:"loading"});break;case"ready":this.emitEvent({type:"ready"});break}}async destroy(){this.stop(),await this.audioContext?.close(),this.audioContext=null,this.masterGain=null,this.eventListeners.clear(),this.currentUtterances=[],this.currentVoice=null,this.voices=[]}}class bo{id="speech-server";name="Readium Speech Server";options;fetchImpl;voices=[];constructor(e){this.options=e,this.fetchImpl=e.fetch??fetch.bind(globalThis)}async getVoices(){if(this.voices.length>0)return this.voices;const e=await this.fetchImpl(this.options.endpoints.voices);if(!e.ok)throw await Ee(e);const r=await e.json();return this.voices=r.map(Ht),this.voices}async createEngine(e){const r=new un(this.options);return this.voices.length>0&&r.setAvailableVoices(this.voices),e&&r.setVoice(e),r}async destroy(){this.voices=[]}}let vo=class{};function wo(t){return(t.getComputedStyle(t.document.documentElement).writingMode||t.getComputedStyle(t.document.body).writingMode)==="vertical-lr"}function So(t){const e=t.getComputedStyle(t.document.documentElement).writingMode||t.getComputedStyle(t.document.body).writingMode;return e==="vertical-rl"||e==="vertical-lr"}function be(t){const e=So(t),r=e&&wo(t),n=t.innerWidth,i=t.innerHeight,s=t.document.scrollingElement,o=s.scrollLeft,a=s.scrollTop,c=parseInt(t.getComputedStyle(t.document.documentElement).getPropertyValue("column-count")),l=e&&!r?s.scrollWidth-n+o:o,d=a;return{isVertical:e,isVertLR:r,viewportInlineSize:e?i:n,viewportBlockSize:e?n:i,pageInlineSize:e?i:n/(c||1),xDocOffset:l,yDocOffset:d,inlineScrollOffset:e?d:l,blockScrollOffset:e?l:d,inlineStart:h=>e?h.top:h.left,blockStart:h=>e?h.left:h.top,inlineSize:h=>e?h.height:h.width,blockSize:h=>e?h.width:h.height,applyPosition(h,g,f,y,p,m){h.style.position="absolute",e?(h.style.top=`${g*m}px`,h.style.left=`${f*m}px`,h.style.height=`${y*m}px`,h.style.width=`${p*m}px`):(h.style.left=`${g*m}px`,h.style.top=`${f*m}px`,h.style.width=`${y*m}px`,h.style.height=`${p*m}px`)},toRect(h,g,f,y){return e?new DOMRect(g,h,y,f):new DOMRect(h,g,f,y)}}}function kr(t,e){return t.document.documentElement.style.getPropertyValue(e)}function ko(t){return t&&Array.isArray(t)?t:void 0}function xo(t){return t&&typeof t=="string"?[t]:ko(t)}function lt(t){return isNaN(t)?void 0:t}function De(t){return t.otherLocations?.get("cssSelector")}let ve=class hn{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const r=lt(e.progression),n=lt(e.totalProgression),i=lt(e.position),s=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position","otherLocations"]);return Object.entries(e).forEach(([a,c])=>{o.has(a)||s.set(a,c)}),e.otherLocations instanceof Map&&e.otherLocations.forEach((a,c)=>s.set(c,a)),new hn({fragments:xo(e.fragments||e.fragment),progression:r!==void 0&&r>=0&&r<=1?r:void 0,totalProgression:n!==void 0&&n>=0&&n<=1?n:void 0,position:i!==void 0&&i>0?i:void 0,otherLocations:s.size===0?void 0:s})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((r,n)=>e[n]=r),e}},Eo=class dn{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new dn({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}},Co=class Ot{constructor(e){const r=e.href.indexOf("#"),n=r>=0?e.href.slice(r+1):void 0;this.href=r>=0?e.href.slice(0,r):e.href,this.type=e.type,this.title=e.title;const i=e.locations?.fragments,s=n&&(!i||i.length===0);this.locations=e.locations?s?new ve({...e.locations,fragments:[n]}):e.locations:n?new ve({fragments:[n]}):new ve({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new Ot({href:e.href,type:e.type,title:e.title,locations:ve.deserialize(e.locations),text:Eo.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new Ot({href:this.href,type:this.type,title:this.title,text:this.text,locations:new ve({...this.locations,...e})})}};function xr(t){return t.split("").reverse().join("")}function Oo(t,e,r){const n=xr(e);return r.map(i=>{const s=Math.max(0,i.end-e.length-i.errors),o=xr(t.slice(s,i.end));return{start:gn(o,n,i.errors).reduce((a,c)=>i.end-c.end<a?i.end-c.end:a,i.end),end:i.end,errors:i.errors}})}function ct(t){return(t|-t)>>31&1}function Er(t,e,r,n){let i=t.P[r],s=t.M[r];const o=n>>>31,a=e[r]|o,c=a|s,l=(a&i)+i^i|a;let d=s|~(l|i),h=i&l;const g=ct(d&t.lastRowMask[r])-ct(h&t.lastRowMask[r]);return d<<=1,h<<=1,h|=o,d|=ct(n)-o,i=h|~(c|d),s=d&c,t.P[r]=i,t.M[r]=s,g}function gn(t,e,r){if(e.length===0)return[];r=Math.min(r,e.length);const n=[],i=32,s=Math.ceil(e.length/i)-1,o={P:new Uint32Array(s+1),M:new Uint32Array(s+1),lastRowMask:new Uint32Array(s+1)};o.lastRowMask.fill(1<<31),o.lastRowMask[s]=1<<(e.length-1)%i;const a=new Uint32Array(s+1),c=new Map,l=[];for(let g=0;g<256;g++)l.push(a);for(let g=0;g<e.length;g+=1){const f=e.charCodeAt(g);if(c.has(f))continue;const y=new Uint32Array(s+1);c.set(f,y),f<l.length&&(l[f]=y);for(let p=0;p<=s;p+=1){y[p]=0;for(let m=0;m<i;m+=1){const w=p*i+m;w>=e.length||e.charCodeAt(w)===f&&(y[p]|=1<<m)}}}let d=Math.max(0,Math.ceil(r/i)-1);const h=new Uint32Array(s+1);for(let g=0;g<=d;g+=1)h[g]=(g+1)*i;h[s]=e.length;for(let g=0;g<=d;g+=1)o.P[g]=-1,o.M[g]=0;for(let g=0;g<t.length;g+=1){const f=t.charCodeAt(g);let y;f<l.length?y=l[f]:(y=c.get(f),typeof y>"u"&&(y=a));let p=0;for(let m=0;m<=d;m+=1)p=Er(o,y,m,p),h[m]+=p;if(h[d]-p<=r&&d<s&&(y[d+1]&1||p<0)){d+=1,o.P[d]=-1,o.M[d]=0;let m;if(d===s){const w=e.length%i;m=w===0?i:w}else m=i;h[d]=h[d-1]+m-p+Er(o,y,d,p)}else for(;d>0&&h[d]>=r+i;)d-=1;d===s&&h[d]<=r&&(h[d]<r&&n.splice(0,n.length),n.push({start:-1,end:g+1,errors:h[d]}),r=h[d])}return n}function Ao(t,e,r){const n=gn(t,e,r);return Oo(t,e,n)}function fn(t,e,r){let n=0;const i=[];for(;n!==-1;)n=t.indexOf(e,n),n!==-1&&(i.push({start:n,end:n+e.length,errors:0}),n+=1);return i.length>0?i:Ao(t,e,r)}function Cr(t,e){return e.length===0||t.length===0?0:1-fn(t,e,e.length)[0].errors/e.length}function To(t,e,r={}){if(e.length===0)return null;const n=Math.min(256,e.length/2),i=fn(t,e,n);if(i.length===0)return null;const s=a=>{const c=1-a.errors/e.length,l=r.prefix?Cr(t.slice(Math.max(0,a.start-r.prefix.length),a.start),r.prefix):1,d=r.suffix?Cr(t.slice(a.end,a.end+r.suffix.length),r.suffix):1;let h=1;return typeof r.hint=="number"&&(h=1-Math.abs(a.start-r.hint)/t.length),(50*c+20*l+20*d+2*h)/92},o=i.map(a=>({start:a.start,end:a.end,score:s(a)}));return o.sort((a,c)=>c.score-a.score),o[0]}function At(t,e,r){const n=r===1?e:e-1;if(t.charAt(n).trim()!=="")return e;let i,s;if(r===2?(i=t.substring(0,e),s=i.trimEnd()):(i=t.substring(e),s=i.trimStart()),!s.length)return-1;const o=i.length-s.length;return r===2?e-o:e+o}function Or(t,e){const r=t.commonAncestorContainer.ownerDocument.createNodeIterator(t.commonAncestorContainer,NodeFilter.SHOW_TEXT),n=e===1?t.startContainer:t.endContainer,i=e===1?t.endContainer:t.startContainer;let s=r.nextNode();for(;s&&s!==n;)s=r.nextNode();e===2&&(s=r.previousNode());let o=-1;const a=()=>{if(s=e===1?r.nextNode():r.previousNode(),s){const c=s.textContent,l=e===1?0:c.length;o=At(c,l,e)}};for(;s&&o===-1&&s!==i;)a();if(s&&o>=0)return{node:s,offset:o};throw new RangeError("No text nodes with non-whitespace text found in range")}function Ro(t){if(!t.toString().trim().length)throw new RangeError("Range contains no non-whitespace text");if(t.startContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range startContainer is not a text node");if(t.endContainer.nodeType!==Node.TEXT_NODE)throw new RangeError("Range endContainer is not a text node");const e=t.cloneRange();let r=!1,n=!1;const i={start:At(t.startContainer.textContent,t.startOffset,1),end:At(t.endContainer.textContent,t.endOffset,2)};if(i.start>=0&&(e.setStart(t.startContainer,i.start),r=!0),i.end>0&&(e.setEnd(t.endContainer,i.end),n=!0),r&&n)return e;if(!r){const{node:s,offset:o}=Or(e,1);s&&o>=0&&e.setStart(s,o)}if(!n){const{node:s,offset:o}=Or(e,2);s&&o>0&&e.setEnd(s,o)}return e}function pn(t){switch(t.nodeType){case Node.ELEMENT_NODE:case Node.TEXT_NODE:return t.textContent?.length??0;default:return 0}}function Ar(t){let e=t.previousSibling,r=0;for(;e;)r+=pn(e),e=e.previousSibling;return r}function mn(t,...e){let r=e.shift();const n=t.ownerDocument.createNodeIterator(t,NodeFilter.SHOW_TEXT),i=[];let s=n.nextNode(),o,a=0;for(;r!==void 0&&s;)o=s,a+o.data.length>r?(i.push({node:o,offset:r-a}),r=e.shift()):(s=n.nextNode(),a+=o.data.length);for(;r!==void 0&&o&&a===r;)i.push({node:o,offset:o.data.length}),r=e.shift();if(r!==void 0)throw new RangeError("Offset exceeds text length");return i}let Be=class te{constructor(e,r){if(r<0)throw new Error("Offset is invalid");this.element=e,this.offset=r}relativeTo(e){if(!e.contains(this.element))throw new Error("Parent is not an ancestor of current element");let r=this.element,n=this.offset;for(;r!==e;)n+=Ar(r),r=r.parentElement;return new te(r,n)}resolve(e={}){try{return mn(this.element,this.offset)[0]}catch(r){if(this.offset===0&&e.direction!==void 0){const n=document.createTreeWalker(this.element.getRootNode(),NodeFilter.SHOW_TEXT);n.currentNode=this.element;const i=e.direction===1,s=i?n.nextNode():n.previousNode();if(!s)throw r;return{node:s,offset:i?0:s.data.length}}else throw r}}static fromCharOffset(e,r){switch(e.nodeType){case Node.TEXT_NODE:return te.fromPoint(e,r);case Node.ELEMENT_NODE:return new te(e,r);default:throw new Error("Node is not an element or text node")}}static fromPoint(e,r){switch(e.nodeType){case Node.TEXT_NODE:{if(r<0||r>e.data.length)throw new Error("Text node offset is out of range");if(!e.parentElement)throw new Error("Text node has no parent");const n=Ar(e)+r;return new te(e.parentElement,n)}case Node.ELEMENT_NODE:{if(r<0||r>e.childNodes.length)throw new Error("Child node offset is out of range");let n=0;for(let i=0;i<r;i++)n+=pn(e.childNodes[i]);return new te(e,n)}default:throw new Error("Point is not in an element or text node")}}},Tt=class Se{constructor(e,r){this.start=e,this.end=r}relativeTo(e){return new Se(this.start.relativeTo(e),this.end.relativeTo(e))}toRange(){let e,r;this.start.element===this.end.element&&this.start.offset<=this.end.offset?[e,r]=mn(this.start.element,this.start.offset,this.end.offset):(e=this.start.resolve({direction:1}),r=this.end.resolve({direction:2}));const n=new Range;return n.setStart(e.node,e.offset),n.setEnd(r.node,r.offset),n}static fromRange(e){const r=Be.fromPoint(e.startContainer,e.startOffset),n=Be.fromPoint(e.endContainer,e.endOffset);return new Se(r,n)}static fromOffsets(e,r,n){return new Se(new Be(e,r),new Be(e,n))}static trimmedRange(e){return Ro(Se.fromRange(e).toRange())}},No=class Rt{constructor(e,r,n){this.root=e,this.start=r,this.end=n}static fromRange(e,r){const n=Tt.fromRange(r).relativeTo(e);return new Rt(e,n.start.offset,n.end.offset)}static fromSelector(e,r){return new Rt(e,r.start,r.end)}toSelector(){return{type:"TextPositionSelector",start:this.start,end:this.end}}toRange(){return Tt.fromOffsets(this.root,this.start,this.end).toRange()}},Lo=class Nt{constructor(e,r,n={}){this.root=e,this.exact=r,this.context=n}static fromRange(e,r){const n=e.textContent,i=Tt.fromRange(r).relativeTo(e),s=i.start.offset,o=i.end.offset,a=32;return new Nt(e,n.slice(s,o),{prefix:n.slice(Math.max(0,s-a),s),suffix:n.slice(o,Math.min(n.length,o+a))})}static fromSelector(e,r){const{prefix:n,suffix:i}=r;return new Nt(e,r.exact,{prefix:n,suffix:i})}toSelector(){return{type:"TextQuoteSelector",exact:this.exact,prefix:this.context.prefix,suffix:this.context.suffix}}toRange(e={}){return this.toPositionAnchor(e).toRange()}toPositionAnchor(e={}){const r=this.root.textContent,n=To(r,this.exact,{...this.context,hint:e.hint});if(!n)throw new Error("Quote not found");return new No(this.root,n.start,n.end)}};function Io(t){const e=t.tagName.toUpperCase();return e==="IMG"||e==="VIDEO"||e==="AUDIO"||e==="IFRAME"||e==="OBJECT"||e==="EMBED"||e==="CANVAS"}function Po(t,e){try{const r=e.locations,n=e.text;if(n&&n.highlight){let i;r&&De(r)&&(i=t.querySelector(De(r))),i||(i=t.body);const s=new Lo(i,n.highlight,{prefix:n.before,suffix:n.after});try{return s.toRange()}catch{return console.warn("Quote not found:",s),null}}if(r){let i=null;if(!i&&De(r)&&(i=t.querySelector(De(r))),!i&&r.fragments){for(const s of r.fragments)if(i=t.getElementById(s),i)break}if(i){const s=t.createRange();return i.childNodes.length===0||Io(i)?(s.selectNode(i),s):(s.setStartBefore(i),s.setEndAfter(i),s)}}}catch(r){console.error(r)}return null}function qo(t,e){const r=e.map(c=>c.toUpperCase()),n=[],i=t.commonAncestorContainer,s=i.nodeType===Node.TEXT_NODE?i.parentNode:i,o=t.startContainer.ownerDocument.createTreeWalker(s,NodeFilter.SHOW_TEXT);let a=o.nextNode();for(;a;){if(t.intersectsNode(a)){let c=a.parentNode,l=!1;for(;c;){if(c.nodeType===Node.ELEMENT_NODE&&r.includes(c.tagName.toUpperCase())){l=!0;break}c=c.parentNode}if(!l){const d=t.cloneRange();d.selectNode(a),d.compareBoundaryPoints(Range.START_TO_START,t)<0&&d.setStart(t.startContainer,t.startOffset),d.compareBoundaryPoints(Range.END_TO_END,t)>0&&d.setEnd(t.endContainer,t.endOffset);for(const h of d.getClientRects())n.push({left:h.left,right:h.right,top:h.top,bottom:h.bottom,width:h.width,height:h.height})}}a=o.nextNode()}return n}function Ue(t,e,r=!1,n=0){let i;if(Array.isArray(t))i=t;else{let l=t.getClientRects();l.length||t.commonAncestorContainer.nodeType===Node.ELEMENT_NODE&&(l=t.commonAncestorContainer.getClientRects()),i=[];for(const d of l)i.push({bottom:d.bottom,height:d.height,left:d.left,right:d.right,top:d.top,width:d.width})}if(n)for(const l of i)l.left-=n,l.top-=n,l.right+=n,l.bottom+=n,l.width+=n*2,l.height+=n*2;const s=yn(i,1,e,r),o=Do(s,1),a=bn(o),c=4;for(let l=a.length-1;l>=0;l--){const d=a[l];if(!(d.width*d.height>c))if(a.length>1)a.splice(l,1);else break}return a}function yn(t,e,r,n=!1){for(let i=0;i<t.length;i++)for(let s=i+1;s<t.length;s++){const o=t[i],a=t[s];if(o===a)continue;const c=q(o.top,a.top,e)&&q(o.bottom,a.bottom,e),l=q(o.left,a.left,e)&&q(o.right,a.right,e);if((l&&!r&&!n||c&&!l)&&vn(o,a,e)){const d=t.filter(g=>g!==o&&g!==a),h=$o(o,a);return d.push(h),yn(d,e,r,n)}}return t}function $o(t,e){const r=Math.min(t.left,e.left),n=Math.max(t.right,e.right),i=Math.min(t.top,e.top),s=Math.max(t.bottom,e.bottom);return{bottom:s,height:s-i,left:r,right:n,top:i,width:n-r}}function Do(t,e){const r=new Set(t);for(const n of t){if(!(n.width>1&&n.height>1)){r.delete(n);continue}for(const i of t)if(n!==i&&r.has(i)&&Bo(i,n,e)){r.delete(n);break}}return Array.from(r)}function Bo(t,e,r){return G(t,e.left,e.top,r)&&G(t,e.right,e.top,r)&&G(t,e.left,e.bottom,r)&&G(t,e.right,e.bottom,r)}function G(t,e,r,n){return(t.left<e||q(t.left,e,n))&&(t.right>e||q(t.right,e,n))&&(t.top<r||q(t.top,r,n))&&(t.bottom>r||q(t.bottom,r,n))}function bn(t){for(let e=0;e<t.length;e++)for(let r=e+1;r<t.length;r++){const n=t[e],i=t[r];if(n!==i&&vn(n,i,-1)){let s=[],o;const a=Tr(n,i);if(a.length===1)s=a,o=n;else{const l=Tr(i,n);a.length<l.length?(s=a,o=n):(s=l,o=i)}const c=t.filter(l=>l!==o);return Array.prototype.push.apply(c,s),bn(c)}}return t}function Tr(t,e){const r=Uo(e,t);if(r.height===0||r.width===0)return[t];const n=[];{const i={bottom:t.bottom,height:0,left:t.left,right:r.left,top:t.top,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}{const i={bottom:r.top,height:0,left:r.left,right:r.right,top:t.top,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}{const i={bottom:t.bottom,height:0,left:r.left,right:r.right,top:r.bottom,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}{const i={bottom:t.bottom,height:0,left:r.right,right:t.right,top:t.top,width:0};i.width=i.right-i.left,i.height=i.bottom-i.top,i.height!==0&&i.width!==0&&n.push(i)}return n}function Uo(t,e){const r=Math.max(t.left,e.left),n=Math.min(t.right,e.right),i=Math.max(t.top,e.top),s=Math.min(t.bottom,e.bottom);return{bottom:s,height:Math.max(0,s-i),left:r,right:n,top:i,width:Math.max(0,n-r)}}function vn(t,e,r){return(t.left<e.right||r>=0&&q(t.left,e.right,r))&&(e.left<t.right||r>=0&&q(e.left,t.right,r))&&(t.top<e.bottom||r>=0&&q(t.top,e.bottom,r))&&(e.top<t.bottom||r>=0&&q(e.top,t.bottom,r))}function q(t,e,r){return Math.abs(t-e)<=r}let je=null,ut=null,we=0;const re={r:255,g:255,b:255,a:1},Z=new Map,jo=()=>{if(!je)if(typeof OffscreenCanvas<"u")je=new OffscreenCanvas(5,5),ut=je.getContext("2d",{willReadFrequently:!0,desynchronized:!0});else{const t=document.createElement("canvas");t.width=5,t.height=5,je=t,ut=t.getContext("2d",{willReadFrequently:!0,desynchronized:!0})}return ut},zo=t=>{if(!t)return!0;const e=t.trim().toLowerCase();return e.startsWith("var(")||["transparent","currentcolor","inherit","initial","revert","unset","revert-layer"].includes(e)?!0:["linear-gradient","radial-gradient","conic-gradient","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient"].some(r=>e.includes(r))},ze=(t,e)=>{console.warn(`[Decorator] Could not parse color: "${t}". ${e} Falling back to ${JSON.stringify(re)} to compute contrast. Please use a CSS color value that can be computed to RGB(A).`)},J=(t,e=null)=>{const r=e?`${t}|${e}`:t,n=Z.get(r);if(n!==void 0)return n??re;if(zo(t))return ze(t,"Unsupported color format or special value."),Z.set(r,null),re;const i=jo();if(!i)return ze(t,"Could not get canvas context."),Z.set(r,null),re;try{we===0&&i.clearRect(0,0,5,5);const s=we%5,o=Math.floor(we/5);i.clearRect(s,o,1,1),e&&(i.fillStyle=e,i.fillRect(s,o,1,1)),i.fillStyle=t,i.fillRect(s,o,1,1);const a=i.getImageData(s,o,1,1);we=(we+1)%25;const[c,l,d,h]=a.data;if(h===0)return ze(t,"Fully transparent color."),Z.set(r,null),re;const g={r:c,g:l,b:d,a:h/255};return Z.set(r,g),g}catch(s){return ze(t,`Error: ${s instanceof Error?s.message:String(s)}`),Z.set(r,null),re}},ht=t=>{const e=t/255;return e<=.03928?e/12.92:Math.pow((e+.055)/1.055,2.4)},Lt=t=>{const e=ht(t.r),r=ht(t.g),n=ht(t.b);return .2126*e+.7152*r+.0722*n},Ge=(t,e)=>{const r=typeof t=="string"?J(t):t,n=typeof e=="string"?J(e):e,i=Lt(r),s=Lt(n),o=Math.max(i,s),a=Math.min(i,s);return(o+.05)/(a+.05)},wn=(t,e=null)=>{const r=J(t,e),n=Ge(r,{r:255,g:255,b:255,a:1}),i=Ge(r,{r:0,g:0,b:0,a:1});return n>i},Rr=(t,e=null)=>wn(t,e)?"white":"black",_o=t=>{const e=t.a!==void 0?t.a:1;return`rgba(${Math.round(t.r)}, ${Math.round(t.g)}, ${Math.round(t.b)}, ${e})`},Fo=(t,e)=>({r:Math.min(255,t.r+(255-t.r)*e),g:Math.min(255,t.g+(255-t.g)*e),b:Math.min(255,t.b+(255-t.b)*e),a:t.a??1}),Ho=(t,e)=>({r:Math.max(0,t.r*(1-e)),g:Math.max(0,t.g*(1-e)),b:Math.max(0,t.b*(1-e)),a:t.a??1}),Y=(t,e=null,r=3)=>{const n=J(t),i=e?J(e):{r:255,g:255,b:255,a:1};let s=Ge(n,i);if(s>=r)return t;const o=Lt(i)<.5;let a={...n,a:n.a??1};const c=20,l=.1;for(let d=0;d<c&&(o?a=Fo(a,l):a=Ho(a,l),s=Ge(a,i),!(s>=r));d++);return _o(a)},Sn=()=>typeof navigator>"u"?"":navigator.userAgent||"",kn=()=>typeof navigator>"u"?void 0:navigator.userAgentData||void 0;let xn=class{constructor(){const e=kn(),r=Sn(),n=s=>(typeof s=="string"||typeof s=="number")&&s?String(s).replace(/_/g,".").split(".").map(o=>parseInt(o)||0):[],i=(s="")=>{if(!s)return[];const o=new RegExp("^.*"+s+"[ :\\/]?(\\d+([\\._]\\d+)*).*$");return o.test(r)?n(r.replace(o,"$1")):[]};this.OS=(s=>(/(macOS|Mac OS X)/.test(r)?(/\(iP(hone|od touch);/.test(r)&&(s.iOS=i("CPU (?:iPhone )?OS ")),/\(iPad;/.test(r)?s.iOS=s.iPadOS=i("CPU (?:iPhone )?OS "):/(macOS|Mac OS X) \d/.test(r)&&(document.ontouchend!==void 0?s.iOS=s.iPadOS=i():s.macOS=i("(?:macOS|Mac OS X) "))):/Windows( NT)? \d/.test(r)?s.Windows=(o=>o[0]!==6||!o[1]?o:o[1]===1?[7]:o[1]===2?[8]:[8,1])(i("Windows(?: NT)?")):/Android \d/.test(r)?s.Android=i("Android"):/CrOS/.test(r)?s.ChromeOS=i():/X11;/.test(r)&&(s.Linux=i()),s))({}),e&&e.getHighEntropyValues(["architecture","model","platform","platformVersion","uaFullVersion"]).then(s=>(o=>{const a=s.platform,c=s.platformVersion;if(!(!a||!c)){if(/^i(OS|P(hone|od touch))$/.test(a))o.iOS=n(c);else if(/^iPad(OS)?$/.test(a))o.iOS=o.iPadOS=n(c);else if(/^(macOS|(Mac )?OS X|Mac(Intel)?)$/.test(a))document.ontouchend!==void 0?o.iOS=o.iPadOS=n():o.macOS=n(c);else if(/^(Microsoft )?Windows$/.test(a))o.Windows=n(c);else if(/^(Google )?Android$/.test(a))o.Android=n(c);else if(/^((Google )?Chrome OS|CrOS)$/.test(a))o.ChromeOS=n(c);else if(/^(Linux|Ubuntu|X11)$/.test(a))o.Linux=n(c);else return;Object.keys(this.OS).forEach(l=>delete this.OS[l]),Object.assign(this.OS,o)}})({})),this.UA=(s=>{let o=!1;if(e&&Array.isArray(e.brands)){const a=e.brands.reduce((c,l)=>(c[l.brand]=[l.version*1],c),{});a["Google Chrome"]?(o=!0,s.Blink=s.Chromium=a.Chromium||[],s.Chrome=a["Google Chrome"]):a["Microsoft Edge"]?(o=!0,s.Blink=s.Chromium=a.Chromium||[],s.Edge=a["Microsoft Edge"]):a.Opera&&(o=!0,s.Blink=s.Chromium=a.Chromium||[],s.Opera=a.Opera)}return o||(/ Gecko\/\d/.test(r)?(s.Gecko=i("rv"),/ Waterfox\/\d/.test(r)?s.Waterfox=i("Waterfox"):/ Firefox\/\d/.test(r)&&(s.Firefox=i("Firefox"))):/ Edge\/\d/.test(r)?(s.EdgeHTML=i("Edge"),s.Edge=s.EdgeHTML):/ Chrom(ium|e)\/\d/.test(r)?(s.Blink=s.Chromium=(a=>a[0]?a:i("Chrome"))(i("Chromium")),/ EdgA?\/\d/.test(r)?s.Edge=(a=>a[0]?a:i("Edg"))(i("EdgA")):/ OPR\/\d/.test(r)?s.Opera=i("OPR"):/ Vivaldi\/\d/.test(r)?s.Vivaldi=i("Vivaldi"):/ Silk\/\d/.test(r)?s.Silk=i("Silk"):/ UCBrowser\/\d/.test(r)?s.UCBrowser=i("UCBrowser"):/ Phoebe\/\d/.test(r)?s.Phoebe=i("Phoebe"):s.Chrome=(a=>a[0]?a:s.Chromium)(i("Chrome"))):/ AppleWebKit\/\d/.test(r)?(s.WebKit=i("AppleWebKit"),/ CriOS \d/.test(r)?s.Chrome=i("CriOS"):/ FxiOS \d/.test(r)?s.Firefox=i("FxiOS"):/ EdgiOS\/\d/.test(r)?s.Edge=i("EdgiOS"):/ Version\/\d/.test(r)&&(s.Safari=i("Version"))):/ Trident\/\d/.test(r)&&(s.Trident=i("Trident"),s.InternetExplorer=(a=>a[0]?a:i("MSIE"))(i("rv")))),/[\[; ]FB(AN|_IAB)\//.test(r)&&(s.Facebook=i("FBAV")),/ Line\/\d/.test(r)&&(s.LINE=i("Line")),s})({}),this.Env={get:()=>[this.OS,this.UA].reduce((s,o)=>{for(const a in o)o[a]&&s.push(a);return s},[])}}};class Mo extends xn{get iOSRequest(){const e=kn(),r=Sn();if(this.OS.iOS&&!this.OS.iPadOS)return"mobile";if(this.OS.iPadOS)return/\(iPad;/.test(r)||e&&/^iPad(OS)?$/.test(e.platform)?"mobile":"desktop"}}const Vo=new xn;new Mo;const Nr=["div","span","p","br","hr","b","i","em","strong","s","u","mark","small","sub","sup","abbr","cite","code","data","dfn","kbd","q","samp","time","var","blockquote","pre","svg","g","path","circle","ellipse","rect","line","polygon","polyline","text","tspan","defs","use"],Go=/^on/i,Wo=new Set(["href","src","action","formaction","xlink:href"]),Ko=/^\s*(javascript|data):/i;function Jo(t,e){const r=t.document.createElement("div");if("Sanitizer"in t&&typeof r.setHTML=="function")try{const i=new t.Sanitizer({allowElements:Nr});return r.setHTML(e,{sanitizer:i}),r.firstElementChild}catch{}const n=t.document.implementation.createHTMLDocument("");for(n.body.innerHTML=e,Qo(n.body,new Set(Nr));n.body.firstChild;)r.appendChild(t.document.adoptNode(n.body.firstChild));return r.firstElementChild}function Qo(t,e){const r=Array.from(t.querySelectorAll("*")).reverse();for(const n of r){if(!e.has(n.localName)){n.replaceWith(...Array.from(n.childNodes));continue}for(const{name:i,value:s}of Array.from(n.attributes))(Go.test(i)||Wo.has(i)&&Ko.test(s))&&n.removeAttribute(i)}}function dt(t){switch(t){case O.Mask:return"rgba(255, 255, 255, 0.5)";case O.Highlight:case O.HighlightUnderline:return"#FFFF00";default:return"#FF0000"}}const O={Highlight:"highlight",HighlightUnderline:"highlightUnderline",Underline:"underline",Strikethrough:"strikethrough",Outline:"outline",TextColor:"textColor",Mask:"mask",Template:"template"};var En=(t=>(t.Wrap="wrap",t.Viewport="viewport",t.Bounds="bounds",t.Page="page",t))(En||{}),Cn=(t=>(t.Boxes="boxes",t.Bounds="bounds",t))(Cn||{});const Xo=()=>"Highlight"in window,Lr=["IMG","IMAGE","AUDIO","VIDEO","SVG"];class Zo{constructor(e,r,n,i){this.wnd=e,this.comms=r,this.id=n,this.name=i,this.items=[],this.lastItemId=0,this.container=void 0,this._activatable=!1,this._hoverable=!1,this.hoveredItem=void 0,this.experimentalHighlights=!1,this._tintSubKeys=new Map,this._subKeyCounter=0,this.maskSvg=void 0,this.shadowHost=void 0,this.shadowRoot=void 0,this.currentRender=0,Xo()&&(this.experimentalHighlights=!0,this.notTextFlag=new Map),this.activationHandler=this.handleActivation.bind(this),this.wnd.document.addEventListener("pointerup",this.activationHandler),this.hoverHandler=this.handleHover.bind(this),this.wnd.document.addEventListener("pointermove",this.hoverHandler)}get activatable(){return this._activatable}set activatable(e){this._activatable=e}get hoverable(){return this._hoverable}set hoverable(e){if(this._hoverable=e,!e&&this.hoveredItem){const r=this.hoveredItem.range.getBoundingClientRect(),n=this.wnd.devicePixelRatio;this.comms.send("decoration_pointer_leave",{decorationId:this.hoveredItem.decoration.id,group:this.name,rect:{top:r.top*n,left:r.left*n,width:r.width*n,height:r.height*n}}),this.hoveredItem=void 0}}add(e){const r=`${this.id}-${this.lastItemId++}`,n=Po(this.wnd.document,e.locator);if(!n){this.comms.log("Can't locate DOM range for decoration",e);return}const i=n.commonAncestorContainer;if(i.nodeType!==Node.TEXT_NODE&&this.experimentalHighlights&&(Lr.includes(i.nodeName.toUpperCase())&&this.notTextFlag?.set(r,!0),n.cloneContents().querySelector(Lr.join(", ").toLowerCase())&&this.notTextFlag?.set(r,!0),(i.textContent?.trim()||"").length===0&&this.notTextFlag?.set(r,!0)),this.experimentalHighlights&&!this.notTextFlag?.has(r)){const o=a=>{for(;a&&a.nodeType===Node.ELEMENT_NODE;){if(a.namespaceURI?.includes("svg"))return!0;a=a.parentNode}return!1};(o(n.startContainer)||o(n.endContainer))&&this.notTextFlag?.set(r,!0)}if(this.experimentalHighlights){const{type:o}=e.style,{layout:a,width:c,expand:l}=e.style;o!==O.TextColor&&(o===O.Outline||o===O.Template||o===O.Mask||a!==void 0&&a!=="boxes"||c!==void 0&&c!=="wrap"||l)&&this.notTextFlag?.set(r,!0)}const s={decoration:e,id:r,range:n,hitRects:[],clickableElements:void 0,container:void 0};this.items.push(s),this.layout(s),s.hitRects=this.clientRectsToDocCoords(Ue(s.range,!1,!1,(s.decoration.style.expand??0)+this.hitGap())),this.renderLayout([s])}remove(e){const r=this.items.findIndex(s=>s.decoration.id===e);if(r<0)return;const n=this.items[r],i=n.decoration.style?.type===O.Mask;if(this.items.splice(r,1),n.clickableElements=void 0,n.container&&(n.container.remove(),n.container=void 0),this.experimentalHighlights&&!this.notTextFlag?.has(n.id)&&n.highlightSubKey){const s=this.wnd.CSS.highlights;s.get(n.highlightSubKey)?.delete(n.range),this.items.some(a=>a.highlightSubKey===n.highlightSubKey)||s.delete(n.highlightSubKey);const o=this.wnd.document.getElementById(`${this.id}-style`);o&&this._rebuildHighlightStylesheet(o)}this.notTextFlag?.delete(n.id),this.hoveredItem===n&&(this.hoveredItem=void 0),i&&this.updateSharedMask()}update(e){this.remove(e.id),this.add(e)}clear(){this.clearContainer(),this.items.length=0,this.notTextFlag?.clear(),this.hoveredItem=void 0,this.maskSvg&&(this.maskSvg.remove(),this.maskSvg=void 0),this.shadowHost&&(this.shadowHost.remove(),this.shadowHost=void 0,this.shadowRoot=void 0)}destroy(){this.clear(),this.wnd.document.removeEventListener("pointerup",this.activationHandler),this.wnd.document.removeEventListener("pointermove",this.hoverHandler)}clientRectsToDocCoords(e){const r=be(this.wnd),n=r.xDocOffset,i=r.yDocOffset;return n===0&&i===0?e:e.map(s=>({left:s.left+n,top:s.top+i,right:s.right+n,bottom:s.bottom+i,width:s.width,height:s.height}))}pointerToDocCoords(e){const r=be(this.wnd);return{docX:e.clientX+r.xDocOffset,docY:e.clientY+r.yDocOffset}}effectiveZoom(){if(!Vo.UA.Blink)return 1;const e=parseFloat(this.wnd.getComputedStyle(this.wnd.document.documentElement).zoom),r=parseFloat(this.wnd.getComputedStyle(this.wnd.document.body).zoom);return(e||1)*(r||1)}hitGap(){return 2*this.effectiveZoom()}handleActivation(e){if(!this._activatable)return;const{docX:r,docY:n}=this.pointerToDocCoords(e),i=this.wnd.devicePixelRatio;for(const s of this.items){let o;if(s.decoration.style.type===O.Template)for(const a of s.clickableElements??[]){const c=a.getBoundingClientRect();if(G(c,e.clientX,e.clientY,0)){o=c;break}}else for(const a of s.hitRects)if(G(a,r,n,0)){o=s.range.getBoundingClientRect();break}if(o){this.comms.send("decoration_activated",{decorationId:s.decoration.id,group:this.name,rect:{top:o.top*i,left:o.left*i,width:o.width*i,height:o.height*i},point:{x:e.clientX*i,y:e.clientY*i}});return}}}handleHover(e){if(!this._hoverable)return;const{docX:r,docY:n}=this.pointerToDocCoords(e),i=this.wnd.devicePixelRatio;let s,o;for(const a of this.items){if(a.decoration.style.type===O.Template)for(const c of a.clickableElements??[]){const l=c.getBoundingClientRect();if(G(l,e.clientX,e.clientY,0)){s=a,o=l;break}}else for(const c of a.hitRects)if(G(c,r,n,0)){s=a,o=a.range.getBoundingClientRect();break}if(s)break}if(s!==this.hoveredItem){if(this.hoveredItem){const a=this.hoveredItem.range.commonAncestorContainer.isConnected?this.hoveredItem.range.getBoundingClientRect():null;this.comms.send("decoration_pointer_leave",{decorationId:this.hoveredItem.decoration.id,group:this.name,rect:a?{top:a.top*i,left:a.left*i,width:a.width*i,height:a.height*i}:void 0,point:{x:e.clientX*i,y:e.clientY*i}})}this.hoveredItem=s,s&&o&&this.comms.send("decoration_pointer_enter",{decorationId:s.decoration.id,group:this.name,rect:{top:o.top*i,left:o.left*i,width:o.width*i,height:o.height*i},point:{x:e.clientX*i,y:e.clientY*i}})}}requestLayout(){this.wnd.cancelAnimationFrame(this.currentRender),this.clearContainer(),this.wnd.document.fonts.ready.then(()=>{this.currentRender=this.wnd.requestAnimationFrame(()=>{this.items.forEach(e=>{this.layout(e),e.hitRects=this.clientRectsToDocCoords(Ue(e.range,!1,!1,(e.decoration.style.expand??0)+this.hitGap()))}),this.renderLayout(this.items),this.updateSharedMask()})})}experimentalLayout(e){const r=this.requireContainer(!0),n=this.wnd.CSS.highlights,i=e.decoration.style,s=i.type??O.Highlight,o=i.tint??dt(s),a=i.width,c=i.layout,l=this._getSubKey(s,o);e.highlightSubKey&&(n.get(e.highlightSubKey)?.delete(e.range),e.highlightSubKey!==l&&!this.items.some(p=>p!==e&&p.highlightSubKey===e.highlightSubKey)&&n.delete(e.highlightSubKey)),e.highlightSubKey=l;let d;n.has(l)?d=n.get(l):(d=new this.wnd.Highlight,n.set(l,d));const h=(p,m)=>this.wnd.document.caretPositionFromPoint?.(p,m)??null;if(s===O.TextColor&&(c==="bounds"||a==="bounds"||a==="page")){const p=be(this.wnd);if(p.isVertical)console.warn("Vertical writing detected: caretPositionFromPoint has known bugs, falling back to original range"),d.add(e.range);else{const m=e.range.getBoundingClientRect();let w,C;a==="page"?(w=Math.floor(p.inlineStart(m)/p.pageInlineSize)*p.pageInlineSize,C=p.pageInlineSize):(w=p.inlineStart(m),C=p.inlineSize(m));const E=h(w,p.blockStart(m)+1),N=h(w+C,p.blockStart(m)+p.blockSize(m)-1);if(E&&N){const I=this.wnd.document.createRange();I.setStart(E.offsetNode,E.offset),I.setEnd(N.offsetNode,N.offset),d.add(I),e.range=I}else d.add(e.range)}}else d.add(e.range);const g=this.getBackgroundColor(),f=i.enforceContrast!==!1?Y(o,g):o;let y;switch(s){case O.Underline:y=`::highlight(${l}) {
|
|
28
28
|
text-decoration: underline;
|
|
29
29
|
text-decoration-color: ${f};
|
|
30
30
|
text-decoration-thickness: 0.1em;
|
|
31
|
-
}`;break;case
|
|
31
|
+
}`;break;case O.Strikethrough:y=`::highlight(${l}) {
|
|
32
32
|
text-decoration: line-through;
|
|
33
33
|
text-decoration-color: ${f};
|
|
34
34
|
text-decoration-thickness: 0.1em;
|
|
35
|
-
}`;break;case
|
|
35
|
+
}`;break;case O.Outline:y=`::highlight(${l}) {
|
|
36
36
|
outline: 2px solid ${f};
|
|
37
37
|
outline-offset: 1px;
|
|
38
|
-
}`;break;case
|
|
38
|
+
}`;break;case O.TextColor:y=`::highlight(${l}) {
|
|
39
39
|
color: ${f};
|
|
40
|
-
}`;break;case
|
|
41
|
-
color: ${
|
|
42
|
-
background-color: ${
|
|
40
|
+
}`;break;case O.HighlightUnderline:{const{r:p,g:m,b:w}=J(f),C=`rgba(${p}, ${m}, ${w}, 0.3)`;y=`::highlight(${l}) {
|
|
41
|
+
color: ${Rr(f,g)};
|
|
42
|
+
background-color: ${C};
|
|
43
43
|
text-decoration: underline;
|
|
44
44
|
text-decoration-color: ${f};
|
|
45
45
|
text-decoration-thickness: 0.1em;
|
|
46
|
-
}`;break}case
|
|
47
|
-
color: ${
|
|
46
|
+
}`;break}case O.Highlight:default:y=`::highlight(${l}) {
|
|
47
|
+
color: ${Rr(f,g)};
|
|
48
48
|
background-color: ${f};
|
|
49
49
|
}`}e.highlightCSS=y,this._rebuildHighlightStylesheet(r)}_getSubKey(e,r){const n=`${e}::${r}`;let i=this._tintSubKeys.get(n);return i||(i=`${this.id}--${this._subKeyCounter++}`,this._tintSubKeys.set(n,i)),i}_rebuildHighlightStylesheet(e){const r=new Set,n=[];for(const i of this.items)i.highlightSubKey&&i.highlightCSS&&!r.has(i.highlightSubKey)&&(r.add(i.highlightSubKey),n.push(i.highlightCSS));e.innerHTML=n.join(`
|
|
50
|
-
`)}layout(e){if(this.experimentalHighlights&&!this.notTextFlag?.has(e.id))return this.experimentalLayout(e);const r=this.wnd.document.createElement("div");r.setAttribute("id",e.id),r.dataset.highlightId=e.decoration.id,r.style.setProperty("pointer-events","none");const n=ye(this.wnd),i=1/this.effectiveZoom(),s=e.decoration.style.expand??0,a=(d,g,f,y=0)=>{const p=e.decoration?.style?.width,m=g;switch(p){case"viewport":{const w=Math.floor(n.inlineStart(m)/n.viewportInlineSize)*n.viewportInlineSize;n.applyPosition(d,w+n.inlineScrollOffset+y,n.blockStart(m)+n.blockScrollOffset,n.viewportInlineSize-2*y,n.blockSize(m),i);break}case"page":{const w=Math.floor(n.inlineStart(m)/n.pageInlineSize)*n.pageInlineSize;n.applyPosition(d,w+n.inlineScrollOffset+y,n.blockStart(m)+n.blockScrollOffset,n.pageInlineSize-2*y,n.blockSize(m),i);break}case"bounds":{n.applyPosition(d,n.inlineStart(f)+n.inlineScrollOffset,n.blockStart(m)+n.blockScrollOffset,n.inlineSize(f),n.blockSize(m),i);break}default:n.applyPosition(d,n.inlineStart(m)+n.inlineScrollOffset,n.blockStart(m)+n.blockScrollOffset,n.inlineSize(m),n.blockSize(m),i)}},o=e.range.getBoundingClientRect(),c=e.decoration.style,l=(()=>{if(c.type!==C.Outline)return 0;const d=c.width;return d==="page"||d==="viewport"?3:0})();let h;if(c.type===C.Template){c.stylesheet&&this.injectCustomStylesheet(c.stylesheet);const d=va(this.wnd,c.element);if(!d){e.container=r,e.clickableElements=[];return}d.style.setProperty("pointer-events","none"),h=d}else{const d=c,g=d.type??C.Highlight,f=d.tint??ct(g);if(g===C.TextColor){e.container=r,e.clickableElements=[];return}if(g===C.Mask){e.container=r,e.clickableElements=[],this.updateSharedMask();return}const y=this.getCurrentDarkMode(),p=this.getBackgroundColor(),m=d.enforceContrast!==!1,w=(()=>{switch(g){case C.Underline:{const x=m?Y(f,p):f,N=d.layout==="bounds",[q,I]=n.isVertical?["border-right","border-left"]:["border-bottom","border-top"];return[N?`${I}: 0.1em solid ${x} !important`:null,`${q}: 0.1em solid ${x} !important`,"background-color: transparent !important","box-sizing: border-box !important"].filter(Boolean).join("; ")}case C.Strikethrough:{const x=m?Y(f,p):f;return d.layout==="bounds"?[`background: repeating-linear-gradient(-45deg, transparent, transparent 19px, ${x} 19px, ${x} 20px) !important`,"background-color: transparent !important","box-sizing: border-box !important"].join("; "):[`background-color: ${x} !important`,"box-sizing: border-box !important"].join("; ")}case C.Outline:return[`outline: 2px solid ${m?Y(f,p):f} !important`,"outline-offset: 1px !important","background-color: transparent !important","box-sizing: border-box !important"].join("; ");case C.HighlightUnderline:{const x=m?Y(f,p):f,{r:N,g:q,b:I}=J(x),B=`rgba(${N}, ${q}, ${I}, 0.3)`,he=d.layout==="bounds",[de,b]=n.isVertical?["border-right","border-left"]:["border-bottom","border-top"];return[`background-color: ${B} !important`,he?`${b}: 0.1em solid ${x} !important`:null,`${de}: 0.1em solid ${x} !important`,"box-sizing: border-box !important"].filter(Boolean).join("; ")}case C.Highlight:default:return[`background-color: ${m?Y(f,p):f} !important`,`mix-blend-mode: ${y?"exclusion":"multiply"} !important`,"opacity: 1 !important","box-sizing: border-box !important"].join("; ")}})(),E=this.wnd.document.createElement("template");E.innerHTML=`<div data-readium="true" class="readium-${g}" style="${w}"></div>`.trim(),h=E.content.firstElementChild}if(e.decoration?.style?.layout==="bounds"){const d=h.cloneNode(!0);d.style.setProperty("pointer-events","none");const g=s?{left:o.left-s,right:o.right+s,top:o.top-s,bottom:o.bottom+s,width:o.width+s*2,height:o.height+s*2}:o;a(d,g,o,l),r.append(d)}else{const d=c.type,g=d===C.Underline||d===C.Strikethrough,f=d===C.Strikethrough,y=g?ia(e.range,["rt","rp"]):e.range;let p=Pe(y,!0,n.isVertical,g?0:s);p=p.sort((m,w)=>n.isVertical?(n.isVertLR?1:-1)*(m.left-w.left):m.top-w.top);for(let m of p){const w=h.cloneNode(!0);w.style.setProperty("pointer-events","none");let E=m;if(f){const x=n.blockSize(m)*.1,N=n.blockStart(m)+n.blockSize(m)/2-x/2;E=n.isVertical?{left:N,right:N+x,top:m.top,bottom:m.bottom,width:x,height:m.height}:{top:N,bottom:N+x,left:m.left,right:m.right,height:x,width:m.width}}s&&g&&(E=n.isVertical?{...E,top:E.top-s,bottom:E.bottom+s,height:E.height+s*2}:{...E,left:E.left-s,right:E.right+s,width:E.width+s*2}),a(w,E,o,l),r.append(w)}}e.container=r,e.clickableElements=Array.from(r.querySelectorAll("[data-activable='1']")),e.clickableElements.length||(e.clickableElements=Array.from(r.children))}renderLayout(e){this.wnd.cancelAnimationFrame(this.currentRender),this.currentRender=this.wnd.requestAnimationFrame(()=>{e=e.filter(r=>!this.experimentalHighlights||!!this.notTextFlag?.has(r.id)),!(!e||e.length===0)&&this.requireContainer().append(...e.map(r=>r.container).filter(r=>!!r))})}requireContainer(e=!1){if(e){let r;return this.wnd.document.getElementById(`${this.id}-style`)?r=this.wnd.document.getElementById(`${this.id}-style`):(r=this.wnd.document.createElement("style"),r.dataset.readium="true",r.id=`${this.id}-style`,this.wnd.document.head.appendChild(r)),r}return this.container||(this.shadowRoot||(this.shadowHost=this.wnd.document.createElement("div"),this.shadowHost.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none",this.wnd.document.body.appendChild(this.shadowHost),this.shadowRoot=this.shadowHost.attachShadow({mode:"open"})),this.container=this.wnd.document.createElement("div"),this.container.setAttribute("id",this.id),this.container.dataset.group=this.name,this.container.dataset.readium="true",this.container.style.setProperty("pointer-events","none"),this.container.style.display="contents",this.shadowRoot.appendChild(this.container)),this.container}getCurrentDarkMode(){return pr(this.wnd,"--USER__appearance")==="readium-night-on"||sn(this.getBackgroundColor())}getBackgroundColor(){return pr(this.wnd,"--USER__backgroundColor")||this.wnd.getComputedStyle(this.wnd.document.documentElement).getPropertyValue("background-color")}updateSharedMask(){const e=this.items.filter(g=>g.decoration.style?.type===C.Mask);if(e.length===0){this.maskSvg&&(this.maskSvg.remove(),this.maskSvg=void 0),this.shadowRoot&&(this.shadowRoot.innerHTML="");return}const r=ye(this.wnd),n=1/this.effectiveZoom(),i=this.wnd.document.documentElement,s=i.scrollWidth,a=i.scrollHeight,o=[];for(const g of e){const f=g.decoration.style,y=f.layout??"boxes",p=f.width??"wrap",m=f.expand??0,w=g.range.getBoundingClientRect(),E=y==="bounds"?[m?{left:w.left-m,top:w.top-m,right:w.right+m,bottom:w.bottom+m,width:w.width+m*2,height:w.height+m*2}:w]:Pe(g.range,!1,!1,m);for(const x of E){let N;switch(p){case"viewport":{const q=Math.floor(r.inlineStart(x)/r.viewportInlineSize)*r.viewportInlineSize;N=r.toRect(q,r.blockStart(x),r.viewportInlineSize,r.blockSize(x));break}case"page":{const q=Math.floor(r.inlineStart(x)/r.pageInlineSize)*r.pageInlineSize;N=r.toRect(q,r.blockStart(x),r.pageInlineSize,r.blockSize(x));break}case"bounds":{N=r.toRect(r.inlineStart(w),r.blockStart(x),r.inlineSize(w),r.blockSize(x));break}default:N=r.toRect(r.inlineStart(x),r.blockStart(x),r.inlineSize(x),r.blockSize(x))}o.push(N)}}const c=[`M0 0 H${s} V${a} H0 Z`,...o.map(g=>{const f=(g.left+r.xDocOffset)*n,y=(g.top+r.yDocOffset)*n,p=(g.right+r.xDocOffset)*n,m=(g.bottom+r.yDocOffset)*n;return`M${f} ${y} H${p} V${m} H${f} Z`})].join(" "),l="http://www.w3.org/2000/svg";if(!this.maskSvg){this.shadowRoot||(this.shadowHost=this.wnd.document.createElement("div"),this.shadowHost.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none",this.wnd.document.body.appendChild(this.shadowHost),this.shadowRoot=this.shadowHost.attachShadow({mode:"open"})),this.maskSvg=this.wnd.document.createElementNS(l,"svg"),this.maskSvg.style.cssText=`position:absolute;top:0;left:0;width:${s}px;height:${a}px;pointer-events:none;z-index:9999`,this.maskSvg.dataset.readium="true";const g=this.wnd.document.createElementNS(l,"defs"),f=this.wnd.document.createElementNS(l,"clipPath"),y=`${this.id}-mask-clip`;f.setAttribute("id",y),f.setAttribute("clipPathUnits","userSpaceOnUse");const p=this.wnd.document.createElementNS(l,"path");p.setAttribute("clip-rule","evenodd"),f.appendChild(p),g.appendChild(f),this.maskSvg.appendChild(g);const m=this.wnd.document.createElementNS(l,"rect");m.setAttribute("id",`${this.id}-mask-rect`),m.setAttribute("clip-path",`url(#${y})`),m.style.pointerEvents="none",this.maskSvg.appendChild(m),this.shadowRoot.appendChild(this.maskSvg)}this.maskSvg.style.width=`${s}px`,this.maskSvg.style.height=`${a}px`;const h=this.maskSvg.querySelector("path");h&&h.setAttribute("d",c);const d=this.maskSvg.querySelector("rect");if(d){const g=e[0].decoration.style.tint,f=g??this.getBackgroundColor()??ct(C.Mask),y=g?"1":"0.5";d.setAttribute("x","0"),d.setAttribute("y","0"),d.setAttribute("width",String(s)),d.setAttribute("height",String(a)),d.setAttribute("fill",f),d.setAttribute("fill-opacity",y)}}injectCustomStylesheet(e){const r=`${this.id}-custom-style`;let n=this.wnd.document.getElementById(r);n||(n=this.wnd.document.createElement("style"),n.id=r,n.dataset.readium="true",this.wnd.document.head.appendChild(n)),n.innerHTML=e}clearContainer(){if(this.experimentalHighlights){const e=this.wnd.CSS.highlights;for(const r of this._tintSubKeys.values())e.delete(r);this._tintSubKeys.clear(),this._subKeyCounter=0}this.wnd.document.getElementById(`${this.id}-custom-style`)?.remove(),this.container&&(this.container.remove(),this.container=void 0)}}const hn=class Se extends Fo{constructor(){super(...arguments),this.resizeFrame=0,this.lastGroupId=0,this.groups=new Map,this.handleResizer=this.handleResize.bind(this)}cleanup(){this.groups.forEach(e=>e.destroy()),this.groups.clear()}updateHighlightStyles(){this.groups.forEach(e=>{e.requestLayout()})}handleResize(){this.wnd.clearTimeout(this.resizeFrame),this.resizeFrame=this.wnd.setTimeout(()=>{this.groups.forEach(e=>{e.experimentalHighlights||e.requestLayout()})},50)}mount(e,r){return this.wnd=e,r.register("decorate",Se.moduleName,(n,i)=>{const s=n;(s.action==="add"||s.action==="update")&&s.decoration.locator&&(s.decoration.locator=Jo.deserialize(s.decoration.locator)),this.groups.has(s.group)||this.groups.set(s.group,new ka(e,r,`readium-decoration-${this.lastGroupId++}`,s.group));const a=this.groups.get(s.group);switch(s.action){case"add":a?.add(s.decoration);break;case"remove":a?.remove(s.decoration.id);break;case"clear":a?.clear();break;case"update":a?.update(s.decoration);break}i(!0)}),r.register("decoration_activatable",Se.moduleName,(n,i)=>{const s=n,a=this.groups.get(s.group);a&&(a.activatable=s.activatable),i(!0)}),r.register("decoration_hoverable",Se.moduleName,(n,i)=>{const s=n,a=this.groups.get(s.group);a&&(a.hoverable=s.hoverable),i(!0)}),this.resizeObserver=new ResizeObserver(()=>e.requestAnimationFrame(()=>this.handleResize())),this.resizeObserver.observe(e.document.documentElement),e.addEventListener("orientationchange",this.handleResizer),e.addEventListener("resize",this.handleResizer),this.styleObserver=new MutationObserver(n=>{n.some(i=>i.type==="attributes"&&i.attributeName==="style"&&i.oldValue!==i.target.getAttribute("style"))&&this.updateHighlightStyles()}),this.styleObserver.observe(e.document.documentElement,{attributes:!0,attributeFilter:["style"],attributeOldValue:!0}),r.log("Decorator Mounted"),!0}unmount(e,r){return e.removeEventListener("orientationchange",this.handleResizer),e.removeEventListener("resize",this.handleResizer),r.unregisterAll(Se.moduleName),this.resizeObserver.disconnect(),this.styleObserver.disconnect(),this.cleanup(),r.log("Decorator Unmounted"),!0}};hn.moduleName="decorator";let dn=hn;const gn=new Set(Object.values(C));function fn(t,e){return t===C.TextColor?typeof window<"u"&&"Highlight"in window:gn.has(t)?!0:!!e?.[t]}function At(t,e){const{style:r}=t;if(r.type===C.Template){const n=r;return{...t,style:{...n,element:Er(n,t)}}}if(r.type&&e?.[r.type]){const n=e[r.type];return{...t,style:{type:C.Template,layout:n.layout,width:n.width,stylesheet:n.stylesheet,element:Er(n,t)}}}return t}function Er(t,e){return typeof t.element=="function"?t.element(e):t.element}function Oa(t,e){if(t.type!==e.type)return!1;if(t.type===C.Template){const i=t,s=e;return i.layout===s.layout&&i.width===s.width&&i.stylesheet===s.stylesheet}const r=t,n=e;return r.tint===n.tint&&r.layout===n.layout&&r.width===n.width&&(r.enforceContrast??!0)===(n.enforceContrast??!0)&&(r.expand??0)===(n.expand??0)}function pn(t,e){return t.locator.href===e.locator.href&&JSON.stringify(t.locator.locations?.serialize?.()??t.locator.locations)===JSON.stringify(e.locator.locations?.serialize?.()??e.locator.locations)&&JSON.stringify(t.locator.text??null)===JSON.stringify(e.locator.text??null)&&Oa(t.style,e.style)&&JSON.stringify(t.extras??null)===JSON.stringify(e.extras??null)}let mn=class{constructor(){this.queue=[],this.channel=typeof MessageChannel<"u"?new MessageChannel:void 0,this.channel&&(this.channel.port1.onmessage=()=>this.flush())}push(e){const r=this.queue.length===0;this.queue.push(e),r&&(this.channel?this.channel.port2.postMessage(null):setTimeout(()=>this.flush(),0))}flush(){const e=this.queue;this.queue=[],e.forEach(r=>r())}clear(){this.queue=[]}};class yn{constructor(){this.frame=new bn(this),this.host=new vn(this)}}let bn=class{constructor(e){this.channel=e,this.registrar=new Map,this.outbox=new mn,this.ready=!0}register(e,r,n){(Array.isArray(e)?e:[e]).forEach(i=>{const s=this.registrar.get(i)??[];if(s.find(a=>a.module===r))throw new Error(`Duplicate callback for "${i}" in module "${r}"`);s.push({module:r,cb:n}),this.registrar.set(i,s)})}unregister(e,r){(Array.isArray(e)?e:[e]).forEach(n=>{const i=this.registrar.get(n);i&&this.registrar.set(n,i.filter(s=>s.module!==r))})}unregisterAll(e){this.registrar.forEach((r,n)=>{this.registrar.set(n,r.filter(i=>i.module!==e))})}_dispatch(e,r,n){const i=this.registrar.get(e);if(!i?.length){n(!1);return}i.forEach(s=>s.cb(r,n))}send(e,r){this.outbox.push(()=>this.channel.host._receive(e,r))}log(...e){this.outbox.push(()=>this.channel.host._receive("log",e))}destroy(){this.registrar.clear(),this.outbox.clear()}};class vn{constructor(e){this.channel=e,this.listeners=new Map,this.outbox=new mn,this.ready=!0}send(e,r,n){this.outbox.push(()=>this.channel.frame._dispatch(e,r,n??(()=>{})))}on(e,r){const n=this.listeners.get(e)??[];n.push(r),this.listeners.set(e,n)}off(e,r){const n=this.listeners.get(e);n&&this.listeners.set(e,n.filter(i=>i!==r))}_receive(e,r){this.listeners.get(e)?.forEach(n=>n(r))}}class wn{constructor(e,r={}){this.host=e,this._decorations=new Map,this._activationState=new Map,this._hoverState=new Map,this._observers=new Map,this._hoveredDecorations=new Map,this._config=r,e.on("decoration_activated",n=>{const i=n,s=this._decorations.get(i.group)?.find(a=>a.id===i.decorationId);s&&this._observers.get(i.group)?.forEach(a=>a.onDecorationActivated?.({group:i.group,decoration:s,rect:i.rect,point:i.point}))}),e.on("decoration_pointer_enter",n=>{const i=n,s=this._decorations.get(i.group)?.find(a=>a.id===i.decorationId);s&&(this._hoveredDecorations.set(i.group,s),this._observers.get(i.group)?.forEach(a=>a.onDecorationPointerEnter?.({group:i.group,decoration:s,rect:i.rect,point:i.point})))}),e.on("decoration_pointer_leave",n=>{const i=n,s=this._decorations.get(i.group)?.find(a=>a.id===i.decorationId)??this._hoveredDecorations.get(i.group);this._hoveredDecorations.delete(i.group),s&&this._observers.get(i.group)?.forEach(a=>a.onDecorationPointerLeave?.({group:i.group,decoration:s,rect:i.rect,point:i.point}))})}supportsDecorationStyle(e){return fn(e,this._config.decorationTemplates)}applyDecorations(e,r){const n=this._decorations.get(r)??[],i=new Map(n.map(c=>[c.id,c])),s=new Map(e.map(c=>[c.id,c]));for(const[c,l]of i){const h=s.get(c);h?pn(l,h)||this.host.send("decorate",{group:r,action:"update",decoration:At(h,this._config.decorationTemplates)}):this.host.send("decorate",{group:r,action:"remove",decoration:{id:c}})}for(const[c,l]of s)i.has(c)||this.host.send("decorate",{group:r,action:"add",decoration:At(l,this._config.decorationTemplates)});this._decorations.set(r,e);const a=this._activationState.get(r);a!==void 0&&this.host.send("decoration_activatable",{group:r,activatable:a});const o=this._hoverState.get(r);o!==void 0&&this.host.send("decoration_hoverable",{group:r,hoverable:o})}registerDecorationObserver(e,r){this._observers.has(e)||this._observers.set(e,new Set),this._observers.get(e).add(r),r.onDecorationActivated&&(this._activationState.set(e,!0),this.host.send("decoration_activatable",{group:e,activatable:!0})),(r.onDecorationPointerEnter||r.onDecorationPointerLeave)&&(this._hoverState.set(e,!0),this.host.send("decoration_hoverable",{group:e,hoverable:!0}))}unregisterDecorationObserver(e){this._observers.forEach((r,n)=>{if(!r.has(e))return;r.delete(e);const i=[...r].some(a=>a.onDecorationActivated);this._activationState.has(n)&&!i&&(this._activationState.delete(n),this.host.send("decoration_activatable",{group:n,activatable:!1}));const s=[...r].some(a=>a.onDecorationPointerEnter||a.onDecorationPointerLeave);this._hoverState.has(n)&&!s&&(this._hoverState.delete(n),this.host.send("decoration_hoverable",{group:n,hoverable:!1}))})}destroy(){this._decorations.clear(),this._activationState.clear(),this._hoverState.clear(),this._observers.clear(),this._hoveredDecorations.clear()}}function xa(t){return t&&Array.isArray(t)?t:void 0}function Ea(t){return t&&typeof t=="string"?[t]:xa(t)}function ut(t){return isNaN(t)?void 0:t}class _{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const r=ut(e.progression),n=ut(e.totalProgression),i=ut(e.position),s=new Map,a=new Set(["fragment","fragments","progression","totalProgression","position","otherLocations"]);return Object.entries(e).forEach(([o,c])=>{a.has(o)||s.set(o,c)}),e.otherLocations instanceof Map&&e.otherLocations.forEach((o,c)=>s.set(c,o)),new _({fragments:Ea(e.fragments||e.fragment),progression:r!==void 0&&r>=0&&r<=1?r:void 0,totalProgression:n!==void 0&&n>=0&&n<=1?n:void 0,position:i!==void 0&&i>0?i:void 0,otherLocations:s.size===0?void 0:s})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((r,n)=>e[n]=r),e}}class Ae{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new Ae({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}}class xe{constructor(e){const r=e.href.indexOf("#"),n=r>=0?e.href.slice(r+1):void 0;this.href=r>=0?e.href.slice(0,r):e.href,this.type=e.type,this.title=e.title;const i=e.locations?.fragments,s=n&&(!i||i.length===0);this.locations=e.locations?s?new _({...e.locations,fragments:[n]}):e.locations:n?new _({fragments:[n]}):new _({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new xe({href:e.href,type:e.type,title:e.title,locations:_.deserialize(e.locations),text:Ae.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new xe({href:this.href,type:this.type,title:this.title,text:this.text,locations:new _({...this.locations,...e})})}}function Sn(t,e=window){const{highlight:r,before:n,after:i,selector:s,fragment:a}=t,c=r!==void 0||n!==void 0||i!==void 0?new Ae({highlight:r,before:n,after:i}):void 0,l=s?new Map([["cssSelector",s]]):void 0,d=l!==void 0||a!==void 0?new _({fragments:a?[a]:void 0,otherLocations:l}):void 0;return new xe({href:e.location.href,type:"text/html",text:c,locations:d})}class kn extends wn{constructor(e,r,n,i={}){super(e.host,i),this.channel=e,this.wnd=r,this.decorator=n}decorate(e,r){this.applyDecorations(e.map(({id:n,style:i,...s})=>({id:n,style:i,locator:Sn(s,this.wnd)})),r)}destroy(){super.destroy(),this.decorator.unmount(this.wnd,this.channel.frame),this.channel.frame.destroy()}}function Ca(t=window,e={}){const r=new yn,n=new dn;return n.mount(t,r.frame),new kn(r,t,n,e)}const Aa=["heading1","heading2","heading3","heading4","heading5","heading6"],Cr={"doc-abstract":"abstract","doc-acknowledgments":"acknowledgments","doc-afterword":"afterword","doc-appendix":"appendix",article:"article","doc-backlink":"backlink","doc-biblioentry":"listItem","doc-bibliography":"bibliography","doc-biblioref":"biblioref",blockquote:"blockquote",caption:"caption",cell:"cell","doc-chapter":"chapter","doc-colophon":"colophon",columnheader:"columnheader",complementary:"complementary","doc-conclusion":"conclusion","doc-cover":"cover","doc-credit":"credit","doc-credits":"credits","doc-dedication":"dedication",definition:"definition","doc-endnote":"footnote","doc-endnotes":"endnotes","doc-epigraph":"epigraph","doc-epilogue":"epilogue","doc-errata":"errata","doc-example":"example",figure:"figure","doc-footnote":"footnote","doc-foreword":"foreword","doc-glossary":"glossary","doc-glossref":"glossref",img:"image",image:"image","doc-index":"index","doc-introduction":"introduction",list:"list",listitem:"listItem",main:"main",math:"math",navigation:"navigation","doc-noteref":"noteref","doc-notice":"notice","doc-pagebreak":"pagebreak","doc-pagelist":"pagelist",paragraph:"paragraph","doc-part":"part","doc-preface":"preface","doc-prologue":"prologue","doc-pullquote":"pullquote",presentation:"presentation",none:"presentation","doc-qna":"qna",qna:"qna",region:"region",row:"row",rowheader:"rowheader",separator:"separator","doc-subtitle":"subtitle",table:"table",term:"term","doc-tip":"tip","doc-toc":"toc"},Ta={abstract:"abstract",acknowledgments:"acknowledgments",afterword:"afterword",appendix:"appendix",aside:"aside",backlink:"backlink",biblioentry:"listItem",bibliography:"bibliography",biblioref:"biblioref","table-cell":"cell",chapter:"chapter",colophon:"colophon",conclusion:"conclusion",cover:"cover",credit:"credit",credits:"credits",dedication:"dedication",glossdef:"definition",endnote:"footnote",endnotes:"endnotes",rearnote:"footnote",rearnotes:"endnotes",epigraph:"epigraph",epilogue:"epilogue",errata:"errata",example:"example",figure:"figure",footnote:"footnote",foreword:"foreword",glossary:"glossary",glossref:"glossref",index:"index",introduction:"introduction",landmarks:"landmarks",list:"list","list-item":"listItem",loa:"loa",loi:"loi",lot:"lot",lov:"lov",noteref:"noteref",notice:"notice",pagebreak:"pagebreak","page-list":"pagelist",pagelist:"pagelist",part:"part",preface:"preface",prologue:"prologue",pullquote:"pullquote",qna:"qna","table-row":"row",subtitle:"subtitle",table:"table",glossterm:"term",tip:"tip",toc:"toc"},Ra={article:"article",aside:"aside",audio:"audio",blockquote:"blockquote",caption:"caption",figcaption:"caption",td:"cell",dd:"definition",details:"details",figure:"figure",header:"header",h1:"heading1",h2:"heading2",h3:"heading3",h4:"heading4",h5:"heading5",h6:"heading6",img:"image",ul:"list",ol:"list",li:"listItem",main:"main",math:"math",nav:"navigation",p:"paragraph",pre:"preformatted",tr:"row",section:"section",hr:"separator",summary:"summary",table:"table",dfn:"term",dt:"term",video:"video",svg:"image"};function ht(t){const e=[],r=c=>{e.includes(c)||e.push(c)},n=[];let i=!1;const s=t.getAttribute("role");if(s)for(const c of s.split(/\s+/).filter(Boolean))if((c==="presentation"||c==="none")&&(i=!0),c==="heading"){let l=2;const h=parseInt(t.getAttribute("aria-level")??"",10);Number.isFinite(h)&&h>=1&&(l=Math.min(h,6)),n.push(Aa[l-1])}else Cr[c]&&n.push(Cr[c]);const a=t.getAttribute("epub:type");if(a)for(const c of a.split(/\s+/).filter(Boolean)){const l=Ta[c];l&&n.push(l)}if(i)return["presentation"];const o=t.tagName.toLowerCase();if(o==="body")r("body");else if(o==="th")switch(t.getAttribute("scope")){case"col":r("columnheader");break;case"row":r("rowheader");break;default:r("cell")}else{const c=Ra[o];c&&r(c)}for(const c of n)r(c);return e}function Te(t){return t.plain===""&&t.ssml===""&&t.language===""}function Na(t){if(!t||Te(t))return;if(t.ssml===""&&t.language==="")return t.plain;const e={language:t.language};return t.plain!==""&&(e.plain=t.plain),t.ssml!==""&&(e.ssml=t.ssml),e}function La(t,e){if(t.lang!==e.lang||t.tag!==e.tag)return!1;const r=Object.entries(t.attrs??{}),n=Object.entries(e.attrs??{});return r.length!==n.length?!1:r.every(([i,s])=>e.attrs?.[i]===s)}const Me=t=>t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),dt=t=>t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),qa=/[\u00A0\u2007\u202F]/;function Ia(t){return qa.test(t)}function Ee(t,e){let r="",n=!1,i=!1;for(const s of t)if(Ia(s))r+=s,n=!1,i=!0;else if(/\s/.test(s)){if(e&&!i||n)continue;r+=" ",n=!0}else s!==""&&s!==""&&(r+=s,n=!1,i=!0);return r}function Ar(t){return!!(t.getAttribute("aria-hidden")==="true"||t.hasAttribute("hidden"))}function Tt(t){let e="";const r=n=>{n.nodeType===3&&(e+=n.nodeValue??"");for(let i=n.firstChild;i;i=i.nextSibling)r(i)};return r(t),e}function Ue(t){return Ee(Tt(t),!0).trim()}function Pa(t){if(Ar(t))return[null,!1];const e=(t.getAttribute("aria-labelledby")??"").trim();if(e){const s=[...new Set(e.split(/\s+/).filter(Boolean))],a=t.ownerDocument,o=s.map(c=>a.getElementById(c)).filter(c=>c!==null);if(o.length>0){let c="";o.forEach((h,d)=>{if(Ar(h))return;const g=h.getAttribute("aria-label");c+=g||Tt(h),d<o.length-1&&(c+=" ")});const l=Ee(c,!0).trim();if(l!=="")return[{language:"",plain:l},!0]}}const r=(t.getAttribute("aria-label")??"").trim();if(r)return[{language:"",plain:r},!0];const n=(t.getAttribute("aria-describedby")??"").trim();if(n){const a=[...new Set(n.split(/\s+/).filter(Boolean))].map(o=>t.ownerDocument.getElementById(o)).filter(o=>o!==null);if(a.length>0){const o=a.map(l=>Tt(l)).join(" "),c=Ee(o,!0).trim();if(c!=="")return[{language:"",plain:c},!0]}}const i=t.tagName.toLowerCase();if(i==="img"){const s=(t.getAttribute("alt")??"").trim();if(s)return[{language:"",plain:s},!0];const a=(t.getAttribute("title")??"").trim();if(a)return[{language:"",plain:a},!0]}else if(i==="svg"){const s=t.querySelector(":scope > title");if(s){const a=Ue(s);if(a)return[{language:"",plain:a},!0]}}else if(i==="math"){const s=(t.getAttribute("alttext")??"").trim();if(s)return[{language:"",plain:s},!0]}return[null,!0]}const $a={em:["emphasis"],b:["emphasis"],i:["emphasis",{level:"reduced"}],strong:["emphasis",{level:"strong"}],br:["break"]};function Da(t){return $a[t]??["",void 0]}const Ba=new Set(["script","style","template","noscript","textarea","select","datalist","iframe","rt","rp","rtc"]),Rt="\\p{Pe}\\p{Pf}.,;:!?,。、;:!?،؛؟",Nt="\\p{Ps}\\p{Pi}¿¡",ja=new RegExp(`^[${Rt}]`,"u"),Ua=new RegExp(`^[${Nt}]`,"u");function Ke(t){return ja.test(t)}function za(t){return Ua.test(t)}function Lt(t){return!t.audioref&&!t.imgref&&!t.textref&&!t.videoref&&(!t.text||Te(t.text))&&!(t.children&&t.children.length>0)&&!t.description}function Ha(t){return!t.audioref&&!t.imgref&&!t.textref&&!t.videoref&&(!t.text||Te(t.text))&&!!(t.children&&t.children.length>0)&&!(t.role&&t.role.length>0)&&!t.id}function _a(t){return!(t.role&&t.role.length>0)&&!t.id}class Be{el;object={};children=[];noText=!1;finalize(){const e=this.object,r=[];for(const n of this.children){const i=n.finalize();if(!Lt(i)){if(Ha(i)){r.push(...i.children??[]);continue}r.push(i)}}if(r.length>0&&(e.children=r),(!e.text||Te(e.text))&&e.children?.length===1){const n=e.children[0];_a(n)&&(n.text&&(e.text=n.text),n.textref&&(e.textref=n.textref),n.imgref&&(e.imgref=n.imgref),n.audioref&&(e.audioref=n.audioref),n.videoref&&(e.videoref=n.videoref),e.children=n.children)}return e}}function qt(t){const e={};t.id&&(e.id=t.id),t.textref&&(e.textref=t.textref),t.imgref&&(e.imgref=t.imgref),t.audioref&&(e.audioref=t.audioref),t.videoref&&(e.videoref=t.videoref);const r=Na(t.text);return r!==void 0&&(e.text=r),t.role&&t.role.length>0&&(e.role=t.role),t.children&&t.children.length>0&&(e.children=t.children.map(qt)),t.description&&(e.description=t.description),e}function On(t){const e={};return t.id&&(e.id=t.id),t.textref&&(e.textref=t.textref),t.imgref&&(e.imgref=t.imgref),t.audioref&&(e.audioref=t.audioref),t.videoref&&(e.videoref=t.videoref),t.role&&(e.role=t.role),t.description&&(e.description=t.description),typeof t.text=="string"?e.text={plain:t.text,ssml:"",language:""}:t.text&&(e.text={plain:t.text.plain??"",ssml:t.text.ssml??"",language:t.text.language}),t.children&&(e.children=t.children.map(On)),e}const Fa=1;function Tr(t){for(let e=t;e;e=e.parentElement){const r=e.getAttribute("xml:lang");if(r)return r;const n=e.getAttribute("lang");if(n)return n}return""}function Ma(t){for(let e=t.firstChild;e;e=e.nextSibling)if(e.nodeType===Fa)return!0;return!1}function Rr(t,e){for(let r=e;r;r=r.parentElement)if(r===t)return!0;return!1}function Va(t){const e=t.slice(0,500);return/<\?xml\b/.test(e)||/xmlns:epub=/.test(e)||/DOCTYPE\s+html\s+PUBLIC\s+"-\/\/W3C\/\/DTD XHTML/i.test(e)?"application/xhtml+xml":"text/html"}const Wa=3,Ga=1,Ka=new Set(["object","base","font","tt","i","b","u","big","small","em","strong","dfn","code","samp","kbd","var","cite","abbr","time","acronym","mark","ruby","rt","rp","rtc","a","img","br","wbr","map","q","sub","sup","bdo","iframe","embed","span","input","select","textarea","label","button","optgroup","option","legend","datalist","keygen","output","progress","meter","area","param","source","track","summary","command","basefont","bgsound","menuitem","data","bdi","s","strike","nobr","rb"]),Ja=new Set(["summary","dfn","span"]);function Nr(t,e){return Ja.has(t)&&e.length>0?!0:!Ka.has(t)}class jt{xmlParsed;ids=new Map;suppressed=new Set;idAlloc={claimed:new Set,counters:new Map};noterefDepth=0;allowNode=null;root=new Be;current=this.root;segments=[];textAcc="";currentCtx={lang:"",tag:""};flowEndsWithSpace=!0;pendingChildren=[];constructor(e){this.xmlParsed=e}allocateId(e){for(;;){const r=(this.idAlloc.counters.get(e)??0)+1;this.idAlloc.counters.set(e,r);const n=`${e}${r}`;if(!(this.ids.has(n)||this.idAlloc.claimed.has(n)))return this.idAlloc.claimed.add(n),n}}claimId(e){return this.idAlloc.claimed.has(e)?!1:(this.idAlloc.claimed.add(e),!0)}prescan(e){const r=[],n=(i,s)=>{const a=i.getAttribute("id");if(a&&!this.ids.has(a)&&this.ids.set(a,i),s=s||i.getAttribute("aria-hidden")==="true"||i.hasAttribute("hidden"),!s&&i.tagName.toLowerCase()==="a"&&ht(i).includes("noteref")){const c=i.getAttribute("href")??"";c.startsWith("#")&&r.push({id:c.slice(1),ref:i})}for(let o=i.firstElementChild;o;o=o.nextElementSibling)n(o,s)};n(e,!1);for(const i of r){const s=this.ids.get(i.id);s&&(Rr(s,i.ref)||this.suppressed.add(s))}}convert(e){this.prescan(e),this.walk(e)}convertChildren(e){this.prescan(e);for(let r=e.firstChild;r;r=r.nextSibling)this.walk(r);this.flushText()}result(){const e=this.root.finalize();return!e.children||e.children.length===0?Lt(e)?[]:[qt(e)]:e.children.map(qt)}descend(e){const r=new Be;r.el=e,r.noText=this.current.noText,this.current.children.push(r),this.current=r}appendChild(e){e.noText=this.current.noText,this.current.children.push(e)}walk(e){if(e.nodeType===Wa){this.text(e);return}if(e.nodeType!==Ga)return;const r=e,n=this.current,i=this.head(r);if(!i)for(let s=r.firstChild;s;s=s.nextSibling)this.walk(s);this.tail(r,i,n)}head(e){const r=e.tagName.toLowerCase();if(Ba.has(r)||this.suppressed.has(e)&&e!==this.allowNode)return!0;const[n,i]=Pa(e);if(!i&&e!==this.allowNode)return!0;const s=ht(e);if((r==="img"||r==="svg")&&(s.includes("presentation")||n===null&&e.hasAttribute("alt")&&e.getAttribute("alt").trim()===""))return!0;if(r==="br")return this.current.noText||(this.closeSegment(),this.segments.push({kind:"break"}),this.flowEndsWithSpace=!0),!0;if(s.includes("pagebreak"))return!this.pagebreak(e,n,s);if(r==="a"&&s.includes("noteref")&&e.getAttribute("href"))return this.noteref(e,s),!0;if(r==="a"&&e.getAttribute("href"))return this.link(e,s),!0;if(r==="img"){const c={role:s},l=e.getAttribute("src");return l&&(c.imgref=l),n&&(c.description=n.plain),this.placeholder(e,"image",c),!0}if(r==="audio"||r==="video"){const c={role:s};let l=e.getAttribute("src");if(!l){const h=e.querySelector(":scope > source[src]");h&&(l=h.getAttribute("src"))}return r==="audio"?l&&(c.audioref=l):l&&(c.videoref=l),n&&(c.description=n.plain),this.placeholder(e,r,c),!0}if(s.includes("image")||s.includes("math")){const c={role:s};return n&&(c.description=n.plain),this.placeholder(e,s.includes("math")?"math":"image",c),!0}if(!Nr(r,s))return!1;this.flushText(),this.descend(e);const a=this.current.object;s.length>0&&(a.role=s),n&&(a.description=n.plain,s.includes("figure")&&(this.current.noText=!0));const o=e.getAttribute("id");return o&&(a.id=o),!1}tail(e,r,n){if(r)return;const i=e.tagName.toLowerCase(),s=ht(e);Nr(i,s)&&(this.flushText(),this.current=n)}text(e){if(this.current.noText)return;const r=e.nodeValue??"";if(/^\s*$/.test(r)){(this.textAcc.length>0||this.segments.length>0)&&(this.textAcc+=Ee(r,this.flowEndsWithSpace),this.updateFlowSpace());return}const n=this.textContext(e);La(n,this.currentCtx)||(this.closeSegment(),this.currentCtx=n),this.textAcc+=Ee(r,this.flowEndsWithSpace),this.updateFlowSpace()}textContext(e){const r={lang:Tr(e.parentElement),tag:""};for(let n=e.parentElement;n&&n!==this.current.el;n=n.parentElement){const[i,s]=Da(n.tagName.toLowerCase());if(i&&i!=="break"){r.tag=i,r.attrs=s;break}}return r}updateFlowSpace(){this.textAcc.length>0&&(this.flowEndsWithSpace=this.textAcc.endsWith(" "))}closeSegment(){this.textAcc.length!==0&&(this.segments.push({kind:"text",text:this.textAcc,ctx:this.currentCtx}),this.textAcc="")}resetFlow(){this.segments=[],this.textAcc="",this.currentCtx={lang:"",tag:""},this.flowEndsWithSpace=!0,this.pendingChildren=[]}placeholder(e,r,n,i){if(Lt(n))return;const s=new Be;if(s.el=e,s.object=n,this.current.noText){this.appendChild(s);return}this.closeSegment(),this.pendingChildren.push(s),this.segments.push({kind:"placeholder",tag:r,child:s,candidateID:i??e.getAttribute("id")??void 0}),this.flowEndsWithSpace=!1}pagebreak(e,r,n){const i={role:n},s=(e.getAttribute("title")??"").trim();s?i.text={plain:s,ssml:"",language:""}:r&&(i.text={plain:r.plain??"",ssml:r.ssml??"",language:r.language});const a=!!(i.text&&!Te(i.text)),o=!this.xmlParsed&&(Ma(e)||a&&e.firstChild!==null);if(!a&&!o){const l=Ue(e);l&&(i.text={plain:l,ssml:"",language:""})}const c=e.getAttribute("id");return c&&(i.textref=`#${c}`),this.placeholder(e,"pagebreak",i),o}noteref(e,r){const n={role:r},i=Ue(e);i&&(n.text={plain:i,ssml:"",language:""});const s=e.getAttribute("href")??"";let a=e.getAttribute("id")??"";if(!a&&s.startsWith("#")&&(a=s.slice(1)),s.startsWith("#")){const o=s.slice(1),c=this.ids.get(o);if(c&&!Rr(c,e)&&this.noterefDepth<3){const l=new jt(this.xmlParsed);l.ids=this.ids,l.suppressed=this.suppressed,l.idAlloc=this.idAlloc,l.noterefDepth=this.noterefDepth+1,l.allowNode=c,l.convert(c);const h=l.result();h.length>0&&(n.children=h.map(d=>{const g=On(d);return delete g.id,g}))}}!n.children&&s&&(n.children=[{textref:s}]),this.placeholder(e,"noteref",n,a||void 0)}link(e,r){const n={};r.length>0&&(n.role=r);const i=Ue(e);i&&(n.text={plain:i,ssml:"",language:""});const s=e.getAttribute("href");s&&(n.textref=s),this.placeholder(e,r[0]??"link",n)}flushText(){this.closeSegment();let e=this.segments;const r=this.pendingChildren;if(this.resetFlow(),e.length===0)return;for(;e.length>0;){const p=e[0];if(p.kind==="break"){e=e.slice(1);continue}if(p.kind==="text"){const m=p.text.replace(/^\s+/,"");if(m===""){e=e.slice(1);continue}e=[{...p,text:m},...e.slice(1)]}break}for(;e.length>0;){const p=e[e.length-1];if(p.kind==="break"){e=e.slice(0,-1);continue}if(p.kind==="text"){const m=p.text.replace(/\s+$/,"");if(m===""){e=e.slice(0,-1);continue}e=[...e.slice(0,-1),{...p,text:m}]}break}if(!e.some(p=>p.kind==="text"&&p.text.trim()!=="")){for(const p of r)this.appendChild(p);return}const i=[];for(const p of e)if(p.kind==="text"&&p.text.trim()!==""){const m=p.ctx.lang;i.includes(m)||i.push(m)}let s=Tr(this.current.el??null);i.length===1&&i[0]!==""&&(s=i[0]);let a=!1;for(const p of e)if(p.kind!=="text"||p.ctx.tag!==""||p.ctx.lang!==s){a=!0;break}if(a&&s===""&&(s="en"),a)for(const p of e){if(p.kind!=="placeholder")continue;let m=p.candidateID;(!m||!this.claimId(m))&&(m=this.allocateId(p.tag)),p.child.object.id=m}let o="",c=!1,l=!1,h=!1,d=!1;for(const p of e)if(p.kind==="text"){const m=p.text.startsWith(" "),w=p.text.replace(/^ +| +$/g,"");if(w===""){d=!0;continue}let E=!1;if(o.length>0){const x=c||d||m;l?E=!0:h?E=x&&!Ke(w):E=x}E&&(o+=" "),o+=w,c=p.text.endsWith(" "),l=!1,h=!1,d=!1}else p.kind==="break"?l=!0:p.kind==="placeholder"&&(h=!0);const g=e.some(p=>p.kind==="placeholder"),f={plain:a&&!g?"":o.trim(),ssml:"",language:s};if(a){let p="";for(const m of e)if(m.kind==="text"){let w=m.ctx.tag,E=m.ctx.attrs;if(m.ctx.lang!==s&&m.ctx.lang!==""&&(w="lang",E=void 0),w){p+=`<${w}`;for(const[x,N]of Object.entries(E??{}))p+=` ${x}="${dt(N)}"`;m.ctx.lang!==s&&m.ctx.lang!==""&&(p+=` xml:lang="${dt(m.ctx.lang)}"`),p+=`>${Me(m.text)}</${w}>`}else p+=Me(m.text)}else m.kind==="break"?p+="<break/>":m.kind==="placeholder"&&(p+=`<readium:${m.tag} id="${dt(m.child.object.id)}" />`);f.ssml=p}const y=new Be;y.object={text:f};for(const p of r)y.children.push(p);this.appendChild(y)}}const Qa=/<body[\s>]/i;function xn(t,e){const r=e??Va(t),n=new DOMParser().parseFromString(t,r),i=new jt(r==="application/xhtml+xml"),s=n.querySelector("body");return s&&!Qa.test(t)?i.convertChildren(s):i.convert(s??n.documentElement),i.result()}function Xa(t,e){return{guided:xn(t,e)}}const En={footnote:{start:"Start of the footnote.",end:"End of the footnote."},part:{start:"Start of the part.",end:"End of the part."},chapter:{start:"Start of the chapter.",end:"End of the chapter."},prologue:{start:"Start of the prologue.",end:"End of the prologue."},preface:{start:"Start of the preface.",end:"End of the preface."},introduction:{start:"Start of the introduction.",end:"End of the introduction."},conclusion:{start:"Start of the conclusion.",end:"End of the conclusion."},epilogue:{start:"Start of the epilogue.",end:"End of the epilogue."},afterword:{start:"Start of the afterword.",end:"End of the afterword."},appendix:{start:"Start of the appendix.",end:"End of the appendix."},acknowledgments:{start:"Start of the acknowledgments.",end:"End of the acknowledgments."},endnotes:{start:"Start of the endnotes.",end:"End of the endnotes."},glossary:{start:"Start of the glossary.",end:"End of the glossary."},bibliography:{start:"Start of the bibliography.",end:"End of the bibliography."},index:{start:"Start of the index.",end:"End of the index."},toc:{start:"Start of the table of contents.",end:"End of the table of contents."},pagelist:{start:"Start of the page list.",end:"End of the page list."},landmarks:{start:"Start of the landmarks.",end:"End of the landmarks."},loa:{start:"Start of the list of audio clips.",end:"End of the list of audio clips."},loi:{start:"Start of the list of illustrations.",end:"End of the list of illustrations."},lot:{start:"Start of the list of tables.",end:"End of the list of tables."},lov:{start:"Start of the list of video clips.",end:"End of the list of video clips."},qna:{start:"Start of the questions and answers.",end:"End of the questions and answers."},table:{start:"Start of the table.",end:"End of the table."},figure:{start:"Start of the figure.",end:"End of the figure."},aside:{start:"Start of the aside.",end:"End of the aside."},details:{start:"Start of the details.",end:"End of the details."},credits:{start:"Start of the credits.",end:"End of the credits."},pagebreak:"Pagebreak.",heading1:"Heading level 1.",heading2:"Heading level 2.",heading3:"Heading level 3.",heading4:"Heading level 4.",heading5:"Heading level 5.",heading6:"Heading level 6.",subtitle:"Subtitle.",epigraph:"Epigraph.",abstract:"Abstract.",colophon:"Colophon.",dedication:"Dedication.",cover:"Cover.",errata:"Errata.",notice:"Notice.",example:"Example.",tip:"Tip.",pullquote:"Pull quote.",credit:"Credit.",image:"Image.",audio:"Audio.",video:"Video."},Za=/<lang xml:lang="[^"]*">([\s\S]*?)<\/lang>/g;function Cn(t){return t.replace(Za,"$1")}const Ya=/\s*<readium:[a-zA-Z][\w-]*\s+id="[^"]*"\s*\/>\s*/g;function el(t){return t.replace(Ya,(r,n,i)=>{const s=i.slice(n+r.length);return s.length===0||Ke(s)?"":" "}).replace(/ {2,}/g," ").trim()}function tl(t){return t.includes("<")}function An(t){if(t===void 0)return;if(typeof t=="string")return{plain:t};const e={language:t.language};if(t.ssml){const r=el(t.ssml);tl(r)&&(e.ssml=r)}return t.plain&&(e.plain=t.plain),e.plain||e.ssml?e:void 0}function Ut(t){return t.replace(/<[^>]+>/g,"").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/ {2,}/g," ").trim()}const Tn=/<lang xml:lang="([^"]*)">([\s\S]*?)<\/lang>/g;function Rn(t){return new RegExp(Tn).test(t)}function Lr(t){return t.replace(/<[^>]+>/g,"").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/ {2,}/g," ")}const rl=new RegExp(`\\s+|[${Nt}]+|[${Rt}]+|[^\\s${Nt}${Rt}]+`,"gu");function gt(t){const e=[];for(const[r]of t.matchAll(rl))/^\s/.test(r)?e.push({kind:"space"}):za(r)?e.push({kind:"open",text:r}):Ke(r)?e.push({kind:"close",text:r}):e.push({kind:"word",text:r});return e}function nl(t){let e="",r=!1;for(const n of t){if(n.kind==="space"){e&&(r=!0);continue}r&&(e+=" "),e+=n.text,r=!1}return e}function il(t){let e=t.length;for(;e>0&&(t[e-1].kind==="space"||t[e-1].kind==="open");)e--;return t.slice(e).some(r=>r.kind==="open")?t.splice(e):[]}function sl(t){let e=0;for(;e<t.length&&(t[e].kind==="space"||t[e].kind==="close");)e++;return t.slice(0,e).some(r=>r.kind==="close")?t.splice(0,e):[]}function Nn(t,e){const r=[];let n=0;for(const s of t.matchAll(Tn))r.push({tokens:gt(Lr(t.slice(n,s.index))),language:e,tagged:!1}),r.push({tokens:gt(Ut(s[2])),language:s[1],tagged:!0}),n=s.index+s[0].length;r.push({tokens:gt(Lr(t.slice(n))),language:e,tagged:!1});for(let s=0;s<r.length-1;s++)!r[s].tagged&&r[s+1].tagged?r[s+1].tokens.unshift(...il(r[s].tokens)):r[s].tagged&&!r[s+1].tagged&&r[s].tokens.push(...sl(r[s+1].tokens));const i=[];for(const s of r){const a=nl(s.tokens);a&&i.push({plain:a,language:s.language})}return i}const Ln=/<readium:[a-zA-Z][\w-]*\s+id="([^"]*)"\s*\/>/g;function ol(t){return new RegExp(Ln).test(t)}function al(t){const e=[];let r=0;for(const i of t.matchAll(Ln)){const s=t.slice(r,i.index).trim();s&&e.push({ssml:s}),e.push({placeholderId:i[1]}),r=i.index+i[0].length}const n=t.slice(r).trim();return n&&e.push({ssml:n}),e}function Ve(t){return typeof t=="object"}function Ce(t,e){return typeof t=="function"?t(e):t}function ie(t,e){return e==="ssml"?{ssml:Me(t)}:{plain:t}}function qr(t,e,r,n,i){if(!e.contextualize)return;const s=e.announcements[r];if(s!==void 0){if(Ve(s)){const a=n==="before"?s.start:s.end;t.push(ie(Ce(a,i),e.format));return}n==="before"&&t.push(ie(Ce(s,i),e.format))}}function Ir(t,e){return e.size>0&&t.some(r=>e.has(r))}function zt(t,e){let r,n=!1;const i=[];for(const o of t){const c=e==="ssml"?o.ssml:o.plain;if(c&&(i.push(c),o.language!==void 0)){if(n&&o.language!==r)return;r=o.language,n=!0}}if(i.length===0)return;let s="";for(const o of i)o.length===1&&s.endsWith(o)||(s&&!Ke(o)&&(s+=" "),s+=o);const a=e==="ssml"?{ssml:s}:{plain:s};return r&&(a.language=r),a}function ll(t,e){const r=An(t.text),n=r?qn(r,e.format,e.language):[];if(!e.contextualize)return n;const i=e.announcements.pagebreak;if(i===void 0)return n;const s=ie(Ce(Ve(i)?i.start:i),e.format);if(n.length===0)return[s];const a=zt([s,...n],e.format);return a?(a.plain!==void 0&&(a.plain+="."),a.ssml!==void 0&&(a.ssml+="."),[a]):[s,...n]}function qn(t,e,r){if(e==="plain"&&r!=="block-level"&&r!=="none"&&t.ssml&&Rn(t.ssml))return Nn(t.ssml,t.language).map(i=>{const s={plain:i.plain};return i.language&&(s.language=i.language),s});const n={};return t.language&&(n.language=t.language),e==="ssml"?n.ssml=t.ssml??Me(t.plain??""):n.plain=t.plain??Ut(t.ssml??""),(r==="block-level"||r==="none")&&(n.ssml&&(n.ssml=Cn(n.ssml)),r==="none"&&delete n.language),[n]}function cl(t,e,r,n){const i=typeof t.text=="object"?t.text.language:void 0,s=new Map((t.children??[]).map(c=>[c.id,c])),a=[];for(const c of al(e)){if(c.placeholderId!==void 0){const h=s.get(c.placeholderId);h&&In(h,a,n);continue}if(!c.ssml)continue;if(n.format==="plain"&&n.language!=="block-level"&&n.language!=="none"&&Rn(c.ssml)){for(const h of Nn(c.ssml,i)){const d={plain:h.plain};h.language&&(d.language=h.language),a.push(d)}continue}const l={};i&&(l.language=i),n.format==="ssml"?l.ssml=c.ssml:l.plain=Ut(c.ssml),(n.language==="block-level"||n.language==="none")&&(l.ssml&&(l.ssml=Cn(l.ssml)),n.language==="none"&&delete l.language),a.push(l)}const o=a.length>1?zt(a,n.format):void 0;r.push(...o?[o]:a)}function In(t,e,r){const n=t.role??[];if(Ir(n,r.skip))return;const i=n.includes("footnote"),s=n.filter(a=>!(i&&(a==="footnote"||a==="aside"))&&a!=="pagebreak");for(const a of s)qr(e,r,a,"before");if(n.includes("noteref"))for(const a of t.children??[]){const o=a.role??[];if(!Ir(o,r.skip))if(o.includes("footnote")){const c=[];ke([a],c,r);const l=r.contextualize?r.announcements.footnote:void 0,h=[];if(l!==void 0){const g=Ve(l)?l.start:l;h.push(ie(Ce(g),r.format))}h.push(...c),l!==void 0&&Ve(l)&&h.push(ie(Ce(l.end),r.format));const d=l!==void 0&&h.length>1?zt(h,r.format):void 0;e.push(...d?[d]:h)}else ke([a],e,r)}else{const a=typeof t.text=="object"?t.text.ssml:void 0;if(r.interruptSentence&&a&&ol(a))cl(t,a,e,r);else if(n.includes("pagebreak"))e.push(...ll(t,r)),t.children&&ke(t.children,e,r);else{const o=An(t.text);o&&e.push(...qn(o,r.format,r.language)),t.children&&ke(t.children,e,r)}}t.description!==void 0&&e.push(ie(t.description,r.format));for(const a of s)qr(e,r,a,"after")}function ke(t,e,r){for(const n of t)In(n,e,r)}function ul(t,e){const r={announcements:{...En,...e.announcements},skip:new Set(e.skip??[]),format:e.format??"plain",contextualize:e.contextualize??!0,interruptSentence:e.interruptSentence??!1,language:e.language},n=[];return ke(t,n,r),n}const hl=["aside","bibliography","details","endnotes","footnote","noteref","pullquote","landmarks","loa","loi","lot","lov","pagebreak","toc"];exports.BUILTIN_DECORATION_TYPES=gn;exports.DecorationController=wn;exports.DecorationLayout=un;exports.DecorationStyleType=C;exports.DecorationWidth=cn;exports.Decorator=dn;exports.DirectCommsChannel=yn;exports.DirectCommsFrame=bn;exports.DirectCommsHost=vn;exports.Locator=xe;exports.LocatorLocations=_;exports.LocatorText=Ae;exports.ReadiumSpeechDecorationController=kn;exports.WebSpeechEngine=_e;exports.WebSpeechEngineProvider=Ho;exports.WebSpeechReadAloudNavigator=_o;exports.WebSpeechVoiceManager=O;exports.chineseVariantMap=se;exports.createLocator=Sn;exports.decorationsEqual=pn;exports.defaultAnnouncements=En;exports.extractUtterances=ul;exports.makeGnd=Xa;exports.parseMarkup=xn;exports.resolveDecorationForWire=At;exports.setupDecorations=Ca;exports.skippableRoles=hl;exports.supportsDecorationStyle=fn;
|
|
50
|
+
`)}layout(e){if(this.experimentalHighlights&&!this.notTextFlag?.has(e.id))return this.experimentalLayout(e);const r=this.wnd.document.createElement("div");r.setAttribute("id",e.id),r.dataset.highlightId=e.decoration.id,r.style.setProperty("pointer-events","none");const n=be(this.wnd),i=1/this.effectiveZoom(),s=e.decoration.style.expand??0,o=(h,g,f,y=0)=>{const p=e.decoration?.style?.width,m=g;switch(p){case"viewport":{const w=Math.floor(n.inlineStart(m)/n.viewportInlineSize)*n.viewportInlineSize;n.applyPosition(h,w+n.inlineScrollOffset+y,n.blockStart(m)+n.blockScrollOffset,n.viewportInlineSize-2*y,n.blockSize(m),i);break}case"page":{const w=Math.floor(n.inlineStart(m)/n.pageInlineSize)*n.pageInlineSize;n.applyPosition(h,w+n.inlineScrollOffset+y,n.blockStart(m)+n.blockScrollOffset,n.pageInlineSize-2*y,n.blockSize(m),i);break}case"bounds":{n.applyPosition(h,n.inlineStart(f)+n.inlineScrollOffset,n.blockStart(m)+n.blockScrollOffset,n.inlineSize(f),n.blockSize(m),i);break}default:n.applyPosition(h,n.inlineStart(m)+n.inlineScrollOffset,n.blockStart(m)+n.blockScrollOffset,n.inlineSize(m),n.blockSize(m),i)}},a=e.range.getBoundingClientRect(),c=e.decoration.style,l=(()=>{if(c.type!==O.Outline)return 0;const h=c.width;return h==="page"||h==="viewport"?3:0})();let d;if(c.type===O.Template){c.stylesheet&&this.injectCustomStylesheet(c.stylesheet);const h=Jo(this.wnd,c.element);if(!h){e.container=r,e.clickableElements=[];return}h.style.setProperty("pointer-events","none"),d=h}else{const h=c,g=h.type??O.Highlight,f=h.tint??dt(g);if(g===O.TextColor){e.container=r,e.clickableElements=[];return}if(g===O.Mask){e.container=r,e.clickableElements=[],this.updateSharedMask();return}const y=this.getCurrentDarkMode(),p=this.getBackgroundColor(),m=h.enforceContrast!==!1,w=(()=>{switch(g){case O.Underline:{const E=m?Y(f,p):f,N=h.layout==="bounds",[I,P]=n.isVertical?["border-right","border-left"]:["border-bottom","border-top"];return[N?`${P}: 0.1em solid ${E} !important`:null,`${I}: 0.1em solid ${E} !important`,"background-color: transparent !important","box-sizing: border-box !important"].filter(Boolean).join("; ")}case O.Strikethrough:{const E=m?Y(f,p):f;return h.layout==="bounds"?[`background: repeating-linear-gradient(-45deg, transparent, transparent 19px, ${E} 19px, ${E} 20px) !important`,"background-color: transparent !important","box-sizing: border-box !important"].join("; "):[`background-color: ${E} !important`,"box-sizing: border-box !important"].join("; ")}case O.Outline:return[`outline: 2px solid ${m?Y(f,p):f} !important`,"outline-offset: 1px !important","background-color: transparent !important","box-sizing: border-box !important"].join("; ");case O.HighlightUnderline:{const E=m?Y(f,p):f,{r:N,g:I,b:P}=J(E),B=`rgba(${N}, ${I}, ${P}, 0.3)`,de=h.layout==="bounds",[ge,b]=n.isVertical?["border-right","border-left"]:["border-bottom","border-top"];return[`background-color: ${B} !important`,de?`${b}: 0.1em solid ${E} !important`:null,`${ge}: 0.1em solid ${E} !important`,"box-sizing: border-box !important"].filter(Boolean).join("; ")}case O.Highlight:default:return[`background-color: ${m?Y(f,p):f} !important`,`mix-blend-mode: ${y?"exclusion":"multiply"} !important`,"opacity: 1 !important","box-sizing: border-box !important"].join("; ")}})(),C=this.wnd.document.createElement("template");C.innerHTML=`<div data-readium="true" class="readium-${g}" style="${w}"></div>`.trim(),d=C.content.firstElementChild}if(e.decoration?.style?.layout==="bounds"){const h=d.cloneNode(!0);h.style.setProperty("pointer-events","none");const g=s?{left:a.left-s,right:a.right+s,top:a.top-s,bottom:a.bottom+s,width:a.width+s*2,height:a.height+s*2}:a;o(h,g,a,l),r.append(h)}else{const h=c.type,g=h===O.Underline||h===O.Strikethrough,f=h===O.Strikethrough,y=g?qo(e.range,["rt","rp"]):e.range;let p=Ue(y,!0,n.isVertical,g?0:s);p=p.sort((m,w)=>n.isVertical?(n.isVertLR?1:-1)*(m.left-w.left):m.top-w.top);for(let m of p){const w=d.cloneNode(!0);w.style.setProperty("pointer-events","none");let C=m;if(f){const E=n.blockSize(m)*.1,N=n.blockStart(m)+n.blockSize(m)/2-E/2;C=n.isVertical?{left:N,right:N+E,top:m.top,bottom:m.bottom,width:E,height:m.height}:{top:N,bottom:N+E,left:m.left,right:m.right,height:E,width:m.width}}s&&g&&(C=n.isVertical?{...C,top:C.top-s,bottom:C.bottom+s,height:C.height+s*2}:{...C,left:C.left-s,right:C.right+s,width:C.width+s*2}),o(w,C,a,l),r.append(w)}}e.container=r,e.clickableElements=Array.from(r.querySelectorAll("[data-activable='1']")),e.clickableElements.length||(e.clickableElements=Array.from(r.children))}renderLayout(e){this.wnd.cancelAnimationFrame(this.currentRender),this.currentRender=this.wnd.requestAnimationFrame(()=>{e=e.filter(r=>!this.experimentalHighlights||!!this.notTextFlag?.has(r.id)),!(!e||e.length===0)&&this.requireContainer().append(...e.map(r=>r.container).filter(r=>!!r))})}requireContainer(e=!1){if(e){let r;return this.wnd.document.getElementById(`${this.id}-style`)?r=this.wnd.document.getElementById(`${this.id}-style`):(r=this.wnd.document.createElement("style"),r.dataset.readium="true",r.id=`${this.id}-style`,this.wnd.document.head.appendChild(r)),r}return this.container||(this.shadowRoot||(this.shadowHost=this.wnd.document.createElement("div"),this.shadowHost.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none",this.wnd.document.body.appendChild(this.shadowHost),this.shadowRoot=this.shadowHost.attachShadow({mode:"open"})),this.container=this.wnd.document.createElement("div"),this.container.setAttribute("id",this.id),this.container.dataset.group=this.name,this.container.dataset.readium="true",this.container.style.setProperty("pointer-events","none"),this.container.style.display="contents",this.shadowRoot.appendChild(this.container)),this.container}getCurrentDarkMode(){return kr(this.wnd,"--USER__appearance")==="readium-night-on"||wn(this.getBackgroundColor())}getBackgroundColor(){return kr(this.wnd,"--USER__backgroundColor")||this.wnd.getComputedStyle(this.wnd.document.documentElement).getPropertyValue("background-color")}updateSharedMask(){const e=this.items.filter(g=>g.decoration.style?.type===O.Mask);if(e.length===0){this.maskSvg&&(this.maskSvg.remove(),this.maskSvg=void 0),this.shadowRoot&&(this.shadowRoot.innerHTML="");return}const r=be(this.wnd),n=1/this.effectiveZoom(),i=this.wnd.document.documentElement,s=i.scrollWidth,o=i.scrollHeight,a=[];for(const g of e){const f=g.decoration.style,y=f.layout??"boxes",p=f.width??"wrap",m=f.expand??0,w=g.range.getBoundingClientRect(),C=y==="bounds"?[m?{left:w.left-m,top:w.top-m,right:w.right+m,bottom:w.bottom+m,width:w.width+m*2,height:w.height+m*2}:w]:Ue(g.range,!1,!1,m);for(const E of C){let N;switch(p){case"viewport":{const I=Math.floor(r.inlineStart(E)/r.viewportInlineSize)*r.viewportInlineSize;N=r.toRect(I,r.blockStart(E),r.viewportInlineSize,r.blockSize(E));break}case"page":{const I=Math.floor(r.inlineStart(E)/r.pageInlineSize)*r.pageInlineSize;N=r.toRect(I,r.blockStart(E),r.pageInlineSize,r.blockSize(E));break}case"bounds":{N=r.toRect(r.inlineStart(w),r.blockStart(E),r.inlineSize(w),r.blockSize(E));break}default:N=r.toRect(r.inlineStart(E),r.blockStart(E),r.inlineSize(E),r.blockSize(E))}a.push(N)}}const c=[`M0 0 H${s} V${o} H0 Z`,...a.map(g=>{const f=(g.left+r.xDocOffset)*n,y=(g.top+r.yDocOffset)*n,p=(g.right+r.xDocOffset)*n,m=(g.bottom+r.yDocOffset)*n;return`M${f} ${y} H${p} V${m} H${f} Z`})].join(" "),l="http://www.w3.org/2000/svg";if(!this.maskSvg){this.shadowRoot||(this.shadowHost=this.wnd.document.createElement("div"),this.shadowHost.style.cssText="position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none",this.wnd.document.body.appendChild(this.shadowHost),this.shadowRoot=this.shadowHost.attachShadow({mode:"open"})),this.maskSvg=this.wnd.document.createElementNS(l,"svg"),this.maskSvg.style.cssText=`position:absolute;top:0;left:0;width:${s}px;height:${o}px;pointer-events:none;z-index:9999`,this.maskSvg.dataset.readium="true";const g=this.wnd.document.createElementNS(l,"defs"),f=this.wnd.document.createElementNS(l,"clipPath"),y=`${this.id}-mask-clip`;f.setAttribute("id",y),f.setAttribute("clipPathUnits","userSpaceOnUse");const p=this.wnd.document.createElementNS(l,"path");p.setAttribute("clip-rule","evenodd"),f.appendChild(p),g.appendChild(f),this.maskSvg.appendChild(g);const m=this.wnd.document.createElementNS(l,"rect");m.setAttribute("id",`${this.id}-mask-rect`),m.setAttribute("clip-path",`url(#${y})`),m.style.pointerEvents="none",this.maskSvg.appendChild(m),this.shadowRoot.appendChild(this.maskSvg)}this.maskSvg.style.width=`${s}px`,this.maskSvg.style.height=`${o}px`;const d=this.maskSvg.querySelector("path");d&&d.setAttribute("d",c);const h=this.maskSvg.querySelector("rect");if(h){const g=e[0].decoration.style.tint,f=g??this.getBackgroundColor()??dt(O.Mask),y=g?"1":"0.5";h.setAttribute("x","0"),h.setAttribute("y","0"),h.setAttribute("width",String(s)),h.setAttribute("height",String(o)),h.setAttribute("fill",f),h.setAttribute("fill-opacity",y)}}injectCustomStylesheet(e){const r=`${this.id}-custom-style`;let n=this.wnd.document.getElementById(r);n||(n=this.wnd.document.createElement("style"),n.id=r,n.dataset.readium="true",this.wnd.document.head.appendChild(n)),n.innerHTML=e}clearContainer(){if(this.experimentalHighlights){const e=this.wnd.CSS.highlights;for(const r of this._tintSubKeys.values())e.delete(r);this._tintSubKeys.clear(),this._subKeyCounter=0}this.wnd.document.getElementById(`${this.id}-custom-style`)?.remove(),this.container&&(this.container.remove(),this.container=void 0)}}const On=class ke extends vo{constructor(){super(...arguments),this.resizeFrame=0,this.lastGroupId=0,this.groups=new Map,this.handleResizer=this.handleResize.bind(this)}cleanup(){this.groups.forEach(e=>e.destroy()),this.groups.clear()}updateHighlightStyles(){this.groups.forEach(e=>{e.requestLayout()})}handleResize(){this.wnd.clearTimeout(this.resizeFrame),this.resizeFrame=this.wnd.setTimeout(()=>{this.groups.forEach(e=>{e.experimentalHighlights||e.requestLayout()})},50)}mount(e,r){return this.wnd=e,r.register("decorate",ke.moduleName,(n,i)=>{const s=n;(s.action==="add"||s.action==="update")&&s.decoration.locator&&(s.decoration.locator=Co.deserialize(s.decoration.locator)),this.groups.has(s.group)||this.groups.set(s.group,new Zo(e,r,`readium-decoration-${this.lastGroupId++}`,s.group));const o=this.groups.get(s.group);switch(s.action){case"add":o?.add(s.decoration);break;case"remove":o?.remove(s.decoration.id);break;case"clear":o?.clear();break;case"update":o?.update(s.decoration);break}i(!0)}),r.register("decoration_activatable",ke.moduleName,(n,i)=>{const s=n,o=this.groups.get(s.group);o&&(o.activatable=s.activatable),i(!0)}),r.register("decoration_hoverable",ke.moduleName,(n,i)=>{const s=n,o=this.groups.get(s.group);o&&(o.hoverable=s.hoverable),i(!0)}),this.resizeObserver=new ResizeObserver(()=>e.requestAnimationFrame(()=>this.handleResize())),this.resizeObserver.observe(e.document.documentElement),e.addEventListener("orientationchange",this.handleResizer),e.addEventListener("resize",this.handleResizer),this.styleObserver=new MutationObserver(n=>{n.some(i=>i.type==="attributes"&&i.attributeName==="style"&&i.oldValue!==i.target.getAttribute("style"))&&this.updateHighlightStyles()}),this.styleObserver.observe(e.document.documentElement,{attributes:!0,attributeFilter:["style"],attributeOldValue:!0}),r.log("Decorator Mounted"),!0}unmount(e,r){return e.removeEventListener("orientationchange",this.handleResizer),e.removeEventListener("resize",this.handleResizer),r.unregisterAll(ke.moduleName),this.resizeObserver.disconnect(),this.styleObserver.disconnect(),this.cleanup(),r.log("Decorator Unmounted"),!0}};On.moduleName="decorator";let An=On;const Tn=new Set(Object.values(O));function Rn(t,e){return t===O.TextColor?typeof window<"u"&&"Highlight"in window:Tn.has(t)?!0:!!e?.[t]}function It(t,e){const{style:r}=t;if(r.type===O.Template){const n=r;return{...t,style:{...n,element:Ir(n,t)}}}if(r.type&&e?.[r.type]){const n=e[r.type];return{...t,style:{type:O.Template,layout:n.layout,width:n.width,stylesheet:n.stylesheet,element:Ir(n,t)}}}return t}function Ir(t,e){return typeof t.element=="function"?t.element(e):t.element}function Yo(t,e){if(t.type!==e.type)return!1;if(t.type===O.Template){const i=t,s=e;return i.layout===s.layout&&i.width===s.width&&i.stylesheet===s.stylesheet}const r=t,n=e;return r.tint===n.tint&&r.layout===n.layout&&r.width===n.width&&(r.enforceContrast??!0)===(n.enforceContrast??!0)&&(r.expand??0)===(n.expand??0)}function Nn(t,e){return t.locator.href===e.locator.href&&JSON.stringify(t.locator.locations?.serialize?.()??t.locator.locations)===JSON.stringify(e.locator.locations?.serialize?.()??e.locator.locations)&&JSON.stringify(t.locator.text??null)===JSON.stringify(e.locator.text??null)&&Yo(t.style,e.style)&&JSON.stringify(t.extras??null)===JSON.stringify(e.extras??null)}let Ln=class{constructor(){this.queue=[],this.channel=typeof MessageChannel<"u"?new MessageChannel:void 0,this.channel&&(this.channel.port1.onmessage=()=>this.flush())}push(e){const r=this.queue.length===0;this.queue.push(e),r&&(this.channel?this.channel.port2.postMessage(null):setTimeout(()=>this.flush(),0))}flush(){const e=this.queue;this.queue=[],e.forEach(r=>r())}clear(){this.queue=[]}};class In{constructor(){this.frame=new Pn(this),this.host=new qn(this)}}let Pn=class{constructor(e){this.channel=e,this.registrar=new Map,this.outbox=new Ln,this.ready=!0}register(e,r,n){(Array.isArray(e)?e:[e]).forEach(i=>{const s=this.registrar.get(i)??[];if(s.find(o=>o.module===r))throw new Error(`Duplicate callback for "${i}" in module "${r}"`);s.push({module:r,cb:n}),this.registrar.set(i,s)})}unregister(e,r){(Array.isArray(e)?e:[e]).forEach(n=>{const i=this.registrar.get(n);i&&this.registrar.set(n,i.filter(s=>s.module!==r))})}unregisterAll(e){this.registrar.forEach((r,n)=>{this.registrar.set(n,r.filter(i=>i.module!==e))})}_dispatch(e,r,n){const i=this.registrar.get(e);if(!i?.length){n(!1);return}i.forEach(s=>s.cb(r,n))}send(e,r){this.outbox.push(()=>this.channel.host._receive(e,r))}log(...e){this.outbox.push(()=>this.channel.host._receive("log",e))}destroy(){this.registrar.clear(),this.outbox.clear()}};class qn{constructor(e){this.channel=e,this.listeners=new Map,this.outbox=new Ln,this.ready=!0}send(e,r,n){this.outbox.push(()=>this.channel.frame._dispatch(e,r,n??(()=>{})))}on(e,r){const n=this.listeners.get(e)??[];n.push(r),this.listeners.set(e,n)}off(e,r){const n=this.listeners.get(e);n&&this.listeners.set(e,n.filter(i=>i!==r))}_receive(e,r){this.listeners.get(e)?.forEach(n=>n(r))}}class $n{constructor(e,r={}){this.host=e,this._decorations=new Map,this._activationState=new Map,this._hoverState=new Map,this._observers=new Map,this._hoveredDecorations=new Map,this._config=r,e.on("decoration_activated",n=>{const i=n,s=this._decorations.get(i.group)?.find(o=>o.id===i.decorationId);s&&this._observers.get(i.group)?.forEach(o=>o.onDecorationActivated?.({group:i.group,decoration:s,rect:i.rect,point:i.point}))}),e.on("decoration_pointer_enter",n=>{const i=n,s=this._decorations.get(i.group)?.find(o=>o.id===i.decorationId);s&&(this._hoveredDecorations.set(i.group,s),this._observers.get(i.group)?.forEach(o=>o.onDecorationPointerEnter?.({group:i.group,decoration:s,rect:i.rect,point:i.point})))}),e.on("decoration_pointer_leave",n=>{const i=n,s=this._decorations.get(i.group)?.find(o=>o.id===i.decorationId)??this._hoveredDecorations.get(i.group);this._hoveredDecorations.delete(i.group),s&&this._observers.get(i.group)?.forEach(o=>o.onDecorationPointerLeave?.({group:i.group,decoration:s,rect:i.rect,point:i.point}))})}supportsDecorationStyle(e){return Rn(e,this._config.decorationTemplates)}applyDecorations(e,r){const n=this._decorations.get(r)??[],i=new Map(n.map(c=>[c.id,c])),s=new Map(e.map(c=>[c.id,c]));for(const[c,l]of i){const d=s.get(c);d?Nn(l,d)||this.host.send("decorate",{group:r,action:"update",decoration:It(d,this._config.decorationTemplates)}):this.host.send("decorate",{group:r,action:"remove",decoration:{id:c}})}for(const[c,l]of s)i.has(c)||this.host.send("decorate",{group:r,action:"add",decoration:It(l,this._config.decorationTemplates)});this._decorations.set(r,e);const o=this._activationState.get(r);o!==void 0&&this.host.send("decoration_activatable",{group:r,activatable:o});const a=this._hoverState.get(r);a!==void 0&&this.host.send("decoration_hoverable",{group:r,hoverable:a})}registerDecorationObserver(e,r){this._observers.has(e)||this._observers.set(e,new Set),this._observers.get(e).add(r),r.onDecorationActivated&&(this._activationState.set(e,!0),this.host.send("decoration_activatable",{group:e,activatable:!0})),(r.onDecorationPointerEnter||r.onDecorationPointerLeave)&&(this._hoverState.set(e,!0),this.host.send("decoration_hoverable",{group:e,hoverable:!0}))}unregisterDecorationObserver(e){this._observers.forEach((r,n)=>{if(!r.has(e))return;r.delete(e);const i=[...r].some(o=>o.onDecorationActivated);this._activationState.has(n)&&!i&&(this._activationState.delete(n),this.host.send("decoration_activatable",{group:n,activatable:!1}));const s=[...r].some(o=>o.onDecorationPointerEnter||o.onDecorationPointerLeave);this._hoverState.has(n)&&!s&&(this._hoverState.delete(n),this.host.send("decoration_hoverable",{group:n,hoverable:!1}))})}destroy(){this._decorations.clear(),this._activationState.clear(),this._hoverState.clear(),this._observers.clear(),this._hoveredDecorations.clear()}}function el(t){return t&&Array.isArray(t)?t:void 0}function tl(t){return t&&typeof t=="string"?[t]:el(t)}function gt(t){return isNaN(t)?void 0:t}class F{constructor(e){this.fragments=e.fragments?e.fragments:new Array,this.progression=e.progression,this.totalProgression=e.totalProgression,this.position=e.position,this.otherLocations=e.otherLocations}static deserialize(e){if(!e)return;const r=gt(e.progression),n=gt(e.totalProgression),i=gt(e.position),s=new Map,o=new Set(["fragment","fragments","progression","totalProgression","position","otherLocations"]);return Object.entries(e).forEach(([a,c])=>{o.has(a)||s.set(a,c)}),e.otherLocations instanceof Map&&e.otherLocations.forEach((a,c)=>s.set(c,a)),new F({fragments:tl(e.fragments||e.fragment),progression:r!==void 0&&r>=0&&r<=1?r:void 0,totalProgression:n!==void 0&&n>=0&&n<=1?n:void 0,position:i!==void 0&&i>0?i:void 0,otherLocations:s.size===0?void 0:s})}serialize(){const e={};return this.fragments&&(e.fragments=this.fragments),this.progression!==void 0&&(e.progression=this.progression),this.totalProgression!==void 0&&(e.totalProgression=this.totalProgression),this.position!==void 0&&(e.position=this.position),this.otherLocations&&this.otherLocations.forEach((r,n)=>e[n]=r),e}}class Ne{constructor(e){this.after=e.after,this.before=e.before,this.highlight=e.highlight}static deserialize(e){if(e)return new Ne({after:e.after,before:e.before,highlight:e.highlight})}serialize(){const e={};return this.after!==void 0&&(e.after=this.after),this.before!==void 0&&(e.before=this.before),this.highlight!==void 0&&(e.highlight=this.highlight),e}}class Ae{constructor(e){const r=e.href.indexOf("#"),n=r>=0?e.href.slice(r+1):void 0;this.href=r>=0?e.href.slice(0,r):e.href,this.type=e.type,this.title=e.title;const i=e.locations?.fragments,s=n&&(!i||i.length===0);this.locations=e.locations?s?new F({...e.locations,fragments:[n]}):e.locations:n?new F({fragments:[n]}):new F({}),this.text=e.text}static deserialize(e){if(e&&e.href&&e.type)return new Ae({href:e.href,type:e.type,title:e.title,locations:F.deserialize(e.locations),text:Ne.deserialize(e.text)})}serialize(){const e={href:this.href,type:this.type};return this.title!==void 0&&(e.title=this.title),this.locations&&(e.locations=this.locations.serialize()),this.text&&(e.text=this.text.serialize()),e}copyWithLocations(e){return new Ae({href:this.href,type:this.type,title:this.title,text:this.text,locations:new F({...this.locations,...e})})}}function Dn(t,e=window){const{highlight:r,before:n,after:i,selector:s,fragment:o}=t,c=r!==void 0||n!==void 0||i!==void 0?new Ne({highlight:r,before:n,after:i}):void 0,l=s?new Map([["cssSelector",s]]):void 0,h=l!==void 0||o!==void 0?new F({fragments:o?[o]:void 0,otherLocations:l}):void 0;return new Ae({href:e.location.href,type:"text/html",text:c,locations:h})}class Bn extends $n{constructor(e,r,n,i={}){super(e.host,i),this.channel=e,this.wnd=r,this.decorator=n}decorate(e,r){this.applyDecorations(e.map(({id:n,style:i,...s})=>({id:n,style:i,locator:Dn(s,this.wnd)})),r)}destroy(){super.destroy(),this.decorator.unmount(this.wnd,this.channel.frame),this.channel.frame.destroy()}}function rl(t=window,e={}){const r=new In,n=new An;return n.mount(t,r.frame),new Bn(r,t,n,e)}class nl{providers=new Map;register(e){if(this.providers.has(e.id))throw new Error(`A provider is already registered under id "${e.id}"`);this.providers.set(e.id,e)}unregister(e){this.providers.delete(e)}get(e){return this.providers.get(e)}list(){return[...this.providers.values()]}async getVoices(e){return this.require(e).getVoices()}async getAllVoices(){return Promise.all(this.list().map(async e=>({providerId:e.id,voices:await e.getVoices()})))}async createEngine(e,r){return this.require(e).createEngine(r)}async destroy(){await Promise.all(this.list().map(e=>e.destroy())),this.providers.clear()}require(e){const r=this.providers.get(e);if(!r)throw new Error(`No provider registered under id "${e}"`);return r}}class il{engine;contentQueue=[];eventListeners=new Map;navigatorState="idle";constructor(e){this.engine=e,this.setupEngineListeners(),this.initializeEngine()}async initializeEngine(){try{await this.engine.initialize?.()}catch(e){console.warn("Failed to initialize speech engine:",e)}}setupEngineListeners(){this.engine.on("start",()=>{this.setNavigatorState("playing"),this.emitEvent({type:"start"})}),this.engine.on("end",()=>{const e=this.engine.getCurrentUtteranceIndex(),r=this.engine.getUtteranceCount();e<r-1?this.engine.speak(e+1):this.setNavigatorState("idle"),this.emitEvent({type:"end"})}),this.engine.on("pause",()=>{this.setNavigatorState("paused"),this.emitEvent({type:"pause"})}),this.engine.on("resume",()=>{this.setNavigatorState("playing"),this.emitEvent({type:"resume"})}),this.engine.on("stop",()=>{this.setNavigatorState("idle"),this.emitEvent({type:"stop"})}),this.engine.on("error",e=>{this.setNavigatorState("idle"),this.emitEvent(e)}),this.engine.on("ready",()=>{this.contentQueue.length>0&&(this.setNavigatorState("ready"),this.emitEvent({type:"ready"}))}),this.engine.on("boundary",e=>{this.emitEvent(e)}),this.engine.on("mark",e=>{this.emitEvent(e)}),this.engine.on("voiceschanged",()=>{this.emitEvent({type:"voiceschanged"})}),this.engine.on("languagefallback",e=>{this.emitEvent(e)})}setNavigatorState(e){this.navigatorState=e}async getVoices(){return this.engine.getAvailableVoices()}setVoice(e){this.engine.setVoice(e)}getCurrentVoice(){return this.engine.getCurrentVoice()}setSpeakInContentLanguage(e){this.engine.setSpeakInContentLanguage(e)}getSpeakInContentLanguage(){return this.engine.getSpeakInContentLanguage()}loadContent(e){const r=Array.isArray(e)?e:[e];this.contentQueue=[...r],this.setNavigatorState("loading"),this.emitEvent({type:"loading"}),this.engine.loadUtterances(r),this.emitContentChangeEvent({content:r})}getCurrentContent(){const e=this.getCurrentUtteranceIndex();return e<this.contentQueue.length?this.contentQueue[e]:null}getContentQueue(){return[...this.contentQueue]}getCurrentUtteranceIndex(){return this.engine.getCurrentUtteranceIndex()}play(){if(this.navigatorState==="paused")this.setNavigatorState("playing"),this.engine.resume();else if(this.navigatorState==="ready"||this.navigatorState==="idle")this.setNavigatorState("playing"),this.engine.speak();else if(this.navigatorState==="playing")return}pause(){this.navigatorState==="playing"&&(this.setNavigatorState("paused"),this.engine.pause())}stop(){this.setNavigatorState("idle"),this.engine.stop(),this.emitEvent({type:"stop"})}skipToPosition(e,r=!1){const n=this.getCurrentUtteranceIndex();return e<0||e>=this.contentQueue.length?!1:(e===n||(this.navigatorState==="paused"&&!r?this.engine.setCurrentUtteranceIndex(e,i=>{i&&this.emitEvent({type:"skip",detail:{position:e}})}):(this.setNavigatorState("playing"),this.engine.speak(e))),!0)}next(e=!1){const r=this.getCurrentUtteranceIndex();return this.skipToPosition(r+1,e)}previous(e=!1){const r=this.getCurrentUtteranceIndex();return this.skipToPosition(r-1,e)}jumpTo(e,r=!1){return this.skipToPosition(e,r)}setRate(e){this.engine.setRate(e)}getRate(){return this.engine.getRate()}setPitch(e){this.engine.setPitch(e)}getPitch(){return this.engine.getPitch()}setVolume(e){this.engine.setVolume(e)}getVolume(){return this.engine.getVolume()}getState(){return this.navigatorState}on(e,r){return this.eventListeners.has(e)||this.eventListeners.set(e,[]),this.eventListeners.get(e).push(r),()=>{const n=this.eventListeners.get(e);if(n){const i=n.indexOf(r);i>-1&&n.splice(i,1)}}}emitEvent(e){const r=this.eventListeners.get(e.type);r&&r.forEach(n=>n(e))}emitContentChangeEvent(e){const r=this.eventListeners.get("contentchange");r&&r.forEach(n=>n({type:"contentchange",detail:e}))}async destroy(){this.eventListeners.clear(),await this.engine.destroy()}}const sl=["heading1","heading2","heading3","heading4","heading5","heading6"],Pr={"doc-abstract":"abstract","doc-acknowledgments":"acknowledgments","doc-afterword":"afterword","doc-appendix":"appendix",article:"article","doc-backlink":"backlink","doc-biblioentry":"listItem","doc-bibliography":"bibliography","doc-biblioref":"biblioref",blockquote:"blockquote",caption:"caption",cell:"cell","doc-chapter":"chapter","doc-colophon":"colophon",columnheader:"columnheader",complementary:"complementary","doc-conclusion":"conclusion","doc-cover":"cover","doc-credit":"credit","doc-credits":"credits","doc-dedication":"dedication",definition:"definition","doc-endnote":"footnote","doc-endnotes":"endnotes","doc-epigraph":"epigraph","doc-epilogue":"epilogue","doc-errata":"errata","doc-example":"example",figure:"figure","doc-footnote":"footnote","doc-foreword":"foreword","doc-glossary":"glossary","doc-glossref":"glossref",img:"image",image:"image","doc-index":"index","doc-introduction":"introduction",list:"list",listitem:"listItem",main:"main",math:"math",navigation:"navigation","doc-noteref":"noteref","doc-notice":"notice","doc-pagebreak":"pagebreak","doc-pagelist":"pagelist",paragraph:"paragraph","doc-part":"part","doc-preface":"preface","doc-prologue":"prologue","doc-pullquote":"pullquote",presentation:"presentation",none:"presentation","doc-qna":"qna",qna:"qna",region:"region",row:"row",rowheader:"rowheader",separator:"separator","doc-subtitle":"subtitle",table:"table",term:"term","doc-tip":"tip","doc-toc":"toc"},al={abstract:"abstract",acknowledgments:"acknowledgments",afterword:"afterword",appendix:"appendix",aside:"aside",backlink:"backlink",biblioentry:"listItem",bibliography:"bibliography",biblioref:"biblioref","table-cell":"cell",chapter:"chapter",colophon:"colophon",conclusion:"conclusion",cover:"cover",credit:"credit",credits:"credits",dedication:"dedication",glossdef:"definition",endnote:"footnote",endnotes:"endnotes",rearnote:"footnote",rearnotes:"endnotes",epigraph:"epigraph",epilogue:"epilogue",errata:"errata",example:"example",figure:"figure",footnote:"footnote",foreword:"foreword",glossary:"glossary",glossref:"glossref",index:"index",introduction:"introduction",landmarks:"landmarks",list:"list","list-item":"listItem",loa:"loa",loi:"loi",lot:"lot",lov:"lov",noteref:"noteref",notice:"notice",pagebreak:"pagebreak","page-list":"pagelist",pagelist:"pagelist",part:"part",preface:"preface",prologue:"prologue",pullquote:"pullquote",qna:"qna","table-row":"row",subtitle:"subtitle",table:"table",glossterm:"term",tip:"tip",toc:"toc"},ol={article:"article",aside:"aside",audio:"audio",blockquote:"blockquote",caption:"caption",figcaption:"caption",td:"cell",dd:"definition",details:"details",figure:"figure",header:"header",h1:"heading1",h2:"heading2",h3:"heading3",h4:"heading4",h5:"heading5",h6:"heading6",img:"image",ul:"list",ol:"list",li:"listItem",main:"main",math:"math",nav:"navigation",p:"paragraph",pre:"preformatted",tr:"row",section:"section",hr:"separator",summary:"summary",table:"table",dfn:"term",dt:"term",video:"video",svg:"image"};function ft(t){const e=[],r=c=>{e.includes(c)||e.push(c)},n=[];let i=!1;const s=t.getAttribute("role");if(s)for(const c of s.split(/\s+/).filter(Boolean))if((c==="presentation"||c==="none")&&(i=!0),c==="heading"){let l=2;const d=parseInt(t.getAttribute("aria-level")??"",10);Number.isFinite(d)&&d>=1&&(l=Math.min(d,6)),n.push(sl[l-1])}else Pr[c]&&n.push(Pr[c]);const o=t.getAttribute("epub:type");if(o)for(const c of o.split(/\s+/).filter(Boolean)){const l=al[c];l&&n.push(l)}if(i)return["presentation"];const a=t.tagName.toLowerCase();if(a==="body")r("body");else if(a==="th")switch(t.getAttribute("scope")){case"col":r("columnheader");break;case"row":r("rowheader");break;default:r("cell")}else{const c=ol[a];c&&r(c)}for(const c of n)r(c);return e}function Le(t){return t.plain===""&&t.ssml===""&&t.language===""}function ll(t){if(!t||Le(t))return;if(t.ssml===""&&t.language==="")return t.plain;const e={language:t.language};return t.plain!==""&&(e.plain=t.plain),t.ssml!==""&&(e.ssml=t.ssml),e}function cl(t,e){if(t.lang!==e.lang||t.tag!==e.tag)return!1;const r=Object.entries(t.attrs??{}),n=Object.entries(e.attrs??{});return r.length!==n.length?!1:r.every(([i,s])=>e.attrs?.[i]===s)}const We=t=>t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),pt=t=>t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,"""),ul=/[\u00A0\u2007\u202F]/;function hl(t){return ul.test(t)}function Te(t,e){let r="",n=!1,i=!1;for(const s of t)if(hl(s))r+=s,n=!1,i=!0;else if(/\s/.test(s)){if(e&&!i||n)continue;r+=" ",n=!0}else s!==""&&s!==""&&(r+=s,n=!1,i=!0);return r}function qr(t){return!!(t.getAttribute("aria-hidden")==="true"||t.hasAttribute("hidden"))}function Pt(t){let e="";const r=n=>{n.nodeType===3&&(e+=n.nodeValue??"");for(let i=n.firstChild;i;i=i.nextSibling)r(i)};return r(t),e}function He(t){return Te(Pt(t),!0).trim()}function dl(t){if(qr(t))return[null,!1];const e=(t.getAttribute("aria-labelledby")??"").trim();if(e){const s=[...new Set(e.split(/\s+/).filter(Boolean))],o=t.ownerDocument,a=s.map(c=>o.getElementById(c)).filter(c=>c!==null);if(a.length>0){let c="";a.forEach((d,h)=>{if(qr(d))return;const g=d.getAttribute("aria-label");c+=g||Pt(d),h<a.length-1&&(c+=" ")});const l=Te(c,!0).trim();if(l!=="")return[{language:"",plain:l},!0]}}const r=(t.getAttribute("aria-label")??"").trim();if(r)return[{language:"",plain:r},!0];const n=(t.getAttribute("aria-describedby")??"").trim();if(n){const o=[...new Set(n.split(/\s+/).filter(Boolean))].map(a=>t.ownerDocument.getElementById(a)).filter(a=>a!==null);if(o.length>0){const a=o.map(l=>Pt(l)).join(" "),c=Te(a,!0).trim();if(c!=="")return[{language:"",plain:c},!0]}}const i=t.tagName.toLowerCase();if(i==="img"){const s=(t.getAttribute("alt")??"").trim();if(s)return[{language:"",plain:s},!0];const o=(t.getAttribute("title")??"").trim();if(o)return[{language:"",plain:o},!0]}else if(i==="svg"){const s=t.querySelector(":scope > title");if(s){const o=He(s);if(o)return[{language:"",plain:o},!0]}}else if(i==="math"){const s=(t.getAttribute("alttext")??"").trim();if(s)return[{language:"",plain:s},!0]}return[null,!0]}const gl={em:["emphasis"],b:["emphasis"],i:["emphasis",{level:"reduced"}],strong:["emphasis",{level:"strong"}],br:["break"]};function fl(t){return gl[t]??["",void 0]}const pl=new Set(["script","style","template","noscript","textarea","select","datalist","iframe","rt","rp","rtc"]);function qt(t){return!t.audioref&&!t.imgref&&!t.textref&&!t.videoref&&(!t.text||Le(t.text))&&!(t.children&&t.children.length>0)&&!t.description}function ml(t){return!t.audioref&&!t.imgref&&!t.textref&&!t.videoref&&(!t.text||Le(t.text))&&!!(t.children&&t.children.length>0)&&!(t.role&&t.role.length>0)&&!t.id}function yl(t){return!(t.role&&t.role.length>0)&&!t.id}class _e{el;object={};children=[];noText=!1;finalize(){const e=this.object,r=[];for(const n of this.children){const i=n.finalize();if(!qt(i)){if(ml(i)){r.push(...i.children??[]);continue}r.push(i)}}if(r.length>0&&(e.children=r),(!e.text||Le(e.text))&&e.children?.length===1){const n=e.children[0];yl(n)&&(n.text&&(e.text=n.text),n.textref&&(e.textref=n.textref),n.imgref&&(e.imgref=n.imgref),n.audioref&&(e.audioref=n.audioref),n.videoref&&(e.videoref=n.videoref),e.children=n.children)}return e}}function $t(t){const e={};t.id&&(e.id=t.id),t.textref&&(e.textref=t.textref),t.imgref&&(e.imgref=t.imgref),t.audioref&&(e.audioref=t.audioref),t.videoref&&(e.videoref=t.videoref);const r=ll(t.text);return r!==void 0&&(e.text=r),t.role&&t.role.length>0&&(e.role=t.role),t.children&&t.children.length>0&&(e.children=t.children.map($t)),t.description&&(e.description=t.description),e}function Un(t){const e={};return t.id&&(e.id=t.id),t.textref&&(e.textref=t.textref),t.imgref&&(e.imgref=t.imgref),t.audioref&&(e.audioref=t.audioref),t.videoref&&(e.videoref=t.videoref),t.role&&(e.role=t.role),t.description&&(e.description=t.description),typeof t.text=="string"?e.text={plain:t.text,ssml:"",language:""}:t.text&&(e.text={plain:t.text.plain??"",ssml:t.text.ssml??"",language:t.text.language}),t.children&&(e.children=t.children.map(Un)),e}const bl=1;function $r(t){for(let e=t;e;e=e.parentElement){const r=e.getAttribute("xml:lang");if(r)return r;const n=e.getAttribute("lang");if(n)return n}return""}function vl(t){for(let e=t.firstChild;e;e=e.nextSibling)if(e.nodeType===bl)return!0;return!1}function Dr(t,e){for(let r=e;r;r=r.parentElement)if(r===t)return!0;return!1}function wl(t){const e=t.slice(0,500);return/<\?xml\b/.test(e)||/xmlns:epub=/.test(e)||/DOCTYPE\s+html\s+PUBLIC\s+"-\/\/W3C\/\/DTD XHTML/i.test(e)?"application/xhtml+xml":"text/html"}const Sl=3,kl=1,xl=new Set(["object","base","font","tt","i","b","u","big","small","em","strong","dfn","code","samp","kbd","var","cite","abbr","time","acronym","mark","ruby","rt","rp","rtc","a","img","br","wbr","map","q","sub","sup","bdo","iframe","embed","span","input","select","textarea","label","button","optgroup","option","legend","datalist","keygen","output","progress","meter","area","param","source","track","summary","command","basefont","bgsound","menuitem","data","bdi","s","strike","nobr","rb"]),El=new Set(["summary","dfn","span"]);function Br(t,e){return El.has(t)&&e.length>0?!0:!xl.has(t)}class Mt{xmlParsed;ids=new Map;suppressed=new Set;idAlloc={claimed:new Set,counters:new Map};noterefDepth=0;allowNode=null;root=new _e;current=this.root;segments=[];textAcc="";currentCtx={lang:"",tag:""};flowEndsWithSpace=!0;pendingChildren=[];constructor(e){this.xmlParsed=e}allocateId(e){for(;;){const r=(this.idAlloc.counters.get(e)??0)+1;this.idAlloc.counters.set(e,r);const n=`${e}${r}`;if(!(this.ids.has(n)||this.idAlloc.claimed.has(n)))return this.idAlloc.claimed.add(n),n}}claimId(e){return this.idAlloc.claimed.has(e)?!1:(this.idAlloc.claimed.add(e),!0)}prescan(e){const r=[],n=(i,s)=>{const o=i.getAttribute("id");if(o&&!this.ids.has(o)&&this.ids.set(o,i),s=s||i.getAttribute("aria-hidden")==="true"||i.hasAttribute("hidden"),!s&&i.tagName.toLowerCase()==="a"&&ft(i).includes("noteref")){const c=i.getAttribute("href")??"";c.startsWith("#")&&r.push({id:c.slice(1),ref:i})}for(let a=i.firstElementChild;a;a=a.nextElementSibling)n(a,s)};n(e,!1);for(const i of r){const s=this.ids.get(i.id);s&&(Dr(s,i.ref)||this.suppressed.add(s))}}convert(e){this.prescan(e),this.walk(e)}convertChildren(e){this.prescan(e);for(let r=e.firstChild;r;r=r.nextSibling)this.walk(r);this.flushText()}result(){const e=this.root.finalize();return!e.children||e.children.length===0?qt(e)?[]:[$t(e)]:e.children.map($t)}descend(e){const r=new _e;r.el=e,r.noText=this.current.noText,this.current.children.push(r),this.current=r}appendChild(e){e.noText=this.current.noText,this.current.children.push(e)}walk(e){if(e.nodeType===Sl){this.text(e);return}if(e.nodeType!==kl)return;const r=e,n=this.current,i=this.head(r);if(!i)for(let s=r.firstChild;s;s=s.nextSibling)this.walk(s);this.tail(r,i,n)}head(e){const r=e.tagName.toLowerCase();if(pl.has(r)||this.suppressed.has(e)&&e!==this.allowNode)return!0;const[n,i]=dl(e);if(!i&&e!==this.allowNode)return!0;const s=ft(e);if((r==="img"||r==="svg")&&(s.includes("presentation")||n===null&&e.hasAttribute("alt")&&e.getAttribute("alt").trim()===""))return!0;if(r==="br")return this.current.noText||(this.closeSegment(),this.segments.push({kind:"break"}),this.flowEndsWithSpace=!0),!0;if(s.includes("pagebreak"))return!this.pagebreak(e,n,s);if(r==="a"&&s.includes("noteref")&&e.getAttribute("href"))return this.noteref(e,s),!0;if(r==="a"&&e.getAttribute("href"))return this.link(e,s),!0;if(r==="img"){const c={role:s},l=e.getAttribute("src");return l&&(c.imgref=l),n&&(c.description=n.plain),this.placeholder(e,"image",c),!0}if(r==="audio"||r==="video"){const c={role:s};let l=e.getAttribute("src");if(!l){const d=e.querySelector(":scope > source[src]");d&&(l=d.getAttribute("src"))}return r==="audio"?l&&(c.audioref=l):l&&(c.videoref=l),n&&(c.description=n.plain),this.placeholder(e,r,c),!0}if(s.includes("image")||s.includes("math")){const c={role:s};return n&&(c.description=n.plain),this.placeholder(e,s.includes("math")?"math":"image",c),!0}if(!Br(r,s))return!1;this.flushText(),this.descend(e);const o=this.current.object;s.length>0&&(o.role=s),n&&(o.description=n.plain,s.includes("figure")&&(this.current.noText=!0));const a=e.getAttribute("id");return a&&(o.id=a),!1}tail(e,r,n){if(r)return;const i=e.tagName.toLowerCase(),s=ft(e);Br(i,s)&&(this.flushText(),this.current=n)}text(e){if(this.current.noText)return;const r=e.nodeValue??"";if(/^\s*$/.test(r)){(this.textAcc.length>0||this.segments.length>0)&&(this.textAcc+=Te(r,this.flowEndsWithSpace),this.updateFlowSpace());return}const n=this.textContext(e);cl(n,this.currentCtx)||(this.closeSegment(),this.currentCtx=n),this.textAcc+=Te(r,this.flowEndsWithSpace),this.updateFlowSpace()}textContext(e){const r={lang:$r(e.parentElement),tag:""};for(let n=e.parentElement;n&&n!==this.current.el;n=n.parentElement){const[i,s]=fl(n.tagName.toLowerCase());if(i&&i!=="break"){r.tag=i,r.attrs=s;break}}return r}updateFlowSpace(){this.textAcc.length>0&&(this.flowEndsWithSpace=this.textAcc.endsWith(" "))}closeSegment(){this.textAcc.length!==0&&(this.segments.push({kind:"text",text:this.textAcc,ctx:this.currentCtx}),this.textAcc="")}resetFlow(){this.segments=[],this.textAcc="",this.currentCtx={lang:"",tag:""},this.flowEndsWithSpace=!0,this.pendingChildren=[]}placeholder(e,r,n,i){if(qt(n))return;const s=new _e;if(s.el=e,s.object=n,this.current.noText){this.appendChild(s);return}this.closeSegment(),this.pendingChildren.push(s),this.segments.push({kind:"placeholder",tag:r,child:s,candidateID:i??e.getAttribute("id")??void 0}),this.flowEndsWithSpace=!1}pagebreak(e,r,n){const i={role:n},s=(e.getAttribute("title")??"").trim();s?i.text={plain:s,ssml:"",language:""}:r&&(i.text={plain:r.plain??"",ssml:r.ssml??"",language:r.language});const o=!!(i.text&&!Le(i.text)),a=!this.xmlParsed&&(vl(e)||o&&e.firstChild!==null);if(!o&&!a){const l=He(e);l&&(i.text={plain:l,ssml:"",language:""})}const c=e.getAttribute("id");return c&&(i.textref=`#${c}`),this.placeholder(e,"pagebreak",i),a}noteref(e,r){const n={role:r},i=He(e);i&&(n.text={plain:i,ssml:"",language:""});const s=e.getAttribute("href")??"";let o=e.getAttribute("id")??"";if(!o&&s.startsWith("#")&&(o=s.slice(1)),s.startsWith("#")){const a=s.slice(1),c=this.ids.get(a);if(c&&!Dr(c,e)&&this.noterefDepth<3){const l=new Mt(this.xmlParsed);l.ids=this.ids,l.suppressed=this.suppressed,l.idAlloc=this.idAlloc,l.noterefDepth=this.noterefDepth+1,l.allowNode=c,l.convert(c);const d=l.result();d.length>0&&(n.children=d.map(h=>{const g=Un(h);return delete g.id,g}))}}!n.children&&s&&(n.children=[{textref:s}]),this.placeholder(e,"noteref",n,o||void 0)}link(e,r){const n={};r.length>0&&(n.role=r);const i=He(e);i&&(n.text={plain:i,ssml:"",language:""});const s=e.getAttribute("href");s&&(n.textref=s),this.placeholder(e,r[0]??"link",n)}flushText(){this.closeSegment();let e=this.segments;const r=this.pendingChildren;if(this.resetFlow(),e.length===0)return;for(;e.length>0;){const p=e[0];if(p.kind==="break"){e=e.slice(1);continue}if(p.kind==="text"){const m=p.text.replace(/^\s+/,"");if(m===""){e=e.slice(1);continue}e=[{...p,text:m},...e.slice(1)]}break}for(;e.length>0;){const p=e[e.length-1];if(p.kind==="break"){e=e.slice(0,-1);continue}if(p.kind==="text"){const m=p.text.replace(/\s+$/,"");if(m===""){e=e.slice(0,-1);continue}e=[...e.slice(0,-1),{...p,text:m}]}break}if(!e.some(p=>p.kind==="text"&&p.text.trim()!=="")){for(const p of r)this.appendChild(p);return}const i=[];for(const p of e)if(p.kind==="text"&&p.text.trim()!==""){const m=p.ctx.lang;i.includes(m)||i.push(m)}let s=$r(this.current.el??null);i.length===1&&i[0]!==""&&(s=i[0]);let o=!1;for(const p of e)if(p.kind!=="text"||p.ctx.tag!==""||p.ctx.lang!==s){o=!0;break}if(o&&s===""&&(s="en"),o)for(const p of e){if(p.kind!=="placeholder")continue;let m=p.candidateID;(!m||!this.claimId(m))&&(m=this.allocateId(p.tag)),p.child.object.id=m}let a="",c=!1,l=!1,d=!1,h=!1;for(const p of e)if(p.kind==="text"){const m=p.text.startsWith(" "),w=p.text.replace(/^ +| +$/g,"");if(w===""){h=!0;continue}let C=!1;if(a.length>0){const E=c||h||m;l?C=!0:d?C=E&&!Xe(w):C=E}C&&(a+=" "),a+=w,c=p.text.endsWith(" "),l=!1,d=!1,h=!1}else p.kind==="break"?l=!0:p.kind==="placeholder"&&(d=!0);const g=e.some(p=>p.kind==="placeholder"),f={plain:o&&!g?"":a.trim(),ssml:"",language:s};if(o){let p="";for(const m of e)if(m.kind==="text"){let w=m.ctx.tag,C=m.ctx.attrs;if(m.ctx.lang!==s&&m.ctx.lang!==""&&(w="lang",C=void 0),w){p+=`<${w}`;for(const[E,N]of Object.entries(C??{}))p+=` ${E}="${pt(N)}"`;m.ctx.lang!==s&&m.ctx.lang!==""&&(p+=` xml:lang="${pt(m.ctx.lang)}"`),p+=`>${We(m.text)}</${w}>`}else p+=We(m.text)}else m.kind==="break"?p+="<break/>":m.kind==="placeholder"&&(p+=`<readium:${m.tag} id="${pt(m.child.object.id)}" />`);f.ssml=p}const y=new _e;y.object={text:f};for(const p of r)y.children.push(p);this.appendChild(y)}}const Cl=/<body[\s>]/i;function jn(t,e){const r=e??wl(t),n=new DOMParser().parseFromString(t,r),i=new Mt(r==="application/xhtml+xml"),s=n.querySelector("body");return s&&!Cl.test(t)?i.convertChildren(s):i.convert(s??n.documentElement),i.result()}function Ol(t,e){return{guided:jn(t,e)}}const zn={footnote:{start:"Start of the footnote.",end:"End of the footnote."},part:{start:"Start of the part.",end:"End of the part."},chapter:{start:"Start of the chapter.",end:"End of the chapter."},prologue:{start:"Start of the prologue.",end:"End of the prologue."},preface:{start:"Start of the preface.",end:"End of the preface."},introduction:{start:"Start of the introduction.",end:"End of the introduction."},conclusion:{start:"Start of the conclusion.",end:"End of the conclusion."},epilogue:{start:"Start of the epilogue.",end:"End of the epilogue."},afterword:{start:"Start of the afterword.",end:"End of the afterword."},appendix:{start:"Start of the appendix.",end:"End of the appendix."},acknowledgments:{start:"Start of the acknowledgments.",end:"End of the acknowledgments."},endnotes:{start:"Start of the endnotes.",end:"End of the endnotes."},glossary:{start:"Start of the glossary.",end:"End of the glossary."},bibliography:{start:"Start of the bibliography.",end:"End of the bibliography."},index:{start:"Start of the index.",end:"End of the index."},toc:{start:"Start of the table of contents.",end:"End of the table of contents."},pagelist:{start:"Start of the page list.",end:"End of the page list."},landmarks:{start:"Start of the landmarks.",end:"End of the landmarks."},loa:{start:"Start of the list of audio clips.",end:"End of the list of audio clips."},loi:{start:"Start of the list of illustrations.",end:"End of the list of illustrations."},lot:{start:"Start of the list of tables.",end:"End of the list of tables."},lov:{start:"Start of the list of video clips.",end:"End of the list of video clips."},qna:{start:"Start of the questions and answers.",end:"End of the questions and answers."},table:{start:"Start of the table.",end:"End of the table."},figure:{start:"Start of the figure.",end:"End of the figure."},aside:{start:"Start of the aside.",end:"End of the aside."},details:{start:"Start of the details.",end:"End of the details."},credits:{start:"Start of the credits.",end:"End of the credits."},pagebreak:"Pagebreak.",heading1:"Heading level 1.",heading2:"Heading level 2.",heading3:"Heading level 3.",heading4:"Heading level 4.",heading5:"Heading level 5.",heading6:"Heading level 6.",subtitle:"Subtitle.",epigraph:"Epigraph.",abstract:"Abstract.",colophon:"Colophon.",dedication:"Dedication.",cover:"Cover.",errata:"Errata.",notice:"Notice.",example:"Example.",tip:"Tip.",pullquote:"Pull quote.",credit:"Credit.",image:"Image.",audio:"Audio.",video:"Video."},Al=/<lang xml:lang="[^"]*">([\s\S]*?)<\/lang>/g;function _n(t){return t.replace(Al,"$1")}const Tl=/\s*<readium:[a-zA-Z][\w-]*\s+id="[^"]*"\s*\/>\s*/g;function Rl(t){return t.replace(Tl,(r,n,i)=>{const s=i.slice(n+r.length);return s.length===0||Xe(s)?"":" "}).replace(/ {2,}/g," ").trim()}function Nl(t){return t.includes("<")}function Fn(t){if(t===void 0)return;if(typeof t=="string")return{plain:t};const e={language:t.language};if(t.ssml){const r=Rl(t.ssml);Nl(r)&&(e.ssml=r)}return t.plain&&(e.plain=t.plain),e.plain||e.ssml?e:void 0}function Vt(t){return t.replace(/<[^>]+>/g,"").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/ {2,}/g," ").trim()}const Hn=/<lang xml:lang="([^"]*)">([\s\S]*?)<\/lang>/g;function Mn(t){return new RegExp(Hn).test(t)}function Ur(t){return t.replace(/<[^>]+>/g,"").replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/ {2,}/g," ")}const Ll=new RegExp(`\\s+|[${Ct}]+|[${ie}]+|[^\\s${Ct}${ie}]+`,"gu");function mt(t){const e=[];for(const[r]of t.matchAll(Ll))/^\s/.test(r)?e.push({kind:"space"}):io(r)?e.push({kind:"open",text:r}):Xe(r)?e.push({kind:"close",text:r}):e.push({kind:"word",text:r});return e}function Il(t){let e="",r=!1;for(const n of t){if(n.kind==="space"){e&&(r=!0);continue}r&&(e+=" "),e+=n.text,r=!1}return e}function Pl(t){let e=t.length;for(;e>0&&(t[e-1].kind==="space"||t[e-1].kind==="open");)e--;return t.slice(e).some(r=>r.kind==="open")?t.splice(e):[]}function ql(t){let e=0;for(;e<t.length&&(t[e].kind==="space"||t[e].kind==="close");)e++;return t.slice(0,e).some(r=>r.kind==="close")?t.splice(0,e):[]}function Vn(t,e){const r=[];let n=0;for(const s of t.matchAll(Hn))r.push({tokens:mt(Ur(t.slice(n,s.index))),language:e,tagged:!1}),r.push({tokens:mt(Vt(s[2])),language:s[1],tagged:!0}),n=s.index+s[0].length;r.push({tokens:mt(Ur(t.slice(n))),language:e,tagged:!1});for(let s=0;s<r.length-1;s++)!r[s].tagged&&r[s+1].tagged?r[s+1].tokens.unshift(...Pl(r[s].tokens)):r[s].tagged&&!r[s+1].tagged&&r[s].tokens.push(...ql(r[s+1].tokens));const i=[];for(const s of r){const o=Il(s.tokens);o&&i.push({plain:o,language:s.language})}return i}const Gn=/<readium:[a-zA-Z][\w-]*\s+id="([^"]*)"\s*\/>/g;function $l(t){return new RegExp(Gn).test(t)}function Dl(t){const e=[];let r=0;for(const i of t.matchAll(Gn)){const s=t.slice(r,i.index).trim();s&&e.push({ssml:s}),e.push({placeholderId:i[1]}),r=i.index+i[0].length}const n=t.slice(r).trim();return n&&e.push({ssml:n}),e}function Ke(t){return typeof t=="object"}function Re(t,e){return typeof t=="function"?t(e):t}function se(t,e){return e==="ssml"?{ssml:We(t)}:{plain:t}}function jr(t,e,r,n,i){if(!e.contextualize)return;const s=e.announcements[r];if(s!==void 0){if(Ke(s)){const o=n==="before"?s.start:s.end;t.push(se(Re(o,i),e.format));return}n==="before"&&t.push(se(Re(s,i),e.format))}}function zr(t,e){return e.size>0&&t.some(r=>e.has(r))}function Gt(t,e){let r,n=!1;const i=[];for(const a of t){const c=e==="ssml"?a.ssml:a.plain;if(c&&(i.push(c),a.language!==void 0)){if(n&&a.language!==r)return;r=a.language,n=!0}}if(i.length===0)return;let s="";for(const a of i)a.length===1&&s.endsWith(a)||(s&&!Xe(a)&&(s+=" "),s+=a);const o=e==="ssml"?{ssml:s}:{plain:s};return r&&(o.language=r),o}function Bl(t,e){const r=Fn(t.text),n=r?Wn(r,e.format,e.language):[];if(!e.contextualize)return n;const i=e.announcements.pagebreak;if(i===void 0)return n;const s=se(Re(Ke(i)?i.start:i),e.format);if(n.length===0)return[s];const o=Gt([s,...n],e.format);return o?(o.plain!==void 0&&(o.plain+="."),o.ssml!==void 0&&(o.ssml+="."),[o]):[s,...n]}function Wn(t,e,r){if(e==="plain"&&r!=="block-level"&&r!=="none"&&t.ssml&&Mn(t.ssml))return Vn(t.ssml,t.language).map(i=>{const s={plain:i.plain};return i.language&&(s.language=i.language),s});const n={};return t.language&&(n.language=t.language),e==="ssml"?n.ssml=t.ssml??We(t.plain??""):n.plain=t.plain??Vt(t.ssml??""),(r==="block-level"||r==="none")&&(n.ssml&&(n.ssml=_n(n.ssml)),r==="none"&&delete n.language),[n]}function Ul(t,e,r,n){const i=typeof t.text=="object"?t.text.language:void 0,s=new Map((t.children??[]).map(c=>[c.id,c])),o=[];for(const c of Dl(e)){if(c.placeholderId!==void 0){const d=s.get(c.placeholderId);d&&Kn(d,o,n);continue}if(!c.ssml)continue;if(n.format==="plain"&&n.language!=="block-level"&&n.language!=="none"&&Mn(c.ssml)){for(const d of Vn(c.ssml,i)){const h={plain:d.plain};d.language&&(h.language=d.language),o.push(h)}continue}const l={};i&&(l.language=i),n.format==="ssml"?l.ssml=c.ssml:l.plain=Vt(c.ssml),(n.language==="block-level"||n.language==="none")&&(l.ssml&&(l.ssml=_n(l.ssml)),n.language==="none"&&delete l.language),o.push(l)}const a=o.length>1?Gt(o,n.format):void 0;r.push(...a?[a]:o)}function Kn(t,e,r){const n=t.role??[];if(zr(n,r.skip))return;const i=n.includes("footnote"),s=n.filter(o=>!(i&&(o==="footnote"||o==="aside"))&&o!=="pagebreak");for(const o of s)jr(e,r,o,"before");if(n.includes("noteref"))for(const o of t.children??[]){const a=o.role??[];if(!zr(a,r.skip))if(a.includes("footnote")){const c=[];xe([o],c,r);const l=r.contextualize?r.announcements.footnote:void 0,d=[];if(l!==void 0){const g=Ke(l)?l.start:l;d.push(se(Re(g),r.format))}d.push(...c),l!==void 0&&Ke(l)&&d.push(se(Re(l.end),r.format));const h=l!==void 0&&d.length>1?Gt(d,r.format):void 0;e.push(...h?[h]:d)}else xe([o],e,r)}else{const o=typeof t.text=="object"?t.text.ssml:void 0;if(r.interruptSentence&&o&&$l(o))Ul(t,o,e,r);else if(n.includes("pagebreak"))e.push(...Bl(t,r)),t.children&&xe(t.children,e,r);else{const a=Fn(t.text);a&&e.push(...Wn(a,r.format,r.language)),t.children&&xe(t.children,e,r)}}t.description!==void 0&&e.push(se(t.description,r.format));for(const o of s)jr(e,r,o,"after")}function xe(t,e,r){for(const n of t)Kn(n,e,r)}function jl(t,e){const r={announcements:{...zn,...e.announcements},skip:new Set(e.skip??[]),format:e.format??"plain",contextualize:e.contextualize??!0,interruptSentence:e.interruptSentence??!1,language:e.language},n=[];return xe(t,n,r),n}const zl=["aside","bibliography","details","endnotes","footnote","noteref","pullquote","landmarks","loa","loi","lot","lov","pagebreak","toc"];exports.BUILTIN_DECORATION_TYPES=Tn;exports.DecorationController=$n;exports.DecorationLayout=Cn;exports.DecorationStyleType=O;exports.DecorationWidth=En;exports.Decorator=An;exports.DirectCommsChannel=In;exports.DirectCommsFrame=Pn;exports.DirectCommsHost=qn;exports.Locator=Ae;exports.LocatorLocations=F;exports.LocatorText=Ne;exports.ReadiumSpeechDecorationController=Bn;exports.ReadiumSpeechNavigator=il;exports.ReadiumSpeechProviderRegistry=nl;exports.SpeechServerEngine=un;exports.SpeechServerEngineProvider=bo;exports.SpeechServerError=Oe;exports.WebSpeechEngine=Et;exports.WebSpeechEngineProvider=to;exports.WebSpeechVoiceManager=x;exports.chineseVariantMap=ae;exports.chunkPlainText=sn;exports.chunkSsmlText=an;exports.createLocator=Dn;exports.decorationsEqual=Nn;exports.defaultAnnouncements=zn;exports.extractUtterances=jl;exports.makeGnd=Ol;exports.mapServerVoice=Ht;exports.mimeTypeForFormat=on;exports.parseMarkup=jn;exports.resolveDecorationForWire=It;exports.selectBitrate=cn;exports.selectFormat=ln;exports.setupDecorations=rl;exports.skippableRoles=zl;exports.supportsDecorationStyle=Rn;exports.toSpeechServerError=Ee;
|