/*! For license information please see hls.js.LICENSE.txt */ !function Ky(Hy) { const jy = this; var e, t; e = this, t = function() { "use strict"; var P, e = e=>e && e.Math === Math && e, d = e("object" == typeof globalThis && globalThis) || e("object" == typeof window && window) || e("object" == typeof jy && jy) || e("object" == typeof global && global) || Function("return this")(); class l { constructor() { this.keySize = null, this.ksRows = null, this.keySchedule = null, this.invKeySchedule = null, this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.sBox = new Uint32Array(256), this.invSBox = new Uint32Array(256), this.key = new Uint32Array(0), this.initTable() } uint8ArrayToUint32Array_(e) { const t = new DataView(e) , i = Math.floor(t.byteLength / 4) , r = new Uint32Array(i); for (let e = 0; e < i; e++) r[e] = t.getUint32(4 * e); return r } initTable() { const e = this["sBox"] , t = this["invSBox"] , i = this["subMix"] , r = i[0] , n = i[1] , s = i[2] , a = i[3] , o = this["invSubMix"] , d = o[0] , l = o[1] , u = o[2] , c = o[3] , h = new Uint32Array(256); let p = 0 , f = 0 , m = 0; for (m = 0; m < 256; m++) h[m] = m < 128 ? m << 1 : m << 1 ^ 283; for (m = 0; m < 256; m++) { var g = (g = f ^ f << 1 ^ f << 2 ^ f << 3 ^ f << 4) >>> 8 ^ 255 & g ^ 99; e[p] = g, t[g] = p; const o = h[p] , m = h[o] , v = h[m]; var y = 257 * h[g] ^ 16843008 * g; r[p] = y << 24 | y >>> 8, n[p] = y << 16 | y >>> 16, s[p] = y << 8 | y >>> 24, a[p] = y, y = 16843009 * v ^ 65537 * m ^ 257 * o ^ 16843008 * p, d[g] = y << 24 | y >>> 8, l[g] = y << 16 | y >>> 16, u[g] = y << 8 | y >>> 24, c[g] = y, p ? (p = o ^ h[h[h[v ^ o]]], f ^= h[h[f]]) : p = f = 1 } } expandKey(e) { var n = this.uint8ArrayToUint32Array_(e); let t = !0 , i = 0; for (; i < n.length && t; ) t = n[i] === this.key[i], i++; if (!t) { this.key = n; var s = this.keySize = n.length; if (4 !== s && 6 !== s && 8 !== s) throw new Error("Invalid aes key size=" + s); var a = this.ksRows = 4 * (s + 6 + 1); let e, t; const o = this.keySchedule = new Uint32Array(a) , d = this.invKeySchedule = new Uint32Array(a) , l = this.sBox , u = this["rcon"] , c = this["invSubMix"] , h = c[0] , p = c[1] , f = c[2] , m = c[3]; let i, r; for (e = 0; e < a; e++) e < s ? i = o[e] = n[e] : (r = i, e % s == 0 ? (r = r << 8 | r >>> 24, r = l[r >>> 24] << 24 | l[r >>> 16 & 255] << 16 | l[r >>> 8 & 255] << 8 | l[255 & r], r ^= u[e / s | 0] << 24) : 6 < s && e % s == 4 && (r = l[r >>> 24] << 24 | l[r >>> 16 & 255] << 16 | l[r >>> 8 & 255] << 8 | l[255 & r]), o[e] = i = (o[e - s] ^ r) >>> 0); for (t = 0; t < a; t++) e = a - t, r = 3 & t ? o[e] : o[e - 4], d[t] = t < 4 || e <= 4 ? r : h[l[r >>> 24]] ^ p[l[r >>> 16 & 255]] ^ f[l[r >>> 8 & 255]] ^ m[l[255 & r]], d[t] = d[t] >>> 0 } } networkToHostOrderSwap(e) { return e << 24 | (65280 & e) << 8 | (16711680 & e) >> 8 | e >>> 24 } decrypt(e, t, i) { var r = this.keySize + 6 , n = this["invKeySchedule"] , s = this.invSBox , a = this["invSubMix"] , o = a[0] , d = a[1] , l = a[2] , u = a[3] , i = this.uint8ArrayToUint32Array_(i); let c = i[0] , h = i[1] , p = i[2] , f = i[3]; const m = new Int32Array(e) , g = new Int32Array(m.length); let y, v, S, b, T, E, I, w, A, O, k, C, D, M; const P = this.networkToHostOrderSwap; for (; t < m.length; ) { for (A = P(m[t]), O = P(m[t + 1]), k = P(m[t + 2]), C = P(m[t + 3]), T = A ^ n[0], E = C ^ n[1], I = k ^ n[2], w = O ^ n[3], D = 4, M = 1; M < r; M++) y = o[T >>> 24] ^ d[E >> 16 & 255] ^ l[I >> 8 & 255] ^ u[255 & w] ^ n[D], v = o[E >>> 24] ^ d[I >> 16 & 255] ^ l[w >> 8 & 255] ^ u[255 & T] ^ n[D + 1], S = o[I >>> 24] ^ d[w >> 16 & 255] ^ l[T >> 8 & 255] ^ u[255 & E] ^ n[D + 2], b = o[w >>> 24] ^ d[T >> 16 & 255] ^ l[E >> 8 & 255] ^ u[255 & I] ^ n[D + 3], T = y, E = v, I = S, w = b, D += 4; y = s[T >>> 24] << 24 ^ s[E >> 16 & 255] << 16 ^ s[I >> 8 & 255] << 8 ^ s[255 & w] ^ n[D], v = s[E >>> 24] << 24 ^ s[I >> 16 & 255] << 16 ^ s[w >> 8 & 255] << 8 ^ s[255 & T] ^ n[D + 1], S = s[I >>> 24] << 24 ^ s[w >> 16 & 255] << 16 ^ s[T >> 8 & 255] << 8 ^ s[255 & E] ^ n[D + 2], b = s[w >>> 24] << 24 ^ s[T >> 16 & 255] << 16 ^ s[E >> 8 & 255] << 8 ^ s[255 & I] ^ n[D + 3], D += 3, g[t] = P(y ^ c), g[t + 1] = P(b ^ h), g[t + 2] = P(S ^ p), g[t + 3] = P(v ^ f), c = A, h = O, p = k, f = C, t += 4 } return g.buffer } destroy() { this.key = void 0, this.keySize = void 0, this.ksRows = void 0, this.sBox = void 0, this.invSBox = void 0, this.subMix = void 0, this.invSubMix = void 0, this.keySchedule = void 0, this.invKeySchedule = void 0, this.rcon = void 0 } } class i { constructor(e, t) { this.rpc = e, this.logger = t, this.decrypt = (r,n,s,a,o)=>t=>{ const i = d.crypto; if (null != o && o.useJSCrypto || null == i || !i.subtle) { const s = new l; var e; s.expandKey(r); const i = s.decrypt(a, 0, n); e = o.plainTextLength ? i.slice(0, o.plainTextLength) : function(e) { var t = new Uint8Array(e) , i = t[e.byteLength - 1] , r = e.byteLength - 1; let n = 0; if (1 <= i && i <= 16) for (let e = r; e > r - i && t[e] === i; e--) n++; return e = n === i ? e.slice(0, r - i + 1) : e }(i), t(e, void 0, [e]) } else i.subtle.importKey("raw", r, s, !1, ["decrypt"]).then(e=>i.subtle.decrypt({ name: s, iv: n }, e, a)).then(e=>{ t(e, void 0, [e]) } ).catch(e=>t(void 0, e)) } , e.register("decrypt", this.decrypt) } } (gr = P = P || {}).MEDIA_ATTACHING = "hlsMediaAttaching", gr.MEDIA_ATTACHED = "hlsMediaAttached", gr.MEDIA_DETACHING = "hlsMediaDetaching", gr.MEDIA_DETACHED = "hlsMediaDetached", gr.BUFFER_CREATED = "hlsBufferCreated", gr.BUFFER_APPENDING = "hlsBufferAppending", gr.BUFFER_APPENDED = "hlsBufferAppended", gr.BUFFER_FLUSHED = "hlsBufferFlushed", gr.MANIFEST_LOADING = "hlsManifestLoading", gr.MANIFEST_LOADED = "hlsManifestLoaded", gr.MANIFEST_PARSED = "hlsManifestParsed", gr.LEVEL_SWITCHING = "hlsLevelSwitching", gr.LEVEL_SWITCHED = "hlsLevelSwitched", gr.LEVEL_LOADING = "hlsLevelLoading", gr.LEVEL_LOADED = "hlsLevelLoaded", gr.LEVEL_UPDATED = "hlsLevelUpdated", gr.LEVELS_CHANGED = "hlsLevelsChanged", gr.AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated", gr.AUDIO_TRACK_SWITCH = "hlsAudioTrackSwitch", gr.AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched", gr.AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded", gr.SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated", gr.SUBTITLE_TRACKS_CREATED = "hlsSubtitleTracksCreated", gr.SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch", gr.INLINE_STYLES_PARSED = "hlsInlineStylesParsed", gr.SESSION_DATA_COMPLETE = "hlsSessionDataComplete", gr.FRAG_LOADING = "hlsFragLoading", gr.FRAG_LOADED = "hlsFragLoaded", gr.FRAG_BUFFERED = "hlsFragBuffered", gr.FRAG_CHANGED = "hlsFragChanged", gr.INTERNAL_ERROR = "hlsInternalError", gr.ERROR = "hlsError", gr.DESTROYING = "hlsDestroying", gr.KEY_REQUEST_STARTED = "hlsKeyRequestStarted", gr.LICENSE_CHALLENGE_CREATED = "hlsLicenseChallengeCreated", gr.LICENSE_RELEASED = "hlsLicenseReleased", gr.KEY_LOADED = "hlsKeyLoaded", gr.UNRESOLVED_URI_LOADING = "hlsUnresolvedUriLoading", gr.DESIRED_RATE_CHANGED = "hlsDesiredRateChanged", gr.PLAYER_STATE_CHANGE = "hlsPlayerStateChange", gr.SEEKING = "hlsSeeking", gr.SEEKED = "hlsSeeked", gr.STALLED = "hlsStalled", gr.RESUME_FROM_STALL = "hlsResumeFromStall", gr.READY_FOR_NEXT_ITEM = "hlsReadyForNextItem", gr.ITEM_TRANSITIONED = "hlsItemTransitioned", gr.ITEM_EVICTED = "hlsItemEvicted", gr.DATERANGE_UPDATED = "hlsDaterangeUpdated"; var v, x = P; (dd = v = v || {}).FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment", dd.FRAG_PARSING_DATA = "hlsFragParsingData", dd.FRAG_PARSED = "hlsFragParsed", dd.INIT_PTS_FOUND = "hlsInitPtsFound"; class p extends Error { constructor(e, t, i, r, n) { super(r), this.type = e, this.details = t, this.fatal = i, this.reason = r, this.response = n, this.handled = !1 } } class R extends p { constructor(e, t, i, r, n) { super(e, t, i, r, n), this.response = n } } const $ = { PlaylistNotReceived: { code: -12884, text: "Playlist not received" }, CryptResponseReceivedSlowly: { code: -16833, text: "Crypt key received slowly" }, LivePlaylistUpdateError: { code: -12888, text: "Live playlist not updated" }, NoResponseFromMediaRequest: { code: -12889, text: "No response for fragment" }, IncompatibleAsset: { code: -12927, text: "IncompatibleAsset" }, CorruptStream: { code: -16041, text: "Corrupt fragment" }, InternalError: { code: -12645, text: "InternalException" }, CantSwitchInTime: { code: -12644, text: "CantSwitchInTime" }, VideoDecoderBadDataErr: { code: -12909, text: "Buffer error" }, InsufficientDataAvailable: { code: -12928, text: "Incomplete data" }, AllocationFailed: { code: -12862, text: "AllocationFailed" }, PlaylistErrorMissingEXTM3U: { code: -12269, text: "Response doesnt have #EXTM3U tag" }, PlaylistErrorInvalidEntry: { code: -12264, text: "Invalid entry" }, PlaylistErrorBadTargetDuration: { code: -12271, text: "Invalid targetduration" }, NoValidAlternates: { code: -12925, text: "No valid alternates" }, FormatError: { code: -12642, text: "Incorrect playlist format" }, UnsupportedKeySystemError: { code: -6e4, text: "Unsupported Key System" }, EmptyLoadSourceError: { code: -60001, text: "Empty loadSource url" }, UndefinedItemIdError: { code: -60002, text: "Undefined itemId" }, ManifestParseError: { code: -60003, text: "Manifest parse error" }, DemuxWorkerError: { code: -60004, text: "Demux worker error" }, DecryptWorkerError: { code: -60005, text: "Decrypt worker error" }, OutOfRangeSeekError: { code: -60006, text: "Seeked out of playable range" }, ExceptionInKeyLoadError: { code: -60007, text: "Exception in Key load" }, FragmentAbortError: { code: -60008, text: "Fragment abort error" }, ManifestTimeoutError: { code: -60009, text: "Manifest Timeout Error" }, PlaylistTimeoutError: { code: -60010, text: "Playlist Timeout Error" }, FragmentTimeoutError: { code: -60011, text: "Fragment Timeout Error" }, IncompleteSessionData: { code: -60012, text: "Session data not complete after loading all items" }, SessionDataLoadTimeout: { code: -60013, text: "Session data load timeout" }, FailedDemuxerSanityCheck: { code: -60014, text: "Failed demuxer sanity check" }, InvalidADTSSamplingIndex: { code: -60015, text: "Invalid ADTS sampling index" }, DemuxerNotFound: { code: -60016, text: "No demux matching with content found" }, InvalidAC3Magic: { code: -60029, text: "Invalid ac-3 magic" }, InvalidInitTimestamp: { code: -60017, text: "Invalid initPTS or initDTS" }, NoAVSamplesFound: { code: -60018, text: "no audio/video samples found" }, NoTSSyncByteFound: { code: -60019, text: "TS packet did not start with 0x47" }, PESDidNotStartWithADTS: { code: -60020, text: "AAC PES did not start with ADTS header" }, NoADTSHeaderInPES: { code: -60021, text: "No ADTS header found in AAC PES" }, InvalidDolbyAudioMagic: { code: -60022, text: "Invalid dolby audio magic" }, FailedToAllocateVideoMdat: { code: -60023, text: "Fail allocating video mdat" }, FailedToAllocateAudioMdat: { code: -60024, text: "Fail allocating audio mdat" }, InsufficientEC3Data: { code: -60025, text: "Error parsing ec-3, not enough data" }, InvalidEC3Magic: { code: -60026, text: "Invalid ec-3 magic" }, ReservedStreamType: { code: -60027, text: "Reserved stream type" }, InsufficientAC3Data: { code: -60028, text: "error parsing ac-3, not enough data" }, InvalidAC3SamplingRateCode: { code: -60030, text: "Invalid ac-3 samplingRateCode" }, PlaylistErrorInvalidEXTXDEFINE: { code: -61e3, text: "Encountered undefined/not imported EXT-X-DEFINE property" }, PlaylistErrorMissingImportReference: { code: -61001, text: "IMPORT references variable not in master playlist and/or NAME" }, PlaylistErrorInvalidSERVERURI: { code: -61002, text: "Encountered undefined/invalid SERVER-URI attribute for EXT-X-CONTENT-STEERING tag" }, PlaylistErrorInvalidPATHWAYID: { code: -61003, text: "Encountered invalid PATHWAY-ID attribute for EXT-X-CONTENT-STEERING tag" }, PlaylistErrorInvalidSCORE: { code: -61004, text: "Encountered negative/non-number SCORE property" }, KeySystemFailedToUpdateSession: { code: -62e3, text: "KeySystem: Promise Rejected while updating session" }, KeySystemFailedToGenerateLicenseRenewal: { code: -62001, text: "KeySystem: Failed to generate license renewal" }, KeySystemFailedToGenerateLicenseRequest: { code: -62002, text: "KeySystem: Failed to generate license request" }, KeySystemAbort: { code: -62003, text: "KeySystem: Aborted" }, KeySystemUnexpectedStateTransition: { code: -62004, text: "KeySystem: Unexpected state transition" }, KeySystemUnexpectedState: { code: -62005, text: "KeySystem: Unexpected state" }, KeySystemCDMUnknownError: { code: -62006, text: "KeySystem: Unknown error from CDM" }, KeySystemRequestTimedOut: { code: -62007, text: "Key request timed out" }, KeySystemUnexpectedMETHOD: { code: -62008, text: "Unexpected METHOD attribute" }, KeySystemUnmatchedString: { code: -62009, text: "KeySystem: string does not match" }, KeySystemInternalError: { code: -62010, text: "KeySystem: internal-error" }, KeySystemOutputRestricted: { code: -62011, text: "KeySystem: output-restricted" }, KeySystemSetupError: { code: -62012, text: "KeySystem: setup error" }, KeySystemFailedToInitialize: { code: -62013, text: "KeySystem: could not initialize" }, KeySystemFailedToCreateSession: { code: -62014, text: "KeySystem: could not create session" }, KeySystemUndefinedNavigator: { code: -62015, text: "KeySystem: navigator undefined" }, KeySystemNoKeySystemsToTry: { code: -62016, text: "KeySystem: no key systems to try" }, KeySystemNoConstructor: { code: -62017, text: "KeySystem: No constructor" }, KeySystemNoKeySystemAccess: { code: -62018, text: "KeySystem: No KeySystemAccess" }, KeySystemCertificateLoadError: { code: -62019, text: "KeySystem: Certificate Load Error" } } , o = "networkError" , L = "mediaError" , s = "otherError" , _ = "manifestParsingError" , f = "manifestIncompatibleCodecsError" , N = "levelLoadError" , n = "bufferAppendError" , r = "internalException"; class V extends p { constructor(e, t, i) { super(s, r, e, t, i) } } class D extends p { constructor(e, t, i) { super(L, "fragParsingError", e, t, i) } } class F extends p { constructor(e, t, i, r) { super("muxError", "remuxAllocError", e, t, i), this.bytes = r } } function S(e) { return e.baseTime / e.timescale } function B(e, t) { return { baseTime: Math.floor(e * t), timescale: t } } function g(e, t) { return S(e) < S(t) ? e : t } function y(e, t) { return S(e) > S(t) ? e : t } function b(e, t) { return S(e) - S(t) } var t = void 0 !== d.Buffer ? require("events").EventEmitter : class { constructor() { this.eventMap = {} } _on(e, t, i=!1) { return null == this.eventMap[e] && (this.eventMap[e] = []), i ? this.eventMap[e].splice(0, 0, t) : this.eventMap[e].push(t), this } _off(e, t) { return null != this.eventMap[e] && (this.eventMap[e] = this.eventMap[e].filter(e=>e.listener !== t.listener), 0 === this.eventMap[e].length && delete this.eventMap[e]), this } on(e, t) { return this._on(e, { listener: t, once: !1 }) } off(e, t) { return this._off(e, { listener: t }) } addListener(e, t) { return this.on(e, t) } once(e, t) { return this._on(e, { listener: t, once: !0 }) } removeListener(e, t) { return this.off(e, t) } removeAllListeners(e) { return delete this.eventMap[e], this } setMaxListeners(e) { return this } getMaxListeners() { return 1 / 0 } listeners(e) { return null == this.eventMap[e] ? [] : this.eventMap[e].map(e=>e.listener) } rawListeners(e) { return this.listeners(e) } emit(e, ...t) { if (null == this.eventMap[e]) return !1; let i = !1; for (const r of this.eventMap[e]) { try { r.listener.apply(this, t) } catch (e) {} i = !0 } return i } listenerCount(e) { return null == this.eventMap[e] ? 0 : this.eventMap[e].length } prependListener(e, t) { return this._on(e, { listener: t, once: !1 }, !0) } prependOnceListener(e, t) { return this._on(e, { listener: t, once: !0 }, !0) } eventNames() { return Object.keys(this.eventMap) } } ; class a extends t { trigger(e, t) { this.emit(e, t) } } function E(e, t, i, r, n) { let s, a, o, d; const l = navigator.userAgent.toLowerCase() , u = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; s = 1 + ((192 & t[i + 2]) >>> 6); var c = (60 & t[i + 2]) >>> 2; if (!(u.length - 1 < c)) return o = (1 & t[i + 2]) << 2, o |= (192 & t[i + 3]) >>> 6, /firefox/i.test(l) ? 6 <= c ? (s = 5, d = new Array(4), a = c - 3) : (s = 2, d = new Array(2)) : -1 !== l.indexOf("android") ? (s = 2, d = new Array(2)) : (s = 5, d = new Array(4), a = r && (-1 !== r.indexOf("mp4a.40.29") || -1 !== r.indexOf("mp4a.40.5")) || !r && 6 <= c ? c - 3 : ((r && -1 !== r.indexOf("mp4a.40.2") || !r && 1 == o) && (s = 2, d = new Array(2)), c)), d[0] = s << 3, d[0] |= (14 & c) >> 1, d[1] |= (1 & c) << 7, d[1] |= o << 3, 5 === s && (d[1] |= (14 & a) >> 1, d[2] = (1 & a) << 7, d[2] |= 8, d[3] = 0), { esdsConfig: d, samplerate: u[c], channelCount: o, segmentCodec: "aac", codec: "mp4a.40." + s }; { const t = new D(!0,`invalid ADTS sampling index:${c}`,$.InvalidADTSSamplingIndex); e.trigger(x.INTERNAL_ERROR, t) } } class u { constructor(e, t, i, r, n) { this.observer = e, this.remuxer = t, this.config = i, this.typeSupported = r, this.logger = n } static probe(e, t) { throw new Error("Method not implemented") } resetTimeStamp(e) {} resetInitSegment(e, t, i, r) {} destroy() {} } class c extends u { constructor(e, t, i, r, n) { super(e, t, i, r, n), this.observer = e, this.remuxer = t, this.config = i, this.typeSupported = r, this.logger = n, this.esRemuxer = t } } class h { constructor(e, t, i) { this.observer = e, this.config = t, this.logger = i } resetInitSegment() {} resetTimeStamp(e) {} destroy() {} } let m, I; var w = { strToUtf8array: e=>(m = m || new TextEncoder, m.encode(e)), utf8arrayToStr: e=>(I = I || new TextDecoder("utf-8"), I.decode(e)) } , A = { strToUtf8array(e) { e = d.Buffer.from(e, "utf-8"); return new Uint8Array(e.buffer,e.byteOffset,e.byteLength) }, utf8arrayToStr: e=>d.Buffer.from(e).toString("utf-8") }; let O = { strToUtf8array(e) { const t = unescape(encodeURIComponent(e)) , i = new Uint8Array(t.length); for (let e = 0; e < t.length; e++) i[e] = t.charCodeAt(e); return i }, utf8arrayToStr: e=>String.fromCharCode.apply(null, Array.from(e)) }; "undefined" != typeof TextEncoder && "undefined" != typeof TextDecoder ? O = w : "function" == typeof (null === (pd = d.Buffer) || void 0 === pd ? void 0 : pd.from) && (O = A); const k = { name: "ID3" }; class C { constructor(e, t) { this.logger = t, this._hasTimeStamp = !1, this._audioType = null, this._length = 0, this._frames = []; let i, r, n, s, a = 0; for (; ; ) if (n = C.readUTF(e, a, 3), a += 3, "ID3" === n) { this._minor = e[a++], this._revision = e[a++]; const t = e[a++]; if (128 & t && (this._unsynchronized = !0, this.logger.error(k, "id3 tag is unsynchronized")), 64 & t && (this._hasExtendedHeader = !0, this.logger.warn(k, "id3 tag has extended header")), i = C.readSynchSafeUint32(e.subarray(a, a + 4)), a += 4, r = a + i, this._hasExtendedHeader) { const t = C.readSynchSafeUint32(e.subarray(a, a + 4)); this.logger.warn(k, `id3 tag has ${t}-byte extended header. usually 6 or 10 bytes`), a += t } 2 < this.minor ? this._parseID3Frames(e, a, r) : this.logger.error(k, "[id3] doesn't support older than v2.3 tags"), a = r } else { if ("3DI" !== n) return a -= 3, void ((s = a) && (this.hasTimeStamp || this.logger.warn(k, "ID3 tag found, but no timestamp"), this._length = s, this._payload = e.slice(0, s))); a += 7 } } static isHeader(e, t) { return 73 === e[t] && 68 === e[t + 1] && 51 === e[t + 2] && e[t + 3] < 255 && e[t + 4] < 255 && e[t + 6] < 128 && e[t + 7] < 128 && e[t + 8] < 128 && e[t + 9] < 128 } static readSynchSafeUint32(e) { return 2097152 * (127 & e[0]) + 16384 * (127 & e[1]) + 128 * (127 & e[2]) + (127 & e[3]) } static readUTF(e, t, i) { let r = "" , n = t; for (var s = t + i; r += String.fromCharCode(e[n++]), n < s; ) ; return r } isID3Frame(e, t) { return e[t + 4] < 128 && e[t + 5] < 128 && e[t + 6] < 128 && e[t + 7] < 128 } decodeID3Frame(e) { return "TXXX" === e.type ? this.decodeTxxxFrame(e) : "WXXX" === e.type ? this.decodeWxxxFrame(e) : "PRIV" === e.type ? this.decodePrivFrame(e) : "T" === e.type[0] ? this.decodeTextFrame(e) : { key: e.type, data: e.data } } decodeTxxxFrame(e) { if (!(e.size < 2) && 3 === e.data[0]) { var t = 1 , i = this.id3utf8ArrayToStr(e.data.subarray(1)); return t += i.length + 1, { key: "TXXX", description: i, data: this.id3utf8ArrayToStr(e.data.subarray(t)) } } } decodeWxxxFrame(e) { if (!(e.size < 2) && 3 === e.data[0]) { var t = 1 , i = this.id3utf8ArrayToStr(e.data.subarray(1)); return t += i.length + 1, { key: "WXXX", description: i, data: O.utf8arrayToStr(e.data.subarray(t)) } } } decodeTextFrame(e) { if (!(e.size < 2) && 3 === e.data[0]) { var t = e.data.subarray(1); return { key: e.type, data: this.id3utf8ArrayToStr(t) } } } decodePrivFrame(e) { if (!(e.size < 2)) { var t = this.id3utf8ArrayToStr(e.data); return { key: "PRIV", info: t, data: e.data.slice(t.length + 1) } } } _extractID3Frame(e, t, i, r, n) { var s = r + i; let a; return s <= n ? a = { type: t, data: e.slice(r, s) } : this.logger.error(k, `id3 frame ${t} size ${i} exceeded ${n}`), a } _parseID3Frames(e, t, i) { let r, n, s, a; for (; t + 8 <= i; ) { if (!this.isID3Frame(e, t)) return void this.logger.error(k, `[id3] illegal id3 frame @ offset ${t}. skip this id3 tag`); if (r = C.readUTF(e, t, 4), t += 4, "" === r) return; if (0 === (n = C.readSynchSafeUint32(e.subarray(t, t + 4)))) return; t += 4, e[t++], e[t++], s = t; var o = this._extractID3Frame(e, r, n, s, i); if (o) { const e = this.decodeID3Frame(o); this._frames.push(e) } if ("PRIV" === r) if (53 === n && "com.apple.streaming.transportStreamTimestamp" === C.readUTF(e, t, 44)) { t += 44, t += 4; const i = 1 & e[t++]; this._hasTimeStamp = !0, a = ((e[t++] << 23) + (e[t++] << 15) + (e[t++] << 7) + e[t++]) / 45, i && (a += 47721858.84), a = Math.round(a), this._timeStamp = a } else 45 <= n && "com.apple.streaming.audioDescription" === C.readUTF(e, t, 36) ? (t += 37, this._audioType = C.readUTF(e, t, 4), t += 4, t += n - 41) : t += n; else t += n } } id3utf8ArrayToStr(e) { let t, i, r = "", n = 0; const s = e.length; for (; n < s; ) { const s = e[n++]; switch (s >> 4) { case 0: return r; case 1: case 2: case 3: case 4: case 5: case 6: case 7: r += String.fromCharCode(s); break; case 12: case 13: t = e[n++], r += String.fromCharCode((31 & s) << 6 | 63 & t); break; case 14: t = e[n++], i = e[n++], r += String.fromCharCode((15 & s) << 12 | (63 & t) << 6 | (63 & i) << 0) } } } get hasTimeStamp() { return this._hasTimeStamp } get timeStamp() { return this._timeStamp } get audioType() { return this._audioType } get length() { return this._length } get payload() { return this._payload } get frames() { return this._frames } get minor() { return this._minor } get revision() { return this._revision } } var M = C; const U = { name: "AACDemuxer" }; class K extends c { resetInitSegment(e, t) { this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t } static probe(e, t) { let i, r; for (i = new M(e,t).length, r = Math.min(e.length - 1, i + 100); i < r; i++) if (255 === e[i] && 240 == (246 & e[i + 1])) return !0; return !1 } append(e, t, i, r, n) { var s = new M(e,this.logger) , a = s.hasTimeStamp ? 90 * s.timeStamp : 9e4 * t; let o, d, l, u, c, h, p, f, m, g; for (s.length && (g = s.payload, s.frames.length && (m = s.frames), f = { id3Samples: [{ pts: a, dts: a, data: g, frames: m }], inputTimescale: 9e4 }), l = s.length, h = e.length; l < h - 1 && (255 !== e[l] || 240 != (246 & e[l + 1])); l++) ; if (!this.audioConfig && (this.audioConfig = E(this.observer, e, l, void 0, this.logger), !this.audioConfig)) throw "failed to parse adts config"; if (!this.audioTrack) { const e = { id: 258, inputTimescale: 9e4, timescale: NaN, duration: this.duration, encrypted: !1, keyTagInfo: n } , t = { len: 0, sequenceNumber: 0, esSamples: [] }; this.audioTrack = { info: e, parsingData: t, type: "audio", config: this.audioConfig } } "zaac" !== s.audioType && "zach" !== s.audioType && "zacp" !== s.audioType || (this.audioTrack.info.encrypted = !0), d = 0; for (var y = 9216e4 / this.audioConfig.samplerate; l + 5 < h && (u = 1 & e[l + 1] ? 7 : 9, o = (3 & e[l + 3]) << 11 | e[l + 4] << 3 | (224 & e[l + 5]) >>> 5, o -= u, 0 < o && l + u + o <= h); ) for (c = a + d * y, p = { unit: e.subarray(l + u, l + u + o), pts: c, dts: c, keyTagInfo: n }, this.audioTrack.parsingData.esSamples.push(p), this.audioTrack.parsingData.len += o, l += o + u, d++; l < h - 1; l++) { if (M.isHeader(e, l)) { const t = new M(e.subarray(l),this.logger); if (0 < t.length) { l += t.length; const e = t.hasTimeStamp ? 90 * t.timeStamp : a; f.id3Samples.push({ pts: e, dts: e, data: t.payload, frames: t.frames }) } else this.logger.error(U, `[id3] invalid length ${h}`) } if (255 === e[l] && 240 == (246 & e[l + 1])) break } this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, f, void 0, t, i, r, n) } } class H { bsReadAndUpdate(e, t, i) { e = this.readBits(e, t, i); return this.updateOffset(t, i), e } bsWriteAndUpdate(e, t, i, r) { r = this.writeBits(e, t, i, r); return this.updateOffset(t, i), r } bsSkip(e, t) { this.updateOffset(e, t) } readBits(i, r, n) { if (i && r) { let t = r.byteOffset; const s = r["usedBits"]; if (!(8 <= s || 32 < s + n)) { let e; const a = new Uint32Array(1) , o = new Uint32Array(1) , d = new Uint8Array(1); if (!(8 <= s || 32 < n)) { if (s) { const r = 8 - s , a = n < r ? r - n : 0; o[0] = 4278190080 >>> 32 - r, e = (i[t] & o[0]) >>> a, t += 1, n -= r } for (; 0 < n; ) { d[0] = i[t]; const r = Math.min(n, 8) , s = 8 - r; o[0] = 4278190080 >>> 24 + s << s, a[0] = (d[0] & o[0]) >> s, e = e ? e << r | a[0] : a[0], t += 1, n -= r } return e } } } } writeBits(t, i, r, n) { if (t && i) { let e = i.byteOffset; var i = i["usedBits"]; if (!(8 <= i || 32 < i + r)) { const s = new Uint32Array(1) , a = new Uint32Array(1) , o = new Uint32Array(1) , d = new Uint8Array(1); for (s[0] = n, i && (a[0] = s[0] << 32 - r, o[0] = 4278190080, d[0] = (a[0] & o[0]) >>> 24 + i, t[e] &= ~(o[0] >>> 24 + i), t[e] |= d[0], e += 1, r -= 8 - i); 0 < r; ) { a[0] = s[0] << 32 - r, o[0] = 4278190080, d[0] = (a[0] & o[0]) >>> 24; const l = r < 0 ? 8 - r : 0; t[e] &= ~(o[0] >>> 24 >>> l << l), t[e] |= d[0], r -= 8, e += 1 } return 0 } } } updateOffset(e, t) { var i, r; !e || !t || 32 < e.usedBits + t || (i = e.usedBits % 8, r = Math.floor((i + t) / 8), t = (i + t) % 8, e.byteOffset += r, e.usedBits = t) } } function j(e, t) { return 1536 / e.samplerate * t } function q(e, t, i, r) { let n; if (i + 8 > t.length) return n = new D(!0,"error parsing ac-3, not enough data",$.InsufficientAC3Data), void e.trigger(x.INTERNAL_ERROR, n); if (11 !== t[i] || 119 !== t[i + 1]) return n = new D(!0,"invalid ac-3 magic",$.InvalidAC3Magic), void e.trigger(x.INTERNAL_ERROR, n); var s = t[i + 4] >> 6; if (3 <= s) return n = new D(!0,`invalid ac-3 samplingRateCode:${s}`,$.InvalidAC3SamplingRateCode), void e.trigger(x.INTERNAL_ERROR, n); var a = 63 & t[i + 4] , o = t[i + 6] >> 5; let d = 0; 2 == o ? d += 2 : (1 & o && 1 != o && (d += 2), 4 & o && (d += 2)); var l = (t[i + 6] << 8 | t[i + 7]) >> 12 - d & 1 , u = [2, 1, 2, 3, 3, 4, 4, 5][o] + l , e = t[i + 5] >> 3 , i = 7 & t[i + 5]; return { samplerate: G[s], channelCount: u, segmentCodec: "ac3", codec: "ac-3", extraData: s << 22 | e << 17 | i << 14 | o << 11 | l << 10 | a >> 1 << 5 } } function Q(e, t, i) { let r; if (i + 8 > t.length) return r = new D(!0,"error parsing ac-3, not enough data",$.InsufficientAC3Data), void e.trigger(x.INTERNAL_ERROR, r); if (11 !== t[i] || 119 !== t[i + 1]) return r = new D(!0,"invalid ac-3 magic",$.InvalidAC3Magic), void e.trigger(x.INTERNAL_ERROR, r); var n = t[i + 4] >> 6; return 3 <= n ? (r = new D(!0,`invalid ac-3 samplingRateCode:${n}`,$.InvalidAC3SamplingRateCode), void e.trigger(x.INTERNAL_ERROR, r)) : (i = 63 & t[i + 4], 2 * W[3 * i + n]) } const G = [48e3, 44100, 32e3] , W = [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920]; class z extends c { resetInitSegment(e, t) { this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t } static probe(e, t) { var i = new M(e,t) , t = i.length; return !!(i.hasTimeStamp && 11 === e[t] && 119 === e[t + 1] && (new H).bsReadAndUpdate(e, { byteOffset: t + 5, usedBits: 0 }, 5) < 16) } append(e, t, i, r, n) { var s = new M(e,this.logger) , a = 90 * s.timeStamp , o = e.byteLength; let d = 0 , l = s.length; if (this.audioConfig || (this.audioConfig = q(this.observer, e, l, this.logger)), !this.audioConfig) throw "failed to parse ac3 config"; if (!this.audioTrack) { const e = { id: 258, inputTimescale: 9e4, timescale: NaN, duration: this.duration, encrypted: !1, keyTagInfo: n } , t = { len: 0, sequenceNumber: 0, esSamples: [] }; this.audioTrack = { info: e, parsingData: t, type: "audio", config: this.audioConfig } } var u = j(this.audioConfig, this.audioTrack.info.inputTimescale); for ("zac3" === s.audioType && (this.audioTrack.info.encrypted = !0); l < o; ) { if (M.isHeader(e, l) && (l += new M(e.subarray(l),this.logger).length), 11 !== e[l] || 119 !== e[l + 1]) { const e = new D(!0,"invalid ac-3 magic",$.InvalidAC3Magic); return void this.observer.trigger(x.INTERNAL_ERROR, e) } const t = Q(this.observer, e, l) , i = a + d * u , r = { unit: e.subarray(l, l + t), pts: i, dts: i, keyTagInfo: n }; this.audioTrack.parsingData.esSamples.push(r), this.audioTrack.parsingData.len += t, l += t, d++ } this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, { id3Samples: [{ pts: a, dts: a, data: s.payload, frames: s.frames }], inputTimescale: this.audioTrack.info.inputTimescale }, void 0, t, i, r, n) } } var X = function(t, i, r, n) { const s = new H; let a, o = !1, d = 0; for (; r < i.length; ) { if (r + 8 > i.length) return a = new D(!0,"error parsing ec-3, not enough data",$.InsufficientEC3Data), void t.trigger(x.INTERNAL_ERROR, a); let e = 0; if (M.isHeader(i, r) && (e = new M(i.subarray(r),n).length || 0, r += e), 11 !== i[r] || 119 !== i[r + 1]) return a = new D(!0,"invalid ec-3 magic",$.InvalidEC3Magic), void t.trigger(x.INTERNAL_ERROR, a); var l = { byteOffset: r + 2, usedBits: 0 } , u = s.bsReadAndUpdate(i, l, 2) , c = s.bsReadAndUpdate(i, l, 3); if (0 === u || 2 === u) if (!0 === o) { if (0 === c) break } else o = !0; else if (1 !== u) return a = new D(!0,"reserved stream type",$.ReservedStreamType), void t.trigger(x.INTERNAL_ERROR, a); l = 2 * (s.bsReadAndUpdate(i, l, 11) + 1); r += l, d += l + (e || 0) } return d } , Y = function(t, i, r, n) { const s = { frmsiz: 0, fscod: 0, numblkscod: 0, acmod: 0, lfeon: 0, bsid: 0, strmtyp: 0, substreamid: 0, chanmape: 0, chanmap: 0, mixdef: 0, mixdeflen: 0, bsmod: 0 } , a = { fscod: 0, acmod: 0, lfeon: 0, bsid: 0, bsmod: 0, chan_loc: 0, data_rate: 0, num_ind_sub: 0, num_dep_sub: [], complexity_index_type_a: 0 } , o = new H; let d, l = !1, u = 0; for (; r < i.length; ) { if (r + 8 > i.length) return d = new D(!0,"error parsing ec-3, not enough data",$.InsufficientEC3Data), void t.trigger(x.INTERNAL_ERROR, d); let e = 0; if (M.isHeader(i, r) && (e = new M(i.subarray(r),n).length || 0, r += e), 11 !== i[r] || 119 !== i[r + 1]) return d = new D(!0,"invalid ec-3 magic",$.InvalidEC3Magic), void t.trigger(x.INTERNAL_ERROR, d); const h = { byteOffset: r + 2, usedBits: 0 }; if (s.strmtyp = o.bsReadAndUpdate(i, h, 2), s.substreamid = o.bsReadAndUpdate(i, h, 3), 0 === s.strmtyp || 2 === s.strmtyp) { if (!0 === l) { if (0 === s.substreamid) break } else l = !0; a.num_ind_sub++, a.num_dep_sub.push(0) } else { if (1 !== s.strmtyp) return d = new D(!0,"reserved stream type",$.ReservedStreamType), void t.trigger(x.INTERNAL_ERROR, d); a.num_dep_sub[a.num_ind_sub - 1]++ } if (s.frmsiz = o.bsReadAndUpdate(i, h, 11), s.fscod = o.bsReadAndUpdate(i, h, 2), 3 === s.fscod ? (o.bsSkip(h, 2), s.numblkscod = 3) : s.numblkscod = o.bsReadAndUpdate(i, h, 2), s.acmod = o.bsReadAndUpdate(i, h, 3), s.lfeon = o.bsReadAndUpdate(i, h, 1), s.bsid = o.bsReadAndUpdate(i, h, 5), o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8), 0 === s.acmod && (o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8)), 1 === s.strmtyp && (s.chanmape = o.bsReadAndUpdate(i, h, 1), s.chanmape && (s.chanmap = o.bsReadAndUpdate(i, h, 16))), o.bsReadAndUpdate(i, h, 1) && (2 < s.acmod && o.bsSkip(h, 2), 1 & s.acmod && 2 < s.acmod && o.bsSkip(h, 6), 4 & s.acmod && o.bsSkip(h, 6), s.lfeon && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 5), 0 === s.strmtyp)) { if (o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 6), 0 === s.acmod && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 6), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 6), s.mixdef = o.bsReadAndUpdate(i, h, 2), 1 === s.mixdef) o.bsSkip(h, 5); else if (2 === s.mixdef) o.bsSkip(h, 12); else if (3 === s.mixdef) { s.mixdeflen = o.bsReadAndUpdate(i, h, 5), o.bsReadAndUpdate(i, h, 1) && (o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && (o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 4))), o.bsReadAndUpdate(i, h, 1) && (o.bsSkip(h, 5), o.bsReadAndUpdate(i, h, 1) && (o.bsSkip(h, 7), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8))); const t = s.mixdeflen + 2 + (h.usedBits ? 1 : 0); h.byteOffset += t } if (s.acmod < 2 && (o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 14), 0 === s.acmod && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 14)), o.bsReadAndUpdate(i, h, 1)) if (0 === s.numblkscod) o.bsSkip(h, 5); else for (let e = 0; e < s.numblkscod; e++) o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 5) } if (s.bsmod = 0, o.bsReadAndUpdate(i, h, 1) && (s.bsmod = o.bsReadAndUpdate(i, h, 3), o.bsSkip(h, 2), 2 === s.acmod && o.bsSkip(h, 4), 6 <= s.acmod && o.bsSkip(h, 2), o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8), 0 === s.acmod && o.bsReadAndUpdate(i, h, 1) && o.bsSkip(h, 8), s.fscod < 3 && o.bsSkip(h, 1)), 0 === s.strmtyp && 3 !== s.numblkscod && o.bsSkip(h, 1), 2 !== s.strmtyp || (3 === s.numblkscod ? 1 : o.bsReadAndUpdate(i, h, 1)) && o.bsReadAndUpdate(i, h, 6), o.bsReadAndUpdate(i, h, 1)) { const t = o.bsReadAndUpdate(i, h, 6); if (0 === s.strmtyp && 0 === s.substreamid && 1 === t) { const t = o.bsReadAndUpdate(i, h, 7) , r = o.bsReadAndUpdate(i, h, 1) , n = o.bsReadAndUpdate(i, h, 8); 0 === t && 1 === r && 1 <= n && n <= 16 && (a.complexity_index_type_a = n) } } if (s.chanmape) a.chan_loc |= s.chanmap; else { const t = [40960, 16384, 40960, 57344, 41472, 57856, 47104, 63488]; a.chan_loc |= t[s.acmod] } 0 === s.strmtyp && (a.fscod = s.fscod, a.bsid = s.bsid, a.bsmod = s.bsmod, a.acmod = s.acmod, a.lfeon = s.lfeon), a.chan_loc |= s.lfeon ? 1 : 0; const p = 2 * (s.frmsiz + 1); r += p, u += p + (e || 0) } let c = 0; for (let e = 0; e < 16; e++) a.chan_loc & 1 << e && c++; a.lfeon && c++; let h = 10 + 3 * a.num_ind_sub; const p = [48e3, 44100, 32e3][a.fscod]; a.data_rate = p / 1536 * u * 8, h = 10 + 3 * a.num_ind_sub; for (let e = 0; e < a.num_ind_sub; e++) 0 < a.num_dep_sub[e] && h++; 0 < a.complexity_index_type_a && (h += 2); var f = new Uint8Array(h) , m = { byteOffset: 0, usedBits: 0 }; o.bsWriteAndUpdate(f, m, 32, h), o.bsWriteAndUpdate(f, m, 32, 1684366131), o.bsWriteAndUpdate(f, m, 13, a.data_rate), o.bsWriteAndUpdate(f, m, 3, a.num_ind_sub); for (let e = 0; e < a.num_ind_sub; e++) o.bsWriteAndUpdate(f, m, 2, a.fscod), o.bsWriteAndUpdate(f, m, 5, a.bsid), o.bsWriteAndUpdate(f, m, 1, 0), o.bsWriteAndUpdate(f, m, 1, 0 === e ? 0 : 1), o.bsWriteAndUpdate(f, m, 3, a.bsmod), o.bsWriteAndUpdate(f, m, 3, a.acmod), o.bsWriteAndUpdate(f, m, 1, a.lfeon), o.bsWriteAndUpdate(f, m, 3, 0), o.bsWriteAndUpdate(f, m, 4, a.num_dep_sub[e]), 0 < a.num_dep_sub[e] ? o.bsWriteAndUpdate(f, m, 9, a.chan_loc) : o.bsWriteAndUpdate(f, m, 1, 0); return 0 < a.complexity_index_type_a && (o.bsWriteAndUpdate(f, m, 7, 0), o.bsWriteAndUpdate(f, m, 1, 1), o.bsWriteAndUpdate(f, m, 8, a.complexity_index_type_a)), { samplerate: p, channelCount: c, segmentCodec: "ec3", codec: "ec-3", extraDataBytes: f } }; class J extends c { resetInitSegment(e, t) { this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t } static probe(e, t) { var i = new M(e,t) , t = i.length; return !(!i.hasTimeStamp || 11 !== e[t] || 119 !== e[t + 1] || 16 !== (new H).bsReadAndUpdate(e, { byteOffset: t + 5, usedBits: 0 }, 5)) } append(e, t, i, r, n) { var s = new M(e,this.logger) , a = 90 * s.timeStamp , o = e.length; let d = 0 , l = s.length; if (this.audioConfig || (this.audioConfig = Y(this.observer, e, l, this.logger)), !this.audioConfig) throw "failed to parse ec-3 config"; if (!this.audioTrack) { const e = { id: 258, inputTimescale: 9e4, timescale: NaN, duration: this.duration, encrypted: !1, keyTagInfo: n } , t = { len: 0, sequenceNumber: 0, esSamples: [] }; this.audioTrack = { info: e, parsingData: t, type: "audio", config: this.audioConfig } } var u = j(this.audioConfig, this.audioTrack.info.inputTimescale); for ("zec3" === s.audioType && (this.audioTrack.info.encrypted = !0); l < o; ) { const t = X(this.observer, e, l, this.logger) , i = a + d * u , r = { unit: e.subarray(l, l + t), pts: i, dts: i, keyTagInfo: n }; this.audioTrack.parsingData.esSamples.push(r), this.audioTrack.parsingData.len += t, l += t, d++ } this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, { id3Samples: [{ pts: a, dts: a, data: s.payload, frames: s.frames }], inputTimescale: this.audioTrack.info.inputTimescale }, void 0, t, i, r, n) } } const Z = { BitratesMap: [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160], SamplingRateMap: [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3], SamplesCoefficients: [[0, 72, 144, 12], [0, 0, 0, 0], [0, 72, 144, 12], [0, 144, 144, 12]], BytesInSlot: [0, 1, 1, 4], onFrame: function(e, t, i, r, n, s, a) { r = a + s * (10368e4 / r); e.esSamples.push({ unit: t, pts: r, dts: r }), e.len += t.length }, onNoise: function(e, t) { t.warn("mpeg audio has noise: " + e.length + " bytes") }, parseFrames: function(e, t, i, r, n, s, a) { if (r < i + 2) return -1; if (255 === t[i] || 224 == (224 & t[i + 1])) { if (r < i + 24) return -1; const a = t[i + 1] >> 3 & 3 , c = t[i + 1] >> 1 & 3 , h = t[i + 2] >> 4 & 15 , p = t[i + 2] >> 2 & 3 , f = !!(2 & t[i + 2]); if (1 != a && 0 != h && 15 != h && 3 != p) { var o = 1e3 * [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160][14 * (3 == a ? 3 - c : 3 == c ? 3 : 4) + h - 1] , d = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3][3 * (3 == a ? 0 : 2 == a ? 1 : 2) + p] , l = f ? 1 : 0 , u = t[i + 3] >> 6 == 3 ? 1 : 2 , l = 3 == c ? (3 == a ? 12 : 6) * o / d + l << 2 : (3 == a ? 144 : 72) * o / d + l | 0; return r < i + l ? -1 : (Z.onFrame(e, t.subarray(i, i + l), o, d, u, n, s), l) } } let c = i + 2; for (; c < r; ) { if (255 === t[c - 1] && 224 == (224 & t[c])) return Z.onNoise(t.subarray(i, c - 1), a), c - i - 1; c++ } return -1 }, parse: function(e, t, i, r, n) { var s = t.length; let a, o = 0; for (; i < s && 0 < (a = Z.parseFrames(e, t, i, s, o++, r, n)); ) i += a }, getAudioConfig: function(e, t) { var i = e[t + 1] >> 3 & 3 , r = e[t + 1] >> 1 & 3 , n = e[t + 2] >> 4 & 15 , s = e[t + 2] >> 2 & 3 , a = e[t + 2] >> 1 & 1; if (1 != i && 0 != n && 15 != n && 3 != s) { var o = 3 == i ? 3 - r : 3 == r ? 3 : 4 , o = 1e3 * Z.BitratesMap[14 * o + n - 1] , n = 3 == i ? 0 : 2 == i ? 1 : 2 , s = Z.SamplingRateMap[3 * n + s] , t = e[t + 3] >> 6 == 3 ? 1 : 2 , i = Z.SamplesCoefficients[i][r] , r = Z.BytesInSlot[r]; return { segmentCodec: "mp3", codec: "mp3", samplerate: s, channelCount: t, frameLength: parseInt(i * o / s + a, 10) * r } } }, isHeaderPattern: function(e, t) { return 255 === e[t] && 224 == (224 & e[t + 1]) && 0 != (6 & e[t + 1]) }, probe: function(t, i) { if (i + 1 < t.length && Z.isHeaderPattern(t, i)) { var r = Z.getAudioConfig(t, i); let e = 4; r && r.frameLength && (e = r.frameLength); i = i + e; if (i === t.length || i + 1 < t.length && Z.isHeaderPattern(t, i)) return !0 } return !1 } }; var ee = Z; const te = { name: "MP3Demuxer" }; class ie extends c { resetInitSegment(e, t) { this.audioConfig = void 0, this.audioTrack = void 0, this.duration = t } static probe(e, t) { var i = new M(e,t); let r, n; if (i.hasTimeStamp) for (r = i.length, n = Math.min(e.length - 1, r + 100); r < n; r++) if (ee.probe(e, r)) return t.warn(te, "MPEG Audio sync word found !"), !0; return !1 } append(e, t, i, r, n) { var s = new M(e,this.logger) , a = 90 * s.timeStamp; if (this.audioConfig || (this.audioConfig = ee.getAudioConfig(e, s.length)), !this.audioConfig) throw "unable to parse mp3 header"; if (!this.audioTrack) { const e = { id: 258, inputTimescale: 9e4, timescale: NaN, duration: this.duration, encrypted: !1, keyTagInfo: n } , t = { len: 0, sequenceNumber: 0, esSamples: [] }; this.audioTrack = { info: e, parsingData: t, type: "audio", config: this.audioConfig } } ee.parse(this.audioTrack.parsingData, e, s.length, a, this.logger), this.esRemuxer.remuxEsTracks(this.audioTrack, void 0, { id3Samples: [{ pts: a, dts: a, data: s.payload, frames: s.frames }], inputTimescale: 9e4 }, void 0, t, i, r) } } function re(e, t) { if ("mp4a.40.2" === e) { if (1 === t) return new Uint8Array([0, 200, 0, 128, 35, 128]); if (2 === t) return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]); if (3 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]); if (4 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]); if (5 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]); if (6 === t) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]) } else { if (1 === t) return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); if (2 === t) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); if (3 === t) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]) } return null } function ne(e) { return "number" == typeof e && isFinite(e) } function se(e, i=3) { return JSON.stringify(e, (e,t)=>!isNaN(t) && null != t && t.toFixed ? Number(null == t ? void 0 : t.toFixed(i)) : t) } let ae = !0; function oe(e) { return ae ? "" : e } function de(e) { if (!e) return e; if ("object" != typeof e) return e; { if (Array.isArray(e)) return e.map(de); const r = {}; for (var [t,i] of Object.entries(e)) r[t] = de(i); return r } } function le(e) { const t = [...e]; for (let e = 0; e < t.length; e++) t[e] = Object.assign({}, t[e]), t[e].url = oe(t[e].url), t[e].attrs && (t[e].attrs = Object.assign({}, t[e].attrs), t[e].attrs.URI = oe(t[e].attrs.URI)); return t } function ue(e) { const t = [...e]; for (let e = 0; e < t.length; e++) t[e] = Object.assign({}, t[e]), t[e].url = oe(t[e].url); return t } const ce = Math.pow(2, 32) - 1; class he { static init() { let e; for (e in he.types = { avc1: [], avcC: [], btrt: [], dinf: [], dref: [], esds: [], free: [], ftyp: [], hdlr: [], mdat: [], mdhd: [], mdia: [], mfhd: [], minf: [], moof: [], moov: [], mp4a: [], ".mp3": [], dac3: [], "ac-3": [], dec3: [], "ec-3": [], mvex: [], mvhd: [], pasp: [], sdtp: [], stbl: [], stco: [], stsc: [], stsd: [], stsz: [], stts: [], tfdt: [], tfhd: [], traf: [], trak: [], trun: [], trex: [], tkhd: [], vmhd: [], smhd: [], uuid: [], encv: [], enca: [], frma: [], schm: [], schi: [], senc: [], saio: [], saiz: [], sinf: [], tenc: [], sbgp: [], seig: [], sgpd: [], pssh: [] }, he.types) he.types.hasOwnProperty(e) && (he.types[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)]); var t = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0]) , i = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0]); he.HDLR_TYPES = { video: t, audio: i }; var r = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]) , n = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]); he.STTS = he.STSC = he.STCO = n, he.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), he.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), he.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), he.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]); t = new Uint8Array([105, 115, 111, 109]), i = new Uint8Array([97, 118, 99, 49]), n = new Uint8Array([0, 0, 0, 1]); he.FTYP = he.box(he.types.ftyp, t, n, t, i), he.DINF = he.box(he.types.dinf, he.box(he.types.dref, r)) } static set16(e, t, i) { return t[i] = e >> 8 & 255, t[i + 1] = 255 & e, i + 2 } static set32(e, t, i) { return t[i] = e >> 24 & 255, t[i + 1] = e >> 16 & 255, t[i + 2] = e >> 8 & 255, t[i + 3] = 255 & e, i + 4 } static box(e) { var t = Array.prototype.slice.call(arguments, 1); let i = 8 , r = t.length; for (var n = r; r--; ) i += t[r].byteLength; const s = new Uint8Array(i); for (s[0] = i >> 24 & 255, s[1] = i >> 16 & 255, s[2] = i >> 8 & 255, s[3] = 255 & i, s.set(e, 4), r = 0, i = 8; r < n; r++) s.set(t[r], i), i += t[r].byteLength; return s } static hdlr(e) { return he.box(he.types.hdlr, he.HDLR_TYPES[e]) } static mdat(e) { return he.box(he.types.mdat, e) } static mdhd(e, t) { t *= e; var i = Math.floor(t / (1 + ce)) , t = Math.floor(t % (1 + ce)); return he.box(he.types.mdhd, new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t, 85, 196, 0, 0])) } static mdia(e) { var t = he.mdhd(e.info.timescale, e.info.duration) , i = he.hdlr(e.type) , e = he.minf(e); return he.box(he.types.mdia, t, i, e) } static mfhd(e) { return he.box(he.types.mfhd, new Uint8Array([0, 0, 0, 0, e >> 24, e >> 16 & 255, e >> 8 & 255, 255 & e])) } static minf(e) { return "audio" === e.type ? he.box(he.types.minf, he.box(he.types.smhd, he.SMHD), he.DINF, he.stbl(e)) : he.box(he.types.minf, he.box(he.types.vmhd, he.VMHD), he.DINF, he.stbl(e)) } static moof(e, t) { he.types || he.init(); e = he.traf(t, e); return he.box(he.types.moof, he.mfhd(t.sequenceNumber), e) } static moov(e) { let t = e.length; const i = []; for (; t--; ) i[t] = he.trak(e[t]); return he.box.apply(null, [he.types.moov, he.mvhd(e[0].info.timescale, e[0].info.duration)].concat(i).concat(he.mvex(e))) } static mvex(e) { let t = e.length; const i = []; for (; t--; ) i[t] = he.trex(e[t]); return he.box(he.types.mvex, ...i) } static mvhd(e, t) { t *= e; var i = Math.floor(t / (1 + ce)) , t = Math.floor(t % (1 + ce)) , t = new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255]); return he.box(he.types.mvhd, t) } static sdtp(e) { const t = e.samples || [] , i = new Uint8Array(4 + t.length); let r, n; for (n = 0; n < t.length; n++) r = t[n].flags, i[n + 4] = r.dependsOn << 4 | r.isDependedOn << 2 | r.hasRedundancy; return he.box(he.types.sdtp, i) } static stbl(e) { var t = he.stsd(e) , i = he.box(he.types.stts, he.STTS) , r = he.box(he.types.stsc, he.STSC) , n = he.box(he.types.stsz, he.STSZ) , e = he.box(he.types.stco, he.STCO); return he.box(he.types.stbl, t, i, r, n, e) } static avc1(e) { let t, i, r, n = [], s = []; var a = e.info.encrypted ? he.types.encv : he.types.avc1; for (t = 0; t < e.config.sps.length; t++) i = e.config.sps[t], r = i.byteLength, n.push(r >>> 8 & 255), n.push(255 & r), n = n.concat(Array.prototype.slice.call(i)); for (t = 0; t < e.config.pps.length; t++) i = e.config.pps[t], r = i.byteLength, s.push(r >>> 8 & 255), s.push(255 & r), s = s.concat(Array.prototype.slice.call(i)); var o = he.box(he.types.avcC, new Uint8Array([1, n[3], n[4], n[5], 255, 224 | e.config.sps.length].concat(n).concat([e.config.pps.length]).concat(s))) , d = e.config.width , l = e.config.height , u = e.config.pixelRatio[0] , c = e.config.pixelRatio[1] , h = e.info.encrypted && e.info.keyTagInfo ? he.sinf(e.info.keyTagInfo, e.type, he.types.avc1) : new Uint8Array; return he.box(a, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, d >> 8 & 255, 255 & d, l >> 8 & 255, 255 & l, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 18, 100, 97, 105, 108, 121, 109, 111, 116, 105, 111, 110, 47, 104, 108, 115, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17]), o, h, he.box(he.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), he.box(he.types.pasp, new Uint8Array([u >> 24, u >> 16 & 255, u >> 8 & 255, 255 & u, c >> 24, c >> 16 & 255, c >> 8 & 255, 255 & c]))) } static esds(e) { var t = e.esdsConfig.length; return new Uint8Array([0, 0, 0, 0, 3, 23 + t, 0, 1, 0, 4, 15 + t, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5].concat([t]).concat(e.esdsConfig).concat([6, 1, 2])) } static audioStsd(e) { var t = e.samplerate; return new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e.channelCount, 0, 16, 0, 0, 0, 0, t >> 8 & 255, 255 & t, 0, 0]) } static dac3(e) { e = e.extraData; return new Uint8Array([e >> 16 & 255, e >> 8 & 255, 255 & e]) } static dec3(e) { return e.extraDataBytes } static mp4a(e, t) { let i = he.types.mp4a , r = null; r = e.encrypted && e.keyTagInfo ? (i = he.types.enca, he.sinf(e.keyTagInfo, "audio", he.types.mp4a)) : new Uint8Array; e = he.audioStsd(t), t = he.box(he.types.esds, he.esds(t)); return he.box(i, e, t, r) } static mp3(e) { return he.box(he.types[".mp3"], he.audioStsd(e)) } static ac3(e, t) { let i = he.types["ac-3"] , r = null; return r = e.encrypted && e.keyTagInfo ? (i = he.types.enca, he.sinf(e.keyTagInfo, "audio", he.types["ac-3"])) : new Uint8Array, he.box(i, he.audioStsd(t), he.box(he.types.dac3, he.dac3(t)), r) } static ec3(e, t) { let i = he.types["ec-3"] , r = null; return r = e.encrypted && e.keyTagInfo ? (i = he.types.enca, he.sinf(e.keyTagInfo, "audio", he.types["ec-3"])) : new Uint8Array, he.box(i, he.audioStsd(t), he.box(he.types.dec3, he.dec3(t)), r) } static stsd(e) { if ("audio" !== e.type) return he.box(he.types.stsd, he.STSD, he.avc1(e)); if ("mp3" === e.config.segmentCodec && "mp3" === e.config.codec) return he.box(he.types.stsd, he.STSD, he.mp3(e.config)); if ("ac3" === e.config.segmentCodec) return he.box(he.types.stsd, he.STSD, he.ac3(e.info, e.config)); if ("ec3" === e.config.segmentCodec) return he.box(he.types.stsd, he.STSD, he.ec3(e.info, e.config)); if ("aac" === e.config.segmentCodec) return he.box(he.types.stsd, he.STSD, he.mp4a(e.info, e.config)); throw `unknown segmentCodec ${e.config.segmentCodec}` } static tkhd(e) { var t = e.info.id , i = e.info.duration * e.info.timescale , r = Math.floor(i / (1 + ce)) , i = Math.floor(i % (1 + ce)); let n = 0 , s = 0; return "video" === e.type && (n = e.config.width, s = e.config.height), he.box(he.types.tkhd, new Uint8Array([1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, 255 & t, 0, 0, 0, 0, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, n >> 8 & 255, 255 & n, 0, 0, s >> 8 & 255, 255 & s, 0, 0])) } static traf(e, t) { var i = he.senc(e) , r = he.sdtp(e) , n = i.boxData , s = n.length ? he.saio(76) : new Uint8Array , a = n.length ? he.saiz(i.defaultSampleInfoSize, i.sampleInfoSizes) : new Uint8Array , o = he.sbgp(e) , d = he.sgpd(e) , l = e.id , i = Math.floor(t / (1 + ce)) , t = Math.floor(t % (1 + ce)); return he.box(he.types.traf, he.box(he.types.tfhd, new Uint8Array([0, 2, 0, 0, l >> 24, l >> 16 & 255, l >> 8 & 255, 255 & l])), he.box(he.types.tfdt, new Uint8Array([1, 0, 0, 0, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t])), n, s, a, o, d, he.trun(e, r.length + n.length + o.length + d.length + s.length + a.length + 16 + 20 + 8 + 16 + 8 + 8), r) } static trak(e) { if ("trakData"in e) return e.trakData; e.info.duration = e.info.duration || 4294967295; var t = he.types.trak , i = he.tkhd(e) , e = he.mdia(e); return he.box(t, i, e) } static trex(e) { e = e.info.id; return he.box(he.types.trex, new Uint8Array([0, 0, 0, 0, e >> 24, e >> 16 & 255, e >> 8 & 255, 255 & e, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1])) } static trun(e, t) { const i = e.samples || [] , r = i.length , n = 12 + 16 * r , s = new Uint8Array(n); let a, o, d, l, u, c; for (t += 8 + n, s.set([0, 0, 15, 1, r >>> 24 & 255, r >>> 16 & 255, r >>> 8 & 255, 255 & r, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t], 0), a = 0; a < r; a++) d = (o = i[a]).duration, l = o.size, u = o.flags, c = o.cts, s.set([d >>> 24 & 255, d >>> 16 & 255, d >>> 8 & 255, 255 & d, l >>> 24 & 255, l >>> 16 & 255, l >>> 8 & 255, 255 & l, u.isLeading << 2 | u.dependsOn, u.isDependedOn << 6 | u.hasRedundancy << 4 | u.paddingValue << 1 | u.isNonSync, 61440 & u.degradPrio, 15 & u.degradPrio, c >>> 24 & 255, c >>> 16 & 255, c >>> 8 & 255, 255 & c], 12 + 16 * a); return he.box(he.types.trun, s) } static initSegment(e) { he.types || he.init(); const t = he.moov(e) , i = new Uint8Array(he.FTYP.byteLength + t.byteLength); return i.set(he.FTYP), i.set(t, he.FTYP.byteLength), i } static saio(e) { e = e + 4 + 4; return he.box(he.types.saio, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e])) } static saiz(e, t) { ne(e) || (e = 0); var i = t.length , t = 0 === e ? new Uint8Array(t) : new Uint8Array; return he.box(he.types.saiz, new Uint8Array([0, 0, 0, 0, e, i >> 24 & 255, i >> 16 & 255, i >> 8 & 255, 255 & i]), t) } static senc(e) { const t = e.samples || [] , i = t.length; let r = 0 , n = NaN , s = !0; const a = []; if (!e.encrypted || i <= 0) return { boxData: new Uint8Array, sampleInfoSizes: a, defaultSampleInfoSize: 0 }; e = e.defaultPerSampleIVSize || 0; for (const l of t) l.subsamples && (r += l.subsamples.length); if (r <= 0) return { boxData: new Uint8Array, sampleInfoSizes: a, defaultSampleInfoSize: 0 }; const o = new Uint8Array(2 * i + i * e + 6 * r + 4); let d = this.set32(i, o, 0); for (const l of t) { const t = l.subsamples || []; let e = 2; l.iv && (o.set(l.iv, d), d += l.iv.byteLength, e += l.iv.byteLength), d = this.set16(t.length, o, d); for (const l of t) d = this.set16(l[0], o, d), d = this.set32(l[1], o, d), e += 6; a.push(e), ne(n) || (n = e), s = s && n === e, n = e } return { boxData: he.box(he.types.senc, new Uint8Array([0, 0, 0, 2]), o), defaultSampleInfoSize: s ? n : 0, sampleInfoSizes: a } } static sinf(e, t, i) { return he.box(he.types.sinf, he.frma(i), he.schm(), he.schi(e, t)) } static frma(e) { return he.box(he.types.frma, new Uint8Array(e)) } static schm() { return he.box(he.types.schm, new Uint8Array([0, 0, 0, 0, 99, 98, 99, 115, 0, 1, 0, 0])) } static schi(e, t) { return he.box(he.types.schi, he.tenc(e, t)) } static tenc(e, t) { let i = 0; "video" === t && (i = 25); const r = new Uint8Array(17); if (r[0] = 16, e.iv && 16 === e.iv.byteLength && r.set(e.iv, 1), !e.keyId) throw "tenc: no key id found in decryptdata"; return he.box(he.types.tenc, new Uint8Array([1, 0, 0, 0, 0, i, 1, 0]), e.keyId, r) } static sbgp(e) { if (!e.encrypted || 0 === e.samples.length || !e.samples[0].keyTagInfo) return new Uint8Array; e = e.samples.length; return he.box(he.types.sbgp, new Uint8Array([0, 0, 0, 0]), new Uint8Array(he.types.seig), new Uint8Array([0, 0, 0, 1, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, 0, 1, 0, 1])) } static sgpd(e) { if (!e.encrypted || 0 === e.samples.length || !e.samples[0].keyTagInfo) return new Uint8Array; var t = e.samples[0].keyTagInfo; let i = 0; "video" === e.type && (i = 25); const r = new Uint8Array(17); if (r[0] = 16, t.iv && r.set(t.iv, 1), !t.keyId) throw "sgpd: no keyid in decryptdata"; return he.box(he.types.sgpd, new Uint8Array([1, 0, 0, 0]), new Uint8Array(he.types.seig), new Uint8Array([0, 0, 0, 37, 0, 0, 0, 1]), new Uint8Array([0, i, 1, 0]), t.keyId, r) } static pssh(e, t, i) { if (he.types || he.init(), !e) throw new TypeError("Bad system id"); if (16 !== e.byteLength) throw new RangeError("Invalid system id"); let r, n, s; if (t) { r = 1, n = new Uint8Array(16 * t.length); for (let e = 0; e < t.length; e++) { const i = t[e]; if (16 !== i.byteLength) throw new RangeError("Invalid key"); n.set(i, 16 * e) } } else r = 0, n = new Uint8Array; 0 < r ? (s = new Uint8Array(4), 0 < t.length && new DataView(s.buffer).setUint32(0, t.length, !1)) : s = new Uint8Array; var a = new Uint8Array(4); return i && 0 < i.byteLength && new DataView(a.buffer).setUint32(0, i.byteLength, !1), he.box(he.types.pssh, new Uint8Array([r, 0, 0, 0]), e, s, n, a, i || new Uint8Array) } } var pe, fe, me = he; (yi = pe = pe || {})[yi.SDR = 0] = "SDR", yi[yi.HDR = 1] = "HDR", yi[yi.HDR10 = 2] = "HDR10", yi[yi.DolbyVision = 3] = "DolbyVision", yi[yi.HLG = 4] = "HLG", (Si = fe = fe || {})[Si.H264 = 16] = "H264", Si[Si.HEVC = 64] = "HEVC", Si[Si.VP09 = 65] = "VP09"; const ge = new Set(["ac-3", "mp4a.a5", "mp4a.A5"]) , ye = new Set(["ec-3", "mp4a.a6", "mp4a.A6"]) , ve = { aac: 1024, mp3: 1024, ac3: 1536, ec3: 1536 } , Se = { isAC3: e=>Boolean(e && ge.has(e)), isEC3: e=>Boolean(e && ye.has(e)), isDolbyAtmos(e, t) { const i = t.split("/"); return Boolean(Se.isEC3(e) && 1 < i.length && i[1].split(",").find(e=>"JOC" === e)) }, isAAC(e) { return Boolean(e && ("aac" === e || null !== (e = e.match(/^mp4a\.40\.(.*)/)) && "34" !== e[1])) }, isMP3(e) { return Boolean(e && ("mp3" === e || null !== (e = e.match(/^mp4a\.40\.(.*)/)) && "34" === e[1])) }, isAVC: e=>Boolean(e && e.match(/^avc[13]\.(.*)/)), isXHEAAC: function(e) { return Boolean("mp4a.40.42" === e) }, isALAC: function(e) { return Boolean("alac" === e) }, isFLAC: function(e) { return Boolean("fLaC" === e) }, isHEVC: e=>Boolean(e && e.match(/^(hev|hvc)1\..*/)), isDolby: e=>Boolean(e && e.match(/^dv(h1|he|a1|av)\..*/)), isVP09: e=>Boolean(e && e.match(/^vp09\..*/)), isCompatibleCodecString(e, t) { const i = e.split(",") , r = t.split(",") , n = i.filter(e=>Se.isVideoCodec(e)) , s = r.filter(e=>Se.isVideoCodec(e)) , a = i.filter(e=>Se.isAudioCodec(e)) , o = r.filter(e=>Se.isAudioCodec(e)) , d = 0 === n.length && 0 === s.length || n.length === s.length && Se.isCompatibleVideoCodec(n[0], s[0]) , l = 0 === a.length && 0 === o.length || a.length === o.length && Se.isCompatibleAudioCodec(a[0], o[0]); return d && l }, isVideoCodec: e=>Se.isAVC(e) || Se.isDolby(e) || Se.isHEVC(e), isAudioCodec: e=>Se.isAC3(e) || Se.isEC3(e) || Se.isAAC(e) || Se.isMP3(e), isCompatibleVideoCodec: (e,t)=>Boolean(e && t && (e === t || Se.isDolby(e) && Se.isDolby(t) || Se.isHEVC(e) && Se.isHEVC(t) || Se.isAVC(e) && Se.isAVC(t))), isCompatibleAudioCodec: (e,t)=>Boolean(e && t && (e === t || Se.isAAC(e) && Se.isAAC(t) || Se.isAC3(e) && Se.isAC3(t) || Se.isEC3(e) && Se.isEC3(t) || Se.isMP3(e) && Se.isMP3(t))), getSegmentCodec(e) { let t; if (Se.isAAC(e)) t = "aac"; else if (Se.isAC3(e)) t = "ac3"; else if (Se.isEC3(e)) t = "ec3"; else { if ("mp3" !== e) throw new Error(`invalid audio config, codec ${e}`); t = "mp3" } return t }, getChannelCount(e) { if (!e) return 0; e = e.split("/"), e = parseInt(e[0]); return ne(e) ? e : 0 }, avc1toavcoti(e) { var t; const i = e.split("."); let r; return 2 < i.length ? (r = i.shift() + ".", r += parseInt(null !== (t = i.shift()) && void 0 !== t ? t : "").toString(16), r += ("000" + parseInt(null !== (t = i.shift()) && void 0 !== t ? t : "").toString(16)).substr(-4)) : r = e, r }, getDynamicRangeType(e, t) { let i = pe.SDR; return "PQ" === e && Se.isDolby(t) ? i = pe.DolbyVision : "PQ" === e && (Se.isHEVC(t) || Se.isVP09(t)) ? i = pe.HDR10 : "HLG" !== e || -1 === t.indexOf("hvc1") && !Se.isVP09(t) || (i = pe.HLG), i }, getCompressionType(e) { let t = fe.H264; return Se.isHEVC(e) || Se.isDolby(e) ? t = fe.HEVC : Se.isVP09(e) && (t = fe.VP09), t }, isHigherCodecByFamily(e, t) { if (!e) return !0; const i = e.split(".") , r = t.split("."); if (i[0] !== r[0]) throw new Error(`mismatch in codec family current/new: ${i[0]}/${r[0]}`); switch (i[0]) { case "avc1": case "avc3": return r[1] > i[1]; case "vp09": return e < t; case "hvc1": case "hev1": var n = "H" === i[3].substring(0, 1) ? 1 : 0 , s = i[3].substring(1) , a = "H" === r[3].substring(0, 1) ? 1 : 0 , o = r[3].substring(1); return r[1] > i[1] || r[2] > i[2] || n < a || s < o; case "dvh1": return r[1] > i[1] || r[2] > i[2] } } }; class be { static getTrack(e, t, i, r, n) { let s; switch (Se.getSegmentCodec(i)) { case "aac": var a; (a = E(e, 1 === r ? new Uint8Array([255, 241, 92, 64, 1, 127, 252]) : new Uint8Array([255, 241, 92, 128, 1, 191, 252]), 0, i)) && (s = { type: "audio", info: { id: t, timescale: a.samplerate, duration: 0, encrypted: !1, keyTagInfo: void 0 }, config: a }); break; case "ac3": case "ec3": { const i = q(e, new Uint8Array([11, 119, 69, 17, 128, 64, 47, 132]), 0); i && (s = { type: "audio", info: { id: t, timescale: i.samplerate, duration: 0, encrypted: !1, keyTagInfo: void 0 }, config: i }) } } return s } static getSample(e, t) { let i; switch (e) { case "mp4a.40.2": case "mp4a.40.5": i = 1 === t ? new Uint8Array([0, 208, 0, 7]) : new Uint8Array([33, 0, 3, 64, 104, 28]); break; case "ac-3": case "ec-3": i = new Uint8Array([11, 119, 69, 17, 128, 64, 47, 132, 41, 3, 253, 214, 124, 253, 243, 215, 233, 95, 185, 123, 78, 20, 40, 106, 97, 190, 74, 253, 43, 218, 208, 140, 191, 176, 144, 120, 214, 181, 44, 124, 129, 251, 91, 109, 187, 109, 198, 225, 43, 172, 116, 140, 176, 123, 38, 144, 211, 247, 225, 64, 29, 53, 175, 96, 16, 57, 121, 87, 78, 203, 81, 37, 7, 72, 228, 132, 37, 169, 38, 231, 97, 229, 247, 194, 208, 8, 12, 83, 74, 139, 137, 17, 22, 26, 221, 203, 107, 113, 94, 93, 75, 33, 208, 247, 146, 105, 39, 143, 6, 36, 1, 227, 108, 70, 11, 180, 152, 218, 182, 218, 209, 59, 85, 104, 201, 70, 37, 82, 219, 68, 55, 225, 144, 99, 149, 0, 119, 26, 14, 69, 164, 241, 204, 222, 81, 177, 142, 80, 20, 100, 97, 143, 101, 221, 140, 113, 31, 208, 124, 25, 64, 29, 49, 77, 140, 30, 155, 74, 214, 204, 138, 229, 109, 172, 95, 130, 70, 230, 134, 88, 59, 179, 212, 155, 232, 0, 0, 0, 0, 0, 173, 234]) } return i } static getSegment(e, i, r, n) { if (e) { var s = e.info["timescale"] , a = e.config["segmentCodec"] , o = be.getSample(e.config.codec, e.config.channelCount); if (o) { const d = [] , l = { id: e.info.id, sequenceNumber: i, type: "audio", encrypted: !1, samples: d, defaultPerSampleIVSize: 0 } , u = ve[a] , c = Math.ceil(n * s / u) , h = { baseTime: Math.round(c * u + r), timescale: s }; let t = 0; const p = c * o.byteLength + 8 , f = new Uint8Array(p); f[0] = p >> 24 & 255, f[1] = p >> 16 & 255, f[2] = p >> 8 & 255, f[3] = 255 & p, me.types || me.init(), f.set(me.types.mdat, 4), t += 8; for (let e = 0; e < c; e++) d.push({ duration: u, size: o.byteLength, cts: 0, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: 1, isNonSync: 0, paddingValue: 0 } }), f.set(o, t), t += o.byteLength; const m = me.moof(r, l) , g = new Uint8Array(m.byteLength + f.byteLength); return g.set(m), g.set(f, m.byteLength), { silentFragData: g, endTs: h } } } } } class Te extends h { constructor(e, t, i, r, n) { super(e, t, n), this.typeSupported = i, this.isVideoContiguous = !1, this.logger = n.child({ name: "EsRemuxer" }); const s = navigator.userAgent; this.isSafari = r && -1 < r.indexOf("Apple") && s && !s.match("CriOS") } resetTimeStamp(e) { this._initPTS = this._initDTS = e } resetInitSegment() { this.currentInitTrack = void 0, this._silentAudioTrack = void 0 } remuxEsTracks(r, n, s, a, o, d, l, u, c, h) { let p; d || (this.isVideoContiguous = !1); c = void 0 === c ? o : c; if (!this.currentInitTrack) { if (r && r.config.codec && (this._audioTrackInfo = { id: r.info.id, codec: r.config.codec, channelCount: r.config.channelCount }), n && h && this._audioTrackInfo) { const r = be.getTrack(this.observer, this._audioTrackInfo.id, this._audioTrackInfo.codec, this._audioTrackInfo.channelCount, this.logger); if (r) { this._silentAudioTrack = Object.assign(Object.assign({}, r), { info: Object.assign(Object.assign({}, r.info), { inputTimescale: 9e4 }), parsingData: { len: 0, sequenceNumber: 0, esSamples: [] } }); const s = this._initPTS + Math.round(c * this._silentAudioTrack.info.timescale); p = be.getSegment(this._silentAudioTrack, n.parsingData.sequenceNumber, s, h), n.parsingData.sequenceNumber++ } } else this._silentAudioTrack = void 0; this.updateInitPTSDTS(n, r, o), this.generateIS(this._silentAudioTrack || r, n) } if (this.currentInitTrack) { const f = n && n.parsingData.esSamples.length , m = this.isVideoContiguous; let t, i, e; if (n && h && this._silentAudioTrack && !p) { const r = this._initPTS + Math.round((c + this.config.audioPrimingDelay) * this._silentAudioTrack.info.timescale); p = be.getSegment(this._silentAudioTrack, n.parsingData.sequenceNumber, r, h) } if (r && r.parsingData.esSamples.length) { if (ne(r.info.timescale) || (this.logger.warn("regenerate InitSegment as audio detected"), this.updateInitPTSDTS(n, r, o), this.generateIS(r, n)), t = this.remuxAudio(r, c, d, l, u), f) { let e; t && (e = S(t.endPTS) - S(t.startPTS)), ne(n.info.timescale) || (this.logger.warn("regenerate InitSegment as video detected"), this.updateInitPTSDTS(n, r, o), this.generateIS(r, n)), i = this.remuxVideo(n, c, m, e, h) } } else f && (i = this.remuxVideo(n, c, m, void 0, h)), i && r && r.config.codec && (t = this.remuxEmptyAudio(r, c, d, l, i, u)); p ? e = { data1: i.data1, data2: p.silentFragData, startDTS: i.startDTS, startPTS: i.startPTS, endDTS: y(i.endDTS, p.endTs), endPTS: y(i.endPTS, p.endTs), type: "audiovideo", track: this.currentInitTrack } : i && t ? e = { data1: i.data1, data2: t.data1, startDTS: g(i.startDTS, t.startDTS), startPTS: g(i.startPTS, t.startPTS), endDTS: y(i.endDTS, t.endDTS), endPTS: y(i.endPTS, t.endPTS), type: "audiovideo", track: this.currentInitTrack, dropped: i.dropped, framesWithoutIDR: i.framesWithoutIDR, firstKeyframePts: i.firstKeyframePts } : i ? e = { data1: i.data1, startDTS: i.startDTS, startPTS: i.startPTS, endDTS: i.endDTS, endPTS: i.endPTS, type: "video", track: this.currentInitTrack, dropped: i.dropped, framesWithoutIDR: i.framesWithoutIDR, firstKeyframePts: i.firstKeyframePts } : t ? e = { data1: t.data1, startDTS: t.startDTS, startPTS: t.startPTS, endDTS: t.endDTS, endPTS: t.endPTS, type: "audio", track: this.currentInitTrack } : this.logger.error("Missing video and audio data"), a && a.captionSamples.length && this.remuxText(a, e), null !== (a = null == s ? void 0 : s.id3Samples) && void 0 !== a && a.length && this.remuxID3(s, e), this.observer.trigger(v.FRAG_PARSING_DATA, e) } else this.logger.error("failed to generate IS"); this.observer.trigger(v.FRAG_PARSED) } updateInitPTSDTS(e, t, i) { let r = 1 / 0 , n = 1 / 0; var s = e ? e.parsingData.esSamples : [] , a = t ? t.parsingData.esSamples : []; if (!ne(this._initPTS)) { if (t && a.length && (r = n = a[0].pts - t.info.inputTimescale * i), e && s.length) { const t = e.info.inputTimescale; e.info.timescale = t, r = Math.min(r, s.reduce((e,t)=>{ var i = t.pts - e; return i < -4294967296 ? Ee(e, t.pts) : 0 < i ? e : t.pts } , s[0].pts) - t * i), n = Math.min(n, s[0].dts - t * i), this.observer.trigger(v.INIT_PTS_FOUND, { initPTS: B(r, t) }) } if (ne(r) && ne(n)) this._initPTS = r, this._initDTS = n; else { const e = new D(!1,"invalid initPTS or initDTS",$.InvalidInitTimestamp); this.observer.trigger(x.INTERNAL_ERROR, e) } } } generateIS(e, t) { const i = t ? t.parsingData.esSamples : [] , r = this.typeSupported; let n, s = "audio/mp4"; if (e && t && i.length) { const i = t.info.inputTimescale; t.info.timescale = i, e.info.timescale = e.config.samplerate; const r = he.initSegment([t, e]); n = { type: "audiovideo", container: "video/mp4", codec: `${t.config.codec},${e.config.codec}`, initSegment: r } } else if (e) { "mp3" === (e.info.timescale = e.config.samplerate, e.config.segmentCodec) && (r.mpeg ? (s = "audio/mpeg", e.config.codec = "") : r.mp3 && (e.config.codec = "mp3")); const t = "mp3" === e.config.segmentCodec && r.mpeg ? new Uint8Array : he.initSegment([e]); n = { type: "audio", container: s, codec: e.config.codec, initSegment: t } } else if (t && i.length) { const e = t.info.inputTimescale; t.info.timescale = e; const i = he.initSegment([t]); n = { type: "video", container: "video/mp4", codec: t.config.codec, initSegment: i } } if (n) { this.currentInitTrack = n; const e = { track: n }; this.observer.trigger(v.FRAG_PARSING_INIT_SEGMENT, e) } else { const e = new D(!1,"no audio/video samples found",$.NoAVSamplesFound); this.observer.trigger(x.INTERNAL_ERROR, e) } } remuxVideo(n, e, s, a, o) { let d, l, u, c, h, t, p = 8, i = n.parsingData.dropped; const r = !s && this.config.forceKeyFrameOnDiscontinuity , f = n.parsingData.esSamples , m = n.info.inputTimescale , g = [] , y = n.info.encrypted; let v, S; v = s ? this.nextAvcDts : Ee(f[0].dts, f[0].pts), f.forEach(function(e) { e.pts = Ee(e.pts, v), e.dts = Ee(e.dts, v) }), f.sort(function(e, t) { var i = e.dts - t.dts , r = e.pts - t.pts; return i || r || e.id - t.id }); var b = f.findIndex(e=>e.key); f[b] && (S = f[b].pts), r && (0 < b ? (this.logger.warn(`Dropped ${b} out of ${f.length} video samples due to a missing keyframe`), f.splice(0, b), i += b) : -1 === b && (this.logger.warn(`No keyframe found out of ${f.length} video samples`), i += f.length)); var T = f[0] , E = f[f.length - 1] , I = f.reduce((e,t)=>Math.max(Math.min(e, t.pts - t.dts), -18e3), 0); if (I < 0) { this.logger.warn(`PTS < DTS detected in video samples, shifting DTS by ${Math.round(I / 90)} ms to overcome this issue`); for (let e = 0; e < f.length; e++) f[e].dts += I } var w = this.isSafari; if (d = Math.round((E.dts - T.dts) / (f.length - 1)), c = Math.max(T.dts, 0), u = Math.max(T.pts, 0), ne(o) && (c = e * m, u = e * m), s) { const n = c - v , M = n > d , s = n < -1; (M || s) && (M ? this.logger.warn(`AVC: ${n}/90000 hole between fragments detected`) : this.logger.warn(`AVC: ${n}/90000 overlapping between fragments detected`)) } let A = 0 , O = 0; var k = f.length; for (let e = 0; e < k; e++) { const M = f[e] , s = M.units , a = s.length; let t = 0; for (let e = 0; e < a; e++) t += s[e].data.length; O += t, A += a, M.length = t, M.dts = w ? c + e * d : Math.max(M.dts, c), M.pts = Math.max(M.pts, M.dts) } t = Math.max(E.dts, 0), h = Math.max(E.pts, 0, t), ne(o) && (t = e * m, h = e * m); e = O + 4 * A + 8; try { l = new Uint8Array(e) } catch (n) { const M = new F(!1,`fail allocating video mdat ${e}`,$.FailedToAllocateVideoMdat,e); return void this.observer.trigger(x.INTERNAL_ERROR, M) } const C = new DataView(l.buffer); C.setUint32(0, e), l.set(he.types.mdat, 4); for (let t = 0; t < k; t++) { const M = f[t] , s = M.units; let e, i = 0; const h = []; let r = 0; for (let e = 0, t = s.length; e < t; e++) { const M = s[e] , a = M.data , o = M.data.byteLength; if (C.setUint32(p, o), p += 4, l.set(a, p), p += o, i += 4 + o, y) if (o <= 48 || 1 !== M.type && 5 !== M.type) r += 4 + o; else { let e = o - 32; e % 16 == 0 && (e -= 16), h.push([r + 36, e]), r = o - 32 - e } } if (0 < r && h.push([r, 0]), w) e = Math.max(0, d * Math.round((M.pts - M.dts) / d)); else { if (t < k - 1) d = f[t + 1].dts - M.dts; else { const s = this.config , o = M.dts - f[0 < t ? t - 1 : t].dts; if (s.stretchShortVideoTrack) { const n = s.maxBufferHole , l = s.maxSeekHole , c = Math.floor(Math.min(n, l) * m) , x = (a ? u + a * m : this.nextAudioPts) - M.pts; x > c ? (d = x - o, d < 0 && (d = o)) : d = o } else d = o } e = Math.round(M.pts - M.dts) } ne(o) && (e = 0, d = o * m), g.push({ size: i, duration: d, cts: e, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: M.key ? 2 : 1, isNonSync: M.key ? 0 : 1, paddingValue: 0 }, keyTagInfo: M.keyTagInfo, subsamples: h }) } if (this.nextAvcDts = t + d, this.isVideoContiguous = !0, g.length && -1 < navigator.userAgent.toLowerCase().indexOf("chrome")) { const n = g[0].flags; n.dependsOn = 2, n.isNonSync = 0 } e = { sequenceNumber: n.parsingData.sequenceNumber++, id: n.info.id, type: n.type, encrypted: n.info.encrypted, samples: g, defaultPerSampleIVSize: 0 }, e = he.moof(c + this.config.audioPrimingDelay * m, e); n.parsingData.esSamples = []; const D = new Uint8Array(e.byteLength + l.byteLength); return D.set(e), D.set(l, e.byteLength), { data1: D, startPTS: B(u / m, m), endPTS: B((h + d) / m, m), startDTS: B(c / m, m), endDTS: B(this.nextAvcDts / m, m), type: "video", dropped: i, framesWithoutIDR: b, firstKeyframePts: B(S / m, m) } } remuxAudio(r, i, n, e, s) { const a = r.info.inputTimescale , o = a / r.info.timescale , d = ("aac" === r.config.segmentCodec ? 1024 : "mp3" === r.config.segmentCodec ? 1152 : 1536) * o , l = "mp3" === r.config.segmentCodec && this.typeSupported.mpeg , u = [] , c = r.info.encrypted , t = this._initPTS + i * a; let h, p, f, m, g, y, v, S, b, T, E, I, w, A, O = l ? 0 : 8; const k = new H , C = r.parsingData.esSamples; if (A = this.nextAudioPts, (n = n || C.length && A && (e && Math.abs(t - A) < 9e3 || Math.abs(Ee(C[0].pts - A, t)) < 20 * d)) || (A = Ee(C[0].pts, this._initPTS)), C.forEach(function(e) { e.pts = e.dts = Ee(e.pts, A) }), e && "aac" === r.config.segmentCodec) for (let t = 0, i = A; t < C.length; ) { const M = C[t]; T = M.pts; const o = T - i , l = Math.abs(1e3 * o / a); if (o <= -d) this.logger.warn(`Dropping 1 audio frame @ ${(i / a).toFixed(3)}s due to ${l} ms overlap.`), C.splice(t, 1), r.parsingData.len -= M.unit.length; else if (o >= d && l < 1e4 && i) { const l = Math.round(o / d); this.logger.warn(`Injecting ${l} audio frame @ ${(i / a).toFixed(3)}s due to ${Math.round(1e3 * o / a)} ms gap.`); for (let e = 0; e < l; e++) w = Math.max(i, 0), I = re(r.config.codec, r.config.channelCount), I || (this.logger.warn("Unable to get silent frame for given audio codec; duplicating last frame instead."), I = M.unit.subarray(0)), C.splice(t, 0, { unit: I, pts: w, dts: w, keyTagInfo: s }), r.parsingData.len += I.length, i += d, t += 1; M.pts = M.dts = i, i += d, t += 1 } else i += d, M.pts = M.dts = 0 === t ? A : C[t - 1].pts + d, t += 1 } for (let e = 0, t = C.length; e < t; e++) { if (p = C[e], m = p.unit, T = p.pts, E = p.dts, void 0 !== b) f.duration = Math.round((E - b) / o); else { const i = Math.round(1e3 * (T - A) / a); let t = 0; if (n && "aac" === r.config.segmentCodec && i) { if (0 < i && i < 1e4) t = Math.round((T - A) / d), 0 < t && (I = re(r.config.codec, r.config.channelCount), I = I || m.subarray(0), r.parsingData.len += t * I.length); else if (i < -12) { r.parsingData.len -= m.byteLength; continue } T = E = A } if (v = Math.max(0, T), S = Math.max(0, E), !(0 < r.parsingData.len)) return; { const i = l ? r.parsingData.len : r.parsingData.len + 8; try { g = new Uint8Array(i) } catch (r) { const n = new F(!1,`fail allocating audio mdat ${i}`,$.FailedToAllocateAudioMdat,i); return void this.observer.trigger(x.INTERNAL_ERROR, n) } l || (h = new DataView(g.buffer), h.setUint32(0, i), g.set(he.types.mdat, 4)) } for (let e = 0; e < t; e++) w = T - (t - e) * d, I = re(r.config.codec, r.config.channelCount), I || (this.logger.warn("Unable to get silent frame for given audio codec; duplicating this frame instead."), I = m.subarray(0)), g.set(I, O), O += I.byteLength, f = { size: I.byteLength, cts: 0, duration: 1024, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: 1, paddingValue: 0, isNonSync: 0 }, keyTagInfo: p.keyTagInfo, subsamples: c ? [[I.byteLength, 0]] : [] }, u.push(f) } g.set(m, O); const M = m.byteLength; O += M; const s = []; if (c) if ("ec3" === r.config.segmentCodec) { let e = 0; for (; e < m.byteLength; ) { const i = 2 * (k.bsReadAndUpdate(m, { byteOffset: e + 2, usedBits: 5 }, 11) + 1); e += i; const n = Math.min(i, 16); s.push([n, i - n]) } } else { const r = Math.min(M, 16); s.push([r, M - r]) } f = { size: M, cts: 0, duration: 0, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: 1, paddingValue: 0, isNonSync: 0 }, keyTagInfo: p.keyTagInfo, subsamples: s }, u.push(f), b = E } let D = 0; e = u.length; if (2 <= e && (D = u[e - 2].duration, f.duration = D), e) { if (this.nextAudioPts = T + o * D, r.parsingData.len = 0, l) y = new Uint8Array; else { const i = { sequenceNumber: r.parsingData.sequenceNumber++, id: r.info.id, type: r.type, encrypted: r.info.encrypted, samples: u, defaultPerSampleIVSize: 0 }; y = he.moof((S + this.config.audioPrimingDelay * a) / o, i) } const i = new Uint8Array(y.byteLength + g.byteLength); return i.set(y), i.set(g, y.byteLength), r.parsingData.esSamples = [], { data1: i, startPTS: B(v / a, a), endPTS: B(this.nextAudioPts / a, a), startDTS: B(S / a, a), endDTS: B((E + o * D) / a, a), type: "audio" } } return null } remuxEmptyAudio(t, e, i, r, n, s) { var a = t.info.inputTimescale , o = a / (t.config.samplerate || a) , d = this.nextAudioPts , l = (void 0 !== d ? d : S(n.startDTS) * a) + this._initDTS , a = S(n.endDTS) * a + this._initDTS , u = 1024 * o , c = Math.ceil((a - l) / u) , h = re(t.config.codec, t.config.channelCount); if (this.logger.warn("remux empty Audio"), !h) return this.logger.error("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!"), null; const p = []; for (let e = 0; e < c; e++) { const i = l + e * u; p.push({ unit: h, pts: i, dts: i, keyTagInfo: s }), t.parsingData.len += h.length } return t.parsingData.esSamples = p, this.remuxAudio(t, e, i, r, s) } remuxID3(t, e) { var i = t.id3Samples.length; let r; var n = t.inputTimescale; if (i) { for (let e = 0; e < i; e++) r = t.id3Samples[e], r.pts = r.pts / n, r.dts = r.dts / n; e.id3Samples = t.id3Samples } t.id3Samples = [] } remuxText(t, e) { t.captionSamples.sort(function(e, t) { return e.pts - t.pts }); var i = t.captionSamples.length; let r; var n = t.inputTimescale; if (i) { for (let e = 0; e < i; e++) r = t.captionSamples[e], r.pts = r.pts / n; e.captionData || (e.captionData = {}), e.captionData.ts = t.captionSamples } t.captionSamples = [] } } function Ee(e, t) { var i; if (void 0 === t) return e; for (i = t < e ? -8589934592 : 8589934592; 4294967296 < Math.abs(e - t); ) e += i; return e } e = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : void 0 !== jy ? jy : {}; function Ie(e) { try { return JSON.stringify(e) } catch (e) { return '"[Circular]"' } } function we(e, t, i) { var r = i && i.stringify || Ie; if ("object" == typeof e && null !== e) { var n = t.length + 1; if (1 === n) return e; var s = new Array(n); s[0] = r(e); for (var a = 1; a < n; a++) s[a] = r(t[a]); return s.join(" ") } if ("string" != typeof e) return e; var o = t.length; if (0 === o) return e; for (var d = "", l = 0, u = -1, c = e && e.length || 0, h = 0; h < c; ) { if (37 === e.charCodeAt(h) && h + 1 < c) { switch (u = -1 < u ? u : 0, e.charCodeAt(h + 1)) { case 100: if (o <= l) break; if (u < h && (d += e.slice(u, h)), null == t[l]) break; d += Number(t[l]), u = h += 2; break; case 79: case 111: case 106: if (o <= l) break; if (u < h && (d += e.slice(u, h)), void 0 === t[l]) break; var p = typeof t[l]; if ("string" == p) { d += "'" + t[l] + "'", u = h + 2, h++; break } if ("function" == p) { d += t[l].name || "", u = h + 2, h++; break } d += r(t[l]), u = h + 2, h++; break; case 115: if (o <= l) break; u < h && (d += e.slice(u, h)), d += String(t[l]), u = h + 2, h++; break; case 37: u < h && (d += e.slice(u, h)), d += "%", u = h + 2, h++ } ++l } ++h } return -1 === u ? e : (u < c && (d += e.slice(u)), d) } var Ae = Ce; const Oe = function() { function t(e) { return void 0 !== e && e } try { return "undefined" != typeof globalThis || Object.defineProperty(Object.prototype, "globalThis", { get: function() { return delete Object.prototype.globalThis, this.globalThis = this }, configurable: !0 }), globalThis } catch (e) { return t(jy) || t(window) || t(this) || {} } }().console || {} , ke = { mapHttpRequest: Re, mapHttpResponse: Re, wrapRequestSerializer: Le, wrapResponseSerializer: Le, wrapErrorSerializer: Le, req: Re, res: Re, err: function(e) { const t = { type: e.constructor.name, msg: e.message, stack: e.stack }; for (const i in e) void 0 === t[i] && (t[i] = e[i]); return t } }; function Ce(s) { (s = s || {}).browser = s.browser || {}; const a = s.browser.transmit; if (a && "function" != typeof a.send) throw Error("pino: transmit option must have a send function"); const e = s.browser.write || Oe; s.browser.write && (s.browser.asObject = !0); const o = s.serializers || {} , d = (t = s.browser.serialize, i = o, Array.isArray(t) ? t.filter(function(e) { return "!stdSerializers.err" !== e }) : !0 === t && Object.keys(i)); var t, i; let r = s.browser.serialize; Array.isArray(s.browser.serialize) && -1 < s.browser.serialize.indexOf("!stdSerializers.err") && (r = !1), "function" == typeof e && (e.error = e.fatal = e.warn = e.info = e.debug = e.trace = e), !1 === s.enabled && (s.level = "silent"); const n = s.level || "info" , l = Object.create(e); l.log || (l.log = _e), Object.defineProperty(l, "levelVal", { get: function() { return "silent" === this.level ? 1 / 0 : this.levels.values[this.level] } }), Object.defineProperty(l, "level", { get: function() { return this._level }, set: function(e) { if ("silent" !== e && !this.levels.values[e]) throw Error("unknown level " + e); this._level = e, De(u, l, "error", "log"), De(u, l, "fatal", "error"), De(u, l, "warn", "error"), De(u, l, "info", "log"), De(u, l, "debug", "log"), De(u, l, "trace", "log") } }); const u = { transmit: a, serialize: d, asObject: s.browser.asObject, levels: ["error", "fatal", "warn", "info", "debug", "trace"], timestamp: "function" == typeof (i = s).timestamp ? i.timestamp : !1 === i.timestamp ? Ne : Fe }; return l.levels = Ce.levels, l.level = n, l.setMaxListeners = l.getMaxListeners = l.emit = l.addListener = l.on = l.prependListener = l.once = l.prependOnceListener = l.removeListener = l.removeAllListeners = l.listeners = l.listenerCount = l.eventNames = l.write = l.flush = _e, l.serializers = o, l._serialize = d, l._stdErrSerialize = r, l.child = function(t) { if (!t) throw new Error("missing bindings for child Pino"); var i, r, e = t.serializers; function n(e) { this._childLevel = 1 + (0 | e._childLevel), this.error = Pe(e, t, "error"), this.fatal = Pe(e, t, "fatal"), this.warn = Pe(e, t, "warn"), this.info = Pe(e, t, "info"), this.debug = Pe(e, t, "debug"), this.trace = Pe(e, t, "trace"), i && (this.serializers = i, this._serialize = r), a && (this._logEvent = xe([].concat(e._logEvent.bindings, t))) } return d && e && (i = Object.assign({}, o, e), r = !0 === s.browser.serialize ? Object.keys(i) : d, delete t.serializers, Me([t], r, i, this._stdErrSerialize)), n.prototype = this, new n(this) } , a && (l._logEvent = xe()), l } function De(e, t, i, r) { var n, s, a, o, d = Object.getPrototypeOf(t); t[i] = !(t.levelVal > t.levels.values[i]) && (d[i] || Oe[i] || Oe[r]) || _e, s = t, a = i, !(n = e).transmit && s[a] === _e || (s[a] = (o = s[a], function() { const e = n.timestamp() , t = new Array(arguments.length) , i = Object.getPrototypeOf && Object.getPrototypeOf(this) === Oe ? Oe : this; for (var r = 0; r < t.length; r++) t[r] = arguments[r]; if (n.serialize && !n.asObject && Me(t, this._serialize, this.serializers, this._stdErrSerialize), n.asObject ? o.call(i, function(e, t, i, r) { e._serialize && Me(i, e._serialize, e.serializers, e._stdErrSerialize); const n = i.slice(); let s = n[0]; const a = {}; r && (a.time = r), a.level = Ce.levels.values[t]; let o = 1 + (0 | e._childLevel); if (o < 1 && (o = 1), null !== s && "object" == typeof s) { for (; o-- && "object" == typeof n[0]; ) Object.assign(a, n.shift()); s = n.length ? we(n.shift(), n) : void 0 } else "string" == typeof s && (s = we(n.shift(), n)); return void 0 !== s && (a.msg = s), a }(this, a, t, e)) : o.apply(i, t), n.transmit) { const o = n.transmit.level || s.level , i = Ce.levels.values[o] , r = Ce.levels.values[a]; r < i || function(e, t, i) { const r = t.send , n = t.ts , s = t.methodLevel , a = t.methodValue , o = t.val , d = e._logEvent.bindings; Me(i, e._serialize || Object.keys(e.serializers), e.serializers, void 0 === e._stdErrSerialize || e._stdErrSerialize), e._logEvent.ts = n, e._logEvent.messages = i.filter(function(e) { return -1 === d.indexOf(e) }), e._logEvent.level.label = s, e._logEvent.level.value = a, r(s, e._logEvent, o), e._logEvent = xe(d) }(this, { ts: e, methodLevel: a, methodValue: r, transmitLevel: o, transmitValue: Ce.levels.values[n.transmit.level || s.level], send: n.transmit.send, val: s.levelVal }, t) } } )) } function Me(e, t, i, r) { for (const n in e) if (r && e[n]instanceof Error) e[n] = Ce.stdSerializers.err(e[n]); else if ("object" == typeof e[n] && !Array.isArray(e[n])) for (const r in e[n]) t && -1 < t.indexOf(r) && r in i && (e[n][r] = i[r](e[n][r])) } function Pe(i, r, n) { return function() { try{const e = new Array(1 + arguments.length); e[0] = r; for (var t = 1; t < e.length; t++) e[t] = arguments[t - 1]; return i[n].apply(this, e) } catch(e){} } } function xe(e) { return { ts: 0, messages: [], bindings: e || [], level: { label: "", value: 0 } } } function Re() { return {} } function Le(e) { return e } function _e() {} function Ne() { return !1 } function Fe() { return Date.now() } let Be; function Ue(e={}) { return Object.assign(Object.assign({}, e), { customLevels: Object.assign(Object.assign({}, e.customLevels || {}), { qe: 35 }) }) } Ce.levels = { values: { fatal: 60, error: 50, warn: 40, info: 30, debug: 20, trace: 10 }, labels: { 10: "trace", 20: "debug", 30: "info", 40: "warn", 50: "error", 60: "fatal" } }, Ce.stdSerializers = ke, Ce.stdTimeFunctions = Object.assign({}, { nullTime: Ne, epochTime: Fe, unixTime: function() { return Math.round(Date.now() / 1e3) }, isoTime: function() { return new Date(Date.now()).toISOString() } }); const $e = ()=>{} ; function Ve(e, t) { const i = (e = t in e ? e : console)[t] || e.log; return i ? i.bind(e) : $e } function Ke(r, n, e) { var {time: s, sessionId: t, critical: i, name: a, msg: o} = e; let d = ""; if ("data"in e) try { const r = [] , n = []; d = JSON.stringify(e.data, (e,t)=>{ if ("object" == typeof t && null !== t) { var i = n.indexOf(t); if (-1 !== i) return `[Circular object reference: '${r[i]}']`; r.push(e), n.push(t) } return t } ) } catch (r) { d = `Log serialization error: "${r}"` } r(`${function() { const e = new Date(s) , t = e.getTimezoneOffset() , i = He(Math.floor(Math.abs(t) / 60)) , r = He(Math.abs(t) % 60); let n = t <= 0 ? "UTC+" + i : "UTC-" + i; return n = r ? n + ":" + r : n, e.getFullYear() + "-" + He(e.getMonth() + 1) + "-" + He(e.getDate()) + " " + He(e.getHours()) + ":" + He(e.getMinutes()) + ":" + He(e.getSeconds()) + "." + (e.getMilliseconds() / 1e3).toFixed(3).slice(2, 5) + " " + n }()}| [SessionID: ${t}] | [${n}] >${i ? " [QE Critical]" : ""} [${a}] ${o || ""} ${d}`) } function He(e) { return e < 10 ? "0" + e : e.toString() } function je(e, t=1 / 0) { if (!e) return ""; const i = new Uint8Array(e); let r, n = ""; for (r = 0; r < i.length && r < t; r++) { let e = i[r].toString(16); e.length < 2 && (e = "0" + e), n += e } return n } const qe = ()=>(Be || (Be = Ae(Ue()).child({ name: "hls" }), Be.qe = e=>Be.info(e), Be.warn("getLogger called without hls object instantiated, returning a logger that is not configured")), Be) , Qe = { bin2str: e=>String.fromCharCode.apply(null, Array.from(e)), readUint16(e, t) { t = e[t] << 8 | e[t + 1]; return t < 0 ? 65536 + t : t }, readSint32: (e,t)=>e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3], readUint32(e, t) { t = Qe.readSint32(e, t); return t < 0 ? 4294967296 + t : t }, writeUint32(e, t, i) { e[t] = i >> 24, e[t + 1] = i >> 16 & 255, e[t + 2] = i >> 8 & 255, e[t + 3] = 255 & i }, readUint64(e, t) { var i = Qe.readUint32(e, t); return i *= Math.pow(2, 32), i += Qe.readUint32(e, t + 4) }, writeUint64(e, t, i) { var r = Math.pow(2, 32) - 1 , n = Math.floor(i / (1 + r)) , r = Math.floor(i % (1 + r)); Qe.writeUint32(e, t, n), Qe.writeUint32(e, t + 4, r) }, findBox(e, t) { let i, r, n, s, a, o = []; if (!t.length) return []; for (i = 0; i < e.byteLength; ) r = Qe.readUint32(e, i), n = Qe.bin2str(e.subarray(i + 4, i + 8)), s = 1 < r ? i + r : e.byteLength, n === t[0] && (1 === t.length ? o.push(e.subarray(i + 8, s)) : (a = Qe.findBox(e.subarray(i + 8, s), t.slice(1))).length && (o = o.concat(a))), i = s; return o }, findBoxWithOffset(e, t, i, r) { let n, s, a, o, d, l = []; if (!i.length) return []; for (n = 0; n < e.byteLength; ) s = Qe.readUint32(e, n), a = Qe.bin2str(e.subarray(n + 4, n + 8)), o = 1 < s ? n + s : e.byteLength, a === i[0] && (r && r.push({ offset: n + t, type: a, size: s }), 1 === i.length ? l.push({ offset: n + t, type: a, data: e.subarray(n + 8, o), boxSize: s, walkedPath: r ? r.slice(0) : void 0 }) : (d = Qe.findBoxWithOffset(e.subarray(n + 8, o), n + t + 8, i.slice(1), r ? r.slice(0) : void 0)).length && (l = l.concat(d), r = r ? r.slice(0, -1) : void 0)), n = o; return l } } , Ge = { name: "MP4EncryptionRemuxer" }; class We extends h { constructor(e, t, i, r, n) { super(e, t, n) } static _isCommonEncryptionInternal(e) { return Boolean(e && !("NONE" === e || "AES-128" === e)) } static remuxInitSegment(c, h, p, f) { if (!p) return c; let e = c; if (We._isCommonEncryptionInternal(p.method)) { const m = p.keyId; let u = !1; const g = []; if (Qe.findBoxWithOffset(c, 0, ["moov", "trak"]).forEach(t=>{ const o = t.data; let d, i = 0; const l = Qe.findBoxWithOffset(o, 0, ["mdia", "minf", "stbl", "stsd"], [])[0] , e = l.data.subarray(8); let r = !0 , n = Qe.findBoxWithOffset(e, l.offset + 16, ["enca"]); 0 === n.length && (r = !1, n = Qe.findBoxWithOffset(e, l.offset + 16, ["encv"])), n.forEach(s=>{ let e = null , a = null; i = r ? (e = s.data.subarray(28), d = "audio", l.offset + 16 + 8 + 28) : (e = s.data.subarray(78), d = "video", l.offset + 16 + 8 + 78), e && Qe.findBoxWithOffset(e, i, ["sinf"]).forEach(e=>{ const t = e.data , i = Qe.findBox(t, ["frma"])[0] , r = Qe.findBox(t, ["schm"])[0]; if (i) if (r) { var n = Qe.bin2str(r.subarray(4, 8)); if ("aac " === Qe.bin2str(i.subarray(0, 4)) && (me.types || me.init(), i.set(me.types.mp4a, 0)), "cbcs" === n || "cenc" === n) { f && f.push(t); const e = Qe.findBox(t, ["schi", "tenc"])[0]; if (e) { const h = 8; e.subarray(8, 24), e.set(m, 8); const f = e[6] , t = e[7]; if (1 === f && 0 === t) { const h = e[24]; 0 < h && p.iv && h === p.iv.length && e.set(p.iv, 25) } } } else if ("cbc2" === n) { u = !0, me.types || me.init(); const h = Qe.findBoxWithOffset(t, 0, ["frma"])[0] , f = me.box(me.types.schi, me.tenc(p, d)) , m = me.box(me.types.sinf, t.subarray(h.offset, h.boxSize), me.schm(), f); a = me.box(me.types.trak, o.subarray(0, e.offset), m, o.subarray(e.offset + e.boxSize)); const i = a.subarray(8) , r = m.byteLength - e.boxSize; l.walkedPath && (l.walkedPath.push({ type: "stsd", offset: s.offset, size: s.boxSize }), l.walkedPath.forEach(e=>{ Qe.writeUint32(i, e.offset, e.size + r) } )) } } else h.error(Ge, "missing schm box"); else h.error(Ge, "missing frma box") } ), a = a || c.subarray(t.offset, t.offset + t.boxSize), g.push(a) } ); var s = Qe.findBoxWithOffset(o, 0, ["edts"])[0]; s && (me.types || me.init(), o.set(me.types.free, s.offset + 4)) } ), u) { const p = We.remuxCbc2InitSegment(c, g, h); e = p || c } } return e } static remuxCbc2InitSegment(i, r, n) { const s = Qe.findBoxWithOffset(i, 0, ["ftyp"])[0]; if (s) { const a = Qe.findBoxWithOffset(i, s.boxSize, ["moov"])[0]; let e = [] , t = 0; for (; t < a.data.byteLength; ) { const i = Qe.readUint32(a.data, t) , n = Qe.bin2str(a.data.subarray(t + 4, t + 8)) , s = 1 < i ? t + i : a.data.byteLength; "trak" === n ? r && (e = e.concat(r), r = void 0) : e.push(a.data.subarray(t, s)), t = s } const o = me.box(me.types.moov, ...e) , d = new Uint8Array(s.boxSize + o.byteLength); return d.set(i.subarray(0, s.boxSize)), d.set(o, s.boxSize), d } n.error(Ge, "no ftyp found") } static remuxOverflowSegment(i, e) { me.types || me.init(); const t = Qe.findBoxWithOffset(i, 0, ["moof", "traf", "tfdt"], []); let r, n = i.byteLength; if (t.forEach(e=>{ 0 === e.data[0] && (n += 4) } ), n > i.byteLength) { r = new Uint8Array(n); let e = 0 , t = 0; for (; t < i.byteLength; ) { const n = Qe.readUint32(i, t) , s = Qe.bin2str(i.subarray(t + 4, t + 8)) , a = 1 < n ? t + n : i.byteLength; if ("moof" === s) { const n = We.remuxOverflowMoof(i.subarray(t + 8, a)); r.set(n, e), e += n.byteLength } else r.set(i.subarray(t, a), e), e += n; t = a } } else e.warn(Ge, "no increase in size"); return r || i } static remuxOverflowMoof(e) { let t = 0; const i = []; for (; t < e.byteLength; ) { const r = Qe.readUint32(e, t); if ("traf" === Qe.bin2str(e.subarray(t + 4, t + 8))) { const s = We.remuxOverflowTraf(e.subarray(t + 8, t + r)); i.push(s) } else i.push(e.subarray(t, t + r)); t = 1 < r ? t + r : e.byteLength } const r = me.box(me.types.moof, ...i) , s = r.byteLength - e.byteLength - 8; return Qe.findBoxWithOffset(r, 0, ["moof", "traf", "trun"], []).forEach(e=>{ var t; 0 != (1 & e.data[3]) && (t = Qe.readUint32(e.data, 8), Qe.writeUint32(e.data, 8, t + s)) } ), Qe.findBoxWithOffset(r, 0, ["moof", "traf", "saio"], []).forEach(t=>{ const i = 1 & t.data[0]; let r = 4; 1 & t.data[3] && (r += 8); var n = Qe.readUint32(t.data, r); if (r += 4, i) for (let e = 0; e < n; e++) { const i = Qe.readUint64(t.data, r); Qe.writeUint64(t.data, r, i + s), r += 8 } else for (let e = 0; e < n; e++) { const i = Qe.readUint32(t.data, r); Qe.writeUint32(t.data, r, i + s), r += 4 } } ), r } static remuxOverflowTraf(e) { let t = 0; const i = []; for (; t < e.byteLength; ) { var r, n = Qe.readUint32(e, t); "tfdt" === Qe.bin2str(e.subarray(t + 4, t + 8)) && 0 === e[t + 8] ? (r = Qe.readUint32(e, t + 12), r = me.box(me.types.tfdt, new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r])), i.push(r)) : i.push(e.subarray(t, t + n)), t = 1 < n ? t + n : e.byteLength } return me.box(me.types.traf, ...i) } remuxText(e, t) { e.captionSamples.sort(function(e, t) { return e.pts - t.pts }), e.captionSamples.length && (t.captionData || (t.captionData = {}), t.captionData.mp4 = e.captionSamples), e.captionSamples = [] } remuxIFrame(e, t, i, r, n) { if (!t.samples || !t.samples.length || !t.samples[0].data) return null; let s; const a = me.moof(e * t.timescale, t) , o = new Uint8Array(a.byteLength + t.samples[0].data.byteLength + 8); o.set(a), Qe.writeUint32(o, a.byteLength, t.samples[0].data.byteLength + 8), o.set(me.types.mdat, a.byteLength + 4), o.set(t.samples[0].data, a.byteLength + 8), t.sequenceNumber++; var d = t.timescale , l = B(e + r, d) , d = B(e, d); let u, c; u = i ? (s = "audiovideo", i.sequenceNumber = t.sequenceNumber, t.sequenceNumber++, c = be.getSegment(i, i.sequenceNumber, e * i.info.timescale, r), y(c.endTs, l)) : (s = "video", l); n = { data1: o, data2: null == c ? void 0 : c.silentFragData, startPTS: d, startDTS: d, endPTS: u, endDTS: u, type: s, dropped: 0, track: n }; this.observer.trigger(v.FRAG_PARSING_DATA, n), this.observer.trigger(v.FRAG_PARSED) } remuxRawData(e, t, i, r, n, s, a, o, d) { let l; t && r ? l = "audiovideo" : t ? l = "audio" : r && (l = "video"); const u = Math.max(i, e) , c = { data1: o, track: d, startPTS: B(s, a), startDTS: B(s, a), endPTS: void 0, endDTS: void 0, type: l, dropped: 0 }; return u && (c.endPTS = B(s + u, a), c.endDTS = B(s + u, a)), n && n.captionSamples.length && this.remuxText(n, c), this.observer.trigger(v.FRAG_PARSING_DATA, c), this.observer.trigger(v.FRAG_PARSED), c } remuxEmsg(e, t, i, r, n, s, a) { let o = ""; e && (o += "audio"), t && (o += "video"); n = B(r, n), a = { data1: s, startPTS: n, startDTS: n, endPTS: void 0, endDTS: void 0, type: o, dropped: 0, track: a }; return i && 0 < i.id3Samples.length && this.remuxID3(i, a), this.observer.trigger(v.FRAG_PARSING_DATA, a), this.observer.trigger(v.FRAG_PARSED), a } remuxID3(t, e) { let i; var r = t.id3Samples.length; if (r) { for (let e = 0; e < r; e++) i = t.id3Samples[e], i.pts = i.pts - 10, i.dts = i.dts - 10; e.id3Samples = [...t.id3Samples] } t.id3Samples = [] } } const ze = Math.pow(2, 32) - 1 , Xe = Math.pow(2, 20) - 1 , Ye = { name: "MP4Demuxer" }; class Je extends u { constructor(e, t, i, r, n) { super(e, t, i, {}, n), this.mp4Remuxer = t, this.audioPrimingDelay = i.audioPrimingDelay } resetTimeStamp(e) { ne(e) ? this.initData.audio && !this.initData.video ? this.initPtsTs = { baseTime: Math.round(e * this.initData.audio.timescale / 9e4), timescale: this.initData.audio.timescale } : this.initPtsTs = { baseTime: e, timescale: 9e4 } : this.initPtsTs = void 0 } static isHEVCFlavor(e) { if (!e) return !1; var t = e.indexOf(".") , t = t < 0 ? e : e.substring(0, t); return "hvc1" === t || "hev1" === t || "chvc" === t || "qhvc" === t || "qhev" === t || "muxa" === t || "dvh1" === t || "dvhe" === t || "cdh1" === t || "qdh1" === t || "qdhe" === t } resetInitSegment(t, i, r) { if (this._silentAudioTrack = void 0, t && t.byteLength) { var n = We.remuxInitSegment(t, this.logger, r) , s = this.initData = Je.parseInitSegment(n); let e; s.foundLargeTimescale && this.logger.warn(Ye, "large timescale found, will check for 32 bit tfdts"); var a = s.audioCodec , r = s.videoCodec; if (s.audio && s.video ? e = { type: "audiovideo", container: "video/mp4", codec: a + "," + r, initSegment: n } : (s.audio && a && (e = { type: "audio", container: "audio/mp4", codec: a, initSegment: n }), s.video && r && (e = { type: "video", container: "video/mp4", codec: r, initSegment: n })), s.video) { const o = s.video , d = t.subarray(o.trakOffset, o.trakOffset + o.trakSize); this._videoTrack = Object.assign(Object.assign({}, o), { info: { id: o.id, timescale: o.timescale, duration: i }, trakData: d, sequenceNumber: 0, samples: [] }), this.trySEICaptions = !Se.isVP09(r), this._captionTrack = Object.assign(Object.assign({}, s.caption), { sequenceNumber: 0, captionSamples: [] }) } s.audio && a && (this._audioTrack = Object.assign({}, s.audio)), s.caption && (this.trySEICaptions = !1, this._captionTrack = Object.assign(Object.assign({}, s.caption), { sequenceNumber: 0, captionSamples: [] })), this.remuxedInitDataTrack = e; s = { track: e }; this.observer.trigger(v.FRAG_PARSING_INIT_SEGMENT, s) } } static probe(e, t) { return 0 < Qe.findBox(e.subarray(0, Math.min(e.length, 512e3)), ["moof"]).length } static parseHvcC(e) { let t; var i, r; return e ? 1 === (i = e[0]) ? (r = e[1], t = { profileSpace: r >> 6, tierFlag: (32 & r) >> 5 ? "H" : "L", profileIDC: 31 & r, profileCompat: Qe.readUint32(e, 2), constraintIndicator: e.subarray(6, 12), levelIDC: e[12] }) : qe().warn(Ye, `Unhandled version ${i} in hvcC box`) : qe().warn(Ye, "No hvcC box"), t } static hvcCToCodecString(t, i) { const r = t + "." + (i.profileSpace ? String.fromCharCode(i.profileSpace + "A" - 1) : "") + i.profileIDC + "." + i.profileCompat.toString(16).toUpperCase() + "." + i.tierFlag + i.levelIDC; let n = ""; for (let e = i.constraintIndicator.length - 1; 0 <= e; --e) { const r = i.constraintIndicator[e]; if (0 !== r || "" !== n) { const t = r.toString(16).toUpperCase(); n = "." + ("" === n ? t : t + n) } } return r + n } static parseDvcC(e) { let t; return e ? t = { versionMajor: e[0], versionMinor: e[1], profile: e[2] >> 1 & 127, level: e[2] << 5 & 32 | e[3] >> 3 & 31 } : qe().warn(Ye, "No dvcC box"), t } static dvcCToCodecString(e, t) { return e + "." + (t.profile < 10 ? "0" + t.profile : t.profile) + "." + (t.level < 10 ? "0" + t.level : t.level) } static parseVpcC(e) { let t; return e ? t = { profile: e[4], level: e[5], bitDepth: e[6] >> 4 & 15 } : qe().warn(Ye, "No vpcC box"), t } static vpcCToCodecString(e, t) { return e + "." + (t.profile < 10 ? "0" + t.profile : t.profile) + "." + (t.level < 10 ? "0" + t.level : t.level) + "." + t.bitDepth } static parseInitSegment(e) { const c = { foundLargeTimescale: !1, tracksById: {} }; return Qe.findBoxWithOffset(e, 0, ["moov", "trak"]).forEach(t=>{ const i = t.data , r = Qe.findBox(i, ["tkhd"])[0]; if (r) { var n = 0 === (a = r[0]) ? 12 : 20 , s = Qe.readUint32(r, n) , e = Qe.findBox(i, ["mdia", "mdhd"])[0]; if (e) { var a, o = 0 === (a = e[0]) ? 12 : 20, n = Qe.readUint32(e, o); o += 4, 1e6 <= n && (c.foundLargeTimescale = !0); const d = 0 === a ? Qe.readUint32(e, o) : 0 , l = Qe.findBox(i, ["mdia", "hdlr"])[0]; if (l) { const r = Qe.bin2str(l.subarray(8, 12)) , u = { soun: "audio", vide: "video", clcp: "caption" }[r] || r; if (u) { const r = Qe.findBox(i, ["mdia", "minf", "stbl", "stsd"]); if (r.length) { const i = r[0]; Qe.bin2str(i.subarray(12, 16)); o = Je.parseStsd(i); let e; if ("caption" === u) { const t = Object.assign({ id: s, type: u, timescale: n, duration: d, isTimingTrack: !1, sequenceNumber: 0, captionSamples: [] }, o); c.caption = t, e = t } else { const i = Object.assign({ id: s, type: u, timescale: n, duration: d, isTimingTrack: !0, trakOffset: t.offset, trakSize: t.boxSize, sequenceNumber: 0, samples: [], fragmentDuration: 0 }, o); "video" === u ? (c.video = i, c.videoCodec = i.codec) : (c.audio = i, c.audioCodec = i.codec), e = i } c.tracksById[s] = e } } } } } } ), Qe.findBoxWithOffset(e, 0, ["moov", "mvex", "trex"]).forEach(e=>{ var t = e.data , e = Qe.readUint32(t, 4) , t = Qe.readUint32(t, 16); c.tracksById[e].defaultSampleSize = t } ), c } static parseStsd(e) { let r, t; const i = e.subarray(8); let n = Qe.bin2str(i.subarray(4, 8)) , s = null , a = null; "enca" === n ? (s = Qe.findBox(i, ["enca"])[0], a = s.subarray(28)) : "encv" === n && (s = Qe.findBox(i, ["encv"])[0], a = s.subarray(78)); e = !!a; r = 0, a && Qe.findBox(a, ["sinf"]).forEach(e=>{ const t = Qe.findBox(e, ["schm"])[0]; if (t) { var i = Qe.bin2str(t.subarray(4, 8)); if ("cbcs" === i || "cenc" === i) { const t = Qe.findBox(e, ["frma"])[0]; t && (n = Qe.bin2str(t)); e = Qe.findBox(e, ["schi", "tenc"])[0]; e && (r = e[7]) } } } ); let o; var d = i.subarray(86); switch (n) { case "mp4a": t = "mp4a.40.5"; break; case "ac-3": case "ec-3": case "alac": case "fLaC": t = n; break; case "avc1": case "avc3": t = n + ".640028"; break; case "hvc1": case "hev1": const l = Qe.findBox(d, ["hvcC"])[0]; o = Je.parseHvcC(l), t = o ? Je.hvcCToCodecString(n, o) : n + ".2.4.H150.B0"; break; case "dvh1": case "dvhe": const r = Qe.findBox(d, ["dvcC"])[0]; o = Je.parseDvcC(r), t = o ? Je.dvcCToCodecString(n, o) : n + ".05.01"; break; case "c608": t = n; break; case "vp09": const i = Qe.findBox(d, ["vpcC"])[0]; o = Je.parseVpcC(i), t = Je.vpcCToCodecString(n, o); break; default: t = n } return { codec: t, encrypted: e, defaultPerSampleIVSize: r } } static has32BitTfdts(e) { const t = Qe.findBox(e, ["moof", "traf", "tfdt"]); let i = !1; return t.forEach(e=>{ 0 === e[0] && (i = !0) } ), i } static getStartDtsTs(r, e) { const t = Qe.findBox(e, ["moof", "traf"]); let n, s = Number.MAX_SAFE_INTEGER; return t.map(function(i) { return Qe.findBox(i, ["tfhd"]).forEach(e=>{ var t = Qe.readUint32(e, 4) , e = r.tracksById[t]; if (e) { if (!e.isTimingTrack) return 1 / 0; t = e.timescale || 9e4, e = Qe.findBox(i, ["tfdt"]).map(function(e) { let t; var i = e[0]; return t = Qe.readUint32(e, 4), 1 === i && (t > Xe && qe().warn(Ye, `Value larger than can be represented by float for upper 32 bits ${t}`), t *= Math.pow(2, 32), t += Qe.readUint32(e, 8)), t }), e = 0 < e.length ? e[0] : 1 / 0; isFinite(e) && e / t < s && (s = e / t, n = { baseTime: e, timescale: t }) } } ) }), n } static offsetStartDTS(r, e, d, n) { Qe.findBox(e, ["moof", "traf"]).map(function(i) { return Qe.findBox(i, ["tfhd"]).map(function(e) { const t = Qe.readUint32(e, 4) , s = r.tracksById[t]; if (s) { const a = s.timescale || 9e4 , o = "caption" === s.type ? 0 : n; Qe.findBox(i, ["tfdt"]).map(function(t) { const i = t[0] , r = s.type; if (0 === i) { let e = Qe.readUint32(t, 4) - Math.round(d.baseTime * a / d.timescale); "video" === r && e < 0 && (qe().warn(Ye, `video tdft would have gone negative by ${e / a} seconds`), e = 0), e += Math.round(o * a), e = Math.max(e, 0), Qe.writeUint32(t, 4, e) } else { const i = Qe.readUint32(t, 4); i > Xe && qe().error(Ye, `baseMediaDecodeTime larger than can be represented by float for upper 32 bits ${i}`); let e = i; e *= Math.pow(2, 32), e += Qe.readUint32(t, 8), e -= Math.round(d.baseTime * a / d.timescale), "video" === r && e < 0 && (qe().warn(Ye, `video tdft would have gone negative by ${e / a} seconds`), e = 0), e += Math.round(o * a), e = Math.max(e, 0); const n = Math.floor(e / (1 + ze)) , s = Math.floor(e % (1 + ze)); Qe.writeUint32(t, 4, n), Qe.writeUint32(t, 8, s) } }) } }) }) } static writeStartDTS(i, e, s) { Qe.findBox(e, ["moof", "traf"]).map(function(t) { return Qe.findBox(t, ["tfhd"]).map(function(e) { e = Qe.readUint32(e, 4), e = i.tracksById[e]; if (e) { const r = e.timescale || 9e4 , n = Math.round(s * r) / r; .01 < Math.abs(n - s) && qe().warn(Ye, `[iframes] large rounding error when adjusting timestamps, startDTS: ${s}, roundedStartDTS: ${n}`), Qe.findBox(t, ["tfdt"]).map(function(e) { var t, i; 0 === e[0] ? Qe.writeUint32(e, 4, n * r) : (i = n * r, i = Math.max(i, 0), t = Math.floor(i / (1 + ze)), i = Math.floor(i % (1 + ze)), Qe.writeUint32(e, 4, t), Qe.writeUint32(e, 8, i)) }) } }) }) } static parseSAIO(e) { let t = 0 , i = 0; var r = e[0]; i += 4, 0 != (1 & Qe.readUint32(e, 0)) && (i += 8); var n = 16777215 & Qe.readUint32(e, i); return 1 == n ? (i += 4, t = Qe.readUint32(e, i), 1 === r && (i += 4, t *= Math.pow(2, 32), t += Qe.readUint32(e, i))) : qe().error(Ye, `saio entry count error, count is: ${n}`), t } static parseSAIZ(e) { let t = 0 , i = 0; return i += 4, 0 != (1 & Qe.readUint32(e, 0)) && (i += 8), t = e[i], i++, i += 4, 0 === t && (t = e[i]), t } static parseSubsample(e, t) { const i = { subsamples: [] }; let r = 0; for (e && (i.iv = t.subarray(0, e), r += e), r += 2; r + 6 <= t.byteLength; ) { const e = Qe.readUint16(t, r); r += 2; var n = Qe.readUint32(t, r); r += 4, i.subsamples.push([e, n]) } return i } static isSEIMessage(e, t) { return e ? 39 === t || 40 === t : 6 === t } static parseCLCPSample(e, t, i) { let r = 0; const n = []; let s = 0; for (; r < i; ) { var a = t + r , o = Qe.readUint32(e, a); a += 4; var d = Qe.bin2str(e.subarray(a, a + 4)); if (a += 4, "cdat" !== d) break; { const t = o - 8 , l = e.subarray(a, a + t); s += t, n.push(l), r += o } } return { cdatList: n, cdatTotalSize: s } } static parseSamples(e, S, b, T, E, I) { const w = b.timescale , l = b.id; let A, O = e, k = 0, C = !1; Qe.findBoxWithOffset(S, 0, ["moof"]).map(function(e) { const t = e.data , v = e.offset; Qe.findBox(t, ["traf"]).map(function(d) { var e = Qe.findBox(d, ["tfdt"]).map(function(e) { let t; var i = e[0]; return t = Qe.readUint32(e, 4), 1 === i && (t *= Math.pow(2, 32), t += Qe.readUint32(e, 8)), t / w })[0]; return void 0 !== e && (O = e), Qe.findBox(d, ["tfhd"]).map(function(e) { var t = Qe.readUint32(e, 4) , i = 16777215 & Qe.readUint32(e, 0) , r = 0 != (1 & i) , n = 0 != (2 & i) , s = 0 != (8 & i); let g = 0; var a = 0 != (16 & i); let y = 0; i = 0 != (32 & i); let o = 8; if (ne(b.defaultSampleSize) && (y = b.defaultSampleSize), t === l) { if (r && (Qe.readUint32(e, o), o += 4, Qe.readUint32(e, o), o += 4), n && (Qe.readUint32(e, o), o += 4), s && (g = Qe.readUint32(e, o), o += 4), a && (y = Qe.readUint32(e, o), o += 4), i && (Qe.readUint32(e, o), o += 4), "video" === b.type) { let t = 0 , i = 0; Qe.findBox(d, ["saio"]).map(function(e) { t = Je.parseSAIO(e) }), Qe.findBox(d, ["saiz"]).map(function(e) { i = Je.parseSAIZ(e) }), t && i && (A = Je.parseSubsample(b.defaultPerSampleIVSize, S.subarray(t, t + i))), C = Je.isHEVCFlavor(b.codec) } Qe.findBox(d, ["trun"]).map(function(i) { var t = i[0] , e = 16777215 & Qe.readUint32(i, 0) , r = 0 != (1 & e); let n = 0; var s = 0 != (4 & e) , a = 0 != (256 & e); let o = 0; var d = 0 != (512 & e); let l = 0; var u = 0 != (1024 & e) , c = 0 != (2048 & e); let h = 0; var p = Qe.readUint32(i, 4); let f = 8; r && (n = Qe.readUint32(i, f), f += 4), s && (f += 4); let m = n + v; for (let e = 0; e < p && (I < 0 || k < I); e++) { if (a ? (o = Qe.readUint32(i, f), f += 4) : o = g, d ? (l = Qe.readUint32(i, f), f += 4) : l = y, u && (f += 4), c && (h = 0 === t ? Qe.readUint32(i, f) : Qe.readSint32(i, f), f += 4), "video" === b.type) { if (ne(T)) b.samples.push({ data: S.subarray(m, m + l), size: l, duration: T * w, cts: 0, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: 2, isNonSync: 0, paddingValue: 0 }, subsamples: A ? A.subsamples : [], iv: A ? A.iv : void 0 }); else if (b.fragmentDuration += o, E) { let e = 0; for (; e < l; ) { const T = Qe.readUint32(S, m); m += 4; const E = 31 & S[m]; if (b.seiSamples || (b.seiSamples = []), Je.isSEIMessage(C, E)) { const i = S.subarray(m, m + T); b.seiSamples.push({ pts: O + h / w, type: E, data: i, sampleOffset: m, naluSize: T }) } m += T, e += T + 4 } } } else if ("audio" === b.type) b.fragmentDuration += o; else if ("caption" === b.type) { const {cdatList: i, cdatTotalSize: T} = Je.parseCLCPSample(S, m, l); if (m += l, i.length) { let t; if (1 === i.length) t = new Uint8Array(i[0]); else if (1 < i.length) { let e = 0; t = new Uint8Array(T); for (const T of i) t.set(T, e), e += T.length } b.captionSamples.push({ type: 3, pts: O, bytes: t }) } } k++, O += o / w } }) } }) }) }) } static parseEmsg(e) { let t, i, r, n, s, a = "", o = "", d = 0; if (0 === e[0]) { for (; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) a += Qe.bin2str(e.subarray(d, d + 1)), d += 1; for (a += Qe.bin2str(e.subarray(d, d + 1)), d += 1; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) o += Qe.bin2str(e.subarray(d, d + 1)), d += 1; o += Qe.bin2str(e.subarray(d, d + 1)), d += 1, t = Qe.readUint32(e, 12), i = Qe.readUint32(e, 16), n = Qe.readUint32(e, 20), s = Qe.readUint32(e, 24), d = 28 } else { d += 4, t = Qe.readUint32(e, d), d += 4; const i = Qe.readUint32(e, d); d += 4; var l = Qe.readUint32(e, d); for (d += 4, r = Math.pow(2, 32) * i + l, Number.isSafeInteger(r) || (r = Number.MAX_SAFE_INTEGER, qe().warn(Ye, "Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box")), n = Qe.readUint32(e, d), d += 4, s = Qe.readUint32(e, d), d += 4; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) a += Qe.bin2str(e.subarray(d, d + 1)), d += 1; for (a += Qe.bin2str(e.subarray(d, d + 1)), d += 1; "\0" !== Qe.bin2str(e.subarray(d, d + 1)); ) o += Qe.bin2str(e.subarray(d, d + 1)), d += 1; o += Qe.bin2str(e.subarray(d, d + 1)), d += 1 } return { schemeIdUri: a, value: o, timeScale: t, presentationTime: r, presentationTimeDelta: i, eventDuration: n, id: s, payload: e.subarray(d, e.byteLength) } } static extractID3PayloadCreateID3Track(e, t, i, r) { const n = new M(e.payload,r) , s = new Uint8Array(e.payload) , a = s.byteLength; let o = 0 , d = 0; var l = ne(e.presentationTime) ? e.presentationTime / e.timeScale : t + e.presentationTimeDelta / e.timeScale; if (ne(l)) { const c = e.eventDuration , h = s.subarray(0, 10) , p = Qe.bin2str(h.subarray(d, d + 3)); d += 3, "ID3" !== p && qe().error(Ye, "No ID3 tag found when extracting ID3 payload"), d += 2; var t = s.subarray(d, d + 1) , e = 64 & t[0] , u = 16 & t[0]; if (d += 1, M.readSynchSafeUint32(s.subarray(d, d + 4)), d += 4, e) { const f = M.readSynchSafeUint32(s.subarray(d, d + 4)); d += 4, d += f } for (; d + 2 < a; ) { Qe.bin2str(s.subarray(d, d + 4)), d += 4; const m = M.readSynchSafeUint32(s.subarray(d, d + 4)); d += 4; const r = l + o * c , a = { data: s, pts: r, dts: r, keyTagInfo: void 0, frames: n.frames }; i.id3Samples.push(a), d += m, o++, u && ("DI3" !== Qe.bin2str(s.subarray(d, d + 3)) && qe().error(Ye, "End should be DI3 if footer present in extracting ID3 payload"), d += 3, d += 7) } d + 2 === a && 0 !== Qe.readUint16(s, d) && qe().warn(Ye, "Padding should be 0 when extracting ID3 payload") } else qe().error(Ye, "No pts found in emsg info when extracting ID3 payload") } append(e, t, i, r, n, s, a) { let o = this.initData , d = 0 , l = 0 , u = !1 , c = !1; void 0 === o && (this.resetInitSegment(e, 0), o = this.initData); let h, p = this.initPtsTs; p || (h = Je.getStartDtsTs(o, e), this.initPtsTs = p = { baseTime: h.baseTime - Math.round(t * h.timescale), timescale: h.timescale }, this.observer.trigger(v.INIT_PTS_FOUND, { initPTS: p })), o.foundLargeTimescale && Je.has32BitTfdts(e) && !a && (e = We.remuxOverflowSegment(e, this.logger)), h = Je.getStartDtsTs(o, e); const f = Qe.findBox(e, ["emsg"]); if (o.video && o.video.encrypted && (Qe.findBox(e, ["moof", "traf"]).find(function(e) { return Boolean(Qe.findBox(e, ["senc"])[0] || Qe.findBox(e, ["saiz"])[0] && Qe.findBox(e, ["saio"])[0]) }) || this.logger.warn(Ye, `Missing subsample information for encrypted content codec=${o.videoCodec}`)), a) { const t = this._videoTrack.timescale; a = Math.ceil(a * t) / t; const i = (h.baseTime + this.audioPrimingDelay * h.timescale) / h.timescale; if (this._videoTrack && this._audioTrack && !this._silentAudioTrack) { const e = be.getTrack(this.observer, this._audioTrack.id, this._audioTrack.codec, 2, this.logger); if (!e) throw `unable to create silent audio track for codec ${this._audioTrack.codec}`; this._silentAudioTrack = Object.assign(Object.assign({}, e), { sequenceNumber: 0 }); const t = me.initSegment([this._videoTrack, this._silentAudioTrack]); this.remuxedInitDataTrack = { type: "audiovideo", container: "video/mp4", codec: this._silentAudioTrack.config.codec + "," + this._videoTrack.codec, initSegment: t }; const i = { track: this.remuxedInitDataTrack }; this.observer.trigger(v.FRAG_PARSING_INIT_SEGMENT, i) } Je.parseSamples(i, e, this._videoTrack, a, !1, 1), this.mp4Remuxer.remuxIFrame(i, this._videoTrack, this._silentAudioTrack, a, this.remuxedInitDataTrack), this._videoTrack.samples = [] } else if (f && 0 < f.length) { var m = (h.baseTime - this.audioPrimingDelay * h.timescale) / h.timescale , m = Math.max(0, m); const r = f.map(e=>{ e = Je.parseEmsg(e); return "https://aomedia.org/emsg/ID3\0" !== e.schemeIdUri || this._id3Track || (this._id3Track = { id3Samples: [], inputTimescale: 9e4 }), e } ); this._id3Track && r.map(e=>{ Je.extractID3PayloadCreateID3Track(e, t, this._id3Track, this.logger) } ), this.mp4Remuxer.remuxEmsg(!!o.audio, !!o.video, this._id3Track, m, h.timescale, e, this.remuxedInitDataTrack), this._id3Track && (this._id3Track.id3Samples = []) } else { m = (h.baseTime - this.audioPrimingDelay * h.timescale) / h.timescale, m = Math.max(0, m); this._videoTrack && (Je.parseSamples(m, e, this._videoTrack, void 0, this.trySEICaptions, -1), d = this._videoTrack.fragmentDuration / this._videoTrack.timescale, u = !0, this._videoTrack.fragmentDuration = 0, this.trySEICaptions ? (Je.extractSEICaptionsFromNALu(this._videoTrack.seiSamples, this._captionTrack), this._videoTrack.seiSamples = []) : this._captionTrack && Je.parseSamples(m, e, this._captionTrack, void 0, !1, Number.MAX_SAFE_INTEGER)), this._audioTrack && (Je.parseSamples(m, e, this._audioTrack, void 0, !1, -1), l = this._audioTrack.fragmentDuration / this._audioTrack.timescale, c = !0, this._audioTrack.fragmentDuration = 0), this.mp4Remuxer.remuxRawData(l, c, d, u, this._captionTrack, m, h.timescale, e, this.remuxedInitDataTrack) } } static extractSEICaptionsFromNALu(a, o) { if (a) { for (let s = 0; s < a.length; ++s) { var d = a[s] , l = d.pts; let t = 0; t++; let e = 0 , i = 0 , r = !1 , n = 0; for (; !r && t < d.data.length; ) { for (e = 0; !(t >= d.data.length) && (n = d.data[t++], e += n, 255 === n); ) ; for (i = 0; !(t >= d.data.length) && (n = d.data[t++], i += n, 255 === n); ) ; const a = d.data.length - t; if (4 === e && t < d.data.length) { if (r = !0, 181 === d.data[t++]) { const a = Qe.readUint16(d.data, t); if (t += 2, 49 === a) { const a = Qe.readUint32(d.data, t); if (t += 4, 1195456820 === a && 3 === d.data[t++]) { const a = d.data[t++]; t++; const u = 31 & a , c = []; if (64 & a) for (let e = 0; e < u; e++) { const a = d.data[t++]; if (a === (252 & a)) { const o = 3 & a; if (0 == o || 1 == o) { const a = d.data[t++] , o = d.data[t++]; c.push(a), c.push(o) } } else t += 2 } 0 < c.length && o.captionSamples.push({ type: 3, pts: l, bytes: c }) } } } } else if (i < a) t += i; else if (i > a) break } } return o } } } const Ze = { name: "ExpGolomb" }; class et { constructor(e, t) { this.data = e, this.logger = t, this._bytesAvailable = e.byteLength, this.word = 0, this.bitsAvailable = 0 } get bytesAvailable() { return this._bytesAvailable } loadWord() { const e = this.data , t = this._bytesAvailable , i = e.byteLength - t , r = new Uint8Array(4) , n = Math.min(4, t); if (0 === n) throw new Error("no bytes available"); r.set(e.subarray(i, i + n)), this.word = new DataView(r.buffer).getUint32(0), this.bitsAvailable = 8 * n, this._bytesAvailable -= n } skipBits(e) { var t; this.bitsAvailable > e || (t = (e -= this.bitsAvailable) >> 3, e -= t >> 3, this._bytesAvailable -= t, this.loadWord()), this.word <<= e, this.bitsAvailable -= e } readBits(e) { let t = Math.min(this.bitsAvailable, e); var i = this.word >>> 32 - t; return 32 < e && this.logger.error(Ze, "Cannot read more than 32 bits at a time"), this.bitsAvailable -= t, 0 < this.bitsAvailable ? this.word <<= t : 0 < this._bytesAvailable && this.loadWord(), t = e - t, 0 < t && this.bitsAvailable ? i << t | this.readBits(t) : i } skipLZ() { let e; for (e = 0; e < this.bitsAvailable; ++e) if (0 != (this.word & 2147483648 >>> e)) return this.word <<= e, this.bitsAvailable -= e, e; return this.loadWord(), e + this.skipLZ() } skipUEG() { this.skipBits(1 + this.skipLZ()) } skipEG() { this.skipBits(1 + this.skipLZ()) } readUEG() { var e = this.skipLZ(); return this.readBits(e + 1) - 1 } readEG() { var e = this.readUEG(); return 1 & e ? 1 + e >>> 1 : -1 * (e >>> 1) } readBoolean() { return 1 === this.readBits(1) } readUByte() { return this.readBits(8) } readUShort() { return this.readBits(16) } readUInt() { return this.readBits(32) } skipScalingList(e) { let t, i, r = 8, n = 8; for (t = 0; t < e; t++) 0 !== n && (i = this.readEG(), n = (r + i + 256) % 256), r = 0 === n ? r : n } readSPS() { let e, t, i, r = 0, n = 0, s = 0, a = 0; const o = this.readUByte.bind(this) , d = this.readBits.bind(this) , l = this.readUEG.bind(this) , u = this.readBoolean.bind(this) , c = this.skipBits.bind(this) , h = this.skipEG.bind(this) , p = this.skipUEG.bind(this) , f = this.skipScalingList.bind(this); o(); var m = o(); if (d(5), c(3), o(), p(), 100 === m || 110 === m || 122 === m || 244 === m || 44 === m || 83 === m || 86 === m || 118 === m || 128 === m) { const e = l(); if (3 === e && c(1), p(), p(), c(1), u()) for (t = 3 !== e ? 8 : 12, i = 0; i < t; i++) u() && f(i < 6 ? 16 : 64) } p(); var g = l(); if (0 === g) l(); else if (1 === g) for (c(1), h(), h(), e = l(), i = 0; i < e; i++) h(); p(), c(1); var y = l() , m = l() , g = d(1); 0 === g && c(1), c(1), u() && (r = l(), n = l(), s = l(), a = l()); let v = [1, 1]; if (u() && u()) switch (o()) { case 1: v = [1, 1]; break; case 2: v = [12, 11]; break; case 3: v = [10, 11]; break; case 4: v = [16, 11]; break; case 5: v = [40, 33]; break; case 6: v = [24, 11]; break; case 7: v = [20, 11]; break; case 8: v = [32, 11]; break; case 9: v = [80, 33]; break; case 10: v = [18, 11]; break; case 11: v = [15, 11]; break; case 12: v = [64, 33]; break; case 13: v = [160, 99]; break; case 14: v = [4, 3]; break; case 15: v = [3, 2]; break; case 16: v = [2, 1]; break; case 255: v = [o() << 8 | o(), o() << 8 | o()] } return { width: Math.ceil(16 * (y + 1) - 2 * r - 2 * n), height: (2 - g) * (m + 1) * 16 - (g ? 2 : 4) * (s + a), pixelRatio: v } } readSliceType() { return this.readUByte(), this.readUEG(), this.readUEG() } } const tt = { name: "TS Demuxer" }; var it, rt = class extends c { constructor(e, t, i, r, n) { super(e, t, i, r, n) } static probe(e, t) { return 564 <= e.length && 71 === e[0] && 71 === e[188] && 71 === e[376] } resetInitSegment(e, t, i) { this.pmtParsed = !1; var r = { id: this._pmtId = -1, inputTimescale: 9e4, timescale: NaN, duration: 0, encrypted: i && i.isEncrypted, keyTagInfo: i } , i = { len: 0, sequenceNumber: 0 }; this._avcContext = { info: Object.assign({}, r), parsingData: Object.assign(Object.assign({}, i), { esSamples: new Array, dropped: 0 }), config: {}, container: "video/mp2t", type: "video" }, this._audioContext = { info: Object.assign({}, r), parsingData: Object.assign(Object.assign({}, i), { esSamples: new Array }), container: "video/mp2t", type: "audio" }, this._id3Track = { id: -1, inputTimescale: 9e4, id3Samples: [] }, this._txtTrack = { inputTimescale: 9e4, captionSamples: [] }, this._duration = t, this._initSegment = e } append(e, t, i, r, n, s, a) { let o, d, l, u, c, h = !1; this.contiguous = i; const p = this._avcContext , f = this._audioContext , m = this._id3Track; let g = this.pmtParsed , y = p.info.id , v = f.info.id , S = m.id , b = this._pmtId , T = p.pesData , E = f.pesData , I = m.pesData; if (this.iframeMode = void 0 !== a, this._initSegment && 0 < this._initSegment.byteLength) { const t = new Uint8Array(this._initSegment.byteLength + e.byteLength); t.set(this._initSegment), t.set(e, this._initSegment.byteLength), this._initSegment = void 0, 71 === t[0] && (e = t) } let w, A, O = e.length; for (O -= O % 188, o = 0; o < O; o += 188) { if (71 !== e[o]) { const e = new D(!1,"TS packet did not start with 0x47",$.NoTSSyncByteFound); return void this.observer.trigger(x.INTERNAL_ERROR, e) } if (d = !!(64 & e[o + 1]), l = ((31 & e[o + 1]) << 8) + e[o + 2], 1 < (48 & e[o + 3]) >> 4) { if (u = o + 5 + e[o + 4], u === o + 188) continue } else u = o + 4; switch (l) { case y: d && (T && (c = this._parsePES(T)) && this._parseAVCPES(c, !1), T = { data: [], size: 0, keyTagInfo: n }), T && (T.data.push(e.subarray(u, o + 188)), T.size += o + 188 - u); break; case v: if (d && !this.iframeMode) { if (E && (c = this._parsePES(E))) switch (f.segmentCodec) { case "aac": this._parseAACPES(c); break; case "mp3": this._parseMPEGPES(c); break; case "ac3": case "ec3": this._parseDolbyPES(c) } E = { data: [], size: 0, keyTagInfo: n } } E && (E.data.push(e.subarray(u, o + 188)), E.size += o + 188 - u); break; case S: d && (I && (c = this._parsePES(I)) && m.id3Samples.push(c), I = { data: [], size: 0 }), I && (I.data.push(e.subarray(u, o + 188)), I.size += o + 188 - u); break; case 0: d && (u += e[u] + 1), b = this._pmtId = this._parsePAT(e, u); break; case b: d && (u += e[u] + 1); const t = this._parsePMT(e, u, this.typeSupported); y = t.avcId, 0 < y && (p.info.id = y, p.info.encrypted = t.videoEncrypted), v = t.audioId, 0 < v && (f.info.id = v, f.segmentCodec = t.audioSegmentCodec, f.info.encrypted = t.audioEncrypted), S = t.id3Id, 0 < S && (m.id = S), h && !g && (h = !1, o = -188), g = this.pmtParsed = !0; break; case 17: case 8191: break; default: h = !0 } } if (T && (c = this._parsePES(T)) ? (this._parseAVCPES(c, !0), p.pesData = void 0) : p.pesData = T, E && (c = this._parsePES(E))) { switch (f.segmentCodec) { case "aac": this._parseAACPES(c); break; case "mp3": this._parseMPEGPES(c); break; case "ac3": case "ec3": this._parseDolbyPES(c) } f.pesData = void 0 } else E && E.size && this.logger.warn(tt, "last AAC PES packet truncated,might overlap between fragments"), f.pesData = E; I && (c = this._parsePES(I)) ? (m.id3Samples.push(c), m.pesData = void 0) : m.pesData = I, f.config && f.segmentCodec && (w = { type: "audio", info: f.info, config: f.config, parsingData: f.parsingData }); var k, C = p.config; "string" == typeof (k = C).codec && Array.isArray(k.sps) && Array.isArray(k.pps) && "number" == typeof k.width && "number" == typeof k.height && Array.isArray(k.pixelRatio) && (A = { type: "video", info: p.info, config: C, parsingData: p.parsingData }), this.esRemuxer.remuxEsTracks(w, A, m, this._txtTrack, t, i, r, n, s, a) } destroy() { this._duration = 0 } _parsePAT(e, t) { return (31 & e[t + 10]) << 8 | e[t + 11] } _parsePMT(e, t, i) { var r; const n = { audioId: -1, avcId: -1, id3Id: -1, audioEncrypted: !1, videoEncrypted: !1 } , s = t + 3 + ((15 & e[t + 1]) << 8 | e[t + 2]) - 4; for (t += 12 + ((15 & e[t + 10]) << 8 | e[t + 11]); t < s; ) { switch (r = (31 & e[t + 1]) << 8 | e[t + 2], e[t]) { case 207: n.audioEncrypted = !0; case 15: -1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "aac"); break; case 21: -1 === n.id3Id && (n.id3Id = r); break; case 219: n.videoEncrypted = !0; case 27: -1 === n.avcId && (n.avcId = r); break; case 3: case 4: !0 !== i.mpeg && !0 !== i.mp3 ? this.logger.warn(tt, "MPEG audio found, not supported in this browser for now") : -1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "mp3"); break; case 193: n.audioEncrypted = !0; case 129: !0 !== i.ac3 ? this.logger.warn(tt, "AC-3 audio found, not supported in this browser for now") : -1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "ac3"); break; case 194: n.audioEncrypted = !0; case 135: !0 !== i.ec3 ? this.logger.warn(tt, "EC-3 audio found, not supported in this browser for now") : -1 === n.audioId && (n.audioId = r, n.audioSegmentCodec = "ec3"); break; case 36: this.logger.warn(tt, "HEVC stream type found, not supported for now"); break; default: this.logger.warn(tt, "unkown stream type:" + e[t]) } t += 5 + ((15 & e[t + 3]) << 8 | e[t + 4]) } return n } _parsePES(e) { let i, t, r, n, s, a, o = 0; const d = e.data , l = e.keyTagInfo; let u = NaN , c = NaN; if (e && 0 !== e.size) { for (; d[0].length < 19 && 1 < d.length; ) { const e = new Uint8Array(d[0].length + d[1].length); e.set(d[0]), e.set(d[1], d[0].length), d[0] = e, d.splice(1, 1) } if (i = d[0], 1 === (i[0] << 16) + (i[1] << 8) + i[2] && (r = (i[4] << 8) + i[5], !(r && r > e.size - 6))) { 192 & (t = i[7]) && (u = 536870912 * (14 & i[9]) + 4194304 * (255 & i[10]) + 16384 * (254 & i[11]) + 128 * (255 & i[12]) + (254 & i[13]) / 2, 64 & t ? (c = 536870912 * (14 & i[14]) + 4194304 * (255 & i[15]) + 16384 * (254 & i[16]) + 128 * (255 & i[17]) + (254 & i[18]) / 2, 54e5 < u - c && (this.logger.warn(tt, `${Math.round((u - c) / 9e4)}s delta between PTS and DTS, align them`), u = c)) : c = u), n = i[8], a = n + 9, e.size -= a, s = new Uint8Array(e.size); for (let t = 0, e = d.length; t < e; t++) { i = d[t]; let e = i.byteLength; if (a) { if (a > e) { a -= e; continue } i = i.subarray(a), e -= a, a = 0 } s.set(i, o), o += e } return r && (r -= n + 3), { data: s, pts: u, dts: c, len: r, keyTagInfo: l } } } } pushAccesUnit(e, t) { const i = e.avcSample; if (i && i.units.length && i.frame) { const r = e.parsingData.esSamples , n = r.length; (!0 === i.key || e.config.sps && (n || this.contiguous)) && (i.id = n, i.keyTagInfo = t, e.info.encrypted) && i.units.forEach(e=>{ if (48 < e.data.byteLength) switch (e.type) { case 1: case 5: e.data = this.discardEPB(e.data) } } ), n || isFinite(i.pts) ? r.push(i) : e.parsingData.dropped++ } } _parseAVCPES(o, e) { if (!o.data) throw "invalid pes data"; const d = this._avcContext , t = this._parseAVCNALu(o.data); let l, u, c, h = d.avcSample; const p = o.keyTagInfo; o.data = void 0, t.forEach(n=>{ switch (n.type) { case 1: if (h && !this.iframeMode) { u = !0, h.frame = !0; const o = n.data; if (4 < o.length) { const n = new et(o,this.logger).readSliceType(); 2 !== n && 4 !== n && 7 !== n && 9 !== n || (h.key = !0) } } break; case 5: u = !0, h && (h = h || (d.avcSample = this._createAVCSample(!0, o.pts, o.dts, "")), h.key = !0, h.frame = !0); break; case 6: u = !0, l = new et(this.discardEPB(n.data),this.logger), l.readUByte(); let e = 0 , t = 0 , i = !1 , r = 0; for (; !i && 1 < l.bytesAvailable; ) { for (e = 0; r = l.readUByte(), e += r, 255 === r; ) ; for (t = 0; r = l.readUByte(), t += r, 255 === r; ) ; if (4 === e && 0 !== l.bytesAvailable) { if (i = !0, 181 === l.readUByte() && 49 === l.readUShort() && 1195456820 === l.readUInt() && 3 === l.readUByte()) { const n = l.readUByte() , d = 31 & n , s = [n, l.readUByte()]; for (c = 0; c < d; c++) s.push(l.readUByte()), s.push(l.readUByte()), s.push(l.readUByte()); this._insertSampleInOrder(this._txtTrack.captionSamples, { type: 3, pts: o.pts, bytes: s }) } } else if (t < l.bytesAvailable) for (c = 0; c < t; c++) l.readUByte() } break; case 7: if (u = !0, !d.config.sps) { l = new et(n.data,this.logger); const o = l.readSPS(); d.config.width = o.width, d.config.height = o.height, d.config.pixelRatio = o.pixelRatio, d.config.sps = [n.data], d.info.duration = this._duration; const a = n.data.subarray(1, 4); let t = "avc1."; for (c = 0; c < 3; c++) { let e = a[c].toString(16); e.length < 2 && (e = "0" + e), t += e } d.config.codec = t } break; case 8: u = !0, d.config.pps || (d.config.pps = [n.data]); break; case 9: u = !1, h && this.pushAccesUnit(d, p), h = d.avcSample = this._createAVCSample(!1, o.pts, o.dts, ""); break; case 12: u = !1; break; default: u = !1, h && (h.debug += "unknown NAL " + n.type + " ") } h && u && h.units.push(n) } ), e && h && (this.pushAccesUnit(d, p), d.avcSample = void 0) } _createAVCSample(e, t, i, r) { return { id: NaN, key: e, pts: t, dts: i, units: new Array, debug: r } } _insertSampleInOrder(t, i) { var r = t.length; if (0 < r) { if (i.pts >= t[r - 1].pts) t.push(i); else for (let e = r - 1; 0 <= e; e--) if (i.pts < t[e].pts) { t.splice(e, 0, i); break } } else t.push(i) } _getLastNalUnit() { const e = this._avcContext; let t, i = e.avcSample; if (!i || 0 === i.units.length) { const t = e.parsingData.esSamples; i = t[t.length - 1] } if (i) { const e = i.units; t = e[e.length - 1] } return t } _parseAVCNALu(e) { const t = e.byteLength; let i, r, n = 0; const s = this._avcContext; let a = s.naluState || 0; const o = a , d = []; let l, u, c, h = -1; for (-1 === a && (h = 0, c = 31 & e[0], a = 0, n = 1); n < t; ) if (i = e[n++], a) if (1 !== a) if (i) if (1 === i) { if (0 <= h) l = { data: e.subarray(h, n - a - 1), type: c }, d.push(l); else { const t = this._getLastNalUnit(); if (t && (o && n <= 4 - o && t.state && (t.data = t.data.subarray(0, t.data.byteLength - o)), r = n - a - 1, 0 < r)) { const i = new Uint8Array(t.data.byteLength + r); i.set(t.data, 0), i.set(e.subarray(0, r), t.data.byteLength), t.data = i } } a = n < t ? (u = 31 & e[n], h = n, c = u, 0) : -1 } else a = 0; else a = 3; else a = i ? 0 : 2; else a = i ? 0 : 1; if (0 <= h && 0 <= a && (l = { data: e.subarray(h, t), type: c, state: a }, d.push(l)), 0 === d.length) { const t = this._getLastNalUnit(); if (t) { const i = new Uint8Array(t.data.byteLength + e.byteLength); i.set(t.data, 0), i.set(e, t.data.byteLength), t.data = i } } return s.naluState = a, d } discardEPB(e) { const t = e.byteLength , i = []; let r = 1; for (; r < t - 2; ) 0 === e[r] && 0 === e[r + 1] && 3 === e[r + 2] ? (i.push(r + 2), r += 2) : r++; if (0 === i.length) return e; const n = t - i.length , s = new Uint8Array(n); let a = 0; for (r = 0; r < n; a++, r++) a === i[0] && (a++, i.shift()), s[r] = e[a]; return s } _parseAACPES(e) { const t = this._audioContext , i = t.audioLastPTS , r = e.keyTagInfo; let n, s, a, o, d, l, u, c = e.data, h = e.pts, p = t.audioOverFlow; if (p) { const e = new Uint8Array(p.byteLength + c.byteLength); e.set(p, 0), e.set(c, p.byteLength), c = e } for (a = 0, l = c.length; a < l - 1 && (255 !== c[a] || 240 != (240 & c[a + 1])); a++) ; if (a) { let e, t, i; i = a < l - 1 ? (e = `AAC PES did not start with ADTS header,offset:${a}`, t = !1, $.PESDidNotStartWithADTS) : (e = "no ADTS header found in AAC PES", t = !0, $.NoADTSHeaderInPES), this.logger.warn(tt, `parsing error:${e}`); const r = new D(t,e,i); if (this.observer.trigger(x.INTERNAL_ERROR, r), t) return } if (!t.config) { const e = E(this.observer, c, a, void 0, this.logger); if (!e) throw "unable to parse adts header"; t.config = e } s = 0; var f = 9216e4 / t.config.samplerate; if (p && i) { const e = i + f; 1 < Math.abs(e - h) && (h = e) } for (; a + 5 < l && (o = 1 & c[a + 1] ? 7 : 9, n = (3 & c[a + 3]) << 11 | c[a + 4] << 3 | (224 & c[a + 5]) >>> 5, n -= o, 0 < n && a + o + n <= l); ) for (d = h + s * f, u = { unit: c.subarray(a + o, a + o + n), pts: d, dts: d, keyTagInfo: r }, t.parsingData.esSamples.push(u), t.parsingData.len += n, a += n + o, s++; a < l - 1 && (255 !== c[a] || 240 != (240 & c[a + 1])); a++) ; p = a < l ? c.subarray(a, l) : void 0, t.audioOverFlow = p, t.audioLastPTS = d } _parseMPEGPES(e) { "mp3" === this._audioContext.segmentCodec && ee.parse(this._audioContext.parsingData, e.data, 0, e.pts, this.logger) } _parseDolbyPES(e) { const t = this._audioContext; let i = e.data , r = e.pts; var n = e.keyTagInfo; let s = 0 , a = 0 , o = t.audioOverFlow; e = t.audioLastPTS; if (!t.config) { let e; if ("ac3" === t.segmentCodec ? e = q(this.observer, i, a, this.logger) : "ec3" === t.segmentCodec && (e = Y(this.observer, i, a, this.logger)), !e) throw "unable to parse dolby header"; t.config = e } if ("ac3" !== t.config.segmentCodec && "ec3" !== t.config.segmentCodec) throw "unexpected config type"; var d = 1536 / t.config.samplerate * t.info.inputTimescale; if (o) { const c = new Uint8Array(o.byteLength + i.byteLength); c.set(o, 0), c.set(i, o.byteLength), i = c } var l = i.length; if (o && e) { const c = e + d; 1 < Math.abs(c - r) && (r = c) } let u = 0; for (; a + u <= l; ) { if (11 !== i[a] || 119 !== i[a + 1]) { const c = new D(!0,"invalid dolby audio magic",$.InvalidDolbyAudioMagic); return void this.observer.trigger(x.INTERNAL_ERROR, c) } "ac3" === t.segmentCodec ? u = Q(this.observer, i, a) : "ec3" === t.segmentCodec && (u = X(this.observer, i, a, this.logger)); const c = r + s * d; t.audioLastPTS = c; const o = { unit: i.subarray(a, a + u), pts: c, dts: c, keyTagInfo: n }; t.parsingData.esSamples.push(o), t.info.duration = this._duration, t.parsingData.len += u, a += u, s++ } o = a < l ? i.subarray(a, l) : void 0, t.audioOverFlow = o } } ; class nt extends a { constructor(e, t, i, r) { super(), this.typeSupported = e, this.config = t, this.vendor = i, this.logger = r } destroy() { this.removeAllListeners(); const e = this.demuxer , t = this.remuxer; e && e.destroy(), t && t.destroy() } push(t, i, r, n, s, a, o, d, l, u, c, h) { if (t) { let e = this.demuxer; var p = new Uint8Array(t); if (!e || (s || a) && !this.probeFn(p, this.logger)) { const {typeSupported: t, config: i} = this , r = [{ demux: Je, remux: We }, { demux: rt, remux: Te }, { demux: J, remux: Te }, { demux: z, remux: Te }, { demux: K, remux: Te }, { demux: ie, remux: Te }]; for (const n of r) { const r = n.demux["probe"]; if (r(p, this.logger)) { this.remuxer = new n.remux(this,i,t,this.vendor,this.logger), e = new n.demux(this,this.remuxer,i,t,this.logger), this.probeFn = r; break } } if (!e) { const t = new D(!0,"no demux matching with content found",$.DemuxerNotFound); return void this.trigger(x.INTERNAL_ERROR, t) } this.demuxer = e } const f = this.remuxer , m = !this.lastKeyTagInfo || i && "NONE" !== i.method && this.lastKeyTagInfo.uri !== i.uri; if (this.lastKeyTagInfo = i, (s || a || m) && (e.resetInitSegment(new Uint8Array(r), d, i, s), f.resetInitSegment()), s) { const t = u ? S(u) : void 0; e.resetTimeStamp(t), f.resetTimeStamp(t) } e.append(p, n, o, l, i, c, h) } } } function st() { let e = `${Date.now()}-${Math.random()}`; return "undefined" != typeof performance && "function" == typeof performance.now && (e += `-${performance.now()}`), e } class at { constructor(e, t) { this.rpc = e, this.logger = t, this.init = (t,n,s)=>e=>{ const i = st() , r = this.demuxers[i] = new nt(t,n,s,this.logger); [v.INIT_PTS_FOUND, v.FRAG_PARSING_INIT_SEGMENT, v.FRAG_PARSING_DATA, v.FRAG_PARSED, x.INTERNAL_ERROR].forEach(t=>{ r.on(t, e=>this.rpc.invoke("demuxer.event", [i, t, e])(()=>{} )) } ), e(i) } , this.push = (i,r,n,s,a,o,d,l,u,c,h,p,f)=>e=>{ const t = this.demuxers[i]; t ? (t.push(r, n, s, a, o, d, l, u, c, h, p, f), e()) : e(void 0, `Demuxer with id "${i}" does not exist on push`) } , this.destroy = i=>e=>{ const t = this.demuxers[i]; t ? (t.destroy(), delete this.demuxers[i], e()) : this.logger.error(`Demuxer with id "${i}" does not exist on destroy`) } , this.demuxers = {}, e.register("demuxer.init", this.init), e.register("demuxer.push", this.push), e.register("demuxer.destroy", this.destroy) } } class ot { constructor(e) { this.worker = e, this.handlers = {}, this.deferers = {}, this._messageHandler = e=>{ var {type: t, id: i, command: r, args: n, result: e, error: s} = e.data; if (t === it.Invoke) try { if (null == this.handlers[r]) throw new Error(`command ${r} not found`); this.handlers[r](...n)(this._respond.bind(this, i, r)) } catch (s) { this._respond(i, r, null, new Error(`command ${r} not found`)) } else t === it.Result && null != this.deferers[i] && (this.deferers[i](e, s), delete this.deferers[i]) } , e.addEventListener("message", this._messageHandler) } register(e, t) { if (null != this.handlers[e]) return !1; this.handlers[e] = t } unregister(e) { if (null != this.handlers[e]) return !1; delete this.handlers[e] } invoke(i, r, n) { return (e=ot._fallbackCallback)=>{ var t = st(); this.deferers[t] = e; t = { type: it.Invoke, id: t, command: i, args: r }; this._send(t, n) } } teardown() { this.worker.removeEventListener("message", this._messageHandler) } _respond(e, t, i, r, n) { r instanceof Error && (r = `[${r.name}] ${r.message}\n${r.stack}`); r = { type: it.Result, id: e, command: t, result: i, error: r }; this._send(r, n) } _send(e, t=[]) { this.worker.postMessage(e, t.map(e=>ArrayBuffer.isView(e) ? e.buffer : e).filter(e=>void 0 !== e)) } } ot._fallbackCallback = (e,t)=>{ if (null != t) throw t } , (gr = it = it || {})[gr.Invoke = 0] = "Invoke", gr[gr.Result = 1] = "Result", ArrayBuffer.isView || (ArrayBuffer.isView = function(e) { return null !== e && "object" == typeof e && e.buffer instanceof ArrayBuffer } ), void 0 !== Hy && Hy && (Br = new ot(d), mu = (r=>{ const t = (i=[])=>{ const e = Object.fromEntries(["fatal", "error", "warn", "info", "debug", "trace", "qe"].map(e=>{ return [e, (t = e, (...e)=>{ r.invoke("logger.log", [i, t, ...e])((e,t)=>{ if (null != t) throw t } ) } )]; var t } )); return e.child = e=>t([...i, e]), e } ; return t() } )(Br), new i(Br,mu), new at(Br,mu)); var dt = function(e, t) { return (dt = Object.setPrototypeOf || { __proto__: [] }instanceof Array && function(e, t) { e.__proto__ = t } || function(e, t) { for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]) } )(e, t) }; function lt(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null"); function i() { this.constructor = e } dt(e, t), e.prototype = null === t ? Object.create(t) : (i.prototype = t.prototype, new i) } var ut = function() { return (ut = Object.assign || function(e) { for (var t, i = 1, r = arguments.length; i < r; i++) for (var n in t = arguments[i]) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]); return e } ).apply(this, arguments) }; function ct(e, t, i, r) { var n, s = arguments.length, a = s < 3 ? t : null === r ? r = Object.getOwnPropertyDescriptor(t, i) : r; if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(e, t, i, r); else for (var o = e.length - 1; 0 <= o; o--) (n = e[o]) && (a = (s < 3 ? n(a) : 3 < s ? n(t, i, a) : n(t, i)) || a); return 3 < s && a && Object.defineProperty(t, i, a), a } function ht(e, t) { if ("object" == typeof Reflect && "function" == typeof Reflect.metadata) return Reflect.metadata(e, t) } function pt(e) { var t = "function" == typeof Symbol && Symbol.iterator , i = t && e[t] , r = 0; if (i) return i.call(e); if (e && "number" == typeof e.length) return { next: function() { return { value: (e = e && r >= e.length ? void 0 : e) && e[r++], done: !e } } }; throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.") } function ft(e, t) { var i = "function" == typeof Symbol && e[Symbol.iterator]; if (!i) return e; var r, n, s = i.call(e), a = []; try { for (; (void 0 === t || 0 < t--) && !(r = s.next()).done; ) a.push(r.value) } catch (e) { n = { error: e } } finally { try { r && !r.done && (i = s.return) && i.call(s) } finally { if (n) throw n.error } } return a } function mt() { for (var e = [], t = 0; t < arguments.length; t++) e = e.concat(ft(arguments[t])); return e } function gt(e) { return "function" == typeof e } var yt = !1 , vt = { Promise: void 0, set useDeprecatedSynchronousErrorHandling(e) { yt = e }, get useDeprecatedSynchronousErrorHandling() { return yt } }; function St(e) { setTimeout(function() { throw e }, 0) } var bt = { closed: !0, next: function(e) {}, error: function(e) { if (vt.useDeprecatedSynchronousErrorHandling) throw e; St(e) }, complete: function() {} } , Tt = Array.isArray || function(e) { return e && "number" == typeof e.length } ; function Et(e) { return null !== e && "object" == typeof e } var It = (Ot.prototype = Object.create(Error.prototype), Ot) , wt = (At.prototype.unsubscribe = function() { var t; if (!this.closed) { var e = this._parentOrParents , i = this._ctorUnsubscribe , r = this._unsubscribe , n = this._subscriptions; if (this.closed = !0, this._parentOrParents = null, this._subscriptions = null, e instanceof At) e.remove(this); else if (null !== e) for (var s = 0; s < e.length; ++s) e[s].remove(this); if (gt(r)) { i && (this._unsubscribe = void 0); try { r.call(this) } catch (e) { t = e instanceof It ? kt(e.errors) : [e] } } if (Tt(n)) for (var s = -1, a = n.length; ++s < a; ) { var o = n[s]; if (Et(o)) try { o.unsubscribe() } catch (e) { t = t || [], e instanceof It ? t = t.concat(kt(e.errors)) : t.push(e) } } if (t) throw new It(t) } } , At.prototype.add = function(e) { var t, i = e; if (!e) return At.EMPTY; switch (typeof e) { case "function": i = new At(e); case "object": if (i === this || i.closed || "function" != typeof i.unsubscribe) return i; if (this.closed) return i.unsubscribe(), i; i instanceof At || (t = i, (i = new At)._subscriptions = [t]); break; default: throw new Error("unrecognized teardown " + e + " added to Subscription.") } var r = i._parentOrParents; if (null === r) i._parentOrParents = this; else if (r instanceof At) { if (r === this) return i; i._parentOrParents = [r, this] } else { if (-1 !== r.indexOf(this)) return i; r.push(this) } r = this._subscriptions; return null === r ? this._subscriptions = [i] : r.push(i), i } , At.prototype.remove = function(e) { var t = this._subscriptions; !t || -1 !== (e = t.indexOf(e)) && t.splice(e, 1) } , At.EMPTY = ((dd = new At).closed = !0, dd), At); function At(e) { this.closed = !1, this._parentOrParents = null, this._subscriptions = null, e && (this._ctorUnsubscribe = !0, this._unsubscribe = e) } function Ot(e) { return Error.call(this), this.message = e ? e.length + " errors occurred during unsubscription:\n" + e.map(function(e, t) { return t + 1 + ") " + e.toString() }).join("\n ") : "", this.name = "UnsubscriptionError", this.errors = e, this } function kt(e) { return e.reduce(function(e, t) { return e.concat(t instanceof It ? t.errors : t) }, []) } var Ct, Dt, Mt = "function" == typeof Symbol ? Symbol("rxSubscriber") : "@@rxSubscriber_" + Math.random(), Pt = (lt(Lt, Dt = wt), Lt.prototype[Mt] = function() { return this } , Lt.create = function(e, t, i) { i = new Lt(e,t,i); return i.syncErrorThrowable = !1, i } , Lt.prototype.next = function(e) { this.isStopped || this._next(e) } , Lt.prototype.error = function(e) { this.isStopped || (this.isStopped = !0, this._error(e)) } , Lt.prototype.complete = function() { this.isStopped || (this.isStopped = !0, this._complete()) } , Lt.prototype.unsubscribe = function() { this.closed || (this.isStopped = !0, Dt.prototype.unsubscribe.call(this)) } , Lt.prototype._next = function(e) { this.destination.next(e) } , Lt.prototype._error = function(e) { this.destination.error(e), this.unsubscribe() } , Lt.prototype._complete = function() { this.destination.complete(), this.unsubscribe() } , Lt.prototype._unsubscribeAndRecycle = function() { var e = this._parentOrParents; return this._parentOrParents = null, this.unsubscribe(), this.closed = !1, this.isStopped = !1, this._parentOrParents = e, this } , Lt), xt = (lt(Rt, Ct = Pt), Rt.prototype.next = function(e) { var t; !this.isStopped && this._next && (t = this._parentSubscriber, vt.useDeprecatedSynchronousErrorHandling && t.syncErrorThrowable ? this.__tryOrSetError(t, this._next, e) && this.unsubscribe() : this.__tryOrUnsub(this._next, e)) } , Rt.prototype.error = function(e) { if (!this.isStopped) { var t = this._parentSubscriber , i = vt.useDeprecatedSynchronousErrorHandling; if (this._error) i && t.syncErrorThrowable ? this.__tryOrSetError(t, this._error, e) : this.__tryOrUnsub(this._error, e), this.unsubscribe(); else if (t.syncErrorThrowable) i ? (t.syncErrorValue = e, t.syncErrorThrown = !0) : St(e), this.unsubscribe(); else { if (this.unsubscribe(), i) throw e; St(e) } } } , Rt.prototype.complete = function() { var e, t, i = this; this.isStopped || (e = this._parentSubscriber, this._complete && (t = function() { return i._complete.call(i._context) } , vt.useDeprecatedSynchronousErrorHandling && e.syncErrorThrowable ? this.__tryOrSetError(e, t) : this.__tryOrUnsub(t)), this.unsubscribe()) } , Rt.prototype.__tryOrUnsub = function(e, t) { try { e.call(this._context, t) } catch (e) { if (this.unsubscribe(), vt.useDeprecatedSynchronousErrorHandling) throw e; St(e) } } , Rt.prototype.__tryOrSetError = function(e, t, i) { if (!vt.useDeprecatedSynchronousErrorHandling) throw new Error("bad call"); try { t.call(this._context, i) } catch (t) { return vt.useDeprecatedSynchronousErrorHandling ? (e.syncErrorValue = t, e.syncErrorThrown = !0) : St(t), !0 } return !1 } , Rt.prototype._unsubscribe = function() { var e = this._parentSubscriber; this._context = null, this._parentSubscriber = null, e.unsubscribe() } , Rt); function Rt(e, t, i, r) { var n, s = Ct.call(this) || this; s._parentSubscriber = e; e = s; return gt(t) ? n = t : t && (n = t.next, i = t.error, r = t.complete, t !== bt && (gt((e = Object.create(t)).unsubscribe) && s.add(e.unsubscribe.bind(e)), e.unsubscribe = s.unsubscribe.bind(s))), s._context = e, s._next = n, s._error = i, s._complete = r, s } function Lt(e, t, i) { var r = Dt.call(this) || this; switch (r.syncErrorValue = null, r.syncErrorThrown = !1, r.syncErrorThrowable = !1, r.isStopped = !1, arguments.length) { case 0: r.destination = bt; break; case 1: if (!e) { r.destination = bt; break } if ("object" == typeof e) { e instanceof Lt ? (r.syncErrorThrowable = e.syncErrorThrowable, (r.destination = e).add(r)) : (r.syncErrorThrowable = !0, r.destination = new xt(r,e)); break } default: r.syncErrorThrowable = !0, r.destination = new xt(r,e,t,i) } return r } var _t = "function" == typeof Symbol && Symbol.observable || "@@observable"; function Nt(e) { return e } function Ft() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; return Bt(e) } function Bt(t) { return 0 === t.length ? Nt : 1 === t.length ? t[0] : function(e) { return t.reduce(function(e, t) { return t(e) }, e) } } var Ut = ($t.prototype.lift = function(e) { var t = new $t; return t.source = this, t.operator = e, t } , $t.prototype.subscribe = function(e, t, i) { var r = this.operator , i = function(e, t, i) { if (e) { if (e instanceof Pt) return e; if (e[Mt]) return e[Mt]() } return e || t || i ? new Pt(e,t,i) : new Pt(bt) }(e, t, i); if (r ? i.add(r.call(i, this.source)) : i.add(this.source || vt.useDeprecatedSynchronousErrorHandling && !i.syncErrorThrowable ? this._subscribe(i) : this._trySubscribe(i)), vt.useDeprecatedSynchronousErrorHandling && i.syncErrorThrowable && (i.syncErrorThrowable = !1, i.syncErrorThrown)) throw i.syncErrorValue; return i } , $t.prototype._trySubscribe = function(t) { try { return this._subscribe(t) } catch (e) { vt.useDeprecatedSynchronousErrorHandling && (t.syncErrorThrown = !0, t.syncErrorValue = e), function(e) { for (; e; ) { var t = e , i = t.closed , r = t.destination , t = t.isStopped; if (i || t) return; e = r && r instanceof Pt ? r : null } return 1 }(t) ? t.error(e) : console.warn(e) } } , $t.prototype.forEach = function(r, e) { var n = this; return new (e = Vt(e))(function(e, t) { var i = n.subscribe(function(e) { try { r(e) } catch (e) { t(e), i && i.unsubscribe() } }, t, e) } ) } , $t.prototype._subscribe = function(e) { var t = this.source; return t && t.subscribe(e) } , $t.prototype[_t] = function() { return this } , $t.prototype.pipe = function() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; return 0 === e.length ? this : Bt(e)(this) } , $t.prototype.toPromise = function(e) { var r = this; return new (e = Vt(e))(function(e, t) { var i; r.subscribe(function(e) { return i = e }, function(e) { return t(e) }, function() { return e(i) }) } ) } , $t.create = function(e) { return new $t(e) } , $t); function $t(e) { this._isScalar = !1, e && (this._subscribe = e) } function Vt(e) { if (!(e = e || (vt.Promise || Promise))) throw new Error("no Promise impl found"); return e } var Kt, Ht, jt, qt, Qt = (ti.prototype = Object.create(Error.prototype), ti), Gt = (lt(ei, qt = wt), ei.prototype.unsubscribe = function() { var e, t; this.closed || (this.closed = !0, e = (t = this.subject).observers, this.subject = null, !e || 0 === e.length || t.isStopped || t.closed || -1 !== (t = e.indexOf(this.subscriber)) && e.splice(t, 1)) } , ei), Wt = (lt(Zt, jt = Pt), Zt), zt = (lt(Jt, Ht = Ut), Jt.prototype[Mt] = function() { return new Wt(this) } , Jt.prototype.lift = function(e) { var t = new Xt(this,this); return t.operator = e, t } , Jt.prototype.next = function(e) { if (this.closed) throw new Qt; if (!this.isStopped) for (var t = this.observers, i = t.length, r = t.slice(), n = 0; n < i; n++) r[n].next(e) } , Jt.prototype.error = function(e) { if (this.closed) throw new Qt; this.hasError = !0, this.thrownError = e, this.isStopped = !0; for (var t = this.observers, i = t.length, r = t.slice(), n = 0; n < i; n++) r[n].error(e); this.observers.length = 0 } , Jt.prototype.complete = function() { if (this.closed) throw new Qt; this.isStopped = !0; for (var e = this.observers, t = e.length, i = e.slice(), r = 0; r < t; r++) i[r].complete(); this.observers.length = 0 } , Jt.prototype.unsubscribe = function() { this.isStopped = !0, this.closed = !0, this.observers = null } , Jt.prototype._trySubscribe = function(e) { if (this.closed) throw new Qt; return Ht.prototype._trySubscribe.call(this, e) } , Jt.prototype._subscribe = function(e) { if (this.closed) throw new Qt; return this.hasError ? (e.error(this.thrownError), wt.EMPTY) : this.isStopped ? (e.complete(), wt.EMPTY) : (this.observers.push(e), new Gt(this,e)) } , Jt.prototype.asObservable = function() { var e = new Ut; return e.source = this, e } , Jt.create = function(e, t) { return new Xt(e,t) } , Jt), Xt = (lt(Yt, Kt = zt), Yt.prototype.next = function(e) { var t = this.destination; t && t.next && t.next(e) } , Yt.prototype.error = function(e) { var t = this.destination; t && t.error && this.destination.error(e) } , Yt.prototype.complete = function() { var e = this.destination; e && e.complete && this.destination.complete() } , Yt.prototype._subscribe = function(e) { return this.source ? this.source.subscribe(e) : wt.EMPTY } , Yt); function Yt(e, t) { var i = Kt.call(this) || this; return i.destination = e, i.source = t, i } function Jt() { var e = Ht.call(this) || this; return e.observers = [], e.closed = !1, e.isStopped = !1, e.hasError = !1, e.thrownError = null, e } function Zt(e) { var t = jt.call(this, e) || this; return t.destination = e, t } function ei(e, t) { var i = qt.call(this) || this; return i.subject = e, i.subscriber = t, i.closed = !1, i } function ti() { return Error.call(this), this.message = "object unsubscribed", this.name = "ObjectUnsubscribedError", this } function ii() { return function(e) { return e.lift(new hi(e)) } } var ri, ni, si, ai, oi, di, li, ui, ci, hi = (xi.prototype.call = function(e, t) { var i = this.connectable; i._refCount++; e = new pi(e,i), t = t.subscribe(e); return e.closed || (e.connection = i.connect()), t } , xi), pi = (lt(Pi, ci = Pt), Pi.prototype._unsubscribe = function() { var e, t = this.connectable; t ? (this.connectable = null, (e = t._refCount) <= 0 ? this.connection = null : (t._refCount = e - 1, 1 < e ? this.connection = null : (e = this.connection, t = t._connection, this.connection = null, !t || e && t !== e || t.unsubscribe()))) : this.connection = null } , Pi), w = (lt(Mi, ui = Ut), Mi.prototype._subscribe = function(e) { return this.getSubject().subscribe(e) } , Mi.prototype.getSubject = function() { var e = this._subject; return e && !e.isStopped || (this._subject = this.subjectFactory()), this._subject } , Mi.prototype.connect = function() { var e = this._connection; return e || (this._isComplete = !1, (e = this._connection = new wt).add(this.source.subscribe(new mi(this.getSubject(),this))), e.closed && (this._connection = null, e = wt.EMPTY)), e } , Mi.prototype.refCount = function() { return ii()(this) } , Mi), fi = { operator: { value: null }, _refCount: { value: 0, writable: !0 }, _subject: { value: null, writable: !0 }, _connection: { value: null, writable: !0 }, _subscribe: { value: (pd = w.prototype)._subscribe }, _isComplete: { value: pd._isComplete, writable: !0 }, getSubject: { value: pd.getSubject }, connect: { value: pd.connect }, refCount: { value: pd.refCount } }, mi = (lt(Di, li = Wt), Di.prototype._error = function(e) { this._unsubscribe(), li.prototype._error.call(this, e) } , Di.prototype._complete = function() { this.connectable._isComplete = !0, this._unsubscribe(), li.prototype._complete.call(this) } , Di.prototype._unsubscribe = function() { var e, t = this.connectable; t && (this.connectable = null, e = t._connection, t._refCount = 0, t._subject = null, t._connection = null, e && e.unsubscribe()) } , Di), gi = (lt(Ci, di = zt), Object.defineProperty(Ci.prototype, "value", { get: function() { return this.getValue() }, enumerable: !0, configurable: !0 }), Ci.prototype._subscribe = function(e) { var t = di.prototype._subscribe.call(this, e); return t && !t.closed && e.next(this._value), t } , Ci.prototype.getValue = function() { if (this.hasError) throw this.thrownError; if (this.closed) throw new Qt; return this._value } , Ci.prototype.next = function(e) { di.prototype.next.call(this, this._value = e) } , Ci), A = (lt(ki, oi = wt), ki.prototype.schedule = function(e, t) { return this } , lt(Oi, ai = ki), Oi.prototype.schedule = function(e, t) { if (void 0 === t && (t = 0), this.closed) return this; this.state = e; var i = this.id , e = this.scheduler; return null != i && (this.id = this.recycleAsyncId(e, i, t)), this.pending = !0, this.delay = t, this.id = this.id || this.requestAsyncId(e, this.id, t), this } , Oi.prototype.requestAsyncId = function(e, t, i) { return void 0 === i && (i = 0), setInterval(e.flush.bind(e, this), i) } , Oi.prototype.recycleAsyncId = function(e, t, i) { if (null !== (i = void 0 === i ? 0 : i) && this.delay === i && !1 === this.pending) return t; clearInterval(t) } , Oi.prototype.execute = function(e, t) { if (this.closed) return new Error("executing a cancelled action"); this.pending = !1; t = this._execute(e, t); if (t) return t; !1 === this.pending && null != this.id && (this.id = this.recycleAsyncId(this.scheduler, this.id, null)) } , Oi.prototype._execute = function(e, t) { var i = !1 , r = void 0; try { this.work(e) } catch (e) { i = !0, r = !!e && e || new Error(e) } if (i) return this.unsubscribe(), r } , Oi.prototype._unsubscribe = function() { var e = this.id , t = this.scheduler , i = t.actions , r = i.indexOf(this); this.work = null, this.state = null, this.pending = !1, this.scheduler = null, -1 !== r && i.splice(r, 1), null != e && (this.id = this.recycleAsyncId(t, e, null)), this.delay = null } , Oi), yi = (lt(Ai, si = A), Ai.prototype.schedule = function(e, t) { return 0 < (t = void 0 === t ? 0 : t) ? si.prototype.schedule.call(this, e, t) : (this.delay = t, this.state = e, this.scheduler.flush(this), this) } , Ai.prototype.execute = function(e, t) { return 0 < t || this.closed ? si.prototype.execute.call(this, e, t) : this._execute(e, t) } , Ai.prototype.requestAsyncId = function(e, t, i) { return null !== (i = void 0 === i ? 0 : i) && 0 < i || null === i && 0 < this.delay ? si.prototype.requestAsyncId.call(this, e, t, i) : e.flush(this) } , Ai), vi = (wi.prototype.schedule = function(e, t, i) { return void 0 === t && (t = 0), new this.SchedulerAction(this,e).schedule(i, t) } , wi.now = function() { return Date.now() } , wi), Si = (lt(Ii, ni = vi), Ii.prototype.schedule = function(e, t, i) { return void 0 === t && (t = 0), Ii.delegate && Ii.delegate !== this ? Ii.delegate.schedule(e, t, i) : ni.prototype.schedule.call(this, e, t, i) } , Ii.prototype.flush = function(e) { var t, i = this.actions; if (this.active) i.push(e); else { this.active = !0; do { if (t = e.execute(e.state, e.delay)) break } while (e = i.shift()); if (this.active = !1, t) { for (; e = i.shift(); ) e.unsubscribe(); throw t } } } , Ii), bi = (lt(Ei, ri = Si), new Ei(yi)), Ti = new Ut(function(e) { return e.complete() } ); function Ei() { return null !== ri && ri.apply(this, arguments) || this } function Ii(e, t) { void 0 === t && (t = vi.now); var i = ni.call(this, e, function() { return Ii.delegate && Ii.delegate !== i ? Ii.delegate.now() : t() }) || this; return i.actions = [], i.active = !1, i.scheduled = void 0, i } function wi(e, t) { void 0 === t && (t = wi.now), this.SchedulerAction = e, this.now = t } function Ai(e, t) { var i = si.call(this, e, t) || this; return i.scheduler = e, i.work = t, i } function Oi(e, t) { var i = ai.call(this, e, t) || this; return i.scheduler = e, i.work = t, i.pending = !1, i } function ki(e, t) { return oi.call(this) || this } function Ci(e) { var t = di.call(this) || this; return t._value = e, t } function Di(e, t) { e = li.call(this, e) || this; return e.connectable = t, e } function Mi(e, t) { var i = ui.call(this) || this; return i.source = e, i.subjectFactory = t, i._refCount = 0, i._isComplete = !1, i } function Pi(e, t) { e = ci.call(this, e) || this; return e.connectable = t, e } function xi(e) { this.connectable = e } function Ri(e) { return e ? (t = e, new Ut(function(e) { return t.schedule(function() { return e.complete() }) } )) : Ti; var t } function Li(e) { return e && "function" == typeof e.schedule } var _i = function(r) { return function(e) { for (var t = 0, i = r.length; t < i && !e.closed; t++) e.next(r[t]); e.complete() } }; function Ni(r, n) { return new Ut(function(e) { var t = new wt , i = 0; return t.add(n.schedule(function() { i !== r.length ? (e.next(r[i++]), e.closed || t.add(this.schedule())) : e.complete() })), t } ) } function Fi(e, t) { return t ? Ni(e, t) : new Ut(_i(e)) } function Bi() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; var i = e[e.length - 1]; return Li(i) ? (e.pop(), Ni(e, i)) : Fi(e) } function Ui(t, i) { return new Ut(i ? function(e) { return i.schedule($i, 0, { error: t, subscriber: e }) } : function(e) { return e.error(t) } ) } function $i(e) { var t = e.error; e.subscriber.error(t) } var Vi = (Ki.prototype.observe = function(e) { switch (this.kind) { case "N": return e.next && e.next(this.value); case "E": return e.error && e.error(this.error); case "C": return e.complete && e.complete() } } , Ki.prototype.do = function(e, t, i) { switch (this.kind) { case "N": return e && e(this.value); case "E": return t && t(this.error); case "C": return i && i() } } , Ki.prototype.accept = function(e, t, i) { return e && "function" == typeof e.next ? this.observe(e) : this.do(e, t, i) } , Ki.prototype.toObservable = function() { switch (this.kind) { case "N": return Bi(this.value); case "E": return Ui(this.error); case "C": return Ri() } throw new Error("unexpected notification kind value") } , Ki.createNext = function(e) { return void 0 !== e ? new Ki("N",e) : Ki.undefinedValueNotification } , Ki.createError = function(e) { return new Ki("E",void 0,e) } , Ki.createComplete = function() { return Ki.completeNotification } , Ki.completeNotification = new Ki("C"), Ki.undefinedValueNotification = new Ki("N",void 0), Ki); function Ki(e, t, i) { this.kind = e, this.value = t, this.error = i, this.hasValue = "N" === e } function Hi(t, i) { return void 0 === i && (i = 0), function(e) { return e.lift(new Gi(t,i)) } } var ji, qi, Qi, Gi = (nr.prototype.call = function(e, t) { return t.subscribe(new Wi(e,this.scheduler,this.delay)) } , nr), Wi = (lt(rr, Qi = Pt), rr.dispatch = function(e) { var t = e.notification , e = e.destination; t.observe(e), this.unsubscribe() } , rr.prototype.scheduleMessage = function(e) { this.destination.add(this.scheduler.schedule(rr.dispatch, this.delay, new zi(e,this.destination))) } , rr.prototype._next = function(e) { this.scheduleMessage(Vi.createNext(e)) } , rr.prototype._error = function(e) { this.scheduleMessage(Vi.createError(e)), this.unsubscribe() } , rr.prototype._complete = function() { this.scheduleMessage(Vi.createComplete()), this.unsubscribe() } , rr), zi = function(e, t) { this.notification = e, this.destination = t }, Xi = (lt(ir, qi = zt), ir.prototype.nextInfiniteTimeWindow = function(e) { var t; this.isStopped || ((t = this._events).push(e), t.length > this._bufferSize && t.shift()), qi.prototype.next.call(this, e) } , ir.prototype.nextTimeWindow = function(e) { this.isStopped || (this._events.push(new Yi(this._getNow(),e)), this._trimBufferThenGetEvents()), qi.prototype.next.call(this, e) } , ir.prototype._subscribe = function(e) { var t, i = this._infiniteTimeWindow, r = i ? this._events : this._trimBufferThenGetEvents(), n = this.scheduler, s = r.length; if (this.closed) throw new Qt; if (t = this.isStopped || this.hasError ? wt.EMPTY : (this.observers.push(e), new Gt(this,e)), n && e.add(e = new Wi(e,n)), i) for (var a = 0; a < s && !e.closed; a++) e.next(r[a]); else for (a = 0; a < s && !e.closed; a++) e.next(r[a].value); return this.hasError ? e.error(this.thrownError) : this.isStopped && e.complete(), t } , ir.prototype._getNow = function() { return (this.scheduler || bi).now() } , ir.prototype._trimBufferThenGetEvents = function() { for (var e = this._getNow(), t = this._bufferSize, i = this._windowTime, r = this._events, n = r.length, s = 0; s < n && !(e - r[s].time < i); ) s++; return 0 < (s = t < n ? Math.max(s, n - t) : s) && r.splice(0, s), r } , ir), Yi = function(e, t) { this.time = e, this.value = t }, Ji = (lt(tr, ji = zt), tr.prototype._subscribe = function(e) { return this.hasError ? (e.error(this.thrownError), wt.EMPTY) : this.hasCompleted && this.hasNext ? (e.next(this.value), e.complete(), wt.EMPTY) : ji.prototype._subscribe.call(this, e) } , tr.prototype.next = function(e) { this.hasCompleted || (this.value = e, this.hasNext = !0) } , tr.prototype.error = function(e) { this.hasCompleted || ji.prototype.error.call(this, e) } , tr.prototype.complete = function() { this.hasCompleted = !0, this.hasNext && ji.prototype.next.call(this, this.value), ji.prototype.complete.call(this) } , tr), Zi = new Si(A), er = Zi; function tr() { var e = null !== ji && ji.apply(this, arguments) || this; return e.value = null, e.hasNext = !1, e.hasCompleted = !1, e } function ir(e, t, i) { void 0 === e && (e = Number.POSITIVE_INFINITY), void 0 === t && (t = Number.POSITIVE_INFINITY); var r = qi.call(this) || this; return r.scheduler = i, r._events = [], r._infiniteTimeWindow = !1, r._bufferSize = e < 1 ? 1 : e, r._windowTime = t < 1 ? 1 : t, t === Number.POSITIVE_INFINITY ? (r._infiniteTimeWindow = !0, r.next = r.nextInfiniteTimeWindow) : r.next = r.nextTimeWindow, r } function rr(e, t, i) { void 0 === i && (i = 0); e = Qi.call(this, e) || this; return e.scheduler = t, e.delay = i, e } function nr(e, t) { void 0 === t && (t = 0), this.scheduler = e, this.delay = t } function sr() {} var ar = (lr.prototype = Object.create(Error.prototype), lr) , or = (dr.prototype = Object.create(Error.prototype), dr); function dr() { return Error.call(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this } function lr() { return Error.call(this), this.message = "argument out of range", this.name = "ArgumentOutOfRangeError", this } function ur(t, i) { return function(e) { if ("function" != typeof t) throw new TypeError("argument is not a function. Are you looking for `mapTo()`?"); return e.lift(new fr(t,i)) } } var cr, hr, pr, fr = (Tr.prototype.call = function(e, t) { return t.subscribe(new mr(e,this.project,this.thisArg)) } , Tr), mr = (lt(br, pr = Pt), br.prototype._next = function(e) { var t; try { t = this.project.call(this.thisArg, e, this.count++) } catch (e) { return void this.destination.error(e) } this.destination.next(t) } , br), gr = (lt(Sr, hr = Pt), Sr.prototype.notifyNext = function(e, t, i, r, n) { this.destination.next(t) } , Sr.prototype.notifyError = function(e, t) { this.destination.error(e) } , Sr.prototype.notifyComplete = function(e) { this.destination.complete() } , Sr), yr = (lt(vr, cr = Pt), vr.prototype._next = function(e) { this.parent.notifyNext(this.outerValue, e, this.outerIndex, this.index++, this) } , vr.prototype._error = function(e) { this.parent.notifyError(e, this), this.unsubscribe() } , vr.prototype._complete = function() { this.parent.notifyComplete(this), this.unsubscribe() } , vr); function vr(e, t, i) { var r = cr.call(this) || this; return r.parent = e, r.outerValue = t, r.outerIndex = i, r.index = 0, r } function Sr() { return null !== hr && hr.apply(this, arguments) || this } function br(e, t, i) { e = pr.call(this, e) || this; return e.project = t, e.count = 0, e.thisArg = i || e, e } function Tr(e, t) { this.project = e, this.thisArg = t } var Er = "function" == typeof Symbol && Symbol.iterator ? Symbol.iterator : "@@iterator" , Ir = function(e) { return e && "number" == typeof e.length && "function" != typeof e }; function wr(e) { return e && "function" != typeof e.subscribe && "function" == typeof e.then } var Ar = function(e) { if (e && "function" == typeof e[_t]) return n = e, function(e) { var t = n[_t](); if ("function" != typeof t.subscribe) throw new TypeError("Provided object does not correctly implement Symbol.observable"); return t.subscribe(e) } ; if (Ir(e)) return _i(e); if (wr(e)) return i = e, function(t) { return i.then(function(e) { t.closed || (t.next(e), t.complete()) }, function(e) { return t.error(e) }).then(null, St), t } ; if (e && "function" == typeof e[Er]) return r = e, function(t) { for (var e = r[Er](); ; ) { var i = void 0; try { i = e.next() } catch (e) { return t.error(e), t } if (i.done) { t.complete(); break } if (t.next(i.value), t.closed) break } return "function" == typeof e.return && t.add(function() { e.return && e.return() }), t } ; var r, i, n, e = Et(e) ? "an invalid object" : "'" + e + "'"; throw new TypeError("You provided " + e + " where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.") }; function Or(e, t, i, r, n) { if (!(n = void 0 === n ? new yr(e,i,r) : n).closed) return t instanceof Ut ? t.subscribe(n) : Ar(t)(n) } var kr = {}; function Cr() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; var i = void 0 , r = void 0; return Li(e[e.length - 1]) && (r = e.pop()), "function" == typeof e[e.length - 1] && (i = e.pop()), Fi(e = 1 === e.length && Tt(e[0]) ? e[0] : e, r).lift(new Mr(i)) } var Dr, Mr = (Rr.prototype.call = function(e, t) { return t.subscribe(new Pr(e,this.resultSelector)) } , Rr), Pr = (lt(xr, Dr = gr), xr.prototype._next = function(e) { this.values.push(kr), this.observables.push(e) } , xr.prototype._complete = function() { var e = this.observables , t = e.length; if (0 === t) this.destination.complete(); else { this.active = t, this.toRespond = t; for (var i = 0; i < t; i++) { var r = e[i]; this.add(Or(this, r, void 0, i)) } } } , xr.prototype.notifyComplete = function(e) { 0 == --this.active && this.destination.complete() } , xr.prototype.notifyNext = function(e, t, i) { var r = this.values , n = r[i] , n = this.toRespond ? n === kr ? --this.toRespond : this.toRespond : 0; r[i] = t, 0 === n && (this.resultSelector ? this._tryResultSelector(r) : this.destination.next(r.slice())) } , xr.prototype._tryResultSelector = function(e) { var t; try { t = this.resultSelector.apply(this, e) } catch (e) { return void this.destination.error(e) } this.destination.next(t) } , xr); function xr(e, t) { e = Dr.call(this, e) || this; return e.resultSelector = t, e.active = 0, e.values = [], e.observables = [], e } function Rr(e) { this.resultSelector = e } function Lr(e, t) { return t ? function(e, t) { if (null != e) { if (e && "function" == typeof e[_t]) return s = e, a = t, new Ut(function(t) { var i = new wt; return i.add(a.schedule(function() { var e = s[_t](); i.add(e.subscribe({ next: function(e) { i.add(a.schedule(function() { return t.next(e) })) }, error: function(e) { i.add(a.schedule(function() { return t.error(e) })) }, complete: function() { i.add(a.schedule(function() { return t.complete() })) } })) })), i } ); if (wr(e)) return r = e, n = t, new Ut(function(t) { var i = new wt; return i.add(n.schedule(function() { return r.then(function(e) { i.add(n.schedule(function() { t.next(e), i.add(n.schedule(function() { return t.complete() })) })) }, function(e) { i.add(n.schedule(function() { return t.error(e) })) }) })), i } ); if (Ir(e)) return Ni(e, t); if (e && "function" == typeof e[Er] || "string" == typeof e) return function(t, i) { if (!t) throw new Error("Iterable cannot be null"); return new Ut(function(r) { var n, e = new wt; return e.add(function() { n && "function" == typeof n.return && n.return() }), e.add(i.schedule(function() { n = t[Er](), e.add(i.schedule(function() { if (!r.closed) { try { var e = n.next() , t = e.value , i = e.done } catch (t) { return void r.error(t) } i ? r.complete() : (r.next(t), this.schedule()) } })) })), e } ) }(e, t) } var r, n, s, a; throw new TypeError((null !== e && typeof e || e) + " is not observable") }(e, t) : e instanceof Ut ? e : new Ut(Ar(e)) } var _r, Nr, Fr = (lt($r, Nr = Pt), $r.prototype._next = function(e) { this.parent.notifyNext(e) } , $r.prototype._error = function(e) { this.parent.notifyError(e), this.unsubscribe() } , $r.prototype._complete = function() { this.parent.notifyComplete(), this.unsubscribe() } , $r), Br = (lt(Ur, _r = Pt), Ur.prototype.notifyNext = function(e) { this.destination.next(e) } , Ur.prototype.notifyError = function(e) { this.destination.error(e) } , Ur.prototype.notifyComplete = function() { this.destination.complete() } , Ur); function Ur() { return null !== _r && _r.apply(this, arguments) || this } function $r(e) { var t = Nr.call(this) || this; return t.parent = e, t } function Vr(e, t) { if (!t.closed) return e instanceof Ut ? e.subscribe(t) : Ar(e)(t) } function Kr(t, n, i) { return void 0 === i && (i = Number.POSITIVE_INFINITY), "function" == typeof n ? function(e) { return e.pipe(Kr(function(i, r) { return Lr(t(i, r)).pipe(ur(function(e, t) { return n(i, e, r, t) })) }, i)) } : ("number" == typeof n && (i = n), function(e) { return e.lift(new jr(t,i)) } ) } var Hr, jr = (Gr.prototype.call = function(e, t) { return t.subscribe(new qr(e,this.project,this.concurrent)) } , Gr), qr = (lt(Qr, Hr = Br), Qr.prototype._next = function(e) { this.active < this.concurrent ? this._tryNext(e) : this.buffer.push(e) } , Qr.prototype._tryNext = function(e) { var t, i = this.index++; try { t = this.project(e, i) } catch (e) { return void this.destination.error(e) } this.active++, this._innerSub(t) } , Qr.prototype._innerSub = function(e) { var t = new Fr(this) , i = this.destination; i.add(t); e = Vr(e, t); e !== t && i.add(e) } , Qr.prototype._complete = function() { this.hasCompleted = !0, 0 === this.active && 0 === this.buffer.length && this.destination.complete(), this.unsubscribe() } , Qr.prototype.notifyNext = function(e) { this.destination.next(e) } , Qr.prototype.notifyComplete = function() { var e = this.buffer; this.active--, 0 < e.length ? this._next(e.shift()) : 0 === this.active && this.hasCompleted && this.destination.complete() } , Qr); function Qr(e, t, i) { void 0 === i && (i = Number.POSITIVE_INFINITY); e = Hr.call(this, e) || this; return e.project = t, e.concurrent = i, e.hasCompleted = !1, e.buffer = [], e.active = 0, e.index = 0, e } function Gr(e, t) { void 0 === t && (t = Number.POSITIVE_INFINITY), this.project = e, this.concurrent = t } function Wr(e) { return Kr(Nt, e = void 0 === e ? Number.POSITIVE_INFINITY : e) } function zr() { return Wr(1) } function Xr() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; return zr()(Bi.apply(void 0, e)) } function Yr(i) { return new Ut(function(t) { var e; try { e = i() } catch (e) { return void t.error(e) } return (e ? Lr(e) : Ri()).subscribe(t) } ) } function Jr() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; if (1 === e.length) { var i = e[0]; if (Tt(i)) return Zr(i, null); if (Et(i) && Object.getPrototypeOf(i) === Object.prototype) { var r = Object.keys(i); return Zr(r.map(function(e) { return i[e] }), r) } } if ("function" != typeof e[e.length - 1]) return Zr(e, null); var n = e.pop(); return Zr(e = 1 === e.length && Tt(e[0]) ? e[0] : e, null).pipe(ur(function(e) { return n.apply(void 0, e) })) } function Zr(d, l) { return new Ut(function(r) { var n = d.length; if (0 !== n) for (var s = new Array(n), a = 0, o = 0, e = 0; e < n; e++) !function(t) { var e = Lr(d[t]) , i = !1; r.add(e.subscribe({ next: function(e) { i || (i = !0, o++), s[t] = e }, error: function(e) { return r.error(e) }, complete: function() { ++a !== n && i || (o === n && r.next(l ? l.reduce(function(e, t, i) { return e[t] = s[i], e }, {}) : s), r.complete()) } })) }(e); else r.complete() } ) } function en(e, i, r, t) { return gt(r) && (t = r, r = void 0), t ? en(e, i, r).pipe(ur(function(e) { return Tt(e) ? t.apply(void 0, e) : t(e) })) : new Ut(function(t) { !function e(t, i, r, n, s) { var a; if (function(e) { return e && "function" == typeof e.addEventListener && "function" == typeof e.removeEventListener }(t)) { var o = t; t.addEventListener(i, r, s), a = function() { return o.removeEventListener(i, r, s) } } else if (function(e) { return e && "function" == typeof e.on && "function" == typeof e.off }(t)) { var d = t; t.on(i, r), a = function() { return d.off(i, r) } } else if (function(e) { return e && "function" == typeof e.addListener && "function" == typeof e.removeListener }(t)) { var l = t; t.addListener(i, r), a = function() { return l.removeListener(i, r) } } else { if (!t || !t.length) throw new TypeError("Invalid event target"); for (var u = 0, c = t.length; u < c; u++) e(t[u], i, r, n, s) } n.add(a) }(e, i, function(e) { 1 < arguments.length ? t.next(Array.prototype.slice.call(arguments)) : t.next(e) }, t, r) } ) } function tn(e, t, i) { return void 0 === t && (t = Ti), void 0 === i && (i = Ti), Yr(function() { return e() ? t : i }) } function rn(e) { return !Tt(e) && 0 <= e - parseFloat(e) + 1 } function nn() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; var i = Number.POSITIVE_INFINITY , r = null , n = e[e.length - 1]; return Li(n) ? (r = e.pop(), 1 < e.length && "number" == typeof e[e.length - 1] && (i = e.pop())) : "number" == typeof n && (i = e.pop()), null === r && 1 === e.length && e[0]instanceof Ut ? e[0] : Wr(i)(Fi(e, r)) } var sn = new Ut(sr); function an(t, i) { return function(e) { return e.lift(new dn(t,i)) } } var on, dn = (cn.prototype.call = function(e, t) { return t.subscribe(new ln(e,this.predicate,this.thisArg)) } , cn), ln = (lt(un, on = Pt), un.prototype._next = function(e) { var t; try { t = this.predicate.call(this.thisArg, e, this.count++) } catch (e) { return void this.destination.error(e) } t && this.destination.next(e) } , un); function un(e, t, i) { e = on.call(this, e) || this; return e.predicate = t, e.thisArg = i, e.count = 0, e } function cn(e, t) { this.predicate = e, this.thisArg = t } function hn() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; if (1 === e.length) { if (!Tt(e[0])) return e[0]; e = e[0] } return Fi(e, void 0).lift(new fn) } var pn, fn = (yn.prototype.call = function(e, t) { return t.subscribe(new mn(e)) } , yn), mn = (lt(gn, pn = gr), gn.prototype._next = function(e) { this.observables.push(e) } , gn.prototype._complete = function() { var e = this.observables , t = e.length; if (0 === t) this.destination.complete(); else { for (var i = 0; i < t && !this.hasFirst; i++) { var r = Or(this, e[i], void 0, i); this.subscriptions && this.subscriptions.push(r), this.add(r) } this.observables = null } } , gn.prototype.notifyNext = function(e, t, i) { if (!this.hasFirst) { this.hasFirst = !0; for (var r, n = 0; n < this.subscriptions.length; n++) n !== i && ((r = this.subscriptions[n]).unsubscribe(), this.remove(r)); this.subscriptions = null } this.destination.next(t) } , gn); function gn(e) { e = pn.call(this, e) || this; return e.hasFirst = !1, e.observables = [], e.subscriptions = [], e } function yn() {} function vn(i, e, r) { void 0 === i && (i = 0); var n = -1; return rn(e) ? n = Number(e) < 1 ? 1 : Number(e) : Li(e) && (r = e), Li(r) || (r = er), new Ut(function(e) { var t = rn(i) ? i : +i - r.now(); return r.schedule(Sn, t, { index: 0, period: n, subscriber: e }) } ) } function Sn(e) { var t = e.index , i = e.period , r = e.subscriber; if (r.next(t), !r.closed) { if (-1 === i) return r.complete(); e.index = t + 1, this.schedule(e, i) } } function bn() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; var i = e[e.length - 1]; return "function" == typeof i && e.pop(), Fi(e, void 0).lift(new In(i)) } var Tn, En, In = (xn.prototype.call = function(e, t) { return t.subscribe(new wn(e,this.resultSelector)) } , xn), wn = (lt(Pn, En = Pt), Pn.prototype._next = function(e) { var t = this.iterators; Tt(e) ? t.push(new On(e)) : "function" == typeof e[Er] ? t.push(new An(e[Er]())) : t.push(new kn(this.destination,this,e)) } , Pn.prototype._complete = function() { var e = this.iterators , t = e.length; if (this.unsubscribe(), 0 !== t) { this.active = t; for (var i = 0; i < t; i++) { var r = e[i]; r.stillUnsubscribed ? this.destination.add(r.subscribe()) : this.active-- } } else this.destination.complete() } , Pn.prototype.notifyInactive = function() { this.active--, 0 === this.active && this.destination.complete() } , Pn.prototype.checkIterators = function() { for (var e = this.iterators, t = e.length, i = this.destination, r = 0; r < t; r++) if ("function" == typeof (a = e[r]).hasValue && !a.hasValue()) return; for (var n = !1, s = [], r = 0; r < t; r++) { var a, o = (a = e[r]).next(); if (a.hasCompleted() && (n = !0), o.done) return void i.complete(); s.push(o.value) } this.resultSelector ? this._tryresultSelector(s) : i.next(s), n && i.complete() } , Pn.prototype._tryresultSelector = function(e) { var t; try { t = this.resultSelector.apply(this, e) } catch (e) { return void this.destination.error(e) } this.destination.next(t) } , Pn), An = (Mn.prototype.hasValue = function() { return !0 } , Mn.prototype.next = function() { var e = this.nextResult; return this.nextResult = this.iterator.next(), e } , Mn.prototype.hasCompleted = function() { var e = this.nextResult; return Boolean(e && e.done) } , Mn), On = (Dn.prototype[Er] = function() { return this } , Dn.prototype.next = function(e) { var t = this.index++ , i = this.array; return t < this.length ? { value: i[t], done: !1 } : { value: null, done: !0 } } , Dn.prototype.hasValue = function() { return this.array.length > this.index } , Dn.prototype.hasCompleted = function() { return this.array.length === this.index } , Dn), kn = (lt(Cn, Tn = Br), Cn.prototype[Er] = function() { return this } , Cn.prototype.next = function() { var e = this.buffer; return 0 === e.length && this.isComplete ? { value: null, done: !0 } : { value: e.shift(), done: !1 } } , Cn.prototype.hasValue = function() { return 0 < this.buffer.length } , Cn.prototype.hasCompleted = function() { return 0 === this.buffer.length && this.isComplete } , Cn.prototype.notifyComplete = function() { 0 < this.buffer.length ? (this.isComplete = !0, this.parent.notifyInactive()) : this.destination.complete() } , Cn.prototype.notifyNext = function(e) { this.buffer.push(e), this.parent.checkIterators() } , Cn.prototype.subscribe = function() { return Vr(this.observable, new Fr(this)) } , Cn); function Cn(e, t, i) { e = Tn.call(this, e) || this; return e.parent = t, e.observable = i, e.stillUnsubscribed = !0, e.buffer = [], e.isComplete = !1, e } function Dn(e) { this.array = e, this.index = 0, this.length = 0, this.length = e.length } function Mn(e) { this.iterator = e, this.nextResult = e.next() } function Pn(e, t, i) { e = En.call(this, e) || this; return e.resultSelector = t, e.iterators = [], e.active = 0, e.resultSelector = "function" == typeof t ? t : void 0, e } function xn(e) { this.resultSelector = e } var Rn, Ln = (Fn.prototype.call = function(e, t) { return t.subscribe(new _n(e,this.durationSelector)) } , Fn), _n = (lt(Nn, Rn = Br), Nn.prototype._next = function(e) { if (this.value = e, this.hasValue = !0, !this.throttled) { var t = void 0; try { t = (0, this.durationSelector)(e) } catch (e) { return this.destination.error(e) } t = Vr(t, new Fr(this)); !t || t.closed ? this.clearThrottle() : this.add(this.throttled = t) } } , Nn.prototype.clearThrottle = function() { var e = this.value , t = this.hasValue , i = this.throttled; i && (this.remove(i), this.throttled = void 0, i.unsubscribe()), t && (this.value = void 0, this.hasValue = !1, this.destination.next(e)) } , Nn.prototype.notifyNext = function() { this.clearThrottle() } , Nn.prototype.notifyComplete = function() { this.clearThrottle() } , Nn); function Nn(e, t) { e = Rn.call(this, e) || this; return e.durationSelector = t, e.hasValue = !1, e } function Fn(e) { this.durationSelector = e } function Bn(e, t) { return void 0 === t && (t = er), i = function() { return vn(e, t) } , function(e) { return e.lift(new Ln(i)) } ; var i } function Un(i) { return function(e) { var t = new Vn(i) , e = e.lift(t); return t.caught = e } } var $n, Vn = (jn.prototype.call = function(e, t) { return t.subscribe(new Kn(e,this.selector,this.caught)) } , jn), Kn = (lt(Hn, $n = Br), Hn.prototype.error = function(e) { if (!this.isStopped) { var t = void 0; try { t = this.selector(e, this.caught) } catch (e) { return void $n.prototype.error.call(this, e) } this._unsubscribeAndRecycle(); var i = new Fr(this); this.add(i); t = Vr(t, i); t !== i && this.add(t) } } , Hn); function Hn(e, t, i) { e = $n.call(this, e) || this; return e.selector = t, e.caught = i, e } function jn(e) { this.selector = e } function qn(e, t) { return Kr(e, t, 1) } function Qn(t, i) { return void 0 === i && (i = er), function(e) { return e.lift(new Wn(t,i)) } } var Gn, Wn = (Yn.prototype.call = function(e, t) { return t.subscribe(new zn(e,this.dueTime,this.scheduler)) } , Yn), zn = (lt(Xn, Gn = Pt), Xn.prototype._next = function(e) { this.clearDebounce(), this.lastValue = e, this.hasValue = !0, this.add(this.debouncedSubscription = this.scheduler.schedule(Jn, this.dueTime, this)) } , Xn.prototype._complete = function() { this.debouncedNext(), this.destination.complete() } , Xn.prototype.debouncedNext = function() { var e; this.clearDebounce(), this.hasValue && (e = this.lastValue, this.lastValue = null, this.hasValue = !1, this.destination.next(e)) } , Xn.prototype.clearDebounce = function() { var e = this.debouncedSubscription; null !== e && (this.remove(e), e.unsubscribe(), this.debouncedSubscription = null) } , Xn); function Xn(e, t, i) { e = Gn.call(this, e) || this; return e.dueTime = t, e.scheduler = i, e.debouncedSubscription = null, e.lastValue = null, e.hasValue = !1, e } function Yn(e, t) { this.dueTime = e, this.scheduler = t } function Jn(e) { e.debouncedNext() } var Zn, es = (rs.prototype.call = function(e, t) { return t.subscribe(new ts(e,this.defaultValue)) } , rs), ts = (lt(is, Zn = Pt), is.prototype._next = function(e) { this.isEmpty = !1, this.destination.next(e) } , is.prototype._complete = function() { this.isEmpty && this.destination.next(this.defaultValue), this.destination.complete() } , is); function is(e, t) { e = Zn.call(this, e) || this; return e.defaultValue = t, e.isEmpty = !0, e } function rs(e) { this.defaultValue = e } function ns(e) { return e instanceof Date && !isNaN(+e) } function ss(e, t) { void 0 === t && (t = er); var i = ns(e) ? +e - t.now() : Math.abs(e); return function(e) { return e.lift(new os(i,t)) } } var as, os = (cs.prototype.call = function(e, t) { return t.subscribe(new ds(e,this.delay,this.scheduler)) } , cs), ds = (lt(us, as = Pt), us.dispatch = function(e) { for (var t, i = e.source, r = i.queue, n = e.scheduler, s = e.destination; 0 < r.length && r[0].time - n.now() <= 0; ) r.shift().notification.observe(s); 0 < r.length ? (t = Math.max(0, r[0].time - n.now()), this.schedule(e, t)) : (this.unsubscribe(), i.active = !1) } , us.prototype._schedule = function(e) { this.active = !0, this.destination.add(e.schedule(us.dispatch, this.delay, { source: this, destination: this.destination, scheduler: e })) } , us.prototype.scheduleNotification = function(e) { var t; !0 !== this.errored && (t = this.scheduler, e = new ls(t.now() + this.delay,e), this.queue.push(e), !1 === this.active && this._schedule(t)) } , us.prototype._next = function(e) { this.scheduleNotification(Vi.createNext(e)) } , us.prototype._error = function(e) { this.errored = !0, this.queue = [], this.destination.error(e), this.unsubscribe() } , us.prototype._complete = function() { this.scheduleNotification(Vi.createComplete()), this.unsubscribe() } , us), ls = function(e, t) { this.time = e, this.notification = t }; function us(e, t, i) { e = as.call(this, e) || this; return e.delay = t, e.scheduler = i, e.queue = [], e.active = !1, e.errored = !1, e } function cs(e, t) { this.delay = e, this.scheduler = t } var hs, ps, fs, ms = (Ts.prototype.call = function(e, t) { return t.subscribe(new gs(e,this.delayDurationSelector)) } , Ts), gs = (lt(bs, fs = gr), bs.prototype.notifyNext = function(e, t, i, r, n) { this.destination.next(e), this.removeSubscription(n), this.tryComplete() } , bs.prototype.notifyError = function(e, t) { this._error(e) } , bs.prototype.notifyComplete = function(e) { e = this.removeSubscription(e); e && this.destination.next(e), this.tryComplete() } , bs.prototype._next = function(e) { var t = this.index++; try { var i = this.delayDurationSelector(e, t); i && this.tryDelay(i, e) } catch (e) { this.destination.error(e) } } , bs.prototype._complete = function() { this.completed = !0, this.tryComplete(), this.unsubscribe() } , bs.prototype.removeSubscription = function(e) { e.unsubscribe(); var t = this.delayNotifierSubscriptions.indexOf(e); return -1 !== t && this.delayNotifierSubscriptions.splice(t, 1), e.outerValue } , bs.prototype.tryDelay = function(e, t) { t = Or(this, e, t); t && !t.closed && (this.destination.add(t), this.delayNotifierSubscriptions.push(t)) } , bs.prototype.tryComplete = function() { this.completed && 0 === this.delayNotifierSubscriptions.length && this.destination.complete() } , bs), ys = (lt(Ss, ps = Ut), Ss.prototype._subscribe = function(e) { this.subscriptionDelay.subscribe(new ys(e,this.source)) } , lt(vs, hs = Pt), vs.prototype._next = function(e) { this.subscribeToSource() } , vs.prototype._error = function(e) { this.unsubscribe(), this.parent.error(e) } , vs.prototype._complete = function() { this.unsubscribe(), this.subscribeToSource() } , vs.prototype.subscribeToSource = function() { this.sourceSubscribed || (this.sourceSubscribed = !0, this.unsubscribe(), this.source.subscribe(this.parent)) } , vs); function vs(e, t) { var i = hs.call(this) || this; return i.parent = e, i.source = t, i.sourceSubscribed = !1, i } function Ss(e, t) { var i = ps.call(this) || this; return i.source = e, i.subscriptionDelay = t, i } function bs(e, t) { e = fs.call(this, e) || this; return e.delayDurationSelector = t, e.completed = !1, e.delayNotifierSubscriptions = [], e.index = 0, e } function Ts(e) { this.delayDurationSelector = e } function Es(t, i) { return function(e) { return e.lift(new ws(t,i)) } } var Is, ws = (ks.prototype.call = function(e, t) { return t.subscribe(new As(e,this.compare,this.keySelector)) } , ks), As = (lt(Os, Is = Pt), Os.prototype.compare = function(e, t) { return e === t } , Os.prototype._next = function(e) { try { var t = this.keySelector , i = t ? t(e) : e } catch (e) { return this.destination.error(e) } t = !1; if (this.hasKey) try { t = (0, this.compare)(this.key, i) } catch (e) { return this.destination.error(e) } else this.hasKey = !0; t || (this.key = i, this.destination.next(e)) } , Os); function Os(e, t, i) { e = Is.call(this, e) || this; return e.keySelector = i, e.hasKey = !1, "function" == typeof t && (e.compare = t), e } function ks(e, t) { this.compare = e, this.keySelector = t } function Cs(t) { return function(e) { return 0 === t ? Ri() : e.lift(new Ms(t)) } } var Ds, Ms = (Rs.prototype.call = function(e, t) { return t.subscribe(new Ps(e,this.total)) } , Rs), Ps = (lt(xs, Ds = Pt), xs.prototype._next = function(e) { var t = this.total , i = ++this.count; i <= t && (this.destination.next(e), i === t && (this.destination.complete(), this.unsubscribe())) } , xs); function xs(e, t) { e = Ds.call(this, e) || this; return e.total = t, e.count = 0, e } function Rs(e) { if (this.total = e, this.total < 0) throw new ar } function Ls(t, n) { return n ? function(e) { return e.pipe(Ls(function(i, r) { return Lr(t(i, r)).pipe(ur(function(e, t) { return n(i, e, r, t) })) })) } : function(e) { return e.lift(new Ns(t)) } } var _s, Ns = (Us.prototype.call = function(e, t) { return t.subscribe(new Fs(e,this.project)) } , Us), Fs = (lt(Bs, _s = Br), Bs.prototype._next = function(e) { this.hasSubscription || this.tryNext(e) } , Bs.prototype.tryNext = function(e) { var t, i = this.index++; try { t = this.project(e, i) } catch (e) { return void this.destination.error(e) } this.hasSubscription = !0, this._innerSub(t) } , Bs.prototype._innerSub = function(e) { var t = new Fr(this) , i = this.destination; i.add(t); e = Vr(e, t); e !== t && i.add(e) } , Bs.prototype._complete = function() { this.hasCompleted = !0, this.hasSubscription || this.destination.complete(), this.unsubscribe() } , Bs.prototype.notifyNext = function(e) { this.destination.next(e) } , Bs.prototype.notifyError = function(e) { this.destination.error(e) } , Bs.prototype.notifyComplete = function() { this.hasSubscription = !1, this.hasCompleted && this.destination.complete() } , Bs); function Bs(e, t) { e = _s.call(this, e) || this; return e.project = t, e.hasSubscription = !1, e.hasCompleted = !1, e.index = 0, e } function Us(e) { this.project = e } function $s(t) { return function(e) { return e.lift(new Ks(t)) } } var Vs, Ks = (qs.prototype.call = function(e, t) { return t.subscribe(new Hs(e,this.callback)) } , qs), Hs = (lt(js, Vs = Pt), js); function js(e, t) { e = Vs.call(this, e) || this; return e.add(new wt(t)), e } function qs(e) { this.callback = e } function Qs(t) { return function(e) { return 0 === t ? Ri() : e.lift(new Ws(t)) } } var Gs, Ws = (Ys.prototype.call = function(e, t) { return t.subscribe(new zs(e,this.total)) } , Ys), zs = (lt(Xs, Gs = Pt), Xs.prototype._next = function(e) { var t = this.ring , i = this.total , r = this.count++; t.length < i ? t.push(e) : t[r % i] = e } , Xs.prototype._complete = function() { var e = this.destination , t = this.count; if (0 < t) for (var i = this.count >= this.total ? this.total : this.count, r = this.ring, n = 0; n < i; n++) { var s = t++ % i; e.next(r[s]) } e.complete() } , Xs); function Xs(e, t) { e = Gs.call(this, e) || this; return e.total = t, e.ring = new Array, e.count = 0, e } function Ys(e) { if (this.total = e, this.total < 0) throw new ar } function Js(t) { return function(e) { return e.lift(new ea(t)) } } var Zs, ea = (ra.prototype.call = function(e, t) { return t.subscribe(new ta(e,this.value)) } , ra), ta = (lt(ia, Zs = Pt), ia.prototype._next = function(e) { this.destination.next(this.value) } , ia); function ia(e, t) { e = Zs.call(this, e) || this; return e.value = t, e } function ra(e) { this.value = e } function na(t, i) { var r = 2 <= arguments.length ? !0 : !1; return function(e) { return e.lift(new aa(t,i,r)) } } var sa, aa = (la.prototype.call = function(e, t) { return t.subscribe(new oa(e,this.accumulator,this.seed,this.hasSeed)) } , la), oa = (lt(da, sa = Pt), Object.defineProperty(da.prototype, "seed", { get: function() { return this._seed }, set: function(e) { this.hasSeed = !0, this._seed = e }, enumerable: !0, configurable: !0 }), da.prototype._next = function(e) { if (this.hasSeed) return this._tryNext(e); this.seed = e, this.destination.next(e) } , da.prototype._tryNext = function(e) { var t, i = this.index++; try { t = this.accumulator(this.seed, e, i) } catch (e) { this.destination.error(e) } this.seed = t, this.destination.next(t) } , da); function da(e, t, i, r) { e = sa.call(this, e) || this; return e.accumulator = t, e._seed = i, e.hasSeed = r, e.index = 0, e } function la(e, t, i) { void 0 === i && (i = !1), this.accumulator = e, this.seed = t, this.hasSeed = i } ua.prototype.call = function(e, t) { var i = this.selector , r = this.subjectFactory() , e = i(r).subscribe(e); return e.add(t.subscribe(r)), e } ; function ua(e, t) { this.subjectFactory = e, this.selector = t } function ca() { return function(e) { return e.lift(new pa) } } var ha, pa = (ga.prototype.call = function(e, t) { return t.subscribe(new fa(e)) } , ga), fa = (lt(ma, ha = Pt), ma.prototype._next = function(e) { var t; this.hasPrev ? t = [this.prev, e] : this.hasPrev = !0, this.prev = e, t && this.destination.next(t) } , ma); function ma(e) { e = ha.call(this, e) || this; return e.hasPrev = !1, e } function ga() {} function ya(t) { return function(e) { return e.lift(new Sa(t,e)) } } var va, Sa = (Ea.prototype.call = function(e, t) { return t.subscribe(new ba(e,this.notifier,this.source)) } , Ea), ba = (lt(Ta, va = Br), Ta.prototype.error = function(e) { if (!this.isStopped) { var t = this.errors , i = this.retries , r = this.retriesSubscription; if (i) this.errors = void 0, this.retriesSubscription = void 0; else { t = new zt; try { i = (0, this.notifier)(t) } catch (e) { return va.prototype.error.call(this, e) } r = Vr(i, new Fr(this)) } this._unsubscribeAndRecycle(), this.errors = t, this.retries = i, this.retriesSubscription = r, t.next(e) } } , Ta.prototype._unsubscribe = function() { var e = this.errors , t = this.retriesSubscription; e && (e.unsubscribe(), this.errors = void 0), t && (t.unsubscribe(), this.retriesSubscription = void 0), this.retries = void 0 } , Ta.prototype.notifyNext = function() { var e = this._unsubscribe; this._unsubscribe = null, this._unsubscribeAndRecycle(), this._unsubscribe = e, this.source.subscribe(this) } , Ta); function Ta(e, t, i) { e = va.call(this, e) || this; return e.notifier = t, e.source = i, e } function Ea(e, t) { this.notifier = e, this.source = t } function Ia() { return new zt } function wa() { return function(e) { return ii()((t = e, i = "function" == typeof (r = Ia) ? r : function() { return r } , (e = Object.create(t, fi)).source = t, e.subjectFactory = i, e)); var t, i, r } } function Aa(e, t, i) { var c = e && "object" == typeof e ? e : { bufferSize: e, windowTime: t, refCount: !1, scheduler: i }; return function(e) { return e.lift((e = c.bufferSize, n = void 0 === e ? Number.POSITIVE_INFINITY : e, e = c.windowTime, s = void 0 === e ? Number.POSITIVE_INFINITY : e, a = c.refCount, o = c.scheduler, d = 0, u = l = !1, function(e) { var t; d++, !i || l ? (l = !1, i = new Xi(n,s,o), t = i.subscribe(this), r = e.subscribe({ next: function(e) { i.next(e) }, error: function(e) { l = !0, i.error(e) }, complete: function() { u = !0, r = void 0, i.complete() } }), u && (r = void 0)) : t = i.subscribe(this), this.add(function() { d--, t.unsubscribe(), t = void 0, r && !u && a && 0 === d && (r.unsubscribe(), i = r = void 0) }) } )); var i, r, n, s, a, o, d, l, u } } function Oa(t) { return function(e) { return e.lift(new Ca(t)) } } var ka, Ca = (Pa.prototype.call = function(e, t) { return t.subscribe(new Da(e,this.total)) } , Pa), Da = (lt(Ma, ka = Pt), Ma.prototype._next = function(e) { ++this.count > this.total && this.destination.next(e) } , Ma); function Ma(e, t) { e = ka.call(this, e) || this; return e.total = t, e.count = 0, e } function Pa(e) { this.total = e } function xa() { for (var t = [], e = 0; e < arguments.length; e++) t[e] = arguments[e]; var i = t[t.length - 1]; return Li(i) ? (t.pop(), function(e) { return Xr(t, e, i) } ) : function(e) { return Xr(t, e) } } function Ra(t, n) { return "function" == typeof n ? function(e) { return e.pipe(Ra(function(i, r) { return Lr(t(i, r)).pipe(ur(function(e, t) { return n(i, e, r, t) })) })) } : function(e) { return e.lift(new _a(t)) } } var La, _a = (Ba.prototype.call = function(e, t) { return t.subscribe(new Na(e,this.project)) } , Ba), Na = (lt(Fa, La = Br), Fa.prototype._next = function(e) { var t, i = this.index++; try { t = this.project(e, i) } catch (e) { return void this.destination.error(e) } this._innerSub(t) } , Fa.prototype._innerSub = function(e) { var t = this.innerSubscription; t && t.unsubscribe(); var i = new Fr(this) , t = this.destination; t.add(i), this.innerSubscription = Vr(e, i), this.innerSubscription !== i && t.add(this.innerSubscription) } , Fa.prototype._complete = function() { var e = this.innerSubscription; e && !e.closed || La.prototype._complete.call(this), this.unsubscribe() } , Fa.prototype._unsubscribe = function() { this.innerSubscription = void 0 } , Fa.prototype.notifyComplete = function() { this.innerSubscription = void 0, this.isStopped && La.prototype._complete.call(this) } , Fa.prototype.notifyNext = function(e) { this.destination.next(e) } , Fa); function Fa(e, t) { e = La.call(this, e) || this; return e.project = t, e.index = 0, e } function Ba(e) { this.project = e } function Ua(e, t) { return t ? Ra(function() { return e }, t) : Ra(function() { return e }) } function $a(t) { return function(e) { return e.lift(new Ka(t)) } } var Va, Ka = (qa.prototype.call = function(e, t) { var i = new Ha(e) , e = Vr(this.notifier, new Fr(i)); return e && !i.seenValue ? (i.add(e), t.subscribe(i)) : i } , qa), Ha = (lt(ja, Va = Br), ja.prototype.notifyNext = function() { this.seenValue = !0, this.complete() } , ja.prototype.notifyComplete = function() {} , ja); function ja(e) { e = Va.call(this, e) || this; return e.seenValue = !1, e } function qa(e) { this.notifier = e } function Qa(t, i) { return void 0 === i && (i = !1), function(e) { return e.lift(new Wa(t,i)) } } var Ga, Wa = (Ya.prototype.call = function(e, t) { return t.subscribe(new za(e,this.predicate,this.inclusive)) } , Ya), za = (lt(Xa, Ga = Pt), Xa.prototype._next = function(e) { var t, i = this.destination; try { t = this.predicate(e, this.index++) } catch (e) { return void i.error(e) } this.nextOrComplete(e, t) } , Xa.prototype.nextOrComplete = function(e, t) { var i = this.destination; Boolean(t) ? i.next(e) : (this.inclusive && i.next(e), i.complete()) } , Xa); function Xa(e, t, i) { e = Ga.call(this, e) || this; return e.predicate = t, e.inclusive = i, e.index = 0, e } function Ya(e, t) { this.predicate = e, this.inclusive = t } function Ja(t, i, r) { return function(e) { return e.lift(new eo(t,i,r)) } } var Za, eo = (no.prototype.call = function(e, t) { return t.subscribe(new to(e,this.nextOrObserver,this.error,this.complete)) } , no), to = (lt(ro, Za = Pt), ro.prototype._next = function(e) { try { this._tapNext.call(this._context, e) } catch (e) { return void this.destination.error(e) } this.destination.next(e) } , ro.prototype._error = function(e) { try { this._tapError.call(this._context, e) } catch (e) { return void this.destination.error(e) } this.destination.error(e) } , ro.prototype._complete = function() { try { this._tapComplete.call(this._context) } catch (e) { return void this.destination.error(e) } return this.destination.complete() } , ro), io = { leading: !0, trailing: !1 }; function ro(e, t, i, r) { e = Za.call(this, e) || this; return e._tapNext = sr, e._tapError = sr, e._tapComplete = sr, e._tapError = i || sr, e._tapComplete = r || sr, gt(t) ? (e._context = e)._tapNext = t : t && (e._context = t, e._tapNext = t.next || sr, e._tapError = t.error || sr, e._tapComplete = t.complete || sr), e } function no(e, t, i) { this.nextOrObserver = e, this.error = t, this.complete = i } function so(t, i, r) { return void 0 === i && (i = er), void 0 === r && (r = io), function(e) { return e.lift(new oo(t,i,r.leading,r.trailing)) } } var ao, oo = (co.prototype.call = function(e, t) { return t.subscribe(new lo(e,this.duration,this.scheduler,this.leading,this.trailing)) } , co), lo = (lt(uo, ao = Pt), uo.prototype._next = function(e) { this.throttled ? this.trailing && (this._trailingValue = e, this._hasTrailingValue = !0) : (this.add(this.throttled = this.scheduler.schedule(ho, this.duration, { subscriber: this })), this.leading ? this.destination.next(e) : this.trailing && (this._trailingValue = e, this._hasTrailingValue = !0)) } , uo.prototype._complete = function() { this._hasTrailingValue && this.destination.next(this._trailingValue), this.destination.complete() } , uo.prototype.clearThrottle = function() { var e = this.throttled; e && (this.trailing && this._hasTrailingValue && (this.destination.next(this._trailingValue), this._trailingValue = null, this._hasTrailingValue = !1), e.unsubscribe(), this.remove(e), this.throttled = null) } , uo); function uo(e, t, i, r, n) { e = ao.call(this, e) || this; return e.duration = t, e.scheduler = i, e.leading = r, e.trailing = n, e._hasTrailingValue = !1, e._trailingValue = null, e } function co(e, t, i, r) { this.duration = e, this.scheduler = t, this.leading = i, this.trailing = r } function ho(e) { e.subscriber.clearThrottle() } var po, fo = (yo.prototype.call = function(e, t) { return t.subscribe(new mo(e,this.absoluteTimeout,this.waitFor,this.withObservable,this.scheduler)) } , yo), mo = (lt(go, po = Br), go.dispatchTimeout = function(e) { var t = e.withObservable; e._unsubscribeAndRecycle(), e.add(Vr(t, new Fr(e))) } , go.prototype.scheduleTimeout = function() { var e = this.action; e ? this.action = e.schedule(this, this.waitFor) : this.add(this.action = this.scheduler.schedule(go.dispatchTimeout, this.waitFor, this)) } , go.prototype._next = function(e) { this.absoluteTimeout || this.scheduleTimeout(), po.prototype._next.call(this, e) } , go.prototype._unsubscribe = function() { this.action = void 0, this.scheduler = null, this.withObservable = null } , go); function go(e, t, i, r, n) { e = po.call(this, e) || this; return e.absoluteTimeout = t, e.waitFor = i, e.withObservable = r, e.scheduler = n, e.scheduleTimeout(), e } function yo(e, t, i, r) { this.waitFor = e, this.absoluteTimeout = t, this.withObservable = i, this.scheduler = r } function vo(e, t) { return void 0 === t && (t = er), r = e, n = Ui(new or), void 0 === (s = t) && (s = er), function(e) { var t = ns(r) , i = t ? +r - s.now() : Math.abs(r); return e.lift(new fo(i,t,n,s)) } ; var r, n, s } function So() { for (var i = [], e = 0; e < arguments.length; e++) i[e] = arguments[e]; return function(e) { var t; return "function" == typeof i[i.length - 1] && (t = i.pop()), e.lift(new Eo(i,t)) } } var bo, To, Eo = (ko.prototype.call = function(e, t) { return t.subscribe(new Io(e,this.observables,this.project)) } , ko), Io = (lt(Oo, bo = gr), Oo.prototype.notifyNext = function(e, t, i) { this.values[i] = t; t = this.toRespond; 0 < t.length && (-1 !== (i = t.indexOf(i)) && t.splice(i, 1)) } , Oo.prototype.notifyComplete = function() {} , Oo.prototype._next = function(e) { 0 === this.toRespond.length && (e = [e].concat(this.values), this.project ? this._tryProject(e) : this.destination.next(e)) } , Oo.prototype._tryProject = function(e) { var t; try { t = this.project.apply(this, e) } catch (e) { return void this.destination.error(e) } this.destination.next(t) } , Oo), wo = { type: null, entityIds: null, skip: !1 }, Ao = !1; function Oo(e, t, i) { var r = bo.call(this, e) || this; r.observables = t, r.project = i, r.toRespond = []; var n = t.length; r.values = new Array(n); for (var s = 0; s < n; s++) r.toRespond.push(s); for (s = 0; s < n; s++) { var a = t[s]; r.add(Or(r, a, void 0, s)) } return r } function ko(e, t) { this.observables = e, this.project = t } function Co(e, t) { Do(e, t), Ao = !0 } function Do(e, t) { !1 === Ao && (wo.type = e, wo.entityIds = t) } function Mo(e, t) { return e.hasOwnProperty(t) } function Po(e) { return null == e } function xo(e) { return Po(e) ? [] : Array.isArray(e) ? e : [e] } (mu = To = To || {}).Set = "Set", mu.Add = "Add", mu.Update = "Update", mu.Remove = "Remove"; var Ro = "undefined" != typeof window , Lo = !0; function _o(e) { var t = typeof e; return null != e && ("object" == t || "function" == t) } function No(e) { return Array.isArray(e) } function Fo(e) { return !1 === Po(e) } function Bo(e) { return No(e) && 0 === e.length } function Uo(e) { return "function" == typeof e } function $o(e) { return void 0 === e } function Vo(e) { return e.hasOwnProperty("active") } function Ko(e) { return No(e) } function Ho(e) { var t, i = e.active, r = e.ids, n = e.entities; return Ko(i) ? (t = r, (r = (e = i).filter(function(e) { return -1 < t.indexOf(e) })).length === e.length ? e : r) : !1 === Mo(n, i) ? null : i } function jo(e, t) { var i, r, n = {}; try { for (var s = pt(Object.keys(e)), a = s.next(); !a.done; a = s.next()) { var o = a.value; n[o] = t(e[o]) } } catch (e) { i = { error: e } } finally { try { a && !a.done && (r = s.return) && r.call(s) } finally { if (i) throw i.error } } return n } var qo = { resettable: !1, ttl: null, producerFn: void 0 }; function Qo(t) { Object.freeze(t); var i = "function" == typeof t , r = Object.prototype.hasOwnProperty; return Object.getOwnPropertyNames(t).forEach(function(e) { !r.call(t, e) || i && ("caller" === e || "callee" === e || "arguments" === e) || null === t[e] || "object" != typeof t[e] && "function" != typeof t[e] || Object.isFrozen(t[e]) || Qo(t[e]) }), t } var Go, Wo = new zt, zo = new Xi(50,5e3), Xo = new zt; function Yo(e) { return null != e && "" + e != "false" } function Jo(e) { return Yo(e) && "Object" === e.constructor.name } lt(function(e) { return Go.call(this, e) || this }, Go = Error); var Zo = {} , ed = {}; Ro && (window.$$stores = Zo, window.$$queries = ed); var td = new zt , id = new gi(!1) , rd = { activeTransactions: 0, batchTransaction: null }; function nd() { return 0 < rd.activeTransactions } function sd(e, t) { void 0 === t && (t = void 0), nd() || (rd.batchTransaction = new zt), rd.activeTransactions++, id.next(!0); try { return e.apply(t) } finally { Co("@Transaction"), 0 == --rd.activeTransactions && (rd.batchTransaction.next(!0), rd.batchTransaction.complete(), id.next(!1), td.next(!0)) } } function ad() { return function(e, t, i) { var r = i.value; return i.value = function() { for (var e = this, t = [], i = 0; i < arguments.length; i++) t[i] = arguments[i]; return sd(function() { return r.apply(e, t) }, this) } , i } } function od(t) { return function(e) { return e.pipe(Ja(function(e) { return sd(function() { return t(e) }) })) } } var dd = (ld.prototype.setLoading = function(t) { (t = void 0 === t ? !1 : t) !== this._value().loading && (Lo && Do("Set Loading"), this._setState(function(e) { return ut({}, e, { loading: t }) })) } , ld.prototype.setHasCache = function(e, t) { var i, r = this; void 0 === t && (t = { restartTTL: !1 }), e !== this.cache.active.value && this.cache.active.next(e), t.restartTTL && (i = this.getCacheTTL()) && (null !== this.cache.ttl && clearTimeout(this.cache.ttl), this.cache.ttl = setTimeout(function() { return r.setHasCache(!1) }, i)) } , ld.prototype.getValue = function() { return this.storeValue } , ld.prototype.setError = function(t) { t !== this._value().error && (Lo && Do("Set Error"), this._setState(function(e) { return ut({}, e, { error: t }) })) } , ld.prototype._select = function(t) { return this.store.asObservable().pipe(ur(function(e) { return t(e.state) }), Es()) } , ld.prototype._value = function() { return this.storeValue } , ld.prototype._cache = function() { return this.cache.active } , Object.defineProperty(ld.prototype, "config", { get: function() { return this.constructor.akitaConfig || {} }, enumerable: !0, configurable: !0 }), Object.defineProperty(ld.prototype, "storeName", { get: function() { return this.config.storeName || this.options.storeName || this.options.name }, enumerable: !0, configurable: !0 }), Object.defineProperty(ld.prototype, "deepFreeze", { get: function() { return this.config.deepFreezeFn || this.options.deepFreezeFn || Qo }, enumerable: !0, configurable: !0 }), Object.defineProperty(ld.prototype, "cacheConfig", { get: function() { return this.config.cache || this.options.cache }, enumerable: !0, configurable: !0 }), Object.defineProperty(ld.prototype, "_producerFn", { get: function() { return this.config.producerFn || this.options.producerFn || qo.producerFn }, enumerable: !0, configurable: !0 }), Object.defineProperty(ld.prototype, "resettable", { get: function() { return (Fo(this.config.resettable) ? this.config : this.options).resettable }, enumerable: !0, configurable: !0 }), ld.prototype._setState = function(e, t) { var i, r = this; if (void 0 === t && (t = !0), Uo(e) ? (i = e(this._value()), this.storeValue = Lo ? this.deepFreeze(i) : i) : this.storeValue = e, !this.store) return this.store = new gi({ state: this.storeValue }), void (Lo && this.store.subscribe(function(e) { var t = e.action; t && (e = r.storeName, Xo.next({ storeName: e, action: t })) })); nd() ? this.handleTransaction() : this.dispatch(this.storeValue, t) } , ld.prototype.reset = function() { var e = this; this.isResettable() ? (Lo && Do("Reset"), this._setState(function() { return Object.assign({}, e._initialState) }), this.setHasCache(!1)) : Lo && console.warn("You need to enable the reset functionality") } , ld.prototype.update = function(e) { Lo && Do("Update"); var t = this._value() , e = Uo(e) ? Uo(this._producerFn) ? this._producerFn(t, e) : e(t) : e , e = this.akitaPreUpdate(t, ut({}, t, e)) , e = Jo(t) ? e : new t.constructor(e); this._setState(e) } , ld.prototype.updateStoreConfig = function(e) { this.options = ut({}, this.options, e) } , ld.prototype.akitaPreUpdate = function(e, t) { return t } , ld.prototype.ngOnDestroy = function() { this.destroy() } , ld.prototype.destroy = function() { var e; Ro && window.hmrEnabled || this !== Zo[this.storeName] || (delete Zo[this.storeName], e = this.storeName, Wo.next(e), this.setHasCache(!1), this.cache.active.complete(), this.store.complete()) } , ld.prototype.onInit = function(e) { var t, i; (Zo[this.storeName] = this)._setState(function() { return e }), i = this.storeName, zo.next(i), this.isResettable() && (this._initialState = e), Lo && (t = this.storeName, i = this.constructor.name, t || console.error("@StoreConfig({ name }) is missing in " + i)) } , ld.prototype.dispatch = function(e, t) { var i = void 0; (t = void 0 === t ? !0 : t) && (i = wo, Ao = !1), this.store.next({ state: e, action: i }) } , ld.prototype.watchTransaction = function() { var e = this; (rd.batchTransaction ? rd.batchTransaction.asObservable() : Bi(!0)).subscribe(function() { e.inTransaction = !1, e.dispatch(e._value()) }) } , ld.prototype.isResettable = function() { return !1 !== this.resettable && (this.resettable || qo.resettable) } , ld.prototype.handleTransaction = function() { this.inTransaction || (this.watchTransaction(), this.inTransaction = !0) } , ld.prototype.getCacheTTL = function() { return this.cacheConfig && this.cacheConfig.ttl || qo.ttl } , ld); function ld(e, t) { this.options = t = void 0 === t ? {} : t, this.inTransaction = !1, this.cache = { active: new gi(!1), ttl: null }, this.onInit(e) } var ud, cd, hd, pd = (lt(gd, hd = dd), Object.defineProperty(gd.prototype, "selectEntityAction$", { get: function() { return this.entityActions.asObservable() }, enumerable: !0, configurable: !0 }), Object.defineProperty(gd.prototype, "selectEntityIdChanges$", { get: function() { return this.entityIdChanges.asObservable() }, enumerable: !0, configurable: !0 }), Object.defineProperty(gd.prototype, "idKey", { get: function() { return this.config.idKey || this.options.idKey || "id" }, enumerable: !0, configurable: !0 }), gd.prototype.set = function(a, o) { var d, l = this; void 0 === o && (o = {}), Po(a) || (Lo && Do("Set Entity"), d = this.akitaPreAddEntity === gd.prototype.akitaPreAddEntity, this.setHasCache(!0, { restartTTL: !0 }), this._setState(function(e) { var t, i, r, n, s, e = (t = { state: e, entities: a, idKey: l.idKey, preAddEntity: l.akitaPreAddEntity, isNativePreAdd: d }, r = t.state, n = t.entities, s = t.idKey, e = t.preAddEntity, t = t.isNativePreAdd, e = No(n) ? (i = (s = function(e, t, i) { var r, n, s = { entities: {}, ids: [] }; try { for (var a = pt(e), o = a.next(); !o.done; o = a.next()) { var d = i(o.value); s.entities[d[t]] = d, s.ids.push(d[t]) } } catch (e) { r = { error: e } } finally { try { o && !o.done && (n = a.return) && n.call(a) } finally { if (r) throw r.error } } return s }(n, s, e)).entities, s.ids) : n.entities && n.ids ? (i = t ? n.entities : jo(n.entities, e), n.ids) : (i = t ? n : jo(n, e), Object.keys(i).map(function(e) { return isNaN(e) ? e : Number(e) })), e = ut({}, r, { entities: i, ids: e, loading: !1 }), Vo(r) && (e.active = Ho(e)), e); return !1 === $o(o.activeId) && (e.active = o.activeId), e }), this.hasInitialUIState() && this.handleUICreation(), this.entityActions.next({ type: To.Set, ids: this.ids })) } , gd.prototype.add = function(e, t) { void 0 === t && (t = { loading: !1 }); var i, e = xo(e); Bo(e) || (i = function(e) { var t, i, r = e.state, n = e.entities, s = e.idKey, a = e.options, o = void 0 === a ? {} : a, d = e.preAddEntity, l = {}, u = [], c = !1; try { for (var h = pt(n), p = h.next(); !p.done; p = h.next()) { var f, m, g = p.value; !1 === Mo(r.entities, g[s]) && (l[m = (f = d(g))[s]] = f, o.prepend ? u.unshift(m) : u.push(m), c = !0) } } catch (e) { t = { error: e } } finally { try { p && !p.done && (i = h.return) && i.call(h) } finally { if (t) throw t.error } } return c ? { newState: ut({}, r, { entities: ut({}, r.entities, l), ids: o.prepend ? mt(u, r.ids) : mt(r.ids, u) }), newIds: u } : null }({ state: this._value(), preAddEntity: this.akitaPreAddEntity, entities: e, idKey: this.idKey, options: t })) && (Lo && Do("Add Entity"), i.newState.loading = t.loading, this._setState(function() { return i.newState }), this.hasInitialUIState() && this.handleUICreation(!0), this.entityActions.next({ type: To.Add, ids: i.newIds })) } , gd.prototype.update = function(t, i) { var r, n, s = this; $o(i) ? hd.prototype.update.call(this, t) : (n = [], Bo(n = Uo(t) ? this.ids.filter(function(e) { return t(s.entities[e]) }) : Po(t) ? this.ids : xo(t)) || (Lo && Do("Update Entity", n), this._setState(function(e) { return function(e) { var t = e.state , i = e.ids , r = e.idKey , n = e.newStateOrFn , s = e.preUpdateEntity , a = e.producerFn , o = e.onEntityIdChanges , d = {} , l = !1; try { for (var u = pt(i), c = u.next(); !c.done; c = u.next()) { var h, p, f, m, g, y, v = c.value; !1 !== Mo(t.entities, v) && (h = t.entities[v], p = void 0, f = (p = Uo(n) ? Uo(a) ? a(h, n) : n(h) : n).hasOwnProperty(r) && p[r] !== h[r], y = void 0, m = v, f && (l = !0, m = p[r]), g = ut({}, h, p), y = Jo(h) ? g : new (Jo(p) ? h : p).constructor(g), d[m] = s(h, y)) } } catch (e) { T = { error: e } } finally { try { c && !c.done && (b = u.return) && b.call(u) } finally { if (T) throw T.error } } var S, b = t.ids, T = t.entities; return l && (S = ft(i, 1)[0], T = function(e, t) { var i = {}; for (n in e) Object.prototype.hasOwnProperty.call(e, n) && t.indexOf(n) < 0 && (i[n] = e[n]); if (null != e && "function" == typeof Object.getOwnPropertySymbols) for (var r = 0, n = Object.getOwnPropertySymbols(e); r < n.length; r++) t.indexOf(n[r]) < 0 && Object.prototype.propertyIsEnumerable.call(e, n[r]) && (i[n[r]] = e[n[r]]); return i }(t.entities, ["symbol" == typeof S ? S : S + ""]), b = t.ids.map(function(e) { return e === S ? m : e }), o(S, m)), ut({}, t, { entities: ut({}, T, d), ids: b }) }({ idKey: s.idKey, ids: n, preUpdateEntity: s.akitaPreUpdateEntity, state: e, newStateOrFn: i, producerFn: s._producerFn, onEntityIdChanges: function(e, t) { r = { oldId: e, newId: t }, s.entityIdChanges.next(ut({}, r, { pending: !0 })) } }) }), r && this.entityIdChanges.next(ut({}, r, { pending: !1 })), this.entityActions.next({ type: To.Update, ids: n }))) } , gd.prototype.upsert = function(e, i, r, t) { var n = this; void 0 === t && (t = {}); var s = xo(e) , e = function(t) { return function(e) { return Mo(n.entities, e) === t } } , a = Uo(r) ? t.baseClass : r ? r.baseClass : void 0 , o = Uo(a) , t = s.filter(e(!0)) , e = s.filter(e(!1)).map(function(e) { var t = "function" == typeof i ? i({}) : i , t = Uo(r) ? r(e, t) : t , t = ut({}, t, ((t = {})[n.idKey] = e, t)); return o ? new a(t) : t }); this.update(t, i), this.add(e), Lo && Co("Upsert Entity") } , gd.prototype.upsertMany = function(e, t) { var i, r; void 0 === t && (t = {}); var n = [] , s = [] , a = {}; try { for (var o = pt(e), d = o.next(); !d.done; d = o.next()) { var l, u, c, h, p, f, m = d.value, g = this.akitaPreCheckEntity(m), y = g[this.idKey]; Mo(this.entities, y) ? (l = this._value().entities[y], u = ut({}, this._value().entities[y], g), c = t.baseClass ? new t.baseClass(u) : u, f = (h = this.akitaPreUpdateEntity(l, c))[this.idKey], a[f] = h, s.push(f)) : (p = t.baseClass ? new t.baseClass(g) : g, f = (h = this.akitaPreAddEntity(p))[this.idKey], n.push(f), a[f] = h) } } catch (e) { i = { error: e } } finally { try { d && !d.done && (r = o.return) && r.call(o) } finally { if (i) throw i.error } } Lo && Co("Upsert Many"), this._setState(function(e) { return ut({}, e, { ids: n.length ? mt(e.ids, n) : e.ids, entities: ut({}, e.entities, a), loading: !!t.loading }) }), s.length && this.entityActions.next({ type: To.Update, ids: s }), n.length && this.entityActions.next({ type: To.Add, ids: n }), n.length && this.hasUIStore() && this.handleUICreation(!0) } , gd.prototype.replace = function(e, t) { var i, r, n = xo(e); if (!Bo(n)) { var s = {}; try { for (var a = pt(n), o = a.next(); !o.done; o = a.next()) { var d = o.value; t[this.idKey] = d, s[d] = t } } catch (e) { i = { error: e } } finally { try { o && !o.done && (r = a.return) && r.call(a) } finally { if (i) throw i.error } } Lo && Do("Replace Entity", e), this._setState(function(e) { return ut({}, e, { entities: ut({}, e.entities, s) }) }) } } , gd.prototype.move = function(e, t) { var i = this.ids.slice(); i.splice(t < 0 ? i.length + t : t, 0, i.splice(e, 1)[0]), Lo && Do("Move Entity"), this._setState(function(e) { return ut({}, e, { entities: ut({}, e.entities), ids: i }) }) } , gd.prototype.remove = function(t) { var e, i, r = this; Bo(this.ids) || (e = Fo(t), i = [], Bo(i = Uo(t) ? this.ids.filter(function(e) { return t(r.entities[e]) }) : e ? xo(t) : this.ids) || (Lo && Do("Remove Entity", i), this._setState(function(e) { return function(e) { var t, i = e.state, r = e.ids; if (Po(r)) return ut({}, i, { entities: {}, ids: [], active: Ko(i.active) ? [] : null }); var n = i.entities , s = {}; try { for (var a = pt(i.ids), o = a.next(); !o.done; o = a.next()) { var d = o.value; !1 === r.includes(d) && (s[d] = n[d]) } } catch (e) { l = { error: e } } finally { try { o && !o.done && (t = a.return) && t.call(a) } finally { if (l) throw l.error } } var l = ut({}, i, { entities: s, ids: i.ids.filter(function(e) { return !1 === r.includes(e) }) }); return Vo(i) && (l.active = Ho(l)), l }({ state: e, ids: i }) }), e || this.setHasCache(!1), this.handleUIRemove(i), this.entityActions.next({ type: To.Remove, ids: i }))) } , gd.prototype.updateActive = function(e) { var t = xo(this.active); Lo && Do("Update Active", t), this.update(t, e) } , gd.prototype.setActive = function(e) { e = function(e, t, i) { var r; if (No(e)) r = e; else if (_o(e)) { if (Po(i)) return; e = Object.assign({ wrap: !0 }, e); var n = t.indexOf(i); if (e.prev) { var s = 0 === n; if (s && !e.wrap) return; r = s ? t[t.length - 1] : t[n - 1] } else if (e.next) { s = t.length === n + 1; if (s && !e.wrap) return; r = s ? t[0] : t[n + 1] } } else { if (e === i) return; r = e } return r }(e, this.ids, this.active); void 0 !== e && (Lo && Do("Set Active", e), this._setActive(e)) } , gd.prototype.addActive = function(e) { var t = this , i = xo(e); Bo(i) || i.every(function(e) { return -1 < t.active.indexOf(e) }) || (Lo && Do("Add Active", e), this._setState(function(e) { var t = Array.from(new Set(mt(e.active, i))); return ut({}, e, { active: t }) })) } , gd.prototype.removeActive = function(e) { var t = this , i = xo(e); Bo(i) || i.some(function(e) { return -1 < t.active.indexOf(e) }) && (Lo && Do("Remove Active", e), this._setState(function(e) { return ut({}, e, { active: Array.isArray(e.active) ? e.active.filter(function(e) { return -1 === i.indexOf(e) }) : null }) })) } , gd.prototype.toggleActive = function(e) { var i = this , t = xo(e) , r = function(t) { return function(e) { return i.active.includes(e) === t } } , e = t.filter(r(!0)) , r = t.filter(r(!1)); this.removeActive(e), this.addActive(r), Lo && Co("Toggle Active") } , gd.prototype.createUIStore = function(e, t) { var i = { name: "UI/" + this.storeName, idKey: this.idKey }; return this.ui = new fd(e = void 0 === e ? {} : e,ut({}, i, t = void 0 === t ? {} : t)), this.ui } , gd.prototype.destroy = function() { hd.prototype.destroy.call(this), this.ui instanceof gd && this.ui.destroy(), this.entityActions.complete() } , gd.prototype.akitaPreUpdateEntity = function(e, t) { return t } , gd.prototype.akitaPreAddEntity = function(e) { return e } , gd.prototype.akitaPreCheckEntity = function(e) { return e } , Object.defineProperty(gd.prototype, "ids", { get: function() { return this._value().ids }, enumerable: !0, configurable: !0 }), Object.defineProperty(gd.prototype, "entities", { get: function() { return this._value().entities }, enumerable: !0, configurable: !0 }), Object.defineProperty(gd.prototype, "active", { get: function() { return this._value().active }, enumerable: !0, configurable: !0 }), gd.prototype._setActive = function(t) { this._setState(function(e) { return ut({}, e, { active: t }) }) } , gd.prototype.handleUICreation = function(e) { var r = this , t = this.ids , n = Uo(this.ui._akitaCreateEntityFn) , i = function(e) { var t = r.entities[e] , i = n ? r.ui._akitaCreateEntityFn(t) : r.ui._akitaCreateEntityFn; return ut(((e = {})[r.idKey] = t[r.idKey], e), i) } , i = ((e = void 0 === e ? !1 : e) ? this.ids.filter(function(e) { return $o(r.ui.entities[e]) }) : t).map(i); e ? this.ui.add(i) : this.ui.set(i) } , gd.prototype.hasInitialUIState = function() { return this.hasUIStore() && !1 === $o(this.ui._akitaCreateEntityFn) } , gd.prototype.handleUIRemove = function(e) { this.hasUIStore() && this.ui.remove(e) } , gd.prototype.hasUIStore = function() { return this.ui instanceof fd } , ct([ad(), ht("design:type", Function), ht("design:paramtypes", [Object, Object, Object, Object]), ht("design:returntype", void 0)], gd.prototype, "upsert", null), ct([ad(), ht("design:type", Function), ht("design:paramtypes", ["function" == typeof (w = "undefined" != typeof T && T) ? w : Object]), ht("design:returntype", void 0)], gd.prototype, "toggleActive", null), gd), fd = (lt(md, cd = pd), md.prototype.setInitialEntityState = function(e) { this._akitaCreateEntityFn = e } , md); function md(e, t) { return cd.call(this, e = void 0 === e ? {} : e, t = void 0 === t ? {} : t) || this } function gd(e, t) { void 0 === t && (t = {}); e = hd.call(this, ut({}, { entities: {}, ids: [], loading: !0, error: null }, e = void 0 === e ? {} : e), t) || this; return e.options = t, e.entityActions = new zt, e.entityIdChanges = new zt, e } function yd() { return Es(function(e, t) { return e === t || !1 !== No(e) && !1 !== No(t) && (!(!Bo(e) || !Bo(t)) || !vd(t, e) && !1 === vd(e, t)) }) } function vd(e, t) { return t.some(function(t) { return void 0 === e.find(function(e) { return e === t }) }) } function Sd(i, e) { for (var r, n, s, a = [], o = i.ids, d = i.entities, l = e.filterBy, t = e.limitTo, u = e.sortBy, e = e.sortByOrder, c = 0; c < o.length; c++) !function(t) { var i = d[o[t]]; if (!l) return a.push(i); xo(l).every(function(e) { return e(i, t) }) && a.push(i) }(c); u && (s = Uo(u) ? u : (r = u, void 0 === (n = e) && (n = ud.ASC), function(e, t) { if (!e.hasOwnProperty(r) || !t.hasOwnProperty(r)) return 0; var i = "string" == typeof e[r] ? e[r].toUpperCase() : e[r] , e = "string" == typeof t[r] ? t[r].toUpperCase() : t[r] , t = 0; return e < i ? t = 1 : i < e && (t = -1), n == ud.DESC ? -1 * t : t } ), a = a.sort(function(e, t) { return s(e, t, i) })); t = Math.min(t || a.length, a.length); return t === a.length ? a : a.slice(0, t) } function bd(e) { return "string" == typeof e } function Td(t, i) { return function(e) { e = e[t]; if (!$o(e)) return i ? bd(i) ? e[i] : i(e) : e } } (yi = ud = ud || {}).ASC = "asc", yi.DESC = "desc"; Ed.prototype.select = function(t) { var e, n; if (Uo(t)) e = t; else if (bd(t)) e = function(e) { return e[t] } ; else { if (Array.isArray(t)) return this.store._select(function(e) { return e }).pipe(Es((n = t, function(t, i) { var r = Uo(n[0]); return !1 === n.some(function(e) { return r ? e(t) !== e(i) : t[e] !== i[e] }) } )), ur(function(i) { return Uo(t[0]) ? t.map(function(e) { return e(i) }) : t.reduce(function(e, t) { return e[t] = i[t], e }, {}) })); e = function(e) { return e } } return this.store._select(e) } , Ed.prototype.selectLoading = function() { return this.select(function(e) { return e.loading }) } , Ed.prototype.selectError = function() { return this.select(function(e) { return e.error }) } , Ed.prototype.getValue = function() { return this.store._value() } , Ed.prototype.selectHasCache = function() { return this.store._cache().asObservable() } , Ed.prototype.getHasCache = function() { return this.store._cache().value } , Object.defineProperty(Ed.prototype, "config", { get: function() { return this.constructor.akitaQueryConfig }, enumerable: !0, configurable: !0 }), Si = Ed; function Ed(e) { this.store = e, this.__store__ = e, Lo && (ed[e.storeName] = this) } function Id(e) { return e.pipe(an(function(e) { return null != e })) } var wd, Ad, Od = (lt(Dd, Ad = Si), Dd.prototype.selectAll = function(e) { var t = this; return void 0 === e && (e = { asObject: !1 }), this.select(function(e) { return e.entities }).pipe(ur(function() { return t.getAll(e) })) } , Dd.prototype.getAll = function(e) { return (e = void 0 === e ? { asObject: !1, filterBy: void 0, limitTo: void 0 } : e).asObject ? function(e, t) { var r = {} , n = t.filterBy , s = t.limitTo , a = e.ids , o = e.entities; if (!n && !s) return o; e = !1 === Po(s); if (n && e) for (var d = 0, i = 0, l = a.length; i < l && "break" !== function(t) { if (d === s) return "break"; var e = a[t] , i = o[e]; xo(n).every(function(e) { return e(i, t) }) && (r[e] = i, d++) }(i); i++) ; else for (var u = Math.min(s || a.length, a.length), i = 0; i < u; i++) !function(t) { var e = a[t] , i = o[e]; if (!n) return r[e] = i; xo(n).every(function(e) { return e(i, t) }) && (r[e] = i) }(i); return r }(this.getValue(), e) : (t = e, i = this.config || this.options, t.sortBy = t.sortBy || i && i.sortBy, t.sortByOrder = t.sortByOrder || i && i.sortByOrder, Sd(this.getValue(), e)); var t, i } , Dd.prototype.selectMany = function(e, i) { return e && e.length ? this.select(function(e) { return e.entities }).pipe(ur(function(t) { return n = function(e) { return Td(e, i)(t) } , e.reduce(function(e, t, i, r) { t = n(t); return void 0 !== t && e.push(t), e }, []); var n }), yd()) : Bi([]) } , Dd.prototype.selectEntity = function(e, t) { var i = e; return Uo(e) && (i = function(e, t) { var i, r; try { for (var n = pt(Object.keys(t)), s = n.next(); !s.done; s = n.next()) { var a = s.value; if (!0 === e(t[a])) return a } } catch (e) { i = { error: e } } finally { try { s && !s.done && (r = n.return) && r.call(n) } finally { if (i) throw i.error } } }(e, this.getValue().entities)), this.select(function(e) { return e.entities }).pipe(ur(Td(i, t)), Es()) } , Dd.prototype.getEntity = function(e) { return this.getValue().entities[e] } , Dd.prototype.selectActiveId = function() { return this.select(function(e) { return e.active }) } , Dd.prototype.getActiveId = function() { return this.getValue().active } , Dd.prototype.selectActive = function(t) { var i = this; return No(this.getActive()) ? this.selectActiveId().pipe(Ra(function(e) { return i.selectMany(e, t) })) : this.selectActiveId().pipe(Ra(function(e) { return i.selectEntity(e, t) })) } , Dd.prototype.getActive = function() { var t = this , e = this.getActiveId(); return No(e) ? e.map(function(e) { return t.getValue().entities[e] }) : Yo(e) ? this.getEntity(e) : void 0 } , Dd.prototype.selectCount = function(e) { var t = this; return this.select(function(e) { return e.entities }).pipe(ur(function() { return t.getCount(e) })) } , Dd.prototype.getCount = function(e) { return (Uo(e) ? this.getAll().filter(e) : this.getValue().ids).length } , Dd.prototype.selectLast = function(e) { return this.selectAt(function(e) { return e[e.length - 1] }, e) } , Dd.prototype.selectFirst = function(e) { return this.selectAt(function(e) { return e[0] }, e) } , Dd.prototype.selectEntityAction = function(e) { if (Po(e)) return this.store.selectEntityAction$; var t = No(e) ? function(e) { return e } : function(e) { return e.ids } , i = xo(e); return this.store.selectEntityAction$.pipe(an(function(e) { e = e.type; return i.includes(e) }), ur(function(e) { return t(e) })) } , Dd.prototype.hasEntity = function(e) { var t = this; return Po(e) ? 0 < this.getValue().ids.length : Uo(e) ? this.getAll().some(e) : No(e) ? e.every(function(e) { return e in t.getValue().entities }) : e in this.getValue().entities } , Dd.prototype.hasActive = function(e) { var t = this.getValue().active , i = Fo(e); return Array.isArray(t) ? i ? t.includes(e) : 0 < t.length : i ? t === e : Fo(t) } , Dd.prototype.createUIQuery = function() { this.ui = new kd(this.__store__.ui) } , Dd.prototype.selectAt = function(e, t) { var i = this; return this.select(function(e) { return e.ids }).pipe(ur(e), Es(), Ra(function(e) { return i.selectEntity(e, t) })) } , Dd), kd = (lt(Cd, wd = Od), Cd); function Cd(e) { return wd.call(this, e) || this } function Dd(e, t) { void 0 === t && (t = {}); var i = Ad.call(this, e) || this; return i.options = t, i.__store__ = e, i } function Md(e, t) { return 1 === t.split(".").length ? e : t.split(".").slice(1).join(".").split(".").reduce(function(e, t) { return e && e[t] }, e) } function Pd(e, t, r) { var i = t.split("."); if (1 === i.length) return ut({}, e, r); e = ut({}, e); var n = i.length - 2; return t.split(".").slice(1).reduce(function(e, t, i) { return e[t] = i !== n ? ut({}, e[t]) : Array.isArray(e[t]) || !_o(e[t]) ? r : ut({}, e[t], r), e && e[t] }, e), e } new Xi(1); var xd, Rd, Ld, _d, A = (Fd.prototype.getQuery = function() { return this.query } , Fd.prototype.getStore = function() { return this.getQuery().__store__ } , Fd.prototype.isEntityBased = Yo, Fd.prototype.selectSource = function(e, t) { var i = this; return this.isEntityBased(e) ? this.getQuery().selectEntity(e).pipe(Id) : t ? this.getQuery().select(function(e) { return Md(e, i.withStoreName(t)) }) : this.getQuery().select() } , Fd.prototype.getSource = function(e, t) { if (this.isEntityBased(e)) return this.getQuery().getEntity(e); e = this.getQuery().getValue(); return t ? Md(e, this.withStoreName(t)) : e } , Fd.prototype.withStoreName = function(e) { return this.storeName + "." + e } , Object.defineProperty(Fd.prototype, "storeName", { get: function() { return this.getStore().storeName }, enumerable: !0, configurable: !0 }), Fd.prototype.updateStore = function(t, e, i) { var r = this; this.isEntityBased(e) ? this.getStore().update(e, t) : i ? this.getStore()._setState(function(e) { return Pd(e, r.withStoreName(i), t) }) : this.getStore()._setState(function(e) { return ut({}, e, t) }) } , Fd.prototype.onReset = function(i) { var r = this , n = this.getStore().reset; this.getStore().reset = function() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; setTimeout(function() { n.apply(r.getStore(), e), i() }) } } , Fd), Nd = { pagesControls: !1, range: !1, startWith: 1, cacheTimeout: void 0, clearStoreWithCache: !0 }; function Fd(e, t) { this.query = e } function Bd(e, t, i) { void 0 === i && (i = {}); var r = xd.call(this, e) || this; return r.query = e, r.factoryFnOrPath = t, r.params = i, r.params = ut({ debounceTime: 300, formKey: "akitaForm", emitEvent: !1, arrControlFactory: function(e) { return r.builder.control(e) } }, i), r.isRootKeys = !1 === Yo(t), r.isKeyBased = bd(t) || r.isRootKeys, r } function Ud(e, t) { void 0 === t && (t = {}); var i = Rd.call(this, e, { resetFn: function() { i.initial = !1, i.destroy({ clearCache: !0, currentPage: 1 }) } }) || this; i.query = e, i.config = t, i.metadata = new Map, i.pages = new Map, i.pagination = { currentPage: 1, perPage: 0, total: 0, lastPage: 0, data: [] }, i.initial = !0, i.isLoading$ = i.query.selectLoading().pipe(ss(0)), i.config = Object.assign(Nd, t); e = i.config, t = e.startWith, e = e.cacheTimeout; return i.page = new gi(t), e && (e instanceof Ut || "function" == typeof e.lift && "function" == typeof e.subscribe) && (i.clearCacheSubscription = e.subscribe(function() { return i.clearCache() })), i } lt(Ud, Rd = A), Object.defineProperty(Ud.prototype, "pageChanges", { get: function() { return this.page.asObservable() }, enumerable: !0, configurable: !0 }), Object.defineProperty(Ud.prototype, "currentPage", { get: function() { return this.pagination.currentPage }, enumerable: !0, configurable: !0 }), Object.defineProperty(Ud.prototype, "isFirst", { get: function() { return 1 === this.currentPage }, enumerable: !0, configurable: !0 }), Object.defineProperty(Ud.prototype, "isLast", { get: function() { return this.currentPage === this.pagination.lastPage }, enumerable: !0, configurable: !0 }), Ud.prototype.withControls = function() { return this.config.pagesControls = !0, this } , Ud.prototype.withRange = function() { return this.config.range = !0, this } , Ud.prototype.setLoading = function(e) { void 0 === e && (e = !0), this.getStore().setLoading(e) } , Ud.prototype.update = function(e) { this.pagination = e, this.addPage(e.data) } , Ud.prototype.addPage = function(e) { var t = this; this.pages.set(this.currentPage, { ids: e.map(function(e) { return e[t.getStore().idKey] }) }), this.getStore().upsertMany(e) } , Ud.prototype.clearCache = function(e) { void 0 === e && (e = {}), this.initial || (Co("@Pagination - Clear Cache"), !1 !== e.clearStore && (this.config.clearStoreWithCache || e.clearStore) && this.getStore().remove(), this.pages = new Map, this.metadata = new Map), this.initial = !1 } , Ud.prototype.clearPage = function(e) { this.pages.delete(e) } , Ud.prototype.destroy = function(e) { var t = void 0 === e ? {} : e , e = t.clearCache , t = t.currentPage; this.clearCacheSubscription && this.clearCacheSubscription.unsubscribe(), e && this.clearCache(), $o(t) || this.setPage(t), this.initial = !0 } , Ud.prototype.isPageActive = function(e) { return this.currentPage === e } , Ud.prototype.setPage = function(e) { e === this.currentPage && this.hasPage(e) || this.page.next(this.pagination.currentPage = e) } , Ud.prototype.nextPage = function() { this.currentPage !== this.pagination.lastPage && this.setPage(this.pagination.currentPage + 1) } , Ud.prototype.prevPage = function() { 1 < this.pagination.currentPage && this.setPage(this.pagination.currentPage - 1) } , Ud.prototype.setLastPage = function() { this.setPage(this.pagination.lastPage) } , Ud.prototype.setFirstPage = function() { this.setPage(1) } , Ud.prototype.hasPage = function(e) { return this.pages.has(e) } , Ud.prototype.getPage = function(e) { var t = this , i = this.pagination.currentPage; return this.hasPage(i) ? this.selectPage(i) : (this.setLoading(!0), Lr(e()).pipe(Ra(function(e) { return i = e.currentPage, sd(function() { t.setLoading(!1), t.update(e) }), t.selectPage(i) }))) } , Ud.prototype.getQuery = function() { return this.query } , Ud.prototype.refreshCurrentPage = function() { !1 === Po(this.currentPage) && (this.clearPage(this.currentPage), this.setPage(this.currentPage)) } , Ud.prototype.getFrom = function() { return this.isFirst ? 1 : (this.currentPage - 1) * this.pagination.perPage + 1 } , Ud.prototype.getTo = function() { return this.isLast ? this.pagination.total : this.currentPage * this.pagination.perPage } , Ud.prototype.selectPage = function(n) { var s = this; return this.query.selectAll({ asObject: !0 }).pipe(Cs(1), ur(function(t) { var e = ut({}, s.pagination, { data: s.pages.get(n).ids.map(function(e) { return t[e] }) }) , i = s.config , r = i.range , i = i.pagesControls; return isNaN(s.pagination.total) && (1 === e.lastPage ? e.total = e.data ? e.data.length : 0 : e.total = e.perPage * e.lastPage, s.pagination.total = e.total), r && (e.from = s.getFrom(), e.to = s.getTo()), i && (e.pageControls = function(e, t) { for (var i = Math.ceil(e / t), r = [], n = 0; n < i; n++) r.push(n + 1); return r }(s.pagination.total, s.pagination.perPage)), e })) } , ct([(Ld = "@Pagination - New Page", function(e, t, i) { var r = i.value; return i.value = function() { for (var e = [], t = 0; t < arguments.length; t++) e[t] = arguments[t]; return Co(Ld, _d), r.apply(this, e) } , i } ), ht("design:type", Function), ht("design:paramtypes", [Object]), ht("design:returntype", void 0)], Ud.prototype, "update", null), lt(Bd, xd = A), Bd.prototype.setForm = function(e, t) { return this.form = e, this.builder = t, this.activate(), this } , Bd.prototype.reset = function(e) { var r = this , e = e || (this.isKeyBased ? this.initialValue : this.factoryFnOrPath()); this.isKeyBased && Object.keys(this.initialValue).forEach(function(i) { var e, t = r.initialValue[i]; Array.isArray(t) && r.builder && (e = r.form.controls[i], r.cleanArray(e), t.forEach(function(e, t) { r.form.get(i).insert(t, r.params.arrControlFactory(e)) })) }), this.form.patchValue(e, { emitEvent: this.params.emitEvent }); var t = this.isKeyBased ? Pd(this.getQuery().getValue(), this.getStore().storeName + "." + this.factoryFnOrPath, e) : ((t = {})[this.params.formKey] = e, t); this.updateStore(t) } , Bd.prototype.cleanArray = function(e) { for (; 0 !== e.length; ) e.removeAt(0) } , Bd.prototype.resolveInitialValue = function(e, n) { var s = this; if (e) return Object.keys(e).reduce(function(e, i) { var r, t = n[i]; return Array.isArray(t) && s.builder && (r = s.params.arrControlFactory, s.cleanArray(s.form.get(i)), t.forEach(function(e, t) { s.form.get(i).insert(t, r(e)) })), e[i] = n[i], e }, {}) } , Bd.prototype.activate = function() { var i, e, t, r = this; this.isKeyBased ? (this.isRootKeys ? this.initialValue = this.resolveInitialValue(this.form.value, this.getQuery().getValue()) : (i = this.getStore().storeName + "." + this.factoryFnOrPath, e = Md(this.getQuery().getValue(), i), this.initialValue = this.resolveInitialValue(e, e)), this.form.patchValue(this.initialValue, { emitEvent: this.params.emitEvent })) : (this.getQuery().getValue()[this.params.formKey] || (Co("@PersistNgFormPlugin activate"), this.updateStore(((t = {})[this.params.formKey] = this.factoryFnOrPath(), t))), t = this.getQuery().getValue()[this.params.formKey], this.form.patchValue(t)), this.formChanges = this.form.valueChanges.pipe(Qn(this.params.debounceTime)).subscribe(function(t) { var e; Co("@PersistForm - Update"), e = r.isKeyBased ? r.isRootKeys ? function(e) { return ut({}, e, t) } : function(e) { return Pd(e, i, t) } : function() { var e; return (e = {})[r.params.formKey] = t, e } , r.updateStore(e(r.getQuery().getValue())) }) } , Bd.prototype.destroy = function() { this.formChanges && this.formChanges.unsubscribe(), this.form = null, this.builder = null } ; var $d, Vd, Br = (jd.prototype.getEntity = function(e) { return this.entities.get(e) } , jd.prototype.hasEntity = function(e) { return this.entities.has(e) } , jd.prototype.removeEntity = function(e) { return this.destroy(e), this.entities.delete(e) } , jd.prototype.createEntity = function(e, t) { return this.entities.set(e, t) } , jd.prototype.getIds = function() { return $o(this.entityIds) ? this.query.getValue().ids : xo(this.entityIds) } , jd.prototype.resolvedIds = function(e) { return $o(e) ? this.getIds() : xo(e) } , jd.prototype.rebase = function(i, r) { var n = this; if (void 0 === r && (r = {}), Yo(i)) if ($o(this.entityIds)) { for (var e = 0, t = i.length; e < t; e++) { var s, a = i[e]; !1 === this.hasEntity(a) && (Uo(r.beforeAdd) && r.beforeAdd(a), s = this.instantiatePlugin(a), this.entities.set(a, s), Uo(r.afterAdd) && r.afterAdd(s)) } this.entities.forEach(function(e, t) { -1 === i.indexOf(t) && (Uo(r.beforeRemove) && r.beforeRemove(e), n.removeEntity(t)) }) } else for (var o = xo(this.entityIds), e = 0, t = o.length; e < t; e++) a = o[e], -1 < i.indexOf(a) && !1 === this.hasEntity(a) ? (Uo(r.beforeAdd) && r.beforeAdd(a), s = this.instantiatePlugin(a), this.entities.set(a, s), Uo(r.afterAdd) && r.afterAdd(s)) : this.entities.forEach(function(e, t) { -1 === i.indexOf(t) && !0 === n.hasEntity(t) && (Uo(r.beforeRemove) && r.beforeRemove(e), n.removeEntity(t)) }); else this.getIds().forEach(function(e) { n.hasEntity(e) || n.createEntity(e, n.instantiatePlugin(e)) }) } , jd.prototype.selectIds = function() { return this.query.select(function(e) { return e.ids }) } , jd.prototype.activate = function(e) { this.rebase(e) } , jd.prototype.forEachId = function(e, t) { for (var i = this.resolvedIds(e), r = 0, n = i.length; r < n; r++) { var s = i[r]; this.hasEntity(s) && t(this.getEntity(s)) } } , jd), Kd = (lt(Hd, $d = A), Object.defineProperty(Hd.prototype, "hasPast$", { get: function() { return this._hasPast$ }, enumerable: !0, configurable: !0 }), Object.defineProperty(Hd.prototype, "hasFuture$", { get: function() { return this._hasFuture$ }, enumerable: !0, configurable: !0 }), Object.defineProperty(Hd.prototype, "hasPast", { get: function() { return 0 < this.history.past.length }, enumerable: !0, configurable: !0 }), Object.defineProperty(Hd.prototype, "hasFuture", { get: function() { return 0 < this.history.future.length }, enumerable: !0, configurable: !0 }), Object.defineProperty(Hd.prototype, "property", { get: function() { return this.params.watchProperty }, enumerable: !0, configurable: !0 }), Hd.prototype.updateHasHistory = function() { this.hasFutureSubject.next(this.hasFuture), this.hasPastSubject.next(this.hasPast) } , Hd.prototype.activate = function() { var r = this; this.hasPastSubject = new gi(!1), this._hasPast$ = this.hasPastSubject.asObservable().pipe(Es()), this.hasFutureSubject = new gi(!1), this._hasFuture$ = this.hasFutureSubject.asObservable().pipe(Es()), this.history.present = this.getSource(this._entityId, this.property), this.subscription = this.selectSource(this._entityId, this.property).pipe(ca()).subscribe(function(e) { var t = ft(e, 2) , i = t[0] , e = t[1]; r.skip ? r.skip = !1 : (t = r.params.comparator(i, e), !r.skipUpdate && t && (r.history.past.length === r.params.maxAge && (r.history.past = r.history.past.slice(1)), r.history.past = mt(r.history.past, [i]), r.history.present = e, r.updateHasHistory())) }) } , Hd.prototype.undo = function() { var e, t, i; 0 < this.history.past.length && (e = (i = this.history).past, t = i.present, i = e[e.length - 1], this.history.past = e.slice(0, e.length - 1), this.history.present = i, this.history.future = mt([t], this.history.future), this.update()) } , Hd.prototype.redo = function() { var e, t, i, r; 0 < this.history.future.length && (e = (r = this.history).past, t = r.present, i = this.history.future[0], r = this.history.future.slice(1), this.history.past = mt(e, [t]), this.history.present = i, this.history.future = r, this.update("Redo")) } , Hd.prototype.jumpToPast = function(e) { var t, i, r, n; e < 0 || e >= this.history.past.length || (t = (r = this.history).past, n = r.future, i = r.present, r = t.slice(0, e), n = mt(t.slice(e + 1), [i], n), e = t[e], this.history.past = r, this.history.present = e, this.history.future = n, this.update()) } , Hd.prototype.jumpToFuture = function(e) { var t, i, r; e < 0 || e >= this.history.future.length || (i = (r = this.history).past, t = r.future, i = mt(i, [r.present], t.slice(0, e)), r = t[e], e = t.slice(e + 1), this.history.past = i, this.history.present = r, this.history.future = e, this.update("Redo")) } , Hd.prototype.jump = function(e) { return 0 < e ? this.jumpToFuture(e - 1) : e < 0 ? this.jumpToPast(this.history.past.length + e) : void 0 } , Hd.prototype.clear = function(e) { this.history = Uo(e) ? e(this.history) : { past: [], present: null, future: [] }, this.updateHasHistory() } , Hd.prototype.destroy = function(e) { (e = void 0 === e ? !1 : e) && this.clear(), this.subscription.unsubscribe() } , Hd.prototype.ignoreNext = function() { this.skip = !0 } , Hd.prototype.update = function(e) { void 0 === e && (e = "Undo"), this.skipUpdate = !0, Co("@StateHistory - " + e), this.updateStore(this.history.present, this._entityId, this.property), this.updateHasHistory(), this.skipUpdate = !1 } , Hd); function Hd(e, t, i) { void 0 === t && (t = {}); var r = $d.call(this, e, { resetFn: function() { return r.clear() } }) || this; return r.query = e, r.params = t, r._entityId = i, r.skip = !1, r.history = { past: [], present: null, future: [] }, r.skipUpdate = !1, t.maxAge = t.maxAge || 10, t.comparator = t.comparator || function() { return !0 } , r.activate(), r } function jd(e, t) { this.query = e, this.entityIds = t, this.entities = new Map } function qd(e, t) { var i = Vd.call(this, e, (t = void 0 === t ? {} : t).entityIds) || this; return i.query = e, (i.params = t).maxAge = Yo(t.maxAge) ? t.maxAge : 10, i.activate(), i.selectIds().pipe(Oa(1)).subscribe(function(e) { return i.activate(e) }), i } lt(qd, Vd = Br), qd.prototype.redo = function(e) { this.forEachId(e, function(e) { return e.redo() }) } , qd.prototype.undo = function(e) { this.forEachId(e, function(e) { return e.undo() }) } , qd.prototype.hasPast = function(e) { if (this.hasEntity(e)) return this.getEntity(e).hasPast } , qd.prototype.hasFuture = function(e) { if (this.hasEntity(e)) return this.getEntity(e).hasFuture } , qd.prototype.jumpToFuture = function(e, t) { this.forEachId(e, function(e) { return e.jumpToFuture(t) }) } , qd.prototype.jumpToPast = function(e, t) { this.forEachId(e, function(e) { return e.jumpToPast(t) }) } , qd.prototype.clear = function(e) { this.forEachId(e, function(e) { return e.clear() }) } , qd.prototype.destroy = function(e, t) { void 0 === t && (t = !1), this.forEachId(e, function(e) { return e.destroy(t) }) } , qd.prototype.ignoreNext = function(e) { this.forEachId(e, function(e) { return e.ignoreNext() }) } , qd.prototype.instantiatePlugin = function(e) { return new Kd(this.query,this.params,e) } ; var Qd = { comparator: function(e, t) { return JSON.stringify(e) !== JSON.stringify(t) } }; function Gd(e, t) { return t.split(".").reduce(function(e, t) { return e && "undefined" !== e[t] ? e[t] : void 0 }, e) } var Wd, zd, Xd = (lt(Yd, Wd = A), Yd.prototype.reset = function(e) { var t = this.head; Uo((e = void 0 === e ? {} : e).updateFn) && (t = this.isEntityBased(this._entityId) ? e.updateFn(this.head, this.getQuery().getEntity(this._entityId)) : e.updateFn(this.head, this.getQuery().getValue())), Co("@DirtyCheck - Revert"), this.updateStore(t, this._entityId), this._reset.next() } , Yd.prototype.setHead = function() { return this.active ? this.head = this._getHead() : (this.activate(), this.active = !0), this.updateDirtiness(!1), this } , Yd.prototype.isDirty = function() { return !!this.dirty.value } , Yd.prototype.hasHead = function() { return !!this.getHead() } , Yd.prototype.destroy = function() { this.head = null, this.subscription && this.subscription.unsubscribe(), this._reset && this._reset.complete() } , Yd.prototype.isPathDirty = function(e) { var t = this.getHead() , i = Gd(this.getQuery().getValue(), e) , e = Gd(t, e); return this.params.comparator(i, e) } , Yd.prototype.getHead = function() { return this.head } , Yd.prototype.activate = function() { var i = this; this.head = this._getHead(); var e = this.params.watchProperty ? this.params.watchProperty.map(function(t) { return i.query.select(function(e) { return e[t] }).pipe(ur(function(e) { return { val: e, __akitaKey: t } })) }) : [this.selectSource(this._entityId)]; this.subscription = Cr.apply(void 0, mt(e)).pipe(Oa(1)).subscribe(function(e) { $o(i.head) || (e = e.some(function(e) { var t = e.__akitaKey ? i.head[e.__akitaKey] : i.head , e = e.__akitaKey ? e.val : e; return i.params.comparator(t, e) }), i.updateDirtiness(e)) }) } , Yd.prototype.updateDirtiness = function(e) { this.dirty.next(e) } , Yd.prototype._getHead = function() { var e = this.getSource(this._entityId); return e = this.params.watchProperty ? this.getWatchedValues(e) : e } , Yd.prototype.getWatchedValues = function(i) { return this.params.watchProperty.reduce(function(e, t) { return e[t] = i[t], e }, {}) } , Yd); function Yd(e, t, i) { var r = Wd.call(this, e) || this; return r.query = e, r.params = t, r._entityId = i, r.dirty = new gi(!1), r.active = !1, r._reset = new zt, r.isDirty$ = r.dirty.asObservable().pipe(Es()), r.reset$ = r._reset.asObservable(), r.params = ut({}, Qd, t), r.params.watchProperty && (t = xo(r.params.watchProperty), e instanceof Od && t.includes("entities") && !t.includes("ids") && t.push("ids"), r.params.watchProperty = t), r } function Jd() { return Math.random().toString(36).slice(2) } function Zd(e) { return Cr(e).pipe(Bn(0)) } function el(e, t) { var i = zd.call(this, e, (t = void 0 === t ? {} : t).entityIds) || this; return i.query = e, i.params = t, i._someDirty = new zt, i.someDirty$ = nn(i.query.select(function(e) { return e.entities }), i._someDirty.asObservable()).pipe(Bn(0), ur(function() { return i.checkSomeDirty() })), i.params = ut({}, Qd, t), i.activate(), i.selectIds().pipe(Oa(1)).subscribe(function(e) { zd.prototype.rebase.call(i, e, { afterAdd: function(e) { return e.setHead() } }) }), i } lt(el, zd = Br), el.prototype.setHead = function(e) { if (this.params.entityIds && e) { var t = xo(e); if (!1 === xo(this.params.entityIds).some(function(e) { return -1 < t.indexOf(e) })) return this } return this.forEachId(e, function(e) { return e.setHead() }), this._someDirty.next(), this } , el.prototype.hasHead = function(e) { return !!this.entities.has(e) && this.getEntity(e).hasHead() } , el.prototype.reset = function(e, t) { void 0 === t && (t = {}), this.forEachId(e, function(e) { return e.reset(t) }) } , el.prototype.isDirty = function(e, t) { if (void 0 === t && (t = !0), this.entities.has(e)) { e = this.getEntity(e); return t ? e.isDirty$ : e.isDirty() } return !1 } , el.prototype.someDirty = function() { return this.checkSomeDirty() } , el.prototype.isPathDirty = function(e, t) { if (this.entities.has(e)) { var i = this.getEntity(e).getHead() , e = Gd(this.query.getEntity(e), t) , t = Gd(i, t); return this.params.comparator(e, t) } return null } , el.prototype.destroy = function(e) { this.forEachId(e, function(e) { return e.destroy() }), e || this._someDirty.complete() } , el.prototype.instantiatePlugin = function(e) { return new Xd(this.query,this.params,e) } , el.prototype.checkSomeDirty = function() { var e, t, i = this.resolvedIds(); try { for (var r = pt(i), n = r.next(); !n.done; n = r.next()) { var s = n.value; if (this.getEntity(s).isDirty()) return !0 } } catch (t) { e = { error: t } } finally { try { n && !n.done && (t = r.return) && t.call(r) } finally { if (e) throw e.error } } return !1 } , (gc = gc || {}).Update = "UPDATE", {}[gc.Update] = "update", (gr = gu = gu || {}).Update = "UPDATE", gr.AddEntities = "ADD_ENTITIES", gr.SetEntities = "SET_ENTITIES", gr.UpdateEntities = "UPDATE_ENTITIES", gr.RemoveEntities = "REMOVE_ENTITIES", gr.UpsertEntities = "UPSERT_ENTITIES", gr.UpsertManyEntities = "UPSERT_MANY_ENTITIES", (mu = {})[gu.Update] = "update", mu[gu.AddEntities] = "add", mu[gu.SetEntities] = "set", mu[gu.UpdateEntities] = "update", mu[gu.RemoveEntities] = "remove", mu[gu.UpsertEntities] = "upsert", mu[gu.UpsertManyEntities] = "upsertMany"; const tl = /^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/ , il = /^([^\/;?#]*)(.*)$/ , rl = /(?:\/|^)\.(?=\/)/g , nl = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g , sl = { buildAbsoluteURL: function(e, t, i) { if (i = i || {}, e = e.trim(), !(t = t.trim())) { if (!i.alwaysNormalize) return e; const t = sl.parseURL(e); if (!t) throw new Error("Error trying to parse base URL."); return t.path = sl.normalizePath(t.path), sl.buildURLFromParts(t) } const r = sl.parseURL(t); if (!r) throw new Error("Error trying to parse relative URL."); if (r.scheme) return i.alwaysNormalize ? (r.path = sl.normalizePath(r.path), sl.buildURLFromParts(r)) : t; const n = sl.parseURL(e); if (!n) throw new Error("Error trying to parse base URL."); if (!n.netLoc && n.path && "/" !== n.path[0]) { const e = il.exec(n.path); n.netLoc = e[1], n.path = e[2] } n.netLoc && !n.path && (n.path = "/"); const s = { scheme: n.scheme, netLoc: r.netLoc, path: null, params: r.params, query: r.query, fragment: r.fragment }; if (!r.netLoc && (s.netLoc = n.netLoc, "/" !== r.path[0])) if (r.path) { i.inheritQuery && (r.query || (s.query = n.query)); const e = n.path , t = e.substring(0, e.lastIndexOf("/") + 1) + r.path; s.path = sl.normalizePath(t) } else s.path = n.path, r.params || (s.params = n.params, r.query || (s.query = n.query)); return null === s.path && (s.path = i.alwaysNormalize ? sl.normalizePath(r.path) : r.path), sl.buildURLFromParts(s) }, parseURL: function(e) { e = tl.exec(e); return e ? { scheme: e[1] || "", netLoc: e[2] || "", path: e[3] || "", params: e[4] || "", query: e[5] || "", fragment: e[6] || "" } : null }, normalizePath: function(e) { for (e = e.split("").reverse().join("").replace(rl, ""); e.length !== (e = e.replace(nl, "")).length; ) ; return e.split("").reverse().join("") }, buildURLFromParts: function(e) { return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment }, getHostName: function(e) { let t; return e && (t = -1 < e.indexOf("://") ? e.split("/")[2] : e.split("/")[0], t = t.split(":")[0], t = t.split("?")[0]), t } }; var al, ol, dl, ll, ul, cl, hl, pl, fl = sl; function ml(e) { return null != e && !e.startsWith("http://") && !e.startsWith("https://") } function gl(e) { return null == e || ml(e) ? null : sl.getHostName(e) } function yl(e, t) { return !e || e === gl(t) } (w = al = al || {})[w.DOVI = 4] = "DOVI", w[w.HEVC = 3] = "HEVC", w[w.VP09 = 2] = "VP09", w[w.AVC = 1] = "AVC", w[w.UNKNOWN = 0] = "UNKNOWN", (yi = ol = ol || {})[yi.PQ = 3] = "PQ", yi[yi.HLG = 2] = "HLG", yi[yi.SDR = 1] = "SDR", yi[yi.UNKNOWN = 0] = "UNKNOWN", (A = dl = dl || {})[A.ALAC = 7] = "ALAC", A[A.FLAC = 6] = "FLAC", A[A.EC3 = 5] = "EC3", A[A.AC3 = 4] = "AC3", A[A.XHEAAC = 3] = "XHEAAC", A[A.AAC = 2] = "AAC", A[A.MP3 = 1] = "MP3", A[A.UNKNOWN = 0] = "UNKNOWN", (Br = ll = ll || {})[Br.VALID = 1] = "VALID", Br[Br.INVALID = 0] = "INVALID"; const vl = ["via", "x-apple-request-uuid"] , Sl = { maxNumRetry: 4, retryDelayMs: 0, maxRetryDelayMs: 0 } , bl = { maxNumRetry: 6, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 } , Tl = { maxNumRetry: 0, retryDelayMs: 0, maxRetryDelayMs: 0 } , El = { default: { maxTimeToFirstByteMs: 5e3, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: Tl, errorRetry: Tl }, customURL: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: Tl, errorRetry: Tl } } , Il = { maxNumRetry: 8, retryDelayMs: 1e3, maxRetryDelayMs: 2e4, backoff: "linear" } , wl = Object.assign(Object.assign({}, Il), { maxNumRetry: 1 }) , Al = { autoStartLoad: !0, startPosition: NaN, defaultAudioCodec: void 0, defaultVideoCodec: void 0, debug: !1, debugLevel: "info", buildType: void 0, minFramesBeforeSwitchingLevel: 11, minTargetDurations: 3, maxBufferLength: 60, maxBufferHole: .5, maxSeekHole: 2, discontinuitySeekTolerance: 2, almostDryBufferSec: .5, maxTotalDurationTolerance: .1, lowBufferThreshold: .5, lowBufferWatchdogPeriod: .5, highBufferWatchdogPeriod: 3, seekWatchdogPeriod: 5, nudgeOffset: .1, nudgeMaxRetry: 3, maxFragLookUpTolerance: .2, initialLiveManifestSize: 1, liveSyncDurationCount: 3, liveMaxLatencyDurationCount: 1 / 0, liveSyncDuration: void 0, liveMaxLatencyDuration: void 0, liveFlushExpiredFrags: !0, liveMaxUnchangedPlaylistRefresh: 3, liveEdgeForZeroStartPositon: !1, allowFastSwitchUp: !1, minMatchGroupDuration: 5, desiredIframeFPS: 8, initialIframeFPS: 6, minRemainingTimeInMediaPipeline: 3, leftMediaTimeToAutoPause: 10, startTargetDurationFactor: .9, enableWorker: !0, enableWebCrypto: !0, keySystemPreference: void 0, clearMediaKeysOnPromise: !0, useMultipleKeySessions: !1, enablePlayReadyKeySystem: !1, useMediaKeySystemAccessFilter: !1, playReadyMessageFormat: "utf16", startLevel: void 0, livePlaylistRefreshDelay: 2500, liveMinPlayingBufferLen: 5, enableIFramePreloading: !0, useMediaCapabilities: !1, enableID3Cues: !0, certLoadPolicy: El, keyLoadPolicy: { default: { maxTimeToFirstByteMs: 5e3, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: wl, errorRetry: Il }, customURL: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: wl, errorRetry: Il } }, manifestLoadPolicy: { default: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 } }, customURL: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 1e4, autoRetry: !1, timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 } } }, trickPlaybackConfig: { enabled: !0, minIframeDuration: 8 }, playlistLoadPolicy: { default: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, errorRetry: { maxNumRetry: 2, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 } }, customURL: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 1e4, autoRetry: !1, timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, errorRetry: { maxNumRetry: 2, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 } } }, fragLoadPolicy: { default: { maxTimeToFirstByteMs: 5e3, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: Sl, errorRetry: bl, forceContentLenCheckIfNoHeader: !1, reportCDNServer: !0 }, customURL: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: Sl, errorRetry: bl, reportCDNServer: !0 } }, steeringManifestLoadPolicy: { default: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 2e4, autoRetry: !1, timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 } }, customURL: { maxTimeToFirstByteMs: 1e4, maxLoadTimeMs: 1e4, autoRetry: !1, timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 } } }, maxNumAddLevelToPenaltyBox: 4, firstAudioMustOverlapVideoStart: !1, keyMinHoldTimeBeforeCleanup: 15e3, startFragPrefetch: !1, appendErrorMaxRetry: 3, alwaysResetOnNewCC: !1, fLoader: void 0, pLoader: void 0, xhrSetup: void 0, iframeMaxExitSeekDuration: 2e3, iframeStallMaxRetry: 5, audioPrimingDelay: 0, enableCEA708Captions: !0, customTextTrackCueRenderer: !1, enableWebVTT: !0, captionsTextTrack1Label: "English", captionsTextTrack1LanguageCode: "en", captionsTextTrack2Label: "Spanish", captionsTextTrack2LanguageCode: "es", enableDualTrackSelection: !1, condenseSubtitleTrack: !1, earlyFragTolerance: 7, vttConcurrentLoadCount: 1, trottleCheckInterval: 2e3, subtitleLeadTime: 30, stretchShortVideoTrack: !1, forceKeyFrameOnDiscontinuity: !0, useFirstLevelAtIncompatDiscontinuity: !0, abrBandwidthEstimator: "bandwidth-history-controller", abrEwmaDefaultEstimate: 5e5, abrDefaultEstimate: 5e5, abrBandWidthFactor: .95, abrBandWidthUpFactor: .9, abrMaxWithRealBitrate: !1, maxStarvationDelay: 4, maxLoadingDelay: 4, minAutoBitrate: 0, enableRtcReporting: !1, rtcIntervalTimeout: 3e5, rtcSender: "HLSJS", rtcSessionTag: "none", useHTTPPlaybackSessionId: !1, warmupCdms: !1, enablePerformanceLogging: !1, overridePlaybackRate: !1, nativeControlsEnabled: !1, useCustomMediaFunctions: !0, seekEventThrottleMs: 150, enableAdaptiveStartup: !0, bandwidthHistoryWindowSize: 12e4, bandwidthHistoryTTL: 6e5, bandwidthHistoryAggregationMethod: "quadratic-time-weighted", bandwidthHistoryGetEstimateThrottleMs: 1e3, defaultTargetDuration: 10, targetStartupMs: 4e3, adaptiveStartupMetricsOverride: { maxValidHeight: 1080, maxValidBitrate: 1 / 0, maxPreferredBitrate: 1 / 0 }, bandwidthHistoryStorageKey: "AppleHLS-bandwidth-estimation", storageKeyPrefix: "AppleHLS-", storage: { get: "undefined" == typeof localStorage ? void 0 : localStorage.getItem.bind(localStorage), set: "undefined" == typeof localStorage ? void 0 : localStorage.setItem.bind(localStorage) }, minFragmentCount: 10, minPlaylistCount: 5, enableCDNFallback: !0, enableQueryParamsForITunes: !1, gapless: !1, useViewportSizeForLevelCap: !1, statDefaults: { playlistLoadTimeMs: 500, playlistParseTimeMs: 50, fragParseTimeMs: 50, fragBufferCreationDelayMs: 200, dataFragAppendMs: 50, initFragAppendMs: 50 }, disableVideoCodecList: new Set([]), disableAudioCodecList: new Set([dl.ALAC, dl.FLAC, dl.XHEAAC]), useHighestVideoCodecPrivate: !0, sessionDataAutoLoad: { "com.apple.hls.chapters": !0 } } , Ol = Object.assign(Object.assign({}, { itemId: "Nah", mediaOptionId: "Nah" }), { mediaOptionType: void 0 }) , kl = e=>{ var {itemId: t, mediaOptionId: e} = e; return "Nah" !== t && "Nah" !== e } ; (gc = ul = ul || {})[gc.Variant = 0] = "Variant", gc[gc.AltAudio = 1] = "AltAudio", gc[gc.Subtitle = 2] = "Subtitle"; const Cl = ["variant", "altAudio", "subtitle"] , Dl = [ul.Variant, ul.AltAudio, ul.Subtitle] , Ml = [ul.Variant, ul.AltAudio]; (gr = cl = cl || {})[gr.Variant = 0] = "Variant", gr[gr.AltAudio = 1] = "AltAudio"; const Pl = ["variant", "altAudio"]; function xl(e) { switch (e) { case ul.Variant: return cl.Variant; case ul.AltAudio: return cl.AltAudio; default: return null } } function Rl(e) { return e === cl.Variant ? ul.Variant : ul.AltAudio } (mu = hl = hl || {})[mu.NO = 0] = "NO", mu[mu.YES = 1] = "YES", (gu = pl = pl || {}).UNKNOWN = "unkn", gu.VIDEO = "vide", gu.AUDIO = "soun", gu.SUBTITLE = "sbtl", gu.CLOSEDCAPTION = "clcp"; const Ll = { search: function(e, t) { let i, r, n = 0, s = (null == e ? void 0 : e.length) - 1; for (; n <= s; ) { var a = t(r = e[i = (n + s) / 2 | 0]); if (0 < a) n = 1 + i; else { if (!(a < 0)) return r; s = i - 1 } } return null } }; var _l = Ll , Nl = { findFragmentBySNAndBuffer: function(e, t, i=0, r=0, n=0) { let s; e = e ? t[e.mediaSeqNum - t[0].mediaSeqNum + 1] : null; return s = i < r ? (r - n < i && (n = 0), e && !this.fragmentWithinToleranceTest(i, n, e) ? e : Ll.search(t, this.fragmentWithinToleranceTest.bind(null, i, n))) : t[t.length - 1], s }, fragmentWithinToleranceTest: function(e, t, i) { t = Math.min(t, i.duration); return i.start + i.duration - t <= e ? 1 : i.start - t > e && i.start ? -1 : 0 } }; const Fl = { startFragmentInCC: function(e, t, i) { let r = t - i.discoSeqNum; if (0 === r) { const t = e[i.mediaSeqNum - e[0].mediaSeqNum - 1]; r = t && t.discoSeqNum === i.discoSeqNum ? -1 : 0 } return r }, endFragmentInCC: function(e, t, i) { let r = t - i.discoSeqNum; if (0 === r) { const t = e[i.mediaSeqNum - e[0].mediaSeqNum + 1]; r = t && t.discoSeqNum === i.discoSeqNum ? 1 : 0 } return r }, findStartEndFragmentsInCC: function(e, t, i) { let r, n; return 0 < (null == e ? void 0 : e.length) && ne(t) && (r = Ll.search(e, Fl.startFragmentInCC.bind(null, e, t)), n = Ll.search(e, Fl.endFragmentInCC.bind(null, e, t))), r && !ne(r.discoSeqNum) && (r = void 0), n && !ne(n.discoSeqNum) && (n = void 0), { startFrag: r, endFrag: n } }, getTimeRangeDictForCC: function(e, t, i) { var {startFrag: t, endFrag: i} = Fl.findStartEndFragmentsInCC(e, t, i); return { start: t.start, end: i.start + i.duration } }, getTimeRangeForCC: function(e, t, i) { var {startFrag: t, endFrag: i} = Fl.findStartEndFragmentsInCC(e, t, i); let r = []; return t && i && (r = [t.start, i.start + i.duration]), r }, snapToCCTimeRange: function(e, t, i, r) { r = Fl.getTimeRangeForCC(t, i, r); return null != r && r.length ? Math.min(r[1], Math.max(r[0], e)) : e }, getMinTimeForCC(e, t, i, r) { if (null == e || !e.length) return 0; let n = 0; if (ne(i) && e) { e = Fl.getTimeRangeForCC(e, i, r); if (e) { const s = Fl.getTimeRangeForCC(t, i, r); n = null != s && s.length ? Math.max(s[0], e[0]) : e[0] } } return n }, ccForTime(e, t) { t = Ll.search(e, Nl.fragmentWithinToleranceTest.bind(null, t, 0)); return null == t ? void 0 : t.discoSeqNum } }; var Bl = Fl; const Ul = Bi(void 0); function $l(e, t, i=1) { return e.pipe(an(t), Cs(i)) } function Vl(e, t) { var i = e.timeline; return { seconds: (e.seconds - i.rootTimeSeconds) / i.rate * t.rate + t.rootTimeSeconds, timeline: t } } class Kl { constructor() { this._timeline = null } get forward() { var e; return 0 < (null === (e = this.timeline) || void 0 === e ? void 0 : e.rate) } get isStarted() { return Boolean(this.hostClock) } start(e) { this.stopTime = null, this._timeline = Object.assign({}, e); const t = { rootTimeSeconds: performance.now() / 1e3, rate: 1 }; this.hostClock = { timeline: t, getCurrentTime: ()=>({ seconds: performance.now() / 1e3, timeline: t }) } } stop() { this.isStarted && (this.stopTime = this.getCurrentTime()), this.hostClock = null, this._timeline = null } get timeline() { return this._timeline } getCurrentTime() { return this.stopTime || Vl(this.hostClock.getCurrentTime(), this.timeline) } } class Hl { constructor(e) { this._timeline = e, this.lastTimeSeconds = e.rootTimeSeconds } get timeline() { return Object.assign({}, this._timeline) } getCurrentTime() { return { seconds: this.lastTimeSeconds, timeline: Object.assign({}, this._timeline) } } } const jl = { name: "ifm" }; class ql { constructor(e, t) { this.config = e, this.logger = t, this.scaledFragments = [], this.iframeClock = new Kl, this.hasMore$ = new gi(!0), this.logger = t.child(jl) } destroy() { this.stop() } resetScaledSegments() { this.scaledFragments = [] } get anchorFrag() { return this.scaledFragments.length ? this.scaledFragments[0] : null } get lastFrag() { return this.scaledFragments.length ? this.scaledFragments.slice(-1)[0] : null } get isStarted() { return Boolean(this.iframeClock.isStarted) } get iframeRate() { var e; return null !== (e = null === (e = this.iframeClock.timeline) || void 0 === e ? void 0 : e.rate) && void 0 !== e ? e : 0 } get iframeClockTimeSeconds() { return this.iframeClock.getCurrentTime().seconds } get mediaAppendClockTimeSeconds() { var e; return null !== (e = null === (e = this.mediaAppendClock) || void 0 === e ? void 0 : e.getCurrentTime().seconds) && void 0 !== e ? e : 0 } stop() { this.hasMore$.next(!0), this.iframeClock.stop(), this.mediaAppendClock = null, this.resetScaledSegments() } checkHasMore() { this.hasMore$.next(!0) } startClocksAndGetFirstFragment(e, t, i, r, n) { let s = Ll.search(e, Nl.fragmentWithinToleranceTest.bind(null, r, 1e-4)); if (!s && r >= e[e.length - 1].start && (s = e[e.length - 1]), !s) return this.logger.error(`startClocksAndGetFirstFragment => no anchorFrag for time ${r}`), this.hasMore$.next(!1), null; var a = ne(n) ? n : s.discoSeqNum , a = Bl.getMinTimeForCC(e, t, a, this.logger) , r = ne(n) && 1 < i ? a : r , a = 1 < i ? Math.ceil(r) : Math.ceil(a); return this.iframeClock.start({ rootTimeSeconds: r, rate: i }), this.mediaAppendClock = new Hl({ rootTimeSeconds: a, rate: 1 }), { frag: s, newMediaRootTime: a } } getNextFragment(e, t, i) { const r = this.lastFrag , {iframeClock: n, mediaAppendClock: s} = this , a = n.timeline; s.lastTimeSeconds = t; var o = n.forward ? 1 : -1; let d, l = Math.max(0, Math.min(r.mediaSeqNum - e[0].mediaSeqNum + o, e.length - 1)); if (r.mediaSeqNum !== e[l].mediaSeqNum) do { d = e[l]; const i = n.forward ? d.start : d.start + d.duration; if (Vl({ seconds: i, timeline: a }, s.timeline).seconds >= t && (n.forward && i >= this.iframeClockTimeSeconds || !n.forward && i <= this.iframeClockTimeSeconds)) break } while (l += o, 0 < l && l < e.length); return d || (this.logger.error(`getNextFragment(bufferEnd: ${t}) => no more frags, but we should have found an end fragment, setting hasMore to false`), this.hasMore$.next(!1)), { frag: d } } nextFragment(e, t, i, r) { let n, s; if (this.isStarted && i !== this.iframeRate && (s = this.iframeClockTimeSeconds, this.stop()), this.isStarted) { if (n = this.getNextFragment(e, r, i), !n.frag) return; if (n.frag.discoSeqNum !== this.anchorFrag.discoSeqNum) { const a = this.iframeClockTimeSeconds; this.stop(); const s = this.startClocksAndGetFirstFragment(e, t, i, a, n.frag.discoSeqNum)["newMediaRootTime"]; n.newMediaRootTime = s } } else if (n = this.startClocksAndGetFirstFragment(e, t, i, null != s ? s : r), !n) return; var r = n["frag"] , r = this.handleNextFrag(e, r); return Object.assign(Object.assign({}, n), { frag: r }) } handleNextFrag(e, t) { const i = Object.assign(Object.assign({}, t), { iframeMediaStart: NaN, iframeMediaDuration: NaN }) , {mediaAppendClock: r, iframeClock: n} = this; this.iframeClockBounds = Bl.getTimeRangeDictForCC(e, i.discoSeqNum, this.logger); var s = r.getCurrentTime().seconds , t = n.timeline.rate; return i.start = i.iframeMediaStart = s, i.iframeMediaDuration = Math.max(i.duration / Math.abs(t), 1 / this.config.minIframeDuration), this.scaledFragments.push(i), this.isEndFrag(e, i) && this.hasMore$.next(!1), i } get hasMore() { return this.hasMore$.value } handleWaitForMore() { return this.isStarted ? (this.iframeClock.getCurrentTime(), $l(this.hasMore$, e=>!0 === e).pipe(Ja(()=>{} ))) : Ul } isEndFrag(e, t) { var i = e[0] , r = e[e.length - 1] , e = this.iframeClock.forward; return !e && (null == i ? void 0 : i.mediaSeqNum) === t.mediaSeqNum || e && (null == r ? void 0 : r.mediaSeqNum) === t.mediaSeqNum } } var Ql = {} , w = {}; Object.defineProperty(w, "__esModule", { value: !0 }), w.hide = void 0, w.hide = function() { return function(e) { return e.lift(new Gl) } } ; var Gl = (Wl.prototype.call = function(e, t) { return t.subscribe(e) } , Wl) , yi = {}; function Wl() { this.hide = !0 } Object.defineProperty(yi, "__esModule", { value: !0 }), yi.tag = void 0, yi.tag = function(t) { return function(e) { return e.lift(new Jl(t)) } } ; var zl, Xl, Yl, Jl = (Zl.prototype.call = function(e, t) { return t.subscribe(e) } , Zl); function Zl(e) { this.tag = e } function eu(e) { const {method: t, isEncrypted: i, uri: r, format: n, formatversions: s} = e , a = { method: t, isEncrypted: i, uri: r, format: n, formatversions: s, iv: e.ivBuf ? new Uint8Array(e.ivBuf) : null }; return e.keyIdBuf && (a.keyId = new Uint8Array(e.keyIdBuf)), e.keyBuf && (a.key = new Uint8Array(e.keyBuf)), e.psshBuf && (a.pssh = new Uint8Array(e.psshBuf)), a } A = Ql, Yl = e && e.__createBinding || (Object.create ? function(e, t, i, r) { void 0 === r && (r = i), Object.defineProperty(e, r, { enumerable: !0, get: function() { return t[i] } }) } : function(e, t, i, r) { e[r = void 0 === r ? i : r] = t[i] } ), Br = e && e.__exportStar || function(e, t) { for (var i in e) "default" === i || t.hasOwnProperty(i) || Yl(t, e, i) } , Object.defineProperty(A, "__esModule", { value: !0 }), Br(w, A), Br(yi, A), (gc = zl = zl || {}).MustRequestResponse = "MustRequestResponse", gc.WaitingForKeyResponse = "WaitingForKeyResponse", gc.GotKeyResponse = "GotKeyResponse"; class tu extends Error { constructor(e, t) { super(e), this.code = t } } class iu extends p { constructor(e, t, i, r, n, s) { super(o, e, t, i, n), this.code = r, this.isTimeout = s, this.response = n } } class ru extends iu { constructor(e, t, i, r, n) { super(n ? "manifestLoadTimeOut" : "manifestLoadError", e, t, i, r, n) } } class nu extends iu { constructor(e, t, i, r, n, s, a, o) { switch (super("", e, t, i, r, n), this.mediaOptionType = s, this.mediaOptionId = a, this.url = o, s) { case ul.Variant: this.details = n ? "levelLoadTimeOut" : N; break; case ul.AltAudio: this.details = n ? "audioTrackLoadTimeOut" : "audioTrackLoadError"; break; case ul.Subtitle: this.details = n ? "subtitleTrackLoadTimeout" : "subtitleTrackLoadError" } } } class su extends iu { constructor(e, t, i, r) { super("sessionDataLoadError", e, t, i, r, !1) } } class au extends iu { constructor(e, t, i, r, n, s, a) { super(n ? "fragLoadTimeOut" : "fragLoadError", e, t, i, r, n), this.mediaOptionId = s.mediaOptionId, this.mediaOptionType = s.mediaOptionType, this.stats = a } } class ou extends or { constructor(e, t, i) { super(), this.message = e, this.code = t, this.stats = i } } class du extends iu { constructor(e, t, i) { super("fragAbortError", !1, "Fragment abort", 0, i, !1), this.candidateMediaOptionId = t, this.mediaOptionId = e.mediaOptionId, this.mediaOptionType = e.mediaOptionType } } class lu extends iu { constructor(e, t, i, r=[]) { super("keyLoadTimeOut", !1, e, i.code, i, !0), this.keyuri = t, this.response = i, this.mediaOptionIds = r } } (gr = Xl = Xl || {})[gr.InvalidState = 0] = "InvalidState", gr[gr.Abort = 1] = "Abort", gr[gr.OutputRestricted = 2] = "OutputRestricted", gr[gr.AlreadyFailedKey = 3] = "AlreadyFailedKey", gr[gr.HttpError = 4] = "HttpError", gr[gr.InternalError = 5] = "InternalError", gr[gr.LicenseServerError = 6] = "LicenseServerError", gr[gr.InsufficientCPC = 7] = "InsufficientCPC"; class uu extends iu { constructor(e, t, i, r, n, s, a=!1, o=[]) { super("keyLoadError", a, e, i, r, !1), this.keyuri = t, this.isOkToRetry = n, this.keyErrorReason = s, this.mediaOptionIds = o } } class cu extends p { constructor(e, t, i, r, n) { super(s, "keySystemGenericError", !0, e, r), this.keyuri = t, this.code = i, this.response = r, this.keysystemstring = n } } function hu(e, t) { return e instanceof uu ? new uu(e.message,e.keyuri,e.code,e.response,e.isOkToRetry,e.keyErrorReason,e.fatal,t) : e instanceof lu ? new lu(e.message,e.keyuri,$.CryptResponseReceivedSlowly,t) : e ? new V(e.fatal,e.reason,$.InternalError) : null } const pu = { id: "fairplaystreaming", systemStringPrefix: "com.apple.fps", keyFormatString: "com.apple.streamingkeydelivery", securityLevels: { AppleBaseline: 0, AppleMain: 1, Main: 1, Baseline: 0 } }; class fu extends Od { constructor(e) { super(e), this.store = e } get unresolvedUriLoading$() { return this.selectEntityAction(To.Add).pipe(ur(e=>e.map(e=>this.getEntity(e)))) } } var mu = {}; Object.defineProperty(mu, "__esModule", { value: !0 }); var gu = "undefined" != typeof Symbol && "symbol" == typeof Symbol("x") , yu = "undefined" != typeof Map , vu = "undefined" != typeof Set , Su = "undefined" != typeof Proxy && void 0 !== Proxy.revocable && "undefined" != typeof Reflect , bu = gu ? Symbol.for("immer-nothing") : ((yc = {})["immer-nothing"] = !0, yc) , Tu = gu ? Symbol.for("immer-draftable") : "__$immer_draftable" , Eu = gu ? Symbol.for("immer-state") : "__$immer_state" , Iu = "undefined" != typeof Symbol && Symbol.iterator || "@@iterator" , wu = { 0: "Illegal state", 1: "Immer drafts cannot have computed properties", 2: "This object has been frozen and should not be mutated", 3: function(e) { return "Cannot use a proxy that has been revoked. Did you pass an object from inside an immer function to an async process? " + e }, 4: "An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.", 5: "Immer forbids circular references", 6: "The first or second argument to `produce` must be a function", 7: "The third argument to `produce` must be a function or undefined", 8: "First argument to `createDraft` must be a plain object, an array, or an immerable object", 9: "First argument to `finishDraft` must be a draft returned by `createDraft`", 10: "The given draft is already finalized", 11: "Object.defineProperty() cannot be used on an Immer draft", 12: "Object.setPrototypeOf() cannot be used on an Immer draft", 13: "Immer only supports deleting array indices", 14: "Immer only supports setting array indices and the 'length' property", 15: function(e) { return "Cannot apply patch, path doesn't resolve: " + e }, 16: 'Sets cannot have "replace" patches.', 17: function(e) { return "Unsupported patch operation: " + e }, 18: function(e) { return "The plugin for '" + e + "' has not been loaded into Immer. To enable the plugin, import and call `enable" + e + "()` when initializing your application." }, 20: "Cannot use proxies if Proxy, Proxy.revocable or Reflect are not available", 21: function(e) { return "produce can only be called on things that are draftable: plain objects, arrays, Map, Set or classes that are marked with '[immerable]: true'. Got '" + e + "'" }, 22: function(e) { return "'current' expects a draft, got: " + e }, 23: function(e) { return "'original' expects a draft, got: " + e } }; function Au(e) { for (var t = arguments.length, i = new Array(1 < t ? t - 1 : 0), r = 1; r < t; r++) i[r - 1] = arguments[r]; var n = wu[e] , e = n ? "function" == typeof n ? n.apply(null, i) : n : "unknown error nr: " + e; throw new Error("[Immer] " + e) } function Ou(e) { return !!e && !!e[Eu] } function ku(t) { return !!t && (function() { if (!t || "object" != typeof t) return !1; var e = Object.getPrototypeOf(t); return !e || e === Object.prototype }() || Array.isArray(t) || !!t[Tu] || !!t.constructor[Tu] || Nu(t) || Fu(t)) } var Cu = "undefined" != typeof Reflect && Reflect.ownKeys ? Reflect.ownKeys : void 0 !== Object.getOwnPropertySymbols ? function(e) { return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e)) } : Object.getOwnPropertyNames , Du = Object.getOwnPropertyDescriptors || function(t) { var i = {}; return Cu(t).forEach(function(e) { i[e] = Object.getOwnPropertyDescriptor(t, e) }), i } ; function Mu(i, r, t) { void 0 === t && (t = !1), 0 === Pu(i) ? (t ? Object.keys : Cu)(i).forEach(function(e) { t && "symbol" == typeof e || r(e, i[e], i) }) : i.forEach(function(e, t) { return r(t, e, i) }) } function Pu(e) { var t = e[Eu]; return t ? 3 < t.type_ ? t.type_ - 4 : t.type_ : Array.isArray(e) ? 1 : Nu(e) ? 2 : Fu(e) ? 3 : 0 } function xu(e, t) { return 2 === Pu(e) ? e.has(t) : Object.prototype.hasOwnProperty.call(e, t) } function Ru(e, t) { return 2 === Pu(e) ? e.get(t) : e[t] } function Lu(e, t, i) { var r = Pu(e); 2 === r ? e.set(t, i) : 3 === r ? (e.delete(t), e.add(i)) : e[t] = i } function _u(e, t) { return e === t ? 0 !== e || 1 / e == 1 / t : e != e && t != t } function Nu(e) { return yu && e instanceof Map } function Fu(e) { return vu && e instanceof Set } function Bu(e) { return e.copy_ || e.base_ } function Uu(e) { if (Array.isArray(e)) return Array.prototype.slice.call(e); var t = Du(e); delete t[Eu]; for (var i = Cu(t), r = 0; r < i.length; r++) { var n = i[r] , s = t[n]; !1 === s.writable && (s.writable = !0, s.configurable = !0), (s.get || s.set) && (t[n] = { configurable: !0, writable: !0, enumerable: s.enumerable, value: e[n] }) } return Object.create(Object.getPrototypeOf(e), t) } function $u(e, t) { Ku(e) || Ou(e) || !ku(e) || (1 < Pu(e) && (e.set = e.add = e.clear = e.delete = Vu), Object.freeze(e), t && Mu(e, function(e, t) { return $u(t, !0) }, !0)) } function Vu() { Au(2) } function Ku(e) { return null == e || "object" != typeof e || Object.isFrozen(e) } var Hu, ju = {}; function qu(e) { var t = ju[e]; return t || Au(18, e), t } function Qu(e, t) { ju[e] || (ju[e] = t) } function Gu() { return Hu || Au(0), Hu } function Wu(e, t) { t && (qu("Patches"), e.patches_ = [], e.inversePatches_ = [], e.patchListener_ = t) } function zu(e) { Xu(e), e.drafts_.forEach(Ju), e.drafts_ = null } function Xu(e) { e === Hu && (Hu = e.parent_) } function Yu(e) { return Hu = { drafts_: [], parent_: Hu, immer_: e, canAutoFreeze_: !0, unfinalizedDrafts_: 0 } } function Ju(e) { e = e[Eu]; 0 === e.type_ || 1 === e.type_ ? e.revoke_() : e.revoked_ = !0 } function Zu(e, t) { t.unfinalizedDrafts_ = t.drafts_.length; var i = t.drafts_[0] , r = void 0 !== e && e !== i; return t.immer_.useProxies_ || qu("ES5").willFinalizeES5_(t, e, r), r ? (i[Eu].modified_ && (zu(t), Au(4)), ku(e) && (e = ec(t, e), t.parent_ || ic(t, e)), t.patches_ && qu("Patches").generateReplacementPatches_(i[Eu], e, t.patches_, t.inversePatches_)) : e = ec(t, i, []), zu(t), t.patches_ && t.patchListener_(t.patches_, t.inversePatches_), e !== bu ? e : void 0 } function ec(i, r, n) { if (Ku(r)) return r; var s, a = r[Eu]; return a ? a.scope_ !== i ? r : a.modified_ ? (a.finalized_ || (a.finalized_ = !0, a.scope_.unfinalizedDrafts_--, s = 4 === a.type_ || 5 === a.type_ ? a.copy_ = Uu(a.draft_) : a.copy_, Mu(3 === a.type_ ? new Set(s) : s, function(e, t) { return tc(i, a, s, e, t, n) }), ic(i, s, !1), n && i.patches_ && qu("Patches").generatePatches_(a, n, i.patches_, i.inversePatches_)), a.copy_) : (ic(i, a.base_, !0), a.base_) : (Mu(r, function(e, t) { return tc(i, a, r, e, t, n) }, !0), r) } function tc(e, t, i, r, n, s) { if (n === i && Au(5), Ou(n)) { s = ec(e, n, s && t && 3 !== t.type_ && !xu(t.assigned_, r) ? s.concat(r) : void 0); if (Lu(i, r, s), !Ou(s)) return; e.canAutoFreeze_ = !1 } ku(n) && !Ku(n) && (!e.immer_.autoFreeze_ && e.unfinalizedDrafts_ < 1 || (ec(e, n), t && t.scope_.parent_ || ic(e, n))) } function ic(e, t, i) { void 0 === i && (i = !1), e.immer_.autoFreeze_ && e.canAutoFreeze_ && $u(t, i) } var rc = { get: function(e, t) { if (t === Eu) return e; var i, r, n = Bu(e); if (!xu(n, t)) return i = e, (r = ac(n, t)) ? "value"in r ? r.value : null === (r = r.get) || void 0 === r ? void 0 : r.call(i.draft_) : void 0; n = n[t]; return !e.finalized_ && ku(n) && n === sc(e.base_, t) ? (dc(e), e.copy_[t] = uc(e.scope_.immer_, n, e)) : n }, has: function(e, t) { return t in Bu(e) }, ownKeys: function(e) { return Reflect.ownKeys(Bu(e)) }, set: function(e, t, i) { var r = ac(Bu(e), t); if (null != r && r.set) return r.set.call(e.draft_, i), !0; if (!e.modified_) { var n = sc(Bu(e), t) , r = null == n ? void 0 : n[Eu]; if (r && r.base_ === i) return e.copy_[t] = i, !(e.assigned_[t] = !1); if (_u(i, n) && (void 0 !== i || xu(e.base_, t))) return !0; dc(e), oc(e) } return e.copy_[t] = i, e.assigned_[t] = !0 }, deleteProperty: function(e, t) { return void 0 !== sc(e.base_, t) || t in e.base_ ? (e.assigned_[t] = !1, dc(e), oc(e)) : delete e.assigned_[t], e.copy_ && delete e.copy_[t], !0 }, getOwnPropertyDescriptor: function(e, t) { var i = Bu(e) , r = Reflect.getOwnPropertyDescriptor(i, t); return r && { writable: !0, configurable: 1 !== e.type_ || "length" !== t, enumerable: r.enumerable, value: i[t] } }, defineProperty: function() { Au(11) }, getPrototypeOf: function(e) { return Object.getPrototypeOf(e.base_) }, setPrototypeOf: function() { Au(12) } } , nc = {}; function sc(e, t) { var i = e[Eu]; return (i ? Bu(i) : e)[t] } function ac(e, t) { if (t in e) for (var i = Object.getPrototypeOf(e); i; ) { var r = Object.getOwnPropertyDescriptor(i, t); if (r) return r; i = Object.getPrototypeOf(i) } } function oc(e) { e.modified_ || (e.modified_ = !0, e.parent_ && oc(e.parent_)) } function dc(e) { e.copy_ || (e.copy_ = Uu(e.base_)) } Mu(rc, function(e, t) { nc[e] = function() { return arguments[0] = arguments[0][0], t.apply(this, arguments) } }), nc.deleteProperty = function(e, t) { return isNaN(parseInt(t)) && Au(13), rc.deleteProperty.call(this, e[0], t) } , nc.set = function(e, t, i) { return "length" !== t && isNaN(parseInt(t)) && Au(14), rc.set.call(this, e[0], t, i, e[0]) } ; (w = lc.prototype).produce = function(e, s, t) { if ("function" == typeof e && "function" != typeof s) { var a = s; s = e; var o = this; return function(e) { var t = this; void 0 === e && (e = a); for (var i = arguments.length, r = new Array(1 < i ? i - 1 : 0), n = 1; n < i; n++) r[n - 1] = arguments[n]; return o.produce(e, function(e) { return s.call.apply(s, [t, e].concat(r)) }) } } var i; if ("function" != typeof s && Au(6), void 0 !== t && "function" != typeof t && Au(7), ku(e)) { var r = Yu(this) , n = uc(this, e, void 0) , d = !0; try { i = s(n), d = !1 } finally { (d ? zu : Xu)(r) } return "undefined" != typeof Promise && i instanceof Promise ? i.then(function(e) { return Wu(r, t), Zu(e, r) }, function(e) { throw zu(r), e }) : (Wu(r, t), Zu(i, r)) } if (!e || "object" != typeof e) return (i = s(e)) === bu ? void 0 : (void 0 === i && (i = e), this.autoFreeze_ && $u(i, !0), i); Au(21, e) } , w.produceWithPatches = function(n, e, t) { var i, r, s = this; return "function" == typeof n ? function(e) { for (var t = arguments.length, i = new Array(1 < t ? t - 1 : 0), r = 1; r < t; r++) i[r - 1] = arguments[r]; return s.produceWithPatches(e, function(e) { return n.apply(void 0, [e].concat(i)) }) } : [this.produce(n, e, function(e, t) { i = e, r = t }), i, r] } , w.createDraft = function(e) { ku(e) || Au(8), Ou(e) && (e = cc(e)); var t = Yu(this) , e = uc(this, e, void 0); return e[Eu].isManual_ = !0, Xu(t), e } , w.finishDraft = function(e, t) { e = e && e[Eu]; e && e.isManual_ || Au(9), e.finalized_ && Au(10); e = e.scope_; return Wu(e, t), Zu(void 0, e) } , w.setAutoFreeze = function(e) { this.autoFreeze_ = e } , w.setUseProxies = function(e) { e && !Su && Au(20), this.useProxies_ = e } , w.applyPatches = function(e, t) { for (var i = t.length - 1; 0 <= i; i--) { var r = t[i]; if (0 === r.path.length && "replace" === r.op) { e = r.value; break } } var n = qu("Patches").applyPatches_; return Ou(e) ? n(e, t) : this.produce(e, function(e) { return n(e, t.slice(i + 1)) }) } , Br = lc; function lc(e) { this.useProxies_ = Su, this.autoFreeze_ = !0, "boolean" == typeof (null == e ? void 0 : e.useProxies) && this.setUseProxies(e.useProxies), "boolean" == typeof (null == e ? void 0 : e.autoFreeze) && this.setAutoFreeze(e.autoFreeze), this.produce = this.produce.bind(this), this.produceWithPatches = this.produceWithPatches.bind(this) } function uc(e, t, i) { t = Nu(t) ? qu("MapSet").proxyMap_(t, i) : Fu(t) ? qu("MapSet").proxySet_(t, i) : e.useProxies_ ? function(e, t) { var i = Array.isArray(e) , r = { type_: i ? 1 : 0, scope_: t ? t.scope_ : Gu(), modified_: !1, finalized_: !1, assigned_: {}, parent_: t, base_: e, draft_: null, copy_: null, revoke_: null, isManual_: !1 } , t = r , e = rc; i && (t = [r], e = nc); t = Proxy.revocable(t, e), e = t.revoke, t = t.proxy; return r.draft_ = t, r.revoke_ = e, t }(t, i) : qu("ES5").createES5Proxy_(t, i); return (i ? i.scope_ : Gu()).drafts_.push(t), t } function cc(e) { return Ou(e) || Au(22, e), function i(e) { if (!ku(e)) return e; var r, n = e[Eu], t = Pu(e); if (n) { if (!n.modified_ && (n.type_ < 4 || !qu("ES5").hasChanges_(n))) return n.base_; n.finalized_ = !0, r = hc(e, t), n.finalized_ = !1 } else r = hc(e, t); return Mu(r, function(e, t) { n && Ru(n.base_, e) === t || Lu(r, e, i(t)) }), 3 === t ? new Set(r) : r }(e) } function hc(e, t) { switch (t) { case 2: return new Map(e); case 3: return Array.from(e) } return Uu(e) } function pc() { var r = {}; function d(i, e) { var t = r[i]; return t ? t.enumerable = e : r[i] = t = { configurable: !0, enumerable: e, get: function() { var e = this[Eu]; return a(e), rc.get(e, i) }, set: function(e) { var t = this[Eu]; a(t), rc.set(t, i, e) } }, t } function n(e) { for (var t = e.length - 1; 0 <= t; t--) { var i = e[t][Eu]; if (!i.modified_) switch (i.type_) { case 5: u(i) && oc(i); break; case 4: s(i) && oc(i) } } } function s(e) { for (var t = e.base_, i = e.draft_, r = Cu(i), n = r.length - 1; 0 <= n; n--) { var s = r[n]; if (s !== Eu) { var a = t[s]; if (void 0 === a && !xu(t, s)) return !0; var o = i[s] , s = o && o[Eu]; if (s ? s.base_ !== a : !_u(o, a)) return !0 } } e = !!t[Eu]; return r.length !== Cu(t).length + (e ? 0 : 1) } function u(e) { var t = e.draft_; if (t.length !== e.base_.length) return !0; t = Object.getOwnPropertyDescriptor(t, t.length - 1); return !(!t || t.get) } function a(e) { e.revoked_ && Au(3, JSON.stringify(Bu(e))) } Qu("ES5", { createES5Proxy_: function(e, t) { var i = Array.isArray(e) , r = function(e, t) { if (e) { for (var i = new Array(t.length), r = 0; r < t.length; r++) Object.defineProperty(i, "" + r, d(r, !0)); return i } var n = Du(t); delete n[Eu]; for (var s = Cu(n), a = 0; a < s.length; a++) { var o = s[a]; n[o] = d(o, e || !!n[o].enumerable) } return Object.create(Object.getPrototypeOf(t), n) }(i, e) , e = { type_: i ? 5 : 4, scope_: t ? t.scope_ : Gu(), modified_: !1, finalized_: !1, assigned_: {}, parent_: t, base_: e, draft_: r, copy_: null, revoked_: !1, isManual_: !1 }; return Object.defineProperty(r, Eu, { value: e, writable: !0 }), r }, willFinalizeES5_: function(e, t, i) { i ? Ou(t) && t[Eu].scope_ === e && n(e.drafts_) : (e.patches_ && function t(e) { if (e && "object" == typeof e) { var i = e[Eu]; if (i) { var r = i.base_ , n = i.draft_ , s = i.assigned_; if (4 === (e = i.type_)) Mu(n, function(e) { e !== Eu && (void 0 !== r[e] || xu(r, e) ? s[e] || t(n[e]) : (s[e] = !0, oc(i))) }), Mu(r, function(e) { void 0 !== n[e] || xu(n, e) || (s[e] = !1, oc(i)) }); else if (5 === e) { if (u(i) && (oc(i), s.length = !0), n.length < r.length) for (var a = n.length; a < r.length; a++) s[a] = !1; else for (var o = r.length; o < n.length; o++) s[o] = !0; for (var d = Math.min(n.length, r.length), l = 0; l < d; l++) void 0 === s[l] && t(n[l]) } } } }(e.drafts_[0]), n(e.drafts_)) }, hasChanges_: function(e) { return (4 === e.type_ ? s : u)(e) } }) } function fc() { var m = "replace" , g = "add" , y = "remove"; function l(e) { if (!ku(e)) return e; if (Array.isArray(e)) return e.map(l); if (Nu(e)) return new Map(Array.from(e.entries()).map(function(e) { return [e[0], l(e[1])] })); if (Fu(e)) return new Set(Array.from(e).map(l)); var t, i = Object.create(Object.getPrototypeOf(e)); for (t in e) i[t] = l(e[t]); return i } function v(e) { return Ou(e) ? l(e) : e } Qu("Patches", { applyPatches_: function(d, e) { return e.forEach(function(e) { for (var t = e.path, i = e.op, r = d, n = 0; n < t.length - 1; n++) "object" != typeof (r = Ru(r, t[n])) && Au(15, t.join("/")); var s = Pu(r) , a = l(e.value) , o = t[t.length - 1]; switch (i) { case m: switch (s) { case 2: return r.set(o, a); case 3: Au(16); default: return r[o] = a } case g: switch (s) { case 1: return r.splice(o, 0, a); case 2: return r.set(o, a); case 3: return r.add(a); default: return r[o] = a } case y: switch (s) { case 1: return r.splice(o, 1); case 2: return r.delete(o); case 3: return r.delete(e.value); default: return delete r[o] } default: Au(17, i) } }), d }, generatePatches_: function(c, e, t, i) { switch (c.type_) { case 0: case 4: case 2: return l = e, u = t, h = i, p = c.base_, f = c.copy_, void Mu(c.assigned_, function(e, t) { var i = Ru(p, e) , r = Ru(f, e) , t = t ? xu(p, e) ? m : g : y; i === r && t == m || (e = l.concat(e), u.push(t == y ? { op: t, path: e } : { op: t, path: e, value: r }), h.push(t == g ? { op: y, path: e } : t == y ? { op: g, path: e, value: v(i) } : { op: m, path: e, value: v(i) })) }); case 5: case 1: return function(e, t, i) { var r, n = c.base_, s = c.assigned_, a = c.copy_; a.length < n.length && (n = (r = [a, n])[0], a = r[1], t = (r = [i, t])[0], i = r[1]); for (var o, d = 0; d < n.length; d++) s[d] && a[d] !== n[d] && (o = e.concat([d]), t.push({ op: m, path: o, value: v(a[d]) }), i.push({ op: m, path: o, value: v(n[d]) })); for (var l = n.length; l < a.length; l++) { var u = e.concat([l]); t.push({ op: g, path: u, value: v(a[l]) }) } n.length < a.length && i.push({ op: m, path: e.concat(["length"]), value: n.length }) }(e, t, i); case 3: return r = e, n = t, s = i, a = c.base_, o = c.copy_, d = 0, a.forEach(function(e) { var t; o.has(e) || (t = r.concat([d]), n.push({ op: y, path: t, value: e }), s.unshift({ op: g, path: t, value: e })), d++ }), d = 0, void o.forEach(function(e) { var t; a.has(e) || (t = r.concat([d]), n.push({ op: g, path: t, value: e }), s.unshift({ op: y, path: t, value: e })), d++ }) } var r, n, s, a, o, d, l, u, h, p, f }, generateReplacementPatches_: function(e, t, i, r) { i.push({ op: m, path: [], value: t }), r.push({ op: m, path: [], value: e.base_ }) } }) } function mc() { var r = function(e, t) { return (r = Object.setPrototypeOf || { __proto__: [] }instanceof Array && function(e, t) { e.__proto__ = t } || function(e, t) { for (var i in t) t.hasOwnProperty(i) && (e[i] = t[i]) } )(e, t) }; function i(e, t) { function i() { this.constructor = e } r(e, t), e.prototype = (i.prototype = t.prototype, new i) } var n = function() { function e(e, t) { return this[Eu] = { type_: 2, parent_: t, scope_: t ? t.scope_ : Gu(), modified_: !1, finalized_: !1, copy_: void 0, assigned_: void 0, base_: e, draft_: this, isManual_: !1, revoked_: !1 }, this } i(e, Map); var t = e.prototype; return Object.defineProperty(t, "size", { get: function() { return Bu(this[Eu]).size } }), t.has = function(e) { return Bu(this[Eu]).has(e) } , t.set = function(e, t) { var i = this[Eu]; return d(i), Bu(i).has(e) && Bu(i).get(e) === t || (s(i), oc(i), i.assigned_.set(e, !0), i.copy_.set(e, t), i.assigned_.set(e, !0)), this } , t.delete = function(e) { if (!this.has(e)) return !1; var t = this[Eu]; return d(t), s(t), oc(t), t.assigned_.set(e, !1), t.copy_.delete(e), !0 } , t.clear = function() { var t = this[Eu]; d(t), Bu(t).size && (s(t), oc(t), t.assigned_ = new Map, Mu(t.base_, function(e) { t.assigned_.set(e, !1) }), t.copy_.clear()) } , t.forEach = function(r, n) { var s = this; Bu(this[Eu]).forEach(function(e, t, i) { r.call(n, s.get(t), t, s) }) } , t.get = function(e) { var t = this[Eu]; d(t); var i = Bu(t).get(e); if (t.finalized_ || !ku(i)) return i; if (i !== t.base_.get(e)) return i; i = uc(t.scope_.immer_, i, t); return s(t), t.copy_.set(e, i), i } , t.keys = function() { return Bu(this[Eu]).keys() } , t.values = function() { var e, t = this, i = this.keys(); return (e = {})[Iu] = function() { return t.values() } , e.next = function() { var e = i.next(); return e.done ? e : { done: !1, value: t.get(e.value) } } , e } , t.entries = function() { var e, i = this, r = this.keys(); return (e = {})[Iu] = function() { return i.entries() } , e.next = function() { var e = r.next(); if (e.done) return e; var t = i.get(e.value); return { done: !1, value: [e.value, t] } } , e } , t[Iu] = function() { return this.entries() } , e }(); function s(e) { e.copy_ || (e.assigned_ = new Map, e.copy_ = new Map(e.base_)) } var a = function() { function e(e, t) { return this[Eu] = { type_: 3, parent_: t, scope_: t ? t.scope_ : Gu(), modified_: !1, finalized_: !1, copy_: void 0, base_: e, draft_: this, drafts_: new Map, revoked_: !1, isManual_: !1 }, this } i(e, Set); var t = e.prototype; return Object.defineProperty(t, "size", { get: function() { return Bu(this[Eu]).size } }), t.has = function(e) { var t = this[Eu]; return d(t), t.copy_ ? !!t.copy_.has(e) || !(!t.drafts_.has(e) || !t.copy_.has(t.drafts_.get(e))) : t.base_.has(e) } , t.add = function(e) { var t = this[Eu]; return d(t), this.has(e) || (o(t), oc(t), t.copy_.add(e)), this } , t.delete = function(e) { if (!this.has(e)) return !1; var t = this[Eu]; return d(t), o(t), oc(t), t.copy_.delete(e) || !!t.drafts_.has(e) && t.copy_.delete(t.drafts_.get(e)) } , t.clear = function() { var e = this[Eu]; d(e), Bu(e).size && (o(e), oc(e), e.copy_.clear()) } , t.values = function() { var e = this[Eu]; return d(e), o(e), e.copy_.values() } , t.entries = function() { var e = this[Eu]; return d(e), o(e), e.copy_.entries() } , t.keys = function() { return this.values() } , t[Iu] = function() { return this.values() } , t.forEach = function(e, t) { for (var i = this.values(), r = i.next(); !r.done; ) e.call(t, r.value, r.value, this), r = i.next() } , e }(); function o(i) { i.copy_ || (i.copy_ = new Set, i.base_.forEach(function(e) { var t; ku(e) ? (t = uc(i.scope_.immer_, e, i), i.drafts_.set(e, t), i.copy_.add(t)) : i.copy_.add(e) })) } function d(e) { e.revoked_ && Au(3, JSON.stringify(Bu(e))) } Qu("MapSet", { proxyMap_: function(e, t) { return new n(e,t) }, proxySet_: function(e, t) { return new a(e,t) } }) } var yi = new Br , A = yi.produce , gc = yi.produceWithPatches.bind(yi) , gr = yi.setAutoFreeze.bind(yi) , yc = yi.setUseProxies.bind(yi) , gu = yi.applyPatches.bind(yi) , w = yi.createDraft.bind(yi) , yi = yi.finishDraft.bind(yi); mu.Immer = Br, mu.applyPatches = gu, mu.castDraft = function(e) { return e } , mu.castImmutable = function(e) { return e } , mu.createDraft = w, mu.current = cc, mu.default = A, mu.enableAllPlugins = function() { pc(), mc(), fc() } , mu.enableES5 = pc; w = mu.enableMapSet = mc; mu.enablePatches = fc, mu.finishDraft = yi, mu.immerable = Tu, mu.isDraft = Ou, mu.isDraftable = ku, mu.nothing = bu, mu.original = function(e) { return Ou(e) || Au(23, e), e[Eu].base_ } ; var vc = mu.produce = A; mu.produceWithPatches = gc, mu.setAutoFreeze = gr, mu.setUseProxies = yc; class Sc { constructor(e) { this.store = e } createUnresolvedUriLoading(e, t, i) { Co("loader.create.unresolvedUriLoading"), this.store.add({ uri: e, responseType: t, userAgent: i }) } removeUnresolvedUriLoading(e) { Co("loader.remove.unresolvedUriLoading"), this.store.remove(e) } } const bc = new class extends pd { constructor() { super({}, { name: "loader", producerFn: vc, idKey: "uri" }) } } ; let Tc = null; class Ec extends t { trigger(e, t) { try { this.emit(e, e, t), "hlsFragLoadProgress" !== e.toString() && ("hlsInternalError" !== e && "hlsError" !== e || !t.length || JSON.stringify(t[0], ["fatal", "details", "reason"]), e.toString()) } catch (t) { qe().warn(`error in event listener for ${e}: ${t.message}`) } } } class Ic { constructor(e, t) { this.target = e, this._this = t } eventWithOptions(e, t, i, r=this._this) { let n = en(this.target, e, t); return this.target instanceof Ec && (n = n.pipe(ur(([,e])=>e))), i && (r && (i = i.bind(r)), n = n.pipe(Ja(i))), n } event(e, t, i=this._this) { return this.eventWithOptions(e, void 0, t, i) } listen(e, t, i, r=this._this) { return this.event(e, i, r).pipe($a(t)).subscribe() } } function wc(e, t) { return new Ic(e,t) } function Ac(e, t, i) { var r; return { currentTarget: null !== (r = null == i ? void 0 : i.currentTarget) && void 0 !== r ? r : e, target: null !== (i = null == i ? void 0 : i.target) && void 0 !== i ? i : e, type: t } } function Oc(y, v) { return new Ut(e=>{ const {maxTimeToFirstByteMs: t, maxLoadTimeMs: i} = v , r = new XMLHttpRequest , n = { trequest: performance.now(), tfirst: NaN, tload: NaN, loaded: 0, total: NaN, complete: !1 } , s = wc(r) , a = s.event("progress").pipe(wa(), so(300, Zi, { leading: !0, trailing: !0 }), ur(e=>(isNaN(n.tfirst) && (n.tfirst = performance.now()), n.loaded = e.loaded, e.lengthComputable && (n.total = e.total), e.target)), an(e=>3 <= e.readyState)) , o = s.event("readystatechange").pipe(wa(), Hi(Zi), ur(e=>e.target), an(e=>2 <= e.readyState), Ja(e=>{ isNaN(n.tfirst) && 3 <= e.readyState && (n.tfirst = performance.now()) } )); let d = Ti; isFinite(t) && 0 < t && (d = nn(a, o).pipe(Cs(1), vo(0 < y.extendMaxTTFB ? y.extendMaxTTFB : t), Ra(()=>Ti))); let l = Ti; isFinite(i) && 0 < i && (l = o.pipe(an(e=>4 <= e.readyState), Cs(1), vo(i), Ra(()=>Ti))); let u = Ti; y.onProgress && (u = nn(Bi(r), a).pipe(ur(e=>{ const {getData: t, cb: i} = y.onProgress; return i(y.url, e.status, n, t ? e.response : void 0) } ), Qa(e=>!e, !0)).pipe(Ua(Ti))); const c = nn(a.pipe(Ra(()=>Ti)), o, d, l, u).pipe(Ra(e=>{ if (4 <= e.readyState) { if (n.complete = !0, 200 <= e.status && e.status < 300) { if (n.tload = performance.now(), n.contentType = e.getResponseHeader("Content-Type"), v.reportCDNServer && (n.cdnServer = e.getResponseHeader("CDN-Server")), n.contentLength = v.forceContentLenCheckIfNoHeader ? function(e) { let t; const i = e.getResponseHeader("Content-Encoding") , r = e.getResponseHeader("Transfer-Encoding") , n = !i || i && "identity" === i.toLowerCase() , s = !r || r && "identity" === r.toLowerCase(); return n && s && (t = function(e) { e = /([0-9]+)\-([0-9]+)\/([0-9]+)/.exec(e); return e ? parseInt(e[2]) - parseInt(e[1]) + 1 : void 0 }(e.getResponseHeader("Content-Range")), ne(t) || (t = parseInt(e.getResponseHeader("Content-Length")))), t }(e) : null, i = e, (r = y).collectServerInstanceInfo && (r.serverInstanceInfo = {}, r.collectServerInstanceInfo.forEach(e=>{ var t = i.getResponseHeader(e); t && (r.serverInstanceInfo[e] = t) } )), "arraybuffer" === y.responseType ? n.loaded = e.response.byteLength : n.loaded = e.responseText.length, n.total = n.loaded, y.checkContentLength && (0 === n.total || ne(n.contentLength) && n.total != n.contentLength)) throw new tu("Network error",e.status); return Bi([e, n]) } throw new tu("Network error",e.status) } var i, r; return Ti } ), Cs(1), Un(e=>{ if (e instanceof or) throw new ou(e.message,0,n); if (!(e instanceof tu)) throw new tu(e.message,0); throw e } )).subscribe(e) , {url: h, method: p, byteRangeOffset: f, responseType: m, body: g} = y; y.mimeType && r.overrideMimeType(y.mimeType); try { const v = y.xhrSetup; if (v) try { v(r, h) } catch (e) { r.open(p, y.url, !0), v(r, y.url) } r.readyState || r.open(p, y.url, !0) } catch (e) { throw new tu(e.message,r.status) } if (r.responseType = m, f && ne(f.start) && ne(f.end) && 0 <= f.start && f.end > f.start) { const {start: y, end: v} = f; r.setRequestHeader("Range", `bytes=${y}-${v - 1}`) } if (y.headers) for (const [v,e] of Object.entries(y.headers)) r.setRequestHeader(v, e); return "POST" === p && g ? r.send(g) : r.send(), ()=>{ r.abort(), c.unsubscribe() } } ) } const kc = { name: "CustomUrlLoader" }; class Cc { constructor(e) { this.loaderService = e, this.requestMap = {}, this.logger = qe() } load(a, o) { return new Ut(e=>{ const t = a.url , i = o["maxTimeToFirstByteMs"] , r = { trequest: performance.now(), tfirst: NaN, tload: NaN, loaded: 0, total: NaN, complete: !1 } , n = (this.requestMap[t] = new Ji).pipe(vo(0 < a.extendMaxTTFB ? a.extendMaxTTFB : i), Ra(e=>(r.tfirst = performance.now(), this.handleExternalResponse(e, a, o, r))), Un(e=>{ if (e instanceof or) throw new ou(e.message,0,r); throw e } ), $s(()=>{ this.requestMap[t] = void 0, this.loaderService.removeUnresolvedUriLoading(t) } )); a.onProgress && a.onProgress.cb(t, 0, r, void 0); const s = n.subscribe(e); return this.loaderService.createUnresolvedUriLoading(t, a.responseType, navigator.userAgent), ()=>{ s.unsubscribe(), this.requestMap[t] = void 0 } } ) } setCustomUrlResponse(e, t) { const i = this.requestMap[e]; i && (i.next(t), i.complete(), this.requestMap[e] = void 0) } handleExternalResponse(e, t, i, r) { r.tload = performance.now(); var n = e.response.status || 200; return 200 <= n && n < 300 ? ("arraybuffer" === t.responseType && e.response.data instanceof ArrayBuffer ? r.loaded = e.response.data.byteLength : r.loaded = e.response.data.length, r.total = r.loaded, r.complete = !0, Bi({ status: n, data: e, stats: r })) : 300 === n || 302 === n || 303 === n || 305 === n ? this.redirectRequest(e.response.uri, t, i, r) : (this.logger.warn(kc, `unable to load custom url > uri=${oe(e.response.uri)}, status=${n}`), Ui(new tu("Unable to load custom url",n))) } redirectRequest(e, t, i, n) { var {maxLoadTimeMs: r, maxTimeToFirstByteMs: s} = i , r = r - (performance.now() - n.trequest) , s = 0 < t.extendMaxTTFB ? t.extendMaxTTFB : s - (performance.now() - n.trequest) , i = Object.assign(Object.assign({}, i), { maxLoadTimeMs: r, maxTimeToFirstByteMs: s }) , e = Object.assign(Object.assign({}, t), { url: e }); return r <= 0 || s <= 0 ? Ui(new or) : Oc(e, i).pipe(ur(([e,t])=>{ var {responseURL: i, status: r} = e , i = i || "" , i = { uri: i, response: { status: r, uri: i, data: e.response } }; return n.loaded = n.total = t.loaded, n.tload = performance.now(), n.complete = !0, { status: e.status, data: i, stats: n } } )) } } let Dc; function Mc(e) { return Dc || (e = e || (Tc = Tc || new Sc(bc), Tc), Dc = new Cc(e)), Dc } function Pc(e, t) { const i = Object.assign(Object.assign({}, e), { method: "GET", responseType: "arraybuffer" }) , r = Mc(); return ml(i.url) ? r.load(i, t).pipe(ur(e=>[e.data.response.data, e.stats, i.serverInstanceInfo])) : Oc(i, t).pipe(ur(([e,t])=>[e.response, t, i.serverInstanceInfo])) } function xc(e, t) { return !e.url || ml(e.url) ? t.customURL : t.default } function Rc(e, t) { return e instanceof iu ? e.isTimeout ? t.timeoutRetry : t.errorRetry : null } function Lc(e) { var t = e.type , i = e.liveOrEvent; let r = "VOD"; "EVENT" === t && i ? r = "EVENT" : t && 0 !== t.length && "LIVE" !== t || !i || (r = "LIVE"), e.type !== r && (e.type = r) } const _c = { id: "playready", systemStringPrefix: "com.microsoft.playready", keyFormatString: "com.microsoft.playready", securityLevels: { SL2000: 0, SL3000: 1 } } , Nc = { id: "widevine", systemStringPrefix: "com.widevine.alpha", keyFormatString: "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed", securityLevels: { WIDEVINE_SOFTWARE: 0, WIDEVINE_HARDWARE: 1 } }; function Fc(e) { return e.replace(/\+/g, "-").replace(/\//g, "_").replace(/\=+$/, "") } class Bc { static strToBase64Encode(e) { return btoa(e) } static base64DecodeToStr(e) { return atob(e) } static base64Encode(e) { return btoa(String.fromCharCode(...e)) } static base64UrlEncode(e) { return Fc(Bc.base64Encode(e)) } static base64Decode(e) { return Uint8Array.from(atob(e), e=>e.charCodeAt(0)) } } class Uc { static strToBase64Encode(e) { return d.Buffer.from(e).toString("base64") } static base64DecodeToStr(e) { return d.Buffer.from(e, "base64").toString() } static base64Encode(e) { return d.Buffer.from(e).toString("base64") } static base64UrlEncode(e) { return Fc(Uc.base64Encode(e)) } static base64Decode(e) { e = d.Buffer.from(e, "base64"); return new Uint8Array(e.buffer,e.byteOffset,e.byteLength) } } var $c, Vc = void 0 !== d.Buffer ? Uc : Bc; const Kc = { avc1: "video/mp4", avc3: "video/mp4", dvav: "video/mp4", dva1: "video/mp4", hev1: "video/mp4", hvc1: "video/mp4", dvh1: "video/mp4", dvhe: "video/mp4" } , Hc = { mp4a: "audio/mp4", "ac-3": "audio/mp4", "ec-3": "audio/mp4" }; function jc(e) { const t = O.strToUtf8array(e).subarray(0, 16) , i = new Uint8Array(16); return i.set(t, 16 - t.length), i } const qc = { getCapabilities: function(e, t) { const i = { videoCapabilities: [], audioCapabilities: [] }; return e && e.forEach(e=>{ var t = e.split(".")[0].trim(); t in Kc && i.videoCapabilities.push({ contentType: Kc[t] + ";codecs=" + e, robustness: "" }) } ), t && t.forEach(e=>{ var t = e.split(".")[0].trim(); t in Hc && i.audioCapabilities.push({ contentType: Hc[t] + ";codecs=" + e, robustness: "" }) } ), i }, changeEndianness: function(e) { function t(e, t, i) { var r = e[t]; e[t] = e[i], e[i] = r } t(e, 0, 3), t(e, 1, 2), t(e, 4, 5), t(e, 6, 7) }, getKeyIdBytes: jc, convertDataUriToArrayBytes: function(e) { const t = e.split(":"); let i = null; if ("data" === t[0] && 2 === t.length) { const e = t[1].split(";") , r = e[e.length - 1].split(","); if (2 === r.length) { const t = "base64" === r[0] , n = r[1]; i = t ? (e.splice(-1, 1), Vc.base64Decode(n)) : jc(n) } } return i }, makeKeyIdsInitData: function(e) { e = { kids: e.map(Vc.base64UrlEncode) }; return O.strToUtf8array(JSON.stringify(e)) }, parsePSSHList: function(e) { const i = new DataView(e); let r = 0; const n = {}; for (; r < i.buffer.byteLength; ) { const e = r , t = i.getUint32(r); r += 4; var s = e + t; if (1886614376 === i.getUint32(r)) { switch (r += 4, i.getUint8(r)) { case 0: case 1: r += 1; break; default: r = s } r += 3; let t = ""; for (let e = 0; e < 16; ++e, ++r) switch (t += i.getUint8(r).toString(16), e) { case 4: case 6: case 8: case 10: t += "-" } r += 4, n[t] = i.buffer.slice(e, s) } else r = s } return n } }; let Qc = {}; class Gc { constructor(e, t, i, r, n) { if (this.method = e, this.uri = t, this.iv = i, this.format = r, this.formatversions = n, this.isEncrypted = this.method && "NONE" !== this.method, this.formatversions && 0 !== this.formatversions.length || (this.formatversions = [1]), this.key = void 0, this.keyId = void 0, this.isEncrypted) { const a = qc.convertDataUriToArrayBytes(this.uri); if (a) switch (r) { case _c.keyFormatString: { this.pssh = a; const e = new Uint16Array(a.buffer,a.byteOffset,a.byteLength / 2) , t = String.fromCharCode.apply(null, Array.from(e)) , i = t.substring(t.indexOf("<"), t.length) , r = (new DOMParser).parseFromString(i, "text/xml").getElementsByTagName("KID")[0]; if (r) { var s = null; if (s = r.childNodes[0] ? r.childNodes[0].nodeValue : r.getAttribute("VALUE")) { const t = Vc.base64Decode(s).subarray(0, 16); qc.changeEndianness(t), this.keyId = t } } break } case Nc.keyFormatString: this.pssh = a, 22 <= a.length && (this.keyId = a.subarray(a.length - 22, a.length - 6)); break; default: { let e = a.subarray(0, 16); if (16 !== e.length) { const t = new Uint8Array(16); t.set(e, 16 - e.length), e = t } this.keyId = e; break } } if (!this.keyId || 16 !== this.keyId.byteLength) { let e = Qc[this.uri]; if (!e) { const t = Object.keys(Qc).length % Number.MAX_SAFE_INTEGER; e = new Uint8Array(16), new DataView(e.buffer,12,4).setUint32(0, t), Qc[this.uri] = e } this.keyId = e } } } get keyTagInfo() { var {method: e, isEncrypted: t, uri: i, iv: r, keyId: n, key: s, format: a, formatversions: o} = this; return { method: e, isEncrypted: t, uri: i, iv: r, keyId: n, key: s, format: a, formatversions: o } } static clearKeyUriToKeyIdMap() { Qc = {} } } (gc = $c = $c || {}).NONE = "NONE", gc.GET_REQUEST_INFO = "GET_REQUEST_INFO", gc.GET_CHALLENGE = "GET_CHALLENGE", gc.GET_KEY_RESPONSE = "GET_KEY_RESPONSE", gc.PROCESS_LICENSE = "PROCESS_LICENSE"; class Wc { constructor(e, t, i, r) { this.session = e, this.onkeystatuseschange = t, this.onkeymessage = i, this.logger = r, this.isClosing$ = new gi(!1), this.closed$ = new gi(!1); const n = wc(this.session); n.listen("keystatuseschange", this.isClosing$.pipe(an(e=>!0 === e)), this.onkeystatuseschange), n.listen("message", this.closed$.pipe(an(e=>!0 === e)), this.onkeymessage) } get isClosing() { return this.isClosing$.value } get isClosed() { return this.closed$.value } destroy() { this.isClosing$.next(!0); const e = this.session; return Lr(e.remove().catch(e=>{} ).then(()=>e.close()).catch(e=>{} )).pipe(Ja(()=>{ this.isClosing$.next(!1), this.closed$.next(!0) } ), $s(()=>{ this.isClosing$.next(!1), this.closed$.next(!0) } )) } } class zc { constructor(e, t=null) { this.decryptdata = e, this._requestState$ = new gi($c.NONE), this.destroy$ = new zt, this.currentObservable = null, this.session = null, this.oldSessions = [], this.session = t } get requestState() { return this._requestState$.value } get onKeyRequestState$() { return this._requestState$ } destroy() { this.destroy$.next() } abort() { var e; this.requestState !== $c.NONE && (e = new uu("Aborted",this.decryptdata.uri,0,$.KeySystemAbort,!0,Xl.Abort), this.error(e)) } setKeyRequestState(e) { if (this.currentObservable) { const t = new uu(`Unexpected state transition ${this.requestState}->${e}`,this.decryptdata.uri,0,$.KeySystemUnexpectedStateTransition,!0,Xl.InvalidState); this.error(t) } this._requestState$.next(e); const t = new Ji; return e === $c.NONE ? (t.complete(), this.currentObservable = null) : this.currentObservable = t, t } resolveState(e, t) { if (this.currentObservable) if (e === this.requestState) if (t instanceof Error) this.error(t); else { const e = this.currentObservable; this.currentObservable = null, e.next(t), e.complete() } else { const t = new uu(`Unexpected state ${this.requestState} != ${e}`,this.decryptdata.uri,0,$.KeySystemUnexpectedState,!0,Xl.InvalidState); this.error(t) } } error(e) { if (this.currentObservable) { const t = this.currentObservable; this.currentObservable = null, t.error(e) } this.setKeyRequestState($c.NONE) } } function Xc(e) { return `uri=${oe(e.uri)} keyId=${je(e.keyId)}` } class Yc { constructor(e, t, i, r, n, s, a) { this.mediaKeys = e, this.systemString = t, this.config = i, this.eventEmitter = r, this.useSingleKeySession = n, this.sessionHandler = s, this.logger = a, this.destroy$ = new zt, this.setCert = !1, this.certificate$ = new gi(null), this._keyStatusChange$ = new zt, this.shouldDestroyMediaKeys = !1, this.itemId = "", this.sessions = [], this.keyIdToKeyInfo = {}, this.keyUriToKeyInfo = {}, this.sessionIdToKeyUri = {}, this.onkeystatuseschange = this.handleKeyStatusesChange.bind(this), this.onkeymessage = this.handleKeyMessage.bind(this) } get keyStatusChange$() { return this._keyStatusChange$ } destroy() { this.isDestroying = !0, this.destroy$.next(); for (const e of Object.values(this.keyIdToKeyInfo)) this._abortKeyRequest(e); const e = this.sessions.map(e=>e.destroy()) , t = tn(()=>0 === e.length, Ul, Jr(e)).pipe(Js(void 0), $s(()=>{ this.mediaKeys = void 0, this.keyIdToKeyInfo = {}, this.keyUriToKeyInfo = {}, this.sessionIdToKeyUri = {} } )); return Gc.clearKeyUriToKeyIdMap(), t } setServerCertificate(e=null) { return this.needsCert ? (e && this.certificate$.next(e), $l(this.certificate$, e=>null != e).pipe(vo(1e4)).pipe(Ra(e=>this.setCert ? Bi(!0) : !this.setCertSubject || this.setCertSubject.isStopped ? (this.setCertSubject = new Ji, Lr(this.mediaKeys.setServerCertificate(e)).pipe(Ja(e=>{ e = void 0 === e || e; this.setCert = e, this.setCertSubject.next(e), this.setCertSubject.complete() } ), Un(e=>(this.setCert = !1, this.setCertSubject.error(e), Ul)), Ra(()=>this.setCertSubject))) : this.setCertSubject), Un(e=>{ throw e } ))) : Bi(!0) } ensureKeyContext(e) { var t = e.uri; this.keyUriToKeyInfo[t] || (this.keyUriToKeyInfo[t] = new zc(e)); const i = this.keyUriToKeyInfo[t]; if (i.session) return i; if (this.useSingleKeySession && 0 < this.sessions.length) return i.session = this.sessions[0].session, i; t = this.mediaKeys.createSession(); return t && this.sessions.push(new Wc(t,this.onkeystatuseschange,this.onkeymessage,this.logger)), i.session = t, i } startKeyRequest(t) { const i = t.uri , r = this.ensureKeyContext(t); if (!r.session) return Ui(new cu("Could not create key session",t.uri,0,$.KeySystemFailedToCreateSession,this.systemString)); var e = O.utf8arrayToStr(t.keyId); return this.keyIdToKeyInfo[e] = r, Jr([this.getKeyRequestInfo(r), this.setServerCertificate()]).pipe(ur(e=>e[0]), Ra(e=>{ var t; return null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeSubmitted({ keyuri: i, keyFormat: this.systemString }), this.generateLicenseChallenge(r, e).pipe(Un(e=>{ var t; throw null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeError({ keyuri: i }), e } )) } ), Ra(e=>{ var t; return null === (t = this.sessionHandler) || void 0 === t || t.licenseChallengeCreated({ keyuri: i, cdmVersion: this.cdmVersion }), this.getKeyRequestResponse(r, e) } ), Ra(e=>{ var t; return null === (t = this.sessionHandler) || void 0 === t || t.licenseResponseSubmitted({ keyuri: i }), this.handleParsedKeyResponse(r, e).pipe(Un(e=>{ var t; throw null === (t = this.sessionHandler) || void 0 === t || t.licenseResponseError({ keyuri: i }), e } )) } ), ur(()=>{ var e; return null === (e = this.sessionHandler) || void 0 === e || e.licenseResponseProcessed({ keyuri: i }), r.setKeyRequestState($c.NONE), this.removeSessions(r.decryptdata, !1).subscribe(), t } ), Un(e=>{ throw this.handleKeyExchangeError(r, e), e } ), $s(()=>{ this._abortKeyRequest(r) } )) } _abortKeyRequest(e) { var t, i; e && (i = e.decryptdata.uri, O.utf8arrayToStr(e.decryptdata.keyId), e.requestState !== $c.NONE && (null === (t = this.sessionHandler) || void 0 === t || t.keyAborted({ keyuri: i })), e.abort()) } handleKeyExchangeError(e, t) { e.error(t), O.utf8arrayToStr(e.decryptdata.keyId) } updateItemId(e) { this.itemId = e } removeKey(e) { return this.removeKeyInternal(e) } removeKeyInternal(e) { const t = this.keyUriToKeyInfo[e.uri]; if (t && t.session) { var i = t.session; t.abort(), t.destroy(); var r = O.utf8arrayToStr(e.keyId); return this.keyIdToKeyInfo[r] = void 0, this.keyUriToKeyInfo[e.uri] = void 0, this.removeSession(i) } } removeSessions(e, t) { const i = this.keyUriToKeyInfo[e.uri]; if (i) { const r = i.oldSessions.map(e=>this.removeSession(e)); return i.oldSessions = [], tn(()=>0 === r.length, Ul, Jr(r)).pipe(Ra(()=>t ? this.removeKeyInternal(e) : Ul)) } return Ul } removeSession(t) { const e = this.sessions.findIndex(e=>e.session === t) , i = this.sessions[e]; return -1 < e && this.sessions.splice(e, 1), this.sessionIdToKeyUri[t.sessionId] = void 0, i ? i.destroy() : Ul } getKeyRequestInfo(e) { var t = e.decryptdata , i = t.uri , e = e.setKeyRequestState($c.GET_REQUEST_INFO); return this.eventEmitter.trigger(x.KEY_REQUEST_STARTED, { keyuri: i, decryptdata: t, timestamp: Date.now() }), e } setKeyRequestInfo(e, t) { const i = this.keyUriToKeyInfo[e]; i && i.resolveState($c.GET_REQUEST_INFO, t) } sanitizeRequest(e) { return e } generateLicenseChallengeInternal(t, e, i) { const r = t.decryptdata , n = t.session , s = r.uri , a = r.keyId; let o; var d = t.setKeyRequestState($c.GET_CHALLENGE); if (n.generateRequestPromise) o = Lr(n.generateRequestPromise).pipe(Ra(()=>this.generateRequestInitialized(t, "usable" === i))); else { const i = this.generateInitData(a, r, e); n.generateRequestPromise = n.generateRequest(i.initDataType, i.initData), o = Lr(n.generateRequestPromise).pipe(Ja(()=>{ this.sessionIdToKeyUri[n.sessionId] = s } ), Un(e=>{ throw new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToGenerateLicenseRequest,this.systemString) } )) } return Jr([d, o]).pipe(ur(e=>new Uint8Array(e[0]))) } generateLicenseChallenge(e, t) { const i = e.decryptdata , r = e.session , n = i.uri , s = i.keyId; let a, o; if (O.utf8arrayToStr(i.keyId), e.licenseChallenge && e.resolveState($c.GET_CHALLENGE, e.licenseChallenge), t = this.sanitizeRequest(t), e.requestInfo = t, this.sessionId = this.sessionId || t && t.sessionId || this.itemId, this.systemString === _c.systemStringPrefix) { const e = new Uint8Array(s); qc.changeEndianness(e), a = r.keyStatuses.get(e) } else a = r.keyStatuses.get(s); switch (a) { case "status-pending": case "usable": case "expired": case void 0: o = this.generateLicenseChallengeInternal(e, t, a); break; default: o = Ui(new cu(`Bad internal state state=${a}`,n,0,$.KeySystemUnexpectedState,this.systemString)) } return o } setParsedResponse(e, t) { this.keyUriToKeyInfo[e].resolveState($c.GET_KEY_RESPONSE, t) } handleKeyStatusesChange(e) { e.target.keyStatuses.forEach((e,t,i)=>{ t = new Uint8Array(t); this.systemString === _c.systemStringPrefix && qc.changeEndianness(t); t = O.utf8arrayToStr(t), t = this.keyIdToKeyInfo[t]; this.handleKeyStatusForKey(e, t) } ) } handleKeyStatusForKey(e, t) { if (t) { var i = t.decryptdata , r = i.uri; switch (e) { case "internal-error": this.logger.error(`${this.systemString} internal-error for key ${Xc(i)}`), this._signalError(t, new uu("Got internal error from key system",r,0,$.KeySystemInternalError,!1,Xl.InternalError)); break; case "usable": t.requestState === $c.PROCESS_LICENSE && t.resolveState($c.PROCESS_LICENSE, void 0); break; case "output-restricted": this.logger.warn(`${this.systemString} output-restricted for key ${Xc(i)}`), t.session && this.removeSession(t.session).pipe($a(this.destroy$)).subscribe(), this._signalError(t, new uu("output-restricted",r,0,$.KeySystemOutputRestricted,!1,Xl.OutputRestricted)) } } } _scheduleRenewal(e, t) { vn(t).pipe(Ja(()=>this._signalRenewal(e)), $a(hn(e.destroy$, this.destroy$, $l(e.onKeyRequestState$, e=>e === $c.GET_REQUEST_INFO)))).subscribe() } _signalRenewal(e) { this._keyStatusChange$.next({ decryptdata: e.decryptdata, status: "needs-renewal" }) } _signalError(e, t) { this._keyStatusChange$.next({ decryptdata: e.decryptdata, status: "error", error: t }), e.error(t) } } const Jc = "org.w3.clearkey" , Zc = { id: "clearkey", systemStringPrefix: Jc, keyFormatString: Jc, securityLevels: { NONE: 0 } } , eh = ["clearkey", "fairplaystreaming", "playready", "widevine"] , th = { initDataTypes: ["keyids", "cenc"] }; var ih, gr = class extends Yc { constructor(e, t, i, r, n, s) { super(e, t, i, r, !1, n, s) } static get requestAccessConfig() { return th } get needsCert() { return !1 } getKeyRequestResponse(e, t) { return Pc({ url: e.decryptdata.uri, xhrSetup: this.config.xhrSetup }, { maxLoadTimeMs: 0, maxTimeToFirstByteMs: 0, autoRetry: !1, timeoutRetry: null, errorRetry: null }).pipe(ur(([e])=>{ e = new Uint8Array(e); return { response: this.parseResponse(t, e) } } )) } parseResponse(e, t) { t = { kty: "oct", kid: Vc.base64UrlEncode(e), k: Vc.base64UrlEncode(t) }; return O.strToUtf8array(JSON.stringify({ keys: [t] })) } handleParsedKeyResponse(i, e) { e = e.response; return Jr([i.setKeyRequestState($c.PROCESS_LICENSE), Lr(i.session.update(e)).pipe(Ja(()=>{ var e = i.decryptdata.keyId , e = i.session.keyStatuses.get(e); this.handleKeyStatusForKey(e, i) } ), Un(e=>{ var t = { code: e.code, text: "Failed to update with key response" }; throw new cu(e.message,i.decryptdata.uri,e.code,t,this.systemString) } ))]).pipe(Js(void 0)) } generateInitData(e) { return { initData: qc.makeKeyIdsInitData([e]), initDataType: "keyids" } } generateRequestInitialized() { return Ul } sanitizeRequest(e) { return e } handleKeyMessage(e) { if (!this.isDestroying && "license-request" === e.messageType) { e = new Uint8Array(e.message), e = JSON.parse(O.utf8arrayToStr(e).trim()); if (1 === e.kids.length) { const t = Vc.base64Decode(e.kids[0]) , i = O.utf8arrayToStr(t) , r = this.keyIdToKeyInfo[i]; r && r.resolveState($c.GET_CHALLENGE, t) } } } } ; const rh = { initDataTypes: ["cenc"] } , nh = new Uint8Array([148, 206, 134, 251, 7, 255, 79, 67, 173, 184, 147, 210, 250, 150, 140, 162]); (mu = ih = ih || {})[mu.CENC = 1667591779] = "CENC", mu[mu.CBCS = 1667392371] = "CBCS"; class sh extends Yc { constructor(e, t, i, r, n, s, a) { super(e, t, i, r, n, s, a), this._hasSetRenewal = !1 } static get systemId() { return nh } static get requestAccessConfig() { return rh } get needsCert() { return !0 } sanitizeRequest(e) { return { assetId: e && e.assetId ? new Uint8Array(e.assetId) : void 0, ssc: e && e.ssc ? new Uint8Array(e.ssc) : void 0, sessionId: e && e.sessionId ? e.sessionId : void 0 } } _scheduleRenewal(e, t) { this.useSingleKeySession ? this._hasSetRenewal || (this._hasSetRenewal = !0, vn(t).pipe(Ja(()=>{ var e = Object.values(this.keyUriToKeyInfo)[0]; this._signalRenewal(e) } ), $s(()=>{ this._hasSetRenewal = !1 } ), $a(this.destroy$)).subscribe()) : super._scheduleRenewal(e, t) } handleParsedKeyResponse(t, e) { var i = t.decryptdata.uri , r = e.statusCode , n = e.ckc && 0 !== e.ckc.byteLength ? e.ckc : e.license && 0 !== e.license.byteLength ? e.license : void 0; if (0 === r && !n) return Ui(new uu("License request resulted in HTTP Error",i,r,{ code: r, text: "HTTP Error" },!0,Xl.HttpError)); if (0 !== r) return Ui(new uu("License server responded with error",i,r,{ code: r, text: "Server Error" },!1,Xl.LicenseServerError)); if (!n) return Ui(new uu("License server responded with invalid license",i,r,{ code: r, text: "Invalid license" },!1,Xl.LicenseServerError)); const s = e.renewalDate , a = new Date , o = s > a ? s.getTime() - a.getTime() : 0; 0 < o && this._scheduleRenewal(t, o); const d = this.makeProcessLicenseRequestMessage(t, n, o) , l = t.session , u = Lr(l.update(d)).pipe(Ja(()=>{ var e = t.decryptdata.keyId , e = l.keyStatuses.get(e); this.handleKeyStatusForKey(e, t) } ), Un(e=>{ throw new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToUpdateSession,this.systemString) } )); return Jr([t.setKeyRequestState($c.PROCESS_LICENSE), u]).pipe(Js(void 0)) } makeKeyRequests(e) { const t = []; for (const i of e) { const e = i.decryptdata , r = i.requestInfo , n = e.keyId; t.push({ keyId: n, assetId: r ? r.assetId : void 0, ssc: r ? r.ssc : void 0, versionList: e.formatversions }) } return t } getSchemeAndFlags(e) { return { scheme: "ISO-23001-7" === e.method ? ih.CENC : ih.CBCS, flags: 0 } } generateInitData(e, t, i) { var {scheme: r, flags: n} = this.getSchemeAndFlags(t) , i = this.makeKeyRequests([{ decryptdata: t, requestInfo: i }]); return { initData: this.makeFpsKeySystemInitData(r, n, i), initDataType: "cenc" } } generateRequestInitialized(t, e) { Ql.tag(`[Keys] challenge create start uri=${oe(t.decryptdata.uri)} versions=${JSON.stringify(t.decryptdata.formatversions)}`); e = this.makeKeyRequestMessage(t, e); return e ? Lr(t.session.update(e)).pipe(Ja(()=>{ t.requestInfo = void 0 } ), Un(e=>{ throw Ql.tag(`[Keys] ${this.systemString} FAIL: generateRequestInitialized keyuri=${oe(t.decryptdata.uri)} message=${e.message}`), new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToGenerateLicenseRenewal,this.systemString) } )) : Ui(new uu("Unable to generate request using existing keySession",t.decryptdata.uri,0,$.KeySystemFailedToGenerateLicenseRequest,!0,Xl.InvalidState)) } getKeyRequestResponse(e, t) { var i = e.decryptdata.uri , e = e.setKeyRequestState($c.GET_KEY_RESPONSE); return this.eventEmitter.trigger(x.LICENSE_CHALLENGE_CREATED, { keyuri: i, licenseChallenge: t, keysystem: this.systemString }), e } resolveSPCPromise(e, t) { e.resolveState($c.GET_CHALLENGE, t) } } const ah = {} , oh = 1919710053; function dh(e, t, i) { if (!(i + 4 > e.byteLength)) { t = t.getUint32(i); if (!((i += 4) + t > e.byteLength)) { e = e.slice(i, i + t); return { pos: i += t, data: e } } } } function lh(t) { const i = {} , r = new DataView(t.buffer); let n = 4; const s = r.getUint32(n); n += 4; for (let e = 0; e < s && n < t.byteLength && !(n + 16 > t.byteLength); ++e) { const s = t.slice(n, n + 16); if (n += 16, n + 4 > t.byteLength) break; var a = dh(t, r, n); if (!a) break; n = a.pos, i[O.utf8arrayToStr(s)] = a.data } return i } function uh(e, t, i, r) { var n = r ? r.byteLength : 0; return t.setUint32(i, n), n && e.set(r, i + 4), i + (4 + n) } function ch(e) { let t = 4; for (const i of e) t += 28 + (i.assetId ? i.assetId.byteLength : 0) + (i.ssc ? i.ssc.byteLength : 0) + (i.versionList ? 4 * i.versionList.length : 0); return t } function hh(e, t, i, r) { t.setUint32(i, r.length), i += 4; for (const n of r) if (e.set(n.keyId, i), i = uh(e, t, i += 16, n.assetId), i = uh(e, t, i, n.ssc), t.setUint32(i, n.versionList ? n.versionList.length : 0), i += 4, n.versionList) for (const e of n.versionList) t.setUint32(i, e), i += 4; return i } class ph extends sh { constructor(e, t, i, r, n, s) { super(e, t, i, r, void 0 === i.useMultipleKeySessions || !i.useMultipleKeySessions, n, s) } makeProcessLicenseRequestMessage(e, t, i) { t = new Uint8Array(t); return function(e) { let t = 0; for (const i of e) t += 24 + i.ckc.byteLength; let i = 0; const r = new Uint8Array(8 + t) , n = new DataView(r.buffer); n.setUint32(0, 1667982195), n.setUint32(4, e.length), i += 8; for (const t of e) r.set(t.keyId, i), i += 16, n.setUint32(i, t.expirySec), i += 4, i = uh(r, n, i, t.ckc); return r }([{ keyId: e.decryptdata.keyId, expirySec: i / 1e3, ckc: t }]) } makeFpsKeySystemInitData(e, t, i) { i = function(e, t, i) { var r = ch(i); const n = new Uint8Array(8 + r) , s = new DataView(n.buffer); return s.setUint32(0, e), s.setUint32(4, 1 << 24 | 16777215 & t), hh(n, s, 8, i), n }(e, t, i); return me.pssh(ph.systemId, [], i) } makeKeyRequestMessage(e) { return function(e) { var t = ch(e); const i = new Uint8Array(4 + t) , r = new DataView(i.buffer); return r.setUint32(0, 1668442994), hh(i, r, 4, e), i }([{ keyId: e.decryptdata.keyId, assetId: e.requestInfo ? e.requestInfo.assetId : void 0, ssc: e.requestInfo ? e.requestInfo.ssc : void 0, versionList: e.decryptdata.formatversions }]) } handleKeyMessage(e) { if (e.message.byteLength < 4) this.logger.warn("Unexpected message"); else { const t = new Uint8Array(e.message) , i = new DataView(e.message) , r = i.getUint32(0); if (this.isDestroying && r !== oh) this.logger.warn(`In the middle of destroying, ignore command: ${r.toString(16)}`); else switch (r) { case 1667592820: this.logger.warn("Certificate not set!"); break; case 1919837559: { const e = lh(t); for (const t in e) if (Object.prototype.hasOwnProperty.call(e, t)) { const e = this.keyIdToKeyInfo[t]; this._signalRenewal(e) } break } case 1936745331: { const e = lh(t); for (const t in e) if (Object.prototype.hasOwnProperty.call(e, t)) { const i = this.keyIdToKeyInfo[t] , r = e[t]; this.resolveSPCPromise(i, r) } break } case oh: this._handleLicenseRelease(t); break; case 1667525993: { const e = dh(t, i, 4); e && (this.cdmVersion = O.utf8arrayToStr(e.data)); break } default: this.logger.warn(`Unrecognized command:'0x${r.toString(16)}'`) } } } _handleLicenseRelease(e) { const t = {} , i = new DataView(e.buffer); switch (i.getUint32(4)) { case 1936946288: ah, 0, t[ah.SessionId] = this.sessionId; var r; if (e.byteLength < 12) break; t[ah.APIProvider] = i.getUint32(8) === ih.CENC ? "EC396D13-FB13-4993-9D0D-71518ACF3D6F" : "F19BF03B-7470-41A4-9655-86D078307D59", 0; var n = dh(e, i, 12); if (!n) break; if (r = n.pos, t[ah.MovieID] = O.utf8arrayToStr(n.data), !(n = dh(e, i, r))) break; if (r = n.pos, t[ah.SecureStopSPC] = n.data, !(n = dh(e, i, r))) break; n.pos, t[ah.SessionLifespanSPC] = n.data } this.eventEmitter.trigger(x.LICENSE_RELEASED, { keysystem: this.systemString, itemId: this.itemId, releaseRecord: t }) } } yc = ph; const fh = { fpsd: O.strToUtf8array("fpsd"), fpsi: O.strToUtf8array("fpsi"), fpsk: O.strToUtf8array("fpsk"), fkri: O.strToUtf8array("fkri"), fkai: O.strToUtf8array("fkai"), fkcx: O.strToUtf8array("fkcx"), fkvl: O.strToUtf8array("fkvl") }; t = class extends sh { constructor(e, t, i, r, n, s) { super(e, t, i, r, !1, n, s), this.sessions = [], this.keyIdToKeyInfo = {}, this.keyUriToKeyInfo = {}, this.sessionIdToKeyUri = {} } static get needsCert() { return !0 } handleKeyExchangeError(e, t) { this.removeKey(e.decryptdata).subscribe(), super.handleKeyExchangeError(e, t) } _abortKeyRequest(e) { return !this.isDestroying && e && e.requestState !== $c.NONE && this.removeKey(e.decryptdata).subscribe(), super._abortKeyRequest(e) } makeFpsKeySystemInitData(e, t, i) { const r = [fh.fpsd, (n = e, e = t, t = new Uint8Array(4), me.set32(n, t, 0), me.box(fh.fpsi, new Uint8Array([0, e >> 16 & 255, e >> 8 & 255, 255 & e]), t))]; var n; for (const s of i) r.push(function(t, e, i, r) { const n = [fh.fpsk] , s = me.box(fh.fkri, new Uint8Array([0, 0, 0, 0]), t); if (n.push(s), e && e.byteLength && n.push(me.box(fh.fkai, e)), i && i.byteLength && n.push(me.box(fh.fkcx, i)), r && r.length) { const t = new Uint8Array(4 * r.length); let e = 0; for (const i of r) me.set32(i, t, e), e += 4; n.push(me.box(fh.fkvl, t)) } return me.box.apply(null, n) }(s.keyId, s.assetId, s.ssc, s.versionList)); i = me.box.apply(null, r); return me.pssh(sh.systemId, null, i) } makeKeyRequestMessage(e, t) { if (t) return O.strToUtf8array("renew") } makeProcessLicenseRequestMessage(e, t, i) { t = JSON.stringify([{ keyID: Vc.base64Encode(e.decryptdata.keyId), payload: Vc.base64Encode(new Uint8Array(t)) }]); return O.strToUtf8array(t) } handleKeyMessage(e) { const t = e.target , i = t.sessionId , r = e.messageType , n = this.sessionIdToKeyUri[i]; let s; if (n) s = this.keyUriToKeyInfo[n]; else for (const e of Object.values(this.keyUriToKeyInfo)) e && e.session === t && (s = e); if (s) switch (r) { case "license-request": { const t = new Uint8Array(e.message) , i = O.utf8arrayToStr(t); try { JSON.parse(i).forEach(e=>{ var t = Vc.base64DecodeToStr(e.keyID) , e = Vc.base64Decode(e.payload) , t = this.keyIdToKeyInfo[t]; this.resolveSPCPromise(t, e) } ) } catch (e) { this.logger.warn("[Keys] got unexpected license-request format"), this.resolveSPCPromise(s, t) } break } case "license-renewal": { const t = new Uint8Array(e.message); this.resolveSPCPromise(s, t); break } case "license-release": this._handleLicenseRelease(t); break; default: this.logger.warn(`[Keys] Unexpected messageType ${r}`) } else this.logger.warn("[Keys] No key associated with session") } _handleLicenseRelease(e) { e.update(O.strToUtf8array("acknowledged")).catch(e=>{ this.logger.error(`Promise error: ${e.message}`) } ) } } ; const mh = { initDataTypes: ["cenc"] } , gh = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]); class yh extends Yc { constructor(e, t, i, r, n, s) { super(e, t, i, r, !1, n, s), this.shouldDestroyMediaKeys = !0 } static get systemId() { return gh } static get requestAccessConfig() { return mh } get needsCert() { return !1 } generateInitData(e, t) { t = t.pssh; return { initData: me.pssh(yh.systemId, [], t), initDataType: "cenc" } } removeKey(e) { return super.removeSessions(e, !0) } ensureKeyContext(e) { const t = e.uri , i = this.keyUriToKeyInfo[t]; return null != i && i.session && (i.oldSessions.push(i.session), i.session = null), super.ensureKeyContext(e) } getKeyRequestResponse(e, t) { var i = e.decryptdata.uri , r = e.setKeyRequestState($c.GET_KEY_RESPONSE); return this.eventEmitter.trigger(x.LICENSE_CHALLENGE_CREATED, { keyuri: i, licenseChallenge: t, keysystem: this.systemString, keyId: e.decryptdata.keyId }), r } generateRequestInitialized(e) { var t = e.licenseChallenge; return e.requestInfo = void 0, e.resolveState($c.GET_CHALLENGE, t), Ul } handleParsedKeyResponse(t, e) { const i = t.decryptdata.uri , r = e.statusCode; if (0 !== r) return Ui(new uu("License server responded with error",i,r,{ code: r, text: "Server error" },!1,Xl.LicenseServerError)); if (!e.license || !e.license.byteLength) return Ui(new uu("License server responded with invalid license",i,r,{ code: r, text: "Invalid license" },!1,Xl.LicenseServerError)); if (e.renewalDate) { const i = e.renewalDate , r = new Date , n = i > r ? i.getTime() - r.getTime() : 0; 0 < n && this._scheduleRenewal(t, n) } return Jr([t.setKeyRequestState($c.PROCESS_LICENSE), Lr(t.session.update(e.license)).pipe(Ja(()=>{ t.resolveState($c.PROCESS_LICENSE, void 0) } ), Un(e=>{ throw this.logger.error(`${this.systemString} FAIL: Failed to update with key response message=${e.message}`), new cu(e.message,t.decryptdata.uri,0,$.KeySystemFailedToUpdateSession,this.systemString) } ))]).pipe(Js(void 0)) } handleKeyMessage(e) { if (this.isDestroying) this.logger.warn("In the middle of destroying, ignore key message"); else { const t = new DOMParser , i = new ("utf16" === this.config.playReadyMessageFormat ? Uint16Array : Uint8Array)(e.message.buffer || e.message) , r = String.fromCharCode.apply(null, Array.from(i)) , n = t.parseFromString(r, "application/xml").getElementsByTagName("PlayReadyKeyMessage")[0]; if (n && "LicenseAcquisition" === n.getAttribute("type")) { const s = t.parseFromString(r, "application/xml").getElementsByTagName("Challenge")[0]; if (s && "base64encoded" === s.getAttribute("encoding") && 0 !== s.childNodes.length) { const a = Vc.base64Decode(s.childNodes[0].nodeValue) , o = O.utf8arrayToStr(a) , d = t.parseFromString(o, "application/xml").getElementsByTagName("KID")[0]; e = null, e = d.childNodes[0] ? d.childNodes[0].nodeValue : d.getAttribute("VALUE"), e = Vc.base64Decode(e).subarray(0, 16); qc.changeEndianness(e); const l = this.keyIdToKeyInfo[O.utf8arrayToStr(e)]; l.licenseChallenge = a, l.resolveState($c.GET_CHALLENGE, a) } else this.logger.warn(`${this.systemString} wrong challenge format or empty challenge`) } else this.logger.warn(`${this.systemString} unrecognized message ignore it`) } } } gc = yh; const vh = { initDataTypes: ["cenc", "keyids"] } , Sh = new Uint8Array([237, 239, 139, 169, 121, 214, 74, 206, 163, 200, 39, 220, 213, 29, 33, 237]) , bh = { clearkey: Zc, fairplaystreaming: pu, playready: _c, widevine: Nc } , Th = { clearkey: [["org.w3.clearkey", gr]], fairplaystreaming: [["com.apple.fps.3_0", t], ["com.apple.fps", yc]], playready: [["com.microsoft.playready.recommendation", gc]], widevine: [["com.widevine.alpha", class extends Yc { constructor(e, t, i, r, n, s) { super(e, t, i, r, !1, n, s), this.shouldDestroyMediaKeys = !0 } static get systemId() { return Sh } static get requestAccessConfig() { return vh } get needsCert() { return !0 } removeKey(e) { return super.removeSessions(e, !0) } ensureKeyContext(e) { const t = e.uri , i = this.keyUriToKeyInfo[t]; return null != i && i.session && (i.oldSessions.push(i.session), i.session = null), super.ensureKeyContext(e) } getKeyRequestResponse(e, t) { var i = e.decryptdata.uri , r = e.setKeyRequestState($c.GET_KEY_RESPONSE); return this.eventEmitter.trigger(x.LICENSE_CHALLENGE_CREATED, { keyuri: i, licenseChallenge: t, keysystem: this.systemString, keyId: e.decryptdata.keyId }), r } handleParsedKeyResponse(t, e) { t.licenseChallenge = void 0; const i = t.decryptdata.uri , r = e.statusCode; if (0 !== r) return Ui(new uu("License server responded with error",i,r,{ code: r, text: "Server error" },!1,Xl.LicenseServerError)); if (!e.license || !e.license.byteLength) return Ui(new uu("License server responded with invalid license",i,r,{ code: r, text: "Invalid license" },!1,Xl.LicenseServerError)); if (e.renewalDate) { const i = e.renewalDate , r = new Date , n = i > r ? i.getTime() - r.getTime() : 0; 0 < n && this._scheduleRenewal(t, n) } return Jr([t.setKeyRequestState($c.PROCESS_LICENSE), Lr(t.session.update(e.license)).pipe(Ja(()=>{ var e = t.decryptdata.keyId , e = t.session.keyStatuses.get(e); this.handleKeyStatusForKey(e, t) } ), Un(e=>{ throw this.logger.error(`${this.systemString} FAIL: Failed to update with key response code=${e.code} message=${e.message}`), new cu(e.message,t.decryptdata.uri,e.code,{ code: e.code, text: "Failed to update with key response" },this.systemString) } ))]).pipe(Js(void 0)) } generateInitData(e, t) { return { initData: t.pssh, initDataType: "cenc" } } generateRequestInitialized(e) { var t = e.licenseChallenge; return e.requestInfo = void 0, e.resolveState($c.GET_CHALLENGE, t), Ul } handleKeyMessage(i) { if (this.isDestroying) this.logger.warn("In the middle of destroying, ignore key message"); else { const r = i.target; let e = null , t = null; if (r.sessionId in this.sessionIdToKeyUri) e = this.sessionIdToKeyUri[r.sessionId], t = this.keyUriToKeyInfo[e]; else for (const [i,n] of Object.entries(this.keyUriToKeyInfo)) if (n.session === r) { e = i, t = n; break } if (t) switch (i.messageType) { case "license-request": { const r = new Uint8Array(i.message); t.resolveState($c.GET_CHALLENGE, r); break } } else this.logger.warn(`${this.systemString} empty keyuri and keyInfo`) } } } ]] } , Eh = Zc.id; class Ih { createMediaKeys(t, e, i, r, n) { let s = Ih.idToMediaKeysInfoMap[t]; if (!s) { const a = qc.getCapabilities(e, i) , o = new Ji; Ih.requestKeySystemAccess(t, a, n, r).pipe(Ra(function(e) { return Lr((Ih.idToMediaKeysInfoMap[t].keySystemAccess = e).createMediaKeys()) }), Ja(e=>{ o.next(e), o.complete() } ), Un(e=>(o.error(new cu(`could not initialize key system: ${e.message}`,void 0,0,$.KeySystemFailedToInitialize,t)), Ti)), $a(Ih.destroy$)).subscribe(), s = Ih.idToMediaKeysInfoMap[t] = { mediaKeys$: o, keySystemAccess: null } } return s.mediaKeys$ } destroyMediaKeys() { Ih.destroy$.next(), Ih.idToMediaKeysInfoMap = {} } static getKeySystemIdForDecryptData(e) { let t; if (e) { t = Eh; var i = e.format; for (const e of eh) { var r = bh[e]; if ((null == r ? void 0 : r.keyFormatString) === i) { t = e; break } } } if (!t) throw Error("No matching key system"); return t } static requestKeySystemAccess(e, t, i, r) { if ("undefined" == typeof navigator || void 0 === navigator.requestMediaKeySystemAccess) return Ui(new cu("navigator undefined",void 0,0,$.KeySystemUndefinedNavigator,e)); const n = Th[e]; let s = Ui(new cu("no key systems to try",void 0,0,$.KeySystemNoKeySystemsToTry,e)); for (const e of n) { const n = e[0] , o = e[1] , d = (a = i) && "object" == typeof a ? i : o.requestAccessConfig , l = [Object.assign({}, d, t)]; s = s.pipe(Un(()=>Ih.requestKeySystemInternal(n, l, r))) } var a; return s } static requestKeySystemInternal(e, t, i) { return Yr(()=>Lr(navigator.requestMediaKeySystemAccess(e, t))) } make(e, t, i, r, n, s) { var a = null === (d = Ih.idToMediaKeysInfoMap[e]) || void 0 === d ? void 0 : d.keySystemAccess; if (!a) throw new cu(`No keySystemAccess for ${e}`,void 0,0,$.KeySystemNoKeySystemAccess,e); let o; var d = bh[e].systemStringPrefix; for (const t of Th[e]) if (t[0] === a.keySystem) { o = t[1]; break } if (!o) throw new cu(`No constructor associated with ${e}`,void 0,0,$.KeySystemNoConstructor,d); return new o(t,d,i,r,n,s) } static get availableKeySystems() { return Object.keys(bh) } static getKeySystemFormat(e) { e = bh[e]; return e ? e.keyFormatString : "" } static getKeySystemSecurityLevel(e) { e = bh[e]; return e ? e.securityLevels : void 0 } } Ih.idToMediaKeysInfoMap = {}, Ih.destroy$ = new zt; const wh = ["avc1.42E01E"] , Ah = ["mp4a.40.2"]; function Oh(e, t, i) { if (t) { if (t instanceof or) t = new lu("Key request timed out",e,$.KeySystemRequestTimedOut); else if (t instanceof cu) { const i = (null == t ? void 0 : t.response) || $.InternalError; t = new uu(t.message,e,0,i,!1,Xl.InternalError,!0) } } else t = new uu("Unknown error from CDM",e,0,$.KeySystemCDMUnknownError,!1,Xl.InternalError); return (t instanceof uu || t instanceof lu) && (t.mediaOptionIds = [...i]), t } class kh { constructor(e, t, i, r, n, s, a, o=new Ih) { this.ksService = e, this.mediaSink = t, this.config = i, this.platformQuery = r, this.eventEmitter = n, this.sessionHandler = s, this.keySystemFactory = o, this.reset$ = new zt, this.keyRequest$ = new zt, this.abort$ = new zt, this.keySystem$ = new gi(null), this._keyStatusChange$ = new zt, this.protectionData = {}, this.keySystemId = null, this.keyUriToRequest = {}, this.ksQuery = e.getQuery(), this.logger = a.child({ name: "eme" }), this.config.warmupCdms && this.keySystemFactory.createMediaKeys(pu.id, wh, Ah, this.logger, void 0).subscribe(), nn(r.platformInfo$.pipe(Es((e,t)=>e && t && e.requiresCDMAttachOnStart === t.requiresCDMAttachOnStart), Ra(e=>null != e && e.requiresCDMAttachOnStart ? this.attachMediaKeys().pipe(Un(e=>(this.handleKeySystemError(e), Ti))) : Ul), Ua(Ti)), this.keyRequest$.pipe(Kr(e=>e.pipe(Un(()=>Ti)))), this.keySystem$.pipe(Ra(e=>e ? e.keyStatusChange$.pipe(Ja(e=>{ var t = e.decryptdata.uri , i = this.ksQuery.getKeyInfo(t); "needs-renewal" === e.status ? this.ksService.updateKeyRequestState(t, zl.MustRequestResponse, e=>e === zl.GotKeyResponse) : (i = Oh(t, e.error, null !== (i = null == i ? void 0 : i.mediaOptionIds) && void 0 !== i ? i : []), this.ksService.setError(t, i)), this._keyStatusChange$.next(e) } )) : Ti)), this.isKeyCleanupSupported() ? this.mediaSink.mediaQuery.bufferedSegmentsTuple$.pipe(Kr(e=>{ const [t,i] = e , r = new Set; return t.forEach(e=>{ e = null === (e = null === (e = e.frag) || void 0 === e ? void 0 : e.keyTagInfo) || void 0 === e ? void 0 : e.uri; e && r.add(e) } ), i.forEach(e=>{ e = null === (e = null === (e = e.frag) || void 0 === e ? void 0 : e.keyTagInfo) || void 0 === e ? void 0 : e.uri; e && r.add(e) } ), this.handleKeyCleanup(r) } )) : Ul).pipe($a(this.reset$)).subscribe() } get keyStatusChange$() { return this._keyStatusChange$ } get keySystem() { return this.keySystem$.value } destroy() { this.reset$.next(), this.ksService.removeAll(), this.keySystemId = null; const e = this.keySystem; let t = Ul; return e && (this.keySystem$.next(null), e.shouldDestroyMediaKeys && this.keySystemFactory.destroyMediaKeys(), t = e.destroy()), Cr([t, this.mediaSink.clearMediaKeys(this.config.clearMediaKeysOnPromise)]).pipe(Js(void 0)) } attachMediaKeys() { if (this.keySystem) return Ul; var e = this.config.keySystemPreference ? Ih.getKeySystemFormat(this.config.keySystemPreference) : pu.keyFormatString; return this.makeKeySystem(new Gc("NONE",null,null,e,[1])).pipe(Js(void 0)) } isKeyCleanupSupported() { return !0 === this.config.useMultipleKeySessions || "widevine" === this.config.keySystemPreference || "playready" === this.config.keySystemPreference } handleKeyCleanup(i) { if (this.ksQuery.getCount() < 6) return Ul; const r = performance.now() , e = this.ksQuery.getAll().map(e=>{ var t = e.keyUri; if (!i.has(t)) { const i = eu(e.decryptdata); if ("AES-128" !== i.method && r > e.minHoldTime) return this._removeKey(t, i) } return Ul } ); return e.length ? Jr(e).pipe(Ua(Ul)) : Ul } _removeKey(e, t) { return this.abort$.next(e), this.ksService.removeKey(e), this.keySystem.removeKey(t) } removeKeysForItems(i) { const r = []; return sd(()=>{ for (const e of i) { this.ksService.removeAllKeysForItem(e); const i = this.ksQuery.getAll({ filterBy: e=>0 === e.itemIds.length }); for (const t of i) r.push(this._removeKey(t.keyUri, eu(t.decryptdata))) } } ), r.length ? Jr(r).pipe(Ra(()=>Ul)) : Ul } get availableKeySystems() { return Ih.availableKeySystems } initialize(e) { var t = this.protectionData; this.protectionData = {}; var i = this.config.keySystemPreference; for (const a of Ih.availableKeySystems) { var r = e[a]; if (r) if (i === a) { var n, s = r.certificate, r = r.serverCertUrl ? fl.buildAbsoluteURL(window.location.href, r.serverCertUrl) : void 0; let e; this.protectionData[a] = { serverCertUrl: r, certificate: s }, s ? e = Bi({ keysystem: a, certificate: s }) : r && (null === (n = null == t ? void 0 : t[a]) || void 0 === n ? void 0 : n.serverCertUrl) !== r && (n = ml(r) ? this.config.certLoadPolicy.customURL : this.config.certLoadPolicy.default, e = Pc({ url: r, xhrSetup: this.config.xhrSetup }, n).pipe(ur(([e])=>({ keysystem: a, certificate: new Uint8Array(e) })))), e && e.pipe(Ra(e=>this.onServerCertificateLoaded(e)), Un(e=>{ throw this.eventEmitter.trigger(x.INTERNAL_ERROR, { type: o, details: "certificateLoadError", fatal: !1, handled: !0, reason: "Error handling cert", response: $.KeySystemCertificateLoadError, message: e.message, name: "certificateLoadError" }), e } ), $a(this.reset$)).subscribe() } else this.logger.warn(`Key system ${a} does not match preference ${i}, ignoring`) } } generateRequest(e, t) { this.keySystem && this.keySystem.setKeyRequestInfo(e, t) } setLicenseResponse(e, t) { this.keySystem && this.keySystem.setParsedResponse(e, t) } getKeyFromDecryptData(e, t) { if (!e || !e.isEncrypted) return Bi(e); let i; return sd(()=>{ i = this._getKeyFromDecryptData(e, t) } ), i } _getKeyFromDecryptData(t, i) { let r = null , n = null; i && (r = i.itemId, n = i.mediaOptionId); const s = t.uri , e = this.ksQuery.getKeyInfo(s); if (e && null != i && this.ksService.addMediaOption(s, i), (null == e ? void 0 : e.error)instanceof uu && !1 === e.error.isOkToRetry) return Ui(e.error); if (e && e.requestState !== zl.MustRequestResponse) return e.requestState === zl.GotKeyResponse ? Bi(eu(e.decryptdata)) : this.keyUriToRequest[s]; { const o = performance.now() + this.config.keyMinHoldTimeBeforeCleanup; let e; this.abort$.next(s), this.ksService.upsertKey({ keyUri: s, decryptdata: function(e) { var {method: t, isEncrypted: i, uri: r, format: n, formatversions: s} = e; return { method: t, isEncrypted: i, uri: r, format: n, formatversions: s, ivBuf: null !== (s = null === (s = e.iv) || void 0 === s ? void 0 : s.buffer) && void 0 !== s ? s : null, keyIdBuf: null === (s = e.keyId) || void 0 === s ? void 0 : s.buffer, keyBuf: null === (s = e.key) || void 0 === s ? void 0 : s.buffer, psshBuf: null === (e = e.key) || void 0 === e ? void 0 : e.buffer } }(t), minHoldTime: o, mediaOptionIds: [n], requestState: zl.WaitingForKeyResponse, itemIds: [r] }); var a = t.method; switch (a) { case "SAMPLE-AES": case "ISO-23001-7": case "SAMPLE-AES-CTR": { const o = this.config.keyLoadPolicy.customURL; e = this.fetchKeyEME(t).pipe(vo(o.maxLoadTimeMs)); break } case "AES-128": e = this.fetchKeyHTTP(t.uri, t, this.config.keyLoadPolicy); break; default: return Ui(new V(!1,`Unexpected METHOD attribute ${a}`,$.KeySystemUnexpectedMETHOD)) } i = this.keyUriToRequest[s] = e.pipe(ur(e=>{ var t = e.decryptdata; return this.ksService.updateKeyValue(s, t.key), this.eventEmitter.trigger(x.KEY_LOADED, e), e.decryptdata } ), Un(e=>{ var t = this.ksQuery.getKeyInfo(s); return e = Oh(s, e, null !== (t = null == t ? void 0 : t.mediaOptionIds) && void 0 !== t ? t : []), this.ksService.setError(s, e), Ui(e) } ), $s(()=>{ this.ksService.updateKeyRequestState(s, zl.MustRequestResponse, e=>e === zl.WaitingForKeyResponse), this.keyUriToRequest[s] = null } ), wa(), $a(hn(this.abort$.pipe(an(e=>e === s)), this.reset$).pipe(Ja(e=>this.logger.warn(e ? `aborted ${oe(e)}` : "got reset"))))); return this.keyRequest$.next(i), i } } fetchKeyEME(e) { return this.requestKey(e).pipe(ur(e=>({ timestamp: performance.now(), keyuri: e.uri, decryptdata: e }))) } fetchKeyHTTP(e, t, i) { return kh.fetchKeyHTTP(e, this.config, t, i) } static fetchKeyHTTP(t, e, i, r) { e = { url: t, xhrSetup: e.xhrSetup }; return Pc(e, xc(e, r)).pipe(ur(([e])=>(i.key = new Uint8Array(e), { decryptdata: i, keyuri: t, timestamp: performance.now() }))) } requestKey(t) { return this.makeKeySystem(t).pipe(Ra(e=>e.startKeyRequest(t))) } ensureKeySystem(t) { return Yr(()=>{ if (!this.keySystem && this.keySystemId) { this.keySystem$.next(this.keySystemFactory.make(this.keySystemId, t, this.config, this.eventEmitter, this.sessionHandler, this.logger)); var e = this.protectionData && this.protectionData[this.keySystemId]; if (e) return this.keySystem.setServerCertificate(e.certificate).pipe(Js(this.keySystem)) } return Bi(this.keySystem) } ) } makeKeySystem(e) { return this.ensureMediaKeys(e).pipe(Ra(e=>this.mediaSink.setMediaKeys(e).pipe(Ra(()=>this.ensureKeySystem(e))))) } ensureMediaKeys(e) { var t = Ih.getKeySystemIdForDecryptData(e); if (null == this.keySystemId) this.keySystemId = t; else if (this.keySystemId !== t) return Ui(new uu(`New key system string does not match existing ${t} !== ${this.keySystemId}`,e.uri,0,$.KeySystemUnmatchedString,!1,Xl.InternalError)); return this.keySystemFactory.createMediaKeys(this.keySystemId, wh, Ah, this.logger, null === (e = this.platformQuery.platformInfo) || void 0 === e ? void 0 : e.keySystemConfig) } onServerCertificateLoaded(e) { var t = e.keysystem , e = e.certificate; return this.protectionData[t].certificate = e, this.keySystem && this.keySystemId === t ? this.keySystem.setServerCertificate(e).pipe(Js(void 0)) : Ul } handleKeySystemError(e) { e = new cu(e.message,void 0,void 0,$.KeySystemSetupError,void 0); this.eventEmitter.trigger(x.INTERNAL_ERROR, e) } } class Ch extends Od { constructor(e) { super(e) } getKeyInfo(e) { e = this.getEntity(e); return e ? Object.assign(Object.assign({}, e), { error: hu(e.error, e.mediaOptionIds) }) : null } getKeyInfo$(e) { return this.selectEntity(e).pipe(ur(e=>e ? Object.assign(Object.assign({}, e), { error: hu(e.error, e.mediaOptionIds) }) : null)) } getKeyRequestState$(e) { return this.selectEntity(e, e=>null == e ? void 0 : e.requestState) } getKeyStatus$(e) { return this.selectEntity(e, e=>null == e ? void 0 : e.status) } getKeyError$(e) { return this.selectEntity(e, e=>hu(null == e ? void 0 : e.error, null == e ? void 0 : e.mediaOptionIds)).pipe(Id) } } class Dh { constructor(e) { this.store = e } getQuery() { return new Ch(this.store) } upsertKey(i) { Co("keys.upsert", i.keyUri); const r = new Set(i.itemIds.filter(e=>null != e)) , n = new Set(i.mediaOptionIds.filter(e=>null != e)); this.store.upsert(i.keyUri, e=>{ const t = Object.assign(Object.assign({}, e), i); if ("itemIds"in e) for (const i of e.itemIds) r.add(i); if (t.itemIds = Array.from(r), "mediaOptionIds"in e) for (const i of e.mediaOptionIds) n.add(i); return t.mediaOptionIds = Array.from(n), t } , ()=>Object.assign(Object.assign({}, i), { itemIds: Array.from(r), mediaOptionIds: Array.from(n) })) } removeKey(e) { Co("keys.removeKey", e), this.store.remove(e) } removeAllKeysForItem(i) { Co(`keys.removeAllKeysForItem ${i}`), this.store.update(null, e=>{ var t = e.itemIds.findIndex(e=>e === i); 0 <= t && e.itemIds.splice(t, 1) } ) } removeAll() { Co("keys.remove"), this.store.remove() } updateKeyValue(e, t) { Co("keys.updateKeyValue", e), this.store.update(e, e=>{ null == e.decryptdata.keyBuf && null != t && (e.decryptdata.keyBuf = t.buffer), e.requestState = zl.GotKeyResponse } ) } updateKeyStatus(e, t) { Co(`keys.updateKeyStatus ${t}`, e), this.store.update(e, e=>{ e.status = t } ) } updateKeyRequestState(e, t, i) { Co(`keys.updateKeyRequestState ${t}`, e), this.store.update(e, e=>{ i && !i(e.requestState) || (e.requestState = t) } ) } addMediaOption(e, t) { const {itemId: i, mediaOptionId: r} = t; Co(`keys.addMediaOption itemId: ${i}, mediaOptionId: ${r}`, e), this.store.update(e, e=>{ null != r && e.mediaOptionIds.every(e=>e !== r) && e.mediaOptionIds.push(r), null != i && e.itemIds.every(e=>e !== i) && e.itemIds.push(i) } ) } setError(e, t) { var i; Co(`keys.setError ${null === (i = null == t ? void 0 : t.constructor) || void 0 === i ? void 0 : i.name}`, e), this.store.update(e, e=>{ e.error = hu(t), e.requestState = zl.MustRequestResponse } ) } } const Mh = new class extends pd { constructor() { super({}, { name: "key-system-store", idKey: "keyUri", producerFn: vc }) } } ; let Ph = null; function xh(e) { let t = e; return Lh.hasOwnProperty(e) && (t = Lh[e]), String.fromCharCode(t) } function Rh(t) { const i = []; for (let e = 0; e < t.length; e++) i.push(t[e].toString(16)); return i } const Lh = { 42: 225, 92: 233, 94: 237, 95: 243, 96: 250, 123: 231, 124: 247, 125: 209, 126: 241, 127: 9608, 128: 174, 129: 176, 130: 189, 131: 191, 132: 8482, 133: 162, 134: 163, 135: 9834, 136: 224, 137: 32, 138: 232, 139: 226, 140: 234, 141: 238, 142: 244, 143: 251, 144: 193, 145: 201, 146: 211, 147: 218, 148: 220, 149: 252, 150: 8216, 151: 161, 152: 42, 153: 8217, 154: 9473, 155: 169, 156: 8480, 157: 8226, 158: 8220, 159: 8221, 160: 192, 161: 194, 162: 199, 163: 200, 164: 202, 165: 203, 166: 235, 167: 206, 168: 207, 169: 239, 170: 212, 171: 217, 172: 249, 173: 219, 174: 171, 175: 187, 176: 195, 177: 227, 178: 205, 179: 204, 180: 236, 181: 210, 182: 242, 183: 213, 184: 245, 185: 123, 186: 125, 187: 92, 188: 94, 189: 95, 190: 124, 191: 8764, 192: 196, 193: 228, 194: 214, 195: 246, 196: 223, 197: 165, 198: 164, 199: 9475, 200: 197, 201: 229, 202: 216, 203: 248, 204: 9487, 205: 9491, 206: 9495, 207: 9499 } , _h = 100 , Nh = { 17: 1, 18: 3, 21: 5, 22: 7, 23: 9, 16: 11, 19: 12, 20: 14 } , Fh = { 17: 2, 18: 4, 21: 6, 22: 8, 23: 10, 19: 13, 20: 15 } , Bh = { 25: 1, 26: 3, 29: 5, 30: 7, 31: 9, 24: 11, 27: 12, 28: 14 } , Uh = { 25: 2, 26: 4, 29: 6, 30: 8, 31: 10, 27: 13, 28: 15 } , $h = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"] , Vh = { verboseFilter: { DATA: 3, DEBUG: 3, INFO: 2, WARNING: 2, TEXT: 1, ERROR: 0 }, time: null, verboseLevel: 0, setTime: function(e) { this.time = e }, log: function(e, t) { var i = this.verboseFilter[e]; this.verboseLevel >= i && console.log(this.time + " [" + e + "] " + t) } }; class Kh { constructor(e, t, i, r, n) { this.foreground = e || "white", this.underline = t || !1, this.italics = i || !1, this.background = r || "black", this.flash = n || !1 } reset() { this.foreground = "white", this.underline = !1, this.italics = !1, this.background = "black", this.flash = !1 } setStyles(e) { Object.assign(this, e) } isDefault() { return "white" === this.foreground && !this.underline && !this.italics && "black" === this.background && !this.flash } equals(e) { return this.foreground === e.foreground && this.underline === e.underline && this.italics === e.italics && this.background === e.background && this.flash === e.flash } copy(e) { this.foreground = e.foreground, this.underline = e.underline, this.italics = e.italics, this.background = e.background, this.flash = e.flash } toString() { return "color=" + this.foreground + ", underline=" + this.underline + ", italics=" + this.italics + ", background=" + this.background + ", flash=" + this.flash } } class Hh { constructor(e, t, i, r, n, s) { this.uchar = e || " ", this.penState = new Kh(t,i,r,n,s) } reset() { this.uchar = " ", this.penState.reset() } setChar(e, t) { this.uchar = e, this.penState.copy(t) } setPenState(e) { this.penState.copy(e) } equals(e) { return this.uchar === e.uchar && this.penState.equals(e.penState) } copy(e) { this.uchar = e.uchar, this.penState.copy(e.penState) } isEmpty() { return " " === this.uchar && this.penState.isDefault() } } class jh { constructor() { this.chars = []; for (let e = 0; e < _h; e++) this.chars.push(new Hh); this.pos = 0, this.currPenState = new Kh } equals(t) { let i = !0; for (let e = 0; e < _h; e++) if (!this.chars[e].equals(t.chars[e])) { i = !1; break } return i } copy(t) { for (let e = 0; e < _h; e++) this.chars[e].copy(t.chars[e]) } isEmpty() { let t = !0; for (let e = 0; e < _h; e++) if (!this.chars[e].isEmpty()) { t = !1; break } return t } setCursor(e) { this.pos !== e && (this.pos = e), this.pos < 0 ? (Vh.log("ERROR", "Negative cursor position " + this.pos), this.pos = 0) : this.pos > _h && (Vh.log("ERROR", "Too large cursor position " + this.pos), this.pos = _h) } moveCursor(e) { var t = this.pos + e; if (1 < e) for (let e = this.pos + 1; e < t + 1; e++) this.chars[e].setPenState(this.currPenState); this.setCursor(t) } backSpace() { this.moveCursor(-1), this.chars[this.pos].setChar(" ", this.currPenState) } insertChar(e) { 144 <= e && this.backSpace(); var t = xh(e); this.pos >= _h ? Vh.log("ERROR", "Cannot insert " + e.toString(16) + " (" + t + ") at position " + this.pos + ". Skipping it!") : (this.chars[this.pos].setChar(t, this.currPenState), this.moveCursor(1)) } clearFromPos(e) { let t; for (t = e; t < _h; t++) this.chars[t].reset() } clear() { this.clearFromPos(0), this.pos = 0, this.currPenState.reset() } clearToEndOfRow() { this.clearFromPos(this.pos) } getTextString() { const t = []; let i = !0; for (let e = 0; e < _h; e++) { var r = this.chars[e].uchar; " " !== r && (i = !1), t.push(r) } return i ? "" : t.join("") } setPenStyles(e) { this.currPenState.setStyles(e), this.chars[this.pos].setPenState(this.currPenState) } } class qh { constructor() { this.rows = []; for (let e = 0; e < 15; e++) this.rows.push(new jh); this.currRow = 14, this.nrRollUpRows = null, this.reset() } reset() { for (let e = 0; e < 15; e++) this.rows[e].clear(); this.currRow = 14 } equals(t) { let i = !0; for (let e = 0; e < 15; e++) if (!this.rows[e].equals(t.rows[e])) { i = !1; break } return i } copy(t) { for (let e = 0; e < 15; e++) this.rows[e].copy(t.rows[e]) } isEmpty() { let t = !0; for (let e = 0; e < 15; e++) if (!this.rows[e].isEmpty()) { t = !1; break } return t } backSpace() { this.rows[this.currRow].backSpace() } clearToEndOfRow() { this.rows[this.currRow].clearToEndOfRow() } insertChar(e) { this.rows[this.currRow].insertChar(e) } setPen(e) { this.rows[this.currRow].setPenStyles(e) } moveCursor(e) { this.rows[this.currRow].moveCursor(e) } setCursor(e) { Vh.log("INFO", "setCursor: " + e), this.rows[this.currRow].setCursor(e) } setPAC(t) { Vh.log("INFO", "pacData = " + JSON.stringify(t)); let i = t.row - 1; if (this.nrRollUpRows && i < this.nrRollUpRows - 1 && (i = this.nrRollUpRows - 1), this.nrRollUpRows && this.currRow !== i) { for (let e = 0; e < 15; e++) this.rows[e].clear(); const t = this.currRow + 1 - this.nrRollUpRows , r = this.lastOutputScreen; if (r) { const e = r.rows[t].cueStartTime; if (e && e < Vh.time) for (let e = 0; e < this.nrRollUpRows; e++) this.rows[i - this.nrRollUpRows + e + 1].copy(r.rows[t + e]) } } this.currRow = i; const r = this.rows[this.currRow]; if (null !== t.indent) { const i = t.indent , e = Math.max(i - 1, 0); r.setCursor(t.indent), t.color = r.chars[e].penState.foreground } const e = { foreground: t.color, underline: t.underline, italics: t.italics, background: "black", flash: !1 }; this.setPen(e) } setBkgData(e) { Vh.log("INFO", "bkgData = " + JSON.stringify(e)), this.backSpace(), this.setPen(e), this.insertChar(32) } setRollUpRows(e) { this.nrRollUpRows = e } rollUp() { if (null !== this.nrRollUpRows) { Vh.log("INFO", "TEXT " + this.getDisplayText()); const e = this.currRow + 1 - this.nrRollUpRows , t = this.rows.splice(e, 1)[0]; t.clear(), this.rows.splice(this.currRow, 0, t), Vh.log("INFO", "Rolling up") } else Vh.log("DEBUG", "roll_up but nrRollUpRows not set yet") } getDisplayText(t) { t = t || !1; const i = []; let e = "", r; for (let e = 0; e < 15; e++) { const n = this.rows[e].getTextString(); n && (r = e + 1, t ? i.push("Row " + r + ": '" + n + "'") : i.push(n.trim())) } return 0 < i.length && (e = t ? "[" + i.join(" | ") + "]" : i.join("\n")), e } getTextAndFormat() { return this.rows } } class Qh { constructor(e, t) { this.chNr = e, this.outputFilter = t, this.mode = null, this.verbose = 0, this.displayedMemory = new qh, this.nonDisplayedMemory = new qh, this.lastOutputScreen = new qh, this.currRollUpRow = this.displayedMemory.rows[14], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null } reset() { this.mode = null, this.displayedMemory.reset(), this.nonDisplayedMemory.reset(), this.lastOutputScreen.reset(), this.currRollUpRow = this.displayedMemory.rows[14], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null, this.lastCueEndTime = null } getHandler() { return this.outputFilter } setHandler(e) { this.outputFilter = e } setPAC(e) { this.writeScreen.setPAC(e) } setBkgData(e) { this.writeScreen.setBkgData(e) } setMode(e) { e !== this.mode && (this.mode = e, Vh.log("INFO", "MODE=" + e), "MODE_POP-ON" === this.mode ? this.writeScreen = this.nonDisplayedMemory : (this.writeScreen = this.displayedMemory, this.writeScreen.reset()), "MODE_ROLL-UP" !== this.mode && (this.displayedMemory.nrRollUpRows = null, this.nonDisplayedMemory.nrRollUpRows = null), this.mode = e) } insertChars(t) { for (let e = 0; e < t.length; e++) this.writeScreen.insertChar(t[e]); var e = this.writeScreen === this.displayedMemory ? "DISP" : "NON_DISP"; Vh.log("INFO", e + ": " + this.writeScreen.getDisplayText(!0)), "MODE_PAINT-ON" !== this.mode && "MODE_ROLL-UP" !== this.mode || (Vh.log("TEXT", "DISPLAYED: " + this.displayedMemory.getDisplayText(!0)), this.outputDataUpdate()) } ccRCL() { Vh.log("INFO", "RCL - Resume Caption Loading"), this.setMode("MODE_POP-ON") } ccBS() { Vh.log("INFO", "BS - BackSpace"), "MODE_TEXT" !== this.mode && (this.writeScreen.backSpace(), this.writeScreen === this.displayedMemory && this.outputDataUpdate()) } ccAOF() {} ccAON() {} ccDER() { Vh.log("INFO", "DER- Delete to End of Row"), this.writeScreen.clearToEndOfRow(), this.outputDataUpdate() } ccRU(e) { Vh.log("INFO", "RU(" + e + ") - Roll Up"), this.writeScreen = this.displayedMemory, this.setMode("MODE_ROLL-UP"), this.writeScreen.setRollUpRows(e) } ccFON() { Vh.log("INFO", "FON - Flash On"), this.writeScreen.setPen({ flash: !0 }) } ccRDC() { Vh.log("INFO", "RDC - Resume Direct Captioning"), this.setMode("MODE_PAINT-ON") } ccTR() { Vh.log("INFO", "TR"), this.setMode("MODE_TEXT") } ccRTD() { Vh.log("INFO", "RTD"), this.setMode("MODE_TEXT") } ccEDM() { Vh.log("INFO", "EDM - Erase Displayed Memory"), this.displayedMemory.reset(), this.outputDataUpdate(!0) } ccCR() { Vh.log("INFO", "CR - Carriage Return"), this.writeScreen.rollUp(), this.outputDataUpdate(!0) } ccENM() { Vh.log("INFO", "ENM - Erase Non-displayed Memory"), this.nonDisplayedMemory.reset() } ccEOC() { var e; Vh.log("INFO", "EOC - End Of Caption"), "MODE_POP-ON" === this.mode && (e = this.displayedMemory, this.displayedMemory = this.nonDisplayedMemory, this.nonDisplayedMemory = e, this.writeScreen = this.nonDisplayedMemory, Vh.log("TEXT", "DISP: " + this.displayedMemory.getDisplayText())), this.outputDataUpdate(!0) } ccTO(e) { Vh.log("INFO", "TO(" + e + ") - Tab Offset"), this.writeScreen.moveCursor(e) } ccMIDROW(e) { const t = { flash: !1, underline: !1, italics: !1 }; t.underline = e % 2 == 1, t.italics = 46 <= e, t.italics ? t.foreground = "white" : (e = Math.floor(e / 2) - 16, t.foreground = ["white", "green", "blue", "cyan", "red", "yellow", "magenta"][e]), Vh.log("INFO", "MIDROW: " + JSON.stringify(t)), this.writeScreen.setPen(t) } outputDataUpdate(e=!1) { var t = Vh.time; null !== t && this.outputFilter && (this.outputFilter.updateData && this.outputFilter.updateData(t, this.displayedMemory), null !== this.cueStartTime || this.displayedMemory.isEmpty() ? this.displayedMemory.equals(this.lastOutputScreen) || (this.outputFilter.newCue && (this.outputFilter.newCue(this.cueStartTime, t, this.lastOutputScreen), !0 === e && this.outputFilter.dispatchCue && this.outputFilter.dispatchCue()), this.cueStartTime = this.displayedMemory.isEmpty() ? null : t) : this.cueStartTime = t, this.lastOutputScreen.copy(this.displayedMemory)) } cueSplitAtTime(e) { this.outputFilter && (this.displayedMemory.isEmpty() || (this.outputFilter.newCue && this.outputFilter.newCue(this.cueStartTime, e, this.displayedMemory), this.cueStartTime = e)) } } var Gh = class { constructor(e=1, t, i) { this.field = e, this.currChNr = -1, this.lastCmdA = null, this.lastCmdB = null, this.channels = [new Qh(1,t), new Qh(2,i)], this.dataCounters = { padding: 0, char: 0, cmd: 0, other: 0 } } getHandler(e) { return this.channels[e].getHandler() } setHandler(e, t) { this.channels[e].setHandler(t) } addData(e, t) { let i, r, n, s = null; Vh.setTime(e); for (let e = 0; e < t.length; e += 2) r = 127 & t[e], n = 127 & t[e + 1], 16 <= r && r <= 31 && r === this.lastCmdA && n === this.lastCmdB ? (this.lastCmdA = null, this.lastCmdB = null, Vh.log("DEBUG", "Repeated command (" + Rh([r, n]) + ") is dropped")) : 0 != r || 0 != n ? (Vh.log("DATA", "[" + Rh([t[e], t[e + 1]]) + "] -> (" + Rh([r, n]) + ")"), i = this.parseCmd(r, n), i = i || this.parseMidrow(r, n), i = i || this.parsePAC(r, n), i = i || this.parseBackgroundAttributes(r, n), !i && (s = this.parseChars(r, n), s) && (this.currChNr && 0 <= this.currChNr ? this.channels[this.currChNr - 1].insertChars(s) : Vh.log("WARNING", "No channel found yet. TEXT-MODE?")), i ? this.dataCounters.cmd += 2 : s ? this.dataCounters.char += 2 : (this.dataCounters.other += 2, Vh.log("WARNING", "Couldn't parse cleaned data " + Rh([r, n]) + " orig: " + Rh([t[e], t[e + 1]])))) : this.dataCounters.padding += 2 } parseCmd(e, t) { var i; if (!((20 === e || 21 === e || 28 === e || 29 === e) && 32 <= t && t <= 47 || (23 === e || 31 === e) && 33 <= t && t <= 35)) return !1; const r = this.channels[(i = 20 === e || 23 === e ? 1 : 2) - 1]; return 20 === e || 21 === e || 28 === e || 29 === e ? 32 === t ? r.ccRCL() : 33 === t ? r.ccBS() : 34 === t ? r.ccAOF() : 35 === t ? r.ccAON() : 36 === t ? r.ccDER() : 37 === t ? r.ccRU(2) : 38 === t ? r.ccRU(3) : 39 === t ? r.ccRU(4) : 40 === t ? r.ccFON() : 41 === t ? r.ccRDC() : 42 === t ? r.ccTR() : 43 === t ? r.ccRTD() : 44 === t ? r.ccEDM() : 45 === t ? r.ccCR() : 46 === t ? r.ccENM() : 47 === t && r.ccEOC() : r.ccTO(t - 32), this.lastCmdA = e, this.lastCmdB = t, this.currChNr = i, !0 } parseMidrow(e, t) { var i; if ((17 === e || 25 === e) && 32 <= t && t <= 47) { if ((i = 17 === e ? 1 : 2) !== this.currChNr) return Vh.log("ERROR", "Mismatch channel in midrow parsing"), !1; const r = this.channels[i - 1]; return r.insertChars([32]), r.ccMIDROW(t), Vh.log("DEBUG", "MIDROW (" + Rh([e, t]) + ")"), this.lastCmdA = e, this.lastCmdB = t, !0 } return !1 } parsePAC(e, t) { if (!((17 <= e && e <= 23 || 25 <= e && e <= 31) && 64 <= t && t <= 127 || (16 === e || 24 === e) && 64 <= t && t <= 95)) return !1; var i = e <= 23 ? 1 : 2 , r = (64 <= t && t <= 95 ? 1 == i ? Nh : Bh : 1 == i ? Fh : Uh)[e] , r = this.interpretPAC(r, t); return this.channels[i - 1].setPAC(r), this.lastCmdA = e, this.lastCmdB = t, this.currChNr = i, !0 } interpretPAC(e, t) { var i; const r = { color: null, italics: !1, indent: null, underline: !1, row: e }; return i = 95 < t ? t - 96 : t - 64, r.underline = 1 == (1 & i), i <= 13 ? r.color = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "white"][Math.floor(i / 2)] : i <= 15 ? (r.italics = !0, r.color = "white") : r.indent = 4 * Math.floor((i - 16) / 2), r } parseChars(e, t) { let i = null , r = null , n = null; var s; if (n = 25 <= e ? (i = 2, e - 8) : (i = 1, e), 17 <= n && n <= 19 ? (s = t, s = 17 === n ? t + 80 : 18 === n ? t + 112 : t + 144, Vh.log("INFO", "Special char '" + xh(s) + "' in channel " + i), r = [s], this.lastCmdA = e, this.lastCmdB = t) : 32 <= e && e <= 127 && (r = 0 === t ? [e] : [e, t], this.lastCmdA = null, this.lastCmdB = null), r) { const e = Rh(r); Vh.log("DEBUG", `Char codes = ${e.join(",")}`) } return r } parseBackgroundAttributes(e, t) { let i, r, n; return ((16 === e || 24 === e) && 32 <= t && t <= 47 || (23 === e || 31 === e) && 45 <= t && t <= 47) && (i = { underline: !1 }, 16 === e || 24 === e ? (r = Math.floor((t - 32) / 2), i.background = $h[r], t % 2 == 1 && (i.background = i.background + "_semi")) : 45 === t ? i.background = "transparent" : (i.foreground = "black", 47 === t && (i.underline = !0)), n = this.channels[(e < 24 ? 1 : 2) - 1], n.setBkgData(i), this.lastCmdA = null, !(this.lastCmdB = null)) } reset() { for (let e = 0; e < this.channels.length; e++) this.channels[e] && this.channels[e].reset(); this.lastCmdA = null, this.lastCmdB = null } cueSplitAtTime(t) { for (let e = 0; e < this.channels.length; e++) this.channels[e] && this.channels[e].cueSplitAtTime(t) } } ; class Wh { constructor(e, t) { this.handler = e, this.track = t, this.startTime = null, this.endTime = null, this.screen = null } dispatchCue() { null !== this.startTime && (this.handler.addCues("cc" + this.track, this.startTime, this.endTime, this.screen), this.startTime = null) } newCue(e, t, i) { (null === this.startTime || this.startTime > e) && (this.startTime = e), this.endTime = t, this.screen = i, this.handler.createHTMLCaptionsTrack(this.track) } } var zh = {} , mu = {} , gr = {} , t = {}; Object.defineProperty(t, "__esModule", { value: !0 }), t.isValidPercentValue = function(e) { return "number" == typeof e && 0 <= e && e <= 100 } , t.isValidAlignSetting = function(e) { return "string" == typeof e && ["start", "center", "end", "left", "right", "middle"].includes(e) } , t.isValidDirectionSetting = function(e) { return "string" == typeof e && ["", "rl", "lr"].includes(e) } , t.isValidLineAndPositionSetting = function(e) { return "number" == typeof e || "auto" === e } , t.isValidLineAlignSetting = function(e) { return "string" == typeof e && ["start", "center", "end"].includes(e) } , t.isValidPositionAlignSetting = function(e) { return "string" == typeof e && ["line-left", "center", "line-right", "auto", "left", "start", "middle", "end", "right"].includes(e) } , t.isValidScrollSetting = function(e) { return ["", "up"].includes(e) } ; yc = {}; Object.defineProperty(yc, "__esModule", { value: !0 }); const Xh = { "&": "&", "<": "<", ">": ">", "‎": "‎", "‏": "‏", " ": " " } , Yh = { c: "span", i: "i", b: "b", u: "u", ruby: "ruby", rt: "rt", v: "span", lang: "span" } , Jh = { v: "title", lang: "lang" } , Zh = { rt: "ruby" } , ep = { "text-combine-upright": "-webkit-text-combine:horizontal; text-orientation: mixed;" }; class tp { static parseTimeStamp(e) { function t(e) { var [t,i,r,e] = e.map(e=>e ? parseInt("" + e) : 0); return 3600 * t + 60 * i + r + e / 1e3 } const i = /^(\d+):(\d{2})(:\d{2})?\.(\d{3})/.exec(e); return i ? i[3] ? t([i[1], i[2], i[3].substring(1), i[4]]) : 59 < parseInt(i[1]) ? t([i[1], i[2], null, i[4]]) : t([null, i[1], i[2], i[4]]) : null } static parseContent(s, t, a) { let i = t.text; function e(e) { return Xh[e] } const r = s.document.createElement("div") , n = []; let o, d, l = r; for (; null !== (o = function() { if (!i) return null; var e = (e = /^([^<]*)(<[^>]+>?)?/.exec(i))[1] || e[2]; return i = i.substr(e.length), e }()); ) if ("<" !== o[0]) l.appendChild(s.document.createTextNode(o.replace(/&(amp|lt|gt|lrm|rlm|nbsp);/g, e))); else { if ("/" === o[1]) { n.length && n[n.length - 1] === o.substr(2).replace(">", "") && (n.pop(), l = l.parentNode); continue } const t = tp.parseTimeStamp(o.substr(1, o.length - 2)); let e; if (t) { e = s.document.createProcessingInstruction("timestamp", t.toString()), l.appendChild(e); continue } if (!(d = /^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/.exec(o))) continue; if (e = function(e, t, i) { var r = Yh[e]; if (!r) return null; const n = s.document.createElement(r); if (n.dataset.localName = r, (e = Jh[e]) && i && (n[e] = i.trim()), t) if (a[t]) { const s = function(e) { let t = ""; for (const i in e) t += ep[i] || i + ":" + e[i] + ";"; return t }(a[t]); n.setAttribute("style", s) } else console.info(`WebVTT: parseContent: Style referenced, but no style defined for '${t}'!`); return n }(d[1], d[2], d[3]), !e) continue; if (u = l, c = e, Zh[c.dataset.localName] && Zh[c.dataset.localName] !== u.dataset.localName) continue; n.push(d[1]), l.appendChild(e), l = e } var u, c; return r } } yc.default = tp; gc = e && e.__decorate || function(e, t, i, r) { var n, s = arguments.length, a = s < 3 ? t : null === r ? r = Object.getOwnPropertyDescriptor(t, i) : r; if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(e, t, i, r); else for (var o = e.length - 1; 0 <= o; o--) (n = e[o]) && (a = (s < 3 ? n(a) : 3 < s ? n(t, i, a) : n(t, i)) || a); return 3 < s && a && Object.defineProperty(t, i, a), a } ; Object.defineProperty(gr, "__esModule", { value: !0 }); const ip = t , rp = yc; gc = gc([function(e) { let t = e; return "undefined" != typeof window && null != window.VTTCue && (t = window.VTTCue, t.create = e.create, t.fromJSON = e.fromJSON, t.prototype.toJSON = e.prototype.toJSON), t } ], gc = class { constructor(e, t, i) { this._id = "", this._pauseOnExit = !1, this._region = null, this._vertical = "", this._snapToLines = !0, this._line = "auto", this._lineAlign = "start", this._position = "auto", this._positionAlign = "auto", this._size = 100, this._align = "center", this.hasBeenReset = !1, this._startTime = e, this._endTime = t, this._text = i } get id() { return this._id } set id(e) { this._id = "" + e } get pauseOnExit() { return this._pauseOnExit } set pauseOnExit(e) { this._pauseOnExit = !!e } get startTime() { return this._startTime } set startTime(e) { if ("number" != typeof e) throw new TypeError(`Start time must be set to a number: ${e}`); this._startTime = e, this.hasBeenReset = !0 } get endTime() { return this._endTime } set endTime(e) { if ("number" != typeof e) throw new TypeError(`End time must be set to a number: ${e}`); this._endTime = e, this.hasBeenReset = !0 } get text() { return this._text } set text(e) { this._text = "" + e, this.hasBeenReset = !0 } get region() { return this._region } set region(e) { this._region = e, this.hasBeenReset = !0 } get vertical() { return this._vertical } set vertical(e) { if (!ip.isValidDirectionSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for vertical: ${e}`); this._vertical = e, this.hasBeenReset = !0 } get snapToLines() { return this._snapToLines } set snapToLines(e) { this._snapToLines = !!e, this.hasBeenReset = !0 } get line() { return this._line } set line(e) { if (!ip.isValidLineAndPositionSetting(e)) throw new SyntaxError(`An invalid number or illegal string was specified for line: ${e}`); this._line = e, this.hasBeenReset = !0 } get lineAlign() { return this._lineAlign } set lineAlign(e) { if (!ip.isValidLineAlignSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for lineAlign: ${e}`); this._lineAlign = e, this.hasBeenReset = !0 } get position() { return this._position } set position(e) { if (!ip.isValidLineAndPositionSetting(e)) throw new Error(`Position must be between 0 and 100 or auto: ${e}`); this._position = e, this.hasBeenReset = !0 } get positionAlign() { return this._positionAlign } set positionAlign(e) { if (!ip.isValidPositionAlignSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for positionAlign: ${e}`); this._positionAlign = e, this.hasBeenReset = !0 } get size() { return this._size } set size(e) { if (e < 0 || 100 < e) throw new Error(`Size must be between 0 and 100: ${e}`); this._size = e, this.hasBeenReset = !0 } get align() { return this._align } set align(e) { if (!ip.isValidAlignSetting(e)) throw new SyntaxError(`An invalid or illegal string was specified for align: ${e}`); this._align = e, this.hasBeenReset = !0 } getCueAsHTML() { return rp.default.parseContent(window, this, {}) } static create(t) { if (!t.hasOwnProperty("startTime") || !t.hasOwnProperty("endTime") || !t.hasOwnProperty("text")) throw new Error("You must at least have start time, end time, and text."); const i = new this(t.startTime,t.endTime,t.text); return Object.keys(t).forEach(e=>{ i.hasOwnProperty(e) && (i[e] = t[e]) } ), i } static fromJSON(e) { return this.create(JSON.parse(e)) } toJSON() { const t = {}; return Object.keys(this).forEach(e=>{ this.hasOwnProperty(e) && "getCueAsHTML" !== e && "hasBeenReset" !== e && "displayState" !== e && (t[e] = this[e]) } ), t } } ); gr.VTTCue = gc; gc = {}, e = e && e.__decorate || function(e, t, i, r) { var n, s = arguments.length, a = s < 3 ? t : null === r ? r = Object.getOwnPropertyDescriptor(t, i) : r; if ("object" == typeof Reflect && "function" == typeof Reflect.decorate) a = Reflect.decorate(e, t, i, r); else for (var o = e.length - 1; 0 <= o; o--) (n = e[o]) && (a = (s < 3 ? n(a) : 3 < s ? n(t, i, a) : n(t, i)) || a); return 3 < s && a && Object.defineProperty(t, i, a), a } ; Object.defineProperty(gc, "__esModule", { value: !0 }); const np = t; e = e([function(e) { let t = e; return "undefined" != typeof window && null != window.VTTRegion && (t = window.VTTRegion, t.create = e.create, t.fromJSON = e.fromJSON, t.prototype.toJSON = e.prototype.toJSON), t } ], e = class { constructor() { this._id = "", this._lines = 3, this._regionAnchorX = 0, this._regionAnchorY = 100, this._scroll = "", this._viewportAnchorX = 0, this._viewportAnchorY = 100, this._width = 100 } get id() { return this._id } set id(e) { if ("string" != typeof e) throw new Error("ID must be a string."); this._id = e } get lines() { return this._lines } set lines(e) { if ("number" != typeof e) throw new TypeError("Lines must be set to a number."); this._lines = e } get regionAnchorX() { return this._regionAnchorX } set regionAnchorX(e) { if (!np.isValidPercentValue(e)) throw new TypeError("RegionAnchorX must be between 0 and 100."); this._regionAnchorX = e } get regionAnchorY() { return this._regionAnchorY } set regionAnchorY(e) { if (!np.isValidPercentValue(e)) throw new TypeError("RegionAnchorY must be between 0 and 100."); this._regionAnchorY = e } get scroll() { return this._scroll } set scroll(e) { if ("string" == typeof e) { e = e.toLowerCase(); if (np.isValidScrollSetting(e)) return void (this._scroll = e) } throw new SyntaxError("An invalid or illegal string was specified.") } get viewportAnchorX() { return this._viewportAnchorX } set viewportAnchorX(e) { if (!np.isValidPercentValue(e)) throw new TypeError("ViewportAnchorX must be between 0 and 100."); this._viewportAnchorX = e } get viewportAnchorY() { return this._viewportAnchorY } set viewportAnchorY(e) { if (!np.isValidPercentValue(e)) throw new TypeError("ViewportAnchorY must be between 0 and 100."); this._viewportAnchorY = e } get width() { return this._width } set width(e) { if (!np.isValidPercentValue(e)) throw new TypeError("Width must be between 0 and 100."); this._lines = e } toJSON() { const t = {}; return Object.keys(this).forEach(e=>{ this.hasOwnProperty(e) && (t[e] = this[e]) } ), t } static create(t) { const i = new this; return Object.keys(t).forEach(e=>{ i.hasOwnProperty(e) && (i[e] = t[e]) } ), i } static fromJSON(e) { return this.create(JSON.parse(e)) } } ); gc.VTTRegion = e, Object.defineProperty(mu, "__esModule", { value: !0 }); const sp = gr; mu.VTTCue = sp.VTTCue; const ap = gc; mu.VTTRegion = ap.VTTRegion; const op = yc; class dp extends Error { constructor(e, t) { super(), this.name = "ParsingError", this.code = "number" == typeof e ? e : e.code, t ? this.message = t : e instanceof dp && (this.message = e.message) } } (mu.ParsingError = dp).Errors = { BadSignature: new dp(0,"Malformed WebVTT signature."), BadTimeStamp: new dp(1,"Malformed time stamp.") }; class lp { constructor() { this.values = {} } set(e, t) { this.get(e) || "" === t || (this.values[e] = t) } get(e, t, i) { return "object" == typeof t && "string" == typeof i ? this.has(e) ? this.values[e] : t[i] : this.has(e) ? this.values[e] : t } has(e) { return e in this.values } alt(t, i, r) { for (let e = 0; e < r.length; ++e) if (i === r[e]) { this.set(t, i); break } } integer(e, t) { /^-?\d+$/.test(t) && this.set(e, parseInt(t, 10)) } percent(e, t) { if (t.match(/^([\d]{1,3})(\.[\d]*)?%$/)) try { var i = parseFloat(t); if (0 <= i && i <= 100) return this.set(e, i), !0 } catch (e) { return !1 } return !1 } } class up { constructor(e, t, i) { this.window = e, this.state = "INITIAL", this.styleCollector = "", this.buffer = "", this.decoder = t || new TextDecoder("utf8"), this.regionList = [], this.onStylesParsedCallback = i, this._styles = {} } static StringDecoder() { return { decode: e=>{ if (!e) return ""; if ("string" != typeof e) throw new Error("Error - expected string data."); return decodeURIComponent(encodeURIComponent(e)) } } } reportOrThrowError(e) { if (!(e instanceof dp && "function" == typeof this.onparsingerror)) throw e; this.onparsingerror(e) } parseOptions(e, t, i, r) { e = r ? e.split(r) : [e]; for (const n of e) if ("string" == typeof n) { const r = n.split(i); 2 === r.length && t(r[0], r[1]) } } parseCue(t, e, a) { const i = t , r = ()=>{ var e = op.default.parseTimeStamp(t); if (null === e) throw new dp(dp.Errors.BadTimeStamp,"Malformed timestamp: " + i); return t = t.replace(/^[^\sa-zA-Z-]+/, ""), e } , n = ()=>{ t = t.replace(/^\s+/, "") } ; if (n(), e.startTime = r(), n(), "--\x3e" !== t.substr(0, 3)) throw new dp(dp.Errors.BadTimeStamp,`Malformed time stamp (time stamps must be separated by '--\x3e'): ${i}`); t = t.substr(3), n(), e.endTime = r(), n(), ((e,t)=>{ const s = new lp; this.parseOptions(e, (t,i)=>{ let e, r; switch (t) { case "region": for (let e = a.length - 1; 0 <= e; e--) if (a[e].id === i) { s.set(t, a[e].region); break } break; case "vertical": s.alt(t, i, ["rl", "lr"]); break; case "line": e = i.split(","), r = e[0], s.integer(t, r), s.percent(t, r) && s.set("snapToLines", !1), s.alt(t, r, ["auto"]), 2 === e.length && s.alt("lineAlign", e[1], ["start", "center", "end"]); break; case "position": e = i.split(","), s.percent(t, e[0]), 2 === e.length && (n = ["line-left", "line-right", "center", "auto", "left", "start", "middle", "end", "right"], s.alt("positionAlign", e[1], n)); break; case "size": s.percent(t, i); break; case "align": var n = ["start", "center", "end", "left", "right", "middle"]; s.alt(t, i, n) } } , /:/, /\s/), t.region = s.get("region", null), t.vertical = s.get("vertical", ""), t.line = s.get("line", void 0 === t.line ? "auto" : t.line), t.lineAlign = s.get("lineAlign", "start"), t.snapToLines = s.get("snapToLines", !0), t.size = s.get("size", 100); e = s.get("align", "center"); t.align = "middle" === e ? "center" : e, t.position = s.get("position", "auto"); e = s.get("positionAlign", { start: "start", left: "start", center: "center", right: "end", end: "end" }, t.align); t.positionAlign = { start: "start", "line-left": "start", left: "start", center: "center", middle: "center", "line-right": "end", right: "end", end: "end" }[e] } )(t, e) } parseRegion(e) { const n = new lp; if (this.parseOptions(e, (e,t)=>{ switch (e) { case "id": n.set(e, t); break; case "width": n.percent(e, t); break; case "lines": n.integer(e, t); break; case "regionanchor": case "viewportanchor": { var i = t.split(","); if (2 !== i.length) break; const r = new lp; if (r.percent("x", i[0]), r.percent("y", i[1]), !r.has("x") || !r.has("y")) break; n.set(e + "X", r.get("x")), n.set(e + "Y", r.get("y")); break } case "scroll": n.alt(e, t, ["up"]) } } , /=/, /\s/), n.has("id")) { const e = new ap.VTTRegion; e.width = n.get("width", 100), e.lines = n.get("lines", 3), e.regionAnchorX = n.get("regionanchorX", 0), e.regionAnchorY = n.get("regionanchorY", 100), e.viewportAnchorX = n.get("viewportanchorX", 0), e.viewportAnchorY = n.get("viewportanchorY", 100), e.scroll = n.get("scroll", ""), this.onregion && this.onregion(e), this.regionList.push({ id: n.get("id"), region: e }) } } parseStyle(i) { const e = i.split("}"); e.pop(); for (const i of e) { let e = null , t = null; const r = i.split("{"); r[0] && (e = r[0].trim()), r[1] && (t = (e=>{ const t = {} , i = e.split(";"); for (let e = 0; e < i.length; e++) if (i[e].includes(":")) { const r = i[e].split(":", 2) , n = r[0].trim() , s = r[1].trim(); "" !== n && "" !== s && (t[n] = s) } return t } )(r[1])), e && t && (this._styles[e] = t) } this.onStylesParsedCallback && this.onStylesParsedCallback(this._styles) } parseHeader(e) { this.parseOptions(e, function(e, t) { "Region" === e && this.parseRegion(t) }, /:/) } parse(i) { i && (this.buffer += this.decoder.decode(i, { stream: !0 })); const r = ()=>{ const e = this.buffer; let t = 0; let i = { start: e.length, length: 0 }; for (; t < e.length; ) { const r = ((t,i)=>{ const r = { start: -1, length: -1 }; if ("\r" === t[i]) r.start = i, r.length = 1; else if ("\n" === t[i]) r.start = i, r.length = 1; else if ("<" === t[i] && i + 1 < t.length && "b" === t[i + 1] && i + 2 < t.length && "r" === t[i + 2]) { let e = i + 2; for (; e < t.length && ">" !== t[e++]; ) ; r.start = i, r.length = e - i } return r } )(e, t); if (0 < r.length) { i = r; break } ++t } const r = e.substr(0, i.start); return this.buffer = e.substr(i.start + i.length), r } ; try { let e; if ("INITIAL" === this.state) { if (!/\r\n|\n/.test(this.buffer)) return this; e = r(); var n = /^()?WEBVTT([ \t].*)?$/.exec(e); if (!n || !n[0]) throw new dp(dp.Errors.BadSignature); this.state = "HEADER" } let t = !1; for (; this.buffer; ) { if (!/\r\n|\n/.test(this.buffer)) return this; switch (t ? t = !1 : e = r(), this.state) { case "HEADER": e.includes(":") ? this.parseHeader(e) : e || (this.state = "ID"); continue; case "NOTE": e || (this.state = "ID"); continue; case "STYLE": e ? this.styleCollector += e : (this.parseStyle(this.styleCollector), this.state = "ID", this.styleCollector = ""); continue; case "ID": if (/^NOTE($|[ \t])/.test(e)) { this.state = "NOTE"; break } if (/^STYLE($|[ \t])/.test(e)) { this.state = "STYLE"; break } if (!e) continue; if (this.cue = new sp.VTTCue(0,0,""), this.state = "CUE", !e.includes("--\x3e")) { this.cue.id = e; continue } case "CUE": try { this.parseCue(e, this.cue, this.regionList) } catch (i) { this.reportOrThrowError(i), this.cue = null, this.state = "BADCUE"; continue } this.state = "CUETEXT"; continue; case "CUETEXT": { const r = e.includes("--\x3e"); if (!e || r) { t = !0, this.oncue && this.oncue(this.cue), this.cue = null, this.state = "ID"; continue } this.cue.text && (this.cue.text += "\n"), this.cue.text += e; continue } case "BADCUE": e || (this.state = "ID"); continue } } } catch (i) { this.reportOrThrowError(i), "CUETEXT" === this.state && this.cue && this.oncue && this.oncue(this.cue), this.cue = null, this.state = "INITIAL" === this.state ? "BADWEBVTT" : "BADCUE" } return this } flush() { try { if (this.buffer += this.decoder.decode(), !this.cue && "HEADER" !== this.state || (this.buffer += "\n\n", this.parse()), "INITIAL" === this.state) throw new dp(dp.Errors.BadSignature) } catch (e) { this.reportOrThrowError(e) } return this.onflush && this.onflush(), this } styles() { return this._styles } } mu.default = up, mu.WebVTTParser = up; var cp, gc = {}; Object.defineProperty(gc, "__esModule", { value: !0 }); const hp = gr; gc.VTTCue = hp.VTTCue; const pp = yc , fp = [/^(::cue\()(\..*)(\))/, /^(::cue\()(#.*)(\))/, /^(::cue\()(c|i|b|u|ruby|rt|v|lang)(\))/] , mp = [[1470, 1470], [1472, 1472], [1475, 1475], [1478, 1478], [1488, 1514], [1520, 1524], [1544, 1544], [1547, 1547], [1549, 1549], [1563, 1563], [1566, 1610], [1645, 1647], [1649, 1749], [1765, 1766], [1774, 1775], [1786, 1805], [1807, 1808], [1810, 1839], [1869, 1957], [1969, 1969], [1984, 2026], [2036, 2037], [2042, 2042], [2048, 2069], [2074, 2074], [2084, 2084], [2088, 2088], [2096, 2110], [2112, 2136], [2142, 2142], [2208, 2208], [2210, 2220], [8207, 8207], [64285, 64285], [64287, 64296], [64298, 64310], [64312, 64316], [64318, 64318], [64320, 64321], [64323, 64324], [64326, 64449], [64467, 64829], [64848, 64911], [64914, 64967], [65008, 65020], [65136, 65140], [65142, 65276], [67584, 67589], [67592, 67592], [67594, 67637], [67639, 67640], [67644, 67644], [67647, 67669], [67671, 67679], [67840, 67867], [67872, 67897], [67903, 67903], [67968, 68023], [68030, 68031], [68096, 68096], [68112, 68115], [68117, 68119], [68121, 68147], [68160, 68167], [68176, 68184], [68192, 68223], [68352, 68405], [68416, 68437], [68440, 68466], [68472, 68479], [68608, 68680], [126464, 126467], [126469, 126495], [126497, 126498], [126500, 126500], [126503, 126503], [126505, 126514], [126516, 126519], [126521, 126521], [126523, 126523], [126530, 126530], [126535, 126535], [126537, 126537], [126539, 126539], [126541, 126543], [126545, 126546], [126548, 126548], [126551, 126551], [126553, 126553], [126555, 126555], [126557, 126557], [126559, 126559], [126561, 126562], [126564, 126564], [126567, 126570], [126572, 126578], [126580, 126583], [126585, 126588], [126590, 126590], [126592, 126601], [126603, 126619], [126625, 126627], [126629, 126633], [126635, 126651], [1114109, 1114109]]; class gp { applyStyles(e, t) { t = t || this.div; for (const i in e) e.hasOwnProperty(i) && (t.style[i] = e[i]) } formatStyle(e, t) { return 0 === e ? "0" : e + t } } gc.StyleBox = gp; class yp extends gp { constructor(e, t, i, r, n) { super(); let s = { textAlign: { start: "left", "line-left": "left", left: "left", center: "center", middle: "center", "line-right": "right", right: "right", end: "right" }[(this.cue = t).positionAlign] || t.align, whiteSpace: "pre-line", position: "absolute" }; s.direction = this.determineBidi(this.cueDiv), s.writingMode = this.directionSettingToWritingMode(t.vertical), s.unicodeBidi = "plaintext", this.div = e.document.createElement("div"), this.applyStyles(s), s = { backgroundColor: r.backgroundColor, display: "inline-block" }, this.parseOpacity(s.backgroundColor) && (s.padding = "5px", s.borderRadius = "5px"), this.backgroundDiv = e.document.createElement("div"), this.applyStyles(s, this.backgroundDiv), s = { color: i.color, backgroundColor: i.backgroundColor, textShadow: i.textShadow, fontSize: i.fontSize, fontFamily: i.fontFamily, position: "relative", left: "0", right: "0", top: "0", bottom: "0", display: "inline-block", textOrientation: "upright" }, s.writingMode = this.directionSettingToWritingMode(t.vertical), s.unicodeBidi = "plaintext", this.cueDiv = pp.default.parseContent(e, t, n), this.applyStyles(s, this.cueDiv), this.backgroundDiv.appendChild(this.cueDiv), this.div.appendChild(this.backgroundDiv); let a = 0; if ("number" == typeof t.position) { n = t.positionAlign || t.align; if (n) switch (n) { case "start": case "left": a = t.position; break; case "center": case "middle": a = t.position - t.size / 2; break; case "end": case "right": a = t.position - t.size } } "" === t.vertical ? this.applyStyles({ left: this.formatStyle(a, "%"), width: this.formatStyle(t.size, "%") }) : this.applyStyles({ top: this.formatStyle(a, "%"), height: this.formatStyle(t.size, "%") }) } determineBidi(e) { let t = [] , i = ""; if (!e || !e.childNodes) return "ltr"; function n(t, i) { for (let e = i.childNodes.length - 1; 0 <= e; e--) t.push(i.childNodes[e]) } for (n(t, e); i = function e(t) { if (!t || !t.length) return null; let i = t.pop() , r = i.textContent || i.innerText; if (r) { const i = /^.*(\n|\r)/.exec(r); return i ? i[t.length = 0] : r } return "ruby" === i.tagName ? e(t) : i.childNodes ? (n(t, i), e(t)) : void 0 }(t); ) for (let e = 0; e < i.length; e++) if (function(e, t) { for (const i of t) if (e >= i[0] && e <= i[1]) return 1 }(i.charCodeAt(e), mp)) return "rtl"; return "ltr" } parseOpacity(e) { if (!e || "string" != typeof e) return null; e = (e = e.replace(/ /g, "").replace("rgba(", "").replace(")", "")).split(","); return e && 4 <= e.length ? e[3] : null } directionSettingToWritingMode(e) { return "" === e ? "horizontal-tb" : "lr" === e ? "vertical-lr" : "vertical-rl" } move(e) { this.applyStyles({ top: this.formatStyle(e.top, "px"), bottom: this.formatStyle(e.bottom, "px"), left: this.formatStyle(e.left, "px"), right: this.formatStyle(e.right, "px"), height: this.formatStyle(e.height, "px"), width: this.formatStyle(e.width, "px") }) } } gc.CueStyleBox = yp; class vp { constructor(e) { var t; let i, r, n, s, a, o; if (e instanceof yp && e.cue ? (t = e.cue) && "" !== t.vertical ? this.property = "width" : this.property = "height" : e instanceof vp && (this.property = e.property || "height"), e instanceof yp && e.div) { n = e.div.offsetHeight, s = e.div.offsetWidth, a = e.div.offsetTop; const t = e.div.firstChild; if (o = (t || e.div).getBoundingClientRect(), i = o && o[this.property] || null, t && t.firstChild) { const e = t.firstChild; e && "string" == typeof e.textContent && (r = i / this.calculateNewLines(e.textContent)) } } else e instanceof vp && (o = e); this.left = o.left, this.right = o.right, this.top = o.top || a, this.height = o.height || n, this.bottom = o.bottom || a + (o.height || n), this.width = o.width || s, this.lineHeight = null !== i ? i : o.lineHeight, this.singleLineHeight = null !== r ? r : o.singleLineHeight, this.singleLineHeight || (this.singleLineHeight = 41) } calculateNewLines(t) { let i = 1; for (let e = 0; e < t.length; e++) "\n" === t[e] && i++; return i } move(e, t) { switch (t = void 0 !== t ? t : this.singleLineHeight, e) { case "+x": this.left += t, this.right += t; break; case "-x": this.left -= t, this.right -= t; break; case "+y": this.top += t, this.bottom += t; break; case "-y": this.top -= t, this.bottom -= t } } overlaps(e) { return this.left < e.right && this.right > e.left && this.top < e.bottom && this.bottom > e.top } overlapsAny(e) { for (const t of e) if (this.overlaps(t)) return !0; return !1 } within(e) { return this.top >= e.top && this.bottom <= e.bottom && this.left >= e.left && this.right <= e.right } moveIfOutOfBounds(e, t) { switch (t) { case "+x": this.left < e.left && (this.left = e.left, this.right = this.left + this.width); break; case "-x": this.right > e.right && (this.right = e.right, this.left = this.right - this.width); break; case "+y": this.top < e.top && (this.top = e.top, this.bottom = this.top + this.height); break; case "-y": this.bottom > e.bottom && (this.bottom = e.bottom, this.top = this.bottom - this.height) } } toCSSCompatValues(e) { return { top: this.top - e.top, bottom: e.bottom - this.bottom, left: this.left - e.left, right: e.right - this.right, height: this.height, width: this.width } } static getSimpleBoxPosition(e) { let t = null; e instanceof gp && e.div ? t = e.div : e instanceof HTMLElement && (t = e); let i = t.offsetHeight || 0 , r = t.offsetWidth || 0 , n = t.offsetTop || 0 , s = n + i , a = t.getBoundingClientRect(); var {left: o, right: e} = a; return a.top && (n = a.top), a.height && (i = a.height), a.width && (r = a.width), a.bottom && (s = a.bottom), { left: o, right: e, top: n, height: i, bottom: s, width: r } } static getBoxPosition(r, n) { if (r && 0 < r.length) { let t = 0 , i = r[0][n]; for (let e = 0; e < r.length; e++) n in ["top", "right"] ? r[e][n] > i && (t = e, i = r[e][n]) : n in ["bottom", "left"] && r[e][n] < i && (t = e, i = r[e][n]); return r[t] } return null } static moveToMinimumDistancePlacement(e, t, i) { "height" === e.property ? "+y" === t ? (e.top = i.topMostBoxPosition.bottom + 0, e.bottom = e.top + e.height) : "-y" === t && (e.bottom = +i.bottomMostBoxPosition.top, e.top = e.bottom - e.height) : "width" === e.property && ("+x" === t ? (e.left = i.rightMostBoxPosition.right + 0, e.right = e.left + e.width) : "-x" === t && (e.right = +i.leftMostBoxPosition.left, e.left = e.right - e.width)) } static moveBoxToLinePosition(e, a, o) { var n = e.cue; let i, r = new vp(e), s = function() { if ("number" == typeof n.line && (n.snapToLines || 0 <= n.line && n.line <= 100)) return n.line; if (!n.track || !n.track.textTrackList || !n.track.textTrackList.mediaElement) return -1; let t = 0; var i = n.track , r = i.textTrackList; for (let e = 0; e < r.length && r[e] !== i; e++) "showing" === r[e].mode && t++; return -1 * ++t }(), d = []; if (n.snapToLines) { let t = 0; switch (n.vertical) { case "": d = ["+y", "-y"], i = "height"; break; case "rl": d = ["+x", "-x"], i = "width"; break; case "lr": d = ["-x", "+x"], i = "width" } const o = r.lineHeight , l = a[i] + o , u = d[0]; if (s < 0) { let e = 0; switch (n.vertical) { case "": e = a.height - o - .05 * a.height; break; case "rl": case "lr": e = -a.width + o + .05 * a.width } t = e, d = d.reverse() } else { switch (n.vertical) { case "": t = o * Math.round(s); break; case "rl": t = a.width - o * Math.round(s); break; case "lr": t = o * Math.round(s) } Math.abs(t) > l && (t = t < 0 ? -1 : 1, t *= Math.ceil(l / o) * o) } r.move(u, t) } else { const o = "" === n.vertical ? a.height : a.width , i = r.lineHeight / o * 100; switch (n.lineAlign) { case "center": s -= i / 2; break; case "end": s -= i } switch (n.vertical) { case "": e.applyStyles({ top: e.formatStyle(s, "%") }); break; case "rl": e.applyStyles({ right: e.formatStyle(s, "%") }); break; case "lr": e.applyStyles({ left: e.formatStyle(s, "%") }) } d = ["+y", "-y", "+x", "-x"], "+y" === n.axis ? d = ["+y", "-y", "+x", "-x"] : "-y" === n.axis && (d = ["-y", "+y", "+x", "-x"]), r = new vp(e) } const l = function(r, n) { let s; for (let i = 0; i < n.length; i++) { r.moveIfOutOfBounds(a, n[i]); let e = 0 , t = !1; for (; r.overlapsAny(o) && !(9 < e); ) t ? r.move(n[i]) : (o && 0 < o.length && (s = s || { topMostBoxPosition: vp.getBoxPosition(o, "top"), bottomMostBoxPosition: vp.getBoxPosition(o, "bottom"), leftMostBoxPosition: vp.getBoxPosition(o, "left"), rightMostBoxPosition: vp.getBoxPosition(o, "right") }, vp.moveToMinimumDistancePlacement(r, n[i], s)), t = !0), e++ } return r }(r, d); e.move(l.toCSSCompatValues(a)) } } gc.BoxPosition = vp; class Sp { constructor(e, t, i=!0) { if (!e) return null; this.window = e, this.overlay = t, this.loggingEnabled = i, this.foregroundStyleOptions = { fontFamily: "Helvetica", fontSize: "36px", color: "rgba(255, 255, 255, 1)", textShadow: "", backgroundColor: "rgba(0, 0, 0, 0)" }, this.backgroundStyleOptions = { backgroundColor: "rgba(0, 0, 0, 0.5)" }, this.globalStyleCollection = {}; const r = e.document.createElement("div"); r.style.position = "absolute", r.style.left = "0", r.style.right = "0", r.style.top = "0", r.style.bottom = "0", r.style.margin = "1.5%", this.paddedOverlay = r, t.appendChild(this.paddedOverlay), this.initSubtitleCSS() } initSubtitleCSS() { var e = [new hp.VTTCue(0,0,"String to init CSS - Won't be visible to user")]; this.paddedOverlay.style.opacity = "0", this.processCues(e), this.processCues([]), this.paddedOverlay.style.opacity = "1" } convertCueToDOMTree(e) { return e ? pp.default.parseContent(this.window, e, this.globalStyleCollection) : null } setStyles(i) { function r(e, t, i) { for (const r in t) t.hasOwnProperty(r) && (!0 === i && void 0 !== e[r] || !1 === i) && (e[r] = t[r]) } for (const a in i) { let t = !1 , e = null; "::cue" === a ? (e = this.foregroundStyleOptions, t = !0) : "::-webkit-media-text-track-display" === a && (e = this.backgroundStyleOptions, t = !0); var n = i[a]; if (!0 === t) r(e, n, t); else for (let e = 0; e < fp.length; e++) { var s = fp[e].exec(a); if (s && 4 === s.length) { const i = s[2] , o = {}; r(o, n, t), this.globalStyleCollection[i] = o } } } this.initSubtitleCSS(), this.loggingEnabled && (console.log("WebVTTRenderer setStyles foregroundStyleOptions: " + JSON.stringify(this.foregroundStyleOptions)), console.log("WebVTTRenderer setStyles backgroundStyleOptions: " + JSON.stringify(this.backgroundStyleOptions)), console.log("WebVTTRenderer setStyles globalStyleCollection: " + JSON.stringify(this.globalStyleCollection))) } processCues(r) { if (r) { for (; this.paddedOverlay.firstChild; ) this.paddedOverlay.removeChild(this.paddedOverlay.firstChild); if (function(t) { for (let e = 0; e < t.length; e++) if (t[e].hasBeenReset || !t[e].displayState) return 1 }(r)) { const n = [] , s = vp.getSimpleBoxPosition(this.paddedOverlay); 1 < r.length && (r = function(t) { const i = []; let r = 0; for (let e = 0; e < t.length; e++) { var n = t[e]; if ("number" != typeof n.line) return t; r += n.line, i.push(n) } return r /= t.length, 50 < r ? (i.forEach(function(e) { e.axis = "-y" }), i.sort((e,t)=>t.line - e.line)) : (i.forEach(function(e) { e.axis = "+y" }), i.sort((e,t)=>e.line - t.line)), i }(r)); for (let i = 0; i < r.length; i++) { let e = r[i] , t = new yp(this.window,e,this.foregroundStyleOptions,this.backgroundStyleOptions,this.globalStyleCollection); this.paddedOverlay.appendChild(t.div), vp.moveBoxToLinePosition(t, s, n), e.displayState = t.div, n.push(vp.getSimpleBoxPosition(t)) } } else for (let e = 0; e < r.length; e++) this.paddedOverlay.appendChild(r[e].displayState) } } setSize(e, t) { e && (this.overlay.style.width = e + "px"), t && (this.overlay.style.height = t + "px") } getOverlay() { return this.overlay } } function bp(e) { for (var t in e) cp.hasOwnProperty(t) || (cp[t] = e[t]) } gc.default = Sp, gc.WebVTTRenderer = Sp, cp = zh, Object.defineProperty(cp, "__esModule", { value: !0 }), bp(mu), bp(gc); function Tp(e, t, i) { return e.substr(i || 0, t.length) === t } function Ep(e) { let t = 5381 , i = e.length; for (; i; ) t = 33 * t ^ e.charCodeAt(--i); return (t >>> 0).toString() } function Ip(e) { var t = Math.floor(e) , i = t + .5 , r = t + 1; return i <= e ? r - e <= e - i ? r : i : i - e <= e - t ? i : t } function wp(e, t=0, i=8589934592) { if (!Number.isFinite(t)) return e; var r = i / 2 , n = Math.abs(e - t) % i; return t + (t < e ? -1 : 1) * (r < n ? i - n : -n) } var Ap, Op, kp, Cp = function(e, t, i, r, n, s, a, o) { const d = O.utf8arrayToStr(new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g, "\n").split("\n") , l = { baseTime: Math.floor(9e4 * t.baseTime / t.timescale), timescale: 9e4 }; let u = 0 , c = 0; const h = []; let p = null , f = !0; const m = new zh.WebVTTParser(window,zh.WebVTTParser.StringDecoder(),a); m.oncue = function(e) { var t = S({ baseTime: wp(wp(u) - l.baseTime, 9e4 * i), timescale: 9e4 }); e.startTime = wp(e.startTime + t - c, 0, 95443.7176888889), e.endTime = wp(e.endTime + t - c, 0, 95443.7176888889), e.id = Ep(Ip(e.startTime).toString()) + Ep(Ip(e.endTime - e.startTime).toString()) + Ep(e.text), e.text = decodeURIComponent(encodeURIComponent(e.text)), 0 < e.endTime && h.push(e) } , m.onparsingerror = function(e) { p = e } , m.onflush = function() { p && s ? s(p) : n(h) } , d.forEach(a=>f && Tp(a, "X-TIMESTAMP-MAP=") ? (f = !1, void a.substr(16).split(",").forEach(e=>{ if (Tp(e, "LOCAL:")) { let t; try { t = (i = e.substr(6), r = parseInt(i.substr(-3)), n = parseInt(i.substr(-6, 2)), s = parseInt(i.substr(-9, 2)), i = 9 < i.length ? parseInt(i.substr(0, i.indexOf(":"))) : 0, ne(r) && ne(n) && ne(s) && ne(i) ? (r += 1e3 * n, r += 6e4 * s, r += 36e5 * i) : -1) } catch (e) { t = -1 } -1 !== t ? c = t / 1e3 : p = new Error(`Malformed X-TIMESTAMP-MAP: ${a}`) } else Tp(e, "MPEGTS:") && (u = parseInt(e.substr(7))); var i, r, n, s } )) : void m.parse(a + "\n")), m.flush() }, Dp = { newCue: function(e, t, i, r, n) { let s, a, o, d, l; var u, c, h = { foreground: !1, background: !1, italics: !1, underline: !1, flash: !1, styleStack: [] }; for ([u,c] of r.rows.entries()) if (a = !0, o = 0, d = "", !c.isEmpty()) { for (let e = 0; e < c.chars.length; e++) c.chars[e].uchar.match(/\s/) && a ? o++ : (d += this.getFormattedChar(c.chars[e], h), a = !1); (c.cueStartTime = t) === i && (i += 1e-4), d = d.trim().replace(//gi, "\n"), d += this.closeStyles(h), s = new zh.VTTCue(t,i,d), 16 <= o ? o-- : o++, l = !navigator.userAgent.match(/Firefox\//) && 7 < u ? u : u + 1, s.snapToLines = !1, s.line = 10 + 5.33 * l, s.align = "left", s.position = this.getPosition(o, n), e.addCue(s) } }, getPosition: function(e, t) { let i = 1.3333333333333333; t && t.offsetWidth && t.offsetHeight && 1.6 <= t.offsetWidth / t.offsetHeight && (i = 1.7777777777777777); let r = 10 + e / 32 * 80 , n = 10 , s = 90; return 1.7777777777777777 === i && (r = 12.5 + .75 * r, n = 20, s = 80), Math.max(n, Math.min(s, r + (navigator.userAgent.match(/Firefox\//) ? 50 : 0))) }, getRootStyleTag: function(e) { var t = e[0]; return "c" === t ? t : e }, closeStyles: function(t) { let i = ""; for (let e = t.styleStack.length - 1; 0 <= e; --e) i += "", t.styleStack.pop(); return i }, beginStyleAndBalance: function(e, t) { let i = ""; return "c" === t[0] && (i += this.closeStyleAndBalance(e, "c")), i += "<" + t + ">", e.styleStack.push(t), i }, closeStyleAndBalance: function(t, i) { var r = t.styleStack.length; let n = 0 , s = ""; for (let e = r - 1; 0 <= e; --e) { var a = t.styleStack[e] , o = this.getRootStyleTag(a); if (i[0] === a[0]) { s += "", t.styleStack.splice(r - 1 - n); break } "c" === o[0] ? (t.background = "", t.foreground = "", t.flash = !1, s += "") : "u" === o[0] ? (t.underline = !1, s += "") : "i" === o[0] && (t.italics = !1, s += ""), n++ } return s }, getFormattedChar: function(e, t) { let i = "" , r = e.uchar , n = ""; var s = e.penState.foreground !== t.foreground , a = e.penState.background !== t.background , o = e.penState.flash !== t.flash; return (s || a || o) && (n = "." + e.penState.foreground, n += ".bg_" + e.penState.background, e.penState.flash && o && (n += ".blink"), e.penState.foreground || e.penState.background || e.penState.blink ? i += this.beginStyleAndBalance(t, "c" + n) : i += this.closeStyleAndBalance(t, "c"), s && (t.foreground = e.penState.foreground), a && (t.background = e.penState.background), o && (t.flash = e.penState.flash)), e.penState.underline !== t.underline && (i += e.penState.underline ? this.beginStyleAndBalance(t, "u") : this.closeStyleAndBalance(t, "u"), t.underline = e.penState.underline), e.penState.italics !== t.italics && (i += e.penState.italics ? this.beginStyleAndBalance(t, "i") : this.closeStyleAndBalance(t, "i"), t.italics = e.penState.italics), i + r } }; (gc = Ap = Ap || {}).CloseEnough = "CloseEnough", gc.TooFar = "TooFar", gc.Unknown = "Unknown"; const Mp = e=>"cc1" === e || "cc2" === e; function Pp(t) { const i = []; for (let e = 0; e < t.length; e++) { var r = t[e]; ("captions" === r.kind || "subtitles" === r.kind || "metadata" === r.kind && r.customTextTrackCueRenderer) && i.push(r) } return i } function xp(e) { if (e && e.cues) for (; 0 < e.cues.length; ) e.removeCue(e.cues[0]) } class Rp extends Ut { constructor(e, t, i, r) { super(e=>{ const t = wc(this.hls, this); if (e.add(t.event(x.INLINE_STYLES_PARSED, this.onInlineStylesParsed).pipe($s(()=>this.destroy())).subscribe()), e.add(vn(0, this.config.trottleCheckInterval).pipe(Ra(()=>(this.checkReadyToLoadNextSubtitleFragment(), Ul))).subscribe()), this.mediaSink.textTracks && "onchange"in this.mediaSink.textTracks) { const t = wc(this.mediaSink.textTracks, this); e.add(t.event("change", this._onTextTracksChanged).subscribe()) } else e.add(vn(0, 500).pipe(Ra(()=>(this._onTextTracksChanged(), Ul))).subscribe()) } ), this.config = t, this.hls = i, this.logger = r.child({ name: "legible" }), this.mediaSink = e, this.enableCaption = !0, this.Cues = Dp, this.tracks = [], this.cueRanges = [], this.channelToTrackMap = {}, this.htmlTextTrackMap = new Map, this.lastCueEndTime = 0, this.gotTracks = !1, this.tryAgain$ = new gi(!0), this.needNextSubtitle$ = new gi(!0) } destroy() { xp(this.textTrack1), xp(this.textTrack2), this.mediaSink = void 0, this.nativeSubtitleTrackChange$ = void 0 } convertCuesIntoSubtitleFragInfo(t) { const i = {}; if (null != t && 0 < t.length) for (let e = 0; e < t.length; e++) { var r = t[e]; if (ne(r.fragSN)) { const n = i[r.fragSN]; n ? (n.count++, n.startTime = Math.min(r.startTime, n.startTime), n.endTime = Math.max(r.endTime, n.endTime)) : i[r.fragSN] = { count: 1, startTime: r.startTime, endTime: r.endTime } } } return i } checkReadyToLoadNextSubtitleFragment() { let e = !1; this.mediaSink.mediaQuery.currentTime >= this.lastCueEndTime - this.config.subtitleLeadTime && (e = !0), this.needNextSubtitle$.next(e) } checkReadyToLoadNextSubtitleFragment$() { return this.checkReadyToLoadNextSubtitleFragment(), this.needNextSubtitle$ } getNextFragment(e, t) { t = t.mediaSeqNum + 1; return t < e.fragments.length ? e.fragments[t - e.startSN] : null } calculateFragInfoMap(e, t, i, r) { var n = this.convertCuesIntoSubtitleFragInfo(t); let s = { len: 0, start: e, end: e } , a = e , o = e , d = null , l = null; for (const t in n) if (Object.prototype.hasOwnProperty.call(n, t)) { var u = Number(t); if (ne(u)) { var c = n[u]; if (this.isFragmentComplete(u, c.count, i)) if (u === r.startSN && e < c.startTime && (a = o = s.start = s.end = e = c.startTime), e >= c.startTime && (a === e || ne(d) && 1 < u - d) && (a = o = c.startTime), e >= c.startTime) o = c.endTime, d = u; else { if (!ne(d) || u - d != 1) { l = u; break } o = c.endTime, d = u } } else this.logger.warn(`$fragInfoMap has invalid key ${u}`) } return s = { len: o - a, start: a, end: o }, { fragInfoMap: n, bufferInfo: s, prevFragSN: d, nextFragSN: l } } findFrags$(t, i) { return this.tryAgain$.pipe(Hi(Zi), Ra(()=>{ var e = this.findFragmentsForPosition(this.mediaSink.mediaQuery.currentTime, i, t); return e.foundFrags ? (this.lastCueEndTime = 0, this.needNextSubtitle$.next(!0), Bi(e)) : Ti } )) } reviewParsedFrag(e, i, r) { var n = e.frag , s = e.cueRange , t = i.subtitleBufferInfo , a = i.subtitleParsedInfo , o = this.mediaSink.mediaQuery.currentTime , e = i.foundFrags; let d = !0; if (n.mediaSeqNum === e[0].mediaSeqNum) { if (!i.timelineEstablished) return Ap.TooFar; if (!s) return this.logger.warn(`[subtitle] 1st frag sn ${n.mediaSeqNum} has no cue; details ${r.fragments.length} frags`), Ap.Unknown; if (s.startTime < o) { const l = r.fragments , i = n.mediaSeqNum - r.startSN; let e = i , t = s.startTime; for (; e < l.length && (t += l[e].duration, !(t >= o)); ++e) ; d = e - i + 1 <= this.config.earlyFragTolerance } else if (s.startTime > o && n.mediaSeqNum !== r.startSN) { const l = t.prevFragSN; if (n.mediaSeqNum === l + 1 && (null === (t = t.fragInfoMap[l]) || void 0 === t ? void 0 : t.count) === (null === (a = a[l]) || void 0 === a ? void 0 : a.count)) d = !0; else { const l = r.fragments[n.mediaSeqNum - r.startSN - 1]; d = s.startTime - o < l.duration } } } return d ? Ap.CloseEnough : Ap.TooFar } isFragmentComplete(e, t, i) { e = i ? i[e] : null; return (null == e ? void 0 : e.count) === t } getEarlierFragmentInSameDisco(e, t, i) { var r = t.mediaSeqNum - e.startSN - 1; if (r < 0 || r > e.fragments.length - 1) return this.logger.error(`[subtitle] getEarlierFragmentInSameDisco index ${r} out of range`), t; r = e.fragments[r]; return r && r.discoSeqNum === t.discoSeqNum && !i[t.mediaSeqNum] ? r : t } inferSubtitleFragmentForPosition(i, r, t, e, n) { let s, a, o, d, l; if (ne(e.prevFragSN) && (a = e.prevFragSN - n.startSN, o = t[e.prevFragSN]), ne(e.nextFragSN) && (d = e.nextFragSN - n.startSN, l = t[e.nextFragSN]), ne(a) && 0 <= a && a < n.fragments.length && o) { let t = o.startTime; for (let e = a; e < n.fragments.length; ++e) { const o = n.fragments[e]; if (!ne(r) || o.discoSeqNum === r) { if (t + o.duration > i && e > a) { s = { foundFrag: o, timelineEstablished: !0 }; break } t += o.duration } } } else if (ne(d) && 0 <= d && d < n.fragments.length && l) { let t = l.startTime; for (let e = d - 1; 0 <= e; --e) { const a = n.fragments[e]; if (!ne(r) || a.discoSeqNum === r) { if (t <= i) { s = { foundFrag: a, timelineEstablished: !0 }; break } t -= a.duration } } } else for (let e = 0; e < n.fragments.length; ++e) { const t = n.fragments[e]; if (ne(r) && t.discoSeqNum === r) { s = { foundFrag: t, timelineEstablished: !1 }; break } } return s } generateFragmentBatch(t, i, e, r, n, s) { var a; const o = [] , d = null == e ? void 0 : e.foundFrag; if (!d) return { foundFrags: void 0, subtitleParsedInfo: void 0, subtitleBufferInfo: void 0, timelineEstablished: null == e ? void 0 : e.timelineEstablished }; for (let e = d ? d.mediaSeqNum - s.startSN : s.fragments.length; e < s.fragments.length && o.length < t; ++e) { const t = s.fragments[e]; if (t.discoSeqNum === i) { const d = null === (a = n.fragInfoMap[t.mediaSeqNum]) || void 0 === a ? void 0 : a.count; this.isFragmentComplete(t.mediaSeqNum, null != d ? d : 0, r) || o.push(t) } } return { foundFrags: o, subtitleParsedInfo: r, subtitleBufferInfo: n, timelineEstablished: null == e ? void 0 : e.timelineEstablished } } findFragmentsForPosition(e, t, i) { var r = this.mediaSink.mediaQuery.getParsedSubtitleRecordsForMediaOption(this.selectedTrack.persistentID) , n = this.getCuesOfEnabledTrack(this.selectedMediaOption.mediaOptionId, !1) , s = this.calculateFragInfoMap(e, n, r, i) , n = s.bufferInfo , n = Math.max(e, n.end) , n = this.inferSubtitleFragmentForPosition(n, t, r, s, i); return this.generateFragmentBatch(1 / 0, t, n, r, s, i) } get selectedMediaOption() { return this.selectedTrack || this._disabledMediaOption } set selectedMediaOption(e) { this.selectedTrack = "groupId"in e ? e : void 0 } get selectedTrack() { return this._selectedMediaOption } set selectedTrack(e) { e !== this._selectedMediaOption && (this._selectedMediaOption = e, this.updateTextTrackState()) } getTrack(t) { return this._availableMediaOptions.find(e=>e.mediaOptionId === t) } updateTextTrackState() { if (this.mediaSink.textTracks) { const i = this.selectedTrack ? this.getExistingHTMLTextTrack(this.selectedTrack) : void 0 , r = Pp(this.mediaSink.textTracks); for (let e = 0; e < r.length; e++) { var t = r[e]; t === i && "showing" !== r[e].mode ? r[e].mode = "showing" : t !== i && "hidden" !== r[e].mode && (r[e].mode = "hidden") } } } mapHTMLTextTrackIndexToMediaOptionId(e) { const i = this.mediaSink.textTracks[e]; let r; return this.htmlTextTrackMap.forEach((e,t)=>{ i === e && (r = t) } ), r } get mediaSelectionOptions() { return this._availableMediaOptions } _makeDisableOption(e) { return { itemId: e.itemId, mediaOptionType: e.mediaOptionType, mediaOptionId: "Nah" } } _onTextTracksChanged() { if (this.mediaSink) { let t, i = !1; const r = Pp(this.mediaSink.textTracks); for (let e = 0; e < r.length; e++) r[e].seen ? "showing" === r[e].mode && (t = r[e].persistentId) : (r[e].seen = !0, i = !0); if (!i) { const e = this.selectedTrack; if ((null == e ? void 0 : e.persistentID) !== t) { const e = this.mediaSelectionOptions.find(function(e) { return e.persistentID === t }); this.nativeSubtitleTrackChange$.next(e || this._disabledMediaOption) } } } } addCues(e, t, i, r) { const n = this.cueRanges; let s = !1; for (let e = n.length; e--; ) { const r = n[e] , l = (a = r[0], o = r[1], d = t, Math.min(o, i) - Math.max(a, d)); if (0 <= l && (r[0] = Math.min(r[0], t), r[1] = Math.max(r[1], i), s = !0, .5 < l / (i - t))) return } var a, o, d; s || n.push([t, i]), this.Cues.newCue(this.channelToTrackMap[e], t, i, r, this.mediaSink) } getExistingHTMLTextTrackWithChannelNumber(t) { var i = this.mediaSink; if (i) for (let e = 0; e < i.textTracks.length; e++) { var r = i.textTracks[e] , n = "cc" + t; if (Mp(n) && !0 === r[n]) return r } return null } sendAddTrackEvent(e, t) { let i = null; try { i = new window.Event("addtrack") } catch (e) { i = document.createEvent("Event"), i.initEvent("addtrack", !1, !1) } i.track = e, t.dispatchEvent(i) } createHTMLCaptionsTrackGuts(e, t, i, r) { var n = "cc" + e; if (!this.channelToTrackMap[n]) { e = this.getExistingHTMLTextTrackWithChannelNumber(e); if (e) this.channelToTrackMap[n] = e, xp(this.channelToTrackMap[n]), this.sendAddTrackEvent(this.channelToTrackMap[n], this.mediaSink); else { const s = this.createHTMLTextTrackGuts("captions", t, i, r); s && Mp(n) && (s[n] = !0, this.channelToTrackMap[n] = s) } } return this.channelToTrackMap[n] } createHTMLCaptionsTrack(e) { return this.createHTMLCaptionsTrackGuts(e, this.config[1 === e ? "captionsTextTrack1Label" : "captionsTextTrack2Label"], this.config.captionsTextTrack1LanguageCode, !1) } getExistingHTMLTextTrack(e) { return this.config.condenseSubtitleTrack ? this.htmlTextTrackMap.get(e.persistentID) : this.htmlTextTrackMap.get(e.id) } getExistingHTMLTextTrackWithSubtitleTrackId(t) { var e = this._availableMediaOptions.find(e=>e.id === t); return e ? this.getExistingHTMLTextTrack(e) : void 0 } getExistingHTMLTextTrackIndex(e) { var t = this.getExistingHTMLTextTrack(e) , i = this.mediaSink.textTracks; let r = -1; for (let e = 0; e < i.length; ++e) if (i[e] === t) { r = e; break } return r } setExistingHTMLTextTrack(e, t) { return t.persistentId = e.persistentID, this.config.condenseSubtitleTrack ? this.htmlTextTrackMap.set(e.persistentID, t) : this.htmlTextTrackMap.set(e.id, t) } createHTMLTextTrack(t) { let i = this.getExistingHTMLTextTrack(t); if (!i) { if ("sbtl" === t.mediaType) i = this.createHTMLTextTrackGuts("subtitles", t.name, t.lang, t.forced); else { let e = 1; t.inStreamID && (e = Number(t.inStreamID.substring(2))), i = this.createHTMLCaptionsTrackGuts(e, t.name, t.lang, !1) } i ? this.setExistingHTMLTextTrack(t, i) : this.logger.error(`failed to create HTML text track for track ${t.id}: persistent id ${t.persistentID} name ${t.name} lang ${t.lang} inStreamID ${t.inStreamID}`) } return i } createHTMLTextTrackGuts(t, i, r, e) { const n = this.mediaSink; if (n) { let e = !1; "metadata" !== t && this.config.customTextTrackCueRenderer && (e = !0, t = "metadata"); const s = n.addTextTrack(t, i, r); return e && (s.customTextTrackCueRenderer = !0), s } } resetLoadSource() { this.resetTracks() } resetTracks() { this._cleanTracks(), this.cueRanges = [] } _cleanTracks() { var e = this.mediaSink; if (e) { var t = e.textTracks; if (t) for (let e = 0; e < t.length; e++) xp(t[e]) } } getCuesOfEnabledTrack(e, t=!1) { let i = []; if (t) { const t = this._getCuesOfEnabledTrack(e); for (let e = 0; e < t.length; e++) { var r = t[e]; Boolean(r.webVTTCue) && i.push(r) } } else i = this._getCuesOfEnabledTrack(e); return i } _getCuesOfEnabledTrack(e) { e = this.getTrack(e), e = this.config.condenseSubtitleTrack ? null == e ? void 0 : e.persistentID : null == e ? void 0 : e.id, e = this.htmlTextTrackMap.get(e); return e && e.cues ? Array.from(e.cues) : [] } attachSubtitleTracks() { this.gotTracks && this.tracks.forEach(e=>{ this.createHTMLTextTrack(e) } ) } attachId3Tracks() { this.id3Track = this.mediaSink.addTextTrack("metadata", "id3"), this.id3Track.mode = "hidden" } setTracks(e, t, i) { this._cleanTracks(), this.htmlTextTrackMap = new Map, this.cueRanges = [], this.config.enableWebVTT && (this.tracks = e || []), this.gotTracks = !0, this._availableMediaOptions = e, this._disabledMediaOption = i, this.attachSubtitleTracks(), this.attachId3Tracks(), this.selectedTrack = t, this.nativeSubtitleTrackChange$ = new zt, this.mediaSink.textTracksCreated = !0 } onInlineStylesParsed(e) {} processSubtitleFrag(e, t, i, r) { var n = new Uint8Array(r) , e = this.getExistingHTMLTextTrackIndex(e); if (t && r.byteLength) { const s = this._parseVTTs(e, t, i, n); return s && (this.lastCueEndTime = Math.max(this.lastCueEndTime, s.endTime)), s } } _parseVTTs(r, n, e, t) { let s; return Cp(t, e, n.start, n.discoSeqNum, e=>{ const t = this.mediaSink.textTracks[r] , i = { count: 0, startTime: Number.POSITIVE_INFINITY, endTime: 0 }; e.map(e=>{ !t || t.cues && t.cues.getCueById(e.id) || (e.fragSN = n.mediaSeqNum, e.webVTTCue = !0, t.addCue(e), i.count++), i.startTime = Math.min(e.startTime, i.startTime), i.endTime = Math.max(e.endTime, i.endTime) } ), ne(i.startTime) && (s = i, this.mediaSink.archiveParsedSubtitleFragmentRecord(this.selectedTrack.persistentID, n.mediaSeqNum, i)) } , e=>{} , e=>{ this.hls.trigger(x.INLINE_STYLES_PARSED, { styles: e }) } , this.logger), s } _ensureParser() { var e, t; this.cea608Parser || (e = new Wh(this,1), t = new Wh(this,2), this.cea608Parser = new Gh(0,e,t)) } anchorTimeChanged() { this.resetClosedCaptionParser() } resetClosedCaptionParser() { var e; null === (e = this.cea608Parser) || void 0 === e || e.reset() } addLegibleSamples(e, t, i, r) { t && this.addClosedCaptionSamples(e, t), i && 0 < i.length && this.addId3Samples(e, i, S(r)) } addClosedCaptionSamples(e, t) { t.mp4 ? this.addMP4CaptionSamples(e, t.mp4) : t.ts && this.addTSCaptionSamples(e, t.ts) } addMP4CaptionSamples(e, i) { if (this.enableCaption && this.config.enableCEA708Captions) { var r = S(e); this._ensureParser(); for (let e = 0; e < i.length; e++) { let t = i[e].pts - r; var n = i[e].bytes; for (let e = 0; e < n.length; e += 2) { const i = []; i.push(n[e]), e + 1 < n.length ? i.push(n[e + 1]) : i.push(80), this.cea608Parser.addData(t, i), t += .03336666666666667 } } } } addTSCaptionSamples(e, t) { if (this.enableCaption && this.config.enableCEA708Captions) { var i = S(e); this._ensureParser(); for (let e = 0; e < t.length; e++) { var r = t[e].pts - i , n = Rp.extractCea608Data(t[e].bytes); this.cea608Parser.addData(r, n) } } } addId3Samples(e, t, r) { if (this.config.enableID3Cues) { const n = window.WebKitDataCue || window.VTTCue || window.TextTrackCue , s = S(e); for (let e = 0; e < t.length; e++) { const a = t[e].pts - s; let i = (e < t.length - 1 ? t[e + 1].pts : r) - s; a === i && (i += 1e-4), t[e].frames && t[e].frames.forEach(e=>{ if (e && !this.id3shouldIgnore(e)) { const t = new n(a,i,""); t.value = e, this.id3Track.addCue(t) } } ) } } } id3shouldIgnore(e) { return "PRIV" === e.key && ("com.apple.streaming.transportStreamTimestamp" === e.info || "com.apple.streaming.audioDescription" === e.info) } static extractCea608Data(t) { var i = 31 & t[0]; let r, n, s, a = 2; const o = []; for (let e = 0; e < i; e++) r = t[a++], n = 127 & t[a++], s = 127 & t[a++], 0 == n && 0 == s || 0 != (4 & r) && 0 == (3 & r) && (o.push(n), o.push(s)); return o } } const Lp = { name: "plist" }; class _p { constructor(e, t, i, r) { this.config = e, this.xhrLoader = t, this.customUrlLoader = i, this.sessionDataCheckForCompleteness = e=>{ const t = this.config["sessionDataAutoLoad"] , i = Object.assign({}, e); return e.complete || (e.itemList ? i.complete = e.itemList.every(e=>t[e["DATA-ID"]] && !e.VALUE && !e._STATUS && e.URI ? (this.logger.warn(`Incomplete because ${e["DATA-ID"]} was autoloaded but no response yet`), !1) : (t[e["DATA-ID"]] && !e.URI && this.logger.warn(`id=${e["DATA-ID"]} missing uri`), !0)) : this.logger.warn("Uninitialized SessionData")), i } , this.logger = r.child({ name: "SessionDataLoader" }) } loadSessionData(r) { const n = this.config["sessionDataAutoLoad"] , t = r.itemList || []; let s = Bi(r); return t.forEach(e=>{ const i = e["DATA-ID"] , t = e.URI; if (t && n[i]) { const n = fl.buildAbsoluteURL(r.baseUrl, t, { alwaysNormalize: !0 }) , e = ""; s = s.pipe(Ra(t=>this.loadSessionDataItemWithUrl(n, i, "", this.config, t, this.xhrLoader, this.customUrlLoader).pipe(Un(e=>(this.logger.error(`Error loading SessionData > url=${n}, id=${i}, err=${e}`), Bi(t)))))) } } ), s.pipe(ur(e=>{ if (t.length < 1) return e; e = this.sessionDataCheckForCompleteness(e); if (e.complete) return e; throw new V(!1,"Session data not complete after loading all items",$.IncompleteSessionData) } ), $s(()=>{} )) } loadSessionDataItemWithUrl(e, t, i, r, n, s, a) { const o = qe() , d = { url: e, method: "GET", responseType: i, xhrSetup: r.xhrSetup, mimeType: "application/xml" } , l = xc({ url: e }, r.fragLoadPolicy); let u; return u = ml(e) ? a(d, l).pipe(ur(e=>this.onLoadSuccess(n, t, e.data.response.data, e.data.response.data))) : s(d, l).pipe(ur(([e])=>this.onLoadSuccess(n, t, e.response, e.responseXML))), u.pipe(Un(e=>(e instanceof or ? e = new su(!1,e.message,0,$.SessionDataLoadTimeout) : e instanceof tu && (e = new su(!1,e.message,e.code,{ code: e.code, text: "Failed to load SessionData" })), o.error(`Unable to load SessionData > err=${e}`), Bi(this.onLoadError(n, t, e))))) } onLoadSuccess(e, t, i, r) { let n = null , s = e; if (function(e) { const t = /[\s]*<\?xml/i; t.lastIndex = 0; var i = t.exec(e); return i || /[\s]*"), null) } else if ("string" === i) { const e = a[0]; s = e ? e.nodeValue : null } else if ("integer" === i) { const e = a[0]; s = e ? parseInt(e.nodeValue) : 0 } else if ("float" === i) { const e = a[0]; s = e ? parseFloat(e.nodeValue) : 0 } else if ("date" === i) { const e = a[0]; s = e ? new Date(e.nodeValue) : null } else if ("data" === i) { const e = a[0]; s = e ? atob(e.nodeValue) : null } else "true" === i ? s = !0 : "false" === i && (s = !1) } else if (a.length < 1) t.warn(Lp, `unknown node with unknown value > nodeType=${e.nodeType} tagName=${e.tagName} nodeName=${e.nodeName} value=${e.nodeValue}`); else { s = []; for (let e = 0; e < a.length; ++e) { const r = a[e]; r.tagName && s.push(n(r)) } 1 === s.length && (s = s[0]) } return s }(n); s = this.setSessionData(e, t, "VALUE", i) } else if (function(e) { const t = /[\s]*[\{\[]/; return t.lastIndex = 0, t.exec(e) }(i)) try { const r = JSON.parse(i); s = this.setSessionData(e, t, "VALUE", r) } catch (r) { this.logger.error(`JSON parser error: ${r}`), s = this.setSessionData(e, t, "VALUE", i), s = this.setSessionData(s, t, "_STATUS", -1) } else s = this.setSessionData(e, t, "VALUE", i); return s } setSessionData(t, i, r, n) { let s = t; if (t.itemList) { let e; const a = [...t.itemList]; for (e = 0; e < t.itemList.length; ++e) { const t = Object.assign({}, a[e]); if (t["DATA-ID"] === i) { t[r] = n, a[e] = t; break } } e === t.itemList.length && this.logger.error(`Can't set ${r} of session data ${i}`), s = Object.assign(Object.assign({}, t), { itemList: a }) } else this.logger.error(`Can't set ${r} on uninitialized session data`); return s } onLoadError(e, t, i) { return this.setSessionData(e, t, "_STATUS", null === (i = i.response) || void 0 === i ? void 0 : i.code) } } function Np(e) { return null != e && "iframeMediaDuration"in e && "iframeMediaStart"in e } function Fp(e, t) { return e === t || e && t && e.itemId === t.itemId && e.mediaOptionId === t.mediaOptionId && e.mediaSeqNum === t.mediaSeqNum && e.discoSeqNum === t.discoSeqNum } function Bp(e) { return JSON.stringify(e, ["mediaOptionId", "mediaSeqNum", "discoSeqNum", "start", "duration"]) } function Up() { return e=>e.pipe(an(e=>null != e), ur(e=>e)) } function $p(e) { return Se.isDolby(e) ? al.DOVI : Se.isHEVC(e) ? al.HEVC : Se.isVP09(e) ? al.VP09 : Se.isAVC(e) ? al.AVC : al.UNKNOWN } function Vp(e) { return null == e ? void 0 : e.split(".")[0] } function Kp(e) { return Se.isALAC(e) ? dl.ALAC : Se.isFLAC(e) ? dl.FLAC : Se.isEC3(e) ? dl.EC3 : Se.isAC3(e) ? dl.AC3 : Se.isXHEAAC(e) ? dl.XHEAAC : Se.isAAC(e) ? dl.AAC : Se.isMP3(e) ? dl.MP3 : dl.UNKNOWN } class Hp { constructor(...e) { this.identifier = e } ensureSameIdentifierLength(e) { if (this.identifier.length !== e.identifier.length) throw new Error(`Identifiers have non-matching lengths! (${this.identifier.length} vs ${e.identifier.length})`) } isGreaterThan(t) { this.ensureSameIdentifierLength(t); for (let e = 0; e < this.identifier.length; ++e) { if (this.identifier[e] < t.identifier[e]) return !1; if (this.identifier[e] > t.identifier[e]) return !0 } return !1 } isEqualTo(i) { return this.ensureSameIdentifierLength(i), this.identifier.every((e,t)=>e === i.identifier[t]) } } function jp(e) { return ne(e) && 0 !== e && 1 !== e } const qp = { isBuffered(t, i) { for (let e = 0; t && e < t.length; e++) if (i >= t.start(e) && i <= t.end(e)) return !0; return !1 }, timeRangesToBufferedRange(t) { const i = []; for (let e = 0; t && e < t.length; e++) i.push({ start: t.start(e), end: t.end(e) }); return i }, subtitleBufferInfo(e, t, i) { if (e) { e = this.bufferedCues(e); return this.getBufferedInfo(e, t, i) } return { len: 0, start: t, end: t, nextStart: void 0 } }, fragmentsBufferedInfo(e, t, i) { const r = []; for (const t of e) r.push({ start: t.start, end: t.start + t.duration }); return this.getBufferedInfo(r, t, i) }, bufferedCues(t) { const i = []; if (t) for (let e = 0; e < t.length; e++) i.push({ start: t[e].startTime, end: t[e].endTime }); return i }, bufferedInfoFromMedia: (e,t,i)=>qp.getBufferedInfo(qp.timeRangesToBufferedRange(e.buffered), t, i), getBufferedInfo(e, t, i) { const r = []; let n, s, a, o, d; const l = e.map(({start: e, end: t})=>({ start: e, end: t })); for (l.sort((e,t)=>{ return e.start - t.start || t.end - e.end } ), d = 0; d < l.length; d++) { const e = r.length; if (e) { const t = r[e - 1].end; l[d].start - t < i ? l[d].end > t && (r[e - 1].end = l[d].end) : r.push(l[d]) } else r.push(l[d]) } for (d = 0, n = 0, s = a = t; d < r.length; d++) { const e = r[d]["start"] , l = r[d]["end"]; if (t + i >= e && t < l) s = e, a = l, n = a - t; else if (t + i < e) { o = e; break } } return { len: n, start: s, end: a, nextStart: o } }, toRangeString: e=>`[${e.start.toFixed(3)},${e.end.toFixed(3)}]` }; (gc = Op = Op || {}).Seek = "Seek", gc.HighBuffer = "HighBuffer", gc.LowBuffer = "LowBuffer", (gc = kp = kp || {}).AlmostDry = "AlmostDry", gc.LowWater = "LowWater", gc.HighWater = "HighWater", gc.AboveHighWater = "AboveHighWater"; const Qp = { [kp.AlmostDry]: 0, [kp.LowWater]: 1, [kp.HighWater]: 2, [kp.AboveHighWater]: 3 }; function Gp(t, e) { return [{ threshold: e.highWaterLevelSeconds, level: kp.HighWater }, { threshold: e.lowWaterLevelSeconds, level: kp.LowWater }, { threshold: e.almostDryWaterLevelSeconds, level: kp.AlmostDry }].find(({threshold: e})=>e < t) } function Wp(t, e) { return [{ threshold: e.almostDryWaterLevelSeconds, level: kp.AlmostDry }, { threshold: e.lowWaterLevelSeconds, level: kp.LowWater }, { threshold: e.highWaterLevelSeconds, level: kp.HighWater }, { threshold: 1 / 0, level: kp.AboveHighWater }].find(({threshold: e})=>t <= e) } function zp(t, i) { const e = Wp(t.getCurrentWaterLevel(i), t.bufferMonitorInfo).level , r = [null, null]; return [cl.Variant, cl.AltAudio].forEach(e=>{ null != t.sourceBufferEntityByType(e) && (r[e] = Wp(t.getCurrentWaterLevelByType(e, i), t.bufferMonitorInfo).level) } ), { combined: e, sbTuple: r } } function Xp(s, a) { return Zd([s.combinedBuffer$, s.gotPlaying$, s.seeking$, s.waterLevelChangedForType$(null), s.stallInfo$]).pipe(Ra(([e,t,i,r,n])=>0 === e.length || !t || i || null == r || null != n ? Ti : function t(i, r, e) { const n = i.getCurrentWaterLevel(r) , s = Gp(n, i.bufferMonitorInfo); if (s) { const e = s["threshold"]; return vn(Math.ceil(1e3 * (n - e))).pipe(Ra(()=>{ const e = Gp(i.getCurrentWaterLevel(r), i.bufferMonitorInfo); return (null == e ? void 0 : e.level) === s.level ? t(i, r) : Ul } ), ur(()=>zp(i, r))) } return Ti }(s, a))) } class Yp extends Od { constructor(e, t) { super(t), this.mediaElement = e } get mediaElementDuration$() { return this.selectActive(({mediaElementDuration: e})=>e) } get mediaElementDuration() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.mediaElementDuration) && void 0 !== e ? e : 1 / 0 } get msDuration() { var e; return null !== (e = null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.duration) && void 0 !== e ? e : 1 / 0 } get minSBDuration() { var e; let t = 1 / 0; return null === (e = null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e || e.forEach(e=>{ return t = Math.min(t, null !== (e = null == e ? void 0 : e.totalDuration) && void 0 !== e ? e : 1 / 0) } ), t } get currentTime() { return this.mediaElement.currentTime } get clientWidth() { return this.mediaElement.clientWidth } get clientHeight() { return this.mediaElement.clientHeight } getBufferedDuration(e=.5) { var t = qp.timeRangesToBufferedRange(this.mediaElement.buffered) , e = qp.getBufferedInfo(t, this.currentTime, e); return e.end - e.start } get mediaSourceEntity() { var e; return null === (e = this.getActive()) || void 0 === e ? void 0 : e.mediaSourceEntity } get msReadyState() { var e; return null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.readyState } get sourceBufferEntities() { var e; return null === (e = this.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities } sourceBufferEntityByType(e) { var t; return null === (t = this.sourceBufferEntities) || void 0 === t ? void 0 : t[e] } initSegmentEntityByType(e) { return null === (e = this.sourceBufferEntityByType(e)) || void 0 === e ? void 0 : e.initSegmentInfo } get maxBufferSize() { var e = null === (e = this.sourceBufferEntities) || void 0 === e ? void 0 : e[cl.Variant]; let t = 1 / 0; return null != e && e.gotQuotaExceeded && (t = null !== (e = e.maxTotalBytes) && void 0 !== e ? e : 1 / 0), t } get autoPausedRestartTime() { return this.getActive().autoPausedRestartTime } get seekable() { return this.mediaElement.seekable } get desiredRate() { var e; return (null === (e = this.getActive()) || void 0 === e ? void 0 : e.desiredRate) || 0 } get desiredRate$() { return this.selectActive(({desiredRate: e})=>null != e ? e : 0) } get effectiveRate() { return this.isIframeRate ? this.desiredRate : this.paused ? 0 : 1 } get playbackRate() { return this.mediaElement.playbackRate } get isIframeRate() { return jp(this.desiredRate) } get isIframeRate$() { return this.desiredRate$.pipe(ur(jp)) } get msObjectUrl$() { return this.selectActive(({mediaSourceEntity: e})=>null == e ? void 0 : e.objectUrl).pipe(Es()) } get msReadyState$() { return this.selectActive(({mediaSourceEntity: e})=>{ return null !== (e = null == e ? void 0 : e.readyState) && void 0 !== e ? e : null } ) } get readyState() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.readyState) && void 0 !== e ? e : 0 } get readyState$() { return this.selectActive(({readyState: e})=>null != e ? e : 0) } get mediaSourceEntity$() { return this.selectActive(({mediaSourceEntity: e})=>e) } get expectedSbCount$() { return this.selectActive(({expectedSbCount: e})=>e) } get expectedSbCount() { var e; return null === (e = this.getActive()) || void 0 === e ? void 0 : e.expectedSbCount } get paused$() { return this.selectActive(({paused: e})=>e) } get paused() { var e; return null === (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.paused) || void 0 === e || e } get flushing$() { return this.selectActive(({flushing: e})=>e) } get flushing() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.flushing) && void 0 !== e && e } get waitingForDisco$() { return this.selectActive(({waitingForDisco: e})=>e) } get waitingForDisco() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.waitingForDisco) && void 0 !== e && e } get gotPlaying() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.gotPlaying) && void 0 !== e && e } get gotPlaying$() { return this.selectActive(({gotPlaying: e})=>e) } get gotLoadStart$() { return this.selectActive(({gotLoadStart: e})=>e) } get seekTo() { var e; return null === (e = this.getActive()) || void 0 === e ? void 0 : e.seekTo } get seekTo$() { return this.selectActive(({seekTo: e})=>e) } get seeking() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.seeking) && void 0 !== e && e } get seeking$() { return this.selectActive(({seeking: e})=>e) } get nudgeTarget$() { return this.selectActive(({nudgeInfo: e})=>null == e ? void 0 : e.nudgeTarget) } get nudgeCount() { var e; return null !== (e = null === (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.nudgeInfo) || void 0 === e ? void 0 : e.nudgeCount) && void 0 !== e ? e : 0 } get sourceBufferEntities$() { return this.selectActive(({mediaSourceEntity: e})=>null == e ? void 0 : e.sourceBufferEntities) } sourceBufferEntityByType$(t) { return this.selectActive(({mediaSourceEntity: e})=>{ return null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t] } ) } bufferedSegmentsByType$(t) { return this.selectActive(({mediaSourceEntity: e})=>{ return null !== (e = null === (e = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t]) || void 0 === e ? void 0 : e.bufferedSegments) && void 0 !== e ? e : [] } ) } getBufferedSegmentsByType(e) { return null !== (e = null === (e = this.sourceBufferEntityByType(e)) || void 0 === e ? void 0 : e.bufferedSegments) && void 0 !== e ? e : [] } get bufferedSegmentsTuple$() { return Zd([this.bufferedSegmentsByType$(cl.Variant), this.bufferedSegmentsByType$(cl.AltAudio)]).pipe(Hi(Zi), wa(), Qn(10)) } get timeupdate$() { return wc(this.mediaElement).event("timeupdate").pipe(Hi(Zi), wa(), so(125), ur(e=>this.currentTime), an(e=>ne(e))) } get playingEvent$() { return wc(this.mediaElement).event("playing").pipe(ur(()=>{} )) } get mediaElementEntity$() { return this.selectActive(e=>Boolean(e)) } get ended$() { return this.selectActive(e=>{ return null !== (e = null == e ? void 0 : e.ended) && void 0 !== e && e } ) } sbUpdating$(t) { return this.selectActive(e=>{ return null !== (e = null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t]) || void 0 === e ? void 0 : e.updating) && void 0 !== e && e } ) } sbUpdating(e) { var t; return null !== (e = null === (e = null === (t = null === (t = null === (t = this.getActive()) || void 0 === t ? void 0 : t.mediaSourceEntity) || void 0 === t ? void 0 : t.sourceBufferEntities) || void 0 === t ? void 0 : t[e]) || void 0 === e ? void 0 : e.updating) && void 0 !== e && e } sbError$(t) { return this.selectActive(e=>{ return null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[t]) || void 0 === e ? void 0 : e.error } ) } get updating$() { return Zd([this.sbUpdating$(cl.Variant), this.sbUpdating$(cl.AltAudio)]).pipe(ur(e=>e.some(e=>e))) } get bufferedRangeTuple$() { return Zd([this.selectActive(e=>{ return null !== (e = null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[ul.Variant]) || void 0 === e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : null } ), this.selectActive(e=>{ return null !== (e = null === (e = null === (e = null === (e = null == e ? void 0 : e.mediaSourceEntity) || void 0 === e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[ul.AltAudio]) || void 0 === e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : null } )]) } getBufferedRangeByType(e) { return null !== (e = null === (e = this.sourceBufferEntities[e]) || void 0 === e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : [] } get combinedBuffer$() { return this.selectActive(e=>{ return null !== (e = null == e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : [] } ) } getBufferInfo(n, s) { var e; const t = null === (e = this.sourceBufferEntities) || void 0 === e ? void 0 : e.map(e=>null == e ? void 0 : e.bufferedRanges) , i = { buffered: { start: n, end: n, len: 0 }, bufferedSegments: [] } , a = [i, i]; return t && t.forEach((e,t)=>{ if (e) { const i = qp.getBufferedInfo(e, n, s) , r = (null !== (e = this.sourceBufferEntities[t].bufferedSegments) && void 0 !== e ? e : []).filter(e=>!(e.endPTS < i.start || e.startPTS > i.end)); a[t] = { buffered: i, bufferedSegments: r } } } ), a } getCombinedBufferInfo(e, t) { var i = this.getActive(); return i ? qp.getBufferedInfo(i.bufferedRanges, e, t) : null } get bufferMonitorInfo() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.bufferMonitorInfo) && void 0 !== e ? e : null } get bufferMonitorThresholds$() { return this.selectActive(e=>{ var t = null == e ? void 0 : e.bufferMonitorInfo; if (!t) return null; var {almostDryWaterLevelSeconds: i, lowWaterLevelSeconds: r, highWaterLevelSeconds: e, maxBufferSeconds: t} = t; return { almostDryWaterLevelSeconds: i, lowWaterLevelSeconds: r, highWaterLevelSeconds: e, maxBufferSeconds: t } } ).pipe(Es((e,t)=>(null == e ? void 0 : e.lowWaterLevelSeconds) === (null == t ? void 0 : t.lowWaterLevelSeconds))) } get waterLevelType$() { return this.selectActive(e=>{ return null !== (e = null == e ? void 0 : e.bufferMonitorInfo.waterLevelType) && void 0 !== e ? e : null } ) } waterLevelForType(e) { var t; return null !== (e = null === (t = null === (t = this.getActive()) || void 0 === t ? void 0 : t.bufferMonitorInfo.waterLevelType) || void 0 === t ? void 0 : t.sbTuple[e]) && void 0 !== e ? e : null } waterLevelChangedForType$(t) { return this.waterLevelType$.pipe(ur(e=>null == e ? null : null == t ? e.combined : e.sbTuple[t])) } get fellBelowLowWater$() { return this.waterLevelChangedForType$(cl.Variant).pipe(ca(), ur(([e,t])=>function(e, t) { return Qp[e] > Qp[t] }(e, t) && (t === kp.LowWater || t === kp.AlmostDry)), So(this.seekTo$, this.waitingForDisco$), ur(([e,t,i])=>e && !ne(null == t ? void 0 : t.pos) && !i), xa(!1)) } isBufferedToEnd$(r, n=!0) { return Zd([this.combinedBuffer$, this.selectActive(e=>e.bufferMonitorInfo).pipe(Up(), ur(e=>Math.max(e.almostDryWaterLevelSeconds, e.lowWaterLevelSeconds / 2))), this.seeking$]).pipe(ur(([e,t])=>{ if (!e || !ne(this.minSBDuration) && n) return !1; e = qp.getBufferedInfo(e, this.currentTime, r).end; let i = this.mediaElementDuration; return n && (i = Math.min(this.mediaElementDuration, this.minSBDuration)), i - e <= t } ), Es()) } needData$(e, r=!1, t) { var i = !r; return Zd([this.msReadyState$, this.waterLevelChangedForType$(null), this.isBufferedToEnd$(e, i), this.bufferedRangeTuple$]).pipe(Hi(Zi), Qn(10), wa(), ur(([e,t,i])=>"closed" !== e && (!!r || null == t || !i && t !== kp.AboveHighWater)), Ql.tag("needData")) } getSourceBufferInfoAction(e, t, i, r) { var {currentTime: n, sourceBufferEntities: s, msReadyState: a} = this; let o = [null, null]; return !e && i.every(e=>!(null != e && e.userInitiated)) ? null : "open" === a && s && null != s[0] ? (o = this.getBufferInfo(n, r), { position: n, bufferInfoTuple: o, switchContexts: i }) : { position: t, bufferInfoTuple: o, switchContexts: i } } get haveEnough() { var e; return null !== (e = null === (e = this.getActive()) || void 0 === e ? void 0 : e.haveEnough) && void 0 !== e && e } get haveEnough$() { return this.selectActive(({haveEnough: e})=>e) } static likelyToKeepUp(e, t, i) { return t && i >= e.HAVE_FUTURE_DATA } get playbackLikelyToKeepUp() { return Yp.likelyToKeepUp(this.mediaElement, this.haveEnough, this.readyState) } get playbackLikelyToKeepUp$() { return Zd([this.haveEnough$, this.readyState$]).pipe(ur(([e,t])=>Yp.likelyToKeepUp(this.mediaElement, e, t))) } getCurrentWaterLevel(e) { var t = this.currentTime , i = null !== (i = null === (i = this.getActive()) || void 0 === i ? void 0 : i.bufferedRanges) && void 0 !== i ? i : []; return qp.getBufferedInfo(i, t, e).len } getCombinedMediaSourceBufferInfo(e) { var t = this.currentTime , [i,r] = null === (r = null === (i = this.getActive()) || void 0 === i ? void 0 : i.mediaSourceEntity) || void 0 === r ? void 0 : r.sourceBufferEntities; return [qp.getBufferedInfo(null !== (i = null == i ? void 0 : i.bufferedRanges) && void 0 !== i ? i : [], t, e), qp.getBufferedInfo(null !== (r = null == r ? void 0 : r.bufferedRanges) && void 0 !== r ? r : [], t, e)] } getCurrentWaterLevelByType(e, t) { var i = this.currentTime , e = this.sourceBufferEntityByType(e) , e = null !== (e = null == e ? void 0 : e.bufferedRanges) && void 0 !== e ? e : []; return qp.getBufferedInfo(e, i, t).len } canContinuePlaybackWithoutGap(e, t, i, r) { if (!e.liveOrEvent) return !0; if (!e.ptsKnown) return !1; var n = this.currentTime , i = performance.now() + i.avgPlaylistLoadTimeMs; return e.fragments[0].start + (i - t) / 1e3 <= this.getCombinedBufferInfo(n, r).end } get stallInfo$() { return this.selectActive(e=>{ return null !== (e = null == e ? void 0 : e.stallInfo) && void 0 !== e ? e : null } ) } get textTracks() { return this.mediaElement.textTracks } get textTracksCreated$() { return this.selectActive(e=>null == e ? void 0 : e.textTracksCreated) } get mediaOptionParsedSubtitleRecord() { var e; return null === (e = this.getActive()) || void 0 === e ? void 0 : e.mediaOptionParsedSubtitleRecord } getParsedSubtitleRecordsForMediaOption(e) { return this.mediaOptionParsedSubtitleRecord ? this.mediaOptionParsedSubtitleRecord[e] || {} : null } } class Jp { constructor(e, t, i, r) { this.mediaSink = e, this.media = t, this.logger = r, this.useCustomMediaFunctions = i.useCustomMediaFunctions, this.overridePlaybackRate = i.overridePlaybackRate } install() { const e = this.media; e && (this.useCustomMediaFunctions && e && e.play && e.pause && (e.originalPlay || (e.originalPlay = e.play.bind(e)), e.originalPause || (e.originalPause = e.pause.bind(e)), e.play = ()=>(this.mediaSink.checkForReplay(), this.mediaSink.desiredRate = 1, 0 < e.currentTime && !e.paused && !e.ended && 2 < e.readyState ? Promise.resolve() : new Promise((e,t)=>{ this.pendingPlayPromises || (this.pendingPlayPromises = []), this.pendingPlayPromises.push({ resolve: e, reject: t }) } )), e.pause = ()=>{ this.mediaSink.desiredRate = 0 } ), "function" == typeof HTMLMediaElement && this.overridePlaybackRate && Object.defineProperty(e, "playbackRate", { enumerable: !0, configurable: !0, get: function() { return 1 }, set: function(e) { Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, "playbackRate").set.call(this, e) } }), this.playPromise = null, this.expectPauseEvent = this.expectPlayEvent = !1) } uninstall() { const e = this.media; e && (e.originalPlay && (e.play = e.originalPlay, delete e.originalPlay), e.originalPause && (e.pause = e.originalPause, delete e.originalPause), this.overridePlaybackRate && (e.playbackRate = 1, delete e.playbackRate)), this.playPromise = null, this.expectPauseEvent = this.expectPlayEvent = !1 } play() { var e; this.media && (e = this.mediaSink.flushing, this.playPromise || e ? this.logger.warn(`Ignoring play command playPromise/flushing ${Boolean(this.playPromise)}/${e}`) : (this.expectPlayEvent = this.expectPlayEvent || this.media.paused, this.playPromise = this._mediaPlayInternal(), this.playPromise && this.playPromise.then(function() { this.playPromise = null, this._handlePendingPlayPromises(null) } .bind(this)).catch(function(e) { this.playPromise = null, this.expectPlayEvent = !1, this._handlePendingPlayPromises(e || new Error("Play rejected for unknown reason")), "NotAllowedError" === (null == e ? void 0 : e.name) ? (this.logger.warn("play() not allowed, going back to rate 0"), this.mediaSink.desiredRate = 0) : this.logger.error(`play() error: ${null == e ? void 0 : e.message}`) } .bind(this)))) } pause() { this.media && (this.playPromise ? this.playPromise.then(()=>{ var e = this.mediaSink.mediaQuery; (0 === this.mediaSink.desiredRate || e.seeking && !e.playbackLikelyToKeepUp) && this._mediaPauseInternal() } ).catch(e=>{ this.logger.error(`Promise error in pause(): ${e.message}`) } ) : this._mediaPauseInternal()) } _handlePendingPlayPromises(t) { var e, i = null === (e = this.pendingPlayPromises) || void 0 === e ? void 0 : e.length; if (t) for (let e = 0; e < i; e++) this.pendingPlayPromises[e].reject(t); else for (let e = 0; e < i; e++) this.pendingPlayPromises[e].resolve(); this.pendingPlayPromises = [] } _mediaPlayInternal() { return (this.media.originalPlay || this.media.play.bind(this.media))() } _mediaPauseInternal() { return this.expectPauseEvent = this.expectPauseEvent || !this.media.paused, (this.media.originalPause || this.media.pause.bind(this.media))() } } class Zp extends Error { } class ef extends p { constructor(e, t, i, r, n) { super(L, e, t, i, r), this.sbType = n, this.response = r } } class tf extends ef { constructor(e, t, i, r) { super("bufferAddCodecError", !1, e, t, i), this.mediaOptionId = r, this.mediaOptionType = Rl(this.sbType) } } class rf extends ef { constructor(e, t, i, r, n, s) { super(e, t, i, r, n), this.isTimeout = s, this.mediaOptionType = Rl(this.sbType) } } class nf extends rf { constructor(e, t, i, r) { super("bufferFullError", !1, e, t, i, !1), this.maxTotalBytes = r } } class sf extends rf { constructor(e, t, i) { super(n, !1, e, t, i, !0) } } class af extends rf { constructor(e, t, i, r) { super(n, !1, e, t, i, !1), this.mediaOptionId = r, this.mediaOptionType = Rl(this.sbType) } } class of extends p { constructor(e, t, i, r, n, s, a=NaN) { super(L, e, t, i, r), this.stallType = n, this.bufferLen = s, this.nudgePosition = a, this.response = r } } class df extends Ut { constructor(n, e, s, a, o, d, l, u, c) { super(e=>{ const t = wc(d) , i = u.child({ sb: o }); n.setSourceBufferEntity(o, l), l.mimeType.includes("audio/mpeg") && (this.updateMp3Timestamps = !0); const r = nn(t.event("updatestart").pipe(Ja(()=>{ n.setSourceBufferUpdating(o) } )), t.event("updateend").pipe(Hi(Zi), Ja(()=>{ var e = qp.timeRangesToBufferedRange(d.buffered) , t = qp.timeRangesToBufferedRange(s.buffered); n.setBufferedRangesUpdated(o, e, t, !1, c.maxBufferHole) } )), t.event("error").pipe(Ja(()=>{ n.setSourceBufferError(o, "Got source buffer error") } ))).pipe(Ra(()=>Ti)).subscribe(e); return ()=>{ r.unsubscribe(); try { "open" === a.readyState && d.abort(), a.removeSourceBuffer(d) } catch (e) { i.error(`Error aborting SourceBuffer on unsubscribe: ${e.message}`) } } } ), this.mediaElementStore = n, this.mediaElementQuery = e, this.mediaElement = s, this.type = o, this.sourceBuffer = d, this.config = c, this.updateMp3Timestamps = !1 } get buffered() { return this.sourceBuffer.buffered } appendBuffer(e, t) { return Yr(()=>this.sourceBuffer.updating ? this._waitForUpdateEndOrError().pipe(Ra(()=>this.appendBuffer(e, t))) : this._appendBufferAsync(e, t)) } _appendBufferAsync(e, t) { let i = NaN , r = null; const n = ("startPTS"in t ? t.frag : t).mediaOptionId; try { "startPTS"in t && (r = { startPTS: t.startPTS, endPTS: t.endPTS, bytes: t.bytes, frag: Object.assign({}, t.frag) }), this.mediaElementStore.setInflightSegment(this.type, r), i = performance.now(), this.sourceBuffer.appendBuffer(e) } catch (e) { return 22 !== e.code ? (this.mediaElementStore.setInflightSegment(this.type, null), this.mediaElement.error ? Ui(new af(e.message,$.VideoDecoderBadDataErr,this.type,n)) : Ui(e)) : (this.mediaElementStore.setBufferedRangesUpdated(this.type, qp.timeRangesToBufferedRange(this.sourceBuffer.buffered), qp.timeRangesToBufferedRange(this.mediaElement.buffered), !0, this.config.maxBufferHole), Ui(new nf(e.message,$.AllocationFailed,this.type,this.maxTotalBytes))) } return this._waitForUpdateEndOrError().pipe(ur(()=>({ startAppend: i, endAppend: performance.now(), bytesAppend: e.byteLength })), vo(1e4), Un(e=>{ throw e instanceof or ? (this.sourceBuffer.abort(), e = new sf("Append took longer than 10000ms",$.InternalError,this.type)) : e instanceof ef && (e = new af("Decode error",$.VideoDecoderBadDataErr,this.type,n)), e } )) } remove(e, t) { return this._waitForUpdateEndOrError().pipe(Ra(this._removeAsync.bind(this, e, t))) } _removeAsync(e, t) { try { this.sourceBuffer.remove(e, t) } catch (e) { return Ui(new ef(r,!1,e.message,$.InternalError,this.type)) } return this._waitForUpdateEndOrError() } abort() { try { this.sourceBuffer.abort() } catch (e) { return Ui(new ef(r,!1,e.message,$.InternalError,this.type)) } return this._waitForUpdateEndOrError() } get updating() { return this.sourceBuffer.updating } get timestampOffset() { return this.sourceBuffer.timestampOffset } set timestampOffset(e) { this.sourceBuffer.timestampOffset = e } get gotQuotaExceeded() { var e; return null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.gotQuotaExceeded) && void 0 !== e && e } get bufferedSegments() { var e; return null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.bufferedSegments) && void 0 !== e ? e : [] } get totalBytes() { var e; return null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.totalBytes) && void 0 !== e ? e : 0 } get maxTotalBytes() { var e = null !== (e = null === (e = this.mediaElementQuery.sourceBufferEntityByType(this.type)) || void 0 === e ? void 0 : e.maxTotalBytes) && void 0 !== e ? e : 1 / 0; return this.gotQuotaExceeded ? e : 1 / 0 } _waitForUpdateEndOrError() { return this.sourceBuffer.updating && this.mediaElementStore.setSourceBufferUpdating(this.type), this.mediaElementQuery.sbUpdating$(this.type).pipe(an(e=>!1 === e), So(this.mediaElementQuery.sbError$(this.type)), ur(([,e])=>{ if (e) throw new ef(r,!1,"Got error during sourceBuffer operation",$.InternalError,this.type) } ), Cs(1)) } } class lf extends Ut { constructor(a, o, e, d, t, i) { super(e=>{ const t = wc(d) , i = nn(t.event("sourceopen"), t.event("sourceclose"), t.event("sourceended")).pipe(Ja(e=>{ e = (null !== (e = null == e ? void 0 : e.target) && void 0 !== e ? e : d).readyState; o.msReadyState = e } )) , r = this.sourceBuffers$.pipe(Ra(e=>e ? nn(...e.filter(e=>null != e)) : Ti)) , n = nn(i, r).pipe(Ra(()=>Ti)).subscribe(e) , s = URL.createObjectURL(d); return a.src = s, o.setMediaSourceEntity(s, d.readyState), ()=>{ n.unsubscribe(), this.teardownWorker.addWork(Yr(()=>(URL.revokeObjectURL(s), a.src === s && (a.removeAttribute("src"), a.load(), o.setMediaSourceEntity(null)), Ul))), this.sourceBuffers$.next(null) } } ), this.mediaElement = a, this.mediaElementStore = o, this.mediaElementQuery = e, this.mediaSource = d, this.teardownWorker = t, this.logger = i, this.sourceBuffers$ = new gi(null) } get readyState() { return this.mediaSource.readyState } set duration(e) { this.mediaSource.duration = e } get duration() { return this.mediaSource.duration } endOfStream(e) { this.mediaSource.endOfStream(e) } createSourceBuffers(e, a) { const o = this.mediaSource; sd(()=>{ try { const s = [null, null]; e.forEach((t,i)=>{ if (t) { var {mimeType: r, mediaOptionId: n} = t; let e; try { e = o.addSourceBuffer(r) } catch (t) { throw new tf(t.message,$.IncompatibleAsset,i,n) } s[i] = new df(this.mediaElementStore,this.mediaElementQuery,this.mediaElement,this.mediaSource,i,e,t,this.logger,a) } } ), this.sourceBuffers$.next(s) } catch (e) { if (!(e instanceof p)) throw new Zp(`error initializing sourcebuffers ${e.message} readyState=${o.readyState}`); throw e } } ) } get needSourceBuffers() { return null == this.sourceBuffers$.value || null == this.sourceBuffers$.value[0] } get sourceBuffers() { return this.sourceBuffers$.value } getSourceBufferByType(e) { var t = this.sourceBuffers$.value; return t ? t[e] : null } updateLiveSeekableRange(e, t) { const i = this.mediaSource; null != i && i.setLiveSeekableRange && "open" === (null == i ? void 0 : i.readyState) && i.setLiveSeekableRange(e, t) } clearLiveSeekableRange() { const e = this.mediaSource; null != e && e.clearLiveSeekableRange && "open" === (null == e ? void 0 : e.readyState) && e.clearLiveSeekableRange() } } function uf(e, c, t) { const {lowBufferThreshold: h, lowBufferWatchdogPeriod: p, highBufferWatchdogPeriod: f, seekWatchdogPeriod: m} = t , i = Zd([c.desiredRate$, c.ended$, c.combinedBuffer$, c.seekTo$]).pipe(ur(e=>{ var t, [i,r,n,s] = e; return t = c.currentTime, e = i, i = r, r = n, n = isFinite(null == s ? void 0 : s.pos), s = r.some(e=>e.start <= t && e.end > t), !(1 !== e || i || 0 === r.length || n && !s) } ), Es()) , r = c.combinedBuffer$.pipe(ur(()=>c.getCurrentWaterLevel(0) <= t.lowBufferThreshold || !c.haveEnough ? Op.LowBuffer : Op.HighBuffer), Es()) , n = Zd([i, c.seekTo$, c.gotPlaying$, r]).pipe(Ra(e=>{ var [t,i,r] = e; if (!t) return Bi(null); var n, s, a, o, d, l, u, e = c.nudgeCount, t = m + +e; return isFinite(null == i ? void 0 : i.pos) || !r ? (n = c, s = performance.now(), t = t, a = h, vn(1e3 * t).pipe(ur(()=>{ var e = n.currentTime , t = n.getCombinedBufferInfo(e, 0); return cf(Op.Seek, e, s, t, a, n.haveEnough) } ))) : (o = c, d = p, l = f + +e, u = h, nn(Bi(o.currentTime), o.timeupdate$).pipe(Ra(e=>{ const t = performance.now() , i = o.getCombinedBufferInfo(e, 0); let r, n; return r = i.len <= u || !o.haveEnough ? (n = d, Op.LowBuffer) : (n = l, Op.HighBuffer), vn(Math.max(100, 1e3 * n)).pipe(ur(()=>e < o.currentTime ? null : cf(r, e, t, i, u, o.haveEnough))) } ))) } )) , s = n.pipe(Up(), So(c.combinedBuffer$), Ra(([])=>Zd([c.seeking$, c.paused$])), Ra(([e,t])=>e || t ? Ti : c.timeupdate$.pipe(ca(), an(([e,t])=>ne(e) && ne(t) && e < t), Cs(1))), ur(()=>null)); return nn(n, s) } function cf(e, t, i, r, n, s) { var a = performance.now() - i; return { type: e, isLowBufferStall: r.len <= n || !s, tstalled: i, stallDurationMs: a, currentTime: t } } class hf extends Ut { constructor(w, A, e, t, i, r) { super(e=>{ const t = this.config , i = A.startMediaSession(w, t.maxBufferLength, t.almostDryBufferSec, t.defaultTargetDuration) , r = Bi(w).pipe(pf(A, this._mediaQuery, this, this.hlsGapless, t, this.logger)) , n = this.mediaSource$.pipe(Ra(e=>e || Ti)) , s = this._mediaQuery.seekTo$.pipe((u = w, c = this._mediaQuery, p = (h = this).config, f = (f = this.logger).child({ name: "seek" }), e=>e.pipe(Ja(e=>{} ), an(e=>e && ne(e.pos)), Ra(e=>c.readyState$.pipe(an(e=>e >= u.HAVE_METADATA), Cs(1), Js(e), Ra(({pos: e, fromEvent: t})=>(h.checkForInconsistentStoreBufferRangesAndUpdate(), u.paused || h.pause(), t || (u.currentTime = e), $l(c.haveEnough$, e=>e).pipe(Js(e)))), Ra(e=>{ var t = c.getCombinedBufferInfo(e, 0) , i = t.nextStart; return 0 === t.len && ne(i) && e < i && i - e <= p.maxSeekHole ? (h.seekTo = i, Ti) : Bi(e) } ), So(c.desiredRate$), ur(([,e])=>{ u.paused && 0 !== e && h.play() } ), Ua(Ti), Un(e=>(f.error(`error during seek ${e.message}`), Ti))))))) , a = this._mediaQuery.desiredRate$.pipe((o = w, d = this._mediaQuery, l = this, e=>e.pipe(So(d.seekTo$), Ra(([e,t])=>ne(null == t ? void 0 : t.pos) ? Ti : 0 === e ? (o.paused || l.pause(), Ti) : $l(d.haveEnough$, e=>e).pipe(Ja(()=>{ o.paused && l.play() } ))), Ua(Ti)))); var o, d, l, u, c, h, p, f; this.mediaFunctions = this.mediaFunctions || new Jp(this,w,t,this.logger), this.mediaFunctions.install(); var m, g, y, v, S, b, T, E, I = nn(uf(this.logger, this._mediaQuery, this.config).pipe(Ja(e=>{ A.setStallInfo(e) } )), this.mediaQuery.stallInfo$.pipe((g = A, y = (m = this).config, v = this.logger, e=>e.pipe(Ls(e=>e ? function(i, e, r, n) { const s = i.mediaQuery; return nn(Zd([s.seekTo$, s.nudgeTarget$]).pipe(an(([e,t])=>e && ne(e.pos) && ne(t) && (e.pos < t || e.pos - t > r.maxSeekHole)), Js(null)), s.stallInfo$).pipe(So(s.desiredRate$), Hi(Zi), ur(([c,e],t)=>{ if (!c) return NaN; var h = s.getCombinedBufferInfo(c.currentTime, 0) , e = jp(e); return function(e, t, i, r, n) { var {type: s, isLowBufferStall: a, currentTime: o} = c , d = h.len , l = t.maxSeekHole; let u = NaN; if (a) { const t = h.nextStart - o <= l ? h.nextStart : 1 / 0; ne(t) ? u = t : e.mediaQuery.msDuration - o < .1 && (u = o + .1) } else if (n < t.nudgeMaxRetry) u = o + t.nudgeOffset; else { if (!r) throw i.error(`still stuck in high buffer @${o} after ${t.nudgeMaxRetry}, raise fatal error`), new of("bufferStalledError",!0,"got fatal buffer error",$.VideoDecoderBadDataErr,s,d); i.error(`still stuck in high buffer @${o} after ${t.nudgeMaxRetry}, non fatal in iframeMode`) } return ne(u) && e.nudgeSeek(u, n + 1), u }(i, r, n, e, t) } ), Qa(e=>ne(e)), $s(()=>{ e.setNudgeInfo(null) } )) }(m, g, y, v) : Bi(NaN)))))); nn(r, n, s, a, I, (S = this.mediaQuery, b = A, I = t.maxBufferHole, nn((E = I, Zd([(T = S).bufferMonitorThresholds$, T.combinedBuffer$, T.seeking$]).pipe(ur(([e])=>null == e ? null : zp(T, E)))), Xp(S, I)).pipe(Hi(Zi), Ja(({combined: e, sbTuple: t})=>{ b.updateWaterLevels(e, t) } )))).pipe(Ua(Ti), $s(()=>{ A.remove(i), this.mediaFunctions.uninstall(), this.mediaFunctions = void 0 } )).subscribe(e) } ), this.mediaElement = w, this.mediaElementStore = A, this.config = e, this.hlsGapless = t, this.logger = i, this.teardownWorker = r, this.mediaSource$ = new gi(null), this._mediaQuery = new Yp(w,A), this.logger = i.child({ name: "mse" }), this.mediaFunctions = new Jp(this,w,e,this.logger) } get mediaSourceAdapter() { return this.mediaSource$.value } get sourceBuffers() { var e; return null !== (e = null === (e = this.mediaSourceAdapter) || void 0 === e ? void 0 : e.sourceBuffers) && void 0 !== e ? e : [] } get needSourceBuffers() { return !this.sourceBuffers[0] } get mediaQuery() { return this._mediaQuery } sourceBuffersBufferedRangeByType(e) { var t, e = null === (t = null === (t = this.mediaSourceAdapter) || void 0 === t ? void 0 : t.sourceBuffers) || void 0 === t ? void 0 : t[e]; return e ? qp.timeRangesToBufferedRange(e.sourceBuffer.buffered) : null } checkForInconsistentStoreBufferRangesAndUpdate() { var e = qp.timeRangesToBufferedRange(this.mediaElement.buffered) , t = this.sourceBuffersBufferedRangeByType(cl.Variant) , i = this.sourceBuffersBufferedRangeByType(cl.AltAudio) , r = null !== (n = null === (r = this.mediaQuery.sourceBufferEntityByType(cl.Variant)) || void 0 === r ? void 0 : r.bufferedRanges) && void 0 !== n ? n : null , n = null !== (n = null === (n = this.mediaQuery.sourceBufferEntityByType(cl.AltAudio)) || void 0 === n ? void 0 : n.bufferedRanges) && void 0 !== n ? n : null; this.shouldUpdateStoreValues(t, r) && (this.logger.warn(`[${Pl[cl.Variant]}] SourceBuffer's loaded bufferedRanges ${JSON.stringify(t)} & mediaElementStore's bufferedRanges ${JSON.stringify(r)} are out of sync!`), this.updateMediaElementStoreBufferedRanges(e, cl.Variant)), this.shouldUpdateStoreValues(i, n) && (this.logger.warn(`[${Pl[cl.AltAudio]}] SourceBuffer's loaded bufferedRanges ${JSON.stringify(i)} & mediaElementStore's bufferedRanges ${JSON.stringify(n)} are out of sync!`), this.updateMediaElementStoreBufferedRanges(e, cl.AltAudio)) } shouldUpdateStoreValues(e, i) { return !(null == e && null == i || (null == e ? void 0 : e.length) == (null == i ? void 0 : i.length) && !e.find(t=>{ var e = Ll.search(i, e=>t.start >= e.start && t.end <= e.end ? 0 : t.end < e.start ? -1 : 1); return null == e || e.start != t.start || e.end != t.end || void 0 } )) } updateMediaElementStoreBufferedRanges(e, t) { var i = this.sourceBuffersBufferedRangeByType(t); i && !this.mediaQuery.sbUpdating(t) && this.mediaElementStore.setBufferedRangesUpdated(t, i, e, !1, this.config.maxBufferHole) } destroyMediaSource() { this.mediaSource$.next(null) } makeMediaSource() { return new MediaSource } openMediaSource(t) { sd(()=>{ var e; t ? (e = new lf(this.mediaElement,this.mediaElementStore,this.mediaQuery,t,this.teardownWorker,this.logger), this.mediaSource$.next(e)) : this.mediaSource$.next(null) } ) } createSourceBuffers(e) { const t = this.mediaSource$.value; if (!t) throw new Error("createSourceBuffers empty mediaSource"); t.createSourceBuffers(e, this.config) } _waitForMediaSourceOpen(i) { const r = this.mediaQuery.mediaSourceEntity.objectUrl; return Zd([this.mediaQuery.msReadyState$, this.mediaQuery.msObjectUrl$]).pipe(Ra(([e,t])=>t !== r ? Bi(null) : "open" === e || "ended" === e ? Bi(i) : Ti)) } get appendOrder() { return this.mediaQuery.isIframeRate ? [cl.Variant, cl.AltAudio] : [cl.AltAudio, cl.Variant] } clearFlush(e) { e.forEach(e=>{ e && (e.dataSeg.flushBeforeAppend = { start: 0, end: 0 }) } ) } getSwitchPosition(e) { return e.reduce((e,t)=>{ t = t ? t.dataSeg.switchPosition : void 0; return ne(t) ? ne(e) ? Math.min(e, t) : t : e } , void 0) } checkForReplay() { var e = this.mediaElement; e.paused && !e.seeking && e.duration && e.currentTime && e.currentTime >= e.duration - this.config.maxTotalDurationTolerance && (this.seekTo = 0) } resetMediaSourceIfNeeded(r) { const n = this["mediaQuery"] , e = n["sourceBufferEntities"] , t = n.getActive()["expectedSbCount"]; if (!e || this.needSourceBuffers) return this._waitForMediaSourceOpen(r); var i = function(e, s, t, i, r) { const n = s.filter(e=>Boolean(e)).length , a = e.filter(e=>Boolean(e)).length , d = [null, null]; e.forEach((e,t)=>{ var i, r, n, s, a, o; e && (s = e["offsetTimestamp"], a = S(s), i = e.initSeg.mimeType, {audioCodec: r, videoCodec: n} = e.initSeg.initParsedData, o = e["dataSeg"], s = S(o.startPts) - a, a = S(o.endPts) - a, o = o.discoSeqNum, d[t] = { audioCodec: r, videoCodec: n, mimeType: i, startPTSSec: s, endPTSSec: a, discoSeqNum: o, mediaOptionId: e.initSeg.mediaOptionId }) } ); let o = n === t , l = a === t; if (1 === a && a < t && 0 !== n) { const t = e[ul.Variant] ? ul.Variant : ul.AltAudio , n = 1 - t , a = d[t] , o = d[n] = ff(s[n], a.startPTSSec, a.discoSeqNum, i, a.mediaOptionId, r) || ff(s[n], a.endPTSSec, a.discoSeqNum, i, a.mediaOptionId, r); o || r.warn(`${Cl[t]} No matching frag found ${se(a)} buffered=${se(s[n].bufferedSegments.map(e=>{ var {mediaSeqNum: t, discoSeqNum: i} = e.frag; return { mediaSeqNum: t, discoSeqNum: i, startPTS: e.startPTS, endPTS: e.endPTS } } ))}`), l = null != o } let u = NaN , c = NaN; return l && d.forEach((e,t)=>{ if (!e) return null; t = s[t]; if (t) { const s = t.audioCodec , i = t.videoCodec , {audioCodec: r, videoCodec: n} = e; o = o && (i === n || Se.isCompatibleVideoCodec(i, n)), o = o && (s === r || Se.isCompatibleAudioCodec(s, r)) } else o = !1; u = ne(u) ? (c = Math.abs(e.startPTSSec - u), Math.max(e.startPTSSec, u)) : (c = 0, e.startPTSSec) } ), { compatible: o && l, boundary: u, allowance: c } }(r, e, t, this.config.maxBufferHole, this.logger); if (i.compatible) return this._waitForMediaSourceOpen(r); let s = i.boundary; const a = i.allowance , o = this.getSwitchPosition(r); if (ne(o) && (s = o), !ne(s)) return this.logger.warn("not enough info #disco"), Bi(null); const d = hn($l(nn(Bi(n.currentTime), n.timeupdate$), e=>e >= s), $l(n.stallInfo$.pipe(ur(e=>{ return null !== (e = null == e ? void 0 : e.currentTime) && void 0 !== e ? e : NaN } )), e=>e >= s - a - this.config.discontinuitySeekTolerance)); return this.mediaElementStore.waitingForDisco = !0, d.pipe(Js(s), Ra(e=>{ performance.now(); const t = n.currentTime , i = this.msDuration; return this.resetMediaSource(Math.max(t, e)), this._waitForMediaSourceOpen(r).pipe(Ja(()=>{ performance.now(), this.msDuration = i } )) } ), $s(()=>{ this.mediaElementStore.waitingForDisco = !1 } )) } resetMediaSource(e=NaN) { var t; ne(e) || (e = null !== (t = null === (t = this.mediaQuery.seekTo) || void 0 === t ? void 0 : t.pos) && void 0 !== t ? t : this.mediaQuery.currentTime), 0 < this.sourceBuffers.length && (this.openMediaSource(this.makeMediaSource()), this.seekTo = e) } setExpectedSbCount(e) { this.mediaElementStore.expectedSbCount = e } appendInitSegments(d, l) { const {mediaQuery: e, mediaElementStore: u, sourceBuffers: c} = this , h = e["sourceBufferEntities"]; if (!c) throw new Error("appendInitSegments: null sourceBuffers"); if (!h) throw new Error("appendInitSegments: null sourceBufferEntities"); var t = this.appendOrder.map(t=>{ if (d[t]) { const i = c[t] , r = d[t] , n = h[t] , s = r["initSeg"]; if (!n) throw new Error(`appendInitSegments: sb[${Pl[t]}] null currentSbEntity`); if (!i) throw new Error(`appendInitSegments: sb[${Pl[t]}] null source buffer`); const a = n.initSegmentInfo , o = function() { var {itemId: e, mediaOptionId: t, discoSeqNum: i, keyTagInfo: r} = s; return { itemId: e, mediaOptionId: t, discoSeqNum: i, keyId: je(null == r ? void 0 : r.keyId) } }(); if ((e = o) && a && e.itemId === a.itemId && e.mediaOptionId === a.mediaOptionId && e.discoSeqNum === a.discoSeqNum && e.keyId === a.keyId) return Bi(null); var e = Rl(t); return i.appendBuffer(s.data, s).pipe(Ja(e=>{ u.setInitSegmentEntity(t, o) } ), l(i, e, s.mediaOptionId, this.config, this.mediaQuery)) } } ).filter(e=>Boolean(e)); return 0 === t.length ? Bi(null) : Jr(t) } appendDataSegments(m, g) { var e = this.appendOrder.map(e=>{ const t = m[e] , {mediaQuery: i, sourceBuffers: r} = this , n = i["sourceBufferEntities"]; if (!r) throw new Error("appendDataSegments: null sourceBuffers"); if (!n) throw new Error("appendDataSegments: null sourceBufferEntities"); if (!t) return null; const s = r[e] , a = m[e] , o = n[e]; if (!o) throw new Error("appendDataSegments: null currentSbEntity"); const d = o.initSegmentInfo , l = a["dataSeg"]; if (!d) throw new Error(`appendDataSegments: sb[${Pl[e]}] null currentInitSegmentInfo`); if (!o) throw new Error(`appendDataSegments: sb[${Pl[e]}] null currentSbEntity`); if (!s) throw new Error(`appendDataSegments: sb[${Pl[e]}] null source buffer`); const u = s.timestampOffset , c = { startPTS: S(l.startPts) + u, endPTS: S(l.endPts) + u, firstKeyframePts: l.firstKeyframePts ? S(l.firstKeyframePts) + u : void 0, bytes: l.data2 ? l.data1.byteLength + l.data2.byteLength : l.data1.byteLength, frag: { itemId: l.itemId, mediaOptionId: l.mediaOptionId, mediaSeqNum: l.mediaSeqNum, discoSeqNum: l.discoSeqNum, keyTagInfo: l.keyTagInfo, isLastFragment: l.isLastFragment, iframe: l.iframe, framesWithoutIDR: l.framesWithoutIDR, dropped: l.dropped } } , h = Rl(e); let p = Ul; var f = t.dataSeg.flushBeforeAppend; return f && f.start !== f.end && (p = this.flushData(e, f.start, f.end)), p.pipe(Ra(()=>Bi(l.data1, l.data2).pipe(Up()).pipe(qn(e=>s.appendBuffer(e, c).pipe(g(s, h, l.mediaOptionId, this.config, this.mediaQuery))))), Ja(()=>{ i.getBufferedRangeByType(e) } )) } ).filter(e=>Boolean(e)); return 0 === e.length ? Bi(null) : Jr(e) } setStoreSbTimeoffsets(s) { const {mediaElementStore: a, sourceBuffers: e} = this; e.forEach((t,i)=>{ if (t && s[i]) { var {offsetTimestamp: r, dataSeg: n} = s[i] , n = S(n.startPts); let e = -1 * S(r); t.updateMp3Timestamps && .1 < Math.abs(t.timestampOffset - n) && (e = n + e), t.timestampOffset !== e && (t.timestampOffset = e, a.setTimestampOffset(i, t.timestampOffset)) } } ) } adjustJaggedStart() { var e; const {mediaQuery: t, logger: r} = this , {sourceBufferEntities: i, currentTime: n, seekTo: s} = t; if (!i) throw new Error("appendSourceBufferData null currentSbEntity"); const a = (null == s ? void 0 : s.pos) || n; let o = NaN; i.forEach((e,t)=>{ if (e) { e = qp.getBufferedInfo(e.bufferedRanges, a, 0); if (0 === e.len) { const i = e["nextStart"]; r.warn(`sb[${Pl[t]}] jagged start: ${i} current=${o}`), ne(i) && (!ne(o) || o < i) && (o = i) } } } ), ne(o) && (r.warn(`[seek] jagged start, adjusting currentTime:${n.toFixed(3)} seekTo=${null === (e = null == s ? void 0 : s.pos) || void 0 === e ? void 0 : e.toFixed(3)}->${o}`), this.seekTo = o) } addCues(e, t) { const i = this.mediaElement.textTracks[e]; i && t.forEach(e=>{ i.addCue(e) } ) } _flushInternal(e, t, i) { return Yr(()=>e.remove(t, i)).pipe(Ja(()=>{} )) } flushAll(i, r, n=!1) { return 0 === this.sourceBuffers.length ? Ul : Jr(this.sourceBuffers.map((e,t)=>e ? this.flushData(t, i, r, n) : Ul)).pipe(Js(void 0)) } flushData(o, d, l, u=!1) { const {mediaQuery: t, logger: c} = this; return $l(t.updating$, e=>!1 === e).pipe(Ra(()=>{ var e = t["sourceBufferEntities"] , e = e[o]; null != e && e.updating && this.logger.warn(`trying to flush while updating ${o}`); const r = this.sourceBuffers[o]; let n, s, a = Ul; e = -1 === navigator.userAgent.toLowerCase().indexOf("firefox"); if (this.flushing = !0, e) return this._flushInternal(r, d, l); for (let i = 0; i < r.buffered.length; i++) { let e, t; n = r.buffered.start(i), s = r.buffered.end(i), t = l === 1 / 0 ? (e = d, l) : (e = Math.max(n, d), Math.min(s, l)), Math.min(t, s) > e && (u || .5 < Math.min(t, s) - e) ? a = a.pipe(Ua(this._flushInternal(r, e, t))) : c.warn(`ignoring sb[${Pl[o]}] flush ${e},${t}`) } return a } ), $s(()=>{ this.flushing = !1 } )) } static convertInitSegToCompatInfo(e) { return { mimeType: e.mimeType, audioCodec: e.initParsedData.audioCodec, videoCodec: e.initParsedData.videoCodec, startPTSSec: void 0, endPTSSec: void 0, discoSeqNum: e.discoSeqNum, mediaOptionId: e.mediaOptionId } } static combineAppendDataInfoWithCompatInfo(e, t, i, r=0) { const n = [...t]; e.forEach((e,t)=>null != e && e.initSeg ? n[t] = hf.convertInitSegToCompatInfo(e.initSeg) : null); t = n[cl.Variant].videoCodec, e = Vp(t); if (i && i.has(e)) { const s = i.get(e); n[cl.Variant].mimeType = n[cl.Variant].mimeType.replace(t, s), n[cl.Variant].videoCodec = s } return n } convertSourceBufferEntitiesToCompatInfo(e) { const t = e.sourceBufferEntities , i = [null, null]; return t.forEach((e,t)=>{ e && (i[t] = { mimeType: e.mimeType, audioCodec: e.audioCodec, videoCodec: e.videoCodec, startPTSSec: void 0, endPTSSec: void 0, discoSeqNum: void 0, mediaOptionId: null === (e = e.initSegmentInfo) || void 0 === e ? void 0 : e.mediaOptionId }) } ), i } appendData(e, t, i) { const {mediaQuery: r, logger: n} = this , o = this.convertSourceBufferEntitiesToCompatInfo(r); return e.every(e=>null == e) ? Bi([]) : this.resetMediaSourceIfNeeded(e).pipe(Ra(e=>e ? r.updating$.pipe(an(e=>!1 === e), Cs(1), Js(e)) : Bi(null)), Ra(e=>{ if (!e) return Bi([]); let s = NaN , a = NaN; if (this.needSourceBuffers) { s = performance.now(); const t = hf.combineAppendDataInfoWithCompatInfo(e, o, i, n); this.createSourceBuffers(t), a = performance.now(), this.clearFlush(e) } return e.forEach(e=>{ e = null == e ? void 0 : e.dataSeg; null != e && e.cues && ne(null == e ? void 0 : e.texttrackIdx) && this.addCues(e.texttrackIdx, e.cues) } ), this.setStoreSbTimeoffsets(e), Xr(Yr(()=>this.appendInitSegments(e, t)), Yr(()=>this.appendDataSegments(e, t))).pipe(function(r, i) { return 2 <= arguments.length ? function(e) { return Ft(na(r, i), Qs(1), (void 0 === (t = i) && (t = null), function(e) { return e.lift(new es(t)) } ))(e); var t } : function(e) { return Ft(na(function(e, t, i) { return r(e, t) }), Qs(1))(e) } }((e,t)=>(e.push(t), e), new Array), ur(([i,r])=>{ const n = [null, null]; return [cl.Variant, cl.AltAudio].forEach(e=>{ var t; null != (null == i ? void 0 : i[e]) && (t = { fragmentType: Rl(e), bufferCreationStart: s, bufferCreationEnd: a, startInitAppend: i[e].startAppend, endInitAppend: i[e].endAppend, initBytesAppend: i[e].bytesAppend, startDataAppend: r[e].startAppend, endDataAppend: r[e].endAppend, dataBytesAppend: r[e].bytesAppend }, n[e] = t) } ), n } ), Ja(e=>{ this.adjustJaggedStart() } )) } ), Cs(1)) } endStream() { try { this.mediaSourceAdapter.endOfStream() } catch (e) { this.logger.warn(`endOfStream failed: ${e.message}`) } } setMediaKeys(e) { const t = this.mediaElement; return t.done$ || (t.done$ = new gi(!1)), nn(Ul, t.done$).pipe(Ra(()=>!0 === t.updating ? Ti : t.mediaKeys === e ? Ul : (t.updating = !0, Lr(t.setMediaKeys(e).then(()=>{ t.updating = !1, t.done$.next(!0) } ).catch(e=>{ throw t.updating = !1, t.done$.next(!0), e } )))), Cs(1), Ja(()=>{} ), ya(e=>e.pipe(Kr((e,t)=>{ if (t < 3) return vn(100 * t); throw e } ))), wa()) } clearMediaKeys(i) { return Yr(()=>{ if (!this.mediaElement) return Ul; const e = -1 < navigator.userAgent.toLowerCase().indexOf("chrome") , t = this.mediaElement.src; return e && (this.mediaElement.src = ""), i ? this.setMediaKeys(null).pipe(qn(()=>(this.mediaElement.src = t, Ul))) : nn(Lr(this.mediaElement.setMediaKeys(null)).pipe(qn(()=>(this.mediaElement.src = t, Ul))), Ul) } ) } set autoPausedRestartTime(e) { this.mediaElementStore.autoPausedRestartTime = e } set seekTo(e) { this.mediaElementStore.setSeekToPos(e, !1) } set skip(e) { this.seekTo = this.mediaElement.currentTime + e } nudgeSeek(e, t) { sd(()=>{ this.mediaElementStore.setSeekToPos(e, !1), this.mediaElementStore.setNudgeInfo({ nudgeTarget: e, nudgeCount: t }) } ) } set desiredRate(e) { this.mediaElementStore.desiredRate = e } toggleTrickPlaybackMode(e) { if (this.config.overridePlaybackRate) { const t = e ? 2 : 1; try { this.mediaElement.playbackRate = t } catch (e) { this.logger.error({ name: "iframes" }, `Exception when setting playbackRate=${t}: ${e.message}`) } } const t = this.muteValueOnTrickPlaybackToggle; e && void 0 === t ? (this.muteValueOnTrickPlaybackToggle = this.mediaElement.muted, this.mediaElement.muted = e) : e || void 0 === t || (this.mediaElement.muted = t, this.muteValueOnTrickPlaybackToggle = void 0) } play() { this.mediaFunctions.play() } pause() { this.mediaFunctions.pause() } get expectPlayEvent() { return this.mediaFunctions.expectPlayEvent } set expectPlayEvent(e) { this.mediaFunctions.expectPlayEvent = e } get expectPauseEvent() { return this.mediaFunctions.expectPauseEvent } set expectPauseEvent(e) { this.mediaFunctions.expectPauseEvent = e } set textTracksCreated(e) { const t = this["mediaElementStore"]; t.textTracksCreated = e } get msDuration() { return this._mediaQuery.msDuration } set msDuration(e) { try { const t = this["mediaElementStore"] , i = this.mediaSource$.value; i.duration !== e && (i.duration = e, t.msDuration = e) } catch (e) { this.logger.warn(`Error setting duration ${e.message}`) } } set haveEnough(e) { this.mediaElementStore.haveEnough = e } set flushing(e) { this.mediaElementStore.flushing = e } set bufferMonitorTargetDuration(e) { this.mediaElementStore.bufferMonitorTargetDuration = e } get textTracks() { return this.mediaElement.textTracks } addTextTrack(e, t, i) { return this.mediaElement.addTextTrack(e, t, i) } dispatchEvent(e) { return this.mediaElement.dispatchEvent(e) } get offsetWidth() { return this.mediaElement.offsetWidth } get offsetHeight() { return this.mediaElement.offsetHeight } archiveParsedSubtitleFragmentRecord(e, t, i) { return this.mediaElementStore.archiveParsedSubtitleFragmentRecord(e, t, i) } updateLiveSeekableRange(e) { var t = e.fragments , e = t.length; if (1 < e) { const i = t[0].start , r = t[e - 1].start + t[e - 1].duration; this.mediaSource$.value.updateLiveSeekableRange(i, r) } } clearLiveSeekableRange() { this.mediaSource$.value.clearLiveSeekableRange() } } const pf = (r,n,s,a,o,d)=>e=>e.pipe(Ra(t=>{ if (!t) return Ti; const e = wc(t); return nn(e.event("durationchange").pipe(ur(e=>Ac(t, "durationchange", e)), Ja(e=>{ e = e.currentTarget; r.mediaElementDuration = e.duration } )), e.event("seeking").pipe(so(o.seekEventThrottleMs), ur(e=>Ac(t, "seeking", e)), Ja(e=>{ var t = e.currentTarget , e = t.currentTime; if (t.readyState >= t.HAVE_METADATA) { const i = n.seekTo; !i || !i.fromEvent && 1e-5 < Math.abs(i.pos - e) ? a.inGaplessMode ? function(e, t, i, r, n) { let s = !1; e < t.playingItem.itemStartOffset && (n.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${t.playingItem.itemStartOffset}`), e = t.playingItem.itemStartOffset, s = !0), t.isPreloading && (e > t.loadingItem.itemStartOffset && (n.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${t.loadingItem.itemStartOffset}`), e = t.loadingItem.itemStartOffset, s = !0), t.dequeueSource("SeekToUnbufferedTimeRanges")), s ? i.resetMediaSource(e) : r.setSeekToPos(e, !0) }(e, a, s, r, d) : r.setSeekToPos(e, !0) : r.seeking = !0 } } )), e.event("seeked").pipe(ur(e=>Ac(t, "seeked", e)), Ja(()=>{ r.setSeekToPos(null, !0) } )), e.event("play").pipe(ur(e=>Ac(t, "play", e)), So(n.desiredRate$), ur(([e])=>{ var t = e.currentTarget; r.paused = t.paused; var i = s.expectPlayEvent , t = t.controls || o.nativeControlsEnabled; return !i && t && (s.checkForReplay(), r.desiredRate = 1), s.expectPlayEvent = !1, e } )), e.event("playing").pipe(ur(e=>Ac(t, "playing", e)), Ja(e=>{ e = e.currentTarget; r.paused = e.paused, r.gotPlayingEvent() } )), e.event("loadstart").pipe(ur(e=>Ac(t, "loadstart", e)), Ja(()=>{ r.gotLoadStartEvent() } )), e.event("pause").pipe(ur(e=>Ac(t, "pause", e)), Ja(e=>{ var t = e.currentTarget; r.paused = t.paused; e = s.expectPauseEvent, t = t.controls || o.nativeControlsEnabled; !e && t && (r.desiredRate = 0), s.expectPauseEvent = !1 } )), e.event("loadedmetadata").pipe(ur(e=>Ac(t, "loadedmetadata", e))), e.event("loadeddata").pipe(ur(e=>Ac(t, "loadeddata", e))), e.event("canplay").pipe(ur(e=>Ac(t, "canplay", e))), e.event("canplaythrough").pipe(ur(e=>Ac(t, "canplaythrough", e))), e.event("waiting").pipe(ur(e=>Ac(t, "waiting", e))), e.event("emptied").pipe(ur(e=>Ac(t, "emptied", e))), e.event("error").pipe(ur(e=>Ac(t, "error", e)), qn(e=>Ui(t.error))), e.event("ended").pipe(ur(e=>Ac(t, "ended", e)))).pipe(So(n.bufferedRangeTuple$), od(([e])=>{ var t = e.currentTarget , e = t.readyState; r.readyState = e, r.ended = t.ended } ), Un(e=>e instanceof MediaError ? (d.warn(`mediaElementError, code: ${e.code}, message: ${e.message}`), Ui(e)) : (d.error(`media event error: ${e.message}`), Ti))) } ), Ra(()=>Ti)); function ff(e, t, i, r, n, s) { const a = null == e ? void 0 : e.bufferedSegments; if (!a) return s.warn("getMatchingInfo trying to query null sbEntity"), null; let o = a.find(e=>t >= e.startPTS && t < e.endPTS && e.frag.discoSeqNum === i); if (!o) { const e = a[0] && Math.abs(+a[0].startPTS) < r ? a[0] : void 0; e && t < e.startPTS && i === e.frag.discoSeqNum && (o = e) } if (null == o) return null; { const {audioCodec: t, videoCodec: r, mimeType: s} = e; return { mimeType: s, audioCodec: t, videoCodec: r, startPTSSec: o.startPTS, endPTSSec: o.endPTS, discoSeqNum: i, mediaOptionId: n } } } const mf = new class extends pd { constructor() { super({}, { name: "media-element-store", producerFn: vc }), this._activeId = "" } get activeId() { return this._activeId } startMediaSession(i, r, n, s) { return Co("playback.session.start"), this._activeId = `media session: ${(new Date).toISOString()}`, sd(()=>{ var e = s , t = Math.max(e, r - e) , t = { id: this.activeId, desiredRate: !i.autoplay && i.paused ? 0 : 1, paused: i.paused, gotPlaying: !1, gotLoadStart: !1, seeking: i.seeking, flushing: !1, readyState: i.readyState, ended: i.ended, bufferedRanges: [], haveEnough: !1, mediaSourceEntity: null, expectedSbCount: NaN, bufferMonitorInfo: { waterLevelType: null, almostDryWaterLevelSeconds: n, lowWaterLevelSeconds: e, highWaterLevelSeconds: t, maxBufferSeconds: r }, mediaOptionParsedSubtitleRecord: [], textTracksCreated: !1, waitingForDisco: !1 }; this.add(t), this.setActive(this.activeId) } ), this.activeId } setMediaSourceEntity(t, i) { Co("playback.set.msObjectUrl"), this.updateActive(e=>{ e.mediaSourceEntity = null != t && null != i ? { objectUrl: t, readyState: i, duration: NaN, sourceBufferEntities: [null, null] } : null, e.bufferedRanges = [], e.haveEnough = !1, e.readyState = 0, e.bufferMonitorInfo.waterLevelType = null } ) } set mediaElementDuration(t) { Co("playback.set.mediaElementDuration"), this.updateActive(e=>{ e && (e.mediaElementDuration = t) } ) } set msReadyState(t) { Co("playback.set.msReadyState"), this.updateActive(({mediaSourceEntity: e})=>{ e && (e.readyState = t) } ) } set readyState(t) { Co(`playback.set.readyState ${t}`), this.updateActive(e=>{ e.readyState = t } ) } set ended(t) { Co(`playback.set.ended ${t}`), this.updateActive(e=>{ e.ended = t } ) } set msDuration(t) { Co("playback.set.msDuration"), this.updateActive(e=>{ e.mediaSourceEntity.duration = t } ) } set textTracksCreated(t) { Co("playback.set.textTracksCreated ${created}"), this.updateActive(e=>{ e.textTracksCreated = t } ) } set expectedSbCount(t) { Co("playback.set.expectedSbCount"), this.updateActive(e=>{ e.expectedSbCount = t } ) } set autoPausedRestartTime(e) { this.updateActive({ autoPausedRestartTime: e }) } setSeekToPos(t, i) { Co(`playback.set.seekToPos: ${null == t ? void 0 : t.toFixed(3)}`), this.updateActive(e=>{ ne(t) ? (e.seekTo = { pos: t, fromEvent: i }, e.gotPlaying = !1, e.haveEnough = !1) : e.seekTo = null, i && (e.seeking = ne(t)) } ) } set seeking(t) { Co(`playback.set.seeking: ${t}`), this.updateActive(e=>{ e.seeking = t } ) } set paused(t) { Co(`playback.set.paused: ${t}`), this.updateActive(e=>{ (e.paused = t) && (e.gotPlaying = !1) } ) } gotPlayingEvent() { Co("playback.set.playing"), this.updateActive(e=>{ e.paused || (e.gotPlaying = !0) } ) } gotLoadStartEvent() { Co("playback.set.loadstart"), this.updateActive(e=>{ e.gotLoadStart = !0 } ) } set desiredRate(t) { Co(`playback.set.desiredRate: ${t}`), this.updateActive(e=>{ e.desiredRate = t } ) } set haveEnough(t) { Co(`playback.set.haveEnough: ${t}`), this.updateActive(e=>{ e.haveEnough = t } ) } set flushing(e) { Co(`playback.set.flushing: ${e}`), this.updateActive({ flushing: e }) } set waitingForDisco(t) { Co(`playback.set.waitingForDisco: ${t}`), this.updateActive(e=>{ e && (e.waitingForDisco = t) } ) } setSourceBufferUpdating(i) { Co(`playback.set.sourcebuffers[${Pl[i]}].updating`), this.updateActive(({mediaSourceEntity: e})=>{ const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i]; t && (t.updating = !0, t.error = void 0) } ) } setTimestampOffset(i, r) { Co(`playback.set.sourcebuffers[${Pl[i]}].timestampOffset`), this.updateActive(({mediaSourceEntity: e})=>{ const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i]; t && (t.timestampOffset = r) } ) } setBufferedRangesUpdated(n, s, a, o, d) { Co(`playback.set.sourcebuffers[${Pl[n]}].bufferupdated`), this.updateActive(e=>{ var t; const i = null == e ? void 0 : e.mediaSourceEntity , r = null === (t = null == i ? void 0 : i.sourceBufferEntities) || void 0 === t ? void 0 : t[n]; if (r) { const n = null == i ? void 0 : i.duration; r.updating = !1, r.bufferedRanges = [...s], function(e, t, i, r) { const n = e.inFlight , s = e.bufferedSegments; n && ne(n.startPTS) && ne(n.endPTS) && function(t, i) { let r = !1; for (let e = t.length - 1; -1 < e; e--) { const s = t[e] , a = Math.max(i.startPTS, s.startPTS) , o = Math.min(i.endPTS, s.endPTS); var n; o <= a || ((n = (1 - (o - a) / (s.endPTS - s.startPTS)) * s.bytes) <= 0 ? t.splice(e, 1) : (s.bytes = n, s.startPTS < i.startPTS ? s.endPTS = a : (s.startPTS = o, r || (t.splice(e, 0, i), r = !0)))) } r || t.push(i) }(s, n); const a = e.bufferedRanges; let o, d = 0; for (let e = s.length - 1; -1 < e; e--) { const t = s[e] , n = !t.frag.iframe; n && t.frag.isLastFragment && (o = t.frag); var l = t.endPTS - t.startPTS; if (l <= 0) s.splice(e, 1); else { var u = a.find(e=>e.start <= t.endPTS && e.end > t.startPTS); if (u) { const a = Math.max(u.start, t.startPTS) , o = Math.min(u.end, t.endPTS) , c = o - a; if (d += t.bytes * c / l, n) if (c < Math.min(l, i)) s.splice(e, 1); else { const n = t.appendedDuration; n ? !(n > c && c != l) || t.frag.isLastFragment && o === r || s.splice(e, 1) : t.appendedDuration = c } } else s.splice(e, 1) } } e.totalDuration = o && 0 < a.length ? a[a.length - 1].end : 1 / 0, e.inFlight = null, e.gotQuotaExceeded = e.gotQuotaExceeded || t, e.totalBytes = d, e.maxTotalBytes = Math.max(e.totalBytes, e.maxTotalBytes) }(r, o, d, n) } e.bufferedRanges = [...a] } ) } setSourceBufferEntity(n, s) { Co(`playback.set.sourcebuffers[${Pl[n]}].setSourceBufferEntity`), this.updateActive(({mediaSourceEntity: e})=>{ var t, i, r; e && ({mimeType: t, audioCodec: i, videoCodec: r} = s, e.sourceBufferEntities[n] = { mimeType: t, audioCodec: i, videoCodec: r, updating: !1, bufferedRanges: [], timestampOffset: 0, inFlight: null, bufferedSegments: [], totalBytes: 0, maxTotalBytes: 0, gotQuotaExceeded: !1, totalDuration: 1 / 0 }) } ) } setInflightSegment(i, r) { Co(`playback.set.sourcebuffers[${Pl[i]}].setInflightSegment`), this.updateActive(({mediaSourceEntity: e})=>{ const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i]; t && (t.inFlight = r) } ) } setInitSegmentEntity(i, r) { Co(`playback.set.sourcebuffers[${Pl[i]}].setInitSegmentEntity`), this.updateActive(({mediaSourceEntity: e})=>{ const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i]; t && (t.initSegmentInfo = r) } ) } setSourceBufferError(i, r) { Co(`playback.set.sourcebuffers[${i}].error: ${r}`), this.updateActive(({mediaSourceEntity: e})=>{ const t = null === (e = null == e ? void 0 : e.sourceBufferEntities) || void 0 === e ? void 0 : e[i]; t && (t.inFlight = null, t.updating = !1, t.error = r) } ) } setStallInfo(t) { Co(`playback.set.stallInfo stalled=${null != t}`), this.updateActive(e=>{ e.stallInfo = t } ) } setNudgeInfo(t) { Co(`playback.set.nudgeInfo ${se(t)}`), this.updateActive(e=>{ e.nudgeInfo = t } ) } updateWaterLevels(t, i) { Co("playback.set.updateWaterLevels"), this.updateActive(e=>{ e.bufferMonitorInfo.waterLevelType = { combined: t, sbTuple: [...i] } } ) } set bufferMonitorTargetDuration(i) { Co(`playback.set.targetDuration: ${i}`), this.updateActive(e=>{ if (ne(i) && 0 < i) { const t = e.bufferMonitorInfo; t.lowWaterLevelSeconds = Math.min(i, t.maxBufferSeconds), t.highWaterLevelSeconds = Math.max(t.lowWaterLevelSeconds, t.maxBufferSeconds - i) } } ) } archiveParsedSubtitleFragmentRecord(i, r, n) { Co(`playback.cues.set persistentId ${i} mediaSeqNum ${r}: parsed ${n.count} time-range ${n.startTime}:${n.endTime}`), this.updateActive(e=>{ let t = e.mediaOptionParsedSubtitleRecord[i]; t || (t = {}, e.mediaOptionParsedSubtitleRecord[i] = t), t[r] = n } ) } } ; class gf extends Si { constructor(e) { super(e), this.store = e, this.displaySupportsHdr$ = this.select("supportsHdr"), this.platformInfo$ = this.select("platformInfo"), this.viewportInfo$ = this.select("viewportInfo") } get platformInfo() { return this.getValue().platformInfo } get displaySupportsHdr() { return this.getValue().supportsHdr } get viewportInfo() { return this.getValue().viewportInfo } } class yf { constructor(e) { this.store = e } getQuery() { return new gf(this.store) } updateSupportsHdr(t) { this.store.update(e=>{ e.supportsHdr = t } ) } updatePlatformInfo(e) { this.store.update({ platformInfo: e }) } updateViewportInfo(t) { this.store.update(e=>{ e.viewportInfo = t } ) } } const vf = new class extends dd { constructor() { super({ supportsHdr: !0 }, { name: "platform", producerFn: vc }) } } ; let Sf = null; function bf() { return Sf = Sf || new yf(vf), Sf } class Tf extends Ut { constructor(e) { super(), this._vanillaRPC = e, this._handler$ = new zt } _subscribe(e) { return e.add(this._handler$.pipe(Kr(([e,t,i])=>e(...t).pipe(Ja({ next(e) { i(e, null) }, error(e) { i(null, e) } })))).subscribe()), ()=>{ this.teardown() } } register(e, i) { return this._vanillaRPC.register(e, (...t)=>e=>{ this._handler$.next([i, t, e]) } ) } invoke(e, t, r) { return new Ut(i=>{ this._vanillaRPC.invoke(e, t, r)((e,t)=>{ null != t ? i.error(t) : (i.next(e), i.complete()) } ) } ) } teardown() {} } class Ef extends Tf { constructor(e) { super(e) } decrypt(e, t, i, r, n) { return this.invoke("decrypt", [e, t, i, r, n], [e, t, r]) } } class If extends Tf { constructor(e) { super(e), this.rpcService = e, this.sessions = {}, this._onEvent = (e,t,i)=>()=>{ null != this.sessions[e] && this.sessions[e].observer.trigger(t, i) } , this.rpcService.register("demuxer.event", this._onEvent) } teardown() { this.rpcService.unregister("demuxer.event") } init(e, t, i) { return [{maxSeekHole: r, maxBufferHole: n, audioPrimingDelay: s, stretchShortVideoTrack: a, forceKeyFrameOnDiscontinuity: o}] = [t], this.invoke("demuxer.init", [e, t = { maxSeekHole: r, maxBufferHole: n, audioPrimingDelay: s, stretchShortVideoTrack: a, forceKeyFrameOnDiscontinuity: o }, i], []).pipe(ur(e=>{ var t = new wf(this,e); return this.sessions[e] = t } )); var r, n, s, a, o } } class wf { constructor(e, t) { this.rpc = e, this.demuxSessionID = t, this.observer = new a } push(e, t, i, r, n, s, a, o, d, l, u, c, h) { return this.rpc.invoke("demuxer.push", [this.demuxSessionID, e, t, i, r, n, s, a, o, d, l, u, c], null != h ? h : [e]) } pushWithoutTransfer(e, t, i, r, n, s, a, o, d, l, u, c) { return this.push(e, t, i, r, n, s, a, o, d, l, u, c, []) } destroy() { this.observer.removeAllListeners(), this.rpc.invoke("demuxer.destroy", [this.demuxSessionID], []).subscribe() } } class Af { constructor() { this.handlers = {} } register(e, t) { if (null != this.handlers[e]) return !1; this.handlers[e] = t } unregister(e) { if (null != this.handlers[e]) return !1; delete this.handlers[e] } invoke(e, i) { return (t=Af._fallbackCallback)=>{ try { if (null == this.handlers[e]) throw new Error(`command ${e} not found`); this.handlers[e](...i)(t) } catch (e) { t(void 0, e) } } } teardown() { this.handlers = null } } Af._fallbackCallback = (e,t)=>{ if (null != t) throw t } ; const Of = e=>{ e = e.child({ name: "InlineRPCService" }); var t = new Af; return new i(t,e), new at(t,e), t } ; let kf; const Cf = t=>{ try { return (e=>{ try { if (null == kf) { const e = new Blob(["(" + Ky.toString() + ")(true);"],{ type: "text/javascript" }) , r = URL.createObjectURL(e); kf = new Worker(r) } var t = new ot(kf); return i = t, n = e.child({ name: "WorkerRPCService" }), i.register("logger.log", (e,i,...r)=>t=>{ try { for (const i of e) n = n.child(i); "function" == typeof n[i] && n[i](...r), t() } catch (e) { t(void 0, e) } } ), t } catch (e) { throw new Error("Failed to create WebWorker") } var i, n } )(t) } catch (e) { t.warn(e) } return Of(t) } , Df = a=>(e,t)=>{ let i = 0 , r = 0; for (var {timestamp: n, value: s} of e) { const e = Math.pow(Math.max(0, n - t) / 1e3, a); i += e * s, r += e } return i / r } , Mf = { "uniform-time-weighted": Df(0), "linear-time-weighted": Df(1), "quadratic-time-weighted": Df(2) }; class Pf { constructor(e, t="quadratic-time-weighted", i={ avgLatencyMs: NaN, avgBandwidth: NaN }) { this.windowSize = e, this.aggregationMethod = t, this.latencyEntries = [], this.bandwidthEntries = [], this.minEntries = 1, this.cleanUpExpiredEntries = this.cleanUpExpiredEntries.bind(this), this.bwSubject = new gi(i) } get estimate$() { return this.bwSubject.asObservable() } record(e) { var {trequest: t, tfirst: i, tload: r, bitsDownloaded: e} = e; t !== r && (this.recordLatency(t, i), this.recordBandwidth(t, r, 1e3 * e / (r - t)), this.bwSubject.closed || (t = this.getEstimate(), this.bwSubject.next(t))) } getEstimate() { if (this.latencyEntries.length < this.minEntries) return { avgLatencyMs: NaN, avgBandwidth: NaN }; const e = performance.now() - this.windowSize , t = Mf[this.aggregationMethod] , i = this.latencyEntries.map(({start: e, end: t})=>({ timestamp: t, value: t - e, duration: 1 })); this.bandwidthEntries = function(r) { function n(t, i) { if (t.length) { for (let e = 0; e < t.length; e++) if (t[e].start > i.start || t[e].start === i.start && t[e].end > i.end) { t.splice(e, 0, i); break } } else t.push(i) } const s = [...r].sort((e,t)=>e.start !== t.start ? e.start - t.start : e.end - t.end) , t = []; for (; s.length; ) { const r = s[0]; let e; if (s.shift(), t.length && (e = t[t.length - 1]), 0 === t.length || e.end <= r.start) t.push(r); else if (r.start === e.start) r.end === e.end ? e.bitsPerSec += r.bitsPerSec : r.end < e.end || (e.bitsPerSec += r.bitsPerSec, r.start = e.end, n(s, r)); else { var a = e.end , o = e.bitsPerSec; e.end = r.start; var i = { start: r.start, end: Math.min(a, r.end), bitsPerSec: r.bitsPerSec + o }; if (t.push(i), a !== r.end) { let e = 0 , t = 0 , i = 0; i = a < r.end ? (e = a, t = r.end, r.bitsPerSec) : (e = r.end, t = a, o), n(s, { start: e, end: t, bitsPerSec: i }) } } } return t }(this.bandwidthEntries); var r = this.bandwidthEntries.map(({end: e, bitsPerSec: t})=>({ timestamp: e, duration: 1, value: t })); return { avgLatencyMs: t(i, e), avgBandwidth: t(r, e) } } getLatest() { if (0 === this.latencyEntries.length) return { avgLatencyMs: NaN, avgBandwidth: NaN }; var e = this.latencyEntries[this.latencyEntries.length - 1] , t = this.bandwidthEntries[this.bandwidthEntries.length - 1]; return { avgLatencyMs: e.end - e.start, avgBandwidth: t.bitsPerSec } } recordLatency(e, t) { this.latencyEntries.push({ start: e, end: t }), this.updateCleanupTimeout(t) } recordBandwidth(e, t, i) { this.bandwidthEntries.push({ start: e, end: t, bitsPerSec: i }), this.updateCleanupTimeout(t) } setCleanupTimeout(e) { this.cleanupTimeout = setTimeout(this.cleanUpExpiredEntries, Math.max(e - performance.now(), 0)), this.cleanupTimestamp = e } clearCleanupTimeout() { void 0 !== this.cleanupTimeout && (clearTimeout(this.cleanupTimeout), this.cleanupTimeout = void 0), this.cleanupTimestamp = void 0 } updateCleanupTimeout(e) { e += this.windowSize; (!this.cleanupTimestamp || e < this.cleanupTimestamp) && (this.clearCleanupTimeout(), this.setCleanupTimeout(e)) } cleanUpExpiredEntries() { this.clearCleanupTimeout(); const t = performance.now() - this.windowSize; if (this.latencyEntries = this.latencyEntries.filter(e=>e.end >= t), this.bandwidthEntries = this.bandwidthEntries.filter(e=>e.end >= t), this.bwSubject.closed || this.bwSubject.next(this.getEstimate()), 0 < this.latencyEntries.length || 0 < this.bandwidthEntries.length) { const t = Math.min(...this.latencyEntries.map(e=>e.end), ...this.bandwidthEntries.map(e=>e.end)); this.updateCleanupTimeout(t) } } destroy() { this.clearCleanupTimeout() } } const xf = { setCombinedEstimate: function(t, i, r) { const n = qe(); if (void 0 !== t.storage.set) { var s = t.bandwidthHistoryStorageKey , a = { avgLatencyMs: i.avgLatencyMs, avgBandwidth: i.avgBandwidth } , a = Object.assign({}, a, { expires: Date.now() + t.bandwidthHistoryTTL }); try { t.storage.set(s, JSON.stringify(a)) } catch (t) { n.warn(`Error stringifying! Not persisting bandwidth estimates: ${t.message}`) } i = { maxDuration: i.maxDurationSec, avgFragParseTimeMs: i.avgParseTimeMs, avgFragBufferCreationDelayMs: i.avgBufferCreateMs, avgPlaylistLoadTimeMs: i.avgPlaylistLoadTimeMs, avgPlaylistParseTimeMs: i.avgPlaylistParseTimeMs, avgInitFragAppendMs: i.avgInitFragAppendMs, avgDataFragAppendMs: i.avgDataFragAppendMs }; let e = t.storageKeyPrefix; r && (e += r); try { t.storage.set(e, JSON.stringify(i)) } catch (t) { n.warn(`Error stringifying! Not persisting bandwidth estimates: ${t.message}`) } } else n.warn("storage.set is not supported! Not persisting bandwidth estimates") }, getCombinedEstimate: function(t, e) { const i = qe(); let r = {}; if (void 0 === t.storage.get) return i.warn("storage.get is not supported! unable to retreive bandwidth estimates"), this.convertStorageJsonToCombinedEstimate(r); try { let e = JSON.parse(t.storage.get(t.bandwidthHistoryStorageKey)); e = null != e && e.expires && e.expires < Date.now() ? null : { avgLatencyMs: null == e ? void 0 : e.avgLatencyMs, avgBandwidth: null == e ? void 0 : e.avgBandwidth }, r = Object.assign(Object.assign({}, r), e) } catch (t) { i.warn(`Unable to get persisted bandwidth history: ${t.message}`) } let n = t.storageKeyPrefix; e && (n += e); try { const e = JSON.parse(t.storage.get(n)); r = Object.assign(Object.assign({}, r), e) } catch (t) { i.warn(`Unable to get persisted bandwidth history: ${t.message}`) } return this.convertStorageJsonToCombinedEstimate(r) }, convertStorageJsonToCombinedEstimate: function(e) { return { avgLatencyMs: (null == e ? void 0 : e.avgLatencyMs) || NaN, avgBandwidth: (null == e ? void 0 : e.avgBandwidth) || NaN, maxDurationSec: (null == e ? void 0 : e.maxDuration) || NaN, avgParseTimeMs: (null == e ? void 0 : e.avgFragParseTimeMs) || NaN, avgBufferCreateMs: (null == e ? void 0 : e.avgFragBufferCreationDelayMs) || NaN, avgPlaylistLoadTimeMs: (null == e ? void 0 : e.avgPlaylistLoadTimeMs) || NaN, avgPlaylistParseTimeMs: (null == e ? void 0 : e.avgPlaylistParseTimeMs) || NaN, avgInitFragAppendMs: (null == e ? void 0 : e.avgInitFragAppendMs) || NaN, avgDataFragAppendMs: (null == e ? void 0 : e.avgDataFragAppendMs) || NaN } }, getBandwidthEstimate: function(e, t) { const i = this.getCombinedEstimate(e, t) , r = { avgLatencyMs: null == i ? void 0 : i.avgLatencyMs, avgBandwidth: null == i ? void 0 : i.avgBandwidth }; return ne(r.avgLatencyMs) || (r.avgLatencyMs = NaN), ne(r.avgBandwidth) || (r.avgBandwidth = NaN), r }, getPlaylistEstimate: function(e, t) { const i = this.getCombinedEstimate(e, t) , r = { avgPlaylistLoadTimeMs: null == i ? void 0 : i.avgPlaylistLoadTimeMs, avgPlaylistParseTimeMs: null == i ? void 0 : i.avgPlaylistParseTimeMs }; return ne(r.avgPlaylistLoadTimeMs) || (r.avgPlaylistLoadTimeMs = NaN), ne(r.avgPlaylistParseTimeMs) || (r.avgPlaylistParseTimeMs = NaN), r }, getFragEstimate: function(e, t) { const i = this.getCombinedEstimate(e, t) , r = { maxDurationSec: null == i ? void 0 : i.maxDurationSec, avgParseTimeMs: null == i ? void 0 : i.avgParseTimeMs }; return ne(r.maxDurationSec) || (r.maxDurationSec = NaN), ne(r.avgParseTimeMs) || (r.avgParseTimeMs = NaN), r }, getBufferEstimate: function(e, t) { const i = this.getCombinedEstimate(e, t) , r = { avgBufferCreateMs: null == i ? void 0 : i.avgBufferCreateMs, avgInitFragAppendMs: null == i ? void 0 : i.avgInitFragAppendMs, avgDataFragAppendMs: null == i ? void 0 : i.avgDataFragAppendMs }; return ne(r.avgBufferCreateMs) || (r.avgBufferCreateMs = NaN), ne(r.avgInitFragAppendMs) || (r.avgInitFragAppendMs = NaN), ne(r.avgDataFragAppendMs) || (r.avgDataFragAppendMs = NaN), r } }; var Rf = xf; class Lf { constructor(e=0) { this._minSamples = e, this._sum = 0, this._max = Number.NEGATIVE_INFINITY, this._numSamples = 0 } get avg() { return this._numSamples < this._minSamples ? NaN : this._sum / this._numSamples } get max() { return 0 < this.count ? this._max : NaN } get count() { return this._numSamples } reset() { this._sum = 0, this._numSamples = 0, this._max = Number.NEGATIVE_INFINITY } add(e) { this._sum += e, this._max = Math.max(this._max, e), ++this._numSamples } } class _f extends Od { constructor(e, t) { super(e), this.id = t } getBandwidthEstimate(e, t) { var i; const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.bandwidthEstimate); if (ne(r.avgBandwidth) && ne(r.avgLatencyMs)) return r; if (e) { const i = xf.getBandwidthEstimate(e, t); ne(r.avgBandwidth) || (r.avgBandwidth = i.avgBandwidth), ne(r.avgLatencyMs) || (r.avgLatencyMs = i.avgLatencyMs) } return r } getPlaylistEstimate(e, t) { var i; const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.playlistEstimate) , n = e=>ne(e.avgPlaylistLoadTimeMs) && ne(e.avgPlaylistParseTimeMs); if (n(r)) return r; if (e) { const i = xf.getPlaylistEstimate(e, t); if (ne(r.avgPlaylistLoadTimeMs) || (r.avgPlaylistLoadTimeMs = i.avgPlaylistLoadTimeMs), ne(r.avgPlaylistParseTimeMs) || (r.avgPlaylistParseTimeMs = i.avgPlaylistParseTimeMs), n(r)) return r; ne(r.avgPlaylistLoadTimeMs) || (r.avgPlaylistLoadTimeMs = e.statDefaults.playlistLoadTimeMs), ne(r.avgPlaylistParseTimeMs) || (r.avgPlaylistParseTimeMs = e.statDefaults.playlistParseTimeMs) } return r } getBufferEstimate(e, t) { var i; const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.bufferEstimate) , n = e=>ne(e.avgBufferCreateMs) && ne(e.avgDataFragAppendMs) && ne(e.avgInitFragAppendMs); if (n(r)) return r; if (e) { const i = xf.getBufferEstimate(e, t); if (ne(r.avgBufferCreateMs) || (r.avgBufferCreateMs = i.avgBufferCreateMs), ne(r.avgDataFragAppendMs) || (r.avgDataFragAppendMs = i.avgDataFragAppendMs), ne(r.avgInitFragAppendMs) || (r.avgInitFragAppendMs = i.avgInitFragAppendMs), n(r)) return r; ne(r.avgBufferCreateMs) || (r.avgBufferCreateMs = e.statDefaults.fragBufferCreationDelayMs), ne(r.avgDataFragAppendMs) || (r.avgDataFragAppendMs = e.statDefaults.dataFragAppendMs), ne(r.avgInitFragAppendMs) || (r.avgInitFragAppendMs = e.statDefaults.initFragAppendMs) } return r } getFragEstimate(e, t) { var i; const r = Object.assign({}, null === (i = this.statsEntity) || void 0 === i ? void 0 : i.fragEstimate) , n = e=>ne(e.maxDurationSec) && ne(e.avgParseTimeMs); if (n(r)) return r; if (e) { const i = xf.getFragEstimate(e, t); if (ne(r.maxDurationSec) || (r.maxDurationSec = i.maxDurationSec), ne(r.avgParseTimeMs) || (r.avgParseTimeMs = i.avgParseTimeMs), n(r)) return r; ne(r.maxDurationSec) || (r.maxDurationSec = e.defaultTargetDuration), ne(r.avgParseTimeMs) || (r.avgParseTimeMs = e.statDefaults.fragParseTimeMs) } return r } getCombinedEstimate() { return Object.assign(Object.assign(Object.assign(Object.assign({}, this.getFragEstimate()), this.getPlaylistEstimate()), this.getBufferEstimate()), this.getBandwidthEstimate()) } get statsEntity() { return this.getEntity(this.id) } get bandwidthSample() { var e; return null === (e = this.statsEntity) || void 0 === e ? void 0 : e.bandwidthSample } get bandwidthStatus() { var e; return null === (e = this.statsEntity) || void 0 === e ? void 0 : e.bandwidthStatus } get fragSample() { var e; return null === (e = this.statsEntity) || void 0 === e ? void 0 : e.fragSample } get bandwidthEstimate$() { return this.selectEntity(this.id, "bandwidthEstimate") } get fragEstimate$() { return this.selectEntity(this.id, "fragEstimate") } get playlistEstimate$() { return this.selectEntity(this.id, "playlistEstimate") } get bufferEstimate$() { return this.selectEntity(this.id, "bufferEstimate") } get bandwidthSample$() { return this.selectEntity(this.id, ({bandwidthSample: e})=>e).pipe(Up()) } get fragSample$() { return this.selectEntity(this.id, ({fragSample: e})=>e).pipe(Up()) } get playlistSample$() { return this.selectEntity(this.id, ({playlistSample: e})=>e).pipe(Up()) } get bufferMetric$() { return this.selectEntity(this.id, ({bufferMetric: e})=>e).pipe(Up()) } } class Nf { constructor(e) { this.statsStore = e } getQuery() { return new Od(this.statsStore) } getQueryForItem(e) { return new _f(this.statsStore,e) } remove(e) { this.statsStore.remove(e) } removeAll() { this.statsStore.remove() } setBandwidthSample(e) { this.statsStore.bandwidthSample = e } setFragSample(e) { this.statsStore.fragSample = e } setPlaylistSample(e) { this.statsStore.playlistSample = e } setBufferMetric(e) { this.statsStore.bufferMetric = e } setBandwidthEstimate(e) { this.statsStore.bandwidthEstimate = e } setFragEstimate(e) { this.statsStore.fragEstimate = e } setPlaylistEstimate(e) { this.statsStore.playlistEstimate = e } setBufferEstimate(e) { this.statsStore.bufferEstimate = e } } const Ff = new class extends pd { constructor() { super({}, { name: "stats-store", producerFn: vc }) } set statsEntity(e) { Co("statsStore.set.stats"), sd(()=>{ this.add(e), this.setActive(e.id) } ) } set playlistSample(t) { Co(`stats.set.playlistSample: ${t}`), this.updateActive(e=>{ e.playlistSample = t } ) } set bandwidthSample(t) { Co(`stats.set.bandwidthSample: ${t}`), this.updateActive(e=>{ e.bandwidthSample = t, e.bandwidthStatus.bandwidthSampleCount += 1, e.bandwidthStatus.instantBw = 8e3 * t.loaded / (t.tload - t.trequest) } ) } set fragSample(t) { Co(`stats.set.fragSample: ${t}`), this.updateActive(e=>{ e.fragSample = t } ) } set bufferMetric(t) { Co(`stats.set.bufferMetric: ${t}`), this.updateActive(e=>{ e.bufferMetric = t } ) } set bandwidthEstimate(t) { Co(`stats.set.bandwidthEstimate: ${t}`), this.updateActive(e=>{ e.bandwidthEstimate = t } ) } set fragEstimate(t) { Co(`stats.set.fragEstimate: ${t}`), this.updateActive(e=>{ e.fragEstimate = t } ) } set playlistEstimate(t) { Co(`stats.set.playlistEstimate: ${t}`), this.updateActive(e=>{ e.playlistEstimate = t } ) } set bufferEstimate(t) { Co(`stats.set.bufferEstimate: ${t}`), this.updateActive(e=>{ e.bufferEstimate = t } ) } } ; let Bf = null; const Uf = e=>new _f(Ff,e); function $f(e, t) { if (e === t) return !0; if (!e || !t) return !1; let i = Object.keys(e).length === Object.keys(t).length; for (const r of Object.keys(e)) i = i && (isNaN(e[r]) && isNaN(t[r]) || e[r] === t[r]); return i } function Vf(f, m, g) { return new Ut(e=>{ (e=>{ const t = Uf(e); t.hasEntity(e) ? Bi(t) : (i = Ff, e = e, Co("stats.loading"), i.setLoading(!0), i.statsEntity = { id: e, bandwidthEstimate: { avgLatencyMs: NaN, avgBandwidth: NaN }, bandwidthStatus: { bandwidthSampleCount: 0, instantBw: NaN }, fragEstimate: { maxDurationSec: NaN, avgParseTimeMs: NaN }, playlistEstimate: { avgPlaylistLoadTimeMs: NaN, avgPlaylistParseTimeMs: NaN }, bufferEstimate: { avgBufferCreateMs: NaN, avgInitFragAppendMs: NaN, avgDataFragAppendMs: NaN } }, i.setLoading(!1), Co("stats.loaded")); var i } )(g.itemId); const t = Uf(g.itemId) , {fragSample$: i, playlistSample$: r, bandwidthSample$: n, bufferMetric$: s} = t; return nn(r.pipe(Hi(Zi), (h = f, p = m, e=>e.pipe(Ql.tag("statsPlaylistProcessingEpic.in"), na((e,t)=>(e.playlistLoadTimeMs.add(t.playlistLoadTimeMs), e.playlistParseTimeMs.add(t.playlistParseTimeMs), e), { playlistLoadTimeMs: new Lf(h.minPlaylistCount), playlistParseTimeMs: new Lf(h.minPlaylistCount) }), ur(e=>({ avgPlaylistLoadTimeMs: e.playlistLoadTimeMs.avg, avgPlaylistParseTimeMs: e.playlistParseTimeMs.avg })), Es($f), Ja(e=>{ p.setPlaylistEstimate(e) } )))), n.pipe(Hi(Zi), (u = f, c = m, n=>new Ut(e=>{ let t = new Pf(u.bandwidthHistoryWindowSize,u.bandwidthHistoryAggregationMethod,{ avgLatencyMs: NaN, avgBandwidth: NaN }); const i = t.estimate$ , r = nn(n.pipe(an(e=>e.complete), Ja(e=>{} ), ur(e=>({ trequest: e.trequest, tfirst: e.tfirst, tload: e.tload, bitsDownloaded: 8 * e.loaded })), Ql.tag("statsBandwidthProcessingEpic.in"), Ra(e=>(t.record(e), Ti))), i.pipe(Es(), Ql.tag("statsBandwidthProcessingEpic.change"), Ja(e=>{ c && c.setBandwidthEstimate(e) } ))).subscribe(e); return ()=>{ r.unsubscribe(), t.destroy(), t = void 0 } } ))), i.pipe(Hi(Zi), (d = f, l = m, e=>e.pipe(Ql.tag("statsFragProcessingEpic.in"), na((e,t)=>(e.durationSec.add(t.durationSec), e.fragParseMs.add(t.parseTimeMs), e), { durationSec: new Lf, fragParseMs: new Lf(d.minFragmentCount) }), ur(e=>({ maxDurationSec: e.durationSec.max, avgParseTimeMs: e.fragParseMs.avg })), Es($f), Ja(e=>l.setFragEstimate(e))))), s.pipe(Hi(Zi), (a = f, o = m, e=>e.pipe(Ql.tag("statsBufferMetricProcessingEpic.in"), na((e,t)=>(ne(t.bufferCreationStart) && ne(t.bufferCreationEnd) && e.bufferCreateMs.add(t.bufferCreationEnd - t.bufferCreationStart), ne(t.startInitAppend) && ne(t.endInitAppend) && e.initFragAppendMs.add(t.endInitAppend - t.startInitAppend), ne(t.startDataAppend) && ne(t.endDataAppend) && e.dataFragAppendMs.add(t.endDataAppend - t.startDataAppend), e), { bufferCreateMs: new Lf, initFragAppendMs: new Lf, dataFragAppendMs: new Lf(a.minFragmentCount) }), ur(e=>({ avgBufferCreateMs: e.bufferCreateMs.avg, avgInitFragAppendMs: e.initFragAppendMs.avg, avgDataFragAppendMs: e.dataFragAppendMs.avg })), Es($f), Ja(e=>{ o.setBufferEstimate(e) } ))))).pipe(Ua(Ti)).subscribe(e), ()=>{ Rf.setCombinedEstimate(f, Object.assign(Object.assign(Object.assign(Object.assign({}, t.getFragEstimate()), t.getPlaylistEstimate()), t.getBufferEstimate()), t.getBandwidthEstimate()), g.serviceName), m.remove(g.itemId) } ; var a, o, d, l, u, c, h, p } ) } const Kf = { isWebkitMediaElement: e=>"webkitDroppedFrameCount"in e, isHtmlVideoElement: e=>"getVideoPlaybackQuality"in e, timeRangeToArray(t) { const i = []; for (let e = 0; e < t.length; e++) i.push([t.start(e), t.end(e)]); return i } }; class Hf extends Ut { constructor() { super(e=>this.works$.pipe(ur(e=>Lr(e)), zr()).subscribe(e)), this.works$ = new zt } addWork(e) { this.works$.next(e) } complete() { this.works$.complete() } } class jf { constructor(e, t) { this.hls = e, this.sessionID = t, this.rtcQuery = null, this.accessLogData = this.createAccessLogEntry(), this.accesslog = [], this.errorlog = [] } destroy() { this.rtcQuery = null, this.accesslog = [], this.errorlog = [], this.accessLogData = void 0, this.accessLogReporter = void 0 } setRTCQuery(e) { this.rtcQuery = e } setupReporter(e) { this.accessLogReporter = { SessionID: this.sessionID, ClientName: null == e ? void 0 : e.clientName, ServiceName: null == e ? void 0 : e.serviceName } } addPlayTime(e) { var t, e = null === (t = this.rtcQuery) || void 0 === t ? void 0 : t.getEntity(e); !e || "RTC_STATE_PLAY" === (e = e.sessionControlRecord).state && (this.accessLogData.PlayTimeWC = (this.accessLogData.PlayTimeWC || 0) + e.eventStartTime) } updatePlaybackInfo(e, t) { this.accessLogData.ViFrDr = this.rtcQuery.getEntity(e).sessionControlRecord.droppedVideoFrames || 0 } updateStallCount(e) { "RTC_STATE_PLAY" === this.rtcQuery.getEntity(e).sessionControlRecord.state && this.accessLogData.StallCount++ } updateMediaEngineStallCount(e) { "RTC_STATE_PLAY" === this.rtcQuery.getEntity(e).sessionControlRecord.state && this.accessLogData.MediaEngineStallCount++ } updateCanPlay(e) { this.accessLogData.StartupTime = this.rtcQuery.getEntity(e).sessionControlRecord.eventStartTime } updateFragLoaded(e, t, i) { var r; i.fragType === ul.Variant ? (this.accessLogData.NetBytes += i.bytes, this.accessLogData.ADT += i.adt, r = this.aggregateFragObserverdBitrate(i, ++this.accessLogData.fragmentCnt, this.accessLogData.NetBytes, this.accessLogData.ADT), this.accessLogData.OBRLast = r.obrLast, this.accessLogData.OBRMean = r.obrMean, this.aggregateFragMinMaxBitrate(this.accessLogData, r.obr), this.hls.realCurrentTime > i.startPTS && !t && this.accessLogData.overdue++, this.hasGap(i.startPTS, i.endPTS, this.accessLogData.lastStartPTS, this.accessLogData.lastEndPTS) && this.addToAccessLog(e), this.accessLogData.startPTS || (this.accessLogData.startPTS = i.startPTS), this.accessLogData.lastStartPTS = i.startPTS, this.accessLogData.lastEndPTS = i.endPTS, this.accessLogData.videoBytes += i.bytes, this.accessLogData.videoDuration += i.duration) : i.fragType === ul.AltAudio && (this.accessLogData.audioBytes += i.bytes, this.accessLogData.audioDuration += i.duration) } addToAccessLog(e) { var t = this.getVariantInfo(e) , i = this.rtcQuery.getEntity(e).sessionControlRecord.curLevelUrl , r = this.rtcQuery.getEntity(e).playEndedRecord.PlayType; if (i && "" !== i) { r = this.translateToAccessLogItem(e, i, t, r); if (r) { const n = this.accesslog.length - 20; 0 < n && this.accesslog.splice(0, n), this.accesslog.push(r) } this.accessLogData = this.createAccessLogEntry(); e = this.rtcQuery.getEntity(e).switchCompleteRecord.MediaDur; this.accessLogData.lastMediaDur = e || this.hls.bufferedDuration } } addToErrorLog(e, t) { var i = null === (r = this.rtcQuery) || void 0 === r ? void 0 : r.getEntity(e); if (i) { var r = Number(("mediaError" === t ? i.playErrorRecord : i.nwErrorRecord).ErrCode) , i = i.sessionControlRecord.curLevelUrl , r = this.translateToErrorLogItem(e, i, { domain: t, code: r }); if (r) { const e = this.errorlog.length - 20; 0 < e && this.errorlog.splice(0, e), this.errorlog.push(r) } } } getAccessLog(e) { var t; const i = this.accesslog.slice(0) , r = null === (t = this.rtcQuery) || void 0 === t ? void 0 : t.getEntity(e); if (i && r) { const t = r.sessionControlRecord.curLevelUrl; if (t && "" !== t) { const r = this.getVariantInfo(e) , n = this.translateToAccessLogItem(e, t, r, this.rtcQuery.getEntity(e).playEndedRecord.PlayType); n && (n["c-provisional-entry"] = !0, i.push(n)) } } return i } get errorLog() { return this.errorlog } createAccessLogEntry() { return { fragmentCnt: 0, overdue: 0, startPTS: 0, obrMax: 0, obrMin: 0, audioBytes: 0, audioDuration: 0, videoBytes: 0, videoDuration: 0, svrAddrChanged: 0, svrAddr: "", PlayTimeWC: 0, ViFrDr: 0, StallCount: 0, MediaEngineStallCount: 0, ADT: 0, NetBytes: 0, StartupTime: 0, OBRMean: 0, OBRLast: 0 } } convertStringObjectToPrimitive(e) { return e ? "object" == typeof e ? e.toString() : e : "" } updateSvrAddrStats(t) { const i = fl.parseURL(t); if (i && i.netLoc) { const t = i.netLoc.indexOf(":"); let e = 0 <= t ? i.netLoc.slice(0, t) : i.netLoc; e.startsWith("//") && (e = e.slice(2)), this.accessLogData.svrAddr ? e !== this.accessLogData.svrAddr && this.accessLogData.svrAddrChanged++ : this.accessLogData.svrAddrChanged = 0, this.accessLogData.svrAddr = e } } translateToAccessLogItem(e, t, i, r) { t = this.convertStringObjectToPrimitive(t); this.updateSvrAddrStats(t); let n = this.rtcQuery.getEntity(e).switchCompleteRecord.MediaDur; n = n || this.hls.bufferedDuration, n = n || 0; const s = { uri: t, "s-ip": this.accessLogData.svrAddr, "s-ip-changes": this.accessLogData.svrAddrChanged, "sc-wwan-count": -1, "c-transfer-duration": this.accessLogData.ADT, bytes: this.accessLogData.NetBytes, "c-total-media-requests": this.accessLogData.fragmentCnt, "cs-guid": this.accessLogReporter.SessionID, "c-start-time": this.accessLogData.startPTS, "c-startup-time": this.accessLogData.StartupTime, "c-duration-watched": this.accessLogData.PlayTimeWC / 1e3, "c-frames-dropped": this.accessLogData.ViFrDr, "c-stalls": this.accessLogData.StallCount + this.accessLogData.MediaEngineStallCount, "c-duration-downloaded": this.accessLogData.lastMediaDur ? n - this.accessLogData.lastMediaDur : n, "c-overdue": this.accessLogData.overdue, "c-avg-video-bitrate": 8 * this.accessLogData.videoBytes / (this.accessLogData.videoDuration || 1), "c-observed-max-bitrate": this.accessLogData.obrMax, "c-observed-min-bitrate": this.accessLogData.obrMin, "sc-indicated-bitrate": i.bandwidth || 0, "sc-indicated-avg-bitrate": i.avgBandwidth || 0, "c-observed-bitrate": this.accessLogData.OBRMean, "c-switch-bitrate": this.accessLogData.OBRLast, "c-provisional-entry": !1 }; return s["s-playback-type"] = r, this.accessLogData.audioBytes && (s["c-avg-audio-bitrate"] = 8 * this.accessLogData.audioBytes / (this.accessLogData.audioDuration || 1)), s } translateToErrorLogItem(e, t, i) { t = this.convertStringObjectToPrimitive(t); return this.updateSvrAddrStats(t), { date: new Date, "cs-guid": this.accessLogReporter.SessionID + "-" + e, uri: t, "s-ip": this.accessLogData.svrAddr, status: "" + i.code, domain: i.domain } } hasGap(e, t, i, r) { return void 0 !== e && void 0 !== i && (1 < e - r || 1 < i - t) } aggregateFragObserverdBitrate(e, t, i, r) { r = 8 * i / (r / 1e3); return { obr: r, obrLast: 8 * e.bytes / (e.adt / 1e3), obrMean: r / t } } aggregateFragMinMaxBitrate(e, t) { (!e.obrMax || t > e.obrMax) && (e.obrMax = t), (!e.obrMin || t < e.obrMin) && (e.obrMin = t) } getVariantInfo(e) { var t = this.rtcQuery.getEntity(e).sessionControlRecord.curLevelUrl , e = null === (e = this.rtcQuery.getEntity(e).sessionControlRecord.manifestData) || void 0 === e ? void 0 : e.variantList; return t && e && e[t] ? e[t] : {} } } const qf = (r,e,t,i,n,s)=>{ var a, {absoluteUrl: o, byteRangeOffset: d, keyTagInfo: l, iframe: u, isInitSegment: c} = r, h = o, p = l["method"], {start: o, end: l} = d, t = xc({ url: h }, t); let f, m = o, g = l, y = !1, v = ne(o) || ne(l) ? d : void 0; if ("AES-128" === p && l && (u || c)) { const r = l - o; r % 16 && (g = l + (16 - r % 16)), 0 !== o && (y = !0, m = o - 16), v = { start: m, end: g } } return n && ne(r.mediaSeqNum) && r.mediaOptionType === ul.Variant && (f = [], null === (n = t.reportHTTPResponseHeaders) || void 0 === n || n.forEach(function(e) { vl.includes(e) ? f.push(e) : qe().warn({ name: "load-media-fragment" }, `${e} is not in approved privacy list. Actions required.`) }), 0 === f.length && (f = void 0)), Pc({ url: h, byteRangeOffset: v, checkContentLength: !0, extendMaxTTFB: s, collectServerInstanceInfo: f, onProgress: i, xhrSetup: e.xhrSetup }, t).pipe(ur(([e,t,i])=>{ if (y) { const t = e; r.keyTagInfo.iv = new Uint8Array(t.slice(0, 16)), e = t.slice(16) } return [r, e, t, i] } ), (a = r, e=>e.pipe(Un(e=>{ if (e instanceof ou) throw new au(!1,"Timeout",0,$.FragmentTimeoutError,!0,a,e.stats); if (e instanceof tu) throw new au(!1,e.message,e.code,{ code: e.code, text: "Fragment Network Error" },!1,a); throw e } )))) } , Qf = { clearkey: Zc, fairplaystreaming: pu, playready: _c, widevine: Nc } , Gf = { getKeySystemFormat(e) { e = Qf[e]; return e ? e.keyFormatString : "" }, getKeySystemSecurityLevel(e) { e = Qf[e]; return e ? e.securityLevels : null } } , Wf = { NONE: "", "AES-128": "", "ISO-23001-7": "", "SAMPLE-AES": "", "SAMPLE-AES-CTR": "" } , zf = { NONE: 0, "TYPE-0": 1, "TYPE-1": 2, "TYPE-2": 3 }; function Xf(e) { return e in zf } function Yf(e) { return null == e ? 4 : zf[e] } const Jf = ["SDR", "PQ", "HLG"] , Zf = { afr: "af", aka: "ak", amh: "am", ara: "ar", arg: "an", asm: "as", ava: "av", ave: "ae", aym: "ay", aze: "az", bam: "bm", bel: "be", ben: "bn", bih: "bh", bod: "bo", bos: "bs", bre: "br", bul: "bg", cat: "ca", ces: "cs", cha: "ch", che: "ce", chu: "cu", chv: "cv", cor: "kw", cos: "co", cre: "cr", cym: "cy", dan: "da", deu: "de", div: "dv", dzo: "dz", ell: "el", eng: "en", epo: "eo", est: "et", eus: "eu", ewe: "ee", fao: "fo", fas: "fa", fin: "fi", fra: "fr", fry: "fy", ful: "ff", gla: "gd", gle: "ga", glg: "gl", glv: "gv", grn: "gn", guj: "gu", hat: "ht", heb: "he", her: "hz", hin: "hi", hmo: "ho", hrv: "hr", hun: "hu", hye: "hy", ibo: "ig", ido: "io", iii: "ii", iku: "iu", ile: "ie", ina: "ia", ind: "id", isl: "is", ita: "it", jav: "jv", jpn: "ja", kal: "kl", kan: "kn", kas: "ks", kat: "ka", kau: "kr", kaz: "kk", khm: "km", kik: "ki", kin: "rw", kir: "ky", kom: "kv", kon: "kg", kor: "ko", kua: "kj", kur: "ku", lao: "lo", lat: "la", lav: "lv", lim: "li", lit: "lt", ltz: "lb", lub: "lu", lug: "lg", mah: "mh", mal: "ml", mar: "mr", mkd: "mk", mlg: "mg", mlt: "mt", mol: "mo", mon: "mn", mri: "mi", msa: "ms", mya: "my", nav: "nv", nbl: "nr", nde: "nd", ndo: "ng", nep: "ne", nld: "nl", nno: "nn", nob: "nb", nya: "ny", oci: "oc", oji: "oj", ori: "or", orm: "om", oss: "os", pan: "pa", pli: "pi", pol: "pl", por: "pt", pus: "ps", que: "qu", roh: "rm", ron: "ro", run: "rn", rus: "ru", san: "sa", sin: "si", slk: "sk", slv: "sl", sme: "se", snd: "sd", som: "so", spa: "es", sqi: "sq", srd: "sc", srp: "sr", sun: "su", swa: "sw", swe: "sv", tah: "ty", tam: "ta", tat: "tt", tel: "te", tgk: "tg", tgl: "tl", tha: "th", tir: "ti", ton: "to", tuk: "tk", tur: "tr", uig: "ug", ukr: "uk", urd: "ur", uzb: "uz", ven: "ve", vie: "vi", wln: "wa", yid: "yi", zha: "za", zho: "zh" } , em = { isLanguageCode: e=>e in Zf, shortenLanguageCode(e) { let t; var i, r; return e && (r = 0 <= (i = e.indexOf("-")) ? e.slice(0, i) : e, em.isLanguageCode(r) && (t = Zf[r]), t = t || r, 0 < i && (t += "-" + e.slice(i + 1))), t } } , tm = { getRichestVideoCodec(e) { if (e && e.length) { e = e.sort((e,t)=>$p(t) - $p(e)); return e && e.length ? e[0] : void 0 } }, getRichestAudioCodec(e) { if (e && e.length) { e = e.sort((e,t)=>Kp(t) - Kp(e)); return e && e.length ? e[0] : void 0 } }, getRichestChannelLayoutForGroupId(t, i) { if (t && i && i.length) { let e; const r = i.filter(e=>e.groupId === t); if (r && r.length) { const t = r.sort((e,t)=>Se.getChannelCount(t.channels) - Se.getChannelCount(e.channels)); t && t.length && (e = t[0].channels) } return e } } }; function im(e) { return new R(L,"steeringManifestParsingError",!1,e,$.FormatError) } class rm { constructor(e) { this._url = null, this._programDateTime = null, this._byteRange = null, this.relurl = null, this.baseurl = null, this.isInitSegment = !1, this.mediaSeqNum = NaN, this.cc = NaN, this.iframe = !1, this.bitrate = NaN, this.start = NaN, this.duration = NaN, this.lastByteRangeEndOffset = NaN, this.inheritQuery = e, this.tagList = new Array, this.iframe = !1 } getMediaFragment(e, t, i) { const r = { mediaOptionType: i, absoluteUrl: this.url, start: this.start, duration: this.duration, mediaSeqNum: this.mediaSeqNum, discoSeqNum: this.cc, mediaOptionId: t, itemId: e, isLastFragment: !1, isInitSegment: this.isInitSegment }; return null !== (e = this.byteRange) && void 0 !== e && e.length && (r.byteRangeOffset = { start: this.byteRangeStartOffset, end: this.byteRangeEndOffset }), this.iframe && (r.iframe = this.iframe), this.levelkey && (r.keyTagInfo = this.levelkey), this.programDateTime && (r.programDateTime = this.programDateTime), r } get url() { return !this._url && this.relurl && this.baseurl && (this._url = fl.buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: !0, inheritQuery: this.inheritQuery })), this._url } set url(e) { this._url = e } get programDateTime() { return !this._programDateTime && this.rawProgramDateTime && (this._programDateTime = new Date(Date.parse(this.rawProgramDateTime))), this._programDateTime } get byteRange() { if (!this._byteRange) { const i = new Array(2); var e, t; this.rawByteRange && (1 === (e = this.rawByteRange.split("@", 2)).length ? (t = this["lastByteRangeEndOffset"], i[0] = t || 0) : i[0] = parseInt(e[1]), i[1] = parseInt(e[0]) + i[0]), this._byteRange = i } return this._byteRange } get byteRangeStartOffset() { return this.byteRange[0] } get byteRangeEndOffset() { return this.byteRange[1] } get rangeString() { return 0 <= this.start && 0 <= this.duration ? `${this.start.toFixed(2)}-${(this.start + this.duration).toFixed(2)}` : "N/A" } get fragTag() { return `sn/cc/levelId: ${this.mediaSeqNum}/${this.cc}` } } const nm = { parseMediaCharacteristics: e=>e ? e.split(/\s*,\s*/) : new Array, addMediaToSelectionArray(e, t, i) { if (void 0 === e) return -1; const r = e.MediaSelectionGroupOptions; let n = r.find(e=>e.MediaSelectionOptionsMediaType === t.mediaType && e.MediaSelectionOptionsName === t.name && e.MediaSelectionOptionsExtendedLanguageTag === t.lang); return n || (n = { MediaSelectionOptionsMediaType: t.mediaType, MediaSelectionOptionsExtendedLanguageTag: t.lang, MediaSelectionOptionsIsDefault: t.default, MediaSelectionOptionsName: t.name, MediaSelectionOptionsPersistentID: i, MediaSelectionOptionsTaggedMediaCharacteristics: t.characteristics }, t.mediaType === pl.SUBTITLE && (n.MediaSelectionOptionsDisplaysNonForcedSubtitles = t.forced ? hl.NO : hl.YES), i++, r.push(n)), t.persistentID = n.MediaSelectionOptionsPersistentID, i }, addDefaultClosedCaptionOption(e, t, i, r) { e = { itemId: e, mediaOptionType: ul.Subtitle, id: 0, mediaOptionId: "cc1_" + Jd(), mediaType: pl.CLOSEDCAPTION, inStreamID: "CC1", groupId: "cc", name: "English-CC", type: "CLOSED-CAPTIONS", default: !1, autoselect: !1, forced: !1, lang: "en", characteristics: ["public.accessibility.transcribes-spoken-dialog", "public.accessibility.describes-music-and-sound"], persistentID: r }; t.push(e), nm.addMediaToSelectionArray(i, e, r) } } , sm = { BANDWIDTH: NaN, "AVERAGE-BANDWIDTH": NaN } , am = { "TIME-OFFSET": NaN, "FRAME-RATE": NaN, SCORE: NaN, "PLANNED-DURATION": NaN, DURATION: NaN } , om = /^(\d+)x(\d+)$/ , dm = /\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g; class lm { constructor(e) { this.validTags = e } isKey(e) { return e in this.validTags } trySetValue(e, t, i) { return !!this.isKey(e) && (i[e] = this.parseFunc(t), !0) } } class um { static parseTags(t) { let i; var r = {}; if (!t) return r; for (dm.lastIndex = 0; null !== (i = dm.exec(t)); ) { const t = i[1].toUpperCase(); let e = i[2]; 0 === e.indexOf('"') && e.lastIndexOf('"') === e.length - 1 && (e = e.slice(1, -1)); for (const i of um.tagParsers) if (i.trySetValue(t, e, r)) break } return r } } um.tagParsers = [new class extends lm { parseFunc(e) { return e } } ({ NAME: "", TYPE: "", DEFAULT: "", AUTOSELECT: "", FORCED: "", LANGUAGE: "", URI: "", AUDIO: "", "VIDEO-RANGE": "", "CLOSED-CAPTIONS": "", CODECS: "", BYTERANGE: "", "INSTREAM-ID": "", "GROUP-ID": "", CHANNELS: "", CHARACTERISTICS: "", KEYFORMAT: "", KEYFORMATVERSIONS: "", "DATA-ID": "", VALUE: "", METHOD: "", "HDCP-LEVEL": "", "ALLOWED-CPC": "", SUBTITLES: "", ID: "", CLASS: "", "START-DATE": "", "END-DATE": "", "END-ON-NEXT": "", "SERVER-URI": "", "PATHWAY-ID": "" }), new class extends lm { parseFunc(e) { e = parseInt(e); return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e } } (sm), new class extends lm { constructor() { super(...arguments), this.parseFunc = parseFloat } } (am), new class extends lm { parseFunc(e) { let t = (e || "0x").slice(2); t = (1 & t.length ? "0" : "") + t; const i = new Uint8Array(t.length / 2); for (let e = 0; e < t.length / 2; e++) { var r = parseInt(t.slice(2 * e, 2 * e + 2), 16); if (!ne(r)) return; i[e] = r } return i } } ({ IV: null }), new class extends lm { parseFunc(e) { e = om.exec(e); let t; return null !== e && (t = { width: parseInt(e[1], 10), height: parseInt(e[2], 10) }), t } } ({ RESOLUTION: null })]; const cm = { ExtractVariableParameter: /{\$(.*?)}/g, LevelPlaylistFast: /#EXTINF:(\d*(?:\.\d+)?)(?:,(.*))?|(?!#)(\S.+)|#EXT-X-BYTERANGE: *(.+)|#EXT-X-PROGRAM-DATE-TIME:(.+)|#EXT-X-BITRATE:(.+)|#EXT-X-DATERANGE:(.+)|#.*/g, LevelPlaylistSlow: /(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:#EXT-X-(I-FRAMES)-ONLY)|(?:#EXT-X-(DEFINE):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/, MasterPlaylist: /#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)|#EXT-X-I-FRAME-STREAM-INF:([^\r\n]+)|#EXT-X-DEFINE:([^\n\r]*)|#EXT-X-CONTENT-STEERING:([^\n\r]*)/g, MasterPlaylistAlternateMedia: /#EXT-X-MEDIA:(.*)/g, SessionData: /#EXT-X-SESSION-DATA[^:]*:(.*)/g, SessionKeys: /#EXT-X-SESSION-KEY:([^\n\r]*)/g, VARIABLE_PLAYLIST_REGEX: /(NAME|VALUE)=\"(.*)\",(NAME|VALUE)=\"(.*)\"|(IMPORT)=\"(.*)\"/ }; function hm(e, t, i) { return sl.buildAbsoluteURL(t, e, { alwaysNormalize: !0, inheritQuery: i }) } class pm { static isValidPlaylist(e) { return 0 === e.indexOf("#EXTM3U") } static isMediaPlaylist(e) { return 0 < e.indexOf("#EXTINF:") || 0 < e.indexOf("#EXT-X-PLAYLIST-TYPE:") } static replaceVariables(e, t) { let i, r = !1; return e && t && (i = e.replace(cm.ExtractVariableParameter, e=>{ cm.ExtractVariableParameter.lastIndex = 0; e = cm.ExtractVariableParameter.exec(e)[1]; if (e && t.hasOwnProperty(e)) return t[e]; r = !0 } )), { updatedString: i, error: r } } static parseDecryptData(e, t, i) { const r = um.parseTags(e) , n = (e = r.METHOD) && e in Wf ? r.METHOD : null; e = null !== (e = r.KEYFORMAT) && void 0 !== e ? e : null; if (n && pm.shouldSelectKeyTag(e, n, i)) { const s = r.URI , i = r.IV || null; if (s && r.IV && !i) { const s = new R(L,_,!0,`Invalid IV: ${r.IV}`,$.PlaylistErrorInvalidEntry); throw s.url = t, s } const a = s ? sl.buildAbsoluteURL(t, s, { alwaysNormalize: !0 }) : t , o = (r.KEYFORMATVERSIONS || "1").split("/").map(Number).filter(isFinite); return new Gc(n,a,i,e,o) } } static shouldSelectKeyTag(e, t, i) { return "AES-128" === t || "NONE" === t || null == i || e === Gf.getKeySystemFormat(i) } static optOutClosedCaption(t) { let i = !1 , r = !1; if (t) for (let e = 0; e < t.length; ++e) { const n = t[e]; if (n.videoCodec && ((r = !0) !== n.iframes && n.closedcaption && "none" === n.closedcaption.toLowerCase())) { i = !0; break } } return !r || i } static parseRootPlaylistAlternateMediaOptions(a, o, d, l, u, c) { let h, p; var f = { MediaSelectionGroupAllowEmptySelection: 1, MediaSelectionGroupMediaCharacteristics: ["public.audible"], MediaSelectionGroupMediaType: pl.AUDIO, MediaSelectionGroupOptions: [] } , m = { MediaSelectionGroupAllowEmptySelection: 1, MediaSelectionGroupMediaCharacteristics: ["public.legible"], MediaSelectionGroupMediaType: pl.SUBTITLE, MediaSelectionGroupOptions: [] } , g = { videoAlternateOptions: [], audioAlternateOptions: [], subtitleAlternateOptions: [], audioMediaSelectionGroup: f, subtitleMediaSelectionGroup: m }; let y = 0; for (cm.MasterPlaylistAlternateMedia.lastIndex = 0; null != (h = cm.MasterPlaylistAlternateMedia.exec(o)); ) { const o = pm.replaceVariables(h[1], c); if (o.error) { p = new R(L,N,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); break } var v = um.parseTags(o.updatedString); let e, t, i, r = pl.UNKNOWN; const S = nm.parseMediaCharacteristics(v.CHARACTERISTICS) , b = v["GROUP-ID"] , T = v.CHANNELS; let n, s = null; switch (v.TYPE) { case "VIDEO": r = pl.VIDEO, t = g.videoAlternateOptions; break; case "AUDIO": r = pl.AUDIO, s = ul.AltAudio, t = g.audioAlternateOptions, i = f; const a = l.find(e=>e.audioGroupId === b); n = a ? a.audioCodecList : []; break; case "SUBTITLES": r = pl.SUBTITLE, s = ul.Subtitle, t = g.subtitleAlternateOptions, i = m; break; case "CLOSED-CAPTIONS": r = pl.CLOSEDCAPTION, s = ul.Subtitle, e = v["INSTREAM-ID"], t = g.subtitleAlternateOptions, i = m } const E = { itemId: a, mediaOptionType: s, mediaType: r, groupId: b, channels: T, groupCodecList: n, name: v.NAME, type: v.TYPE, default: "YES" === v.DEFAULT, autoselect: "YES" === v.AUTOSELECT, forced: "YES" === v.FORCED, characteristics: S, persistentID: y, id: t ? t.length : 0, mediaOptionId: `${v.NAME}_${b}_${y}`, lang: em.shortenLanguageCode(v.LANGUAGE) }; v.URI && (E.url = hm(v.URI, d, u)), E.name || (E.name = E.lang, E.mediaType === pl.CLOSEDCAPTION && (E.name += " CC")), E.mediaType === pl.CLOSEDCAPTION && e && (E.inStreamID = e), t && (E.id = t.length, t.push(E)), y = nm.addMediaToSelectionArray(i, E, y) } return 0 !== g.subtitleAlternateOptions.length || pm.optOutClosedCaption(l) || nm.addDefaultClosedCaptionOption(a, g.subtitleAlternateOptions, m, y), { alternateMediaInfo: g, playlistParsingError: p } } static parseMediaOptionPlaylist(e, t, i=!0, r, n, s, a, o, d, l=0) { var u; let c = 0 , h = 0; const p = { itemId: s, mediaOptionId: a, mediaOptionType: o, type: "", version: 0, url: t, initSegments: {}, fragments: [], liveOrEvent: !0, startSN: 0, endSN: 0, iframesOnly: !1, targetduration: 0, totalduration: 0, averagetargetduration: 0, ptsKnown: !1 }; let f, m, g, y = new Gc("NONE",t,null,null,null), v = !1, S = !1, b = 0, T = null, E = new rm(i), I = 0; const w = {}; let A, O, k, C = !0, D = !0; cm.LevelPlaylistFast.lastIndex = 0; for (var M = ()=>new R(L,_,!0,"Invalid key system preference for the playlist",$.IncompatibleAsset); null !== (f = cm.LevelPlaylistFast.exec(e)); ) { const e = f[1]; if (e) { E.duration = parseFloat(e); const t = (" " + f[2]).slice(1); E.title = t || null, E.tagList.push(t ? ["INF", e, t] : ["INF", e]) } else if (f[3]) { if (ne(E.duration)) { const e = c++; if (E.start = h + l, E.levelkey = y, S && !v) { O = M(); break } if (v = !1, S = !1, E.mediaSeqNum = e, E.cc = b, E.iframe = p.iframesOnly, E.baseurl = t, (A = pm.replaceVariables((" " + f[3]).slice(1), w)).error) { O = new R(L,N,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); break } if (E.relurl = A.updatedString, E.bitrate = ne(E.byteRangeEndOffset) ? 8 * (E.byteRangeEndOffset - E.byteRangeStartOffset) / E.duration : I, null != g) { E.rawProgramDateTime = g, E.tagList.push(["PROGRAM-DATE-TIME", E.rawProgramDateTime]); const e = E.programDateTime.getTime(); p.programDateTimeMap = null !== (u = p.programDateTimeMap) && void 0 !== u ? u : {}, p.programDateTimeMap[e] = E.mediaSeqNum, p.dateMediaTimePairs = null !== (u = p.dateMediaTimePairs) && void 0 !== u ? u : [], p.dateMediaTimePairs.push([e, E.start]), g = void 0 } if (p.fragments.push(E.getMediaFragment(s, a, o)), T = E, h += E.duration, C || !p.initSegments[b] || D) if (p.iframesOnly && 0 < E.byteRangeStartOffset && !p.initSegments[b] && !D) { const e = new rm(i); if (e.url = E.url, e.rawByteRange = Math.min(E.byteRangeStartOffset, 1316) + "@0", e.baseurl = t, e.isInitSegment = !0, e.cc = b, e.levelkey = y, e.iframe = !0, S && !v) { O = M(); break } v = !1, S = !1, p.initSegments[b] = e.getMediaFragment(s, a, o) } else k && (k.discoSeqNum = b, p.initSegments[b] = k); C = !1, D = !1, E = new rm(i) } } else if (f[4]) { if (E.rawByteRange = (" " + f[4]).slice(1), T) { const e = T.byteRangeEndOffset; e && (E.lastByteRangeEndOffset = e) } } else if (f[5]) g = (" " + f[5]).slice(1); else if (f[6]) { const e = parseInt(f[6]); ne(e) && (I = 1e3 * e) } else if (f[7]) { const e = f[7] , t = um.parseTags(e); t.ID && (p.daterangeTags || (p.daterangeTags = {}), p.daterangeTags[t.ID] = t) } else { for (f = f[0].match(cm.LevelPlaylistSlow), m = 1; m < f.length && void 0 === f[m]; m++) ; const e = pm.replaceVariables((" " + f[m + 1]).slice(1), w) , d = pm.replaceVariables((" " + f[m + 2]).slice(1), w); if (e.error || d.error) { O = new R(L,N,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); break } const l = e.updatedString , P = d.updatedString; switch (f[m]) { case "#": E.tagList.push(P ? [l, P] : [l]); break; case "PLAYLIST-TYPE": p.type = l.toUpperCase(), "VOD" === p.type && (p.liveOrEvent = !1); break; case "MEDIA-SEQUENCE": 0 === p.fragments.length && (c = p.startSN = parseInt(l)); break; case "TARGETDURATION": p.targetduration = parseFloat(l); break; case "VERSION": p.version = parseInt(l); break; case "EXTM3U": break; case "ENDLIST": p.liveOrEvent = !1; break; case "DIS": b++, E.tagList.push(["DIS"]), C = !0; break; case "DISCONTINUITY-SEQ": b = parseInt(l); break; case "KEY": const e = l; if (S = !0, !v) { try { y = pm.parseDecryptData(e, t, r) } catch (e) { O = e } y && (v = !0) } break; case "START": const d = l , u = um.parseTags(d)["TIME-OFFSET"]; ne(u) && (p.startTimeOffset = u); break; case "I-FRAMES": p.iframesOnly = !0; break; case "MAP": const h = um.parseTags(l); if (E.relurl = h.URI, E.rawByteRange = h.BYTERANGE, E.baseurl = t, E.isInitSegment = !0, E.levelkey = y, S && !v) { O = M(); break } v = !1, S = !1, k = E.getMediaFragment(s, a, o), D = !0, E = new rm(i); break; case "DEFINE": const f = cm.VARIABLE_PLAYLIST_REGEX.exec(l) , m = "NAME" === f[1] ? f[2] : f[4] , g = "VALUE" === f[1] ? f[2] : f[4] , N = f[5] , T = f[6]; if (m || g || "IMPORT" !== N || !n.hasOwnProperty(T)) { if (!m || N || f[1] === f[3] || w.hasOwnProperty(m)) { O = new R(L,_,!0,$.PlaylistErrorMissingImportReference.text,$.PlaylistErrorMissingImportReference); break } w[m] = g } else w[T] = n[T] } } } return E = T, E && !E.relurl && (p.fragments.pop(), h -= E.duration), !p.liveOrEvent && 0 < p.fragments.length && (p.fragments[p.fragments.length - 1].isLastFragment = !0), p.totalduration = h, p.averagetargetduration = h / p.fragments.length, p.endSN = c - 1, { mediaOptionDetails: p, playlistParsingError: O } } static parseRootPlaylist(t, e, i, r) { const n = [] , s = {}; let a, o, d, l, u = null, c = !0; for (cm.MasterPlaylist.lastIndex = 0; null != (a = cm.MasterPlaylist.exec(e)); ) if (a[4]) { a = cm.VARIABLE_PLAYLIST_REGEX.exec(a[4]); const t = "NAME" === a[1] ? a[2] : a[4] , e = "VALUE" === a[1] ? a[2] : a[4] , i = a[5]; if (!t || s.hasOwnProperty(t) || i || a[1] === a[3]) { l = new R(L,_,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); break } s[t] = e } else if (a[5]) { const t = pm.replaceVariables(a[5], s); if (t.error) { l = new R(L,_,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); break } const e = um.parseTags(t.updatedString); if ("string" != typeof e["SERVER-URI"]) { l = new R(L,_,!0,$.PlaylistErrorInvalidSERVERURI.text,$.PlaylistErrorInvalidSERVERURI); break } if (null != e["PATHWAY-ID"] && "string" != typeof e["PATHWAY-ID"]) { l = new R(L,_,!0,$.PlaylistErrorInvalidPATHWAYID.text,$.PlaylistErrorInvalidPATHWAYID); break } u = { serverURI: hm(e["SERVER-URI"], i, !1), initPathwayID: e["PATHWAY-ID"] || "." } } else { d = pm.replaceVariables(a[1] || a[3], s); const e = um.parseTags(d.updatedString); if (o = pm.replaceVariables(a[2] || e.URI, s), d.error || o.error) { l = new R(L,_,!0,$.PlaylistErrorInvalidEXTXDEFINE.text,$.PlaylistErrorInvalidEXTXDEFINE); break } if (void 0 !== e.SCORE && !ne(e.SCORE) || e.SCORE < 0) { l = new R(L,_,!0,$.PlaylistErrorInvalidSCORE.text,$.PlaylistErrorInvalidSCORE), c = !1; break } c && void 0 === e.SCORE && (c = !1); const u = e.BANDWIDTH , p = e["AVERAGE-BANDWIDTH"] , f = p || u , m = null !== (h = e["VIDEO-RANGE"]) && void 0 !== h ? h : "SDR"; if (null == (h = m) || !Jf.includes(h)) continue; const g = { itemId: t, mediaOptionId: `level_${(f || 0) + n.length % 1e3 / 1e3}`, mediaOptionType: ul.Variant, attrs: e, url: hm(o.updatedString, i, r), name: e.NAME, audioGroupId: e.AUDIO, subtitleGroupId: e.SUBTITLES, iframes: !!a[3], bandwidth: u, avgBandwidth: p, bitrate: f, videoRange: m, frameRate: e["FRAME-RATE"], allowedCPCMap: pm.parseAllowedCPC(e["ALLOWED-CPC"]), closedcaption: e["CLOSED-CAPTIONS"], levelCodec: e.CODECS, score: e.SCORE, pathwayID: e["PATHWAY-ID"] || "." } , y = e["HDCP-LEVEL"]; Xf(y) && (g.hdcpLevel = y); var h = e.RESOLUTION; if (h && (g.width = h.width, g.height = h.height), e.CODECS) { g.videoCodecList = new Array, g.audioCodecList = new Array; const t = e.CODECS.split(/[ ,]+/) , i = t["length"]; for (let e = 0; e < i; e++) { const i = t[e]; switch (i.slice(0, 4)) { case "avc1": g.videoCodec = Se.avc1toavcoti(i), g.videoCodecList.push(g.videoCodec); break; case "avc3": case "dvav": case "dva1": case "hev1": case "hvc1": case "dvh1": case "dvhe": case "vp09": g.videoCodec = i, g.videoCodecList.push(g.videoCodec); break; default: g.audioCodec = i, g.audioCodecList.push(g.audioCodec) } } 1 < g.audioCodecList.length && (g.audioCodec = tm.getRichestAudioCodec(g.audioCodecList)), 1 < g.videoCodecList.length && (g.videoCodec = tm.getRichestVideoCodec(g.videoCodecList)) } if (null != (l = "string" != typeof (h = g.pathwayID) ? im("invalid steering manifest PATHWAY-PRIORITY list item data type") : /^[\w\-\.]+$/.test(h) ? void 0 : im("steering manifest contains invalid pathway ID: " + h))) break; if (g.hdcpLevel === "NONE" && (g.url.includes("gr230"))){ n.push(g)} } return { variantMediaOptions: n, contentSteeringOption: u, masterVariableList: s, playlistParsingError: l, scoreAvailable: c } } static parseAllowedCPC(e) { if ("string" != typeof e) return null; const n = {}; return e.split(",").forEach(e=>{ const t = e.split(":"); let i, r; if (2 === t.length) i = t[0].trim(), r = t[1].trim(); else { if (!(2 < t.length)) return; r = t[t.length - 1].trim(), t.pop(), i = t.join(":") } if (!(i in n)) { let e = new Array; "" !== r && (e = r.split("/").map(e=>e.trim())), n[i] = e } } ), n } static parseSessionKeys(e, t, i) { var r; const n = []; for (cm.SessionData.lastIndex = 0; r = cm.SessionKeys.exec(e); ) try { const e = pm.parseDecryptData(r[1], t, i); e && e.isEncrypted && n.push(e) } catch (e) {} return n } static parseSessionData(e, t) { var i; const r = [] , n = new Set; for (cm.SessionData.lastIndex = 0; null != (i = cm.SessionData.exec(e)); ) { const e = um.parseTags(i[1]); e.LANGUAGE = em.shortenLanguageCode(e.LANGUAGE); const t = e.LANGUAGE ? e["DATA-ID"] + "|" + e.LANGUAGE : void 0; "DATA-ID"in e ? t && n.has(t) || ("com.apple.hls.other-tags" === e["DATA-ID"] && (e.VALUE = function(t) { let i; try { i = JSON.parse(Vc.base64DecodeToStr(t)) } catch (e) { i = t } return i }(e.VALUE)), r.push(e), t && n.add(t)) : qe().error(`Error processing DATA-ID ${e["DATA-ID"]} and LANGUAGE ${e.LANGUAGE}`) } return { itemList: r, baseUrl: t } } } var fm, mm, gm, ym, vm, Sm = pm; const bm = (e,t,i)=>{ i = Object.assign(Object.assign({}, e), { method: "GET", responseType: "text", extendMaxTTFB: i }); return ml(i.url) ? Mc().load(i, t).pipe(ur(e=>({ responseText: e.data.response.data, responseURL: e.data.response.uri, stats: e.stats }))) : Oc(i, t).pipe(ur(([e,t])=>({ responseText: e.responseText, responseURL: e.responseURL, stats: t }))) } , Tm = (e,n,t,i,s,a,o,d,r)=>{ const {url: l, itemId: u, mediaOptionId: c, mediaOptionType: h} = e , p = xc(e, i); return bm({ url: l, xhrSetup: t.xhrSetup }, p, r).pipe(ur(({responseText: e, stats: t})=>{ var i = performance.now() , r = pm.parseMediaOptionPlaylist(e, l, !0, a, d, u, c, h, s, n); Lc(r.mediaOptionDetails); var e = performance.now() , r = r["mediaOptionDetails"] , i = { playlistLoadTimeMs: t.tload - t.trequest, playlistParseTimeMs: e - i }; return o.setPlaylistSample(i), { mediaOptionDetails: r, stats: t } } ), (f = h, m = c, g = l, e=>e.pipe(Un(e=>{ if (e instanceof ou) throw new nu(!1,"Timeout",0,$.PlaylistTimeoutError,!0,f,m,g); if (e instanceof tu) throw new nu(!1,e.message,e.code,{ code: e.code, text: "Playlist Network Error" },!1,f,m,g); throw e } )))); var f, m, g } , Em = (f,e,m,t,g)=>Bi(e).pipe(Ra(e=>{ const {keyTagInfo: t, isInitSegment: i, iframe: r, byteRangeOffset: n} = f , s = t["method"] , {start: a, end: o} = n; if ("AES-128" !== s) return Bi(e); { !t.uri || t.iv || t.format && "identity" !== t.format || (t.iv = function(t) { const i = new Uint8Array(16); for (let e = 12; e < 16; e++) i[e] = t >> 8 * (15 - e) & 255; return i }(f.mediaSeqNum)); const n = e , s = t.key.buffer , d = t.iv.buffer , l = o && (r || i) ? o - a : void 0 , u = !m.enableWebCrypto || !!l , c = s.slice(0) , h = d.slice(0) , p = { useJSCrypto: u, plainTextLength: l }; return g.decrypt(c, h, "AES-CBC", n, p) } } )); class Im { constructor(e) { this.option = e } get name() { return this.option.name } get priority() { return this.option.priority } get expiry() { return this.option.expiry } filter(i, e) { const r = this.option.initFn && this.option.initFn(i, e) || (e ? Object.assign({}, e) : {}); let t = i; return this.option.firstPassFn && i.forEach((e,t)=>this.option.firstPassFn(e, t, r, i)), this.option.filterFn && (t = i.filter((e,t)=>this.option.filterFn(e, t, r, i))), null != this.option.filterFn && 0 !== t.length || !this.option.minSortingFn || (t = i.sort((e,t)=>this.option.minSortingFn(e, t, r, i))), this.option.finalFn && this.option.finalFn(t, r, i), t } } function wm(e, t, i) { return (t || []).reduce((e,t)=>t.filter(e, i), Array.from(e)) } function Am(t, e) { return e.filter(e=>{ return yl(t, null !== (e = e.url) && void 0 !== e ? e : null) } ) } function Om() { return [new Im({ name: "Remove Filter", priority: 0, filterFn: (t,e,i)=>!i || i.removed.every(e=>t.mediaOptionId !== e) }), new Im({ name: "Penalty Box Filter", priority: 1, filterFn: (t,e,i)=>{ const r = performance.now(); return !i || i.penaltyBoxQueue.every(e=>e.expiry <= r || t.mediaOptionId !== e.mediaOptionId) } }), new Im({ name: "Compatible IDs Filter", priority: 1, filterFn: (t,e,i)=>!i || null == i.compatibleIds || i.compatibleIds.some(e=>e === t.mediaOptionId) })] } class km extends Od { constructor(e, t, i) { super(e), this.itemId = t, this.mediaOptionType = i, this.allowFilters = this._initFilters() } get mediaOptionList() { var e; return (null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.mediaOptions) || null } get mediaOptionList$() { return this.mediaOptionListInfo$.pipe(ur(({mediaOptions: e})=>e)) } mediaOptionFromId(t) { var e; return null !== (e = (null !== (e = this.mediaOptionList) && void 0 !== e ? e : []).find(e=>e.mediaOptionId === t)) && void 0 !== e ? e : null } _getFilteredList(e) { return wm(e.mediaOptions, this.allowFilters, e) } get filteredMediaOptionList() { return this.mediaOptionListInfo ? this._getFilteredList(this.mediaOptionListInfo) : null } get filteredMediaOptionList$() { return this.mediaOptionListInfo$.pipe(Ra(e=>{ const t = [Ul] , i = performance.now(); for (const r of e.penaltyBoxQueue) ne(r.expiry) && r.expiry > i && t.push(vn(r.expiry - i)); return nn(...t).pipe(ur(()=>this._getFilteredList(e))) } ), yd()) } get preferredMediaOptionList() { return this.filteredMediaOptionList ? Am(this.preferredHost, this.filteredMediaOptionList) : [] } get preferredMediaOptionList$() { return Zd([this.preferredHost$, this.filteredMediaOptionList$]).pipe(ur(([e,t])=>Am(e, t))) } getNewHost(e) { e = this.getFallbackVariant(e, !1, !0); return null != e && e.url ? gl(e.url) : this.preferredHost } } function Cm(e) { return "PQ" === e.videoRange || "HLG" === e.videoRange } function Dm(e, t) { return t.iframes === e } function Mm(e, t, i, r) { return !r || i.bitrate > r.bitrate && i.bitrate <= e.bitrate ? fm.Better : i.bitrate === r.bitrate ? fm.Same : fm.Worse } function Pm(e, t) { return e && !t ? -1 : !e && t ? 1 : 0 } (dd = fm = fm || {})[dd.Better = 1] = "Better", dd[dd.Same = 0] = "Same", dd[dd.Worse = -1] = "Worse"; class xm extends km { constructor(e, t) { super(e, t, ul.Variant) } static makeFilters() { return [...Om().concat([new Im({ name: "HDR Filter", priority: 1, filterFn: (e,t,i)=>!i || (i.hasHdrLevels && i.preferHDR) === Cm(e) }), new Im({ name: "Viewport Filter", priority: 1, firstPassFn: (e,t,i)=>{ if (i && e && !e.iframes && e.videoCodec) { const t = !i.lowestBitrate || e.bitrate < i.lowestBitrate ? e.bitrate : i.lowestBitrate; i.lowestBitrate = t } } , filterFn: (e,t,i)=>!(e && i && i.viewportInfo && e.videoCodec && i.lowestBitrate) || function(e, t) { return e.width < 1.35 * t.width && e.height < 1.35 * t.height && e.width * e.height < t.width * t.height * 1.35 }({ width: e.width, height: e.height }, i.viewportInfo) || e.bitrate === i.lowestBitrate }), new Im({ name: "HDCP Filter", priority: 2, filterFn: (e,t,i)=>!i || !Xf(i.maxHdcpLevel) || Yf(e.hdcpLevel) < Yf(i.maxHdcpLevel) })])].sort((e,t)=>{ return (null !== (e = e.priority) && void 0 !== e ? e : Number.MAX_SAFE_INTEGER) - (null !== (t = t.priority) && void 0 !== t ? t : Number.MAX_SAFE_INTEGER) } ) } _initFilters() { return xm.kAllowFilters } get preferredHost() { var e; return null !== (e = null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.preferredHost) && void 0 !== e ? e : null } get preferredHost$() { return this.selectEntity(this.itemId, e=>{ return null !== (e = null == e ? void 0 : e.mediaOptionListTuple[ul.Variant].preferredHost) && void 0 !== e ? e : null } ) } get mediaOptionListInfo() { var e; return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.mediaOptionListTuple[ul.Variant]) && void 0 !== e ? e : null } get mediaOptionListInfo$() { return this.selectEntity(this.itemId, e=>{ return null === (e = null == e ? void 0 : e.mediaOptionListTuple) || void 0 === e ? void 0 : e[ul.Variant] } ).pipe(Up()) } get hdrMode$() { return this.mediaOptionListInfo$.pipe(ur(e=>!0 === e.preferHDR && e.hasHdrLevels), Es()) } get maxHdcpLevel$() { return this.selectEntity(this.itemId, e=>{ e = null === (e = null == e ? void 0 : e.mediaOptionListTuple) || void 0 === e ? void 0 : e[ul.Variant]; return null == e ? void 0 : e.maxHdcpLevel } ).pipe(Es()) } listFallbackVariants(t, e, i, r, n) { var s = this.mediaOptionListInfo , a = null === (o = this.mediaOptionList) || void 0 === o ? void 0 : o.find(e=>e.mediaOptionId === t); if (!a || !s) return null; var o = this.makeFilteredListFromVariant(a, e, n); if (!o) return null; e = gl(a.url), s = s.hasScore; return xm._listFallbackVariants(o, a, e, s, i, r, n) } getFallbackVariant(t, e, i, r) { var n = this.mediaOptionListInfo , s = null === (s = this.mediaOptionList) || void 0 === s ? void 0 : s.find(e=>e.mediaOptionId === t); if (!s || !n) return null; e = this.makeFilteredListFromVariant(s, e, r); if (!e) return null; r = gl(s.url), n = n.hasScore; return xm._getFallbackVariant(e, s, r, n, i) } makeFilteredListFromVariant(e, t, i) { let r = this.mediaOptionListInfo; if (!e || !this.mediaOptionList || !r) return null; r = Object.assign(Object.assign({}, r), { includeAllEligiblePathways: !0 }); e = Array.from(this.mediaOptionList); let n = t ? wm(e, this.allowFilters, Object.assign(Object.assign({}, r), { preferHDR: !1, compatibleIds: null })) : this._getFilteredList(r); return n ? (i && 0 < i.length && (n = n.filter(e=>!i.includes(e.mediaOptionId))), n) : null } get hasIframes() { var e; return null !== (e = null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.hasIframeLevels) && void 0 !== e && e } canSwitchToSDR(e, t, i=!1) { var r = this.mediaOptionListInfo; if (!this.mediaOptionList || !r) return !1; var n = this.mediaOptionFromId(e); if (!n) return !1; if (!Cm(n)) return !1; var s = gl(n.url) , e = wm(Array.from(this.mediaOptionList), this.allowFilters, Object.assign(Object.assign({}, r), { preferHDR: !1, compatibleIds: null })) , r = r.hasScore; return null != xm._getFallbackVariant(e, n, s, r, t, i) } static _listFallbackVariants(e, r, n, t, s, a=!1, i=null) { let o = !1; const d = function(e, s, a) { const t = [...e] , o = gl(s.url) , d = s.audioGroupId; return t.sort((e,t)=>{ let i = 0; var r = a && ne(e.score) && ne(t.score) , n = r ? e.score > t.score && e.score <= s.score : e.bitrate > t.bitrate && e.bitrate <= s.bitrate , r = r ? e.score === t.score : e.bitrate === t.bitrate; return n ? i = -1 : r ? (i = Pm(yl(o, e.url), yl(o, t.url)), 0 === i && (i = Pm(!d || e.audioGroupId === d, !d || t.audioGroupId === d))) : i = 1, i } ), t }(e.filter(e=>{ var t = !(e.iframes !== r.iframes || s && yl(n, e.url)) , i = a ? e.bitrate < r.bitrate : e.bitrate <= r.bitrate , i = t && i; return r.mediaOptionId === e.mediaOptionId ? (o = i, !1) : i } ), r, t); return !o || i && i.includes(r.mediaOptionId) || d.unshift(r), d } static _getFallbackVariant(e, t, i, r, n, s=!1) { let a = null; e = (e = s ? e.filter(e=>e.bitrate < t.bitrate) : e).filter(e=>e.mediaOptionId !== t.mediaOptionId && e.iframes === t.iframes); if (n && null != i) for (const o of e) Mm(t, 0, o, a) !== fm.Better || yl(i, o.url) || (a = o); else for (const o of e) { const r = Mm(t, 0, o, a); r !== fm.Better && (r !== fm.Same || !yl(i, o.url) || yl(i, a.url) && o.audioGroupId !== t.audioGroupId) || (a = o) } return a } getMatchingVariant(e, t) { var i = this.mediaOptionFromId(e) , r = gl(null == i ? void 0 : i.url) , n = t.mediaOptionType === ul.AltAudio ? "audioGroupId" : "subtitleGroupId"; let s = null; this.mediaOptionListInfo.hasScore; for (const e of this.filteredMediaOptionList) if (e[n] === t.groupId) { if (!i) { s = e; break } var a = Mm(i, 0, e, s); a !== fm.Better && (a !== fm.Same || s.mediaOptionId === i.mediaOptionId || e.mediaOptionId !== i.mediaOptionId && !yl(r, e.url)) || (s = e) } return s } get currentPathwayID() { var e; return null === (e = this.mediaOptionListInfo) || void 0 === e ? void 0 : e.currentPathwayID } } function Rm(e, t) { switch (e) { case mm.SendAlternateToPenaltyBox: e = mm.RetryRequest, 401 !== t && 403 !== t && 407 !== t && t !== $.CorruptStream.code && t !== $.LivePlaylistUpdateError.code || (e = mm.SendEndCallback); break; case mm.RemoveAlternatePermanently: e = mm.SendEndCallback } return e } function Lm(e, t, i, r, n, s, a, o=!1) { const d = s.mediaOptionListQueries[n] , l = 0 != (e.errorActionFlags & gm.MoveAllAlternatesMatchingHost) , u = s.mediaOptionListQueries[n].mediaOptionFromId(r) , c = a.getFallbackMediaOptionTupleFromMediaOptionId(s, n, r, u.backingMediaOptionId, !1, l, o); let {errorAction: h, errorActionFlags: p} = e; return s.isValidMediaOptionTuple(c) ? yl(d.preferredHost, c[n].url) && (p &= ~gm.MoveAllAlternatesMatchingHost) : (t || (h = Rm(h, i), p = 0), d instanceof xm && (!0 === d.mediaOptionFromId(r).iframes ? (h = mm.DoNothing, p = 0) : !t && a.canSwitchToSDR(s, r, l, o) && (h = e.errorAction, p = gm.SwitchToSDR))), { errorAction: h, errorActionFlags: p } } function _m(e) { let t, i = 0; switch (e) { case 0: t = mm.SendAlternateToPenaltyBox, i = gm.MoveAllAlternatesMatchingHost; break; case 410: t = mm.RemoveAlternatePermanently; break; case 500: case 502: case 503: case 504: case 404: case 409: case 401: case 403: case 407: case $.LivePlaylistUpdateError.code: case $.PlaylistNotReceived.code: default: t = mm.SendAlternateToPenaltyBox, i = 0 } return { errorAction: t, errorActionFlags: i } } function Nm(i, r, n, s, a, o, d) { var {errorAction: l, errorActionFlags: u} = i; let e = !0; switch (l) { case mm.RemoveAlternatePermanently: case mm.SendAlternateToPenaltyBox: { if (null == a || null == o) return r.handled = !1; const i = n.itemId; let e = o , t = n.mediaOptionListQueries[a].mediaOptionFromId(o); t.backingMediaOptionId && (e = t.backingMediaOptionId, t = n.mediaOptionListQueries[a].mediaOptionFromId(e)); var c = 0 != (u & gm.MoveAllAlternatesMatchingHost) , h = 0 != (u & gm.MoveAllAlternatesMatchingHDCP) , p = 0 != (u & gm.SwitchToSDR) , f = l === mm.RemoveAlternatePermanently; if (h && "hdcpLevel"in t) { const r = t.hdcpLevel; s.setMaxHdcpLevel(i, r) } if (p && s.switchToSDROnly(i), c) { const r = gl(t.url); s.moveAllWithMatchingHosts(i, a, r, f) } else f ? s.removePermanently(i, a, e) : s.addToPenaltyBox(i, a, e); if (n.enabledMediaOptionIdByType(a) === o) { let e = [Ol, Ol, Ol]; e = s.getFallbackMediaOptionTupleFromMediaOptionId(n, a, o, null, !1, c, d), n.isValidMediaOptionTuple(e) ? s.setPreferredHost(i, gl(e[ul.Variant].url)) : r.fatal = !0, r.fatal && (e = [Ol, Ol, Ol]), s.setNextMediaOptions(n.itemId, e) } break } case mm.SendEndCallback: r.fatal = !0; break; case mm.RetryRequest: case mm.DoNothing: default: e = !1 } return r.handled = e, e } function Fm(e, t) { t instanceof ru || t instanceof nu || t instanceof au || (t instanceof uu || t instanceof lu) && oe(t.keyuri) } function Bm(t, i, r) { if (t.handled = !0, r && i < r.maxNumRetry && ne(r.retryDelayMs)) { let e; return e = "linear" === r.backoff ? (i + 1) * r.retryDelayMs : Math.pow(2, i) * r.retryDelayMs, e = Math.min(r.maxRetryDelayMs, e), Fm(0, t), vn(e) } return t.fatal = !0, Fm(0, t), Ui(t) } function Um(e, t, i, r, n, s, a, o, d=!1) { return (null == r ? void 0 : r.errorAction) === mm.RetryRequest ? Bm(e, t, i, s.logger) : $m(e, 0, r, n, s, a, o, d) } function $m(e, t, i, r, n, s, a, o=!1) { const d = new Ji; return sd(()=>{ i && (Fm(n.logger, e), Nm(i, e, r, n, s, a, o)), d.error(e) } ), d } function Vm(t, i, r, n) { return e=>e.pipe(Un(e=>{ if (t.logger.error(`Got demux error ${e.message}`), e instanceof D || e instanceof F) { mm.SendAlternateToPenaltyBox; return $m(e, 0, { errorAction: e.fatal ? mm.SendEndCallback : e instanceof F ? mm.SendAlternateToPenaltyBox : mm.RemoveAlternatePermanently, errorActionFlags: 0 }, i, t, r, n) } throw e } )) } function Km(e, t, i, r, n) { e = null !== (e = null === (e = n.getKeyInfo(e)) || void 0 === e ? void 0 : e.mediaOptionIds) && void 0 !== e ? e : []; for (const s of e) for (const n of i.mediaOptionListQueries) null != n.mediaOptionFromId(s) && r.updateConsecutiveTimeouts(i.itemId, n.mediaOptionType, t, "key") } function Hm(r, t, e, n, s, a) { const o = n.logger , i = s.enabledMediaOptionKeys , d = []; for (const t of r.mediaOptionIds) { const r = i.some(e=>e.mediaOptionId === t) , e = s.mediaOptionListQueries.find(e=>null != e.mediaOptionFromId(t)); if (e) { const n = e.mediaOptionType , a = { mediaOptionId: t, mediaOptionType: n }; r ? d.push(a) : d.unshift(a) } else o.warn(`Couldn't find query for ${t}`) } const l = new Ji; return sd(()=>{ const e = r instanceof lu; Km(r.keyuri, e, s, n, a); let t, i = !1; for (const {mediaOptionId: e, mediaOptionType: a} of d) t = function(e, t, i, r, n) { let s = { errorAction: mm.SendAlternateToPenaltyBox, errorActionFlags: 0 }; if (e instanceof lu) s.errorAction = mm.SendAlternateToPenaltyBox; else { const t = e.isOkToRetry; e.keyErrorReason === Xl.OutputRestricted ? (s.errorAction = mm.RemoveAlternatePermanently, s.errorActionFlags |= gm.MoveAllAlternatesMatchingHDCP) : t ? s = _m(e.code) : s.errorAction = mm.RemoveAlternatePermanently } s.errorActionFlags &= ~gm.MoveAllAlternatesMatchingHost; var a = r.enabledMediaOptionIdByType(i); return t === a ? Lm(s, !1, e.code, a, i, r, n, e.isTimeout) : s }(r, e, a, s, n), o.error(`[Keys] handleNetworkError uri=${oe(r.keyuri)} mediaOptionId=${e} mediaOptionType=${a} action=${JSON.stringify(t)}`), t.errorAction === mm.RetryRequest && (i = !0), Nm(t, r, s, n, a, e); i ? (l.next(), l.complete()) : (Fm(0, r), l.error(r)) } ), l.pipe(Ra(()=>Bm(r, t, e, n.logger))) } function jm(t, i, r, n, s, a, o, d) { return n = Math.max(0, n), e=>e.pipe(Ja(()=>{ null != i && o.updateConsecutiveTimeouts(t, i, !1, "load") } ), ya(e=>e.pipe(Kr((e,t)=>function(e, t, i, r, n, s, a, o) { var d; if (!(e instanceof p)) return Ui(e); let l, u, c, h = !1; if (e instanceof ru) c = { errorAction: Rm(_m((d = e).response.code).errorAction, d.response.code), errorActionFlags: 0 }; else if (e instanceof nu || e instanceof au) { ({mediaOptionType: u, mediaOptionId: l, isTimeout: h} = e); const t = null === (d = s.mediaOptionListQueries[u]) || void 0 === d ? void 0 : d.mediaOptionFromId(l); if (!r && e.isTimeout && null != t && (!("iframes"in t) || !0 !== t.iframes) && (a.updateConsecutiveTimeouts(s.itemId, e.mediaOptionType, !0, "load"), e instanceof au && e.stats)) { const t = performance.now(); o.setBandwidthSample(Object.assign(Object.assign({}, e.stats), { tfirst: e.stats.tfirst || t, tload: e.stats.tload || t, complete: !0, mediaOptionType: u })) } c = function(e, t, i, r, n) { var s = e.response.code; let a = _m(s); var {mediaOptionId: o, mediaOptionType: d} = e; return t ? a.errorActionFlags &= ~gm.MoveAllAlternatesMatchingHost : a = function(e, t, i, r, n) { let {errorAction: s, errorActionFlags: a} = t; if (e.isTimeout) { const t = e["mediaOptionType"] , o = null !== (n = null === (n = n.getErrorInfoByType(t)) || void 0 === n ? void 0 : n.timeouts.load) && void 0 !== n ? n : 0; !i && r <= o && (s = mm.DoNothing, a = 0) } return { errorAction: s, errorActionFlags: a } }(e, a, t, i, r), a = Lm(a, t, s, o, d, r, n, e.isTimeout), a }(e, r, n, s, a) } return Um(e, t, i, c, s, a, u, l, h) }(e, t, Rc(e, r), s, n, a, o, d))))) } xm.kAllowFilters = xm.makeFilters(), (dd = mm = mm || {})[dd.DoNothing = 0] = "DoNothing", dd[dd.SendEndCallback = 1] = "SendEndCallback", dd[dd.SendAlternateToPenaltyBox = 2] = "SendAlternateToPenaltyBox", dd[dd.RemoveAlternatePermanently = 3] = "RemoveAlternatePermanently", dd[dd.InsertDiscontinuity = 4] = "InsertDiscontinuity", dd[dd.RetryRequest = 5] = "RetryRequest", (dd = gm = gm || {})[dd.MoveAllAlternatesMatchingHost = 1] = "MoveAllAlternatesMatchingHost", dd[dd.MoveAllAlternatesMatchingHDCP = 2] = "MoveAllAlternatesMatchingHDCP", dd[dd.SwitchToSDR = 4] = "SwitchToSDR"; class qm extends Od { constructor(e) { super(e) } get currentConfig() { var e; return null === (e = this.getActive()) || void 0 === e ? void 0 : e.config } get extendMaxTTFB() { var e; return null === (e = this.getActive()) || void 0 === e ? void 0 : e.extendMaxTTFB } get config$() { return this.selectActive(e=>null == e ? void 0 : e.config) } get userSeek$() { return this.selectActive(e=>null == e ? void 0 : e.userSeek) } } w(); class Qm extends pd { constructor() { super({}, { name: "hls-store", producerFn: vc }) } } class Gm { constructor(e) { this.store = e } getQuery() { return new qm(this.store) } setHlsEntity(e) { const t = e.id; Co(`hls.set.entity ${t}`), sd(()=>{ this.store.add(de(e)), this.store.setActive(t) } ) } removeEntity(e) { Co(`hls.remove ${e}`), this.store.remove(e) } setStartTime(t) { this.store.updateActive(e=>{ e.config.startPosition = t } ) } setUserSeek(t) { this.store.updateActive(e=>{ e.userSeek = t } ) } setExtendMaxTTFB(t) { this.store.updateActive(e=>{ e.extendMaxTTFB = t } ) } } let Wm, zm; function Xm() { return Wm = Wm || new Gm(new Qm), Wm } function Ym() { return Xm().getQuery().currentConfig } function Jm(e, t, i, r) { var n = t.mediaSeqNum - e.startSN; if (n < 0 || n >= e.fragments.length) return e; const s = Object.assign(Object.assign({}, e), { fragments: e.fragments.map(e=>Object.assign({}, e)) }) , a = s.fragments , o = a[n]; if (!Fp(t, a[n])) return null == r || r.warn("Parsed and existing fragments don't match"), e; var {startDtsTs: d, startPts: e, endPts: t} = t; o.startDtsTs = d, o.startPts = e, o.endPts = t, o.start = i, o.duration = b(o.endPts, o.startPts); for (let e = n; 0 < e; e--) Zm(a, e, e - 1, r); for (let e = n; e < a.length - 1; e++) Zm(a, e, e + 1, r); s.totalduration = 0; for (const l of a) s.totalduration += l.duration; return s.ptsKnown = !0, eg(s), s } function Zm(e, t, i, r) { const n = e[t] , s = e[i]; s.startPts ? (t < i && n.start + n.duration > s.start || i < t && s.start + s.duration > n.start) && (null == r || r.warn(`overlapping segments found ${n.mediaSeqNum}->${s.mediaSeqNum}`)) : s.start = t < i ? n.start + n.duration : Math.max(n.start - s.duration, 0) } function eg(e) { if (e.programDateTimeMap) { e.dateMediaTimePairs = []; for (var [t,i] of Object.entries(e.programDateTimeMap)) { t = Number(t), i = e.fragments[i - e.startSN]; i && (i = i.start, e.dateMediaTimePairs.push([t, i])) } e.dateMediaTimePairs.sort((e,t)=>e[0] - t[0]) } } function tg(t, i) { if ("VOD" === t.type || "VOD" === i.type || t.iframesOnly !== i.iframesOnly) return i; var r = t.mediaOptionId === i.mediaOptionId; let n = Object.assign(Object.assign({}, i), { initSegments: {}, fragments: [], ptsKnown: !1 }); const s = Math.max(t.startSN, n.startSN) - n.startSN , a = Math.min(t.endSN, n.endSN) - n.startSN , o = n.startSN - t.startSN , d = t.fragments , l = i.fragments; let u = 0; for (let e = s; e <= a; ++e) if (d[o + e] && l[e]) { u = d[o + e].discoSeqNum - l[e].discoSeqNum; break } const c = n.initSegments; let h = null; for (let e = 0; e < l.length; e++) { const p = d[o + e] , s = l[e] , a = Object.assign({}, s) , f = s.discoSeqNum + u; i.initSegments[s.discoSeqNum] && (c[f] = Object.assign(Object.assign({}, i.initSegments[s.discoSeqNum]), { discoSeqNum: f })), a.discoSeqNum = f, r && a.mediaSeqNum === (null == p ? void 0 : p.mediaSeqNum) && null != p.startPts && (a.start = p.start, a.duration = p.duration, a.startDtsTs = p.startDtsTs, a.endDtsTs = p.endDtsTs, a.startPts = p.startPts, a.endPts = p.endPts, h = a), n.fragments.push(a) } if (h) n = Jm(n, h, h.start); else if (0 <= o && o < d.length) { const t = d[o].start , i = n.fragments; for (let e = 0; e < l.length; e++) i[e].start += t } return n.ptsKnown = n.ptsKnown || r && !0 === t.ptsKnown && t.endSN >= i.startSN, eg(n), n } function ig(e, t, i) { let r = t.targetduration; return ne(i.liveSyncDuration) ? r = i.liveSyncDuration : ne(i.liveSyncDurationCount) && (r = i.liveSyncDurationCount * t.targetduration), e + Math.max(0, t.totalduration - r) } function rg(e, t, i, r, n) { if (!t.ptsKnown) return 0; var s = t.targetduration , a = t.fragments[0].start , r = n.canContinuePlaybackWithoutGap(t, i, { avgPlaylistLoadTimeMs: 0, avgPlaylistParseTimeMs: 0 }, r); let o = Math.max(0, e - s); return e < a && !r && (o = a), o } function ng(e) { return 1e3 * (e.averagetargetduration || e.targetduration) } function sg(e, t) { var i = ng(e) , t = performance.now() - t; return e.liveOrEvent && i <= t } function ag(e, t) { return function(e) { const t = [] , i = e.fragments; for (const e of i) { const {discoSeqNum: i, start: r} = e; t.push({ timelineOffset: r, mediaFragment: e }) } return t }(e).find(e=>t(e.mediaFragment)) } function og(s, e, a, t, o) { var i; const d = !t.liveOrEvent || t.ptsKnown; let r = null !== (i = ag(t, t=>{ var e = t.mediaSeqNum >= a , i = 0 < t.duration , r = t.start + t.duration , n = !d || s < r || s - r < 1 && t.isLastFragment , r = o.every(e=>!Fp(e.frag, t)); return e && i && n && r } )) && void 0 !== i ? i : null , n = NaN; null != r && ne(e) && r.mediaFragment.discoSeqNum !== e && (n = r.mediaFragment.discoSeqNum, r = null); e = o.some(e=>0 < e.frag.framesWithoutIDR); return r && e && o[o.length - 1].frag.mediaOptionId !== t.mediaOptionId && (r = null !== (t = ag(t, e=>e.mediaSeqNum === r.mediaFragment.mediaSeqNum - 1)) && void 0 !== t ? t : r), { foundFrag: r, nextDisco: n } } function dg(e) { const t = e.fragments; return t.map(e=>e.duration).reduce((e,t)=>e + t, null !== (e = t[0].start) && void 0 !== e ? e : 0) } class lg extends Od { constructor(e, t) { super(e), this.mediaOption = t } get itemId() { return this.mediaOption.itemId } get mediaOptionId() { return this.mediaOption.mediaOptionId } get initSegmentEntities() { var e; return null === (e = this.mediaOptionDetailsEntity) || void 0 === e ? void 0 : e.initSegmentCacheEntities } get mediaLibraryEntity() { return this.getEntity(this.itemId) } get mediaOptionDetailsEntityRecord() { var e; return null === (e = this.mediaLibraryEntity) || void 0 === e ? void 0 : e.mediaOptionDetailsEntityRecord } get mediaOptionDetailsEntity() { return this.mediaOptionDetailsEntityRecord ? this.mediaOptionDetailsEntityRecord[this.mediaOptionId] : null } get mediaOptionDetails() { var e; return null === (e = this.mediaOptionDetailsEntity) || void 0 === e ? void 0 : e.mediaOptionDetails } get playlistDuration() { var e; return null === (e = this.mediaOptionDetailsEntity) || void 0 === e ? void 0 : e.playlistDuration } get mediaOptionDetailsEntity$() { const {itemId: e, mediaOptionId: t} = this; return this.selectEntity(e, e=>{ if (null != e && e.mediaOptionDetailsEntityRecord) return null == e ? void 0 : e.mediaOptionDetailsEntityRecord[t] } ) } get mediaOptionDetails$() { return this.selectEntity(this.itemId, e=>{ return null === (e = null == e ? void 0 : e.mediaOptionDetailsEntityRecord[this.mediaOptionId]) || void 0 === e ? void 0 : e.mediaOptionDetails } ).pipe(Up()) } get playlistDuration$() { return this.mediaOptionDetailsEntity$.pipe(ur(e=>null == e ? void 0 : e.playlistDuration), Up(), Es()) } get live$() { return this.mediaOptionDetails$.pipe(ur(e=>null == e ? void 0 : e.liveOrEvent), Es()) } } class ug extends pd { constructor() { super({}, { name: "media-library-store", idKey: "itemId", producerFn: vc }) } } class cg { constructor(e) { this.store = e } getQuery() { return new Od(this.store) } getQueryForOption(e) { return new lg(this.store,e) } createMediaLibraryEntity(e) { var t = { itemId: e, mediaOptionDetailsEntityRecord: {} }; Co(`library.entity.create: ${e}`), this.store.add(t) } setDetailsLoading(e) { const {itemId: t, mediaOptionId: i} = e; Co(`library.details.loading: ${i}`), this.store.update(t, ({mediaOptionDetailsEntityRecord: e})=>{ e[i] || (e[i] = { initSegmentCacheEntities: {}, unchangedCount: 0 }), e[i].detailsLoading = !0 } ) } archiveMediaOptionDetails(i, r, n) { const {itemId: e, mediaOptionId: s} = i , a = performance.now() , o = dg(i); Co(`library.details.loaded: ${s}`), this.store.update(e, e=>{ const t = e.mediaOptionDetailsEntityRecord[s]; t.detailsLoading = !1, t.mediaOptionDetails = i, t.lastUpdateMillis = a, n ? t.unchangedCount = 0 : ++t.unchangedCount, t.playlistDuration = o, t.stats = r, e.liveOrEvent = i.liveOrEvent } ) } setInitSegmentLoading(e) { const {itemId: t, mediaOptionId: i, discoSeqNum: r} = e; Co(`library.initsegs.loading: ${i}/${r}`), this.store.update(t, e=>{ e.mediaOptionDetailsEntityRecord[i].initSegLoading = r } ) } archiveInitSegmentEntity(i, r) { const {itemId: e, mediaOptionId: n, discoSeqNum: s} = i; Co(`library.initseg.loaded: ${n}/${s}`), this.store.update(e, ({mediaOptionDetailsEntityRecord: e})=>{ const t = e[n]; t.initSegmentCacheEntities[s] = [i, r], t.initSegLoading = null } ) } updatePTSDTS(e, r, n, s) { this.store.update(e, ({mediaOptionDetailsEntityRecord: e})=>{ const t = e[r]; var i; null != t && t.mediaOptionDetails && ({variantDTS: i, timelineOffset: e} = n, e = S(s.startDtsTs) - S(i) + e, e = Jm(t.mediaOptionDetails, s, e), t.mediaOptionDetails = e, t.playlistDuration = dg(e)) } ) } remove(e) { this.store.remove(e) } clear() { this.store.remove() } } function hg() { return zm = zm || new cg(new ug), zm } const pg = e=>hg().getQueryForOption(e) , fg = (d,e,t=!1)=>{ if (!kl(e)) return Bi(null); const i = e["itemId"] , r = d["mediaLibraryService"] , n = r.getQueryForOption(e); n.hasEntity(i) || r.createMediaLibraryEntity(i); var s = n.mediaOptionDetailsEntity , a = n.mediaOptionDetails; return null == a || t || "VOD" !== a.type && (!a.liveOrEvent || sg(a, s.lastUpdateMillis)) ? (r.setDetailsLoading(e), function(l) { var e; const {logger: t, config: u, rootPlaylistQuery: c, rootPlaylistService: h, statsService: i, mediaLibraryService: p, mediaSink: r} = d , f = r.mediaQuery , n = u.playlistLoadPolicy , s = u.keySystemPreference , a = c.masterVariableList , o = null === (e = null === (e = Xm()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB; return Tm(l, c.itemStartOffset, u, n, t, s, i, a, o).pipe(Hi(Zi), ur(t=>{ const i = p.getQueryForOption(l) , r = i.mediaOptionDetails; let n = t["mediaOptionDetails"]; var e = t["stats"]; let s = !0; if (n.liveOrEvent) { const d = n["mediaOptionType"]; t = n, s = null == r || t.endSN !== r.endSN || t.liveOrEvent !== r.liveOrEvent; let e = n; r && (e = tg(r, n)); const i = c.lastLoadedMediaOptionByType(d) , u = i ? null === (t = p.getQueryForOption(i)) || void 0 === t ? void 0 : t.mediaOptionDetails : null; !e.ptsKnown && u && u.mediaOptionId !== (null == r ? void 0 : r.mediaOptionId) && (e = tg(u, n)), n = e } n && (p.archiveMediaOptionDetails(n, e, s), h.setLastLoadedMediaOptionByType(c.itemId, l.mediaOptionType, l)); const a = !s && i.mediaOptionDetailsEntity.unchangedCount >= u.liveMaxUnchangedPlaylistRefresh , o = function(e, t, i, r) { t = rg(r.currentTime, e, t, i, r), i = e.fragments[e.fragments.length - 1], r = i.start + i.duration; return { expired: null != i && e.liveOrEvent && e.ptsKnown && r < t, windowEnd: r, minPosition: t } }(n, e.tload, u.maxBufferHole, f); if (a || o.expired) { e = a ? $.LivePlaylistUpdateError : { text: `Live window too far in the past end:${o.windowEnd.toFixed(3)} minPosition:${o.minPosition}`, code: 0 }; throw new nu(!1,e.text,e.code,e,!1,l.mediaOptionType,l.mediaOptionId,l.url) } return n } ), Ql.tag("getMediaOptionDetailsCommon.emit.loaded"), jm(l.itemId, l.mediaOptionType, xc(l, n), u.maxNumAddLevelToPenaltyBox, !1, c, h, i)).pipe(Cs(1)) }(e)) : Bi(a).pipe(Ql.tag("retrieveMediaOptionDetails.emit.cached")).pipe(Cs(1)) } ; const mg = (t,i)=>{ if (!i) return Bi(null); const {mediaLibraryService: r, mediaParser: n} = t , e = r.getQueryForOption(i) , {mediaOption: s, mediaOptionDetailsEntityRecord: a, mediaOptionDetails: o} = e , d = s["mediaOptionId"]; if (null == a || !a[d]) throw new Error("retrieveInitSegmentCacheEntity no details entity"); if (!o) throw new Error("retrieveInitSegmentCacheEntity no details"); var l = a[d]["initSegmentCacheEntities"] , u = o["initSegments"] , c = i["discoSeqNum"]; if (l[c]) { const [t,r] = l[c]; let e = t; return r && (e = n.willBeTrackSwitch(i) ? t : r), Bi(e) } const h = u[c]; return h ? (r.setInitSegmentLoading(h), yg(t, h, !1, !1).pipe(Hi(Zi), Ra(e=>gg(e, h, t)), Ql.tag("retrieveInitSegmentCacheEntity.emit"))) : Bi(null) } ; function gg(e, n, t) { const {logger: s, mediaSink: i, rootPlaylistService: r, rootPlaylistQuery: a, mediaParser: o, mediaLibraryService: d, gaplessInstance: l} = t , u = i["mediaQuery"] , c = d.getQueryForOption(n) , {mediaOption: h, mediaOptionDetails: p} = c , {itemId: f, mediaOptionId: m} = h , {keyTagInfo: g, discoSeqNum: y, mediaOptionType: v} = n , S = u.seeking , b = p.liveOrEvent , T = v === ul.Variant && p.ptsKnown; let E, I; n.isInitSegment ? I = new Uint8Array(e) : E = new Uint8Array(e); var e = { segment: E, initSegment: I, frag: n, ptsKnown: T, seeking: S, live: b, totalDuration: p.totalduration }; return o.parseInitSegment(e, null !== (e = null === navigator || void 0 === navigator ? void 0 : navigator.vendor) && void 0 !== e ? e : "").pipe(ur(e=>{ var {track: t, moovData: i, mimeType: r} = e , e = t["initSegment"]; l.inGaplessMode && Se.isVideoCodec(t.codec) && (s.warn(`Video codec discovered in gapless mode codec:${t.codec}`), l.dequeueSource("InvalidFormat")); r = { itemId: f, mediaOptionId: m, discoSeqNum: y, initParsedData: i, data: e, mimeType: r, keyTagInfo: g, fragment: n }; return d.archiveInitSegmentEntity(r), r } ), Vm(r, a, v, m)) } function yg(n, s, i, r) { var e; const {rootPlaylistQuery: t, rootPlaylistService: a, config: o, rtcService: d, statsService: l} = n , {itemId: u, mediaOptionType: c} = s , h = o.fragLoadPolicy , p = ne(s.mediaSeqNum); let f; p && (f = { getData: !1, cb: (e,t,i,r)=>(a.updateInflightFrag(u, s.mediaOptionType, s, "loading", i), !1) }); let m = !1; return r && null === d.serverInfoInstance && (m = !0), Jr([Sg(n, s.keyTagInfo, { itemId: s.itemId, mediaOptionId: s.mediaOptionId }), qf(s, o, h, f, m, null === (e = null === (e = Xm()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB).pipe(Ja(([,,e,t])=>{ i && l.setBandwidthSample(Object.assign(Object.assign({}, e), { mediaOptionType: s.mediaOptionType })), r && m && (d.serverInfoInstance = t), p && a.updateInflightFrag(u, s.mediaOptionType, s, "loaded", e) } ), jm(u, c, xc(s, h), o.maxNumAddLevelToPenaltyBox, !1, t, a, l))]).pipe(Cs(1), Ja(([,e])=>{ var t; r && ([t,,e] = e, d.handleFragLoaded(t, e)) } ), Ra(([e,t])=>{ const [i,r] = t; return i.keyTagInfo.key = e.key, Em(i, r, o, n.logger, n.rpcClients.crypto) } ), Ql.tag("getMediaFragmentCommon.emit")) } const vg = (i,e,t)=>{ const {rootPlaylistService: r, rootPlaylistQuery: n} = i , {timelineOffset: s, mediaFragment: a} = t.foundFrag , {itemId: o, discoSeqNum: d} = a; return r.updateInflightFrag(o, a.mediaOptionType, a, "loading", null), Jr([Sg(i, a.keyTagInfo, { itemId: a.itemId, mediaOptionId: a.mediaOptionId }), mg(i, a).pipe(Ra(t=>yg(i, a, !0, !0).pipe(Ra(e=>{ return function(e, t, i, y, v, S) { const r = new Uint8Array(e) , {rootPlaylistService: n, mediaSink: s, mediaParser: a, rootPlaylistQuery: o, mediaLibraryService: b} = S , d = s["mediaQuery"] , l = b.getQueryForOption(y) , {mediaOption: u, mediaOptionDetails: c} = l , {itemId: T, mediaOptionId: E} = u , {discoSeqNum: I, mediaSeqNum: w, mediaOptionType: h, isLastFragment: A} = y , p = d.seeking , f = c.liveOrEvent , m = h === ul.Variant && c.ptsKnown , O = { segment: r, frag: y, seeking: p, live: f, ptsKnown: m, totalDuration: c.totalduration, defaultInitPTS: t, iframeMediaStart: Np(y) ? y.iframeMediaStart : void 0, iframeDuration: Np(y) ? y.iframeMediaDuration : void 0 }; let g; if (null != i && (null === (t = y.keyTagInfo) || void 0 === t ? void 0 : t.uri) === (null === (t = i.keyTagInfo) || void 0 === t ? void 0 : t.uri)) g = Bi(i); else if (null != i) { const e = Object.assign(Object.assign({}, i.fragment), { keyTagInfo: y.keyTagInfo }); g = gg(i.data, e, S) } else g = gg(e, y, S); return g.pipe(Ra(m=>{ const g = performance.now(); if (null != m) { const g = m["data"] , e = new Uint8Array(g); O.initSegment = e } return a.parseSegment(O, "").pipe(ur(e=>{ var t = performance.now() , {startPTS: i, startDTS: r, endPTS: n, endDTS: s, firstKeyframePts: a, framesWithoutIDR: o, dropped: d, data1: l, data2: u, captionData: c, id3Samples: h, parsedInitSegment: e} = e , t = { durationSec: n.baseTime / n.timescale - i.baseTime / i.timescale, parseTimeMs: t - g }; S.statsService.setFragSample(t); let p = Object.assign({}, m); if (e) { const {track: g, moovData: f, mimeType: v} = e , S = g["initSegment"]; p = { itemId: T, mediaOptionId: E, discoSeqNum: I, initParsedData: f, data: S, mimeType: v, keyTagInfo: y.keyTagInfo, fragment: y }, b.archiveInitSegmentEntity(m, p) } e = y.keyTagInfo; return [p, { itemId: T, mediaOptionId: E, mediaSeqNum: w, discoSeqNum: I, startDtsTs: r, endDtsTs: s, timelineOffset: v, firstKeyframePts: a, framesWithoutIDR: o, dropped: d, data1: l, data2: u, startPts: i, endPts: n, keyTagInfo: e, isLastFragment: A, iframe: null !== (e = y.iframe) && void 0 !== e && e, duration: y.duration, iframeMediaDuration: Np(y) ? y.iframeMediaDuration : void 0, captionData: c, id3Samples: h }] } )) } ), Vm(n, o, h, E)) }(e, null === (e = n.getInitPTS(d)) || void 0 === e ? void 0 : e.offsetTimestamp, t, a, s, i) } ), Ja(e=>{} ), Ql.tag(`retrieveMediaFragmentCacheEntity.${e}.emit`)))).pipe(Cs(1))]).pipe(Ra(([,e])=>Bi(e))) } ; function Sg(e, t, i) { const {keySystemAdapter: r, rootPlaylistQuery: n, rootPlaylistService: s, config: a} = e; return r.getKeyFromDecryptData(t, i).pipe((o = t.uri, d = xc({ url: t.uri }, a.keyLoadPolicy), l = n, u = s, c = r.ksQuery, e=>e.pipe(od(()=>{ Km(o, !1, l, u, c) } ), ya(e=>e.pipe(Kr((e,t)=>{ if (e instanceof lu || e instanceof uu) return Hm(e, t, Rc(e, d), u, l, c); throw e } )))))); var o, d, l, u, c } class bg { constructor(e, t, i) { this.hls = e, this.destroy$ = new zt, this.iframeSwitchStart = 0, this.logger = t.child({ name: "hls-player-events" }), this.rtc = i, this.subscribeAndEmit() } destroy() { this.destroy$.next() } subscribeAndEmit() { var e = this.loaderQueryListener(new fu(bc)) , t = this.hls.publicQueries$.pipe(Ra(([e,t])=>nn(this.rootPlaylistQueryListener(e, t), this.mediaElementQueryListener(t, e)))); nn(e, t, this.activeItemListener(this.hls.itemQueue)).pipe(Un(e=>{ var t = e.message; return this.logger.error(`Got error in HlsPlayerEvents ${t}`, e), Ti } ), $a(this.destroy$), $s(()=>{} )).subscribe() } activeItemListener(e) { return e.activeItemById$.pipe(Up(), Ra(e=>{ e = e.url; return this.hls.trigger(P.MANIFEST_LOADING, { url: e }), Ti } )) } rootPlaylistQueryListener(t, e) { var i = t.enabledMediaOptionByType$(ul.Variant).pipe(an(e=>!!e), Ra(e=>{ var t; return this.hls.trigger(P.LEVEL_SWITCHING, e), null === (t = this.rtc) || void 0 === t || t.handleLevelSwitching(e.url), Ti } )) , r = t.enabledMediaOptionByType$(ul.Variant).pipe(Ra(i=>pg(i).mediaOptionDetailsEntity$.pipe(an(e=>!0 === (null == e ? void 0 : e.detailsLoading)), Ja(e=>{ var t = { url: oe(null == i ? void 0 : i.url), level: i.mediaOptionId, type: Cl[i.mediaOptionType] }; return this.hls.trigger(P.LEVEL_LOADING, t), Ti } )))) , n = t.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>{ const t = pg(e); let i = 0; return t.mediaOptionDetailsEntity$.pipe(Up(), an(e=>{ var t = null !== e.stats && !1 === e.detailsLoading && e.lastUpdateMillis > i; return i = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, t } )) } ), Ra(e=>{ var t = e.mediaOptionDetails , i = e.stats , r = { mediaOptionId: t.mediaOptionId, details: t, playlistType: t.type, stats: i }; if (null === (i = this.rtc) || void 0 === i || i.handleLevelLoaded(t, r.stats), this.hls.trigger(P.LEVEL_LOADED, r), 0 === e.unchangedCount) { const e = { level: 0, details: t }; this.hls.trigger(P.LEVEL_UPDATED, e) } if (null != t && t.daterangeTags) { const e = { daterangeTags: t.daterangeTags }; this.hls.trigger(P.DATERANGE_UPDATED, e) } return Ti } )) , s = t.enableMediaOptionSwitchedForType$(ul.AltAudio).pipe(Ra(e=>{ e = t.alternateMediaOptionById(ul.AltAudio, e.mediaOptionId); return e && this.triggerAudioSwitch(e), Ti } )) , a = t.rootPlaylistEntity$.pipe(an(e=>null !== e.enabledMediaOptionKeys[ul.AltAudio].mediaOptionId), Cs(1), Ra(e=>{ const t = e.enabledMediaOptionKeys[ul.AltAudio].mediaOptionId; return t && (e = e.mediaOptionListTuple[ul.AltAudio].mediaOptions.find(e=>e.mediaOptionId === t), this.triggerAudioSwitch(e)), Ti } )); return nn(i, s, $l(e.textTracksCreated$, e=>e).pipe(Ra(()=>t.enabledMediaOptionByType$(ul.Subtitle).pipe(Ra(e=>{ e = t.alternateMediaOptionById(ul.Subtitle, e.mediaOptionId); return e ? this.hls.trigger(P.SUBTITLE_TRACK_SWITCH, { track: Object.assign({}, e), hidden: !1 }) : this.hls.trigger(P.SUBTITLE_TRACK_SWITCH, { track: void 0, hidden: !1 }), Ti } )))), t.sessionData$.pipe(an(e=>null != e.complete), Cs(1), Ja(e=>{} ), ur(e=>{ this.hls.trigger(P.SESSION_DATA_COMPLETE, e) } )), t.getPreferredMediaOptionsByType$(ul.Variant).pipe(Oa(1), ur(e=>{ const t = e; null === (e = this.rtc) || void 0 === e || e.handleLevelsChanged(t), t.forEach(e=>{} ), this.hls.trigger(P.LEVELS_CHANGED, { requiresReset: !1, levels: t }) } )), t.getPreferredMediaOptionsByType$(ul.AltAudio).pipe(ur(e=>{ this.hls.trigger(P.AUDIO_TRACKS_UPDATED, { audioTracks: e }) } )), $l(e.textTracksCreated$, e=>e).pipe(Ra(()=>t.getPreferredMediaOptionsByType$(ul.Subtitle).pipe(Cs(1), ur(e=>{ this.hls.trigger(P.SUBTITLE_TRACKS_UPDATED, { subtitleTracks: e }), this.hls.trigger(P.SUBTITLE_TRACKS_CREATED) } )))), n, r, a) } mediaElementQueryListener(s, e) { return nn(s.seekTo$.pipe(ur(e=>{ var t; e && ne(e.pos) ? (null === (t = this.rtc) || void 0 === t || t.handleSeek("SEEKING"), this.hls.trigger(P.SEEKING, { seekToPos: e.pos })) : null === e && (null === (e = this.rtc) || void 0 === e || e.handleSeek("SEEKED"), this.hls.trigger(P.SEEKED)) } )), s.desiredRate$.pipe(xa(0), ca(), ur(e=>{ var t = e[0] , i = e[1]; jp(i) ? 0 == this.iframeSwitchStart && (this.iframeSwitchStart = performance.now()) : this.iframeSwitchStart = 0, this.hls.trigger(P.DESIRED_RATE_CHANGED, { oldRate: t, newRate: i }), null === (e = this.rtc) || void 0 === e || e.handleDesiredRateChanged(t, i) } )), s.sourceBufferEntityByType$(cl.AltAudio).pipe(an(e=>!!e), Es((e,t)=>e.totalBytes === t.totalBytes), ur(e=>{ this.hls.trigger(P.BUFFER_APPENDED) } )), s.sourceBufferEntityByType$(cl.Variant).pipe(an(e=>!!e), Es((e,t)=>e.totalBytes === t.totalBytes), ur(e=>{ var t; null === (t = this.rtc) || void 0 === t || t.handleVariantBufferAppended(e.timestampOffset, e.totalBytes), this.hls.trigger(P.BUFFER_APPENDED) } )), s.stallInfo$.pipe(Up(), So(s.combinedBuffer$), ur(([e])=>{ var t; null === (t = this.rtc) || void 0 === t || t.handleStalled(e, s.getCombinedBufferInfo(e.currentTime, 0).len), this.hls.trigger(P.STALLED, e) } )), Cr([Bi(e), Zd([s.timeupdate$, s.bufferedSegmentsByType$(cl.Variant)]).pipe(so(1e3), ur(([t,e])=>null == e ? void 0 : e.find(e=>e.startPTS <= t && e.endPTS > t)), an(e=>!!e), xa(null), ca())]).pipe(Ra(([e,[t,i]])=>{ var r = null == i ? void 0 : i.frag , t = null == t ? void 0 : t.frag; if (r && !Fp(t, r) && (this.hls.trigger(P.FRAG_CHANGED, i), this.hls.inGaplessMode && this.checkAndTriggerReadyForNext(s, i), !t || r.mediaOptionId !== t.mediaOptionId)) { const s = e.mediaOptionListQueries[ul.Variant].mediaOptionFromId(r.mediaOptionId); if (!s) return this.logger.warn("variantInfo is undefined in fragChangeMonitor"), Ti; const n = t ? t.mediaOptionId : "" , i = r.mediaOptionId; s.iframes && (performance.now(), this.iframeSwitchStart), null === (r = this.rtc) || void 0 === r || r.handleLevelSwitched({ url: s.url, mediaOptionId: s.mediaOptionId, oldVariant: "" !== n ? n : void 0, newVariant: i }), this.hls.trigger(P.LEVEL_SWITCHED, s) } return Ti } )), s.isBufferedToEnd$(this.hls.config.maxBufferHole, !1).pipe(an(e=>!0 === e), Hi(Zi), ur(e=>{ if (e && !this.hls.itemQueue.isPreloading() && this.hls.inGaplessMode) { const i = s.getCombinedBufferInfo(s.currentTime, 0); var t = 0; i && (t = i.end, e = s.mediaElementDuration, 0 < t && e - s.currentTime < 10 && this.hls.trigger(P.READY_FOR_NEXT_ITEM, { duration: t })) } } ))) } checkAndTriggerReadyForNext(e, t) { var i, r; t && t.frag && (i = e.currentTime, (r = e.getCombinedBufferInfo(i, 0)) && (i = r.end, r = e.mediaElementDuration, e = e.bufferMonitorInfo, e = Math.max(e.almostDryWaterLevelSeconds, e.lowWaterLevelSeconds / 2), (r - t.endPTS <= e || t.frag.isLastFragment) && this.hls.inGaplessMode && !this.hls.isPreloading && this.hls.trigger(P.READY_FOR_NEXT_ITEM, { duration: i }))) } loaderQueryListener(e) { return nn(e.unresolvedUriLoading$.pipe(ur(e=>e.map(e=>{ e = { uri: e.uri, responseType: e.responseType, userAgent: e.userAgent }; this.hls.trigger(P.UNRESOLVED_URI_LOADING, e) } )))) } triggerAudioSwitch(e) { e && this.hls.trigger(P.AUDIO_TRACK_SWITCHED, { id: e.id }) } triggerManifestLoaded(e) { e = { levels: e.rootMediaOptionsTuple[ul.Variant], audioTracks: e.rootMediaOptionsTuple[ul.AltAudio], subtitleTracks: e.rootMediaOptionsTuple[ul.Subtitle], url: e.baseUrl, audioMediaSelectionGroup: e.audioMediaSelectionGroup, subtitleMediaSelectionGroup: e.subtitleMediaSelectionGroup, stats: e.stats, isMediaPlaylist: e.isMediaPlaylist }; this.hls.trigger(P.MANIFEST_LOADED, e) } triggerManifestParsed(e) { var t = { levels: e.mediaOptionListQueries[ul.Variant].filteredMediaOptionList, firstLevel: 0, audio: !1, video: !0, altAudio: !1, audioTracks: e.mediaOptionListQueries[ul.AltAudio].filteredMediaOptionList, audioMediaSelectionGroup: e.audioMediaSelectionGroup, subtitleMediaSelectionGroup: e.subtitleMediaSelectionGroup, stats: e.loadStats }; null === (e = this.rtc) || void 0 === e || e.handleManifestParsed(t), this.hls.trigger(P.MANIFEST_PARSED, t) } urlRedactedManifestLoaded(e) { const t = Object.assign({}, e); return t.url = oe(t.url), t.levels = le(t.levels), t.audioTracks = ue(t.audioTracks), t.subtitleTracks = ue(t.subtitleTracks), t } urlRedactedManifestParsed(e) { const t = Object.assign({}, e); return t.levels = le(t.levels), t.audioTracks = ue(t.audioTracks), t } } (w = ym = ym || {}).LowBandwidth = "LowBandwidth", w.HighBandwidth = "HighBandwidth", w.PreferredListChanged = "PreferredListChanged", w.IframeModeChange = "IframeModeChange", w.None = ""; const Tg = { minValidBitrate: 2e6, maxValidBitrate: 5e6, maxPreferredBitrate: 3e6, minValidHeight: 480, maxValidHeight: 720 }; function Eg(e, a, o, d, l, u) { return e.reduce((e,t)=>{ if (t.iframes) return e; let i = e; const r = (n = t.score, s = a && o && d && l && !Ig(t, a, o, d, l, u) ? ll.INVALID : ll.VALID, new Hp(s,n)); var n, s; return (!e || r.isGreaterThan(e.bestRank) || r.isEqualTo(e.bestRank) && t.bandwidth < e.selected.bandwidth) && (i = { selected: t, bestRank: r }), i } , null).selected } function Ig(e, t, i, r, n, s) { var {targetDuration: a, targetStartupMs: o} = i , d = r["avgPlaylistLoadTimeMs"] , l = n["avgParseTimeMs"] , {avgBufferCreateMs: i, avgInitFragAppendMs: r, avgDataFragAppendMs: n} = s , {avgBandwidth: s, avgLatencyMs: t} = t; return e.bandwidth <= s && (e.avgBandwidth || e.bandwidth) * a / s * 1e3 + d + i + +(t + l + (r + n)) <= o } const wg = { name: "abr" }; function Ag(e, t) { return ne(e) ? Math.min(e, t) : t } function Og(e) { return ne(null == e ? void 0 : e.avgBandwidth) } function kg(e, t) { return e.getCurrentWaterLevelByType(cl.Variant, t) / (0 !== e.playbackRate ? Math.abs(e.playbackRate) : 1) } function Cg(t, i, e, r) { if (e) return t; let n = -1; if (t < 0) return n; for (let e = t; e < i.length; ++e) { const t = Mg(i[e], r); if (t.altAudio && t.subtitle) { n = e; break } } return n } function Dg(t, e, i, r, n, s, a) { const o = i.preferredMediaOptions[ul.Variant].filter(e=>e.iframes === t); if (!o.length) return { variantMediaOption: Ol.mediaOptionId, holdOffDuration: 0, lowestCandidate: null }; let d = 0; const l = i.nextMinAutoOptionId; if (l !== Ol.mediaOptionId) { const t = o.findIndex(e=>e.mediaOptionId === l); 0 <= t && (d = t) } if (d = Cg(d, o, t, i), d < 0) return { variantMediaOption: Ol.mediaOptionId, holdOffDuration: 0, lowestCandidate: null }; let u = o.length - 1; const c = i.nextMaxAutoOptionId; if (c !== Ol.mediaOptionId) { const t = o.findIndex(e=>e.mediaOptionId === c); 0 <= t && (u = t) } var h = i.variantMediaOptionById(r.mediaOptionId) , p = r.mediaOptionDetails , f = (null == h ? void 0 : h.iframes) !== t ? 0 : kg(n, e.maxBufferHole); let m, g; if (t) { const t = e.desiredIframeFPS; g = p ? p.targetduration / t : 0, g = Math.max(1 / t, g) } else g = p ? p.targetduration : 0; h = e.abrBandWidthUpFactor, p = e.abrBandWidthFactor; return m = Pg(o, g, d, u, f, t, s.getCombinedEstimate(), s.bandwidthStatus, p, h, e, i, r, n, a), m.variantMediaOption === Ol.mediaOptionId && (m = Pg(o, g, d, u, f + Ag(g, e.maxStarvationDelay), t, s.getCombinedEstimate(), s.bandwidthStatus, p, h, e, i, r, n, a), m.variantMediaOption === Ol.mediaOptionId && 0 <= d && (m.variantMediaOption = o[d].mediaOptionId, m.alternates = t ? null : Mg(o[d], i))), m } function Mg(e, t) { var i = t.enabledMediaOptionKeys , r = i[ul.AltAudio] , r = kl(r) ? t.mediaOptionListQueries[ul.AltAudio].getMatchingAlternate(r.mediaOptionId, e) : Ol , i = i[ul.Subtitle]; return { altAudio: r, subtitle: kl(i) ? t.mediaOptionListQueries[ul.Subtitle].getMatchingAlternate(i.mediaOptionId, e) : Ol } } function Pg(i, r, n, e, s, a, o, d, t, l, u, c, h, p, f) { "bandwidth-history-controller" !== u.abrBandwidthEstimator && f.warn(`Unsupported configuration: ${u.abrBandwidthEstimator} for ABR bandwidth estimator`); const m = d.bandwidthSampleCount , g = c.abrStatus , y = p.maxBufferSize , v = u.minTargetDurations || 1 , S = c.mediaOptionListQueries[ul.Variant].mediaOptionListInfo.hasScore; if (!i.length) return { variantMediaOption: Ol.mediaOptionId, holdOffDuration: -1, lowestCandidate: null }; const b = c.enabledMediaOptionIdByType(ul.Variant) , T = c.variantMediaOptionById(b) , E = null != i.find(e=>e.mediaOptionId === b) , I = T && T.iframes === a , w = T && I ? T.score : void 0 , A = T && I ? T.frameRate : void 0 , O = T && I ? T.height : void 0 , k = I ? kg(p, u.maxBufferHole) : 0; e = Math.max(0, Math.min(i.length - 1, e)), n = Math.max(0, Math.min(i.length - 1, n)); var C = h.mediaOptionDetailsEntityRecord , D = xg(o.avgBandwidth, l, t, m); let M; for (let t = e; t >= n; t--) { const n = i[t]; let e = n.mediaOptionId; const l = n.score , u = C && C[e] ? C[e].mediaOptionDetails : void 0 , h = C && C[e] ? C[e].lastUpdateMillis : null , p = u ? u.totalduration / u.fragments.length : r , f = null != T && n.bitrate > T.bitrate , B = null != T && n.bitrate < T.bitrate , m = !(null != A && (f && n.frameRate < A || B && n.frameRate > A)) , U = !(f && null != O && O > n.height) , $ = !(B && (n.bitrate === T.bitrate - 1 || n.bitrate === T.bitrate + 1)) , V = !(S && f && null != w && (l < w || l === w && T && n.bitrate >= T.bitrate)) , K = n.iframes === a; if (ne(p) && K && m && U && $ && V) { var {adjustedbw: P, bitrate: x, fetchDuration: R, rejectLevelDueToPeakBW: L, canFitMultipleSegments: _, requireAlternates: N, alternates: F} = function(e, t, i, r, n, s, a, o, d, l, u, c) { var h = n ? a.bwUp : a.bwDown , n = e.bitrate , a = t ? t.totalduration / t.fragments.length : o , s = Rg(e, t, o, h, ne(s.avgPlaylistLoadTimeMs) ? s.avgPlaylistLoadTimeMs : s.avgLatencyMs, l) , l = e.bandwidth , i = n < h && h < l && i <= 2 * a , d = r * ((l || n || 0) * ((null == t ? void 0 : t.targetduration) || a)) / 8 <= d; let p = null; u = !u; return u && (p = Mg(e, c), p.altAudio && p.subtitle || (p = null)), { adjustedbw: h, bitrate: n, fetchDuration: s, rejectLevelDueToPeakBW: i, canFitMultipleSegments: d, requireAlternates: u, alternates: p } }(n, u, k, v, f, o, D, r, y, h, a, c); if (N && Boolean(F) && (M = e), x < P && _ && !L && (!N || Boolean(F)) && (a || !R || R < s)) return L = P, N = g, P = (P = d).instantBw, (N.fragDownloadSlow || N.fragDownloadTooSlow || ne(P) && P < L) && E && I && k <= 2 * p && f && (e = b), { variantMediaOption: e, holdOffDuration: R, alternates: F, lowestCandidate: M } } } return { variantMediaOption: Ol.mediaOptionId, holdOffDuration: -1, lowestCandidate: M } } function xg(e, t, i, r) { let n, s; return 4 <= r ? (n = e * t, s = e * i) : n = s = e / 1.8, { bwUp: n, bwDown: s } } function Rg(e, t, i, r, n, s) { let a = e.bitrate * (t ? t.totalduration / t.fragments.length : i) / r; return null == t || !t.liveOrEvent || t.ptsKnown && !_g(t.totalduration, n, s) || (a *= 2), ne(n) && (!ne(s) || null != t && t.liveOrEvent) && (a += n / 1e3), a } function Lg(t, e) { let i = 1 / 0; if (t === Ol.mediaOptionId) return i; var r = e.find(e=>e.mediaOptionId === t); if (!r) return 1 / 0; const n = r.iframes , s = r.bitrate , a = r.frameRate , o = e.find(e=>e.iframes === n && (void 0 === a || e.frameRate >= a) && e.bitrate > s); return o && (i = o.bitrate), i } function _g(e, t, i) { return t = ne(t) ? t : 0, !ne(i) || performance.now() - i + t > 1e3 * e } function Ng(e, t) { return (null == e ? void 0 : e.fragDownloadSlow) === (null == t ? void 0 : t.fragDownloadSlow) && e.fragDownloadTooSlow === (null == t ? void 0 : t.fragDownloadTooSlow) } function Fg(e) { return "loading" === (null == e ? void 0 : e.state) && ne(null === (e = e.bwSample) || void 0 === e ? void 0 : e.trequest) } const Bg = 2e3; function Ug(e, t, i, r) { let {fragDownloadSlow: n, fragDownloadTooSlow: s} = t; var a = i.variantMediaOptionById(e.mediaOptionId).bitrate , t = e.bwSample; r = r.child(wg); i = t.total || Math.max(t.loaded, Math.round(e.duration * a / 8)), a = performance.now() - t.tfirst, i = t.loaded * e.duration * 1e3 / i; return a >= Bg && 1e3 <= a - i && (n || r.warn(`flow indicates low bandwidth, after time/duration behind real time: ${a}/${a - i}`), n = !0), a >= 1e3 * e.duration && (s || r.warn(`too much time spent downloading fragment, likely to switch down ${a} > ${1e3 * e.duration}`), s = !0), { fragDownloadSlow: n, fragDownloadTooSlow: s } } function $g(e, t, i, r, n) { var s; const a = n.logger.child(wg) , o = r.isIframeRate , d = i.mediaOptionListQueries[ul.Variant].preferredMediaOptionList , l = i.enabledMediaOptionKeys[ul.Variant]; let u = e; if (u !== ym.None || d.some(e=>e.mediaOptionId === l.mediaOptionId) || (u = ym.PreferredListChanged), u !== ym.None && !(o && u !== ym.IframeModeChange && r.getBufferedSegmentsByType(cl.Variant).filter(e=>e.frag.iframe).length < t.minFramesBeforeSwitchingLevel)) { const c = Uf(i.itemId) , h = pg(l) , p = [Ol, Ol, Ol] , f = function(e, t, i, r, n, s, a) { let o = t.nextMaxAutoOptionId; if (o === Ol.mediaOptionId || Og(s.getBandwidthEstimate())) return d = e, l = t, u = r, e = n, r = s, s = a.child({ name: "abr" }), a = e.isIframeRate, l.enabledMediaOptionIdByType(ul.Variant), Dg(a, d, l, u, e, r, s); if (n.isIframeRate) return { variantMediaOption: o, holdOffDuration: 0, lowestCandidate: null }; { const c = t.variantMediaOptionById(o) , h = t.enabledAlternateMediaOptionByType(ul.Subtitle) , n = t.enabledAlternateMediaOptionByType(ul.AltAudio) , p = null == n ? void 0 : n.persistentID , f = null == h ? void 0 : h.persistentID , m = !t.preferHDR , g = i.getBestMediaOptionTupleFromVariantAndPersistentId(t, c, p, f, void 0, [], m, !1, !1); return t.isValidMediaOptionTuple(g) ? (o = g[ul.Variant].mediaOptionId, { variantMediaOption: o, holdOffDuration: 0, alternates: { altAudio: g[ul.AltAudio], subtitle: g[ul.Subtitle] }, lowestCandidate: null }) : { variantMediaOption: t.enabledMediaOptionKeys[ul.Variant].mediaOptionId, holdOffDuration: 0, lowestCandidate: null } } var d, l, u }(t, i, n, h, r, c, a); if (f.variantMediaOption !== l.mediaOptionId) { p[ul.Variant] = { itemId: i.itemId, mediaOptionId: f.variantMediaOption }; for (const e of [ul.AltAudio, ul.Subtitle]) { const t = i.enabledMediaOptionIdByType(e); if (t !== Ol.mediaOptionId) { const r = e === ul.AltAudio ? null === (s = f.alternates) || void 0 === s ? void 0 : s.altAudio : null === (s = f.alternates) || void 0 === s ? void 0 : s.subtitle; p[e] = r || { itemId: i.itemId, mediaOptionId: t } } } return n.setEnabledMediaOptions(i.itemId, p), 1 } } } const Vg = { name: "iframes" } , Kg = new pd({},{ name: "item-queue", producerFn: vc, idKey: "itemId", resettable: !0 }) , Hg = new class extends Od { } (Kg); class jg { constructor() { this.firstItem = !0, this.playingEntity = null, this.loadingEntity = null } static createItem(e, t, i, r, n) { const s = new Date , a = `${s.getHours()}:${s.getMinutes()}:${s.getSeconds()}`; qe(); var o = function(e) { e = sl.parseURL(e).fragment.substr(1); if (0 === e.length) return null; const t = new URLSearchParams(e); if (!t.has("t")) return null; e = Number(t.get("t")); return ne(e) ? e : null }(t); if (o) i = o; else { const e = Ym(); ne(null == e ? void 0 : e.startPosition) && (i = e.startPosition) } return { itemId: `${e}_${a}`, name: e, url: t, serviceName: n, createTime: a, initialSeekTime: i, itemStartOffset: 0, platformInfo: r, config: {} } } get activeItemById$() { return Hg.selectActiveId().pipe(ur(e=>Hg.getActive())) } get removedItems$() { return Hg.selectEntityAction(To.Remove).pipe(ur(e=>e)) } get activeItem() { return Hg.getActive() } get queueItems$() { return Hg.selectAll().pipe(ur(e=>null != e ? e : [])) } get isFirstItem() { return this.firstItem } get playingItem() { return this.playingEntity } get loadingItem() { return this.loadingEntity } addQueueItem(e, t, i, r, n, s) { Hg.getCount(); const a = jg.createItem(e, t, i, r, s); null != this.playingEntity && (a.initialSeekTime = void 0), n && (a.itemStartOffset = n, this.firstItem = !1, this.playingEntity = this.activeItem, this.loadingEntity = a), Co(`queue.add.item: ${e}`), sd(()=>{ Kg.add(a), Kg.setActive(a.itemId) } ) } updatePlayingItemId() { this.playingEntity = this.loadingEntity, this.loadingEntity = null, this.clearAllButActive() } resetLoadingItem() { this.removeQueueItem(this.loadingEntity.itemId), this.loadingEntity = null, sd(()=>{ Kg.setActive(this.playingEntity.itemId) } ) } isPreloading() { return null !== this.playingEntity && null !== this.loadingEntity } setQueueItem(t, i, r, n, s) { Co("queue.set.item"), this.loadingEntity = null, sd(()=>{ Kg.reset(); var e = jg.createItem(t, i, r, n, s); Kg.add(e), Kg.setActive(e.itemId) } ), this.playingEntity = this.activeItem } removeQueueItem(e) { Kg.remove(e) } clearQueue() { Kg.reset() } clearAllButActive() { var e; const t = null === (e = this.activeItem) || void 0 === e ? void 0 : e.itemId; sd(()=>{ Hg.getAll().forEach(e=>{ e.itemId !== t && Kg.remove(e.itemId) } ) } ) } set earlyAudioSelection(t) { Kg.updateActive(e=>{ e.earlySelection || (e.earlySelection = {}), e.earlySelection.audioPersistentId = t } ) } get earlyAudioSelection() { var e; return null === (e = this.activeItem.earlySelection) || void 0 === e ? void 0 : e.audioPersistentId } set earlySubtitleSelection(t) { Kg.updateActive(e=>{ e.earlySelection || (e.earlySelection = {}), e.earlySelection.subtitlePersistentId = t } ) } get earlySubtitleSelection() { var e; return null === (e = this.activeItem.earlySelection) || void 0 === e ? void 0 : e.subtitlePersistentId } } function qg(e, t, i, r, n, s) { return $m(e, 0, Lm({ errorAction: mm.RemoveAlternatePermanently, errorActionFlags: 0 }, !1, e.response.code, i, t, s, n), s, n, t, i).pipe(Un(e=>{ throw !1 === e.fatal && r.resetMediaSource(), e } )) } function Qg(e, t) { if (!e || 0 === e.length) return 0; const i = [...e].sort((e,t)=>t[0] - e[0]) , r = t.getTime() , n = null !== (t = i.find(([e])=>r >= e)) && void 0 !== t ? t : i[i.length - 1] , [s,a] = n , o = a + (r - s) / 1e3; return Math.max(0, o) } function Gg(e, t) { if (e && 0 !== e.length) { const i = [...e].sort((e,t)=>t[1] - e[1]) , r = null !== (e = i.find(([,e])=>e <= t)) && void 0 !== e ? e : i[i.length - 1] , [n,s] = r; return new Date(n + 1e3 * (t - s)) } } function Wg(l, e, u, c, h, p) { return e.child({ name: "seek" }), e=>e.pipe(Ra((e,t)=>{ var i, r, n, s, a, o, d = u.mediaQuery.seekTo$.pipe(Up()); return i = 0 === t, r = l, n = h, s = p, (null == (t = e) ? Ti : t instanceof Date ? (a = t, o = s, n.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>o.getQueryForOption(e).mediaOptionDetails$), ur(e=>Qg(e.dateMediaTimePairs, a)), Cs(1))) : function(n, e, s, a, t) { let i = a.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>t.getQueryForOption(e).mediaOptionDetails$), an(e=>ne(null == e ? void 0 : e.totalduration)), Cs(1), ur(e=>{ var t = !e.liveOrEvent , i = e.totalduration , r = a.itemStartOffset; return t ? ne(n) ? 0 <= n ? n : r + (i + n) : r + (ne(e.startTimeOffset) ? e.startTimeOffset : 0) : !ne(n) || n < 0 || 0 === n && s.liveEdgeForZeroStartPositon ? ig(0, e, s) : n } )); return e && (i = i.pipe(Ja(e=>{} ))), i }(t, i, r, n, s)).pipe($s(()=>{ null != e && c.setPendingSeek(h.itemId, void 0) } ), $a(d)) } ), Ja(e=>{ ne(e) && (u.seekTo = e) } )) } class zg { constructor(e, t, i, r, n, s) { this.logger = e, this._rootPlaylistService = t, this._rootQuery = i, this._mediaQuery = r, this._iframeMachine = n, this._anchorMSNs = [NaN, NaN], this._avDetails = [null, null], this.logger = e.child({ name: "fpicker" }), this._discoSeqNum = NaN, this.lookUpTolerance = Math.max(s.maxBufferHole, s.maxFragLookUpTolerance) } destroy() { this._anchorMSNs = [NaN, NaN], this._avDetails = [null, null], this._rootQuery = null, this._mediaQuery = null, this._rootPlaylistService = null, this._iframeMachine = null } get discoSeqNum() { return this._discoSeqNum } get _discoSeqNum() { return this._rootQuery.discoSeqNum } set _discoSeqNum(e) { this._rootPlaylistService.setDiscoSeqNum(this._rootQuery.itemId, e) } get anchorMSNs() { return this._anchorMSNs } _resolvePosition(e, t, i) { let r = e; t = this._avDetails[t]; if ((null == t ? void 0 : t.mediaOptionId) !== (null == i ? void 0 : i.mediaOptionId) && i.liveOrEvent && !1 === i.ptsKnown) if (null != (null == t ? void 0 : t.dateMediaTimePairs) && i.dateMediaTimePairs) { const n = Gg(t.dateMediaTimePairs, e); r = Qg(i.dateMediaTimePairs, n) } else { const e = 3 * i.targetduration , n = i.fragments[0].start + i.totalduration; r = Math.max(0, n - e) } return r } _updateAnchorByPosition(e, t) { let i = NaN; const r = t[cl.Variant]; if (r) { const t = r.fragments , n = this._resolvePosition(e, cl.Variant, r); if (i = Bl.ccForTime(t, n), !ne(i)) { const r = t[0] , s = t[t.length - 1] , a = r.start , o = s.start + s.duration; this.logger.warn(`${e.toFixed(3)} out of range [${a.toFixed(3)},${o.toFixed(3)}]`), e <= a ? i = r.discoSeqNum : e >= o && (i = s.discoSeqNum) } } else this.logger.warn("No variant details for anchoring"); this._updateAnchor(i, t) } _updateAnchor(e, n) { const s = e !== this._discoSeqNum; s && (this._discoSeqNum = e), Ml.forEach(e=>{ const t = this._avDetails[e] , i = n[e] , r = (null == t ? void 0 : t.mediaOptionId) !== (null == i ? void 0 : i.mediaOptionId); if (s || r) this._updateAnchorForType(xl(e), i); else if (i) { const {mediaOptionId: n, ptsKnown: s, dateMediaTimePairs: t} = i; this._avDetails[e] = { mediaOptionId: n, ptsKnown: s, dateMediaTimePairs: t } } } ) } getNextFragments(e, i) { const {position: r, bufferInfoTuple: t, switchContexts: n} = e , s = t.map((e,t)=>Xg(r, i[t], n[t], null == e ? void 0 : e.buffered, this.lookUpTolerance)).reduce((e,t)=>Math.min(t, e), Number.POSITIVE_INFINITY); return this._updateAnchorByPosition(s, i), this._getNextFragmentsInternal(e, i) } _getNextFragmentsInternal(i, r) { const n = [null, null]; r.forEach((e,t)=>{ n[t] = this._getNextFragmentForType(i, r, t) } ); var e = n[cl.Variant] , t = n[cl.AltAudio] , s = null === (a = null == e ? void 0 : e.foundFrag) || void 0 === a ? void 0 : a.mediaFragment , a = null === (a = null == t ? void 0 : t.foundFrag) || void 0 === a ? void 0 : a.mediaFragment; if (s && a && (a.start > s.start + s.duration ? (this.logger.warn("Audio too far ahead"), n[cl.AltAudio] = zg.noopResult) : s.start > a.start + a.duration && !this._mediaQuery.isIframeRate && (this.logger.warn("Video too far ahead"), n[cl.Variant] = zg.noopResult)), !isFinite(null == e ? void 0 : e.nextDisco) || null != t && !ne(t.nextDisco)) return n; { const o = n[cl.Variant].nextDisco; return this._updateAnchor(o, r), this._getNextFragmentsInternal(i, r) } } _getNextFragmentForType(e, t, i) { var {position: r, bufferInfoTuple: n, switchContexts: s} = e , a = t[i] , o = null !== (l = null === (c = n[i]) || void 0 === c ? void 0 : c.buffered) && void 0 !== l ? l : { start: r, end: r, len: 0 } , d = this._mediaQuery.getBufferedSegmentsByType(i) , l = null !== (c = null === (e = s[i]) || void 0 === e ? void 0 : e.userInitiated) && void 0 !== c && c , u = Xg(r, a, s[i], o, this.lookUpTolerance); if (!a) return null; var {highWaterLevelSeconds: e, lowWaterLevelSeconds: c} = this._mediaQuery.bufferMonitorInfo , r = o.len; if (!l && e <= r) return zg.noopResult; var e = i === cl.Variant ? cl.AltAudio : cl.Variant , n = null === (n = n[e]) || void 0 === n ? void 0 : n.buffered , e = null !== (e = null === (e = s[e]) || void 0 === e ? void 0 : e.userInitiated) && void 0 !== e && e; let h = !1; i === cl.Variant && c <= r && 1 < this._mediaQuery.expectedSbCount && null != n && n.end < o.end && (e || n.end - n.start < c) && (h = !0); let p, f = null, m = NaN; if (this._mediaQuery.isIframeRate && i === cl.Variant && a.iframesOnly) { const g = function(e, t, i) { e = i.nextFragment(a.fragments, (null == e ? void 0 : e.fragments) || [], t, u); if (!e) return null; var {frag: t, newMediaRootTime: e} = e; return { foundFrag: { timelineOffset: t.iframeMediaStart, mediaFragment: t }, nextDisco: NaN, newMediaRootTime: e } }(t[cl.AltAudio], this._mediaQuery.desiredRate, this._iframeMachine); if (g) { ({foundFrag: f, nextDisco: m, newMediaRootTime: p} = g); const i = f.mediaFragment; i.discoSeqNum !== this._discoSeqNum && this._updateAnchor(i.discoSeqNum, t) } } else { const g = this._anchorMSNs[i]; ({foundFrag: f, nextDisco: m, newMediaRootTime: p} = og(u, this._discoSeqNum, g, a, d)) } return h && this._rootQuery.getInitPTS(null == f ? void 0 : f.mediaFragment.discoSeqNum) ? zg.noopResult : { foundFrag: f, nextDisco: m, newMediaRootTime: p } } _updateAnchorForType(e, t) { var i, r, n; if (!t) return this._anchorMSNs[e] = NaN, void (this._avDetails[e] = null); ne(this._discoSeqNum) ? (n = this._discoSeqNum, n = null !== (r = null == (n = (r = t.fragments, i = n, r.find(e=>e.discoSeqNum === i))) ? void 0 : n.mediaSeqNum) && void 0 !== r ? r : t.startSN, this._anchorMSNs[e] = n, {mediaOptionId: r, ptsKnown: n, dateMediaTimePairs: t} = t, this._avDetails[e] = { mediaOptionId: r, ptsKnown: n, dateMediaTimePairs: t }) : this.logger.warn("Trying to anchor with non-finite discoSeqNum") } } function Xg(e, t, i, r, n) { r = null != r ? r : { start: e, end: e, len: 0 }; i = null !== (i = null == i ? void 0 : i.userInitiated) && void 0 !== i && i, n = null != t && t.iframesOnly ? 0 : n; return i || 0 === r.len ? e : r.end + n } zg.noopResult = { foundFrag: null, nextDisco: NaN }; const Yg = { name: "avpipe" }; function Jg(r) { const {config: o, rootPlaylistService: d, rootPlaylistQuery: l, mediaSink: e, gaplessInstance: t} = r , u = e.mediaQuery , i = Zd(Ml.map(e=>l.enabledMediaOptionSwitchForType$(e).pipe(Ja(e=>{} )))).pipe(Ra(e=>{ if (!kl({ itemId: l.itemId, mediaOptionId: e[ul.Variant].toId })) throw new V(!0,`No valid variant enabled id:${e[ul.Variant].toId}`,$.NoValidAlternates); e = e.map(({fromId: e, toId: t},i)=>function(t, i, r, n, s) { var e, a, o; const {rootPlaylistQuery: d, rootPlaylistService: l, mediaSink: u, mediaParser: c, config: h, iframeMachine: p} = t , f = u.mediaQuery; if (!n || !s || n === s) return Ul; switch (r) { case ul.Variant: { c.reset(ul.Variant); const t = xl(r) , l = d.variantMediaOptionById(n) , g = d.variantMediaOptionById(s); if (null == g || null == l) return Ul; let e = NaN; if (l.iframes !== g.iframes || !g.iframes && p.isStarted) { if (u.toggleTrickPlaybackMode(g.iframes), !g.iframes && p.isStarted) { const t = u.mediaQuery.autoPausedRestartTime , i = t || p.iframeClockTimeSeconds; u.autoPausedRestartTime = void 0, e = i, p.stop() } return u.pause(), u.flushData(t, 0, 1 / 0, !0).pipe(Ja(()=>{ isFinite(e) && (u.seekTo = e) } )) } if (!h.allowFastSwitchUp || g.iframes) return Ul; var m = pg(l).mediaOptionDetails; if (null != m && null != g && l.bitrate < g.bitrate) { const r = m.targetduration , n = pg(g) , s = n.mediaOptionDetails , c = n.mediaOptionDetailsEntity.lastUpdateMillis , p = f.getCurrentWaterLevelByType(t, h.maxBufferHole) , y = function(e, t, i, r, n, s, a, o) { if (n.nextMaxAutoOptionId !== Ol.mediaOptionId && !Og(s.getBandwidthEstimate())) return Number.POSITIVE_INFINITY; a = xg(s.getBandwidthEstimate().avgBandwidth, a.abrBandWidthUpFactor, a.abrBandWidthFactor, s.bandwidthStatus.bandwidthSampleCount), s = ne(s.getPlaylistEstimate().avgPlaylistLoadTimeMs) ? s.getPlaylistEstimate().avgPlaylistLoadTimeMs : s.getBandwidthEstimate().avgLatencyMs, a = t.bitrate > e.bitrate ? a.bwUp : a.bwDown; return null == i || !i.liveOrEvent || i.ptsKnown && !_g(i.totalduration, s, o) ? Rg(t, i, r, a, s, o) : Number.POSITIVE_INFINITY }(l, g, s, r, d.abrStatus, i, h, c) + h.maxStarvationDelay , v = f.currentTime + y , S = null === (o = null === (a = f.sourceBufferEntityByType(t)) || void 0 === a ? void 0 : a.bufferedSegments) || void 0 === o ? void 0 : o.find(e=>e.startPTS >= v); let e; if (S) { const t = S.endPTS - S.startPTS; e = S.startPTS + Math.min(Math.max(t - h.maxFragLookUpTolerance, .5 * t), .75 * t) } if (ne(e) && p >= y) return u.flushData(t, e, 1 / 0) } } break; case ul.AltAudio: e = d, m = s, o = "Nah" === (a = n) ? null : e.alternateMediaOptionById(ul.AltAudio, a), o = Boolean(o && o.url), m = "Nah" === a ? null : e.alternateMediaOptionById(ul.AltAudio, m), m = Boolean(m && m.url), o && !m && (l.setEnabledMediaOptionSwitchContextByType(d.itemId, ul.AltAudio, s, void 0), u.resetMediaSource(f.currentTime)), c.reset(ul.AltAudio) } return Ul }(r, n, i, e, t)); return Xr(Bi(!0), Jr(e).pipe(Js(!1))) } ), Ql.tag("mediaOptionSwitch.audiovideo.out")) , n = Uf(l.itemId) , s = r.logger.child(Yg) , a = new zg(s,d,l,u,r.iframeMachine,o); return Zd([l.anchorTime$.pipe(Ql.tag("anchorTime.audiovideo.in")), i]).pipe(Ra(([i,e])=>e ? Ti : u.needData$(o.maxBufferHole, t.inGaplessMode, t.isPreloading).pipe(ur(e=>{ var t = [l.enabledMediaOptionSwitchContexts[ul.Variant], l.enabledMediaOptionSwitchContexts[ul.AltAudio]]; return u.getSourceBufferInfoAction(e, i, t, o.maxBufferHole) } ), Ls(e=>{ if (!e) return Ti; e = Bi(e).pipe(Zg(r, a), ty(r)); return hn($l(function(e) { const {mediaSink: t, rootPlaylistQuery: i, rootPlaylistService: r} = e , n = t.mediaQuery , s = e.logger.child(wg); return nn((a = i, o = s, Zd([n.fellBelowLowWater$, a.getInFlightFragByType$(ul.Variant)]).pipe(Ra(e=>{ var [,t] = e; if (!Fg(t)) return Ti; const i = performance.now() - t.bwSample.trequest , r = Bg - i , n = 1e3 * t.duration - i , s = [Ul]; return 0 < r && s.push(vn(r)), 0 < n && s.push(vn(n)), nn(...s).pipe(Js(e)) } ), na((e,[t,i])=>{ const r = Object.assign({}, e); return t && (r.fragDownloadSlow = !0), Ug(i, r, a, o) } , { fragDownloadSlow: !1, fragDownloadTooSlow: !1 }), xa({ fragDownloadSlow: !1, fragDownloadTooSlow: !1 }), Es(Ng))), function(r) { const s = r.mediaSink.mediaQuery , {rootPlaylistQuery: e, config: a} = r; return s.desiredRate$.pipe(Ra(t=>0 === t ? Ti : Zd([e.getInFlightFragByType$(ul.Variant), e.mediaOptionListQueries[ul.Variant].preferredMediaOptionList$.pipe(ur(e=>e.filter(Dm.bind(null, jp(t)))))])), so(100), Ra(e=>{ const [t,i] = e; if (!Fg(t) || i.findIndex(e=>e.mediaOptionId === t.mediaOptionId) <= 0) return Ti; var r = performance.now() - t.bwSample.trequest , n = Ag(t.duration, a.maxStarvationDelay) , n = Math.min(1e3 * n, 500 * t.duration / s.playbackRate); return vn(Math.max(0, n - r), 100).pipe(Js(e)) } )).pipe(na((e,[t,i])=>function(t, i, r, e) { let {fragDownloadSlow: n, fragDownloadTooSlow: s} = t; const {config: a, rootPlaylistService: o, rootPlaylistQuery: d, mediaSink: l, statsService: u, mediaLibraryService: c} = e , h = e.logger.child(wg) , p = l.mediaQuery; if (p.paused) return t; e = i.bwSample; if (!ne(e.tfirst)) return t; const f = performance.now() , m = f - e.trequest , g = Ag(i.duration, a.maxStarvationDelay) , y = ul.Variant , v = i.mediaOptionId , S = d.variantMediaOptionById(v) , b = c.getQueryForOption(S) , T = S.bitrate , E = Math.max(1, 8e3 * e.loaded / m) , I = 8 * ((ne(e.total) ? e.total : Math.max(e.loaded, Math.round(i.duration * T / 8))) - e.loaded) / E , w = kg(p, a.maxBufferHole); let A; if (ne(w) && 0 < w && !ne(null === (O = p.seekTo) || void 0 === O ? void 0 : O.pos)) A = w; else { const _ = m / 1e3; A = _ < g ? g - _ : g } var O = n; ({fragDownloadSlow: n, fragDownloadTooSlow: s} = Ug(i, t, d, h)); t = 2 * ((null === (t = b.mediaOptionDetails) || void 0 === t ? void 0 : t.targetduration) || i.duration); if (!(w <= t && (I >= A || n))) return Xm().getQuery().extendMaxTTFB && Xm().setExtendMaxTTFB(0), { fragDownloadSlow: n, fragDownloadTooSlow: s }; O || h.warn(`likely to stall ${se({ maxTimeToLoadSec: A, minSwitchDuration: t, stats: e, elapsedMs: m, remainingTimeSec: I, instantBw: E, bufferAheadSec: w, fragDownloadSlow: n })}`), n = !0, Xm().getQuery().extendMaxTTFB || Xm().setExtendMaxTTFB(6e5); O = I >= A; let k; const C = i.itemId , D = u.getQueryForItem(C) , M = D.getCombinedEstimate() , P = Object.assign(Object.assign({}, M), { avgBandwidth: E }) , x = D.bandwidthStatus , R = S.iframes , L = Cg(0, r, R, d); if (L < 0) return { fragDownloadSlow: n, fragDownloadTooSlow: s }; t = Math.max(L, r.findIndex(e=>e && e.mediaOptionId === S.mediaOptionId)); if (O) { let e = Pg(r, i.duration, L, t, A, R, P, x, 1, 1, a, d, b, p, h); const N = Ol.mediaOptionId; k = e.variantMediaOption !== N || (e = Pg(r, i.duration, L, t, I, R, P, x, 1, 1, a, d, b, p, h)).variantMediaOption !== N ? e.variantMediaOption : e.lowestCandidate } else { const _ = Cg(0, r.slice(L, t).reverse(), R, d) , i = t - 1 - _; (0 <= _ || t === L) && (k = r[i].mediaOptionId) } if (null != k && k !== d.abrStatus.nextMaxAutoOptionId && o.setNextMaxAutoOptionId(C, k), O) throw h.warn(`loading too slow, abort fragment loading and switch to level ${k}`), u.setBandwidthSample(Object.assign(Object.assign({}, e), { tfirst: e.tfirst || f, tload: e.tload || f, complete: !0, mediaOptionType: y })), s = !0, new du({ mediaOptionType: y, mediaOptionId: v },k,$.FragmentAbortError); return { fragDownloadSlow: n, fragDownloadTooSlow: s } }(e, t, i, r), { fragDownloadSlow: !1, fragDownloadTooSlow: !1 }), xa({ fragDownloadSlow: !1, fragDownloadTooSlow: !1 }), Es(Ng)) }(e)).pipe(xa({ fragDownloadSlow: !1, fragDownloadTooSlow: !1 }), na((e,t)=>({ fragDownloadSlow: e.fragDownloadSlow || t.fragDownloadSlow, fragDownloadTooSlow: e.fragDownloadTooSlow || t.fragDownloadTooSlow })), Es(Ng), ur(e=>(r.setFragLoadSlow(i.itemId, e), !1)), Un(e=>{ if (e instanceof du) { const e = { fragDownloadSlow: !0, fragDownloadTooSlow: !0 }; return r.setFragLoadSlow(i.itemId, e), Bi(!0) } return Ui(e) } )); var a, o }(r), e=>e), e).pipe(Cs(1), $s(()=>{ Ml.forEach(e=>{ d.updateInflightFrag(l.itemId, e, null, null, null) } ) } )) } ))), ur(()=>{ if (!l.getEntity(l.itemId).manualMode) { let e = ym.None; var i, r, n, s; i = bf(), r = u, n = o, s = null == r ? void 0 : r.clientWidth, a = null == r ? void 0 : r.clientHeight, r = "object" == typeof window && window.devicePixelRatio ? window.devicePixelRatio : 1, a = s && a ? { width: s * r, height: a * r } : void 0, r = (r = (null === (r = i.getQuery()) || void 0 === r ? void 0 : r.viewportInfo) || {}) && a && (r.width !== a.width || r.height !== a.height), n.useViewportSizeForLevelCap && r && (i.updateViewportInfo(a), 1) && (e = ym.PreferredListChanged); let t = !1; var a = l.enabledVariantMediaOption; !function(e, t) { const i = d.logger.child(wg) , r = e.abrStatus , n = r.fragDownloadSlow || r.fragDownloadTooSlow , s = ne(null === (t = t.seekTo) || void 0 === t ? void 0 : t.pos); return n && !r.fragDownloadTooSlow && s ? (i.warn("could be ignoring low bandwidth due to seek"), 0) : n }(l, u) ? function(e, t) { const i = Uf(t.itemId) , r = i.getBandwidthEstimate() , n = t.abrStatus; if (Og(r)) { var t = (null === (t = i.bandwidthStatus) || void 0 === t ? void 0 : t.bandwidthSampleCount) || 0 , t = xg(r.avgBandwidth, e.abrBandWidthUpFactor, e.abrBandWidthFactor, t)["bwUp"]; return t > n.highBWTrigger } }(o, l) && (e = ym.HighBandwidth, d.setNextMinAutoOptionId(a.itemId, a.mediaOptionId)) : (e = ym.LowBandwidth, l.nextMaxAutoOptionId === Ol.mediaOptionId && (d.setNextMaxAutoOptionId(a.itemId, a.mediaOptionId), t = !0)), $g(e, o, l, u, d), t ? d.setNextMaxAutoOptionId(a.itemId, Ol.mediaOptionId) : e === ym.HighBandwidth && d.setNextMinAutoOptionId(a.itemId, Ol.mediaOptionId) } } ), $s(()=>{} )) } const Zg = (r,n)=>e=>{ const {rootPlaylistQuery: t, mediaSink: a} = r , i = r.logger.child(Yg); return e.pipe(Hi(Zi), So(t.enabledMediaOptionKeys$), Ra(([s,e])=>bn(ey(s, ul.Variant, r, e).pipe(Ja(e=>{ var e = e.detailsEntity; if (!e.mediaOptionDetails.liveOrEvent || e.mediaOptionDetails.ptsKnown) { const t = e.playlistDuration , i = (null === (e = s.bufferInfoTuple[0]) || void 0 === e ? void 0 : e.buffered.end) || 0 , r = (null === (e = s.bufferInfoTuple[1]) || void 0 === e ? void 0 : e.buffered.end) || 0 , n = Math.max(i, r); a.msDuration = ne(a.msDuration) ? Math.max(a.msDuration, t, n) : t } } )), ey(s, ul.AltAudio, r, e)).pipe(ur(e=>({ action: s, detailsAndContext: e })))), Ra(({action: e, detailsAndContext: t})=>function t(i, r, n, s, l) { var e; const {mediaSink: u, iframeMachine: c, rootPlaylistQuery: a} = n , o = [l[ul.Variant].detailsEntity.mediaOptionDetails, null === (e = null === (e = l[ul.AltAudio]) || void 0 === e ? void 0 : e.detailsEntity) || void 0 === e ? void 0 : e.mediaOptionDetails]; let d = r.getNextFragments(s, o); const h = d.reduce((e,t)=>Math.max(e, ne(null == t ? void 0 : t.newMediaRootTime) ? t.newMediaRootTime : -1 / 0), -1 / 0); return ne(h) && (u.seekTo = h, d = [null, null]), d.every(e=>null == (null == e ? void 0 : e.foundFrag)) ? Bi(null) : bn(...d.map((e,d)=>e && null != e.foundFrag ? vg(n, d, e).pipe(Ja(e=>{ const t = e[1] , i = l[d].switchContext; t.switchPosition = null == i ? void 0 : i.switchPosition; const r = null !== (e = null == i ? void 0 : i.userInitiated) && void 0 !== e && e , n = u["mediaQuery"] , {desiredRate: s, isIframeRate: a} = n , o = a && c.isStarted && s && s < 0 && s !== c.iframeRate; (r || o) && (t.flushBeforeAppend = { start: 0, end: Number.POSITIVE_INFINITY }) } )) : Bi(null))).pipe(ur(e=>function(g, e, t, i) { const {rootPlaylistService: r, rootPlaylistQuery: n, mediaSink: s, mediaLibraryService: a, config: y} = e , v = s.mediaQuery , o = n.itemId , d = v.isIframeRate; let l = n.getInitPTS(t); if (null == l || !d && l.iframeMode !== d) { const c = null !== (e = null === (e = i[ul.Variant]) || void 0 === e ? void 0 : e[1].startDtsTs) && void 0 !== e ? e : null; if (null == c) return g.warn("updatePTSInfo: Variant data missing."), null; const n = null !== (e = null === (e = i[ul.Variant]) || void 0 === e ? void 0 : e[1].timelineOffset) && void 0 !== e ? e : 0 , s = B(n, c.timescale) , a = { baseTime: c.baseTime - s.baseTime, timescale: c.timescale }; r.setInitPTS(o, t, c, n, a, d), l = { variantDTS: c, timelineOffset: n, offsetTimestamp: a, iframeMode: d } } i.forEach(e=>{ e && !ne(e[1].iframeMediaDuration) && a.updatePTSDTS(o, e[1].mediaOptionId, l, e[1]) } ); const S = [null, null]; if (i[ul.Variant]) { const [g,c] = i[ul.Variant]; let e = l.offsetTimestamp; if (d) { const g = c.startDtsTs , i = B(c.timelineOffset, g.timescale); e = { baseTime: g.baseTime - i.baseTime, timescale: g.timescale } } S[cl.Variant] = { initSeg: g, dataSeg: c, offsetTimestamp: e } } if (i[ul.AltAudio]) { const [g,c] = i[ul.AltAudio]; S[cl.AltAudio] = { initSeg: g, dataSeg: c, offsetTimestamp: l.offsetTimestamp } } const u = S.map((e,t)=>{ const i = null == e ? void 0 : e.dataSeg; if (i) { const {itemId: r, mediaOptionId: n, mediaSeqNum: s, discoSeqNum: a, startPts: o, endPts: d, duration: l, iframe: u} = i , c = e["offsetTimestamp"] , h = b(o, c) , p = b(d, c) , f = pg(i) , m = S[0]; return m && m.dataSeg.dropped || i.flushBeforeAppend || !((null === (e = null === (e = v.getBufferInfo(h, y.maxBufferHole)[t]) || void 0 === e ? void 0 : e.buffered) || void 0 === e ? void 0 : e.len) >= p - h) ? { start: h, duration: u ? l : p - h, itemId: r, mediaOptionId: n, mediaSeqNum: s, discoSeqNum: a, targetDuration: f.mediaOptionDetails.targetduration } : (g.warn(`${Cl[t]} Discarding append due to complete overlap with existing buffer`), S[t] = null) } return null } ); return u.every(e=>!e) ? null : { appendDataTuple: S, inFlightFrags: u, initPTSInfo: l } }(i, n, r.discoSeqNum, e)), Ra(e=>{ if (e) return Bi(e); { const e = function(e, r) { const n = e.enabledMediaOptionKeys , s = [null, null] , a = [null, null]; return Ml.map(e=>{ var t; if (kl(n[e])) { const i = pg(n[e]).mediaOptionDetailsEntity; a[e] = null === (t = i.mediaOptionDetails) || void 0 === t ? void 0 : t.ptsKnown, s[e] = { detailsEntity: i, switchContext: null === (e = r[e]) || void 0 === e ? void 0 : e.switchContext } } } ), s }(a, l); return t(i, r, n, s, e) } } )) }(i, n, r, e, t)), Ql.tag("mediaProducerEpic.emit")) } ; function ey(e, i, t, r) { const {rootPlaylistQuery: n, mediaLibraryService: s} = t , a = r[i]; if (t.logger.child({ name: Cl[i] }), !a || "Nah" === a.mediaOptionId) return Bi({ detailsEntity: null, switchContext: null }); const o = s.getQueryForOption(a); return Cr([Bi(e), o.mediaOptionDetailsEntity$.pipe(Es((e,t)=>(null == e ? void 0 : e.lastUpdateMillis) === (null == t ? void 0 : t.lastUpdateMillis)))]).pipe(an(([,e])=>{ if (i === ul.AltAudio && !n.altMediaOptionHasValidUrl(i, a.mediaOptionId)) return !0; var t = null == e ? void 0 : e.mediaOptionDetails; return null != t && (e = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, !t.liveOrEvent || !t.ptsKnown || !_g(null == t ? void 0 : t.totalduration, 0, e)) } ), Cs(1), So(n.enabledMediaOptionSwitchContextsByType$(i)), ur(([[,e],t])=>({ detailsEntity: e, switchContext: t }))) } const ty = t=>e=>{ const {rootPlaylistQuery: g, rootPlaylistService: y, mediaSink: v, legibleSystemAdapter: o, statsService: d, rtcService: l} = t; return e.pipe(Ql.tag("mediaConsumerEpic.in"), Ra(e=>{ if (!e) return Bi(!1); const {appendDataTuple: r, inFlightFrags: m, initPTSInfo: t} = e , i = t["offsetTimestamp"]; return m.forEach((e,t)=>{ e && y.updateInflightFrag(e.itemId, t, e, "appending", null) } ), r.forEach(e=>{ e && (e = e.dataSeg, o.addLegibleSamples(i, e.captionData, e.id3Samples, e.endPts)) } ), v.appendData(r, (e,t,i,r,n)=>{ var s, a, o, d, l, u, c, h, p, f = null !== (f = m[t].targetDuration) && void 0 !== f ? f : 10; return s = v, a = e, o = t, d = i, l = f, u = r, c = g, h = y, p = n, e=>e.pipe(Ja(()=>{ h.updateConsecutiveTimeouts(c.itemId, o, !1, "append") } ), ya(e=>e.pipe(Kr((e,t)=>{ var i = e instanceof rf && e.isTimeout; if (h.updateConsecutiveTimeouts(c.itemId, o, i, "append"), i) return function(e, t, i, r, n, s, a, o) { let d = { errorAction: mm.SendAlternateToPenaltyBox, errorActionFlags: 0 }; var l = s.getCurrentWaterLevel(i.maxBufferHole) , u = l < i.almostDryBufferSec; let c = NaN; s = i.appendErrorMaxRetry, i = a.rootPlaylistEntity.errorsByType[r].timeouts.append; u && s <= i || s <= t ? d.errorAction = mm.SendEndCallback : c = 1e3 * l; s = { retryDelayMs: c, maxNumRetry: s, maxRetryDelayMs: c }; return d = Lm(d, !1, e.response.code, n, r, a, o), Um(e, t, s, d, a, o, r, n).pipe() }(e, t, u, o, d, p, c, h); if (e instanceof nf) return function(e, t, i, r, n, s, a, o, d, l) { var u = t.type , u = o.getCurrentWaterLevelByType(u, n.maxBufferHole); if (u >= n.almostDryBufferSec) { const t = 1e3 * r , n = { errorAction: mm.RetryRequest, errorActionFlags: 0 }; return 1e3 * u < t && (l.hasFallbackMediaOptionTuple(d, s, a, !1) ? n.errorAction = mm.SendAlternateToPenaltyBox : n.errorAction = mm.SendEndCallback), Um(e, i, { retryDelayMs: t, maxNumRetry: 1 / 0, maxRetryDelayMs: t }, n, d, l, s, a) } return i < n.appendErrorMaxRetry ? t.remove(0, Number.POSITIVE_INFINITY) : (e.fatal = !0, Ui(e)) }(e, a, t, l, u, o, d, p, c, h); if (e instanceof af) { const {mediaOptionType: a, mediaOptionId: o} = e; return qg(e, a, o, s, h, c) } throw e } )))) } , g.highestVideoCodec).pipe(ur(e=>{ m.forEach((e,t)=>{ e && y.updateInflightFrag(e.itemId, t, e, "appended", null) } ); var t = e.filter(e=>(null == e ? void 0 : e.fragmentType) === ul.Variant); t.length && (d.setBufferMetric(t[0]), null == l || l.handleFragBuffered(t[0])); e = r[cl.AltAudio]; if (null !== (t = null == e ? void 0 : e.dataSeg) && void 0 !== t && t.flushBeforeAppend || ne(null === (t = null == e ? void 0 : e.dataSeg) || void 0 === t ? void 0 : t.switchPosition)) { const {itemId: i, mediaOptionId: r} = e.dataSeg; y.setEnabledMediaOptionSwitchContextByType(i, ul.AltAudio, r, void 0) } return !0 } ), (n = v, s = y, a = g, e=>e.pipe(Un(e=>{ if (e instanceof tf) { var {mediaOptionType: t, mediaOptionId: i} = e; return qg(e, t, i, n, s, a) } throw e } )))); var n, s, a } )) } ; function iy(e) { const {logger: r, rootPlaylistService: n, rootPlaylistQuery: t} = e , s = t.itemId; return e=>e.pipe(ya(e=>e.pipe(Kr(e=>{ if (r.error(`Got error in pipeline ${e.message} fatal:${null == e ? void 0 : e.fatal} handled:${null == e ? void 0 : e.handled}`), !(e instanceof p) || e.fatal) throw e; return e.handled ? (t = n, i = s, vn(0).pipe(ur(()=>{ t.updateEnabledMediaOptions(i) } ))) : Ti; var t, i } )))) } const ry = ()=>e=>e.pipe(Ql.tag("mediaFragmentPipelineEpic.in"), Ra(i=>{ if (!i) return Ti; const {logger: e, config: t, platformService: r, rootPlaylistService: n, rootPlaylistQuery: s, keySystemAdapter: a, mediaSink: o, mediaParser: d, gaplessInstance: l, mediaLibraryService: u} = i , c = s["itemId"] , h = o["mediaQuery"] , p = a.keyStatusChange$.pipe((f = i, e=>e.pipe(Ra(e=>{ const {decryptdata: t, status: i, error: r} = e , n = f["rootPlaylistQuery"]; if ("needs-renewal" === i) return Sg(f, t, null); if ("error" !== i || !(r instanceof uu || r instanceof lu) || r.handled) return Ti; { const {rootPlaylistService: e, keySystemAdapter: t} = f; return Hm(r, 0, null, e, n, t.ksQuery) } } ), Ra(()=>Ti)))); var f; const m = r.getQuery() , g = m.displaySupportsHdr$.pipe(Es(), Ra(e=>(n.setHDRPreference(c, e, !0), Ti))) , y = m.viewportInfo$.pipe(Es((e,t)=>e && t && e.width === t.width && e.height === t.height), Ja(e=>{ t.useViewportSizeForLevelCap && n.setViewportInfo(c, e) } ), Ua(Ti)) , v = Zd([s.hdrMode$.pipe(Es()), s.maxHdcpLevel$.pipe(Es())]).pipe(Ra(([])=>(l.inGaplessMode || 0 !== s.itemStartOffset || (o.resetMediaSource(), d.reset()), Ti))) , S = nn(function(i) { const {rootPlaylistQuery: t, mediaSink: r} = i , e = t.enabledMediaOptions$.pipe(Up(), Ja(e=>{ e = e[ul.AltAudio], e = kl(e) && null != (null == e ? void 0 : e.url) ? 2 : 1; r.setExpectedSbCount(e) } )) , n = t.enabledMediaOptionByType$(ul.Variant).pipe(an(e=>kl(e)), Ra(e=>pg(e).mediaOptionDetails$), Cs(1), Ja(e=>{ r.bufferMonitorTargetDuration = e.targetduration } )) , s = Dl.map(e=>t.enabledMediaOptionByType$(e).pipe(Ql.tag("mediaOptionRetrieve.switch"), Ra(t=>{ if (!t || !t.url || !kl(t)) return Ti; var e = r.mediaQuery.desiredRate$.pipe(ur(e=>0 !== e), Es()); return fg(i, t).pipe(Ql.tag("mediaOptionRetrieve.first"), Ua(e), Ra(e=>e ? function e(t, i) { const r = t.mediaLibraryService; return function(e) { if (!e) return Ti; var {mediaOptionDetails: t, lastUpdateMillis: i, unchangedCount: e} = e; if (null == t || !t.liveOrEvent) return Ti; if (sg(t, i)) return vn(0).pipe(Ja(()=>{} )); let r = ng(t); return 0 < e && (r /= 2, r = Math.max(r, 5e3)), r -= performance.now() - i, r += 0, r = Math.max(1e3, Math.round(r)), vn(r).pipe(Ja(()=>{} )) }(r.getQueryForOption(i).mediaOptionDetailsEntity).pipe(Ra(()=>fg(t, i, !0)), Ra(()=>e(t, i))) }(i, t) : Ti)) } ))); return nn(e, n, nn(...s)).pipe(Ua(Ti)) }(i), Jg(i), function(t) { const {rootPlaylistQuery: i, mediaSink: e} = t; return $l(e.mediaQuery.mediaElementEntity$, e=>!!e).pipe(Ra(e=>i.anchorTime$.pipe(Up(), Ql.tag("anchorTime.subtitle.in"), (s=>e=>{ const {rootPlaylistQuery: i, rootPlaylistService: t, legibleSystemAdapter: r} = s , n = i.enabledAlternateMediaOptionByType(ul.Subtitle); if (r.gotTracks) r.selectedTrack = n; else { const s = i.preferredMediaOptions[ul.Subtitle]; r.setTracks(s, n, i.getDisabledMediaOption(ul.Subtitle)) } return e.pipe(Ql.tag("subtitleEpic.select.in"), Ra(()=>(r.anchorTimeChanged(), nn(r.nativeSubtitleTrackChange$.pipe(Ra(e=>(e.mediaOptionId !== r.selectedMediaOption.mediaOptionId && t.setEnabledMediaOptionByType(e.itemId, ul.Subtitle, e), Ti))), i.enabledMediaOptionByType$(ul.Subtitle).pipe(ur(e=>{ const t = kl(e) ? i.alternateMediaOptionById(ul.Subtitle, e.mediaOptionId) : e; return r.selectedMediaOption = t, t } )).pipe(Es((e,t)=>(null == e ? void 0 : e.mediaOptionId) === (null == t ? void 0 : t.mediaOptionId)))))), Ql.tag("subtitleEpic.select.emit")) } )(t), (s=>e=>{ const {mediaSink: t, rootPlaylistQuery: i, legibleSystemAdapter: r, logger: n} = s; return e.pipe(Ql.tag("subtitleEpic.process.in"), Ra(e=>{ if (!e || !e.url || !kl(e)) return Bi([null, null, null]); return Zd([pg(e).mediaOptionDetails$, i.discoSeqNum$.pipe(an(e=>ne(e)))]).pipe(Ra(([e,t])=>((i,r,e)=>{ const {legibleSystemAdapter: n, rootPlaylistQuery: t} = i; return t.initPTS$(e).pipe(Ra(t=>t ? n.findFrags$(r, e).pipe(Ra(e=>r && (null == e ? void 0 : e.foundFrags) ? ny(i, t.offsetTimestamp, e, r) : Ul)) : sn)) } )(s, e, t))) } ), Ql.tag("subtitleEpic.process.emit")) } )(t)))) }(i), p).pipe(Js(void 0), iy(i)) , b = h.seekTo$.pipe(ur(e=>null == e ? void 0 : e.pos), an(e=>ne(e)), Es((e,t)=>Math.abs(e - t) < Number.EPSILON), Ra(e=>(n.setAnchorTime(c, e), Ti))) , T = h.gotPlaying$.pipe(an(e=>e), Ja(e=>{ s.mediaOptionListQueries[ul.Variant].filteredMediaOptionList.forEach(e=>{} ) } ), Cs(1), Ua(Ti)); return nn(s.pendingSeek$.pipe(Wg(t, e, o, n, s, u)), function() { const {config: s, mediaSink: a, rootPlaylistQuery: e, mediaLibraryService: t} = i , o = i.logger.child({ name: "live" }) , d = a.mediaQuery; return e.enabledMediaOptionByType$(ul.Variant).pipe(an(kl), Ra(e=>t.getQueryForOption(e).mediaOptionDetailsEntity$.pipe(an(e=>{ var t; return (null === (t = null == e ? void 0 : e.mediaOptionDetails) || void 0 === t ? void 0 : t.ptsKnown) && e.mediaOptionDetails.liveOrEvent } ), Es((e,t)=>(null == e ? void 0 : e.lastUpdateMillis) === (null == t ? void 0 : t.lastUpdateMillis)))), ur(e=>{ var t = e.mediaOptionDetails , i = d.currentTime , r = d.msDuration; let n = NaN; return i < rg(i, t, e.lastUpdateMillis, s.maxBufferHole, d) && (n = ig(t.fragments[0].start, t, s), n >= r && (o.warn(`seekTo position > duration, updating ${a.msDuration}->${e.playlistDuration}`), a.msDuration = e.playlistDuration), a.seekTo = n), n } )) }(), b, S, g, y, v, function() { const e = i.mediaSink.mediaQuery; return Cr([Bi(i), e.desiredRate$.pipe(ca())]).pipe(Ra(([e,[t,i]])=>{ const {rootPlaylistQuery: s, rootPlaylistService: r, config: a, mediaSink: n, mediaLibraryService: o, statsService: d} = e , l = n.mediaQuery; if (jp(t) !== jp(i)) $g(ym.IframeModeChange, a, s, l, r); else if (0 === t && 1 === i && !Ml.every(e=>{ const t = s.enabledMediaOptionKeys[e] , i = o.getQueryForOption(t) , r = d.getQueryForItem(s.itemId) , n = i.mediaOptionDetailsEntity; return !(null !== (e = null == n ? void 0 : n.mediaOptionDetails) && void 0 !== e && e.ptsKnown) || l.canContinuePlaybackWithoutGap(n.mediaOptionDetails, n.lastUpdateMillis, r.getPlaylistEstimate(), a.maxBufferHole) } )) return n.pause(), n.flushAll(0, 1 / 0, !0); return Ti } ), Ua(Ti)) }(), function(e) { const s = e.rootPlaylistQuery , t = e.mediaSink.mediaQuery , i = s.enabledMediaOptionByType$(ul.Variant); return Cr([Bi(e), t.desiredRate$.pipe(ca()), i]).pipe(Es((e,t)=>e[1] === t[1]), Ra(([e,[t,i],r])=>{ t = jp(t), i = jp(i); if (t === i) return Ti; const n = e["rootPlaylistService"]; return i ? e.rootPlaylistQuery.nextMaxAutoOptionId === Ol.mediaOptionId && n.setNextMaxAutoOptionId(e.rootPlaylistQuery.itemId, r.mediaOptionId) : n.setNextMaxAutoOptionId(s.itemId, Ol.mediaOptionId), Ti } )) }(i), T).pipe(Ql.tag("mediaFragmentPiplineEpic.emit"), Js(void 0)) } )) , ny = (i,r,t,n)=>{ const s = i.legibleSystemAdapter; return Lr(t.foundFrags).pipe(ur(e=>{ return ((e,t,i)=>{ const {rootPlaylistQuery: r, legibleSystemAdapter: n} = e; return Yr(()=>((t,i)=>yg(e, i, !1, !1).pipe(ur(e=>({ initPTS: t, data: e, mediaFragment: i })), Ql.tag("retrieveSubtitleFragmentCacheEntity.emit")))(t, i).pipe(ur(({initPTS: e, data: t, mediaFragment: i})=>({ frag: i, cueRange: function(e, t, i, r, n) { if (e) return n.processSubtitleFrag(e, t, i, r) }(r.enabledAlternateMediaOptionByType(ul.Subtitle), i, e, t, n) })))) } )(i, r, e).pipe((t = e=>s.checkReadyToLoadNextSubtitleFragment$().pipe(an(e=>e)), function(e) { return e.lift(new ms(t)) } )); var t } ), Wr(i.config.vttConcurrentLoadCount), Ja(e=>{ s.reviewParsedFrag(e, t, n) !== Ap.CloseEnough && i.legibleSystemAdapter.tryAgain$.next(!0) } )) } , sy = (e,t)=>{ let i, r = ""; return i = e.videoCodec && e.audioCodec ? (r = `${e.videoCodec}, ${e.audioCodec}`, t = null != t ? t : "video/mp4", "audiovideo") : e.videoCodec ? (r = `${e.videoCodec}`, t = null != t ? t : "video/mp4", "video") : (r = `${null !== (e = e.audioCodec) && void 0 !== e ? e : ""}`, t = null != t ? t : "audio/mp4", "audio"), { mimeType: `${t};codecs=${r}`, codec: r, container: t, type: i } } ; class ay { constructor(e, t, i) { this.config = e, this.logger = t, this.demuxClient = i, this.typeSupported = { mp4: MediaSource.isTypeSupported("video/mp4"), mpeg: MediaSource.isTypeSupported("audio/mpeg"), mp3: MediaSource.isTypeSupported('audio/mp4; codecs="mp3"'), ac3: MediaSource.isTypeSupported('audio/mp4; codecs="ac-3"'), ec3: MediaSource.isTypeSupported('audio/mp4; codecs="ec-3"') }, this.demuxers = [], this.lastInitFrags = [], this.lastFrags = [] } parseInitSegment(h, e) { return this.getDemuxerInfo(h, this.lastInitFrags, e, this.demuxClient).pipe(Ra(({demuxer: e, contiguous: t, trackSwitch: i, discontinuity: r, accurateTimeOffset: n})=>{ const s = h["frag"] , {keyTagInfo: a, start: o, mediaOptionType: d} = s; if (this.lastInitFrags[d] = s, h.initSegment) { const e = We.remuxInitSegment(new Uint8Array(h.initSegment), this.logger, a) , t = Je.parseInitSegment(e) , {mimeType: i, type: r, codec: n, container: s} = sy(t); return Bi({ moovData: t, mimeType: i, track: { type: r, codec: n, initSegment: e, container: s } }) } const l = h.segment || h.initSegment , u = l ? h.initSegment : void 0 , c = wc(e.observer); return Bi(c.event(v.FRAG_PARSING_INIT_SEGMENT).pipe(ur(this.handleInitSegmentData)), c.event(x.INTERNAL_ERROR).pipe(Ra(this.handleError)), e.pushWithoutTransfer(l, a, u, o, r, i, t, h.totalDuration, n, void 0, h.iframeMediaStart, h.iframeDuration).pipe(Ua(Ti))).pipe(Wr(), Cs(1)) } )) } parseSegment(y, e) { return this.getDemuxerInfo(y, this.lastFrags, e, this.demuxClient).pipe(Ra(({demuxer: e, contiguous: t, trackSwitch: i, discontinuity: r, accurateTimeOffset: n})=>{ const {frag: h, defaultInitPTS: p} = y , {keyTagInfo: s, start: a, duration: f, mediaOptionType: m} = h; let g; this.lastFrags[m] = h; const o = wc(e.observer); return Bi(o.event(v.FRAG_PARSING_INIT_SEGMENT).pipe(Ra(e=>{ var t; return e.track.initSegment.byteLength !== (null === (t = y.initSegment) || void 0 === t ? void 0 : t.byteLength) && (g = this.handleInitSegmentData(e)), Ti } )), o.event(v.FRAG_PARSING_DATA).pipe(ur(e=>{ var {startPTS: t, startDTS: i, firstKeyframePts: r, framesWithoutIDR: n, dropped: s, data1: a, data2: o, captionData: d, id3Samples: l} = e; let {endPTS: u, endDTS: c} = e; return null == u && (this.logger.warn(`${Cl[m]} ${Bp(h)}: null endPTS parsed, using duration ${f}`), u = Object.assign(Object.assign({}, t), { baseTime: t.baseTime + B(f, t.timescale).baseTime })), null == c && (this.logger.warn(`${Cl[m]} ${Bp(h)}: null endDTS parsed, using duration ${f}`), c = Object.assign(Object.assign({}, i), { baseTime: i.baseTime + B(f, i.timescale).baseTime })), ne(y.iframeMediaStart) || function(e, t, i, r) { let n = NaN , s = NaN; if (ne(i)) s = i, n = .01, isFinite(s) && isFinite(r) && (s += r); else { { const o = void 0 } } var {startPTS: a, startDTS: i, endPTS: r, endDTS: t} = t; if (!(0 <= a.baseTime && 0 <= i.baseTime && 0 < e.duration && (null == r || 0 < b(r, a)) && (null == t || 0 < b(t, i)) && (!ne(n) || !ne(s) || Math.abs(S(i) - s) <= n))) throw new D(!1,`Failed demuxer sanity check frag=${Bp(e)} parsed=${JSON.stringify({ startPTS: a, endPTS: r, startDTS: i, endDTS: t })} ${se({ expectedStartDTS: s, fudge: n })}`,$.FailedDemuxerSanityCheck) }(h, e, (p, y.iframeMediaStart), this.config.audioPrimingDelay), { startPTS: t, endPTS: u, startDTS: i, endDTS: c, firstKeyframePts: r, framesWithoutIDR: n, dropped: s, data1: a, data2: o, captionData: d, id3Samples: l, parsedInitSegment: g } } )), o.event(x.INTERNAL_ERROR).pipe(Ra(this.handleError)), e.push(y.segment, s, y.initSegment, a, r, i, t, y.totalDuration, n, p, y.iframeMediaStart, y.iframeDuration).pipe(Ua(Ti))).pipe(Wr(), Cs(1)) } )) } reset(e) { if (null == e) return this.demuxers.forEach(e=>{ e && e.destroy() } ), void (this.demuxers = []); const t = this.demuxers[e]; null == t || t.destroy(), this.demuxers[e] = null } destroy(e) { null != e ? this.reset(e) : this.reset() } willBeTrackSwitch(e, t) { var {mediaOptionType: i, mediaOptionId: e} = e , i = (t || this.lastFrags)[i]; return !(i && i.mediaOptionId === e) } getDemuxerInfo(e, r, t, i) { const {frag: n, ptsKnown: s, seeking: a, live: o} = e , {discoSeqNum: d, mediaSeqNum: l, mediaOptionType: u} = n; return Yr(()=>{ var e = this.demuxers[u]; return e ? Bi(e) : i.init(this.typeSupported, this.config, t).pipe(Ja(e=>this.demuxers[u] = e)) } ).pipe(ur(e=>{ var t = r[u] , i = this.willBeTrackSwitch(n, r); return { demuxer: e, trackSwitch: i, discontinuity: !(t && d === t.discoSeqNum), contiguous: !!t && !i && t.mediaSeqNum + 1 === l, accurateTimeOffset: !a && (s || !o) } } )) } handleInitSegmentData(e) { var t = e["track"] , i = t["initSegment"] , r = Je.parseInitSegment(i) , {mimeType: n, type: s, codec: a, container: e} = sy(r, t.container); return { moovData: r, mimeType: n, track: Object.assign(Object.assign({}, t), { type: s, codec: a, initSegment: i, container: e }) } } handleError(e) { return Ui(e) } } function oy(e) { return Math.min(e.targetduration, 15) } function dy(e, t, i, r) { if (200 === t && r && 10 < r.length) { if (Sm.isValidPlaylist(r)) return !0; { const t = new R(o,_,!0,"response doesnt have #EXTM3U tag",$.PlaylistErrorMissingEXTM3U); throw t.url = e, t } } return !1 } const ly = { name: "pltfrm" }; function uy(e, t) { t = Ih.getKeySystemSecurityLevel(t); return null != e && void 0 !== t[e] } function cy(e) { return e.every(e=>e.iframes) } function hy(e, t) { return !ne(e) || !ne(t) || e <= t } function py() { const n = new Set , s = new Set; return e=>{ const i = (e,t)=>{ t = t ? "audio" : "video"; n.has(e) || s.has(e) || (((e,t)=>{ let i = MediaSource.isTypeSupported(`${e}/mp4;codecs=${t}`); return "mp4a.40.34" !== t || i || (i = MediaSource.isTypeSupported(`${e}/mpeg`)), i } )(t, e) ? n : s).add(e) } , t = (e,t)=>(i(e, t), s.has(e)); let r = !1; return e.audioCodecList && (r = e.audioCodecList.some(e=>t(e, !0))), !r && e.videoCodecList && (r = e.videoCodecList.some(e=>t(e, !1))), !r } } function fy(e, t) { for (const i in e) if (e[i].type === t) return e[i]; return {} } function my(e, t, i) { t.filter(e=>!i.includes(e)).map(e=>e.mediaOptionId) } function gy(e, i, s) { const a = new Map , r = new Array; return e.forEach(t=>{ var e = Array(); !function(e, t, i) { var r = qc.getCapabilities(t.videoCodecList, t.audioCodecList) , t = JSON.stringify(r); let n; a.has(t) ? n = a.get(t) : (n = Ih.requestKeySystemAccess(e, r, void 0, s).pipe(ur(()=>!0), Un(e=>(s.warn(`Request key system error: ${e.message}`), Bi(!1))), Aa({ bufferSize: 1, refCount: !0 })), a.set(t, n)), i.push(n) }(i, t, e); e = Jr(e).pipe(ur(e=>{ if (void 0 === e.find(e=>!1 === e)) return t } )); r.push(e) } ), Jr(r).pipe(ur(e=>e.filter(e=>Boolean(e)))) } function yy(e, r) { const o = new Set , d = new Set , l = !MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.2"; channels="-1"') , u = l && !MediaSource.isTypeSupported('audio/mp4; codecs="mp4a.40.2"; channels="2"; features="INVALID"') , t = e.filter(e=>{ let t = !1; var i; return e.audioCodecList && e.audioGroupId && (i = tm.getRichestChannelLayoutForGroupId(e.audioGroupId, r), 0 < e.audioCodecList.length && i && (t = ((e,t)=>{ var i, r, n, s = Se.isDolbyAtmos(e, t); if (u || l && !s) { n = `${i = e}/${r = t}`, o.has(n) || d.has(n) || (((e,t)=>{ const i = t.split("/") , r = parseInt(i[0]); let n, s; if (1 < i.length) { const t = i[1].split(",")[0]; n = `audio/mp4;codecs="${e}";channels="${r}";features="${t}"`, s = `audio/mp4;codecs="${e}";channels="8";features="${t}"` } else n = `audio/mp4;codecs="${e}";channels="${r}"`; let a = MediaSource.isTypeSupported(n); return !a && s && (a = MediaSource.isTypeSupported(s)), a } )(i, r) ? o : d).add(n); const a = `${e}/${t}`; return d.has(a) } return !!s } )(tm.getRichestAudioCodec(e.audioCodecList), i))), !t } ); return my(0, e, t), t } function vy(e, t, d) { const n = 0 < (null == t ? void 0 : t.length) , i = e.filter(o=>{ var e = function() { if (!d) return { highestPlayableAverageBitRate: void 0, highestPlayablePeakBitRate: void 0, highestPlayableWidth: void 0, highestPlayableHeight: void 0, highestPlayableFrameRate: void 0 }; const e = o.videoCodec , t = o.videoRange , i = d.videoDynamicRangeFormats , r = d.videoCodecs , n = Se.getDynamicRangeType(t, e) , s = Se.getCompressionType(e) , a = function(e, t, i, r) { if (!r && !i) return {}; var n, s, t = i ? fy(i, t) : {}, r = r ? fy(r, e) : {}; let a, o; return o = e === pe.SDR ? (a = t, r) : (a = r, t), n = Object.assign({}, a), s = o, Object.keys(s).forEach(e=>{ n[e] || (n[e] = s[e]) } ), n }(n, s, r, i); return s !== fe.VP09 && (a.highestPlayablePeakBitRateForClearContent = void 0), a }() , t = e["highestPlayablePeakBitRateForClearContent"] , i = o.allowedCPCMap || n , r = hy(o.bandwidth, e.highestPlayablePeakBitRate); return (i || !t ? r : r || hy(o.bandwidth, t)) && hy(o.avgBandwidth, e.highestPlayableAverageBitRate) && hy(o.width, e.highestPlayableWidth) && hy(o.height, e.highestPlayableHeight) && hy(o.frameRate, e.highestPlayableFrameRate) } ); return my(0, e, i), i } function Sy(e, a, o, d, l, u) { var r = (null == d ? void 0 : d.maxHdcpLevel) || void 0; let c = [...e]; (0 < l.disableVideoCodecList.size || 0 < l.disableAudioCodecList.size) && (c = function(e, t, i) { let r = e.filter(e=>!e.videoCodec || e.videoCodecList.every(e=>{ e = $p(e); return !t.has(e) } )); return r = r.filter(e=>!(!e.iframes && e.audioCodec) || e.audioCodecList.every(e=>{ e = Kp(e); return !i.has(e) } )), my(0, e, r), r }(c, l.disableVideoCodecList, l.disableAudioCodecList)), r && Xf(r) && (c = function(e) { const t = Yf(r) , i = e.filter(e=>{ e = e.hdcpLevel; return !e || Yf(e) <= t } ); return my(0, e, i), i }(c)); var t = null == d ? void 0 : d.maxSecurityLevel , e = null == l ? void 0 : l.keySystemPreference; t && e && uy(t, e) && (c = function(e, t, i) { function r(e) { return uy(e, i) ? n[e] : -1 } const n = Ih.getKeySystemSecurityLevel(i) , s = Ih.getKeySystemFormat(i) , a = r(t) , o = e.filter(e=>{ e = null !== (e = null === (e = e.allowedCPCMap) || void 0 === e ? void 0 : e[s]) && void 0 !== e ? e : []; let t = !0; for (const i of e) if (t = r(i) <= a, !t) break; return t } ); return my(0, e, o), [...o] }(c, t, e)), c = c.map(t=>{ var e; return t.audioCodecList && t.audioGroupId && ((e = null == (e = a.find(e=>e.groupId === t.audioGroupId)) ? void 0 : e.channels) && (t.audioChannelCount = parseInt(e))), t } ); const h = !(null == l || !l.useMediaKeySystemAccessFilter) && e && navigator && "function" == typeof navigator.requestMediaKeySystemAccess; return (h ? gy(c, e, u) : Bi(c)).pipe(Ra(e=>{ if (0 === e.length || cy(e)) throw new R(L,f,void 0,"no media option with compatible codecs found in playlist",void 0); h && my(0, c, e); const t = navigator && navigator.mediaCapabilities , n = !(null == l || !l.useMediaCapabilities) && t && "function" == typeof t.decodingInfo; let i; return i = n ? function(e, n, s) { const a = [] , o = py() , d = function(o) { const d = new Map , l = navigator && navigator.mediaCapabilities; return (i,e,t,n,r)=>{ const s = { type: "media-source" }; n ? s.video = function(e) { const t = { contentType: `video/mp4;codecs=${e}`, width: i.width, height: i.height, bitrate: i.bandwidth || i.avgBandwidth, framerate: i.iframes ? 8 : i.frameRate }; if (i.videoRange) switch (i.videoRange) { case "PQ": Se.isDolby(e) ? (t.hdrMetadataType = vm.DoVi, t.colorGamut = "rec2020") : (Se.isHEVC(e) || Se.isVP09(e)) && (t.hdrMetadataType = vm.HDR10, t.colorGamut = "rec2020"), t.transferFunction = "pq"; break; case "HLG": t.colorGamut = "rec2020", t.transferFunction = "hlg" } return t }(t) : s.audio = function(e, t, i) { const r = { contentType: `audio/mp4;codecs=${e}` } , n = tm.getRichestChannelLayoutForGroupId(t.audioGroupId, i); return n && (r.channels = Se.getChannelCount(n).toString(), r.spatialRendering = Se.isDolbyAtmos(e, n)), r }(t, i, e); e = JSON.stringify(s); let a; return d.has(e) ? a = d.get(e) : (a = Lr(l.decodingInfo(s)).pipe(ur(e=>{ const t = e.configuration || e.supportedConfiguration , i = t instanceof Object && (!s.video || null == Object.keys(s.video).find(e=>!(e in t.video))) && (!s.audio || null == Object.keys(s.audio).find(e=>!(e in t.audio))) , r = e.supported && (!n || e.powerEfficient) && i; return r || o.warn(ly, `Unsupported config ${e.supported}/${e.powerEfficient}/${i} ${JSON.stringify(s)} supportedConfig=${JSON.stringify(t)}`), r } )), d.set(e, a)), [...r, a] } }(s); return e.forEach(t=>{ var e; let i = []; if (null === (e = t.videoCodecList) || void 0 === e || e.forEach(e=>{ i = d(t, n, e, !0, i) } ), 0 < (null === (e = t.audioCodecList) || void 0 === e ? void 0 : e.length)) { const s = tm.getRichestAudioCodec(t.audioCodecList); i = d(t, n, s, !1, i) } let r = Bi(t); 0 < i.length && (r = Jr(i).pipe(ur(e=>null == e.find(e=>!1 === e) ? t : null), Un(e=>(s.warn(ly, `decodingInfo errror: ${e.message}`), Bi(o(t) ? t : null))))), a.push(r) } ), Jr(a).pipe(ur(e=>e.filter(e=>Boolean(e)))) }(e, a, u) : Bi(e = yy((r = e, s = py(), s = r.filter(s), my(0, r, s), e = s), a)), i.pipe(ur(e=>{ if (0 === e.length || cy(e)) throw new R(L,f,void 0,"no media option with compatible codecs found in manifest",void 0); if (0 === (t = e = vy(e, o, d), r = t.filter(e=>!e.iframes || !e.width || !e.height || e.width * e.height <= 2488320), my(0, t, r), (e = r).length) || cy(e)) throw new R(L,f,void 0,"no media option with compatible codecs found in manifest",void 0); var t; let i = (null == d ? void 0 : d.videoDynamicRangeFormats) || []; n && 0 === i.length && (i = [{ type: pe.SDR }, { type: pe.HDR }, { type: pe.HDR10 }, { type: pe.DolbyVision }, { type: pe.HLG }]); var {hdrMediaOptions: r, sdrMediaOptions: e} = function(e, t) { const i = t.reduce((e,t)=>{ switch (t.type) { case pe.DolbyVision: e.doViSupported = !0; break; case pe.HDR10: e.hdr10Supported = !0; break; case pe.HLG: e.hlgSupported = !0 } return e } , { doViSupported: !1, hdr10Supported: !1, hlgSupported: !1 }) , {doViSupported: r, hdr10Supported: n, hlgSupported: s} = i; return e.reduce((e,t)=>{ var i; switch (Se.getDynamicRangeType(t.videoRange, null !== (i = t.videoCodec) && void 0 !== i ? i : "")) { case pe.HDR: case pe.HDR10: n && e.hdrMediaOptions.push(t); break; case pe.DolbyVision: r && e.hdrMediaOptions.push(t); break; case pe.HLG: s && e.hdrMediaOptions.push(t); break; default: "SDR" !== t.videoRange && null != t.videoRange || e.sdrMediaOptions.push(t) } return e } , { hdrMediaOptions: new Array, sdrMediaOptions: new Array }) }(e, i); if (0 === r.length && 0 === e.length || cy(r) && cy(e)) throw new R(L,"manifestIncompatibleVideoRangeError",void 0,"mediaOption with compatible VIDEO-RANGE not found in manifest",void 0); return { hdrMediaOptions: r, sdrMediaOptions: e } } ), Un(e=>{ throw e instanceof R && (e.fatal = !0, e.response = $.IncompatibleAsset), e } )); var r, s } )) } function by(e, t) { return t.mediaOptionId !== e.mediaOptionId && t.persistentID === e.persistentID && t.groupId !== e.groupId } (w = vm = vm || {}).HDR10 = "smpteSt2086", w.DoVi = "smpteSt2094-10", w.HDR10Plus = "smpteSt2094-40"; class Ty extends km { constructor(e, t, i) { super(e, t, i) } static makeFilters() { return Om() } _initFilters() { return Ty.kAllowFilters } get _mediaOptionType() { return this.mediaOptionType } get preferredHost() { return null } get preferredHost$() { return Bi(null) } get mediaOptionListInfo() { var e; return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.mediaOptionListTuple[this._mediaOptionType]) && void 0 !== e ? e : null } get mediaOptionListInfo$() { return this.selectEntity(this.itemId, e=>e && e.mediaOptionListTuple ? e.mediaOptionListTuple[this._mediaOptionType] : null).pipe(Up()) } getFallbackVariant(t, e, i, r) { var n; const s = null === (n = this.mediaOptionList) || void 0 === n ? void 0 : n.find(e=>e.mediaOptionId === t); if (!s) return null; const a = this.filteredMediaOptionList; if (!a) return null; const o = gl(s.url); if (i) return null !== (i = a.find(e=>by(s, e) && !yl(o, e.url))) && void 0 !== i ? i : null; let d = null; for (const t of a) !by(s, t) || d && !yl(o, t.url) || (d = t); return d } getMatchingAlternateWithPersistentId(t, i, r) { var e; return null !== (e = this.preferredMediaOptionList.find(e=>!(0 < (null == r ? void 0 : r.length) && r.includes(e.mediaOptionId)) && (!ne(t) || e.persistentID === t) && (!i || this.matchGroup(e, i.audioGroupId, i.subtitleGroupId, i.closedcaption)))) && void 0 !== e ? e : null } matchGroup(e, t, i, r) { let n = !1; switch (e.type) { case "CLOSED-CAPTIONS": n = !r || e.groupId === r; break; case "SUBTITLES": n = !i || e.groupId === i; break; case "AUDIO": n = !t || e.groupId === t } return n } getMatchingAlternate(e, t) { e = this.mediaOptionFromId(e); return this.getMatchingAlternateWithPersistentId(null == e ? void 0 : e.persistentID, t, []) } packageAlternateMediaOption(e, t, i) { return t.mediaType === pl.CLOSEDCAPTION ? this.augmentClosedCaptionsWithForcedSubtitles(null == e ? void 0 : e.subtitleGroupId, t, i) : t } augmentClosedCaptionsWithForcedSubtitles(e, t, i) { i = this.pairForcedSubtitleMediaOptionWithClosedCaption(e, t, i); return i ? Object.assign(Object.assign({}, t), { url: i.url, backingMediaOptionId: i.mediaOptionId }) : t } pairForcedSubtitleMediaOptionWithClosedCaption(t, i, r) { let n; if (i && i.mediaType === pl.CLOSEDCAPTION) { let e = this.mediaOptionList; r && (e = this.preferredMediaOptionList), n = Ty.pairForcedSubtitleMediaOptionWithClosedCaptionInList(t, i, e) } return n } static pairForcedSubtitleMediaOptionWithClosedCaptionInList(t, i, e) { return e.find(function(e) { return e.mediaType === pl.SUBTITLE && e.lang === i.lang && e.forced && e.autoselect && (!t || e.groupId === t) }) } } Ty.kAllowFilters = Ty.makeFilters(); class Ey extends Od { constructor(e, t) { super(e), this.itemId = t, this.mediaOptionListQueries = [new xm(e,this.itemId), new Ty(e,this.itemId,ul.AltAudio), new Ty(e,this.itemId,ul.Subtitle)] } get rootPlaylistEntity() { return this.getEntity(this.itemId) } get rootMediaOptionsTuple() { var e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.mediaOptionListTuple; return e ? [e[0].mediaOptions, e[1].mediaOptions, e[2].mediaOptions] : [[], [], []] } get itemStartOffset() { var e, t; return null !== (e = this.rootPlaylistEntity) && void 0 !== e && e.itemStartOffset && ne(null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.itemStartOffset) ? null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.itemStartOffset : 0 } get highestVideoCodec() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.highestVideoCodec } get baseUrl() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.baseUrl } get anchorTime() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.anchorTime } get discoSeqNum() { var e; return null !== (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.discoSeqNum) && void 0 !== e ? e : NaN } get discoSeqNum$() { return this.selectEntity(this.itemId, "discoSeqNum") } get audioMediaSelectionGroup() { var e; return null !== (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.audioMediaSelectionGroup) && void 0 !== e ? e : null } get subtitleMediaSelectionGroup() { var e; return null !== (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.subtitleMediaSelectionGroup) && void 0 !== e ? e : null } get audioMediaSelectionOptions() { var e; return null !== (e = null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.audioMediaSelectionGroup) || void 0 === e ? void 0 : e.MediaSelectionGroupOptions) && void 0 !== e ? e : [] } get subtitleMediaSelectionOptions() { var e; return null !== (e = null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.subtitleMediaSelectionGroup) || void 0 === e ? void 0 : e.MediaSelectionGroupOptions) && void 0 !== e ? e : [] } get contentSteeringOption() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.contentSteeringOption } get masterVariableList() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.masterVariableList } get loadStats() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.loadStats } get isMediaPlaylist() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.isMediaPlaylist } getInitPTS(e) { var t; return null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.initPtsRecord[e] } get abrStatus$() { return this.selectEntity(this.itemId, e=>null == e ? void 0 : e.abrStatus) } get abrStatus() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.abrStatus } get nextMaxAutoOptionId() { var e; return null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.abrStatus) || void 0 === e ? void 0 : e.nextMaxAutoOptionId } get nextMinAutoOptionId() { var e; return null === (e = null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.abrStatus) || void 0 === e ? void 0 : e.nextMinAutoOptionId } initPTS$(t) { return this.selectEntity(this.itemId, ({initPtsRecord: e})=>e[t]) } get rootPlaylistEntity$() { return this.selectEntity(this.itemId).pipe(an(e=>Boolean(e)), ur(e=>e)) } get rootPlaylistEntityAdded$() { return this.selectEntityAction(To.Add).pipe(ur(e=>e.map(e=>this.getEntity(e)))) } get rootMediaOptionsTuple$() { return Zd([this.selectEntity(this.itemId, e=>e.mediaOptionListTuple[0].mediaOptions), this.selectEntity(this.itemId, e=>e.mediaOptionListTuple[1].mediaOptions), this.selectEntity(this.itemId, e=>e.mediaOptionListTuple[2].mediaOptions)]) } get sessionData() { var e; return null === (e = this.rootPlaylistEntity) || void 0 === e ? void 0 : e.sessionData } get sessionData$() { return this.selectEntity(this.itemId, ({sessionData: e})=>e).pipe(Up()) } get anchorTime$() { return this.selectEntity(this.itemId, "anchorTime").pipe(Ra(e=>ne(e) ? e !== this.anchorTime ? (qe().warn(`anchorTime doesn't match stored value! ${e} !== ${this.anchorTime}`), Ti) : Bi(e) : Ti)) } get pendingSeek$() { return this.selectEntity(this.itemId, ({pendingSeek: e})=>e).pipe(Es((e,t)=>e === t || "number" == typeof e && "number" == typeof t && isNaN(e) && isNaN(t))) } get enabledMediaOptionKeys$() { return this.selectEntity(this.itemId, "enabledMediaOptionKeys").pipe(an(e=>Boolean(e))) } get enabledMediaOptionKeys() { var e; return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.enabledMediaOptionKeys) && void 0 !== e ? e : [Ol, Ol, Ol] } get enabledMediaOptionSwitchContexts() { var e; return null !== (e = null === (e = this.getEntity(this.itemId)) || void 0 === e ? void 0 : e.mediaOptionSwitchContexts) && void 0 !== e ? e : [null, null, null] } enabledMediaOptionSwitchContextsByType$(t) { return this.selectEntity(this.itemId, "mediaOptionSwitchContexts").pipe(ur(e=>null == e ? void 0 : e[t])) } get enabledMediaOptions$() { return Zd([this.enabledMediaOptionByType$(ul.Variant), this.enabledMediaOptionByType$(ul.AltAudio), this.enabledMediaOptionByType$(ul.Subtitle)]) } get enabledAVOptions$() { return Zd([this.enabledMediaOptionByType$(ul.Variant), this.enabledMediaOptionByType$(ul.AltAudio)]) } rawEnabledMediaOptionByType$(t) { return this.enabledMediaOptionKeys$.pipe(ur(e=>{ const i = e[t]; return kl(i) && this.rootMediaOptionsTuple[t].find(e=>{ return t = i, e.itemId === t.itemId && e.mediaOptionId === t.mediaOptionId; var t } ) || Ol } )) } enabledMediaOptionByType$(e) { return this.rawEnabledMediaOptionByType$(e).pipe(Es((e,t)=>e.mediaOptionId === t.mediaOptionId && e.url === t.url)) } enabledMediaOptionSwitchForType$(e) { return this.rawEnabledMediaOptionByType$(e).pipe(So(this.enabledMediaOptionSwitchContextsByType$(e)), xa(null), ca(), ur(([e,t])=>({ fromId: null == e ? void 0 : e[0].mediaOptionId, toId: null == t ? void 0 : t[0].mediaOptionId, switchContext: null == t ? void 0 : t[1] })), Es((e,t)=>e.fromId === t.fromId && e.toId === t.toId)) } enableMediaOptionSwitchedForType$(t) { return this.enabledMediaOptionByType$(t).pipe(Ra(e=>$l(Cr([Bi(e), this.enabledMediaOptionSwitchContextsByType$(t).pipe(ca())]), ([,e])=>e[0] && !e[1])), ur(([e])=>e)) } enabledMediaOptionIdByType(e) { return this.getEntity(this.itemId).enabledMediaOptionKeys[e].mediaOptionId } variantMediaOptionById(e) { return this.mediaOptionListQueries[ul.Variant].mediaOptionFromId(e) } alternateMediaOptionById(e, t) { return this.mediaOptionListQueries[e].mediaOptionFromId(t) } enabledAlternateMediaOptionByType(e) { var t = this.enabledMediaOptionIdByType(e); return this.alternateMediaOptionById(e, t) } get enabledVariantMediaOption() { var e = this.enabledMediaOptionIdByType(ul.Variant); return this.variantMediaOptionById(e) } lastLoadedMediaOptionByType(e) { var t; return null === (t = this.getEntity(this.itemId).lastLoadedMediaOptionKeys) || void 0 === t ? void 0 : t[e] } get nextMediaOptionsKeys$() { return this.selectEntity(this.itemId, "nextMediaOptionKeys") } get preferredMediaOptions() { return [this.mediaOptionListQueries[0].preferredMediaOptionList, this.mediaOptionListQueries[1].preferredMediaOptionList, this.mediaOptionListQueries[2].preferredMediaOptionList] } get preferredMediaOptions$() { return Zd([this.mediaOptionListQueries[0].preferredMediaOptionList$, this.mediaOptionListQueries[1].preferredMediaOptionList$, this.mediaOptionListQueries[2].preferredMediaOptionList$]) } get filteredMediaOptions() { return [this.mediaOptionListQueries[0].filteredMediaOptionList, this.mediaOptionListQueries[1].filteredMediaOptionList, this.mediaOptionListQueries[2].filteredMediaOptionList] } getDisabledMediaOption(e) { return { itemId: this.itemId, mediaOptionType: e, mediaOptionId: "Nah" } } getEnabledMediaOptionMask() { return this.enabledMediaOptionKeys.map(e=>kl(e)) } getPreferredMediaOptionsByType$(e) { return this.mediaOptionListQueries[e].preferredMediaOptionList$ } altMediaOptionHasValidUrl(e, t) { t = this.alternateMediaOptionById(e, t); return Boolean(null == t ? void 0 : t.url) } get hdrMode$() { return this.mediaOptionListQueries[ul.Variant].hdrMode$ } get maxHdcpLevel$() { return this.mediaOptionListQueries[ul.Variant].maxHdcpLevel$ } get currentPathwayID() { return this.mediaOptionListQueries[ul.Variant].currentPathwayID } get preferredHost() { return this.mediaOptionListQueries[ul.Variant].preferredHost } getErrorInfoByType(e) { var t; return null != (null === (t = this.rootPlaylistEntity) || void 0 === t ? void 0 : t.errorsByType) ? this.rootPlaylistEntity.errorsByType[e] : null } getInFlightFragByType(e) { var t; return null !== (e = null === (t = null === (t = this.getEntity(this.itemId)) || void 0 === t ? void 0 : t.inFlightFrags) || void 0 === t ? void 0 : t[e]) && void 0 !== e ? e : null } getInFlightFragByType$(t) { return this.selectEntity(this.itemId, e=>{ return null === (e = null == e ? void 0 : e.inFlightFrags) || void 0 === e ? void 0 : e[t] } ) } matchAlternates(e, t, i, r) { t = ne(t) ? this.mediaOptionListQueries[ul.AltAudio].getMatchingAlternateWithPersistentId(t, e, r) : void 0, r = ne(i) ? this.mediaOptionListQueries[ul.Subtitle].getMatchingAlternateWithPersistentId(i, e, r) : void 0; return [t || Ol, r || Ol] } getLegacyMatchingAlternateWithPersistentId(e, t, i) { let r = this.mediaOptionListQueries[e].getMatchingAlternateWithPersistentId(t, i, []); return r = r || this.mediaOptionListQueries[e].getMatchingAlternateWithPersistentId(t, void 0, []), r } isValidMediaOptionTuple(i, e) { const r = e || this.getEnabledMediaOptionMask(); return [ul.Variant, ul.AltAudio, ul.Subtitle].reduce((e,t)=>e && r[t] === kl(i[t]), !0) } matchGroup(e, t, i, r) { var n = e.mediaOptionType; return this.mediaOptionListQueries[n].matchGroup(e, t, i, r) } get preferHDR() { return this.mediaOptionListQueries[ul.Variant].mediaOptionListInfo.preferHDR } } const Iy = { name: "rps" }; class wy { constructor(e, t) { this.store = e, this.logger = t } getQuery() { return new Od(this.store) } getQueryForId(e) { return new Ey(this.store,e) } set rootPlaylistEntity(e) { Co("root.add.rootPlaylist"), this.store.add(e) } removeItems(e) { Co(`root.add.remove ${JSON.stringify(e)}`), this.store.remove(e) } removeAll() { Co("root.add.clear"), this.store.remove() } setRootPlaylistEntity(e, t) { Co("root.set.rootPlaylistEntity"), this.store.update(e, e=>t) } setSessionData(e, t) { Co("root.set.sessionData"), this.store.update(e, e=>{ e.sessionData = t } ) } setAnchorTime(e, t) { Co(`root.set.anchorTime: ${t}`), this.store.update(e, e=>{ e.anchorTime = t } ) } setDiscoSeqNum(e, t) { Co(`root.set.discoSeqNum: ${t}`), this.store.update(e, e=>{ e.discoSeqNum = t } ) } setPendingSeek(e, t) { Co("root.set.pendingSeek"), this.store.update(e, e=>{ e.pendingSeek = t } ), void 0 === t && Xm().setUserSeek(t) } setEnabledMediaOptionSwitchContextByType(e, i, r, n) { this.store.update(e, e=>{ var t; if (e.enabledMediaOptionKeys[i].mediaOptionId === r) { const r = null !== (t = e.mediaOptionSwitchContexts) && void 0 !== t ? t : [null, null, null]; r[i] = n ? { userInitiated: n.userInitiated, switchPosition: n.switchPosition } : null, e.mediaOptionSwitchContexts = r } else Co(`root.set.mediaOptionSwitchContextByType ${r} doesn't match existing mediaOption ${e.enabledMediaOptionKeys[i].mediaOptionId}`) } ) } setEnabledMediaOptionByType(r, n, s, a=!1, o) { s = s || { itemId: r, mediaOptionType: n, mediaOptionId: "Nah" }, this.store.update(r, e=>{ var t; const i = null !== (t = [...e.enabledMediaOptionKeys]) ? t : [Ol, Ol, Ol]; if (i[n] = { itemId: r, mediaOptionId: s.mediaOptionId }, this._updateEnabledMediaOptionKeys(e, i), a) { const r = null !== (t = e.mediaOptionSwitchContexts) && void 0 !== t ? t : [null, null, null]; r[n] = o ? { userInitiated: o.userInitiated, switchPosition: o.switchPosition } : null, e.mediaOptionSwitchContexts = r } } ) } _associateForcedSubtitleWithClosedCaption(e, t, i, r) { if ((null == i ? void 0 : i.mediaType) === pl.CLOSEDCAPTION) { t = r.variantMediaOptionById(t), r = r.mediaOptionListQueries[ul.Subtitle].packageAlternateMediaOption(t, i, !0); if (r.url !== i.url) { const n = My(t, r, e.mediaOptionListTuple[ul.Subtitle].mediaOptions, qe()); e.mediaOptionListTuple[ul.Subtitle].mediaOptions = n } } } _updateEnabledMediaOptionKeys(t, i) { var e, r; const n = null !== (e = t.enabledMediaOptionKeys) && void 0 !== e ? e : [Ol, Ol, Ol]; let s; for (let e = 0; e < i.length; ++e) { var a = i[e] , o = n[e].mediaOptionId !== a.mediaOptionId; if (o && (n[e] = Object.assign({}, a)), e === ul.Variant) { const i = this.getQueryForId(a.itemId).mediaOptionListQueries[e].mediaOptionList; o ? t.abrStatus = (r = a.mediaOptionId, o = i, o = Lg(r, o), { fragDownloadSlow: !1, fragDownloadTooSlow: !1, nextMinAutoOptionId: Ol.mediaOptionId, nextMaxAutoOptionId: Ol.mediaOptionId, highBWTrigger: o }) : t.abrStatus.highBWTrigger = Lg(a.mediaOptionId, i), s = a } else if (e === ul.Subtitle && kl(a)) { const i = this.getQueryForId(a.itemId) , n = i.alternateMediaOptionById(e, a.mediaOptionId); this._associateForcedSubtitleWithClosedCaption(t, s.mediaOptionId, n, i) } } t.enabledMediaOptionKeys = n, t.nextMediaOptionKeys = void 0 } setManualMode(e, t) { this.store.update(e, e=>{ e.manualMode = t } ) } setEnabledMediaOptions(e, i) { this.store.update(e, e=>{ var t = i.map(({mediaOptionId: e, itemId: t})=>({ mediaOptionId: e, itemId: t })); this._updateEnabledMediaOptionKeys(e, t) } ) } setEnabledMediaOptionsAndSwitchContexts(e, i, r) { this.store.update(e, e=>{ var t = i.map(({mediaOptionId: e, itemId: t})=>({ mediaOptionId: e, itemId: t })); this._updateEnabledMediaOptionKeys(e, t), e.mediaOptionSwitchContexts = r } ) } setNextMediaOptions(e, i) { Co(`root.set.nextMediaOptions: ${JSON.stringify(null == i ? void 0 : i.map(e=>e.mediaOptionId))}`), this.store.update(e, e=>{ var t = i ? i.map(({itemId: e, mediaOptionId: t})=>({ itemId: e, mediaOptionId: t })) : null; e.nextMediaOptionKeys = t } ) } updateEnabledMediaOptions(e) { Co("root.set.updateEnabledMediaOptions"), this.store.update(e, e=>{ e.nextMediaOptionKeys && !0 !== e.manualMode && (Co(`root.set.updateEnabledMediaOptions ${JSON.stringify(e.nextMediaOptionKeys)}`), this._updateEnabledMediaOptionKeys(e, [...e.nextMediaOptionKeys])), e.nextMediaOptionKeys = void 0 } ) } setLastLoadedMediaOptionByType(r, n, s) { Co(`root.set.lastLoadedMediaOptionByType: ${n} ${(s = s || { itemId: r, mediaOptionType: n, mediaOptionId: "Nah" }).mediaOptionId}`), this.store.update(r, e=>{ var t; const i = null !== (t = e.lastLoadedMediaOptionKeys) && void 0 !== t ? t : [Ol, Ol, Ol]; i[n] = { itemId: r, mediaOptionId: s.mediaOptionId }, e.lastLoadedMediaOptionKeys = i } ) } setPreferredHost(e, t) { Co(`root.set.preferredHost: ${t}`), this.store.update(e, e=>{ e && (e.mediaOptionListTuple[ul.Variant].preferredHost = t) } ) } setViewportInfo(e, t) { Co(`root.set.viewportInfo: ${JSON.stringify(t)}`), this.store.update(e, e=>{ e && (e.mediaOptionListTuple[ul.Variant].viewportInfo = t) } ) } static getExistingPersistentIds(e) { var t; const i = {} , r = null === (t = e.enabledMediaOptionKeys[ul.AltAudio]) || void 0 === t ? void 0 : t.mediaOptionId; if ("Nah" !== r) { const s = e.mediaOptionListTuple[ul.AltAudio] , t = wm(s.mediaOptions, Ty.kAllowFilters, s).find(e=>e.mediaOptionId === r); i.audioPersistentId = null == t ? void 0 : t.persistentID } const n = null === (t = e.enabledMediaOptionKeys[ul.Subtitle]) || void 0 === t ? void 0 : t.mediaOptionId; if ("Nah" !== n) { const s = e.mediaOptionListTuple[ul.Subtitle] , t = wm(s.mediaOptions, Ty.kAllowFilters, s).find(e=>e.mediaOptionId === n); i.subtitlePersistentId = null == t ? void 0 : t.persistentID } return i } static doUpdateRootHDRSwitch(e, t, i, r) { const n = e.mediaOptionListTuple.map(e=>Object.assign({}, e)); n[ul.Variant].preferHDR = t, n[ul.Variant].hasHdrLevels = i; const s = Ym() , a = Hg.getEntity(e.itemId) , o = Uf(e.itemId) , d = o.getBandwidthEstimate(s, null == a ? void 0 : a.serviceName) , l = o.getPlaylistEstimate(s, null == a ? void 0 : a.serviceName) , u = o.getFragEstimate(s, null == a ? void 0 : a.serviceName) , c = o.getBufferEstimate(s, null == a ? void 0 : a.serviceName) , h = { targetDuration: u.maxDurationSec || (null == s ? void 0 : s.defaultTargetDuration), targetStartupMs: null == s ? void 0 : s.targetStartupMs } , p = wy.getExistingPersistentIds(e); return Py(Object.assign(Object.assign({}, e), { mediaOptionListTuple: n, nextMediaOptionKeys: null }), p, r, d, h, l, u, c) } switchToSDROnly(e) { Co("root.switchToSDROnly"), this.store.update(e, e=>{ var t = wy.doUpdateRootHDRSwitch(e, !1, !1, this.logger)["mediaOptionListTuple"]; e.mediaOptionListTuple = t } ) } setHDRPreference(e, i, r) { Co(`root.set.HDRPreference: ${i}`), this.store.update(e, e=>{ var t = e.mediaOptionListTuple[ul.Variant]; if (t.preferHDR !== i && (!i || t.hasHdrLevels)) { t = wy.doUpdateRootHDRSwitch(e, i, t.hasHdrLevels, this.logger); if (r) return t; e.mediaOptionListTuple = t.mediaOptionListTuple } } ) } setPathwayPriority(e, i) { Co(`root.set.PathwayPriority: [ ${i.join(", ")} ]`), this.store.update(e, e=>{ if (e) { const t = e.mediaOptionListTuple[ul.Variant]; t.pathwayPriority = i, t.preferredHost = null } } ) } setCurrentPathwayID(e, t) { Co(`root.set.currentPathwayID: ${t}`), this.store.update(e, e=>{ e && (e.mediaOptionListTuple[ul.Variant].currentPathwayID = t) } ) } setInitPTS(e, t, i, r, n, s) { Co(`root.set.initPTS: ${e} ${t} variantDTS:${JSON.stringify(i)} timelineOffset: ${r}`), this.store.update(e, e=>{ e.initPtsRecord[t] = { variantDTS: i, timelineOffset: r, offsetTimestamp: n, iframeMode: s } } ) } static prunePenaltyBox(e, t) { return e.filter(e=>!(e.expiry <= t)) } static addToPenaltyBox(e, t, i) { return e.push({ mediaOptionId: i, expiry: t + 12e4 }) } addToPenaltyBox(e, r, n) { Co(`root.set.penaltyBox: ${r}: ${n}`), this.store.update(e, ({mediaOptionListTuple: e})=>{ const t = e[r] , i = performance.now(); t.penaltyBoxQueue = wy.prunePenaltyBox(t.penaltyBoxQueue, i), wy.addToPenaltyBox(t.penaltyBoxQueue, i, n) } ) } prunePenaltyBox(e, r=null) { Co(`root.set.prunePenaltyBox: ${r}`), this.store.update(e, ({mediaOptionListTuple: e})=>{ var e = r ? [e[r]] : e , t = performance.now(); for (const i of e) i.penaltyBoxQueue = wy.prunePenaltyBox(i.penaltyBoxQueue, t) } ) } removePermanently(e, r, n) { Co(`root.set.removePermanently: ${r}: ${n}`), this.store.update(e, ({mediaOptionListTuple: e})=>{ const t = e[r] , i = new Set(t.removed); i.add(n), t.removed = Array.from(i) } ) } moveAllWithMatchingHosts(e, r, n, s) { Co(`root.set.moveAllMatchingHosts: ${r}:${n} remove:${s}`), this.store.update(e, ({mediaOptionListTuple: e})=>{ const t = e[r] , i = [...t.mediaOptions].filter(e=>yl(n, e.url)).map(e=>e.mediaOptionId); if (s) { const e = new Set([...t.removed, ...i]); t.removed = Array.from(e) } else { const e = performance.now(); t.penaltyBoxQueue = wy.prunePenaltyBox(t.penaltyBoxQueue, e); for (const r of i) wy.addToPenaltyBox(t.penaltyBoxQueue, e, r) } } ) } setMaxHdcpLevel(e, i, r=!1) { Co(`root.set.maxHdcpLevel: ${i}`), this.store.update(e, ({mediaOptionListTuple: e})=>{ const t = e[ul.Variant]; (r || Yf(i) < Yf(t.maxHdcpLevel)) && (t.maxHdcpLevel = i) } ) } updateConsecutiveTimeouts(e, i, r, n) { this.store.update(e, e=>{ const t = e.errorsByType || [{ timeouts: { load: 0, append: 0, key: 0 } }, { timeouts: { load: 0, append: 0, key: 0 } }, { timeouts: { load: 0, append: 0, key: 0 } }]; r ? ++t[i].timeouts[n] : t[i].timeouts[n] = 0, e.errorsByType = t } ) } updateInflightFrag(d, l, u, c, h) { Co("root.set.updateInflightFrag"), this.store.update(d, r=>{ if (r.inFlightFrags || (r.inFlightFrags = [null, null]), !(l === ul.Subtitle || u && u.itemId !== d)) if (u) { let {start: e, duration: t} = u; var {mediaOptionId: n, mediaSeqNum: s, discoSeqNum: a} = u , o = r.inFlightFrags[l]; let i = null == o ? void 0 : o.tstart; c !== (null == o ? void 0 : o.state) && (i = performance.now()), Fp(o, u) && (e = o.start, t = o.duration), r.inFlightFrags[l] = { itemId: d, mediaOptionId: n, mediaSeqNum: s, discoSeqNum: a, start: e, duration: t, tstart: i, state: c, bwSample: Object.assign({}, h) } } else r.inFlightFrags[l] = null } ) } setNextMaxAutoOptionId(e, t) { Co(`root.set.nextMaxAutoOptionId: ${t}`), this.store.update(e, ({abrStatus: e})=>{ e.nextMaxAutoOptionId = t } ) } setNextMinAutoOptionId(e, t) { Co(`root.set.nextMinAutoOptionId: ${t}`), this.store.update(e, ({abrStatus: e})=>{ e.nextMinAutoOptionId = t } ) } setHighBWTrigger(e, t) { Co(`root.set.setHighBWTrigger: ${t}`), this.store.update(e, ({abrStatus: e})=>{ e.highBWTrigger = t } ) } setFragLoadSlow(e, t) { Co(`root.set.setFragLoadSlow ${e} ${JSON.stringify(t)}`), this.store.update(e, ({abrStatus: e})=>{ e.fragDownloadSlow = t.fragDownloadSlow, e.fragDownloadTooSlow = t.fragDownloadTooSlow } ) } pickMediaOptionTupleByPersistentId(e, t, i, r=!1, n=!1) { var s = e.enabledMediaOptionIdByType(ul.Variant) , s = e.variantMediaOptionById(s); let a, o; if (t === ul.AltAudio) { const t = e.enabledAlternateMediaOptionByType(ul.Subtitle); o = null == t ? void 0 : t.persistentID, a = i } else { const t = e.enabledAlternateMediaOptionByType(ul.AltAudio); a = null == t ? void 0 : t.persistentID, o = i } const d = e.getEnabledMediaOptionMask(); return d[t] = !!(ne(i) && 0 <= i), s ? this.getBestMediaOptionTupleFromVariantAndPersistentId(e, s, a, o, d, void 0, r, n, !1) : [Ol, Ol, Ol] } getFallbackMediaOptionTupleFromMediaOptionId(e, t, i, r, n=!1, s=!1, a=!1) { var o = r ? [r] : [i] , d = e.enabledMediaOptionIdByType(ul.Variant) , r = e.variantMediaOptionById(d) , d = t === ul.AltAudio ? e.alternateMediaOptionById(ul.AltAudio, i) : e.enabledAlternateMediaOptionByType(ul.AltAudio) , d = null == d ? void 0 : d.persistentID , i = t === ul.Subtitle ? e.alternateMediaOptionById(ul.Subtitle, i) : e.enabledAlternateMediaOptionByType(ul.Subtitle) , i = null == i ? void 0 : i.persistentID; return r ? this.getBestMediaOptionTupleFromVariantAndPersistentId(e, r, d, i, void 0, o, n, s, a) : [Ol, Ol, Ol] } hasFallbackMediaOptionTuple(e, t, i, r) { var n = e.mediaOptionListQueries[t].mediaOptionFromId(i); return e.isValidMediaOptionTuple(this.getFallbackMediaOptionTupleFromMediaOptionId(e, t, i, n.backingMediaOptionId, !1, r)) } setLegacyAlternateMediaOption(e, t, i, r, n) { var s = e.enabledMediaOptionIdByType(ul.Variant) , s = e.variantMediaOptionById(s) , s = e.getLegacyMatchingAlternateWithPersistentId(i, r, s); s ? this.setEnabledMediaOptionByType(t, i, s, !0, n) : this.logger.warn(`${Cl[i]} can't find matching mediaOption for persistent id ${r}`) } setEnabledMediaOptionTupleWithMatchedGroups(t, i, e, r) { const n = ky(t) , s = this.pickMediaOptionTupleByPersistentId(n, i, e); if (!n.isValidMediaOptionTuple(s)) return this.setLegacyAlternateMediaOption(n, t, i, e, r); sd(()=>{ this.setEnabledMediaOptionByType(t, i, s[i], !0, r), s[ul.Variant].mediaOptionId !== n.enabledMediaOptionIdByType(ul.Variant) && this.setPreferredHost(t, gl(s[ul.Variant].url)), this.setEnabledMediaOptionByType(t, ul.Variant, s[ul.Variant]); var e = i === ul.AltAudio ? ul.Subtitle : ul.AltAudio; s[e].mediaOptionId !== n.enabledMediaOptionIdByType(e) && this.setEnabledMediaOptionByType(t, e, s[e], !1) } ) } canSwitchToSDR(e, t, i, r=!1) { var n = e.mediaOptionListQueries[ul.Variant].mediaOptionFromId(t) , r = this.getFallbackMediaOptionTupleFromMediaOptionId(e, ul.Variant, t, n.backingMediaOptionId, !0, i, r); return e.isValidMediaOptionTuple(r) } getBestMediaOptionTupleFromVariantAndPersistentId(t, e, i, r, n, s, a, o, d) { var l, u = t.mediaOptionListQueries[ul.Variant].listFallbackVariants(e.mediaOptionId, a, o, d, s); let c = [Ol, Ol, Ol]; for (let e = 0; e < u.length; ++e) { const a = u[e]; if (l = t.matchAlternates(a, i, r, s), t.isValidMediaOptionTuple([a, ...l], n)) { c = [a, ...l]; break } } return c } } const Ay = new class extends pd { constructor() { super({}, { name: "root-playlist-store", idKey: "itemId", producerFn: vc }) } akitaPreAddEntity(e) { return null == e.errorsByType ? Object.assign(Object.assign({}, e), { errorsByType: [{ timeouts: { load: 0, append: 0, key: 0 } }, { timeouts: { load: 0, append: 0, key: 0 } }, { timeouts: { load: 0, append: 0, key: 0 } }] }) : e } } ; new Od(Ay); let Oy = null; function ky(e) { return new Ey(Ay,e) } const Cy = (n,e,t,s,i)=>{ const {rootMediaOptionsTuple: r, sessionKeys: a} = n , o = Array.from(r[ul.Variant]) , d = Array.from(r[ul.AltAudio]); let l = !1 , u = !1 , c = o.map(e=>(l = l || Boolean(e.videoCodec), u = u || Boolean(e.audioCodec) || Boolean(e.audioGroupId), e)); return l && u && (c = c.filter(({videoCodec: e})=>Boolean(e))), Sy(o, d, a, e, t, i).pipe(ur(({hdrMediaOptions: e, sdrMediaOptions: t})=>{ var i = e.concat(t) , r = 0 < e.length; return e.concat(t), function(e, t, i, r) { var {itemId: n, itemStartOffset: s, rootMediaOptionsTuple: a, audioMediaSelectionGroup: o, subtitleMediaSelectionGroup: d} = e , l = Array.from(a[ul.AltAudio]) , u = Array.from(a[ul.Subtitle]) , c = t.every(e=>ne(e.score)) , h = t.some(e=>Dm(!0, e)) , p = function(e, t) { const i = [...e]; return t ? i.sort((e,t)=>e.score - t.score || t.bitrate - e.bitrate) : i.sort((e,t)=>e.bitrate - t.bitrate), i }(t, c) , f = e.baseUrl , t = null === (a = e.contentSteeringOption) || void 0 === a ? void 0 : a.initPathwayID , a = e.sessionData; return { itemId: n, baseUrl: f, mediaOptionListTuple: [{ mediaOptions: p, hasHdrLevels: i, hasIframeLevels: h, hasScore: c, preferHDR: r, compatibleIds: null, penaltyBoxQueue: [], removed: [], currentPathwayID: t }, { mediaOptions: l, compatibleIds: null, penaltyBoxQueue: [], removed: [] }, { mediaOptions: u, penaltyBoxQueue: [], removed: [] }], audioMediaSelectionGroup: o, subtitleMediaSelectionGroup: d, enabledMediaOptionKeys: [Ol, Ol, Ol], mediaOptionSwitchContexts: [null, null, null], anchorTime: 0, discoSeqNum: NaN, pendingSeek: void 0, itemStartOffset: s, initPtsRecord: {}, contentSteeringOption: e.contentSteeringOption, masterVariableList: e.masterVariableList, loadStats: e.stats, isMediaPlaylist: e.isMediaPlaylist, abrStatus: { fragDownloadSlow: !1, fragDownloadTooSlow: !1, nextMinAutoOptionId: Ol.mediaOptionId, nextMaxAutoOptionId: Ol.mediaOptionId, highBWTrigger: NaN }, sessionData: a } }(n, i, r, s) } )) } ; function Dy(e, t, i, r, n, s, a) { var o, d, l, u, c, h, p, f = e.mediaOptionListTuple[ul.Variant], m = wm(f.mediaOptions, xm.kAllowFilters, Object.assign(Object.assign({}, f), { compatibleIds: null })), g = Am(f.preferredHost, m); return { firstVariant: (o = g, e = Tg, f = f.hasScore, t = t, i = i, r = r, n = n, s = s, a = a, !o || o.length < 1 || o.every(e=>e.iframes) ? void t.warn("no non-iframe media option found") : ((o = f ? Eg(o, i, r, n, s, a) : (d = e, l = i, u = r, c = n, h = s, p = a, o.reduce((e,t)=>{ if (t.iframes) return e; let i = e; const r = function(e, t, i, r, n, s, a) { var o, d, l = (o = e.bitrate, u = e.height, (d = (e,t,i)=>(e - t) * (e - i) <= 0)(o, t.minValidBitrate, t.maxValidBitrate) && d(u, t.minValidHeight, t.maxValidHeight) ? ll.VALID : ll.INVALID), o = "PQ" === (c = e.videoRange) ? ol.PQ : "HLG" === c ? ol.HLG : "SDR" === c ? ol.SDR : ol.UNKNOWN, {videoCodecRank: u, audioCodecRank: c} = { videoCodecRank: $p((d = e).videoCodec), audioCodecRank: Kp(d.audioCodec) }, d = e.bitrate < t.maxPreferredBitrate ? ll.VALID : ll.INVALID, t = e.audioChannelCount || 1, a = i && r && n && s && !Ig(e, i, r, n, s, a) ? ll.INVALID : ll.VALID; return new Hp(l,o,u,t,c,a,d,e.height) }(t, d, l, u, c, h, p); return (!e || r.isGreaterThan(e.bestRank) || r.isEqualTo(e.bestRank) && t.bitrate > e.selected.bitrate) && (i = { selected: t, bestRank: r }), i } , null).selected)) || t.warn("no valid first media option found"), o)), filteredVariants: m, preferredVariants: g } } function My(e, t, i) { if ((null == t ? void 0 : t.mediaType) === pl.CLOSEDCAPTION) { const r = Ty.pairForcedSubtitleMediaOptionWithClosedCaptionInList(e.subtitleGroupId, t, i); if (r) return t = Object.assign(Object.assign({}, t), { url: r.url, backingMediaOptionId: r.mediaOptionId }), i.map(e=>e.mediaOptionId === t.mediaOptionId ? t : e) } return i } function Py(e, t, i, r, n, s, a, o) { var d; const l = e.itemId , u = e.mediaOptionListTuple[ul.Variant] , c = e.mediaOptionListTuple[ul.AltAudio] , h = e.mediaOptionListTuple[ul.Subtitle] , p = wm(c.mediaOptions, Ty.kAllowFilters, c) , f = wm(h.mediaOptions, Ty.kAllowFilters, h); let {firstVariant: m, filteredVariants: g} = Dy(e, i, r, n, s, a, o); if (!m) { const U = u.preferHDR; u.preferHDR = !U && u.hasHdrLevels, u.preferHDR !== U && (i.warn(`No valid first variant found, toggling hdr preference=${U}->${u.preferHDR}`), {firstVariant: m, filteredVariants: g} = Dy(e, i, r, n, s, a, o)) } if (!m) throw new V(!0,"No valid first variant found",$.NoValidAlternates); const y = gl(m.url) , v = { itemId: l, mediaOptionId: null !== (o = null == m ? void 0 : m.mediaOptionId) && void 0 !== o ? o : null } , S = null != p && p.length ? null === (o = ((i,r,e,n)=>{ if (e) { let t; return t = ne(i) ? e.MediaSelectionGroupOptions.find(function(e) { return e.MediaSelectionOptionsPersistentID === i }) : e.MediaSelectionGroupOptions.find(function(e) { return e.MediaSelectionOptionsIsDefault }), t = t || e.MediaSelectionGroupOptions[0], n.find(e=>(!r || e.groupId === r) && e.persistentID === (null == t ? void 0 : t.MediaSelectionOptionsPersistentID)) } } )(null == t ? void 0 : t.audioPersistentId, m.audioGroupId, e.audioMediaSelectionGroup, p)) || void 0 === o ? void 0 : o.mediaOptionId : null , b = S ? { itemId: l, mediaOptionId: S } : Ol , T = ((i,r,n,s,a,o)=>{ if (s) { let t, e; return t = ne(i) ? s.MediaSelectionGroupOptions.find(function(e) { return e.MediaSelectionOptionsPersistentID === i }) : s.MediaSelectionGroupOptions.find(function(e) { return e.MediaSelectionOptionsIsDefault }), t && (e = a.find(e=>e.mediaType === pl.CLOSEDCAPTION ? (!r || e.groupId === r) && e.persistentID === t.MediaSelectionOptionsPersistentID : e.mediaType === pl.SUBTITLE ? (!n || e.groupId === n) && e.persistentID === t.MediaSelectionOptionsPersistentID : void o.warn(Iy, `subtitle media option has unknown type ${e.mediaType}`))), e } } )(null == t ? void 0 : t.subtitlePersistentId, m.closedcaption, m.subtitleGroupId, e.subtitleMediaSelectionGroup, f, i) , E = null != f && f.length ? null == T ? void 0 : T.mediaOptionId : null , I = E ? { itemId: l, mediaOptionId: E, mediaOptionType: ul.Subtitle } : Ol , {mediaOptions: w, audioGroups: A, subtitleGroups: O} = (t = g, d = m, t.reduce((e,t)=>{ if (((e,t)=>{ let i = !0; e.videoCodec && t.videoCodec && (i = Se.isCompatibleVideoCodec(e.videoCodec, t.videoCodec)); let r = !1; e.videoRange && t.videoRange ? r = e.videoRange == t.videoRange : e.videoRange || t.videoRange || (r = !0); let n = !0; return e.audioCodec && t.audioCodec && (n = Se.isCompatibleAudioCodec(e.audioCodec, t.audioCodec)), i && r && n } )(d, t)) { const d = t.audioGroupId; d && e.audioGroups.add(d), e.mediaOptions.add(t) } var i = t.subtitleGroupId; i && e.subtitleGroups.add(i); t = t.closedcaption; return t && e.closedCaptionGroups.add(t), e } , { mediaOptions: new Set, audioGroups: new Set, subtitleGroups: new Set, closedCaptionGroups: new Set })) , k = Array.from(w).map(e=>e.mediaOptionId) , C = m.pathwayID , D = Object.assign(Object.assign({}, u), { compatibleIds: k, preferredHost: y, currentPathwayID: C }) , M = [] , P = c.mediaOptions.reduce((e,t)=>(A.has(t.groupId) && (e.persistentIds.add(t.persistentID), M.push(t.mediaOptionId), e.filteredAudioMediaOptions.push(t), e.altAudio || (e.altAudio = !!t.url)), e), { filteredAudioMediaOptions: [], persistentIds: new Set, altAudio: !1 }) , x = Object.assign(Object.assign({}, c), { compatibleIds: M }); let R = e.audioMediaSelectionGroup; const L = null == R ? void 0 : R.MediaSelectionGroupOptions; if (L) { const e = L.reduce((e,t)=>(P.persistentIds.has(t.MediaSelectionOptionsPersistentID) && e.push(t), e), new Array); R = Object.assign(Object.assign({}, R), { MediaSelectionGroupOptions: e }) } h.mediaOptions = My(m, T, h.mediaOptions); const _ = h.mediaOptions.reduce((e,t)=>(O.has(t.groupId) && (e.persistentIds.add(t.persistentID), e.filteredSubtitleMediaOptions.push(t)), e), { filteredSubtitleMediaOptions: [], persistentIds: new Set }); let N = e.subtitleMediaSelectionGroup; const F = null == N ? void 0 : N.MediaSelectionGroupOptions; if (F) { const e = F.reduce((e,t)=>(_.persistentIds.has(t.MediaSelectionOptionsPersistentID) && e.push(t), e), new Array); N = Object.assign(Object.assign({}, N), { MediaSelectionGroupOptions: e }) } i = [D, x, h]; let B = new Map; Ym().useHighestVideoCodecPrivate && (B = null == D ? void 0 : D.mediaOptions.reduce((e,t)=>{ const i = t.videoCodecList; if (i) for (const t of i) { const i = Vp(t) , r = e.get(i); Se.isHigherCodecByFamily(r, t) && e.set(i, t) } return e } , B)), B.size && B.forEach((e,t)=>{} ); t = { fragDownloadSlow: !1, fragDownloadTooSlow: !1, nextMinAutoOptionId: Ol.mediaOptionId, nextMaxAutoOptionId: Ol.mediaOptionId, highBWTrigger: Lg(v.mediaOptionId, D.mediaOptions) }; return Object.assign(Object.assign({}, e), { enabledMediaOptionKeys: [v, b, I], mediaOptionListTuple: i, audioMediaSelectionGroup: R, abrStatus: t, highestVideoCodec: B }) } const xy = (o,d,l,u,c,h,p)=>e=>e.pipe(Ql.tag("retrieveRootMediaOptions.input"), Ra(t=>{ var e; if (!t) return Ti; const {itemId: i, platformInfo: r} = t , n = ky(i) , s = d["logger"]; if (n.hasEntity(i)) return Bi(n); Ay.setLoading(!0); const a = performance.now(); return function(e, t, u, c, i) { const {itemId: h, url: p, itemStartOffset: f} = e , r = xc(e, t); return bm({ url: p, onProgress: { getData: !0, cb: dy }, xhrSetup: c.xhrSetup }, r, i).pipe(ur(({responseText: e, stats: t})=>{ var i = c["keySystemPreference"]; if (Sm.isMediaPlaylist(e)) { const c = "media-pl-" + Jd() , d = Sm.parseMediaOptionPlaylist(e, p, !0, i, {}, h, c, ul.Variant, u, f); Lc(d.mediaOptionDetails); var r = { itemId: h, mediaOptionId: c, mediaOptionType: ul.Variant, url: p, bandwidth: 0, bitrate: 0, iframes: d.mediaOptionDetails.iframesOnly, pathwayID: "." }; return { itemId: h, itemStartOffset: f, rootMediaOptionsTuple: [[r], [], []], stats: t, baseUrl: p, initialDetails: d.mediaOptionDetails, isMediaPlaylist: !0 } } { const u = Sm.parseSessionData(e, p) , c = Sm.parseSessionKeys(e, p, i) , l = Sm.parseRootPlaylist(h, e, p, !0); if (l.playlistParsingError) throw l.playlistParsingError; var {variantMediaOptions: n, contentSteeringOption: s, masterVariableList: a} = l , o = Sm.parseRootPlaylistAlternateMediaOptions(h, e, p, l.variantMediaOptions, !0, a); if (o.playlistParsingError) throw o.playlistParsingError; var {audioAlternateOptions: r, subtitleAlternateOptions: i, audioMediaSelectionGroup: e, subtitleMediaSelectionGroup: o} = o.alternateMediaInfo; return { itemId: h, itemStartOffset: f, rootMediaOptionsTuple: [n, r, i], stats: t, baseUrl: p, audioMediaSelectionGroup: e, subtitleMediaSelectionGroup: o, contentSteeringOption: s, sessionData: u, sessionKeys: c, masterVariableList: a } } } ), e=>e.pipe(Un(e=>{ if (e instanceof ou) throw new ru(!1,"Timeout",0,$.ManifestTimeoutError,!0); if (e instanceof tu) throw new ru(!1,e.message,e.code,{ code: e.code, text: "Manifest network error" },!1); throw e } ))) }(t, o, s, l, null === (e = null === (e = Xm()) || void 0 === e ? void 0 : e.getQuery()) || void 0 === e ? void 0 : e.extendMaxTTFB).pipe(Ja(e=>p.triggerManifestLoaded(e)), Ja(({initialDetails: e, stats: t})=>{ e && (e = e, t = t, hg().archiveMediaOptionDetails(e, t, !0)) } ), So(u.displaySupportsHdr$), Ra(([e,t])=>Cy(e, r, l, t, s)), ur(e=>(d.rootPlaylistEntity = function(e, t, i, r, n, s) { const {itemId: a, initialSeekTime: o} = e , d = Uf(a) , l = n.enableAdaptiveStartup ? d.getBandwidthEstimate(n, e.serviceName) : void 0 , u = n.enableAdaptiveStartup ? d.getPlaylistEstimate(n, e.serviceName) : void 0 , c = n.enableAdaptiveStartup ? d.getFragEstimate(n, e.serviceName) : void 0 , h = n.enableAdaptiveStartup ? d.getBufferEstimate(n, e.serviceName) : void 0 , p = n.targetStartupMs - (performance.now() - r) , f = n.enableAdaptiveStartup ? { targetDuration: c.maxDurationSec || n.defaultTargetDuration, targetStartupMs: p } : void 0 , m = Py(t, i, s, l, f, u, c, h); return m.pendingSeek = o, m }(t, e, c, a, l, s), n)), jm(i, null, xc(t, o), 0, !1, n, d, h), $s(()=>{ Ay.setLoading(!1) } )) } ), Ql.tag("retrieveRootMediaOptions.emit")); class Ry { } Ry.PlayEnded = 6101, Ry.Periodic = 6110, Ry.PlayStalled = 6103, Ry.KeySessionComplete = 6104, Ry.PlayLikelyToKeepUp = 6105, Ry.PlayRateChanged = 6106, Ry.PlayError = 6107, Ry.MediaEngineStalled = 6108, Ry.SwitchComplete = 6109, Ry.VariantEnded = 6111, Ry.NwError = 6202; const Ly = { avc1: 1, avc3: 1, hvc1: { SDR: 2, HLG: 10, PQ: 11 }, hev1: { SDR: 2, HLG: 10, PQ: 11 }, vp09: { SDR: 3, HLG: 14, PQ: 13 }, dvh1: { PQ: 12 } }; class _y { constructor(e, t) { this.query = e, this.logger = t } setReportingAgent(e) { this.reportingAgent = e } sendPlayEnded(e) { var t = Ry.PlayEnded; this.fillAndFire(t, this.query.playEnded(e)) } sendPlayStalled(e) { var t = Ry.PlayStalled; this.fillAndFire(t, this.query.playStalled(e)) } sendMediaEngineStalled(e) { var t = Ry.MediaEngineStalled; this.fillAndFire(t, this.query.mediaEngineStalled(e)) } sendKeySessionComplete(e) { var t = Ry.KeySessionComplete; this.fillAndFire(t, this.query.keySessionComplete(e)) } sendPlayLikelyToKeepUp(e) { var t = Ry.PlayLikelyToKeepUp; this.fillAndFire(t, this.query.playLikelyToKeepUp(e)) } sendPlayRateChange(e) { var t = Ry.PlayRateChanged; this.fillAndFire(t, this.query.playRateChanged(e)) } sendSwitchComplete(e) { var t = Ry.SwitchComplete; this.fillAndFire(t, this.query.switchComplete(e)) } sendVariantEnded(e) { var t = Ry.VariantEnded; this.fillAndFire(t, this.query.variantEnded(e)) } sendPlayError(e) { var t = Ry.PlayError; this.fillAndFire(t, this.query.playError(e)) } sendNwError(e) { var t = Ry.NwError; this.fillAndFire(t, this.query.nwError(e)) } sendPeriodic(e) { var t = Ry.Periodic; this.fillAndFire(t, this.query.periodic(e)) } fillAndFire(e, t) { var r = e === Ry.PlayEnded || e === Ry.Periodic ? 1 : 0; if (this.reportingAgent) { let i = {}; Object.entries(t).forEach(([e,t])=>{ "object" == typeof (t = ne(t) ? Number(Number(t).toFixed(2)) : t) ? "ServerInfo" === e && Object.entries(t).forEach(([e,t])=>{ i[e] = t } ) : i[e] = t } ), i = JSON.parse(JSON.stringify(i)); try { this.reportingAgent.issueReportingEvent(e, i, r) } catch (e) {} } } } class Ny extends Od { constructor(e, t) { super(e), this.logger = t } get activeEntity() { return this.getActive() } entity(e) { return this.getEntity(e) } playEnded(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playEndedRecord } periodic(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.periodicRecord } playStalled(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playStalledRecord } mediaEngineStalled(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.mediaEngineStalledRecord } keySessionComplete(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.keySessionCompleteRecord } playLikelyToKeepUp(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playLikelyToKeepUpRecord } playRateChanged(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playRateChangedRecord } switchComplete(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.switchCompleteRecord } variantEnded(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.variantEndedRecord } playError(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.playErrorRecord } nwError(e) { return null === (e = this.getEntity(e)) || void 0 === e ? void 0 : e.nwErrorRecord } } class Fy extends pd { constructor(e) { super({}, { name: "rtc-store", idKey: "itemId", producerFn: vc, resettable: !0 }), this.logger = e } createEntity(e) { e = { itemId: e, sessionControlRecord: { state: "RTC_STATE_INIT", rate: 0, oldRate: 0, eventStartTime: Date.now(), sessionStartTime: Date.now(), lastLikelyToKeepUpTime: Date.now(), lastPeriodicTime: Date.now(), playLikelyToKeepUpEventCounter: 1, periodicEventCounter: 1, activeKeySessions: {}, intervalVariantList: {}, sessionVariantList: {} }, playEndedRecord: {}, periodicRecord: {}, playStalledRecord: {}, keySessionCompleteRecord: {}, playLikelyToKeepUpRecord: {}, playRateChangedRecord: {}, playErrorRecord: {}, mediaEngineStalledRecord: {}, switchCompleteRecord: {}, variantEndedRecord: {}, nwErrorRecord: {} }; this.add(e) } updateEnded(e) { this._prepareEventPlayEnded(e) } updatePeriodic(e, t) { this._prepareEventPeriodic(e, { isFinal: t }) } updateBufferStalled(e, t) { this.update(e, ({sessionControlRecord: e, variantEndedRecord: t, periodicRecord: i, playEndedRecord: r})=>{ e.rate = 0, t.StallCount = (t.StallCount || 0) + 1, i.StallCount = (i.StallCount || 0) + 1, r.StallCount = (r.StallCount || 0) + 1 } ), this._prepareEventPlayStalled(e, t) } updateSegmentKeyLoaded(e, r) { this.update(e, ({sessionControlRecord: e})=>{ const t = {} , i = r.timestamp; t.keyFormat = "identity", t.keyDeliveryTime = r.adt, t.currentMediaTime = r.currentTime, "RTC_STATE_INIT" === e.state && (t.keyInitTime = i - e.sessionStartTime), e.activeKeySessions[r.keyuri] = t } ), this._prepareEventKeySessionComplete(e, r) } updateLicenseResponseProcessed(e, i) { this.update(e, ({sessionControlRecord: e})=>{ const t = e.activeKeySessions[i.keyuri]; t.licenseResponseProcessTime = i.timestamp - t.licenseResponseSubmitTime, e.lastKeyDeliveryTime = t.keyDeliveryTime = i.timestamp - t.licenseChallengeStartTime, t.currentMediaTime = i.currentTime, e.finishedKeyUri = i.keyuri } ), this._prepareEventKeySessionComplete(e, i) } updateLicenseChallengeError(e, i) { this.update(e, ({sessionControlRecord: e})=>{ const t = e.activeKeySessions[i.keyuri]; e.lastKeyErrorType = t.keyErrorType = "licenseChallengeError", e.finishedKeyUri = i.keyuri } ), this._prepareEventKeySessionComplete(e, i) } updateLicenseResponseError(e, i) { this.update(e, ({sessionControlRecord: e})=>{ const t = e.activeKeySessions[i.keyuri]; e.lastKeyErrorType = t.keyErrorType = "licenseResponseError", e.finishedKeyUri = i.keyuri } ), this._prepareEventKeySessionComplete(e, i) } updateKeyAborted(e, t) { this.update(e, ({sessionControlRecord: e})=>{ e.activeKeySessions[t.keyuri].keyErrorType = "keyAborted", e.finishedKeyUri = t.keyuri } ), this._prepareEventKeySessionComplete(e, t) } updateCanPlay(e, t) { this.update(e, ({})=>{} ), this._prepareEventPlayLikelyToKeepUp(e, t) } updateRateChanged(e, t) { this.update(e, ({sessionControlRecord: e})=>{ e.rate = 100 * t.rate, 0 < t.rate && 0 === e.oldRate && (e.playInfo || (e.playInfo = []), e.playInfo.push({ latency: t.latency }), e.curLevelUrl || (e.curLevelUrl = t.url)) } ), this._prepareEventPlayRateChanged(e, t) } updateMediaError(e, r) { this.update(e, ({sessionControlRecord: e, periodicRecord: t, playEndedRecord: i})=>{ t.PlayerErrCount = (t.PlayerErrCount || 0) + 1, i.PlayerErrCount = (i.PlayerErrCount || 0) + 1, r.fatal && (e.rate = 0, t.FatalPlayerErrCount = (t.FatalPlayerErrCount || 0) + 1, i.FatalPlayerErrCount = (i.FatalPlayerErrCount || 0) + 1, i.ErrCode = r.details, i.ErrReason = r.code, i.ErrIsFatal = !0, i.ErrDomain = "mediaError") } ), r.fatal ? this._prepareEventPlayError(e, r) : this.update(e, ({sessionControlRecord: e})=>{ var t = r.details + "/" + r.code; e.nonFatalPlayErrList[t] = (e.nonFatalPlayErrList[t] || 0) + 1 } ) } updateMediaElementError(e, t) { let i; try { i = JSON.parse(t.message) } catch (e) { this.logger.warn(`message is not JSON, ignoring; ${t.message}`) } var r = i ? parseInt(i.ErrReason) : null , n = i ? parseInt(i.ErrDetail) : null; this._prepareEventPlayError(e, { domain: "mediaElementError", mediaElemCode: t.code, mediaElemReason: r, mediaElemDetail: n, code: null, details: null, fatal: null }) } updateMediaEngineStalled(e, t) { this.update(e, ({sessionControlRecord: e, variantEndedRecord: t, periodicRecord: i, playEndedRecord: r})=>{ e.rate = 0, t.MediaEngineStallCount = (t.MediaEngineStallCount || 0) + 1, i.MediaEngineStallCount = (i.MediaEngineStallCount || 0) + 1, r.MediaEngineStallCount = (r.MediaEngineStallCount || 0) + 1 } ), this._prepareEventMediaEngineStalled(e, t) } updateLevelSwitched(e, l) { this.update(e, ({sessionControlRecord: e, switchCompleteRecord: t, periodicRecord: i, playEndedRecord: r})=>{ i.SwCnt = (i.SwCnt || 0) + 1, r.SwCnt = (r.SwCnt || 0) + 1; var n = Date.now() , s = e.curLevelUrl , a = l.url , i = this._getVariantInfo(s, e) , r = this._getVariantInfo(a, e); let o, d = !1; s && (o = r.bandwidth < i.bandwidth ? "Down" : "Up", d = r.iframes), t.BadSw = this._isBadSw(o, e.lastSwitchDir || o, d, e.lastLevelIsIframe || d, n, e.lastSwitchTime || n, l.isSeeking), e.lastSwitchDir = o, e.lastSwitchTime = n, e.lastLevelIsIframe = d, e.curLevelUrl = a, e.variantStartTimeMedia = l.currentTime } ), this._prepareEventSwitchComplete(e, l) } updateLevelLoadError(e, o) { this.update(e, ({sessionControlRecord: e, switchCompleteRecord: t, periodicRecord: i, playEndedRecord: r})=>{ var n = Date.now(); let s, a = !1; if (e.curLevelUrl) { const t = this._getVariantInfo(e.curLevelUrl, e) , i = this._getVariantInfo(o.url, e); s = i.bandwidth < t.bandwidth ? "Down" : "Up", a = i.iframes } i.SwCnt = (i.SwCnt || 0) + 1, r.SwCnt = (r.SwCnt || 0) + 1, t.BadSw = this._isBadSw(s, e.lastSwitchDir || s, a, e.lastLevelIsIframe || a, n, e.lastSwitchTime || n, o.isSeeking), t.SwFail = !0 } ), this._prepareEventSwitchComplete(e, o) } updateVariantEnd(e, t) { this._prepareEventVariantEnded(e, t) } updateNwError(e, r) { this.update(e, ({sessionControlRecord: e, periodicRecord: t, playEndedRecord: i})=>{ t.NwErrCount = (t.NwErrCount || 0) + 1, i.NwErrCount = (i.NwErrCount || 0) + 1, r.fatal && (e.rate = 0, t.FatalNwErrCount = (t.FatalNwErrCount || 0) + 1, i.FatalNwErrCount = (i.FatalNwErrCount || 0) + 1, i.ErrCode = r.details, i.ErrReason = r.code, i.ErrIsFatal = !0, i.ErrDomain = "networkError") } ), r.fatal ? this._prepareEventNwError(e, r) : this.update(e, ({sessionControlRecord: e})=>{ var t = r.details + "/" + r.code; e.nonFatalNwErrList[t] = (e.nonFatalNwErrList[t] || 0) + 1 } ) } finalize(e, t) { switch (t) { case Ry.PlayEnded: this.update(e, ({sessionControlRecord: e})=>{ e.state = "RTC_STATE_STOP", e.oldRate = 0 } ), this.update(e, e=>{ e.playEndedRecord = {} } ); break; case Ry.Periodic: this.update(e, ({sessionControlRecord: t})=>{ t.lastPeriodicTime = Date.now(), t.periodicEventCounter += 1, Object.keys(t.intervalVariantList).forEach(e=>{ t.intervalVariantList[e].playTime = 0 } ) } ), this.update(e, e=>{ e.periodicRecord = {} } ); break; case Ry.PlayStalled: this.update(e, ({sessionControlRecord: e})=>{ e.state = "RTC_STATE_STALL", e.oldRate = 0 } ), this.update(e, e=>{ e.playStalledRecord = {} } ); break; case Ry.KeySessionComplete: this.update(e, ({sessionControlRecord: e})=>{ delete e.activeKeySessions[e.finishedKeyUri] } ), this.update(e, e=>{ e.keySessionCompleteRecord = {} } ); break; case Ry.PlayLikelyToKeepUp: this.update(e, ({sessionControlRecord: e})=>{ "RTC_STATE_PLAY" !== e.state && (e.state = "RTC_STATE_CANPLAY", e.lastLikelyToKeepUpTime = Date.now(), e.playLikelyToKeepUpEventCounter += 1) } ), this.update(e, e=>{ e.playLikelyToKeepUpRecord = {} } ); break; case Ry.PlayRateChanged: this.update(e, ({sessionControlRecord: e, playEndedRecord: t, playStalledRecord: i, mediaEngineStalledRecord: r, playErrorRecord: n, nwErrorRecord: s})=>{ 0 !== e.rate ? (e.state = "RTC_STATE_PLAY", delete t.LastStall, delete t.LastMediaEngineStall, delete t.LastPause, delete n.LastPause, delete s.LastPause) : (e.state = "RTC_STATE_PAUSE", delete i.LastResume, delete r.LastResume, delete n.LastResume, delete s.LastResume), e.oldRate = e.rate } ), this.update(e, e=>{ e.playRateChangedRecord = {} } ); break; case Ry.PlayError: this.update(e, ({sessionControlRecord: e})=>{ e.state = "RTC_STATE_PLAYERROR" } ), this.update(e, e=>{ e.playErrorRecord = {} } ); break; case Ry.MediaEngineStalled: this.update(e, ({sessionControlRecord: e})=>{ e.state = "RTC_STATE_MEDIAENGINESTALL", e.oldRate = 0 } ), this.update(e, e=>{ e.mediaEngineStalledRecord = {} } ); break; case Ry.SwitchComplete: this.update(e, e=>{ e.switchCompleteRecord = {}, e.sessionControlRecord.prevLevelUrl = e.sessionControlRecord.curLevelUrl } ); break; case Ry.VariantEnded: this.update(e, ({sessionControlRecord: e})=>{ e.decodedFramesForVariant = 0, e.decodedFramesForVariantSampleCount = 0 } ), this.update(e, e=>{ e.variantEndedRecord = {} } ); break; case Ry.NwError: this.update(e, ({sessionControlRecord: e})=>{ e.state = "RTC_STATE_NWERROR" } ), this.update(e, e=>{ e.nwErrorRecord = {} } ) } this.update(e, ({sessionControlRecord: e})=>{ e.eventStartTime = Date.now() } ) } updatePlaybackInfo(e, s) { this.update(e, ({sessionControlRecord: e, periodicRecord: t, playEndedRecord: i})=>{ s.droppedVideoFrames < e.droppedVideoFrames && (e.droppedVideoFrames = 0), s.decodedFrameCount < e.decodedFrameCount && (e.decodedFrameCount = 0); var r = s.droppedVideoFrames - (e.droppedVideoFrames || 0) , n = s.decodedFrameCount - (e.decodedFrameCount || 0); e.droppedVideoFrames = s.droppedVideoFrames, e.decodedFrameCount = s.decodedFrameCount, e.decodedFramesForVariant += n, e.decodedFramesForVariantSampleCount += 1, r && (3 <= r ? (t.GroupViFrDr = (t.GroupViFrDr || 0) + r, t.GroupViFrDrEvtCount = (t.GroupViFrDrEvtCount || 0) + 1, i.GroupViFrDr = (i.GroupViFrDr || 0) + r, i.GroupViFrDrEvtCount = (i.GroupViFrDrEvtCount || 0) + 1) : (t.SparseViFrDr = (t.SparseViFrDr || 0) + r, t.SparseViFrDrEvtCount = (t.SparseViFrDrEvtCount || 0) + 1, i.SparseViFrDr = (i.SparseViFrDr || 0) + r, i.SparseViFrDrEvtCount = (i.SparseViFrDrEvtCount || 0) + 1)) } ) } updateBufferAppended(e, t) { this.update(e, ({sessionControlRecord: e})=>{ e.bufferAppendInfo || (e.bufferAppendInfo = []), e.bufferAppendInfo.push(t) } ) } updateSeeked(e, t) { this.update(e, ({sessionControlRecord: e})=>{ e.seekInfo || (e.seekInfo = []), e.seekInfo.push(t) } ) } updateManifestParsed(e, r) { this.update(e, ({sessionControlRecord: e, periodicRecord: t, playEndedRecord: i})=>{ t.MasterPlaylistADT = (t.MasterPlaylistADT || 0) + r.adt, i.MasterPlaylistADT = (i.MasterPlaylistADT || 0) + r.adt; t = this._computeVariantInfo(r.levels); i.IsAudioOnly = r.isAudioOnly, i.IsGapless = r.isGapless, i.IsFirstItem = r.isFirstItem, i.ItemID = r.itemID, i.MaxVideoQltyIndex = t.maxVideoQltyIndex, i.MaxReWd = t.maxWidth, i.MaxReHt = t.maxHeight, e.manifestData = { variantList: t.variantList, varListString: t.varListString } } ) } updateFragLoaded(e, r) { this.update(e, ({sessionControlRecord: e, periodicRecord: t, playEndedRecord: i})=>{ if (t.MediaRequestsSent = (t.MediaRequestsSent || 0) + 1, i.MediaRequestsSent = (i.MediaRequestsSent || 0) + 1, r.cdnServer) { const e = r.cdnServer.toLowerCase(); "aapl" !== e && "akam" !== e && "llnw" !== e || (i.LastMediaCDNServer = e) } r.serverInfo && (i.ServerInfo = r.serverInfo), e.segmentMimeTypes || (e.segmentMimeTypes = []), void 0 === e.segmentMimeTypes.find(e=>e == r.contentType) && e.segmentMimeTypes.push(r.contentType), r.fragType === ul.Variant ? (e.variantVideoBytes = (e.variantVideoBytes || 0) + r.bytes, e.variantVideoDuration = (e.variantVideoDuration || 0) + r.duration, e.intervalVideoBytes = (e.intervalVideoBytes || 0) + r.bytes, e.intervalVideoDuration = (e.intervalVideoDuration || 0) + r.duration, e.sessionVideoBytes = (e.sessionVideoBytes || 0) + r.bytes, e.sessionVideoDuration = (e.sessionVideoDuration || 0) + r.duration, e.obrLast = 8 * r.bytes / (r.duration / 1e3), t.NetBytes = (t.NetBytes || 0) + r.bytes, t.ADT = (t.ADT || 0) + r.adt, t.SegmentProcessTime = (t.SegmentProcessTime || 0) + r.processTime, i.ADT = (i.ADT || 0) + r.adt, i.NetBytes = (i.NetBytes || 0) + r.bytes, i.SegmentProcessTime = (i.SegmentProcessTime || 0) + r.processTime) : r.fragType === ul.AltAudio && (e.variantAudioBytes = (e.variantAudioBytes || 0) + r.bytes, e.variantAudioDuration = (e.variantAudioDuration || 0) + r.duration, e.intervalAudioBytes = (e.intervalAudioBytes || 0) + r.bytes, e.intervalAudioDuration = (e.intervalAudioDuration || 0) + r.duration, e.sessionAudioBytes = (e.sessionAudioBytes || 0) + r.bytes, e.sessionAudioDuration = (e.sessionAudioDuration || 0) + r.duration) } ) } updateFragBuffered(e, i) { this.update(e, ({periodicRecord: e, playEndedRecord: t})=>{ i.fragType === ul.Variant && (e.SegmentParseTime = (e.SegmentParseTime || 0) + i.parseTime, t.SegmentParseTime = (t.SegmentParseTime || 0) + i.parseTime) } ) } updateLevelLoaded(e, n) { this.update(e, ({sessionControlRecord: e, playLikelyToKeepUpRecord: t, periodicRecord: i, playEndedRecord: r})=>{ t.PlaylistADT = (t.PlaylistADT || 0) + n.adt, i.PlaylistADT = (i.PlaylistADT || 0) + n.adt, r.PlaylistADT = (r.PlaylistADT || 0) + n.adt, i.MaxPlaylistDT = n.adt > i.MaxPlaylistDT ? n.adt : i.MaxPlaylistDT, r.MaxPlaylistDT = n.adt > r.MaxPlaylistDT ? n.adt : r.MaxPlaylistDT, r.PlayType = n.playType, this._setTargetDuration(n.url, n.targetduration, e), e.playlistMimeTypes || (e.playlistMimeTypes = []), void 0 === e.playlistMimeTypes.find(e=>e == n.contentType) && e.playlistMimeTypes.push(n.contentType); i = n.url, r = this._getVariantInfo(i, e); e.intervalVariantList[i] || (e.intervalVariantList[i] = Object.assign({}, r)), e.sessionVariantList[i] || (e.sessionVariantList[i] = Object.assign({}, r)) } ) } updateLevelsChanged(e, r) { this.update(e, ({sessionControlRecord: t, playEndedRecord: e})=>{ const i = this._computeVariantInfo(r.levels); e.MaxVideoQltyIndex = i.maxVideoQltyIndex, e.MaxReWd = i.maxWidth, e.MaxReHt = i.maxHeight, t.manifestData = { variantList: i.variantList, varListString: i.varListString }, Object.keys(i.variantList).forEach(e=>{ t.intervalVariantList[e] && (t.intervalVariantList[e].brRnk = i.variantList[e].brRnk), t.sessionVariantList[e] && (t.sessionVariantList[e].brRnk = i.variantList[e].brRnk) } ) } ) } updateLicenseChallengeRequested(e, r) { this.update(e, ({sessionControlRecord: e})=>{ const t = {} , i = r.timestamp; t.licenseChallengeStartTime = i, "RTC_STATE_INIT" === e.state && (t.keyInitTime = i - e.sessionStartTime), e.activeKeySessions[r.keyuri] = t } ) } updateLicenseChallengeReceived(e, i) { this.update(e, ({sessionControlRecord: e})=>{ const t = e.activeKeySessions[i.keyuri]; t.licenseChallengeRequestTime = i.timestamp - t.licenseChallengeStartTime } ) } updateLicenseChallengeSubmitted(e, i) { this.update(e, ({sessionControlRecord: e})=>{ const t = e.activeKeySessions[i.keyuri]; t.keyFormat = i.keyFormat, t.licenseChallengeSubmitTime = i.timestamp } ) } updateLicenseChallengeCreated(e, i) { this.update(e, ({sessionControlRecord: e})=>{ const t = e.activeKeySessions[i.keyuri]; t.cdmVersion = i.cdmVersion, t.licenseChallengeCreationTime = i.timestamp - t.licenseChallengeSubmitTime } ) } updateLicenseResponseRequested(e, t) { this.update(e, ({sessionControlRecord: e})=>{ e.activeKeySessions[t.keyuri].licenseResponseRequestTime = t.timestamp } ) } updateLicenseResponseReceived(e, i) { this.update(e, ({sessionControlRecord: e})=>{ const t = e.activeKeySessions[i.keyuri]; t.licenseResponseReceiveTime = i.timestamp - t.licenseResponseRequestTime } ) } updateLicenseResponseSubmitted(e, t) { this.update(e, ({sessionControlRecord: e})=>{ e.activeKeySessions[t.keyuri].licenseResponseSubmitTime = t.timestamp } ) } _prepareEventPlayEnded(e) { this.update(e, ({sessionControlRecord: e, playEndedRecord: t})=>{ t.AvgVideoBitrate = 8 * (e.sessionVideoBytes || 0) / (e.sessionVideoDuration || 1), t.AvgAudioBitrate = 8 * (e.sessionAudioBytes || 0) / (e.sessionAudioDuration || 1); var i = 1e3 * Math.round((t.NetBytes || 0) / 1e3); t.NetBytes = i; var r = t.ADT || 1 , n = t.ADT + t.SegmentProcessTime || 1 , s = t.ADT + t.SegmentProcessTime + t.SegmentParseTime || 1; t.TWOBR = 8 * i / (r / 1e3), t.PerceivedTWOBR = 8 * i / (n / 1e3), t.NetTWOBR = 8 * i / (s / 1e3); var s = this._findTimeWeightedValues("RTC_STATE_PLAY" === e.state ? Date.now() - e.eventStartTime : 0, e.sessionVariantList, e.curLevelUrl); t.PlayerTWIBR = s.twIBR, t.PlayerTWIABR = s.twIABR, t.TWBitRk = s.twBRnk; s = this._getVariantInfo(e.curLevelUrl, e); t.TargetDur = s.targetduration, t.ReWd = s.width, t.ReHt = s.height, t.VariantList = null === (s = e.manifestData) || void 0 === s ? void 0 : s.varListString; let a = ""; e.playlistMimeTypes && (e.playlistMimeTypes.forEach(e=>{ a += e + "," } ), a = a.slice(0, -1)); let o = ""; e.segmentMimeTypes && (e.segmentMimeTypes.forEach(e=>{ o += e + "," } ), o = o.slice(0, -1)), t.PlaylistMimeType = a, t.SegmentMimeType = o, t.Rate = e.rate } ), this._aggregateTimes(e) } _prepareEventPeriodic(e, o) { this.update(e, ({sessionControlRecord: e, periodicRecord: t, playEndedRecord: i})=>{ t.EventCounter = e.periodicEventCounter, t.PInterval = Date.now() - e.lastPeriodicTime, t.AvgVideoBitrate = 8 * (e.intervalVideoBytes || 0) / (e.intervalVideoDuration || 1), t.AvgAudioBitrate = 8 * (e.intervalAudioBytes || 0) / (e.intervalAudioDuration || 1); let r = t.NetBytes || 0; o.isFinal && (t.NetBytes = r = 1e3 * Math.round(r / 1e3)); var n = t.ADT || 1 , s = t.ADT + t.SegmentProcessTime || 1 , a = t.ADT + t.SegmentProcessTime + t.SegmentParseTime || 1; t.TWOBR = 8 * r / (n / 1e3), t.PerceivedTWOBR = 8 * r / (s / 1e3), t.NetTWOBR = 8 * r / (a / 1e3); var a = this._findTimeWeightedValues("RTC_STATE_PLAY" === e.state ? Date.now() - e.eventStartTime : 0, e.intervalVariantList, e.curLevelUrl); t.PlayerTWIBR = a.twIBR, t.PlayerTWIABR = a.twIABR, t.TWBitRk = a.twBRnk; a = this._getVariantInfo(e.curLevelUrl, e); t.TargetDur = a.targetduration, t.ReWd = a.width, t.ReHt = a.height, t.VariantList = null === (a = e.manifestData) || void 0 === a ? void 0 : a.varListString, t.Rate = e.rate; e = this._computeMediaStats(e); e && (t.MedianBufferAppendLatency = e.bufLatencyInfo.median, t.MaxBufferAppendLatency = e.bufLatencyInfo.max, t.MedianBufferAppendSize = e.bufSizeInfo.median, t.MaxBufferAppendSize = e.bufSizeInfo.max, t.MedianSeekLatency = e.seekLatencyInfo.median, t.MaxSeekLatency = e.seekLatencyInfo.max, t.MedianPlayLatency = e.playLatencyInfo.median, t.MaxPlayLatency = e.playLatencyInfo.max), this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventPlayStalled(e, s) { this.update(e, ({sessionControlRecord: e, playStalledRecord: t, playEndedRecord: i})=>{ var r = this._getVariantInfo(e.curLevelUrl, e) , n = Date.now(); t.MediaDur = s.mediaDur, t.BitRnk = r.brRnk, t.Codecs = r.codecs, t.LastLikelyToKeepUp = n - e.lastLikelyToKeepUpTime, t.LastSwitch = n - e.lastSwitchTime, t.StallDetectionTime = s.stallDurationMs, t.StallType = s.type, t.BufferLength = s.bufferLen, "networkError" === i.ErrDomain && (t.NwErrTime = i.NwErrTime, t.NwErrCode = i.ErrCode), t.LaSwDir = e.lastSwitchDir, t.TargetDur = r.targetduration, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.Rate = e.rate, t.OBRLast = e.obrLast, t.OBRMean = 8 * i.NetBytes / (i.ADT / 1e3), this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventKeySessionComplete(e, r) { this.update(e, ({sessionControlRecord: e, keySessionCompleteRecord: t, playEndedRecord: i})=>{ e = e.activeKeySessions[r.keyuri]; e ? (t.KeyFormat = e.keyFormat, t.CDMVersion = e.cdmVersion, t.LicenseChallengeRequestTime = e.licenseChallengeRequestTime, t.LicenseChallengeCreationTime = e.licenseChallengeCreationTime, t.LicenseResponseReceiveTime = e.licenseResponseReceiveTime, t.LicenseResponseProcessTime = e.licenseResponseProcessTime, t.KeyDeliveryTime = e.keyDeliveryTime, t.CurrentMediaTime = 1e3 * e.currentMediaTime, t.KeyInitTime = e.keyInitTime, t.KeyErrorType = e.keyErrorType, this._copyCommonKeys(t, i)) : this.logger.warn(`_prepareEventKeySessionComplete no keySessionInfo for ${oe(r.keyuri)}`) } ), this._aggregateTimes(e) } _prepareEventPlayLikelyToKeepUp(e, n) { this.update(e, ({sessionControlRecord: e, playLikelyToKeepUpRecord: t, playEndedRecord: i})=>{ var r = this._getVariantInfo(e.curLevelUrl, e); t.EventCounter = e.playLikelyToKeepUpEventCounter, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.MediaDur = n.mediaDur, t.BitRnk = r.brRnk, t.Codecs = r.codecs, t.TargetDur = r.targetduration, this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventPlayRateChanged(e, n) { this.update(e, ({sessionControlRecord: e, playRateChangedRecord: t, playEndedRecord: i})=>{ var r = this._getVariantInfo(e.curLevelUrl, e); t.Rate = e.rate, t.StNPT = n.currentTime, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.BitRnk = r.brRnk, t.MediaDur = n.mediaDur, t.Codecs = r.codecs, this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventPlayError(e, s) { this.update(e, ({sessionControlRecord: e, playErrorRecord: t, playEndedRecord: i})=>{ var r = this._getVariantInfo(e.curLevelUrl, e) , n = Date.now(); "mediaElementError" == s.domain ? (t.ErrDomain = t.ErrCode = "mediaElementError", t.ErrIsFatal = !0, t.ErrCodeMediaElement = s.mediaElemCode, t.ErrReason = s.mediaElemReason, t.ErrDetail = s.mediaElemDetail) : (t.ErrCode = s.details, t.ErrReason = s.code, t.ErrIsFatal = s.fatal, t.ErrDomain = "mediaError"), t.PlayerErrCount = s.count || 1, t.BitRnk = r.brRnk, t.MediaDur = s.mediaDur, t.PlayTime = i.PlayTime, t.PlayTimeWC = i.PlayTimeWC, t.PlayerIABR = r.avgBandwidth, t.PlayerIBR = r.bandwidth, t.LastLikelyToKeepUp = n - e.lastLikelyToKeepUpTime, t.LastSwitch = n - e.lastSwitchTime, t.VideoQltyIndex = r.qltyIndex, t.Rate = e.rate, t.KeyErrorType = e.lastKeyErrorType, t.KeyDeliveryTime = e.lastKeyDeliveryTime, this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventMediaEngineStalled(e, s) { this.update(e, ({sessionControlRecord: e, mediaEngineStalledRecord: t, playEndedRecord: i})=>{ var r = Date.now() , n = this._getVariantInfo(e.curLevelUrl, e); t.MediaDur = s.mediaDur, t.BitRnk = n.brRnk, t.Codecs = n.codecs, t.LastLikelyToKeepUp = r - e.lastLikelyToKeepUpTime, t.LastSwitch = r - e.lastSwitchTime, t.StallDetectionTime = s.stallDurationMs, t.StallType = s.type, t.BufferLength = s.bufferLen, t.LaSwDir = e.lastSwitchDir, t.TargetDur = n.targetduration, t.PlayerIABR = n.avgBandwidth, t.PlayerIBR = n.bandwidth, t.Rate = e.rate, t.OBRLast = e.obrLast, t.OBRMean = 8 * i.NetBytes / (i.ADT / 1e3), this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventSwitchComplete(e, s) { this.update(e, ({sessionControlRecord: e, switchCompleteRecord: t, playEndedRecord: i})=>{ var r = this._getVariantInfo(e.prevLevelUrl, e) , n = this._getVariantInfo(e.curLevelUrl, e); t.FrBitRnk = r.brRnk, t.ToBitRnk = n.brRnk, t.TimeToBitrate = Date.now() - e.sessionStartTime, t.MediaDur = s.mediaDur, t.Rate = e.rate, t.PlayerIBR = n.bandwidth, t.PlayerIABR = n.avgBandwidth, t.LastPlayerIBR = r.bandwidth, t.LastPlayerIABR = r.avgBandwidth, t.ReWd = n.width, t.ReHt = n.height, this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventVariantEnded(e, n) { this.update(e, ({sessionControlRecord: e, variantEndedRecord: t, playEndedRecord: i})=>{ var r = this._getVariantInfo(e.curLevelUrl, e); t.Rate = e.rate, t.VarAvgBitrate = r.avgBandwidth, t.VarPeakBitrate = r.bandwidth, t.VarBitRk = r.brRnk, t.VarSTTime = e.variantStartTimeMedia, t.VarEndTime = 1e3 * n.currentTime, t.IFR = r.framerate, t.ODR = e.decodedFramesForVariant / e.decodedFramesForVariantSampleCount, t.ReWd = r.width, t.ReHt = r.height, t.Codecs = r.codecs, t.AvgVideoBitrate = 8 * (e.variantVideoBytes || 0) / (e.variantVideoDuration || 1), t.AvgAudioBitrate = 8 * (e.variantAudioBytes || 0) / (e.variantAudioDuration || 1), this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _prepareEventNwError(e, n) { this.update(e, ({sessionControlRecord: e, nwErrorRecord: t, playEndedRecord: i})=>{ var r = this._getVariantInfo(e.curLevelUrl, e); t.ErrCode = n.details, t.ErrReason = n.code, t.ErrIsFatal = n.fatal, t.NwErrCount = n.count || 1, t.ErrDomain = "networkError", t.PlayTime = i.PlayTime, t.PlayTimeWC = i.PlayTimeWC, t.BitRnk = r.brRnk, t.Rate = e.rate, t.KeyErrorType = e.lastKeyErrorType, t.KeyDeliveryTime = e.lastKeyDeliveryTime, this._copyCommonKeys(t, i) } ), this._aggregateTimes(e) } _copyCommonKeys(e, t) { e.PlayType = t.PlayType, e.LastMediaCDNServer = t.LastMediaCDNServer, e.MaxVideoQltyIndex = t.MaxVideoQltyIndex, e.MaxReWd = t.MaxReWd, e.MaxReHt = t.MaxReHt, e.IsGapless = t.IsGapless, e.IsAudioOnly = t.IsAudioOnly, e.IsFirstItem = t.IsFirstItem, e.ItemID = t.ItemID, e.ServerInfo = t.ServerInfo } _computeVariantInfo(e) { const i = {}; let r = 0 , n = 0 , s = 0 , a = 0; const o = this._getMaxNormalizedPeak(e); e.forEach(e=>{ if (e.attrs) { const r = this._getVideoFourCC(e.attrs.CODECS) , n = this._getVideoQualityIndex(r, e.attrs["VIDEO-RANGE"]) || 0 , s = { codecs: e.attrs.CODECS, width: e.width, height: e.height, bandwidth: e.attrs.BANDWIDTH, avgBandwidth: e.attrs["AVERAGE-BANDWIDTH"], framerate: e.attrs["FRAME-RATE"], iframes: e.iframes, brRnk: this._getBitrateRank(e.attrs.BANDWIDTH, r, o), qltyIndex: n, targetduration: 0, playTime: 0 }; a = n > a ? n : a, i[e.url] = s } var t = e.width * e.height; t > s && (s = t, r = e.width, n = e.height) } ); e = 0 < Object.keys(i).length ? Object.values(i).map(e=>e.bandwidth + ":" + e.avgBandwidth).join(",") : void 0; return { variantList: i, varListString: e, maxVideoQltyIndex: a, maxWidth: r, maxHeight: n } } _getMaxNormalizedPeak(e) { let n = 0; return e.forEach(e=>{ e = e.attrs; if (e) { const t = e.BANDWIDTH || 0 , i = this._getNormalizedPeak(t, this._getVideoFourCC(e.CODECS)) , r = Math.max(t, i); n = r > n ? r : n } } ), n } _getNormalizedPeak(e, t) { return "object" == typeof Ly[t] ? 1.5 * e : +e } _getVideoFourCC(e) { return e && e.split(",").map(e=>e.split(".")[0].trim()).find(e=>!!Ly[e]) } _getVideoQualityIndex(e, t) { return "object" == typeof Ly[e] ? Ly[e][t] : Ly[e] } _getBitrateRank(e, t, i) { t = Math.max(1, this._getNormalizedPeak(e, t)); return Math.ceil(100 * t / i) } _findTimeWeightedValues(o, d, l) { const e = { twBRnk: 0, twIBR: 0, twIABR: 0 }; if (d) { let i = 0 , r = 0 , n = 0 , s = 0 , a = 0; Object.values(d).forEach(e=>{ let t = e.playTime; e === d[l] && (t += o || 0), t && (r += e.bandwidth * t, i += e.brRnk * t, n += t, e.avgBandwidth && (s += e.avgBandwidth * t, a += t)) } ), n && (e.twBRnk = i / n, e.twIBR = r / n), s && a && (e.twIABR = s / a) } return e } _computeMediaStats(e) { const t = e.bufferAppendInfo; let i = []; const r = []; t && t.forEach && t.forEach(e=>{ i.push(e.latency), r.push(e.size) } ); var n = this._computeStats(i) , s = this._computeStats(r) , a = e.seekInfo; i = [], a && a.forEach && e.seekInfo.forEach(e=>i.push(e.latency)); var o = this._computeStats(i) , a = e.playInfo; return i = [], a && a.forEach && e.playInfo.forEach(e=>i.push(e.latency)), { bufLatencyInfo: n, bufSizeInfo: s, seekLatencyInfo: o, playLatencyInfo: this._computeStats(i) } } _computeStats(e) { let t, i; if (e) { const r = e.filter(e=>0 < e); if (0 < r.length) { t = r.reduce((e,t)=>Math.max(e, t)); const e = r.length , n = r.sort((e,t)=>e - t) , s = Math.ceil(e / 2); i = e % 2 == 0 ? (n[s] + n[s - 1]) / 2 : n[s - 1] } } return { max: t, median: i } } _getVariantInfo(e, t) { return e && t.manifestData && t.manifestData.variantList && t.manifestData.variantList[e] ? t.manifestData.variantList[e] : {} } _setTargetDuration(e, t, i) { e && i.manifestData && i.manifestData.variantList && i.manifestData.variantList[e] && (i.manifestData.variantList[e].targetduration = t) } _isBadSw(e, t, i, r, n, s, a) { let o = n - s < 1e4 && t !== e && r === i && !a ? !0 : !1; return o } _aggregateTimes(e) { this.update(e, ({sessionControlRecord: t, playLikelyToKeepUpRecord: i, playStalledRecord: r, mediaEngineStalledRecord: n, switchCompleteRecord: s, playRateChangedRecord: a, variantEndedRecord: o, playErrorRecord: d, nwErrorRecord: l, periodicRecord: u, playEndedRecord: c})=>{ var h = Date.now() - t.eventStartTime; switch (t.state) { case "RTC_STATE_INIT": i.StartupTime = (i.StartupTime || 0) + h, u.InitTime = (u.InitTime || 0) + h, c.InitTime = (c.InitTime || 0) + h; break; case "RTC_STATE_CANPLAY": a.StartupTime = (a.StartupTime || 0) + h, u.InitTime = (u.InitTime || 0) + h, c.InitTime = (c.InitTime || 0) + h; break; case "RTC_STATE_PAUSE": u.PauseTime = (u.PauseTime || 0) + h, c.PauseTime = (c.PauseTime || 0) + h, a.LastPause = (a.LastPause || 0) + h, c.LastPause = (c.LastPause || 0) + h, d.LastPause = (d.LastPause || 0) + h, l.LastPause = (l.LastPause || 0) + h; break; case "RTC_STATE_STALL": o.StallTime = (o.StallTime || 0) + h, u.StallTime = (u.StallTime || 0) + h, c.StallTime = (c.StallTime || 0) + h, a.LastStall = (a.LastStall || 0) + h, d.LastStall = (d.LastStall || 0) + h, c.LastStall = (c.LastStall || 0) + h; break; case "RTC_STATE_MEDIAENGINESTALL": o.MediaEngineStallTime = (o.MediaEngineStallTime || 0) + h, u.MediaEngineStallTime = (u.MediaEngineStallTime || 0) + h, c.MediaEngineStallTime = (c.MediaEngineStallTime || 0) + h, a.LastMediaEngineStall = (a.LastMediaEngineStall || 0) + h, d.LastMediaEngineStall = (d.LastMediaEngineStall || 0) + h, c.LastMediaEngineStall = (c.LastMediaEngineStall || 0) + h; break; case "RTC_STATE_NWERROR": c.NwErrTime = (c.NwErrTime || 0) + h, u.NwErrTime = (u.NwErrTime || 0) + h; break; case "RTC_STATE_PLAYERROR": u.PlayErrTime = (u.PlayErrTime || 0) + h, c.PlayErrTime = (c.PlayErrTime || 0) + h; break; case "RTC_STATE_PLAY": { a.RateChangePlayTime = (a.RateChangePlayTime || 0) + h, s.PlayTime = (s.PlayTime || 0) + h, s.PlayTimeLastSW = (s.PlayTimeLastSW || 0) + h * (t.oldRate / 100), r.LastResume = (r.LastResume || 0) + h, n.LastResume = (n.LastResume || 0) + h, d.LastResume = (d.LastResume || 0) + h, l.LastResume = (l.LastResume || 0) + h, o.VarPlayTimeWC = (o.VarPlayTimeWC || 0) + h, o.VarPlayTime = (o.VarPlayTime || 0) + h * (t.oldRate / 100), u.PlayTimeWC = (u.PlayTimeWC || 0) + h, u.PlayTime = (u.PlayTime || 0) + h * (t.oldRate / 100), c.PlayTimeWC = (c.PlayTimeWC || 0) + h, c.PlayTime = (c.PlayTime || 0) + h * (t.oldRate / 100), n.PlayTime = c.PlayTime, r.PlayTime = c.PlayTime; const i = t.curLevelUrl; let e = t.intervalVariantList[i]; e.playTime = (e.playTime || 0) + h, e = t.sessionVariantList[i], e.playTime = (e.playTime || 0) + h; break } } } ) } } const By = { name: "rtc-service" }; class Uy { constructor(e, t, i, r) { this.hls = e, this.config = t, this.accessLog = i, this.logger = r, this.destroy$ = new zt, this.isSeeking = !1, this.seekStart = null, this.periodicInterval = t.rtcIntervalTimeout || 3e5, this.intervalFunc = null, this.rtcStore = new Fy(this.logger), this.rtcQuery = new Ny(this.rtcStore,this.logger), this.rtcComponent = new _y(this.rtcQuery,this.logger), i.setRTCQuery(this.rtcQuery), this.subscribeAndUpdateStore(), this.registerForEvents() } destroy() { this.destroy$.next(), this.clearPeriodic(), this.rtcStore.reset() } detachMedia() { this.clearPeriodic(); var e; try { e = this.hls.realCurrentTime, this.rtcStore.updateVariantEnd(this.rtcEventItemId(!0), { currentTime: e }), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.VariantEnded), this.rtcStore.updatePeriodic(this.rtcEventItemId(!0), !0), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.Periodic), this.rtcStore.updateEnded(this.rtcEventItemId(!0)), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.PlayEnded) } catch (e) { this.logger.warn(By, e) } } handleError(e) { var t = e instanceof p ? e : new V(!0,e.message,$.InternalError); t instanceof nu && !t.fatal ? (this.rtcStore.updateLevelLoadError(this.rtcEventItemId(), { url: t.url, mediaDur: this.hls.bufferedDuration, isSeeking: this.isSeeking }), this.sendAndFinalize(this.rtcEventItemId(), Ry.SwitchComplete)) : t.type === o ? (this.rtcStore.updateNwError(this.rtcEventItemId(), { fatal: t.fatal, details: t.details, code: null === (e = t.response) || void 0 === e ? void 0 : e.code }), this.sendAndFinalize(this.rtcEventItemId(), Ry.NwError)) : (this.rtcStore.updateMediaError(this.rtcEventItemId(), { fatal: t.fatal, details: t.details, code: null === (t = t.response) || void 0 === t ? void 0 : t.code }), this.sendAndFinalize(this.rtcEventItemId(), Ry.PlayError)) } handleMediaElementError(e) { this.rtcStore.updateMediaElementError(this.rtcEventItemId(), e), this.sendAndFinalize(this.rtcEventItemId(), Ry.PlayError) } handleFragLoaded(e, t) { var i, r, n; this.checkMediaOptionType(e.mediaOptionType) && (e.itemId !== this.rtcEventItemId() && this.logger.warn(By, `Frag id does not match current item id. Frag Id=${e.itemId}, playing id=${this.rtcEventItemId(!0)}, loading id=${null === (n = this.hls.loadingItem) || void 0 === n ? void 0 : n.itemId}`), i = t.tload - t.trequest, r = t.tload - t.tfirst, n = this.serverInfoInstance || {}, this.rtcStore.updateFragLoaded(e.itemId, { fragType: e.mediaOptionType, bytes: t.loaded, duration: e.duration, adt: i, processTime: r, contentType: t.contentType, cdnServer: t.cdnServer, serverInfo: n }), this.accessLog.updateFragLoaded(e.itemId, this.isSeeking, { fragType: e.mediaOptionType, bytes: t.loaded, duration: e.duration, adt: i, processTime: r, startPTS: e.start, endPTS: e.start + e.duration })) } handleFragBuffered(e) { var t; this.checkMediaOptionType(e.fragmentType) && (t = e.endDataAppend - e.startDataAppend, this.rtcStore.updateFragBuffered(this.rtcEventItemId(), { fragType: e.fragmentType, bytes: e.dataBytesAppend, parseTime: t })) } handleLevelLoaded(e, t) { var i; e ? (e.itemId !== this.rtcEventItemId() && this.logger.warn(By, `media option id does not match current item id. media Id=${e.itemId}, current id=${this.rtcEventItemId}`), e.mediaOptionType === ul.Variant && (i = t.tload - t.trequest, this.rtcStore.updateLevelLoaded(this.rtcEventItemId(), { url: e.url, targetduration: e.targetduration, adt: i, contentType: t.contentType, playType: e.type }))) : this.logger.warn(`handleLevelLoaded called with mediaOptionDetails as ${e}`) } handleLevelSwitched(e) { var t = { url: e.url, isSeeking: this.isSeeking, mediaDur: this.hls.bufferedDuration, currentTime: this.hls.realCurrentTime }; e.oldVariant && (this.rtcStore.updateVariantEnd(this.rtcEventItemId(), { currentTime: this.hls.realCurrentTime }), this.sendAndFinalize(this.rtcEventItemId(), Ry.VariantEnded)), this.rtcStore.updateLevelSwitched(this.rtcEventItemId(), t), this.sendAndFinalize(this.rtcEventItemId(), Ry.SwitchComplete) } handleLevelSwitching(e) { this.levelSwitchingUrl = e } handleLevelsChanged(e) { this.rtcStore.updateLevelsChanged(this.rtcEventItemId(), { levels: e }) } handleManifestParsed(e) { var t = e.stats.tload - e.stats.trequest; this.rtcStore.updateManifestParsed(this.rtcEventItemId(), { levels: e.levels, adt: t, contentType: e.stats.contentType, isAudioOnly: this.hls.inGaplessMode, isGapless: this.hls.inGaplessMode, isFirstItem: this.hls.isFirstItem, itemID: ((null === (e = this.hls.reportingAgent) || void 0 === e ? void 0 : e.SessionID) || Jd()) + "-" + this.rtcEventItemId() }) } handleSeek(e) { if ("SEEKING" === e) this.isSeeking = !0, this.seekStart = Date.now(); else if ("SEEKED" === e) { this.isSeeking = !1; let e = 0; this.seekStart && (e = Date.now() - this.seekStart), this.seekStart = null, this.rtcStore.updateSeeked(this.rtcEventItemId(!0), { latency: e }) } } handleDesiredRateChanged(e, t) { 0 === t || 1 < Math.abs(e) && 1 < Math.abs(t) ? (this.rtcStore.updateRateChanged(this.rtcEventItemId(!0), { rate: t, latency: 0, mediaDur: this.hls.bufferedDuration, currentTime: this.hls.realCurrentTime, url: this.levelSwitchingUrl }), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.PlayRateChanged)) : 1 !== e && 1 === t && (this.playStart = Date.now()), this.oldRate = e, this.newRate = t } handleVariantBufferAppended(e, t) { let i = 0; e && (i = Date.now() - e), this.rtcStore.updateBufferAppended(this.rtcEventItemId(), { latency: i, size: t }) } handleStalled(e, t) { var i = { type: e.type, stallDurationMs: e.stallDurationMs, bufferLen: t, mediaDur: this.hls.bufferedDuration } , t = this.rtcQuery.getEntity(this.rtcEventItemId(!0)).sessionControlRecord.state; e.type === Op.LowBuffer || e.type === Op.Seek && e.isLowBufferStall ? "RTC_STATE_PLAY" === t && (this.rtcStore.updateBufferStalled(this.rtcEventItemId(!0), i), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.PlayStalled)) : "RTC_STATE_PLAY" === t && (this.rtcStore.updateMediaEngineStalled(this.rtcEventItemId(!0), i), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.MediaEngineStalled)) } handlePlaybackInfo(e, t) { this.rtcStore.updatePlaybackInfo(this.rtcEventItemId(!0), { droppedVideoFrames: e, decodedFrameCount: t }), this.accessLog.updatePlaybackInfo(this.rtcEventItemId(!0), { droppedVideoFrames: e, decodedFrameCount: t }) } checkMediaOptionType(e) { return e === ul.Variant || e === ul.AltAudio || (this.logger.error(By, 'Should not have media option type = "%s" in RTC', Cl[e]), !1) } rtcEventItemId(e=!1) { return (this.hls.isPreloading ? e ? this.hls.playingItem : this.hls.loadingItem : this.hls.currentItem).itemId } subscribeAndUpdateStore() { this.hls.publicQueries$.pipe(Ra(([,e])=>this.mediaElementQueryListener(e)), $a(this.destroy$)).subscribe(), this.hls.itemQueue.activeItemById$.pipe(Ja(t=>{ if (t) { let e = !1; if (this.hls.userInfo ? this.hls.userInfo.internalBuild ? e = !0 : this.hls.userInfo.diagnosticsAndUsage && (e = this.config.enableRtcReporting) : e = this.config.enableRtcReporting, e) { const i = this.hls.reportingAgent; i ? this.rtcComponent.setReportingAgent(i) : this.logger.warn(By, "[RTCA] - Reporting is enabled but reportingAgent is null") } else this.rtcComponent.setReportingAgent(null); this.serverInfoInstance = null; t = t.itemId; this.rtcStore.createEntity(t), !this.hls.isFirstItem && this.hls.inGaplessMode || this.setPeriodic(t) } } ), $a(this.destroy$)).subscribe() } itemTransitioned(e, t) { this.rtcStore.updateVariantEnd(e, { currentTime: this.hls.realCurrentTime }), this.sendAndFinalize(e, Ry.VariantEnded), this.rtcStore.updatePeriodic(e, !0), this.sendAndFinalize(e, Ry.Periodic), this.rtcStore.updateEnded(e), this.sendAndFinalize(e, Ry.PlayEnded), this.setPeriodic(t) } mediaElementQueryListener(e) { return e.gotPlaying$.pipe(Ja(e=>{ if (e) { const e = this.oldRate , t = this.newRate || 1; 1 < Math.abs(e) && 1 < Math.abs(t) || (this.rtcStore.updateCanPlay(this.rtcEventItemId(!0), { mediaDur: this.hls.bufferedDuration }), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.PlayLikelyToKeepUp), this.rtcStore.updateRateChanged(this.rtcEventItemId(!0), { rate: t, latency: ne(this.playStart) ? Date.now() - this.playStart : 0, mediaDur: this.hls.bufferedDuration, currentTime: this.hls.realCurrentTime, url: this.levelSwitchingUrl }), this.sendAndFinalize(this.rtcEventItemId(!0), Ry.PlayRateChanged)) } } )) } registerForEvents() { const e = wc(this.hls, this); nn(e.event(P.KEY_REQUEST_STARTED, this.keyRequestStarted, this), e.event(P.KEY_LOADED, this.keyLoaded, this)).pipe($a(this.destroy$)).subscribe() } keyRequestStarted(e) { e.timestamp = Date.now(), this.rtcStore.updateLicenseChallengeRequested(this.rtcEventItemId(), e) } keyLoaded(e) { e.timestamp = Date.now(), e.currentTime = this.hls.realCurrentTime, this.rtcStore.updateSegmentKeyLoaded(this.rtcEventItemId(), e) } licenseChallengeReceived(e) { this.rtcStore.updateLicenseChallengeReceived(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri }) } licenseChallengeSubmitted(e) { this.rtcStore.updateLicenseChallengeSubmitted(this.rtcEventItemId(), { timestamp: Date.now(), keyFormat: e.keyFormat, keyuri: e.keyuri }) } licenseChallengeCreated(e) { this.rtcStore.updateLicenseChallengeCreated(this.rtcEventItemId(), { timestamp: Date.now(), cdmVersion: e.cdmVersion, keyuri: e.keyuri }), this.rtcStore.updateLicenseResponseRequested(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri }) } licenseResponseSubmitted(e) { this.rtcStore.updateLicenseResponseReceived(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri }), this.rtcStore.updateLicenseResponseSubmitted(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri }) } licenseResponseProcessed(e) { this.rtcStore.updateLicenseResponseProcessed(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri, currentTime: this.hls.realCurrentTime }), this.sendAndFinalize(this.rtcEventItemId(), Ry.KeySessionComplete) } licenseChallengeError(e) { this.rtcStore.updateLicenseChallengeError(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri }), this.sendAndFinalize(this.rtcEventItemId(), Ry.KeySessionComplete) } licenseResponseError(e) { this.rtcStore.updateLicenseResponseError(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri }), this.sendAndFinalize(this.rtcEventItemId(), Ry.KeySessionComplete) } keyAborted(e) { var t; null != (null === (t = this.rtcQuery.getEntity(this.rtcEventItemId())) || void 0 === t ? void 0 : t.sessionControlRecord.activeKeySessions[e.keyuri]) ? (this.rtcStore.updateKeyAborted(this.rtcEventItemId(), { timestamp: Date.now(), keyuri: e.keyuri }), this.sendAndFinalize(this.rtcEventItemId(), Ry.KeySessionComplete)) : this.logger.warn(`keyAbort called without active key session ${oe(e.keyuri)}`) } setPeriodic(e) { this.clearPeriodic(), this.intervalFunc = setInterval(this.handlePeriodic.bind(this, e), this.periodicInterval) } handlePeriodic(e) { this.rtcStore.updatePeriodic(e, !1), this.sendAndFinalize(e, Ry.Periodic) } clearPeriodic() { this.intervalFunc && clearInterval(this.intervalFunc), this.intervalFunc = null } sendAndFinalize(e, t) { switch (this.accessLog.addPlayTime(e), t) { case Ry.PlayEnded: this.rtcComponent.sendPlayEnded(e); break; case Ry.Periodic: this.rtcComponent.sendPeriodic(e); break; case Ry.PlayStalled: this.accessLog.updateStallCount(e), this.rtcComponent.sendPlayStalled(e); break; case Ry.KeySessionComplete: this.rtcComponent.sendKeySessionComplete(e); break; case Ry.PlayLikelyToKeepUp: this.accessLog.updateCanPlay(e), this.rtcComponent.sendPlayLikelyToKeepUp(e); break; case Ry.PlayRateChanged: this.rtcComponent.sendPlayRateChange(e); break; case Ry.PlayError: this.accessLog.addToErrorLog(e, "mediaError"), this.rtcComponent.sendPlayError(e); break; case Ry.MediaEngineStalled: this.accessLog.updateMediaEngineStallCount(e), this.rtcComponent.sendMediaEngineStalled(e); break; case Ry.SwitchComplete: this.accessLog.addToAccessLog(e), this.rtcComponent.sendSwitchComplete(e); break; case Ry.VariantEnded: this.rtcComponent.sendVariantEnded(e); break; case Ry.NwError: this.accessLog.addToErrorLog(e, "networkError"), this.rtcComponent.sendNwError(e); break; default: return void this.logger.error(By, `Unknown rtc event eventGroupId:${e}`) } this.rtcStore.finalize(e, t) } } function $y(t, o, d, l, u, c, h) { return e=>e.pipe(Up(), Ra(e=>{ return e ? Cr([Bi(e).pipe(xy(t.manifestLoadPolicy, d, t, l, null, u, c)), (n = t, s = o, a = h.mux, new Ut(e=>{ const t = new ay(n,s,a); return e.next(t), ()=>{ t.destroy() } } )), (i = t.trickPlaybackConfig, r = o, new Ut(e=>{ var t = new ql(i,r); return e.next(t), ()=>{} } ))]).pipe(ur(([e,t,i])=>({ rootPlaylistQuery: e, mediaParser: t, iframeMachine: i }))) : Bi(null); var i, r, n, s, a } )) } Ec; return class Vy extends Ec { constructor(e={}, t) { var i; if (super(), this.destroy$ = new zt, this.mediaElement$ = new gi(null), this.encryptedMediaElement$ = new gi(null), this.publicQueriesInternal$ = new gi(null), this.mediaElementAdapter = null, this.rpcService = null, this.rpcClients = null, this.platformService = bf(), this.keySystemAdapter = null, this.legibleSystemAdapter = null, this.sessionID = Jd(), this.statsService = (Bf = Bf || new Nf(Ff), Bf), this.gaplessCapable = !0, this.teardownWorker$ = new Hf, this.itemQueue = new jg, (e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && (e.liveSyncDuration || e.liveMaxLatencyDuration)) throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration"); const f = Object.assign(Object.assign({}, Al), e); i = (this.hlsConfig = f).buildType, ae = "production" === i; const r = this.sessionID; let n = "silent"; e.debug && (n = f.debugLevel), this.logger = null !== (i = this.logger) && void 0 !== i ? i : ([D,c={}] = [r, (u = { sendLogs: e.sendLogs, level: "log" === n ? "debug" : n, consoleOverride: "boolean" != typeof e.debug ? e.debug : void 0, buildType: f.buildType }, M = u.consoleOverride, Object.assign({ name: "hls", timestamp: u.sendLogs ? Ae.stdTimeFunctions.epochTime : Ae.stdTimeFunctions.isoTime, browser: { asObject: !0, serialize: !0, transmit: { send: (e,t)=>{} }, write: { debug: Ke.bind(null, Ve(M || console, "debug"), "debug"), info: Ke.bind(null, Ve(M || console, "info"), "info"), warn: Ke.bind(null, Ve(M || console, "warn"), "warn"), error: Ke.bind(null, Ve(M || console, "error"), "error"), fatal: Ke.bind(null, Ve(M || console, "error"), "fatal") } } }, u))], Be && Be.sessionId === D ? Be.warn("Logger Singleton already setup, returning existing singleton") : (Be = Ae(Ue(c)).child({ sessionId: D, name: "hls" }), Be.qe = e=>Be.info(e), Be.sessionId = D), Be), Lo = !1, Ro && (delete window.$$stores, delete window.$$queries), this.hlsConfig.audioPrimingDelay = 0, this.rootPlaylistService = (M = this.logger, Oy = new wy(Ay,M), Oy), this.customUrlLoader = Mc(), this.sessionDataLoader = new _p(f,Oc,this.customUrlLoader.load,this.logger); var s, a, o, d, l, u = f.liveMaxLatencyDurationCount, c = f.liveSyncDurationCount; if (ne(u) && ne(c) && u <= c) throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"'); if (ne(f.liveMaxLatencyDuration) && (f.liveMaxLatencyDuration <= f.liveSyncDuration || !ne(f.liveSyncDuration))) throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"'); const h = Xm(); h.setHlsEntity({ id: r, config: f }); const p = hg() , m = new gf(vf) , g = (Ph = Ph || new Dh(Mh), Ph); this.accessLogInstance = new jf(this,r), this.rtcService = new Uy(this,f,this.accessLogInstance,this.logger), this.playerEvents = new bg(this,this.logger,this.rtcService); const y = (D = this.platformService, l = D, (()=>{ if ("function" == typeof matchMedia) { var e = matchMedia("(dynamic-range: high)") , t = matchMedia("bad query"); if (e.media !== t.media) return nn(Bi(e), en(e, "change")).pipe(ur(e=>e.matches)) } return Bi(!0) } )().pipe(Ja(e=>{ l.updateSupportsHdr(e) } )).pipe(Ua(Ti))) , v = this.mediaElement$.pipe((s = f, o = (a = this).logger, d = this.teardownWorker$, e=>e.pipe(Ql.tag("playback.mediaElementServiceEpic.in"), Ra(e=>{ if (!e) return Bi(null); const t = new hf(e,mf,s,a,o,d); return t.openMediaSource(new MediaSource), nn(Bi(t), t) } ), Ql.tag("playback.mediaElementServiceEpic.emit"))), wa()) , S = this.itemQueue.activeItemById$.pipe(Ra(e=>e ? Vf(f, this.statsService, e, this.logger) : Ti)); this.rpcService = (()=>{ let e = f.createRPCService; return f.enableWorker && null == e && (e = Cf), null == e && (e = Of), e(this.logger) } )(), this.rpcClients = (M = this.rpcService, { crypto: new Ef(M), mux: new If(M) }); var b, T, E, I, w, A, O, k, C, u = Cr([this.itemQueue.activeItemById$.pipe($y(f, this.logger, this.rootPlaylistService, m, this.statsService, this.playerEvents, this.rpcClients), Ja(e=>{ var t = null == e ? void 0 : e.rootPlaylistQuery; this.publicQueriesInternal$.next([t, null]), this.iframeMachine = null == e ? void 0 : e.iframeMachine, t && this.playerEvents.triggerManifestParsed(t) } )), v.pipe((E = this.itemQueue.removedItems$, I = g, w = f, A = m, k = (O = this).rtcService, C = this.logger, e=>Cr([((n,s,a,o,d,l,u)=>e.pipe(Ql.tag("[Keys] playback.keySystemServiceEpic.in"), Ra(r=>r ? new Ut(e=>{ let t = new kh(n,r,a,o,d,l,u); const i = nn(Bi(t), s.pipe(Kr(e=>t.removeKeysForItems(e)), Ua(Ti))).subscribe(e); return function() { u.warn("[Keys] playback.keySystemServiceEpic.unsubscribe"), i.unsubscribe(), t.destroy().subscribe(), t = void 0 } } ) : Bi(null)), Ql.tag("[Keys] playback.keySystemServiceEpic.emit")))(I, E, w, A, O, k, C), ((t,i,r)=>e.pipe(Ql.tag("playback.legibleServiceEpic.in"), Ra(e=>e ? nn(Bi(e = new Rp(e,t,i,r)), e) : Bi(null)), Ql.tag("playback.legibleServiceEpic.emit")))(w, O, C), e]).pipe(ur(([e,t,i])=>({ keySystemAdapter: e, legibleSystemAdapter: t, mediaSink: i })))), Ja(({keySystemAdapter: e, legibleSystemAdapter: t, mediaSink: i})=>{ this.keySystemAdapter = e, this.legibleSystemAdapter = t, this.mediaElementAdapter = i } ))]).pipe(ur(([e,t])=>{ var {keySystemAdapter: i, legibleSystemAdapter: r, mediaSink: n} = t; if (!(e && i && r && n)) return null; var {rootPlaylistQuery: s, iframeMachine: t, mediaParser: e} = e; return { logger: this.logger, config: f, platformService: this.platformService, statsService: this.statsService, rtcService: this.rtcService, rpcClients: this.rpcClients, rootPlaylistService: this.rootPlaylistService, rootPlaylistQuery: s, mediaLibraryService: p, keySystemAdapter: i, legibleSystemAdapter: r, mediaSink: n, mediaParser: e, iframeMachine: t, customUrlLoader: this.customUrlLoader, gaplessInstance: this } } ), wa()).pipe(Ra(a=>{ if (!a) return Ti; const {rootPlaylistQuery: t, mediaSink: e, mediaLibraryService: i} = a; this.publicQueriesInternal$.next([t, e.mediaQuery]); const n = e.mediaQuery , r = Bi(a).pipe(ry()) , s = t.rootPlaylistEntity$.pipe(Up(), Cs(1), Ja(()=>{ this.commitEarlySelection(a.logger) } )) , o = $l(Cr([n.haveEnough$, t.sessionData$]), ([e])=>!0 === e, 1).pipe(Ra(([,e])=>this.sessionDataLoader.loadSessionData(e)), Ja(e=>{ this.rootPlaylistService.setSessionData(t.itemId, e) } ), Un(e=>(this.logger.error(e.message), Ti))) , d = Uf(t.itemId) , l = function(l, e, u, r, t) { const a = u.mediaQuery , i = Zd([a.seekTo$, a.bufferedSegmentsByType$(cl.Variant)]).pipe(ur(([e,t])=>{ const i = ne(null == e ? void 0 : e.pos) ? e.pos : a.currentTime , r = t.find(e=>e.startPTS <= i && e.endPTS > i) , n = a.getBufferInfo(i, l.maxBufferHole) , s = a.getCombinedBufferInfo(i, l.maxBufferHole); return { pos: i, sbTuple: n, combined: s, playingFrag: null !== (t = null == r ? void 0 : r.frag) && void 0 !== t ? t : null } } )) , n = Zd([e.getInFlightFragByType$(ul.Variant), e.enabledMediaOptionByType$(ul.Variant)]).pipe(Ra(([e,t])=>{ var i = r.getQueryForOption(t); return bn(Bi(e), Bi(t), i.mediaOptionDetails$) } ), ur(([e,t,i])=>[e, { variant: t, details: i }])) , s = Zd([t.bandwidthEstimate$, t.fragEstimate$, t.bufferEstimate$]); return Zd([a.readyState$, n, i, a.desiredRate$, s]).pipe(Hi(Zi), ur(([,e,t,i,r])=>{ var [n,s] = e , [a,e,r] = r; let o = e , d = r; return e && (o = { maxDurationSec: ne(e.maxDurationSec) ? e.maxDurationSec : l.defaultTargetDuration, avgParseTimeMs: ne(e.avgParseTimeMs) ? e.avgParseTimeMs : l.statDefaults.fragParseTimeMs }), r && (d = { avgBufferCreateMs: ne(r.avgBufferCreateMs) ? r.avgBufferCreateMs : l.statDefaults.fragBufferCreationDelayMs, avgInitFragAppendMs: ne(r.avgInitFragAppendMs) ? r.avgInitFragAppendMs : l.statDefaults.initFragAppendMs, avgDataFragAppendMs: ne(r.avgDataFragAppendMs) ? r.avgDataFragAppendMs : l.statDefaults.dataFragAppendMs }), a = function(e, t, i, h, p, r, n, s) { let a = function(e, t, i) { const {pos: r, combined: n, playingFrag: s} = h; if (0 === n.len) return !1; var a = 0 != p && 1 != p , o = t.details , d = o.fragments , t = oy(o) , i = Math.max(1, t * i); let l = a || n.len >= t || n.len >= i; a = d[o.fragments.length - 1], i = d[0].start + o.totalduration; let u = !1; if (s) { const c = _l.search(d, e=>s.discoSeqNum - e.discoSeqNum); u = e && s.discoSeqNum !== e.discoSeqNum || null == c || Fp(c, s) } return l && o.liveOrEvent ? l = r <= i - a.duration : o.liveOrEvent || (l = l || i - t <= r), l = l || u, l }(t, i, e.startTargetDurationFactor); var o = h.combined; if (!a && 0 < o.len) { const p = oy(i.details); a = function(n, e, t, i, r, s, a) { var o = null === (o = h.sbTuple[ul.Variant]) || void 0 === o ? void 0 : o.buffered; if ((null == o ? void 0 : o.len) >= t) return 0; if (!o || !n || !(n.start + n.duration > o.end && (n.start - o.end <= a || n.start <= o.end))) return 1 / 0; o = n.state; let d = n.tstart , l = 0; switch (o) { case "loading": l += function(e, t) { var {bwSample: i, duration: r} = n; return i ? (r = ne(i.total) ? 8 * i.total : Math.ceil(r * e), e = 8 * i.loaded, r -= e, i = e / (performance.now() - i.tfirst) * 1e3, t = t.avgBandwidth, r / (ne(i) ? Math.min(t, i) : t)) : 1 / 0 }(e, i), d = n.tstart + 1e3 * l; case "loaded": case "parsing": l += function(e, t) { return t = ne(r.avgParseTimeMs) ? t.avgParseTimeMs : 0, performance.now() < e ? t / 1e3 : Math.max(0, t - (performance.now() - e)) / 1e3 }(d, r), d = n.tstart + 1e3 * l; case "parsed": case "appending": l += function(e, t) { return t = ne(s.avgDataFragAppendMs) ? t.avgDataFragAppendMs : 0, performance.now() < e ? t / 1e3 : Math.max(0, t - (performance.now() - e)) / 1e3 }(d, s); break; case "appended": l = 0; break; default: l = 1 / 0 } return l }(t, i.variant.bitrate, p, r, n, s, e.maxBufferHole) <= o.len } return a }(l, n, s, t, i, a, o, d), u.haveEnough = a } ), ca(), Ra(([e,t])=>e !== t ? Bi(t) : Bi(t).pipe(ss(200))), Ja(e=>{} ), Ua(Ti)) }(f, (this.logger, t), e, i, d) , u = function() { const {config: e, mediaSink: t, rootPlaylistQuery: i, mediaLibraryService: r, gaplessInstance: n} = a , s = t.mediaQuery; return Zd([i.enabledAVOptions$.pipe(Ra(e=>bn(...e.map(e=>kl(e) ? r.getQueryForOption(e).mediaOptionDetails$ : Bi(null))))), s.msReadyState$, s.updating$, s.isIframeRate$, s.isBufferedToEnd$(e.maxBufferHole, !n.inGaplessMode)]).pipe(Ql.tag("checkForEndOfStream"), an(([,e,t,i,r])=>"open" === e && !1 === t && !i && r), Ja(([e])=>{ null != e[0] && e.every(e=>null == e || !1 === e.liveOrEvent && !1 === e.iframesOnly) && !n.inGaplessMode && t.endStream() } ), Ua(Ti)) }() , c = function() { const {config: o, iframeMachine: d, mediaSink: t} = a , l = t.mediaQuery; return l.desiredRate$.pipe(Ra(a=>jp(a) ? vn(0, Math.abs(1e3 / a)).pipe(ur(()=>{ let e = null; const t = l.seekable; if (!d.isStarted || t.length < 1) return e; var i = d.iframeClockTimeSeconds , r = o.leftMediaTimeToAutoPause , n = t.start(0) , s = t.end(t.length - 1); return 1 < a && s - i < r ? e = { newRate: 0, autoPausedRestartTime: s - r } : a < 0 && i - n < a / -2 && (e = { newRate: 1, autoPausedRestartTime: n }), e } ), Up(), Ja(e=>{ t.desiredRate = e.newRate, t.autoPausedRestartTime = e.autoPausedRestartTime } ), Ua(Ti)) : Ti)) }() , h = (t=>{ const {mediaSink: e, config: i} = t , r = e.mediaQuery; return !0 !== i.enableIFramePreloading ? Ti : r.desiredRate$.pipe(ur(jp), Es(), Ra(e=>e ? Ti : function(r) { const {mediaSink: e, rootPlaylistQuery: n, mediaLibraryService: s, logger: a, config: o} = r , d = e.mediaQuery; return d.waterLevelChangedForType$(cl.Variant).pipe(an(e=>e === kp.AboveHighWater), Ls(()=>n.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>{ var t = n.mediaOptionListQueries[ul.Variant].hasIframes , i = null !== (i = null === (i = s.getQuery().getEntity(n.itemId)) || void 0 === i ? void 0 : i.liveOrEvent) && void 0 !== i && i; return !t || i ? Ti : (i = Uf(n.itemId), e = pg(e), i = Dg(!0, o, n, e, d, i, a), i = n.variantMediaOptionById(i.variantMediaOption), fg(r, i)) } ), Ra(e=>{ var t = og(d.currentTime, n.discoSeqNum, 0, e, []); return null !== (e = null == t ? void 0 : t.foundFrag) && void 0 !== e && e.mediaFragment ? (t = t.foundFrag.mediaFragment, nn(Sg(r, t.keyTagInfo, { itemId: t.itemId, mediaOptionId: t.mediaOptionId }), mg(r, t))) : (a.warn(Vg, "Unable to find fragment for iframe prefetch"), Ti) } ), Cs(1), Ua(Ti), Un(e=>(a.error(Vg, `got error ${e.message} in prefetch`), Ti)), $s(()=>{} )))) }(t))) } )(a) , p = [s, r, o, l, $l(Zd([n.gotPlaying$, n.gotLoadStart$, n.readyState$]), ([e,t,i])=>!0 === e || !0 === t || 1 <= i).pipe(Ra(()=>n.ended$), Ra(e=>vn(0, e ? void 0 : 1e3)), Ja(()=>{ this.playbackInfo(f, n) } )), c, h, n.timeupdate$.pipe(ur(e=>{ if (this.inGaplessMode && this.isPreloading && ne(this.loadingItem.itemStartOffset) && e >= this.loadingItem.itemStartOffset) { const e = this.itemQueue.playingItem.itemId , t = this.itemQueue.loadingItem.itemId , i = { prevItemId: e, nextItemId: t, nextStartTime: this.loadingItem.itemStartOffset, nextDuration: n.msDuration - this.loadingItem.itemStartOffset }; this.itemQueue.updatePlayingItemId(), this.trigger(P.ITEM_TRANSITIONED, i), this.rtcService.itemTransitioned(e, t) } } )), this.updateLiveSeekableRange(t, e), u]; if (f.enablePerformanceLogging) { const a = bn(...Ml.map(r=>t.getInFlightFragByType$(r).pipe(Up(), Es((e,t)=>e.state === t.state), So(n.bufferedRangeTuple$), Ja(([e,t])=>{ const i = Object.assign(Object.assign({}, e), { name: Cl[r], buffered: void 0 }); "appended" === e.state && (i.buffered = t) } )))); p.push(a) } return nn(...p) } )), c = this.itemQueue.removedItems$.pipe(od(e=>{ var t; t = e, hg().remove(t), this.rootPlaylistService.removeItems(e) } )), D = h.getQuery().userSeek$.pipe((b = this.itemQueue, T = this.rootPlaylistService, e=>e.pipe(Up(), Ra(e=>Jr([Bi(e), b.activeItemById$.pipe(Up(), Ra(e=>T.getQueryForId(e.itemId).rootPlaylistEntity$), Cs(1))])), ur(([e,t])=>(T.setPendingSeek(t.itemId, e), e))))), M = h.getQuery().selectEntityAction(To.Add).pipe(Ja(()=>{ this.logger.warn(`new Hls instance added while old one still active sessionId:${r}`) } )); nn(v.pipe(Un(e=>{ var t; return e instanceof MediaError && (null === (t = this.rtcService) || void 0 === t || t.handleMediaElementError(e)), Ti } )), nn(y, D, S, c, u, this.teardownWorker$).pipe(Un(e=>this._handleError(e)))).pipe($s(()=>{ var e, t; try { this.detachMedia(), this.trigger(P.DESTROYING), this.playerEvents.destroy(), null === (e = this.accessLogInstance) || void 0 === e || e.destroy(), null === (t = this.rtcService) || void 0 === t || t.destroy(), hg().clear(), this.rootPlaylistService.removeAll(), this.itemQueue.clearQueue(), h.removeEntity(this.sessionID) } catch (e) { this.logger.error(`Got error in finalize ${e.message}`) } } ), $a(hn(this.destroy$, M))).subscribe() } get publicQueries$() { return this.publicQueriesInternal$.pipe(an(e=>Boolean(e) && Boolean(e[0]) && Boolean(e[1]))) } get _activeRootQuery() { var e = this.publicQueriesInternal$.value; return null !== (e = null == e ? void 0 : e[0]) && void 0 !== e ? e : null } get _mediaElementQuery() { var e = this.publicQueriesInternal$.value; return null !== (e = null == e ? void 0 : e[1]) && void 0 !== e ? e : null } static get version() { return "2.141.0" } static get Events() { return P } get Events() { return Vy.Events } static get DefaultConfig() { return de(Al) } get DefaultConfig() { return Vy.DefaultConfig } static isSupported() { try { const e = window.MediaSource || window.WebKitMediaSource , t = window.SourceBuffer || window.WebKitSourceBuffer , i = e && "function" == typeof e.isTypeSupported && e.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"') , r = !t || t.prototype && "function" == typeof t.prototype.appendBuffer && "function" == typeof t.prototype.remove; return !!i && !!r } catch (e) { return !1 } } commitEarlySelection(e) { var t = this.itemQueue.earlyAudioSelection; ne(t) && (this.audioSelectedPersistentID = t, this.itemQueue.earlyAudioSelection = null), ne(t = this.itemQueue.earlySubtitleSelection) && (this.subtitleSelectedPersistentID = t, this.itemQueue.earlySubtitleSelection = null) } _handleError(i) { var r; try { let t, e = i.message; if (this.logger.error(`Got unhandled or fatal error ${e}`, i), null === (r = this.rtcService) || void 0 === r || r.handleError(i), t = i instanceof p ? i : new V(!0,i.message,$.InternalError), t.fatal && this.isPreloading && (this.logger.warn("Fatal error seen while preloading, calling dequeueSource"), this.dequeueSource("FatalErrorWhileLoading")), t.fatal) { let e = Ul; if (this.mediaElementAdapter) { const r = this.mediaElementAdapter.mediaQuery , n = r.getCombinedBufferInfo(r.currentTime, 0); 0 < (null == n ? void 0 : n.len) && (e = $l(this.mediaElementAdapter.mediaQuery.stallInfo$, e=>null != e).pipe(ur(()=>{} ))) } return e.pipe(Ra(()=>(this.trigger(P.ERROR, t), Ti))) } this.trigger(P.ERROR, t) } catch (i) { throw this.logger.error(`Error thrown inside _handleError ${i.message}`, i), i } return Ti } updateLiveSeekableRange(e, t) { return e.enabledMediaOptionByType$(ul.Variant).pipe(Ra(e=>{ const t = pg(e); let i = 0; return t.mediaOptionDetailsEntity$.pipe(Up(), an(e=>{ var t = null !== e.stats && !1 === e.detailsLoading && e.lastUpdateMillis > i; return i = null !== (e = e.lastUpdateMillis) && void 0 !== e ? e : 0, t } )) } ), Ra(e=>(0 === e.unchangedCount && (e.mediaOptionDetails.liveOrEvent ? t.updateLiveSeekableRange(e.mediaOptionDetails) : t.clearLiveSeekableRange()), Ti))) } playbackInfo(i, r) { const n = this.mediaElement$.getValue(); if (n) { const s = n.readyState >= n.HAVE_FUTURE_DATA , a = { readyToPlay: s, playbackLikelyToKeepUp: r.haveEnough && s, rate: n.playbackRate, paused: n.paused, position: n.currentTime, duration: n.duration, seekableTimeRanges: Kf.timeRangeToArray(n.seekable), loadedTimeRanges: Kf.timeRangeToArray(n.buffered) }; let e = 0 , t = 0; if (Kf.isHtmlVideoElement(n)) { const o = n.getVideoPlaybackQuality; if (o && typeof o == typeof Function) { const o = n.getVideoPlaybackQuality(); e = a.droppedVideoFrames = o.droppedVideoFrames, a.corruptedVideoFrames = o.corruptedVideoFrames, a.totalVideoFrames = o.totalVideoFrames, t = a.totalVideoFrames - e } } else Kf.isWebkitMediaElement(n) && (e = a.droppedVideoFrames = n.webkitDroppedFrameCount, t = a.decodedFrameCount = n.webkitDecodedFrameCount); i.enablePerformanceLogging && r.getCombinedMediaSourceBufferInfo(i.maxBufferHole), null === (i = this.rtcService) || void 0 === i || i.handlePlaybackInfo(e, t) } } get currentItem() { return this.isPreloading ? this.playingItem : this.itemQueue.activeItem } get realCurrentTime() { var e, t = this._mediaElementQuery; if (this.iframeMachine && this.iframeMachine.isStarted) { const r = t.mediaElementDuration , e = this.iframeMachine.iframeClockTimeSeconds; return e > r ? r : e } let i = null !== (e = null == t ? void 0 : t.currentTime) && void 0 !== e ? e : NaN; return ne(i) && ne(null === (e = this.playingItem) || void 0 === e ? void 0 : e.itemStartOffset) && (i -= this.playingItem.itemStartOffset), i } set realCurrentTime(e) { var t; ne(null === (t = this.playingItem) || void 0 === t ? void 0 : t.itemStartOffset) && (e += this.playingItem.itemStartOffset), this.seekTo = e } get bufferedDuration() { var e; const t = this._mediaElementQuery; return null !== (e = null == t ? void 0 : t.getBufferedDuration()) && void 0 !== e ? e : 0 } get sessionData() { var e = this._activeRootQuery; return null == e ? void 0 : e.sessionData } get supportedFrameRates() { const e = this.hlsConfig.trickPlaybackConfig.enabled , t = [0, 1] , i = this._activeRootQuery , r = hg().getQuery(); return e && i && r.getEntity(i.itemId) && !1 === r.getEntity(i.itemId).liveOrEvent && t.push(8, 24, 48, 96), t } loadSource(e, i, t) { var r; if ("playready" === this.config.keySystemPreference && !this.config.enablePlayReadyKeySystem) throw new V(!0,"Playready key system is not supported now",$.UnsupportedKeySystemError); if (!e || !e.trim().length) throw new V(!0,"Empty loadSource url",$.EmptyLoadSourceError); e = fl.buildAbsoluteURL(window.location.href, e, { alwaysNormalize: !0 }), i && Object.keys(i).filter(e=>0 <= ["itemId", "streamID"].indexOf(e)).reduce((e,t)=>t in i ? Object.assign(e, { [t]: i[t] }) : e, {}), null !== (r = null == i ? void 0 : i.appData) && void 0 !== r && r.reportingAgent && (this.reportingAgent = i.appData.reportingAgent), null != i && i.userInfo && (this.userInfo = i.userInfo), null === (r = this.accessLogInstance) || void 0 === r || r.setupReporter(i.appData), null != i && i.platformInfo && this.platformService.updatePlatformInfo(i.platformInfo), this.itemQueue.setQueueItem(`item:${null !== (r = null == i ? void 0 : i.itemId) && void 0 !== r ? r : Jd()}`, e, t, null == i ? void 0 : i.platformInfo, null === (t = null == i ? void 0 : i.appData) || void 0 === t ? void 0 : t.serviceName), Xm().setStartTime(void 0) } queueSource(e, t, i) { var r; null != t && t.userInfo && (this.userInfo = t.userInfo); var n = null === (r = this._mediaElementQuery) || void 0 === r ? void 0 : r.getCombinedBufferInfo(null === (n = this._mediaElementQuery) || void 0 === n ? void 0 : n.currentTime, 0); let s = 0; n && (s = n.end), this.itemQueue.addQueueItem(`item:${null !== (n = null == t ? void 0 : t.itemId) && void 0 !== n ? n : Jd()}`, e, i, null == t ? void 0 : t.platformInfo, s, null === (t = null == t ? void 0 : t.appData) || void 0 === t ? void 0 : t.serviceName) } dequeueSource(e="ApplicationInitiated") { if (!this.isPreloading && "InvalidFormat" === e && this.isFirstItem) return this.logger.error("First item has invalid format for gapless. Probably video. Disabling gapless."), void (this.gaplessCapable = !1); var t, i; this.isPreloading ? (t = this.loadingItem.url, i = this.loadingItem.itemId, this.mediaElementAdapter.flushData(cl.Variant, this.loadingItem.itemStartOffset, 1 / 0), this.mediaElementAdapter.msDuration = this.loadingItem.itemStartOffset, this.itemQueue.resetLoadingItem(), "InvalidFormat" !== e && "FatalErrorWhileLoading" !== e || (this.gaplessCapable = !1), this.triggerItemEvicted({ url: t, itemId: i }, e)) : this.logger.warn(`Nothing to dequeue, no item is preloading dequeue reason: ${e}`) } triggerItemEvicted(e, t) { null !== e ? (t = { url: e.url, evictedItemId: e.itemId, reason: t }, Object.assign(Object.assign({}, t), { url: oe(e.url) }), this.trigger(P.ITEM_EVICTED, t)) : this.logger.error("dequeueSource called with no playing or loading item") } endSource() { this.gaplessCapable = !1, this.isPreloading && (this.logger.warn("EndSource called during preloading. Loading item will be removed"), this.mediaElementAdapter.flushData(cl.Variant, this.loadingItem.itemStartOffset, 1 / 0), this.mediaElementAdapter.msDuration = this.loadingItem.itemStartOffset, this.itemQueue.resetLoadingItem()) } get inGaplessMode() { return this.config.gapless && this.gaplessCapable } get isPreloading() { return this.itemQueue.isPreloading() } get isFirstItem() { return this.itemQueue.isFirstItem } get loadingItem() { return this.itemQueue.loadingItem } get playingItem() { return this.itemQueue.playingItem } get url() { return this.playingItem ? this.playingItem.url : this.loadingItem ? this.loadingItem.url : void 0 } destroy() { var e; return this.destroy$.next(), null != this.rpcService && this.rpcService.teardown(), null !== (e = this.encryptedMediaElement$.getValue()) && void 0 !== e && e.updating ? this.encryptedMediaElement$.getValue().done$.pipe(an(e=>e), Cs(2), Ra(e=>(this.encryptedMediaElement$.next(null), this.teardownWorker$.complete(), this.teardownWorker$))) : (this.encryptedMediaElement$.next(null), this.teardownWorker$.complete(), this.teardownWorker$) } attachMedia(e) { this.trigger(P.MEDIA_ATTACHING, { media: e }), this.mediaElement$.next(e), this.encryptedMediaElement$.next(e), this.trigger(P.MEDIA_ATTACHED, { media: e }) } detachMedia() { var e; this.mediaElement$.getValue() && (this.trigger(P.MEDIA_DETACHING), null === (e = this.rtcService) || void 0 === e || e.detachMedia(), this.mediaElement$.next(null), this.trigger(P.MEDIA_DETACHED)) } handleResolvedUri(e, t) { this.customUrlLoader.setCustomUrlResponse(e, { uri: t.uri, response: t }) } get variantOptions$() { return this.publicQueries$.pipe(Ra(e=>{ const [t,i] = e; return Cr([t.preferredMediaOptions$, i.desiredRate$]).pipe(ur(([e])=>{ const t = i.isIframeRate; return e[ul.Variant].filter(e=>(null !== (e = e.iframes) && void 0 !== e && e) === t).map(e=>e.mediaOptionId) } )) } )) } get altAudioOptions$() { return this.publicQueries$.pipe(Ra(e=>{ var [e] = e; return Bi(e.audioMediaSelectionOptions) } )) } get subtitleOptions$() { return this.publicQueries$.pipe(Ra(e=>{ var [e] = e; return Bi([{ MediaSelectionOptionsName: "Disable subtitle", MediaSelectionOptionsPersistentID: -1 }].concat(e.subtitleMediaSelectionOptions)) } )) } get levels() { var e; return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.preferredMediaOptions[ul.Variant]) && void 0 !== e ? e : [] } get audioTracks() { var e; return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.preferredMediaOptions[ul.AltAudio]) && void 0 !== e ? e : [] } get audioMediaOptions() { var e; return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.audioMediaSelectionOptions) && void 0 !== e ? e : [] } get subtitleMediaOptions() { var e; return null !== (e = null === (e = this._activeRootQuery) || void 0 === e ? void 0 : e.subtitleMediaSelectionOptions) && void 0 !== e ? e : [] } get playbackLikelyToKeepUp() { var e; return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.playbackLikelyToKeepUp) && void 0 !== e && e } get duration$() { return this.publicQueries$.pipe(Ra(e=>{ var [,e] = e; return e.mediaElementDuration$ } )) } get timeupdate$() { return this.publicQueries$.pipe(Ra(e=>{ var [,e] = e; return e.timeupdate$ } )) } get playing$() { return this.publicQueries$.pipe(Ra(e=>{ var [,e] = e; return e.gotPlaying$ } )) } get desiredRate$() { return this.publicQueries$.pipe(Ra(e=>{ var [,e] = e; return e.desiredRate$ } )) } set desiredRate(e) { null != e && this.setRate(e) } get desiredRate() { var e; return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.desiredRate) && void 0 !== e ? e : 0 } get effectiveRate() { var e; return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.effectiveRate) && void 0 !== e ? e : 0 } get iframeMode() { var e; return null !== (e = null === (e = this._mediaElementQuery) || void 0 === e ? void 0 : e.isIframeRate) && void 0 !== e && e } get accessLog() { return this.accessLogInstance && this._activeRootQuery ? this.accessLogInstance.getAccessLog(this._activeRootQuery.itemId) : [] } get errorLog() { return this.accessLogInstance ? this.accessLogInstance.errorLog : [] } setRate(e) { const t = this.logger.child({ name: "iframes" }); if (e === this.desiredRate) return -2; if (!this.mediaElementAdapter || isNaN(e)) return t.warn("unable to switch to rate, missing adapter or newRate isNaN"), -1; e = Number(e); const i = Math.abs(e); if (!this.supportedFrameRates.some(e=>e === i)) return t.warn(`unsupported rate(${e})`), -3; if (jp(e)) { const e = this._activeRootQuery; if (null == e || !e.mediaOptionListQueries[ul.Variant].hasIframes) return t.warn("no iframe variants available"), -1 } return this.mediaElementAdapter.desiredRate = e, 0 } get sessionData$() { return this.publicQueries$.pipe(Ra(([e])=>e.sessionData$)) } set skip(e) { this.mediaElementAdapter.skip = e } gaplessSeekTo(e) { e < this.playingItem.itemStartOffset && (this.logger.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${this.playingItem.itemStartOffset}`), e = this.playingItem.itemStartOffset), this.isPreloading && (e > this.loadingItem.itemStartOffset && (this.logger.warn(`[Gapless] Seeking past track boundary oldSeek=${e}, adjustedSeek=${this.loadingItem.itemStartOffset}`), e = this.loadingItem.itemStartOffset), e < this._mediaElementQuery.getBufferInfo(this._mediaElementQuery.currentTime, this.config.maxBufferHole)[0].buffered.start && this.dequeueSource("SeekToUnbufferedTimeRanges")), Xm().setUserSeek(e) } set seekTo(e) { var t = Number(e); ne(t) ? this.inGaplessMode ? this.gaplessSeekTo(t) : Xm().setUserSeek(t) : this.logger.error(`[seek] got invalid seek value ${e}`) } seekToDate(e) { Xm().setUserSeek(e) } get availableProgramDateTime() { return new Map(this._currentDateToMediaTimeTuple) } get _currentDateToMediaTimeTuple() { if (!this._activeRootQuery) return []; var e = this._activeRootQuery.enabledMediaOptionKeys[ul.Variant]; return kl(e) && null !== (e = null === (e = hg().getQueryForOption(e).mediaOptionDetails) || void 0 === e ? void 0 : e.dateMediaTimePairs) && void 0 !== e ? e : [] } get playingDate() { return Gg(this._currentDateToMediaTimeTuple, this.realCurrentTime) } set variantId(e) {} set audioSelectedPersistentID(e) { var t = this._activeRootQuery; null != t && t.preferredMediaOptions[ul.AltAudio] ? (t = t.itemId, this.rootPlaylistService.setEnabledMediaOptionTupleWithMatchedGroups(t, ul.AltAudio, e, { userInitiated: !0 })) : !ne(e) || e < 0 || (this.logger.warn(`[audio] no active item, defer audio track selection: persistentId ${e}`), this.itemQueue.earlyAudioSelection = e) } get audioSelectedPersistentID() { var e; return this._activeRootQuery ? null === (e = this._activeRootQuery.enabledAlternateMediaOptionByType(ul.AltAudio)) || void 0 === e ? void 0 : e.persistentID : this.itemQueue.earlyAudioSelection } set subtitleSelectedPersistentID(e) { var t = this._activeRootQuery , i = null == t ? void 0 : t.preferredMediaOptions[ul.Subtitle]; i ? (t = t.itemId, 0 === i.length && (!ne(e) || e < 0) || (ne(e) && -1 !== e ? this.rootPlaylistService.setEnabledMediaOptionTupleWithMatchedGroups(t, ul.Subtitle, e) : this.rootPlaylistService.setEnabledMediaOptionByType(t, ul.Subtitle, Ol))) : !ne(e) || e < 0 || (this.logger.warn(`[subtitle] no active item, defer subtitle track selection: persistentId ${e}`), this.itemQueue.earlySubtitleSelection = e) } get subtitleSelectedPersistentID() { var e; return this._activeRootQuery ? null === (e = this._activeRootQuery.enabledAlternateMediaOptionByType(ul.Subtitle)) || void 0 === e ? void 0 : e.persistentID : this.itemQueue.earlySubtitleSelection } get selectedMediaArray() { const e = this._activeRootQuery; if (!e) return []; const t = [] , i = e.enabledAlternateMediaOptionByType(ul.AltAudio) , r = e.enabledAlternateMediaOptionByType(ul.Subtitle) , n = i ? e.audioMediaSelectionOptions.find(e=>e.MediaSelectionOptionsPersistentID === i.persistentID) : void 0 , s = r ? e.subtitleMediaSelectionOptions.find(e=>e.MediaSelectionOptionsPersistentID === r.persistentID) : void 0; if (n) { const e = { MediaSelectionGroupMediaType: pl.AUDIO, MediaSelectionOptionsPersistentID: n.MediaSelectionOptionsPersistentID }; t.push(e) } if (s) { let e = hl.NO; s.MediaSelectionOptionsDisplaysNonForcedSubtitles && (e = s.MediaSelectionOptionsDisplaysNonForcedSubtitles); const i = { MediaSelectionGroupMediaType: pl.SUBTITLE, MediaSelectionOptionsDisplaysNonForcedSubtitles: e, MediaSelectionOptionsPersistentID: s.MediaSelectionOptionsPersistentID }; t.push(i) } return t } set selectedMediaArray(e) { this._activeRootQuery ? e.forEach(e=>{ e.MediaSelectionGroupMediaType === pl.AUDIO || e.MediaSelectionOptionsMediaType === pl.AUDIO ? this.audioSelectedPersistentID = e.MediaSelectionOptionsPersistentID : e.MediaSelectionGroupMediaType !== pl.SUBTITLE && e.MediaSelectionOptionsMediaType !== pl.SUBTITLE && e.MediaSelectionOptionsMediaType !== pl.CLOSEDCAPTION || (this.subtitleSelectedPersistentID = e.MediaSelectionOptionsPersistentID) } ) : this.logger.warn("selectedMediaArray: no active item") } getHTMLTextTrack(e) { return this.legibleSystemAdapter.getExistingHTMLTextTrackWithSubtitleTrackId(e) } get keysystems() { return this.keySystemAdapter.availableKeySystems } setProtectionData(e) { this.keySystemAdapter.initialize(e) } generateKeyRequest(e, t) { this.keySystemAdapter.generateRequest(e, t), this.rtcService.licenseChallengeReceived({ keyuri: e }) } setLicenseResponse(e, t) { this.keySystemAdapter.setLicenseResponse(e, t) } get bufferInfo$() { return this.publicQueries$.pipe(Ra(e=>{ const [,t] = e , i = Xm().getQuery().currentConfig; return nn(t.timeupdate$, t.bufferedRangeTuple$).pipe(so(1e3), ur(()=>{ var e = t.currentTime; return { combined: t.getCombinedBufferInfo(e, i.maxBufferHole), sbTuple: t.getBufferInfo(e, i.maxBufferHole) } } )) } )) } bufferInfoByType$(t) { return this.bufferInfo$.pipe(ur(e=>null === (e = null == e ? void 0 : e.sbTuple) || void 0 === e ? void 0 : e[t])) } levelWithPersistentId(e) { this.logger.warn("levelWithPersistentId is deprecated") } startLoad(e) { this.logger.warn("startLoad is deprecated"), ne(e) && (this.logger.warn(`[seek] Seeking to ${null == e ? void 0 : e.toFixed(3)} via deprecated "startLoad" method. Use loadSource(url, options, startTime) instead.`), this.seekTo = e) } stopLoad() {} get config() { return Object.assign(Object.assign({}, de(Ym())), { set startPosition(e) { qe().warn(`Setting start position ${null == e ? void 0 : e.toFixed(3)} using deprecated method`), Xm().setStartTime(e) } }) } get media() { return null != this.mediaElement$.value } set subtitleDisplay(e) { this.logger.warn(`set subtitleDisplay ${e} is deprecated`) } } } , "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || jy).Hls = t() }(!1); //# sourceMappingURL=hls.js.map