orchard/resources/cider-ui/apple-hls.js

31029 lines
1.2 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*! 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 ? "<redacted>" : 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 || "<anonymous>",
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 = {
"&amp;": "&",
"&lt;": "<",
"&gt;": ">",
"&lrm;": "",
"&rlm;": "",
"&nbsp;": " "
}
, 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(/<br(?: \/)?>/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 += "</" + this.getRootStyleTag(t.styleStack[e]) + ">",
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 += "</" + o + ">",
t.styleStack.splice(r - 1 - n);
break
}
"c" === o[0] ? (t.background = "",
t.foreground = "",
t.flash = !1,
s += "</c>") : "u" === o[0] ? (t.underline = !1,
s += "</u>") : "i" === o[0] && (t.italics = !1,
s += "</i>"),
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]*<plist/i.exec(e)
}(i) && (n = r)) {
const i = function n(e) {
if (!e)
return null;
const t = qe();
let s = null;
var a = e.childNodes;
if (a)
if (e.tagName) {
var i = null === (i = e.tagName) || void 0 === i ? void 0 : i.toLowerCase();
if ("plist" === i) {
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])
}
if ("array" === i) {
s = [];
for (let e = 0; e < a.length; ++e) {
const r = a[e];
r.tagName && s.push(n(r))
}
}
if ("dict" === i) {
let t, i, r = 0;
s = {};
for (let e = 0; e < a.length; e++) {
var o = a[e]
, d = null === (d = o.tagName) || void 0 === d ? void 0 : d.toLowerCase();
d && (r % 2 == 0 ? "key" === d && (t = n(o),
r++) : (i = n(o),
s[t] = i,
t = null,
i = null,
r++))
}
t && (s[t] = i,
t = null,
i = null)
} else if ("key" === i) {
const e = a[0];
s = e ? e.nodeValue : (t.warn(Lp, "Invalid dict key: Key is null, probably like this: <key/>"),
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"){
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