/** * @Author: zhangtq 2452618307@qq.com * @Date: 2024-11-18 13:33:30 * @LastEditors: zhangtq 2452618307@qq.com * @LastEditTime: 2024-11-18 13:36:39 * @FilePath: static/js/qx/utility/video-7.19.1.min.js * @Description: 这是默认设置,可以在设置》工具》File Description中进行配置 */ /** * @license * Video.js 7.19.1 * Copyright Brightcove, Inc. * Available under Apache License Version 2.0 * * * Includes vtt.js * Available under Apache License Version 2.0 * */ !function (e, t) { "object" == typeof exports && "undefined" != typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define(t) : (e = "undefined" != typeof globalThis ? globalThis : e || self).videojs = t() }(this, function () { "use strict"; for (var e, u = "7.19.1", i = {}, a = function (e, t) { return i[e] = i[e] || [], t && (i[e] = i[e].concat(t)), i[e] }, n = function (e, t) { t = a(e).indexOf(t); return !(t <= -1) && (i[e] = i[e].slice(), i[e].splice(t, 1), !0) }, l = { prefixed: !0 }, t = [ ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror", "fullscreen" ], ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror", "-webkit-full-screen" ], ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror", "-moz-full-screen" ], ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError", "-ms-fullscreen" ] ], r = t[0], s = 0; s < t.length; s++) if (t[s][1] in document) { e = t[s]; break } if (e) { for (var o = 0; o < e.length; o++) l[r[o]] = e[o]; l.prefixed = e[0] !== r[0] } var c = [], d = function (a, s) { return function (e, t, i) { var n, r = s.levels[t], t = new RegExp("^(" + r + ")$"); "log" !== e && i.unshift(e.toUpperCase() + ":"), i.unshift(a + ":"), c && (c.push([].concat(i)), n = c.length - 1e3, c.splice(0, 0 < n ? n : 0)), !window.console || (n = !(n = window .console[e]) && "debug" === e ? window.console.info || window.console.log : n) && r && t .test(e) && n[Array.isArray(i) ? "apply" : "call"](window.console, i) } }; var h = function t(i) { function n() { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; a("log", r, t) } var r = "info", a = d(i, n); return n.createLogger = function (e) { return t(i + ": " + e) }, n.levels = { all: "debug|log|warn|error", off: "", debug: "debug|log|warn|error", info: "log|warn|error", warn: "warn|error", error: "error", DEFAULT: r }, n.level = function (e) { if ("string" == typeof e) { if (!n.levels.hasOwnProperty(e)) throw new Error('"' + e + '" in not a valid log level'); r = e } return r }, (n.history = function () { return c ? [].concat(c) : [] }).filter = function (t) { return (c || []).filter(function (e) { return new RegExp(".*" + t + ".*").test(e[0]) }) }, n.history.clear = function () { c && (c.length = 0) }, n.history.disable = function () { null !== c && (c.length = 0, c = null) }, n.history.enable = function () { null === c && (c = []) }, n.error = function () { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; return a("error", r, t) }, n.warn = function () { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; return a("warn", r, t) }, n.debug = function () { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; return a("debug", r, t) }, n }("VIDEOJS"), p = h.createLogger, f = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; function m(e, t) { return e(t = { exports: {} }, t.exports), t.exports } var g = m(function (e) { function t() { return e.exports = t = Object.assign || function (e) { for (var t = 1; t < arguments.length; t++) { var i, n = arguments[t]; for (i in n) Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i]) } return e }, t.apply(this, arguments) } e.exports = t }), y = Object.prototype.toString, v = function (e) { return T(e) ? Object.keys(e) : [] }; function _(t, i) { v(t).forEach(function (e) { return i(t[e], e) }) } function b(i) { for (var e = arguments.length, t = new Array(1 < e ? e - 1 : 0), n = 1; n < e; n++) t[n - 1] = arguments[n]; return Object.assign ? g.apply(void 0, [i].concat(t)) : (t.forEach(function (e) { e && _(e, function (e, t) { i[t] = e }) }), i) } function T(e) { return !!e && "object" == typeof e } function S(e) { return T(e) && "[object Object]" === y.call(e) && e.constructor === Object } function w(e, t) { if (!e || !t) return ""; if ("function" != typeof window.getComputedStyle) return ""; var i; try { i = window.getComputedStyle(e) } catch (e) { return "" } return i ? i.getPropertyValue(t) || i[t] : "" } var E = window.navigator && window.navigator.userAgent || "", k = /AppleWebKit\/([\d.]+)/i.exec(E), C = k ? parseFloat(k.pop()) : null, I = /iPod/i.test(E), x = (jt = E.match(/OS (\d+)_/i)) && jt[1] ? jt[1] : null, A = /Android/i.test(E), P = function () { var e = E.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); if (!e) return null; var t = e[1] && parseFloat(e[1]), i = e[2] && parseFloat(e[2]); return t && i ? parseFloat(e[1] + "." + e[2]) : t || null }(), L = A && P < 5 && C < 537, D = /Firefox/i.test(E), O = /Edg/i.test(E), M = !O && (/Chrome/i.test(E) || /CriOS/i.test(E)), R = (zt = E.match(/(Chrome|CriOS)\/(\d+)/)) && zt[2] ? parseFloat(zt[2]) : null, N = Xt = !(Xt = (Xt = /MSIE\s(\d+)\.\d/.exec(E)) && parseFloat(Xt[1])) && /Trident\/7.0/i.test(E) && /rv:11.0/.test(E) ? 11 : Xt, U = /Safari/i.test(E) && !M && !A && !O, B = /Windows/i.test(E), F = Boolean(X() && ("ontouchstart" in window || window.navigator.maxTouchPoints || window.DocumentTouch && window.document instanceof window.DocumentTouch)), j = /iPad/i.test(E) || U && F && !/iPhone/i.test(E), H = /iPhone/i.test(E) && !j, q = H || j || I, V = (U || q) && !M, W = Object.freeze({ __proto__: null, IS_IPOD: I, IOS_VERSION: x, IS_ANDROID: A, ANDROID_VERSION: P, IS_NATIVE_ANDROID: L, IS_FIREFOX: D, IS_EDGE: O, IS_CHROME: M, CHROME_VERSION: R, IE_VERSION: N, IS_SAFARI: U, IS_WINDOWS: B, TOUCH_ENABLED: F, IS_IPAD: j, IS_IPHONE: H, IS_IOS: q, IS_ANY_SAFARI: V }); function G(e) { return "string" == typeof e && Boolean(e.trim()) } function z(e) { if (0 <= e.indexOf(" ")) throw new Error("class has illegal whitespace characters") } function X() { return document === window.document } function K(e) { return T(e) && 1 === e.nodeType } function Y() { try { return window.parent !== window.self } catch (e) { return !0 } } function Q(i) { return function (e, t) { if (!G(e)) return document[i](null); t = K(t = G(t) ? document.querySelector(t) : t) ? t : document; return t[i] && t[i](e) } } function $(e, i, t, n) { void 0 === e && (e = "div"), void 0 === i && (i = {}), void 0 === t && (t = {}); var r = document.createElement(e); return Object.getOwnPropertyNames(i).forEach(function (e) { var t = i[e]; -1 !== e.indexOf("aria-") || "role" === e || "type" === e ? (h.warn( "Setting attributes in the second argument of createEl()\nhas been deprecated. Use the third argument instead.\ncreateEl(type, properties, attributes). Attempting to set " + e + " to " + t + "."), r.setAttribute(e, t)) : "textContent" === e ? J(r, t) : r[e] === t && "tabIndex" !== e || (r[e] = t) }), Object.getOwnPropertyNames(t).forEach(function (e) { r.setAttribute(e, t[e]) }), n && ye(r, n), r } function J(e, t) { return "undefined" == typeof e.textContent ? e.innerText = t : e.textContent = t, e } function Z(e, t) { t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e) } function ee(e, t) { return z(t), e.classList ? e.classList.contains(t) : new RegExp("(^|\\s)" + t + "($|\\s)").test(e.className) } function te(e, t) { return e.classList ? e.classList.add(t) : ee(e, t) || (e.className = (e.className + " " + t).trim()), e } function ie(e, t) { return e ? (e.classList ? e.classList.remove(t) : (z(t), e.className = e.className.split(/\s+/).filter( function (e) { return e !== t }).join(" ")), e) : (h.warn("removeClass was called with an element that doesn't exist"), null) } function ne(e, t, i) { var n = ee(e, t); if ((i = "boolean" != typeof (i = "function" == typeof i ? i(e, t) : i) ? !n : i) !== n) return (i ? te : ie) (e, t), e } function re(i, n) { Object.getOwnPropertyNames(n).forEach(function (e) { var t = n[e]; null === t || "undefined" == typeof t || !1 === t ? i.removeAttribute(e) : i.setAttribute(e, ! 0 === t ? "" : t) }) } function ae(e) { var t = {}, i = ",autoplay,controls,playsinline,loop,muted,default,defaultMuted,"; if (e && e.attributes && 0 < e.attributes.length) for (var n = e.attributes, r = n.length - 1; 0 <= r; r--) { var a = n[r].name, s = n[r].value; "boolean" != typeof e[a] && -1 === i.indexOf("," + a + ",") || (s = null !== s), t[a] = s } return t } function se(e, t) { return e.getAttribute(t) } function oe(e, t, i) { e.setAttribute(t, i) } function ue(e, t) { e.removeAttribute(t) } function le() { document.body.focus(), document.onselectstart = function () { return !1 } } function ce() { document.onselectstart = function () { return !0 } } function de(e) { if (e && e.getBoundingClientRect && e.parentNode) { var t = e.getBoundingClientRect(), i = {}; return ["bottom", "height", "left", "right", "top", "width"].forEach(function (e) { void 0 !== t[e] && (i[e] = t[e]) }), i.height || (i.height = parseFloat(w(e, "height"))), i.width || (i.width = parseFloat(w(e, "width"))), i } } function he(e) { if (!e || e && !e.offsetParent) return { left: 0, top: 0, width: 0, height: 0 }; for (var t = e.offsetWidth, i = e.offsetHeight, n = 0, r = 0; e.offsetParent && e !== document[l .fullscreenElement];) n += e.offsetLeft, r += e.offsetTop, e = e.offsetParent; return { left: n, top: r, width: t, height: i } } function pe(e, t) { var i = { x: 0, y: 0 }; if (q) for (var n = e; n && "html" !== n.nodeName.toLowerCase();) { var r, a = w(n, "transform"); /^matrix/.test(a) ? (r = a.slice(7, -1).split(/,\s/).map(Number), i.x += r[4], i.y += r[5]) : /^matrix3d/.test(a) && (a = a.slice(9, -1).split(/,\s/).map(Number), i.x += a[12], i.y += a[ 13]), n = n.parentNode } var s = {}, o = he(t.target), u = he(e), l = u.width, c = u.height, e = t.offsetY - (u.top - o.top), o = t.offsetX - (u.left - o.left); return t.changedTouches && (o = t.changedTouches[0].pageX - u.left, e = t.changedTouches[0].pageY + u.top, q && (o -= i.x, e -= i.y)), s.y = 1 - Math.max(0, Math.min(1, e / c)), s.x = Math.max(0, Math.min(1, o / l)), s } function fe(e) { return T(e) && 3 === e.nodeType } function me(e) { for (; e.firstChild;) e.removeChild(e.firstChild); return e } function ge(e) { return "function" == typeof e && (e = e()), (Array.isArray(e) ? e : [e]).map(function (e) { return K(e = "function" == typeof e ? e() : e) || fe(e) ? e : "string" == typeof e && /\S/.test( e) ? document.createTextNode(e) : void 0 }).filter(function (e) { return e }) } function ye(t, e) { return ge(e).forEach(function (e) { return t.appendChild(e) }), t } function ve(e, t) { return ye(me(e), t) } function _e(e) { return void 0 === e.button && void 0 === e.buttons || (0 === e.button && void 0 === e.buttons || ( "mouseup" === e.type && 0 === e.button && 0 === e.buttons || 0 === e.button && 1 === e.buttons)) } var be, Te = Q("querySelector"), Se = Q("querySelectorAll"), we = Object.freeze({ __proto__: null, isReal: X, isEl: K, isInFrame: Y, createEl: $, textContent: J, prependTo: Z, hasClass: ee, addClass: te, removeClass: ie, toggleClass: ne, setAttributes: re, getAttributes: ae, getAttribute: se, setAttribute: oe, removeAttribute: ue, blockTextSelection: le, unblockTextSelection: ce, getBoundingClientRect: de, findPosition: he, getPointerPosition: pe, isTextNode: fe, emptyEl: me, normalizeContent: ge, appendContent: ye, insertContent: ve, isSingleLeftClick: _e, $: Te, $$: Se }), Ee = !1, ke = function () { if (!1 !== be.options.autoSetup) { var e = Array.prototype.slice.call(document.getElementsByTagName("video")), t = Array.prototype.slice.call(document.getElementsByTagName("audio")), i = Array.prototype.slice.call(document.getElementsByTagName("video-js")), n = e.concat(t, i); if (n && 0 < n.length) for (var r = 0, a = n.length; r < a; r++) { var s = n[r]; if (!s || !s.getAttribute) { Ce(1); break } void 0 === s.player && null !== s.getAttribute("data-setup") && be(s) } else Ee || Ce(1) } }; function Ce(e, t) { X() && (t && (be = t), window.setTimeout(ke, e)) } function Ie() { Ee = !0, window.removeEventListener("load", Ie) } X() && ("complete" === document.readyState ? Ie() : window.addEventListener("load", Ie)); function xe(e) { var t = document.createElement("style"); return t.className = e, t } function Ae(e, t) { e.styleSheet ? e.styleSheet.cssText = t : e.textContent = t } var Pe = 3; window.WeakMap || (ui = function () { function e() { this.vdata = "vdata" + Math.floor(window.performance && window.performance.now() || Date.now()), this.data = {} } var t = e.prototype; return t.set = function (e, t) { var i = e[this.vdata] || Pe++; return e[this.vdata] || (e[this.vdata] = i), this.data[i] = t, this }, t.get = function (e) { var t = e[this.vdata]; if (t) return this.data[t]; h("We have no data for this element", e) }, t.has = function (e) { return e[this.vdata] in this.data }, t.delete = function (e) { var t = e[this.vdata]; t && (delete this.data[t], delete e[this.vdata]) }, e }()); var Le, De = new (window.WeakMap ? WeakMap : ui); function Oe(e, t) { var i; De.has(e) && (0 === (i = De.get(e)).handlers[t].length && (delete i.handlers[t], e.removeEventListener ? e .removeEventListener(t, i.dispatcher, !1) : e.detachEvent && e.detachEvent("on" + t, i .dispatcher)), Object.getOwnPropertyNames(i.handlers).length <= 0 && (delete i.handlers, delete i.dispatcher, delete i.disabled), 0 === Object.getOwnPropertyNames(i).length && De .delete(e)) } function Me(t, i, e, n) { e.forEach(function (e) { t(i, e, n) }) } function Re(e) { if (e.fixed_) return e; function t() { return !0 } function i() { return !1 } if (!e || !e.isPropagationStopped || !e.isImmediatePropagationStopped) { var n, r, a, s = e || window.event; for (n in e = {}, s) "layerX" !== n && "layerY" !== n && "keyLocation" !== n && "webkitMovementX" !== n && "webkitMovementY" !== n && ("returnValue" === n && s.preventDefault || (e[n] = s[n])); e.target || (e.target = e.srcElement || document), e.relatedTarget || (e.relatedTarget = e .fromElement === e.target ? e.toElement : e.fromElement), e.preventDefault = function () { s.preventDefault && s.preventDefault(), e.returnValue = !1, s.returnValue = !1, e .defaultPrevented = !0 }, e.defaultPrevented = !1, e.stopPropagation = function () { s.stopPropagation && s.stopPropagation(), e.cancelBubble = !0, s.cancelBubble = !0, e .isPropagationStopped = t }, e.isPropagationStopped = i, e.stopImmediatePropagation = function () { s.stopImmediatePropagation && s.stopImmediatePropagation(), e.isImmediatePropagationStopped = t, e.stopPropagation() }, e.isImmediatePropagationStopped = i, null !== e.clientX && void 0 !== e.clientX && (r = document .documentElement, a = document.body, e.pageX = e.clientX + (r && r.scrollLeft || a && a .scrollLeft || 0) - (r && r.clientLeft || a && a.clientLeft || 0), e.pageY = e.clientY + ( r && r.scrollTop || a && a.scrollTop || 0) - (r && r.clientTop || a && a.clientTop || 0)), e .which = e.charCode || e.keyCode, null !== e.button && void 0 !== e.button && (e.button = 1 & e .button ? 0 : 4 & e.button ? 1 : 2 & e.button ? 2 : 0) } return e.fixed_ = !0, e } var Ne = function () { if ("boolean" != typeof Le) { Le = !1; try { var e = Object.defineProperty({}, "passive", { get: function () { Le = !0 } }); window.addEventListener("test", null, e), window.removeEventListener("test", null, e) } catch (e) { } } return Le }, Ue = ["touchstart", "touchmove"]; function Be(s, e, t) { if (Array.isArray(e)) return Me(Be, s, e, t); De.has(s) || De.set(s, {}); var o = De.get(s); o.handlers || (o.handlers = {}), o.handlers[e] || (o.handlers[e] = []), t.guid || (t.guid = Pe++), o .handlers[e].push(t), o.dispatcher || (o.disabled = !1, o.dispatcher = function (e, t) { if (!o.disabled) { e = Re(e); var i = o.handlers[e.type]; if (i) for (var n = i.slice(0), r = 0, a = n.length; r < a && !e .isImmediatePropagationStopped(); r++) try { n[r].call(s, e, t) } catch (e) { h.error(e) } } }), 1 === o.handlers[e].length && (s.addEventListener ? (t = !1, Ne() && -1 < Ue.indexOf(e) && (t = { passive: !0 }), s.addEventListener(e, o.dispatcher, t)) : s.attachEvent && s.attachEvent("on" + e, o .dispatcher)) } function Fe(e, t, i) { if (De.has(e)) { var n = De.get(e); if (n.handlers) { if (Array.isArray(t)) return Me(Fe, e, t, i); var r = function (e, t) { n.handlers[t] = [], Oe(e, t) }; if (void 0 !== t) { var a = n.handlers[t]; if (a) if (i) { if (i.guid) for (var s = 0; s < a.length; s++) a[s].guid === i.guid && a.splice(s--, 1); Oe(e, t) } else r(e, t) } else for (var o in n.handlers) Object.prototype.hasOwnProperty.call(n.handlers || {}, o) && r(e, o) } } } function je(e, t, i) { var n = De.has(e) ? De.get(e) : {}, r = e.parentNode || e.ownerDocument; return "string" == typeof t ? t = { type: t, target: e } : t.target || (t.target = e), t = Re(t), n.dispatcher && n.dispatcher.call(e, t, i), r && !t .isPropagationStopped() && !0 === t.bubbles ? je.call(null, r, t, i) : !r && !t.defaultPrevented && t .target && t.target[t.type] && (De.has(t.target) || De.set(t.target, {}), r = De.get(t.target), t .target[t.type] && (r.disabled = !0, "function" == typeof t.target[t.type] && t.target[t.type](), r .disabled = !1)), !t.defaultPrevented } function He(e, t, i) { if (Array.isArray(t)) return Me(He, e, t, i); function n() { Fe(e, t, n), i.apply(this, arguments) } n.guid = i.guid = i.guid || Pe++, Be(e, t, n) } function qe(e, t, i) { function n() { Fe(e, t, n), i.apply(this, arguments) } n.guid = i.guid = i.guid || Pe++, Be(e, t, n) } function Ve(e, t, i) { return t.guid || (t.guid = Pe++), (e = t.bind(e)).guid = i ? i + "_" + t.guid : t.guid, e } function We(t, i) { var n = window.performance.now(); return function () { var e = window.performance.now(); i <= e - n && (t.apply(void 0, arguments), n = e) } } function Ge(n, r, a, s) { var o; function e() { var e = this, t = arguments, i = function () { i = o = null, a || n.apply(e, t) }; !o && a && n.apply(e, t), s.clearTimeout(o), o = s.setTimeout(i, r) } return void 0 === s && (s = window), e.cancel = function () { s.clearTimeout(o), o = null }, e } function ze() { } var Xe, Ke = Object.freeze({ __proto__: null, fixEvent: Re, on: Be, off: Fe, trigger: je, one: He, any: qe }); ze.prototype.allowedEvents_ = {}, ze.prototype.addEventListener = ze.prototype.on = function (e, t) { var i = this.addEventListener; this.addEventListener = function () { }, Be(this, e, t), this.addEventListener = i }, ze.prototype.removeEventListener = ze.prototype.off = function (e, t) { Fe(this, e, t) }, ze.prototype.one = function (e, t) { var i = this.addEventListener; this.addEventListener = function () { }, He(this, e, t), this.addEventListener = i }, ze.prototype.any = function (e, t) { var i = this.addEventListener; this.addEventListener = function () { }, qe(this, e, t), this.addEventListener = i }, ze.prototype.dispatchEvent = ze.prototype.trigger = function (e) { var t = e.type || e; e = Re(e = "string" == typeof e ? { type: t } : e), this.allowedEvents_[t] && this["on" + t] && this["on" + t](e), je(this, e) }, ze.prototype.queueTrigger = function (e) { var t = this; Xe = Xe || new Map; var i = e.type || e, n = Xe.get(this); n || (n = new Map, Xe.set(this, n)); var r = n.get(i); n.delete(i), window.clearTimeout(r); r = window.setTimeout(function () { 0 === n.size && (n = null, Xe.delete(t)), t.trigger(e) }, 0); n.set(i, r) }; function Ye(e) { return "function" == typeof e.name ? e.name() : "string" == typeof e.name ? e.name : e.name_ || (e .constructor && e.constructor.name ? e.constructor.name : typeof e) } function Qe(e) { return "string" == typeof e && /\S/.test(e) || Array.isArray(e) && !!e.length } function $e(e, t, i) { if (!e || !e.nodeName && !it(e)) throw new Error("Invalid target for " + Ye(t) + "#" + i + "; must be a DOM node or evented object.") } function Je(e, t, i) { if (!Qe(e)) throw new Error("Invalid event type for " + Ye(t) + "#" + i + "; must be a non-empty string or array.") } function Ze(e, t, i) { if ("function" != typeof e) throw new Error("Invalid listener for " + Ye(t) + "#" + i + "; must be a function.") } function et(e, t, i) { var n, r, a = t.length < 3 || t[0] === e || t[0] === e.eventBusEl_, t = a ? (n = e.eventBusEl_, 3 <= t.length && t.shift(), r = t[0], t[1]) : (n = t[0], r = t[1], t[2]); return $e(n, e, i), Je(r, e, i), Ze(t, e, i), { isTargetingSelf: a, target: n, type: r, listener: t = Ve(e, t) } } function tt(e, t, i, n) { $e(e, e, t), e.nodeName ? Ke[t](e, i, n) : e[t](i, n) } var it = function (t) { return t instanceof ze || !!t.eventBusEl_ && ["on", "one", "off", "trigger"].every(function (e) { return "function" == typeof t[e] }) }, nt = { on: function () { for (var e = this, t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[ n]; var r, a = et(this, i, "on"), s = a.isTargetingSelf, o = a.target, u = a.type, l = a.listener; tt(o, "on", u, l), s || ((r = function () { return e.off(o, u, l) }).guid = l.guid, (s = function () { return e.off("dispose", r) }).guid = l.guid, tt(this, "on", "dispose", r), tt(o, "on", "dispose", s)) }, one: function () { for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[ i]; var n = et(this, t, "one"), a = n.isTargetingSelf, s = n.target, o = n.type, u = n.listener; a ? tt(s, "one", o, u) : ((a = function e() { r.off(s, o, e); for (var t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]; u.apply(null, i) }).guid = u.guid, tt(s, "one", o, a)) }, any: function () { for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[ i]; var n = et(this, t, "any"), a = n.isTargetingSelf, s = n.target, o = n.type, u = n.listener; a ? tt(s, "any", o, u) : ((a = function e() { r.off(s, o, e); for (var t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]; u.apply(null, i) }).guid = u.guid, tt(s, "any", o, a)) }, off: function (e, t, i) { !e || Qe(e) ? Fe(this.eventBusEl_, e, t) : (t = t, $e(e = e, this, "off"), Je(t, this, "off"), Ze(i, this, "off"), i = Ve(this, i), this.off("dispose", i), e.nodeName ? (Fe(e, t, i), Fe(e, "dispose", i)) : it(e) && (e.off(t, i), e.off("dispose", i))) }, trigger: function (e, t) { $e(this.eventBusEl_, this, "trigger"); var i = e && "string" != typeof e ? e.type : e; if (!Qe(i)) { i = "Invalid event type for " + Ye(this) + "#trigger; must be a non-empty string or object with a type key that has a non-empty value."; if (!e) throw new Error(i); (this.log || h).error(i) } return je(this.eventBusEl_, e, t) } }; function rt(e, t) { t = (t = void 0 === t ? {} : t).eventBusKey; if (t) { if (!e[t].nodeName) throw new Error('The eventBusKey "' + t + '" does not refer to an element.'); e.eventBusEl_ = e[t] } else e.eventBusEl_ = $("span", { className: "vjs-event-bus" }); return b(e, nt), e.eventedCallbacks && e.eventedCallbacks.forEach(function (e) { e() }), e.on("dispose", function () { e.off(), [e, e.el_, e.eventBusEl_].forEach(function (e) { e && De.has(e) && De.delete(e) }), window.setTimeout(function () { e.eventBusEl_ = null }, 0) }), e } var at = { state: {}, setState: function (e) { var i, n = this; return _(e = "function" == typeof e ? e() : e, function (e, t) { n.state[t] !== e && ((i = i || {})[t] = { from: n.state[t], to: e }), n.state[t] = e }), i && it(this) && this.trigger({ changes: i, type: "statechanged" }), i } }; function st(e, t) { return b(e, at), e.state = b({}, e.state, t), "function" == typeof e.handleStateChanged && it(e) && e.on( "statechanged", e.handleStateChanged), e } function ot(e) { return "string" != typeof e ? e : e.replace(/./, function (e) { return e.toLowerCase() }) } function ut(e) { return "string" != typeof e ? e : e.replace(/./, function (e) { return e.toUpperCase() }) } function lt() { for (var i = {}, e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; return t.forEach(function (e) { e && _(e, function (e, t) { S(e) ? (S(i[t]) || (i[t] = {}), i[t] = lt(i[t], e)) : i[t] = e }) }), i } var ct = window.Map || function () { function e() { this.map_ = {} } var t = e.prototype; return t.has = function (e) { return e in this.map_ }, t.delete = function (e) { var t = this.has(e); return delete this.map_[e], t }, t.set = function (e, t) { return this.map_[e] = t, this }, t.forEach = function (e, t) { for (var i in this.map_) e.call(t, this.map_[i], i, this) }, e }(), dt = window.Set || function () { function e() { this.set_ = {} } var t = e.prototype; return t.has = function (e) { return e in this.set_ }, t.delete = function (e) { var t = this.has(e); return delete this.set_[e], t }, t.add = function (e) { return this.set_[e] = 1, this }, t.forEach = function (e, t) { for (var i in this.set_) e.call(t, i, i, this) }, e }(), ht = m(function (e, t) { function i(e) { if (!e || "object" != typeof e || (t = e.which || e.keyCode || e.charCode) && (e = t), "number" == typeof e) return o[e]; var t = String(e), e = n[t.toLowerCase()]; return e || ((e = r[t.toLowerCase()]) ? e : 1 === t.length ? t.charCodeAt(0) : void 0) } i.isEventKey = function (e, t) { if (e && "object" == typeof e) { var i = e.which || e.keyCode || e.charCode; if (null == i) return !1; if ("string" == typeof t) { e = n[t.toLowerCase()]; if (e) return e === i; if (e = r[t.toLowerCase()]) return e === i } else if ("number" == typeof t) return t === i; return !1 } }; for (var n = (t = e.exports = i).code = t.codes = { backspace: 8, tab: 9, enter: 13, shift: 16, ctrl: 17, alt: 18, "pause/break": 19, "caps lock": 20, esc: 27, space: 32, "page up": 33, "page down": 34, end: 35, home: 36, left: 37, up: 38, right: 39, down: 40, insert: 45, delete: 46, command: 91, "left command": 91, "right command": 93, "numpad *": 106, "numpad +": 107, "numpad -": 109, "numpad .": 110, "numpad /": 111, "num lock": 144, "scroll lock": 145, "my computer": 182, "my calculator": 183, ";": 186, "=": 187, ",": 188, "-": 189, ".": 190, "/": 191, "`": 192, "[": 219, "\\": 220, "]": 221, "'": 222 }, r = t.aliases = { windows: 91, "⇧": 16, "⌥": 18, "⌃": 17, "⌘": 91, ctl: 17, control: 17, option: 18, pause: 19, break: 19, caps: 20, return: 13, escape: 27, spc: 32, spacebar: 32, pgup: 33, pgdn: 34, ins: 45, del: 46, cmd: 91 }, a = 97; a < 123; a++) n[String.fromCharCode(a)] = a - 32; for (var a = 48; a < 58; a++) n[a - 48] = a; for (a = 1; a < 13; a++) n["f" + a] = a + 111; for (a = 0; a < 10; a++) n["numpad " + a] = a + 96; var s, o = t.names = t.title = {}; for (a in n) o[n[a]] = a; for (s in r) n[s] = r[s] }); ht.code, ht.codes, ht.aliases, ht.names, ht.title; var pt = function () { function s(e, t, i) { var n = this; !e && this.play ? this.player_ = e = this : this.player_ = e, this.isDisposed_ = !1, this .parentComponent_ = null, this.options_ = lt({}, this.options_), t = this.options_ = lt(this .options_, t), this.id_ = t.id || t.el && t.el.id, this.id_ || (e = e && e.id && e.id() || "no_player", this.id_ = e + "_component_" + Pe++), this.name_ = t.name || null, t.el ? this .el_ = t.el : !1 !== t.createEl && (this.el_ = this.createEl()), t.className && this.el_ && t .className.split(" ").forEach(function (e) { return n.addClass(e) }), !1 !== t.evented && (rt(this, { eventBusKey: this.el_ ? "el_" : null }), this.handleLanguagechange = this.handleLanguagechange.bind(this), this.on(this.player_, "languagechange", this.handleLanguagechange)), st(this, this.constructor.defaultState), this .children_ = [], this.childIndex_ = {}, this.childNameIndex_ = {}, this.setTimeoutIds_ = new dt, this.setIntervalIds_ = new dt, this.rafIds_ = new dt, this.namedRafs_ = new ct, (this .clearingTimersOnDispose_ = !1) !== t.initChildren && this.initChildren(), this.ready(i), ! 1 !== t.reportTouchActivity && this.enableTouchActivity() } var e = s.prototype; return e.dispose = function () { if (!this.isDisposed_) { if (this.readyQueue_ && (this.readyQueue_.length = 0), this.trigger({ type: "dispose", bubbles: !1 }), this.isDisposed_ = !0, this.children_) for (var e = this.children_.length - 1; 0 <= e; e--) this.children_[e].dispose && this .children_[e].dispose(); this.children_ = null, this.childIndex_ = null, this.childNameIndex_ = null, this .parentComponent_ = null, this.el_ && (this.el_.parentNode && this.el_.parentNode .removeChild(this.el_), this.el_ = null), this.player_ = null } }, e.isDisposed = function () { return Boolean(this.isDisposed_) }, e.player = function () { return this.player_ }, e.options = function (e) { return e && (this.options_ = lt(this.options_, e)), this.options_ }, e.el = function () { return this.el_ }, e.createEl = function (e, t, i) { return $(e, t, i) }, e.localize = function (e, i, t) { void 0 === t && (t = e); var n = this.player_.language && this.player_.language(), r = this.player_.languages && this.player_.languages(), a = r && r[n], n = n && n.split("-")[0], n = r && r[n], t = t; return a && a[e] ? t = a[e] : n && n[e] && (t = n[e]), t = i ? t.replace(/\{(\d+)\}/g, function ( e, t) { t = i[t - 1]; return "undefined" == typeof t ? e : t }) : t }, e.handleLanguagechange = function () { }, e.contentEl = function () { return this.contentEl_ || this.el_ }, e.id = function () { return this.id_ }, e.name = function () { return this.name_ }, e.children = function () { return this.children_ }, e.getChildById = function (e) { return this.childIndex_[e] }, e.getChild = function (e) { if (e) return this.childNameIndex_[e] }, e.getDescendant = function () { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; for (var t = t.reduce(function (e, t) { return e.concat(t) }, []), n = this, r = 0; r < t.length; r++) if (!(n = n.getChild(t[r])) || !n.getChild) return; return n }, e.addChild = function (e, t, i) { if (void 0 === t && (t = {}), void 0 === i && (i = this.children_.length), "string" == typeof e) { var n = ut(e), r = t.componentClass || n; t.name = n; var a = s.getComponent(r); if (!a) throw new Error("Component " + r + " does not exist"); if ("function" != typeof a) return null; a = new a(this.player_ || this, t) } else a = e; return a.parentComponent_ && a.parentComponent_.removeChild(a), this.children_.splice(i, 0, a), a.parentComponent_ = this, "function" == typeof a.id && (this.childIndex_[a.id()] = a), (n = n || a.name && ut(a.name())) && (this.childNameIndex_[n] = a, this.childNameIndex_[ot( n)] = a), "function" == typeof a.el && a.el() && (n = null, this.children_[i + 1] && ( this.children_[i + 1].el_ ? n = this.children_[i + 1].el_ : K(this.children_[i + 1]) && (n = this.children_[i + 1])), this.contentEl().insertBefore(a.el(), n)), a }, e.removeChild = function (e) { if ((e = "string" == typeof e ? this.getChild(e) : e) && this.children_) { for (var t, i = !1, n = this.children_.length - 1; 0 <= n; n--) if (this.children_[n] === e) { i = !0, this.children_.splice(n, 1); break } i && (e.parentComponent_ = null, this.childIndex_[e.id()] = null, this .childNameIndex_[ut(e.name())] = null, this.childNameIndex_[ot(e.name())] = null, ( t = e.el()) && t.parentNode === this.contentEl() && this.contentEl() .removeChild(e.el())) } }, e.initChildren = function () { var i, t, e, n = this, r = this.options_.children; r && (i = this.options_, t = s.getComponent("Tech"), (e = Array.isArray(r) ? r : Object.keys(r)) .concat(Object.keys(this.options_).filter(function (t) { return !e.some(function (e) { return "string" == typeof e ? t === e : t === e.name }) })).map(function (e) { var t, e = "string" == typeof e ? r[t = e] || n.options_[t] || {} : (t = e.name, e); return { name: t, opts: e } }).filter(function (e) { e = s.getComponent(e.opts.componentClass || ut(e.name)); return e && !t.isTech(e) }).forEach(function (e) { var t = e.name, e = e.opts; !1 !== (e = void 0 !== i[t] ? i[t] : e) && ((e = !0 === e ? {} : e) .playerOptions = n.options_.playerOptions, (e = n.addChild(t, e)) && (n[ t] = e)) })) }, e.buildCSSClass = function () { return "" }, e.ready = function (e, t) { if (void 0 === t && (t = !1), e) return this.isReady_ ? void (t ? e.call(this) : this.setTimeout( e, 1)) : (this.readyQueue_ = this.readyQueue_ || [], void this.readyQueue_.push(e)) }, e.triggerReady = function () { this.isReady_ = !0, this.setTimeout(function () { var e = this.readyQueue_; this.readyQueue_ = [], e && 0 < e.length && e.forEach(function (e) { e.call(this) }, this), this.trigger("ready") }, 1) }, e.$ = function (e, t) { return Te(e, t || this.contentEl()) }, e.$$ = function (e, t) { return Se(e, t || this.contentEl()) }, e.hasClass = function (e) { return ee(this.el_, e) }, e.addClass = function (e) { te(this.el_, e) }, e.removeClass = function (e) { ie(this.el_, e) }, e.toggleClass = function (e, t) { ne(this.el_, e, t) }, e.show = function () { this.removeClass("vjs-hidden") }, e.hide = function () { this.addClass("vjs-hidden") }, e.lockShowing = function () { this.addClass("vjs-lock-showing") }, e.unlockShowing = function () { this.removeClass("vjs-lock-showing") }, e.getAttribute = function (e) { return se(this.el_, e) }, e.setAttribute = function (e, t) { oe(this.el_, e, t) }, e.removeAttribute = function (e) { ue(this.el_, e) }, e.width = function (e, t) { return this.dimension("width", e, t) }, e.height = function (e, t) { return this.dimension("height", e, t) }, e.dimensions = function (e, t) { this.width(e, !0), this.height(t) }, e.dimension = function (e, t, i) { if (void 0 !== t) return -1 !== ("" + (t = null === t || t != t ? 0 : t)).indexOf("%") || -1 !== ("" + t).indexOf("px") ? this.el_.style[e] = t : this.el_.style[e] = "auto" === t ? "" : t + "px", void (i || this.trigger("componentresize")); if (!this.el_) return 0; t = this.el_.style[e], i = t.indexOf("px"); return -1 !== i ? parseInt(t.slice(0, i), 10) : parseInt(this.el_["offset" + ut(e)], 10) }, e.currentDimension = function (e) { var t = 0; if ("width" !== e && "height" !== e) throw new Error( "currentDimension only accepts width or height value"); return t = w(this.el_, e), 0 !== (t = parseFloat(t)) && !isNaN(t) || (e = "offset" + ut(e), t = this.el_[e]), t }, e.currentDimensions = function () { return { width: this.currentDimension("width"), height: this.currentDimension("height") } }, e.currentWidth = function () { return this.currentDimension("width") }, e.currentHeight = function () { return this.currentDimension("height") }, e.focus = function () { this.el_.focus() }, e.blur = function () { this.el_.blur() }, e.handleKeyDown = function (e) { this.player_ && (ht.isEventKey(e, "Tab") || e.stopPropagation(), this.player_.handleKeyDown(e)) }, e.handleKeyPress = function (e) { this.handleKeyDown(e) }, e.emitTapEvents = function () { var i, t = 0, n = null; this.on("touchstart", function (e) { 1 === e.touches.length && (n = { pageX: e.touches[0].pageX, pageY: e.touches[0].pageY }, t = window.performance.now(), i = !0) }), this.on("touchmove", function (e) { var t; 1 < e.touches.length ? i = !1 : n && (t = e.touches[0].pageX - n.pageX, e = e .touches[0].pageY - n.pageY, 10 < Math.sqrt(t * t + e * e) && (i = !1)) }); function e() { i = !1 } this.on("touchleave", e), this.on("touchcancel", e), this.on("touchend", function (e) { !(n = null) === i && window.performance.now() - t < 200 && (e.preventDefault(), this .trigger("tap")) }) }, e.enableTouchActivity = function () { var t, i, e; this.player() && this.player().reportUserActivity && (t = Ve(this.player(), this.player() .reportUserActivity), this.on("touchstart", function () { t(), this.clearInterval(i), i = this.setInterval(t, 250) }), e = function (e) { t(), this.clearInterval(i) }, this.on("touchmove", t), this.on("touchend", e), this.on("touchcancel", e)) }, e.setTimeout = function (e, t) { var i, n = this; return e = Ve(this, e), this.clearTimersOnDispose_(), i = window.setTimeout(function () { n.setTimeoutIds_.has(i) && n.setTimeoutIds_.delete(i), e() }, t), this.setTimeoutIds_.add(i), i }, e.clearTimeout = function (e) { return this.setTimeoutIds_.has(e) && (this.setTimeoutIds_.delete(e), window.clearTimeout(e)), e }, e.setInterval = function (e, t) { e = Ve(this, e), this.clearTimersOnDispose_(); t = window.setInterval(e, t); return this.setIntervalIds_.add(t), t }, e.clearInterval = function (e) { return this.setIntervalIds_.has(e) && (this.setIntervalIds_.delete(e), window.clearInterval(e)), e }, e.requestAnimationFrame = function (e) { var t, i = this; return this.supportsRaf_ ? (this.clearTimersOnDispose_(), e = Ve(this, e), t = window .requestAnimationFrame(function () { i.rafIds_.has(t) && i.rafIds_.delete(t), e() }), this.rafIds_.add(t), t) : this.setTimeout(e, 1e3 / 60) }, e.requestNamedAnimationFrame = function (e, t) { var i = this; if (!this.namedRafs_.has(e)) { this.clearTimersOnDispose_(), t = Ve(this, t); var n = this.requestAnimationFrame(function () { t(), i.namedRafs_.has(e) && i.namedRafs_.delete(e) }); return this.namedRafs_.set(e, n), e } }, e.cancelNamedAnimationFrame = function (e) { this.namedRafs_.has(e) && (this.cancelAnimationFrame(this.namedRafs_.get(e)), this.namedRafs_ .delete(e)) }, e.cancelAnimationFrame = function (e) { return this.supportsRaf_ ? (this.rafIds_.has(e) && (this.rafIds_.delete(e), window .cancelAnimationFrame(e)), e) : this.clearTimeout(e) }, e.clearTimersOnDispose_ = function () { var n = this; this.clearingTimersOnDispose_ || (this.clearingTimersOnDispose_ = !0, this.one("dispose", function () { [ ["namedRafs_", "cancelNamedAnimationFrame"], ["rafIds_", "cancelAnimationFrame"], ["setTimeoutIds_", "clearTimeout"], ["setIntervalIds_", "clearInterval"] ].forEach(function (e) { var t = e[0], i = e[1]; n[t].forEach(function (e, t) { return n[i](t) }) }), n.clearingTimersOnDispose_ = !1 })) }, s.registerComponent = function (e, t) { if ("string" != typeof e || !e) throw new Error('Illegal component name, "' + e + '"; must be a non-empty string.'); var i = s.getComponent("Tech"), n = i && i.isTech(t), i = s === t || s.prototype.isPrototypeOf(t.prototype); if (n || !i) { var r = n ? "techs must be registered using Tech.registerTech()" : "must be a Component subclass"; throw new Error('Illegal component, "' + e + '"; ' + r + ".") } e = ut(e), s.components_ || (s.components_ = {}); r = s.getComponent("Player"); if ("Player" === e && r && r.players) { var a = r.players, r = Object.keys(a); if (a && 0 < r.length && r.map(function (e) { return a[e] }).every(Boolean)) throw new Error( "Can not register Player component after player has been created.") } return s.components_[e] = t, s.components_[ot(e)] = t }, s.getComponent = function (e) { if (e && s.components_) return s.components_[e] }, s }(); pt.prototype.supportsRaf_ = "function" == typeof window.requestAnimationFrame && "function" == typeof window .cancelAnimationFrame, pt.registerComponent("Component", pt); var ft = function (e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e }; var mt = function (e, t) { e.prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t }; function gt(e, t, i, n) { return function (e, t, i) { if ("number" != typeof t || t < 0 || i < t) throw new Error("Failed to execute '" + e + "' on 'TimeRanges': The index provided (" + t + ") is non-numeric or out of bounds (0-" + i + ").") }(e, n, i.length - 1), i[n][t] } function yt(e) { var t = void 0 === e || 0 === e.length ? { length: 0, start: function () { throw new Error("This TimeRanges object is empty") }, end: function () { throw new Error("This TimeRanges object is empty") } } : { length: e.length, start: gt.bind(null, "start", 0, e), end: gt.bind(null, "end", 1, e) }; return window.Symbol && window.Symbol.iterator && (t[window.Symbol.iterator] = function () { return (e || []).values() }), t } function vt(e, t) { return Array.isArray(e) ? yt(e) : void 0 === e || void 0 === t ? yt() : yt([ [e, t] ]) } function _t(e, t) { var i, n, r = 0; if (!t) return 0; e && e.length || (e = vt(0, 0)); for (var a = 0; a < e.length; a++) i = e.start(a), r += (n = t < (n = e.end(a)) ? t : n) - i; return r / t } function bt(e) { if (e instanceof bt) return e; "number" == typeof e ? this.code = e : "string" == typeof e ? this.message = e : T(e) && ("number" == typeof e.code && (this.code = e.code), b(this, e)), this.message || (this.message = bt .defaultMessages[this.code] || "") } bt.prototype.code = 0, bt.prototype.message = "", bt.prototype.status = null, bt.errorTypes = [ "MEDIA_ERR_CUSTOM", "MEDIA_ERR_ABORTED", "MEDIA_ERR_NETWORK", "MEDIA_ERR_DECODE", "MEDIA_ERR_SRC_NOT_SUPPORTED", "MEDIA_ERR_ENCRYPTED" ], bt.defaultMessages = { 1: "You aborted the media playback", 2: "A network error caused the media download to fail part-way.", 3: "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.", 4: "The media could not be loaded, either because the server or network failed or because the format is not supported.", 5: "The media is encrypted and we do not have the keys to decrypt it." }; for (var Tt = 0; Tt < bt.errorTypes.length; Tt++) bt[bt.errorTypes[Tt]] = Tt, bt.prototype[bt.errorTypes[Tt]] = Tt; var St = function (e, t) { var i, n = null; try { i = JSON.parse(e, t) } catch (e) { n = e } return [n, i] }; function wt(e) { return null != e && "function" == typeof e.then } function Et(e) { wt(e) && e.then(null, function (e) { }) } function kt(n) { return ["kind", "label", "language", "id", "inBandMetadataTrackDispatchType", "mode", "src"].reduce( function (e, t, i) { return n[t] && (e[t] = n[t]), e }, { cues: n.cues && Array.prototype.map.call(n.cues, function (e) { return { startTime: e.startTime, endTime: e.endTime, text: e.text, id: e.id } }) }) } var Ct = function (e) { var t = e.$$("track"), i = Array.prototype.map.call(t, function (e) { return e.track }); return Array.prototype.map.call(t, function (e) { var t = kt(e.track); return e.src && (t.src = e.src), t }).concat(Array.prototype.filter.call(e.textTracks(), function (e) { return -1 === i.indexOf(e) }).map(kt)) }, It = function (e, i) { return e.forEach(function (e) { var t = i.addRemoteTextTrack(e).track; !e.src && e.cues && e.cues.forEach(function (e) { return t.addCue(e) }) }), i.textTracks() }, xt = "vjs-modal-dialog", At = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.handleKeyDown_ = function (e) { return i.handleKeyDown(e) }, i.close_ = function (e) { return i.close(e) }, i.opened_ = i.hasBeenOpened_ = i.hasBeenFilled_ = !1, i.closeable(!i.options_.uncloseable), i .content(i.options_.content), i.contentEl_ = $("div", { className: xt + "-content" }, { role: "document" }), i.descEl_ = $("p", { className: xt + "-description vjs-control-text", id: i.el().getAttribute("aria-describedby") }), J(i.descEl_, i.description()), i.el_.appendChild(i.descEl_), i.el_.appendChild(i .contentEl_), i } mt(e, n); var t = e.prototype; return t.createEl = function () { return n.prototype.createEl.call(this, "div", { className: this.buildCSSClass(), tabIndex: -1 }, { "aria-describedby": this.id() + "_description", "aria-hidden": "true", "aria-label": this.label(), role: "dialog" }) }, t.dispose = function () { this.contentEl_ = null, this.descEl_ = null, this.previouslyActiveEl_ = null, n.prototype .dispose.call(this) }, t.buildCSSClass = function () { return xt + " vjs-hidden " + n.prototype.buildCSSClass.call(this) }, t.label = function () { return this.localize(this.options_.label || "Modal Window") }, t.description = function () { var e = this.options_.description || this.localize("This is a modal window."); return this.closeable() && (e += " " + this.localize( "This modal can be closed by pressing the Escape key or activating the close button." )), e }, t.open = function () { var e; this.opened_ || (e = this.player(), this.trigger("beforemodalopen"), this.opened_ = !0, !this .options_.fillAlways && (this.hasBeenOpened_ || this.hasBeenFilled_) || this.fill(), this.wasPlaying_ = !e.paused(), this.options_.pauseOnOpen && this.wasPlaying_ && e .pause(), this.on("keydown", this.handleKeyDown_), this.hadControls_ = e.controls(), e .controls(!1), this.show(), this.conditionalFocus_(), this.el().setAttribute( "aria-hidden", "false"), this.trigger("modalopen"), this.hasBeenOpened_ = !0) }, t.opened = function (e) { return "boolean" == typeof e && this[e ? "open" : "close"](), this.opened_ }, t.close = function () { var e; this.opened_ && (e = this.player(), this.trigger("beforemodalclose"), this.opened_ = !1, this .wasPlaying_ && this.options_.pauseOnOpen && e.play(), this.off("keydown", this .handleKeyDown_), this.hadControls_ && e.controls(!0), this.hide(), this.el() .setAttribute("aria-hidden", "true"), this.trigger("modalclose"), this .conditionalBlur_(), this.options_.temporary && this.dispose()) }, t.closeable = function (e) { var t, i; return "boolean" == typeof e && (t = this.closeable_ = !!e, i = this.getChild("closeButton"), t && !i && (e = this.contentEl_, this.contentEl_ = this.el_, i = this.addChild( "closeButton", { controlText: "Close Modal Dialog" }), this.contentEl_ = e, this.on(i, "close", this.close_)), !t && i && (this.off(i, "close", this.close_), this.removeChild(i), i.dispose())), this.closeable_ }, t.fill = function () { this.fillWith(this.content()) }, t.fillWith = function (e) { var t = this.contentEl(), i = t.parentNode, n = t.nextSibling; this.trigger("beforemodalfill"), this.hasBeenFilled_ = !0, i.removeChild(t), this.empty(), ve(t, e), this.trigger("modalfill"), n ? i.insertBefore(t, n) : i.appendChild(t); t = this.getChild("closeButton"); t && i.appendChild(t.el_) }, t.empty = function () { this.trigger("beforemodalempty"), me(this.contentEl()), this.trigger("modalempty") }, t.content = function (e) { return "undefined" != typeof e && (this.content_ = e), this.content_ }, t.conditionalFocus_ = function () { var e = document.activeElement, t = this.player_.el_; this.previouslyActiveEl_ = null, !t.contains(e) && t !== e || (this.previouslyActiveEl_ = e, this.focus()) }, t.conditionalBlur_ = function () { this.previouslyActiveEl_ && (this.previouslyActiveEl_.focus(), this.previouslyActiveEl_ = null) }, t.handleKeyDown = function (e) { if (e.stopPropagation(), ht.isEventKey(e, "Escape") && this.closeable()) return e .preventDefault(), void this.close(); if (ht.isEventKey(e, "Tab")) { for (var t, i = this.focusableEls_(), n = this.el_.querySelector(":focus"), r = 0; r < i .length; r++) if (n === i[r]) { t = r; break } document.activeElement === this.el_ && (t = 0), e.shiftKey && 0 === t ? (i[i.length - 1].focus(), e.preventDefault()) : e.shiftKey || t !== i.length - 1 || (i[0].focus(), e.preventDefault()) } }, t.focusableEls_ = function () { var e = this.el_.querySelectorAll("*"); return Array.prototype.filter.call(e, function (e) { return (e instanceof window.HTMLAnchorElement || e instanceof window .HTMLAreaElement) && e.hasAttribute("href") || (e instanceof window .HTMLInputElement || e instanceof window.HTMLSelectElement || e instanceof window.HTMLTextAreaElement || e instanceof window .HTMLButtonElement) && !e.hasAttribute("disabled") || e instanceof window .HTMLIFrameElement || e instanceof window.HTMLObjectElement || e instanceof window.HTMLEmbedElement || e.hasAttribute("tabindex") && -1 !== e .getAttribute("tabindex") || e.hasAttribute("contenteditable") }) }, e }(pt); At.prototype.options_ = { pauseOnOpen: !0, temporary: !0 }, pt.registerComponent("ModalDialog", At); var Pt, Lt = function (n) { function e(e) { var t; void 0 === e && (e = []), (t = n.call(this) || this).tracks_ = [], Object.defineProperty(ft(t), "length", { get: function () { return this.tracks_.length } }); for (var i = 0; i < e.length; i++) t.addTrack(e[i]); return t } mt(e, n); var t = e.prototype; return t.addTrack = function (e) { var t = this, i = this.tracks_.length; "" + i in this || Object.defineProperty(this, i, { get: function () { return this.tracks_[i] } }), -1 === this.tracks_.indexOf(e) && (this.tracks_.push(e), this.trigger({ track: e, type: "addtrack", target: this })), e.labelchange_ = function () { t.trigger({ track: e, type: "labelchange", target: t }) }, it(e) && e.addEventListener("labelchange", e.labelchange_) }, t.removeTrack = function (e) { for (var t, i = 0, n = this.length; i < n; i++) if (this[i] === e) { (t = this[i]).off && t.off(), this.tracks_.splice(i, 1); break } t && this.trigger({ track: t, type: "removetrack", target: this }) }, t.getTrackById = function (e) { for (var t = null, i = 0, n = this.length; i < n; i++) { var r = this[i]; if (r.id === e) { t = r; break } } return t }, e }(ze); for (Pt in Lt.prototype.allowedEvents_ = { change: "change", addtrack: "addtrack", removetrack: "removetrack", labelchange: "labelchange" }, Lt.prototype.allowedEvents_) Lt.prototype["on" + Pt] = null; function Dt(e, t) { for (var i = 0; i < e.length; i++) Object.keys(e[i]).length && t.id !== e[i].id && (e[i].enabled = !1) } function Ot(e, t) { for (var i = 0; i < e.length; i++) Object.keys(e[i]).length && t.id !== e[i].id && (e[i].selected = !1) } function Mt(e) { var t = ["protocol", "hostname", "port", "pathname", "search", "hash", "host"], i = document.createElement("a"); i.href = e; for (var n = {}, r = 0; r < t.length; r++) n[t[r]] = i[t[r]]; return "http:" === n.protocol && (n.host = n.host.replace(/:80$/, "")), "https:" === n.protocol && (n.host = n.host.replace(/:443$/, "")), n.protocol || (n.protocol = window.location.protocol), n.host || (n .host = window.location.host), n } function Rt(e) { var t; return e.match(/^https?:\/\//) || ((t = document.createElement("a")).href = e, e = t.href), e } function Nt(e) { if ("string" == typeof e) { e = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/.exec(e); if (e) return e.pop().toLowerCase() } return "" } function Ut(e, t) { return void 0 === t && (t = window.location), (":" === (e = Mt(e)).protocol ? t : e).protocol + e.host !== t .protocol + t.host } var Bt = function (n) { function e(e) { for (var t, i = (e = void 0 === e ? [] : e).length - 1; 0 <= i; i--) if (e[i].enabled) { Dt(e, e[i]); break } return (t = n.call(this, e) || this).changing_ = !1, t } mt(e, n); var t = e.prototype; return t.addTrack = function (e) { var t = this; e.enabled && Dt(this, e), n.prototype.addTrack.call(this, e), e.addEventListener && (e .enabledChange_ = function () { t.changing_ || (t.changing_ = !0, Dt(t, e), t.changing_ = !1, t.trigger("change")) }, e.addEventListener("enabledchange", e.enabledChange_)) }, t.removeTrack = function (e) { n.prototype.removeTrack.call(this, e), e.removeEventListener && e.enabledChange_ && (e .removeEventListener("enabledchange", e.enabledChange_), e.enabledChange_ = null) }, e }(Lt), Ft = function (n) { function e(e) { for (var t, i = (e = void 0 === e ? [] : e).length - 1; 0 <= i; i--) if (e[i].selected) { Ot(e, e[i]); break } return (t = n.call(this, e) || this).changing_ = !1, Object.defineProperty(ft(t), "selectedIndex", { get: function () { for (var e = 0; e < this.length; e++) if (this[e].selected) return e; return -1 }, set: function () { } }), t } mt(e, n); var t = e.prototype; return t.addTrack = function (e) { var t = this; e.selected && Ot(this, e), n.prototype.addTrack.call(this, e), e.addEventListener && (e .selectedChange_ = function () { t.changing_ || (t.changing_ = !0, Ot(t, e), t.changing_ = !1, t.trigger("change")) }, e.addEventListener("selectedchange", e.selectedChange_)) }, t.removeTrack = function (e) { n.prototype.removeTrack.call(this, e), e.removeEventListener && e.selectedChange_ && (e .removeEventListener("selectedchange", e.selectedChange_), e.selectedChange_ = null) }, e }(Lt), k = function (i) { function e() { return i.apply(this, arguments) || this } mt(e, i); var t = e.prototype; return t.addTrack = function (e) { var t = this; i.prototype.addTrack.call(this, e), this.queueChange_ || (this.queueChange_ = function () { return t.queueTrigger("change") }), this.triggerSelectedlanguagechange || (this.triggerSelectedlanguagechange_ = function () { return t.trigger("selectedlanguagechange") }), e.addEventListener("modechange", this.queueChange_); -1 === ["metadata", "chapters"] .indexOf(e.kind) && e.addEventListener("modechange", this.triggerSelectedlanguagechange_) }, t.removeTrack = function (e) { i.prototype.removeTrack.call(this, e), e.removeEventListener && (this.queueChange_ && e .removeEventListener("modechange", this.queueChange_), this.selectedlanguagechange_ && e .removeEventListener("modechange", this.triggerSelectedlanguagechange_)) }, e }(Lt), jt = function () { function e(e) { void 0 === e && (e = []), this.trackElements_ = [], Object.defineProperty(this, "length", { get: function () { return this.trackElements_.length } }); for (var t = 0, i = e.length; t < i; t++) this.addTrackElement_(e[t]) } var t = e.prototype; return t.addTrackElement_ = function (e) { var t = this.trackElements_.length; "" + t in this || Object.defineProperty(this, t, { get: function () { return this.trackElements_[t] } }), -1 === this.trackElements_.indexOf(e) && this.trackElements_.push(e) }, t.getTrackElementByTrack_ = function (e) { for (var t, i = 0, n = this.trackElements_.length; i < n; i++) if (e === this.trackElements_[i].track) { t = this.trackElements_[i]; break } return t }, t.removeTrackElement_ = function (e) { for (var t = 0, i = this.trackElements_.length; t < i; t++) if (e === this.trackElements_[t]) { this.trackElements_[t].track && "function" == typeof this.trackElements_[t].track.off && this.trackElements_[t].track.off(), "function" == typeof this.trackElements_[t] .off && this.trackElements_[t].off(), this.trackElements_.splice(t, 1); break } }, e }(), Ht = function () { function t(e) { t.prototype.setCues_.call(this, e), Object.defineProperty(this, "length", { get: function () { return this.length_ } }) } var e = t.prototype; return e.setCues_ = function (e) { var t = this.length || 0, i = 0, n = e.length; this.cues_ = e, this.length_ = e.length; function r(e) { "" + e in this || Object.defineProperty(this, "" + e, { get: function () { return this.cues_[e] } }) } if (t < n) for (i = t; i < n; i++) r.call(this, i) }, e.getCueById = function (e) { for (var t = null, i = 0, n = this.length; i < n; i++) { var r = this[i]; if (r.id === e) { t = r; break } } return t }, t }(), qt = { alternative: "alternative", captions: "captions", main: "main", sign: "sign", subtitles: "subtitles", commentary: "commentary" }, Vt = { alternative: "alternative", descriptions: "descriptions", main: "main", "main-desc": "main-desc", translation: "translation", commentary: "commentary" }, Wt = { subtitles: "subtitles", captions: "captions", descriptions: "descriptions", chapters: "chapters", metadata: "metadata" }, Gt = { disabled: "disabled", hidden: "hidden", showing: "showing" }, C = function (a) { function e(e) { void 0 === e && (e = {}); var t, i = a.call(this) || this, n = { id: e.id || "vjs_track_" + Pe++, kind: e.kind || "", language: e.language || "" }, r = e.label || ""; for (t in n) !function (e) { Object.defineProperty(ft(i), e, { get: function () { return n[e] }, set: function () { } }) }(t); return Object.defineProperty(ft(i), "label", { get: function () { return r }, set: function (e) { e !== r && (r = e, this.trigger("labelchange")) } }), i } return mt(e, a), e }(ze), zt = Object.freeze({ __proto__: null, parseUrl: Mt, getAbsoluteURL: Rt, getFileExtension: Nt, isCrossOrigin: Ut }), Xt = "undefined" != typeof window ? window : "undefined" != typeof f ? f : "undefined" != typeof self ? self : {}, Kt = Xt, Yt = function (e) { if (!e) return !1; var t = Qt.call(e); return "[object Function]" === t || "function" == typeof e && "[object RegExp]" !== t || "undefined" != typeof window && (e === window.setTimeout || e === window.alert || e === window.confirm || e === window.prompt) }, Qt = Object.prototype.toString; ei.httpHandler = function (n, r) { return void 0 === r && (r = !1), function (e, t, i) { if (e) n(e); else if (400 <= t.statusCode && t.statusCode <= 599) { e = i; if (r) if (Kt.TextDecoder) { t = function (e) { void 0 === e && (e = ""); return e.toLowerCase().split(";").reduce(function (e, t) { var i = t.split("="), t = i[0], i = i[1]; return "charset" === t.trim() ? i.trim() : e }, "utf-8") }(t.headers && t.headers["content-type"]); try { e = new TextDecoder(t).decode(i) } catch (e) { } } else e = String.fromCharCode.apply(null, new Uint8Array(i)); n({ cause: e }) } else n(null, i) } }; /** * @license * slighly modified parse-headers 2.0.2 * Copyright (c) 2014 David Björklund * Available under the MIT license * */ var $t = function (e) { var n = {}; return e && e.trim().split("\n").forEach(function (e) { var t = e.indexOf(":"), i = e.slice(0, t).trim().toLowerCase(), t = e.slice(t + 1).trim(); "undefined" == typeof n[i] ? n[i] = t : Array.isArray(n[i]) ? n[i].push(t) : n[i] = [n[i], t] }), n }, Jt = ei, I = ei; function Zt(e, t, i) { var n = e; return Yt(t) ? (i = t, "string" == typeof e && (n = { uri: e })) : n = g({}, t, { uri: e }), n.callback = i, n } function ei(e, t, i) { return ti(t = Zt(e, t, i)) } function ti(n) { if ("undefined" == typeof n.callback) throw new Error("callback argument missing"); var r = !1, a = function (e, t, i) { r || (r = !0, n.callback(e, t, i)) }; function s() { var e = void 0, e = l.response || l.responseText || function (e) { try { if ("document" === e.responseType) return e.responseXML; var t = e.responseXML && "parsererror" === e.responseXML.documentElement.nodeName; if ("" === e.responseType && !t) return e.responseXML } catch (e) { } return null }(l); if (m) try { e = JSON.parse(e) } catch (e) { } return e } function t(e) { return clearTimeout(u), (e = !(e instanceof Error) ? new Error("" + (e || "Unknown XMLHttpRequest Error")) : e).statusCode = 0, a(e, g) } function e() { if (!o) { clearTimeout(u); var e = n.useXDR && void 0 === l.status ? 200 : 1223 === l.status ? 204 : l.status, t = g, i = null; return 0 !== e ? (t = { body: s(), statusCode: e, method: d, headers: {}, url: c, rawRequest: l }, l.getAllResponseHeaders && (t.headers = $t(l.getAllResponseHeaders()))) : i = new Error( "Internal XMLHttpRequest Error"), a(i, t, t.body) } } var i, o, u, l = n.xhr || null, c = (l = l || new (n.cors || n.useXDR ? ei.XDomainRequest : ei.XMLHttpRequest)).url = n.uri || n.url, d = l.method = n.method || "GET", h = n.body || n.data, p = l.headers = n.headers || {}, f = !!n.sync, m = !1, g = { body: void 0, headers: {}, statusCode: 0, method: d, url: c, rawRequest: l }; if ("json" in n && !1 !== n.json && (m = !0, p.accept || p.Accept || (p.Accept = "application/json"), "GET" !== d && "HEAD" !== d && (p["content-type"] || p["Content-Type"] || (p["Content-Type"] = "application/json"), h = JSON.stringify(!0 === n.json ? h : n.json))), l.onreadystatechange = function () { 4 === l.readyState && setTimeout(e, 0) }, l.onload = e, l.onerror = t, l.onprogress = function () { }, l.onabort = function () { o = !0 }, l.ontimeout = t, l.open(d, c, !f, n.username, n.password), f || (l.withCredentials = !!n .withCredentials), !f && 0 < n.timeout && (u = setTimeout(function () { var e; o || (o = !0, l.abort("timeout"), (e = new Error("XMLHttpRequest timeout")).code = "ETIMEDOUT", t(e)) }, n.timeout)), l.setRequestHeader) for (i in p) p.hasOwnProperty(i) && l.setRequestHeader(i, p[i]); else if (n.headers && !function (e) { for (var t in e) if (e.hasOwnProperty(t)) return; return 1 }(n.headers)) throw new Error("Headers cannot be set on an XDomainRequest object"); return "responseType" in n && (l.responseType = n.responseType), "beforeSend" in n && "function" == typeof n .beforeSend && n.beforeSend(l), l.send(h || null), l } ei.XMLHttpRequest = Kt.XMLHttpRequest || function () { }, ei.XDomainRequest = "withCredentials" in new ei .XMLHttpRequest ? ei.XMLHttpRequest : Kt.XDomainRequest, function (e, t) { for (var i = 0; i < e.length; i++) t(e[i]) }(["get", "put", "post", "patch", "head", "delete"], function (n) { ei["delete" === n ? "del" : n] = function (e, t, i) { return (t = Zt(e, t, i)).method = n.toUpperCase(), ti(t) } }), Jt.default = I; function ii(e, t) { var i = new window.WebVTT.Parser(window, window.vttjs, window.WebVTT.StringDecoder()), n = []; i.oncue = function (e) { t.addCue(e) }, i.onparsingerror = function (e) { n.push(e) }, i.onflush = function () { t.trigger({ type: "loadeddata", target: t }) }, i.parse(e), 0 < n.length && (window.console && window.console.groupCollapsed && window.console .groupCollapsed("Text Track parsing errors for " + t.src), n.forEach(function (e) { return h.error(e) }), window.console && window.console.groupEnd && window.console.groupEnd()), i.flush() } function ni(e, n) { var t = { uri: e }; (e = Ut(e)) && (t.cors = e), (e = "use-credentials" === n.tech_.crossOrigin()) && (t.withCredentials = e), Jt(t, Ve(this, function (e, t, i) { return e ? h.error(e, t) : (n.loaded_ = !0, void ("function" != typeof window.WebVTT ? n .tech_ && n.tech_.any(["vttjsloaded", "vttjserror"], function (e) { return "vttjserror" !== e.type ? ii(i, n) : void h.error( "vttjs failed to load, stopping trying to process " + n.src) }) : ii(i, n))) })) } var ri = function (a) { function e(e) { var t; if (!(e = void 0 === e ? {} : e).tech) throw new Error("A tech was not provided."); var e = lt(e, { kind: Wt[e.kind] || "subtitles", language: e.language || e.srclang || "" }), i = Gt[e.mode] || "disabled", n = e.default; "metadata" !== e.kind && "chapters" !== e.kind || (i = "hidden"), (t = a.call(this, e) || this) .tech_ = e.tech, t.cues_ = [], t.activeCues_ = [], t.preload_ = !1 !== t.tech_ .preloadTextTracks; var r = new Ht(t.cues_), s = new Ht(t.activeCues_), o = !1; t.timeupdateHandler = Ve(ft(t), function () { this.tech_.isDisposed() || (this.tech_.isReady_ && (this.activeCues = this.activeCues, o && (this.trigger("cuechange"), o = !1)), this.rvf_ = this.tech_ .requestVideoFrameCallback(this.timeupdateHandler)) }); return t.tech_.one("dispose", function () { t.stopTracking() }), "disabled" !== i && t.startTracking(), Object.defineProperties(ft(t), { default: { get: function () { return n }, set: function () { } }, mode: { get: function () { return i }, set: function (e) { Gt[e] && i !== e && (i = e, this.preload_ || "disabled" === i || 0 !== this .cues.length || ni(this.src, this), this.stopTracking(), "disabled" !== i && this.startTracking(), this.trigger("modechange") ) } }, cues: { get: function () { return this.loaded_ ? r : null }, set: function () { } }, activeCues: { get: function () { if (!this.loaded_) return null; if (0 === this.cues.length) return s; for (var e = this.tech_.currentTime(), t = [], i = 0, n = this.cues .length; i < n; i++) { var r = this.cues[i]; (r.startTime <= e && r.endTime >= e || r.startTime === r.endTime && r .startTime <= e && r.startTime + .5 >= e) && t.push(r) } if (o = !1, t.length !== this.activeCues_.length) o = !0; else for (var a = 0; a < t.length; a++) -1 === this.activeCues_.indexOf(t[ a]) && (o = !0); return this.activeCues_ = t, s.setCues_(this.activeCues_), s }, set: function () { } } }), e.src ? (t.src = e.src, t.preload_ || (t.loaded_ = !0), (t.preload_ || "subtitles" !== e .kind && "captions" !== e.kind) && ni(t.src, ft(t))) : t.loaded_ = !0, t } mt(e, a); var t = e.prototype; return t.startTracking = function () { this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler) }, t.stopTracking = function () { this.rvf_ && (this.tech_.cancelVideoFrameCallback(this.rvf_), this.rvf_ = void 0) }, t.addCue = function (e) { var t = e; if (window.vttjs && !(e instanceof window.vttjs.VTTCue)) { for (var i in t = new window.vttjs.VTTCue(e.startTime, e.endTime, e.text), e) i in t || (t[ i] = e[i]); t.id = e.id, t.originalCue_ = e } for (var n = this.tech_.textTracks(), r = 0; r < n.length; r++) n[r] !== this && n[r].removeCue( t); this.cues_.push(t), this.cues.setCues_(this.cues_) }, t.removeCue = function (e) { for (var t = this.cues_.length; t--;) { var i = this.cues_[t]; if (i === e || i.originalCue_ && i.originalCue_ === e) { this.cues_.splice(t, 1), this.cues.setCues_(this.cues_); break } } }, e }(C); ri.prototype.allowedEvents_ = { cuechange: "cuechange" }; x = function (n) { function e(e) { var t = lt(e = void 0 === e ? {} : e, { kind: Vt[e.kind] || "" }), e = n.call(this, t) || this, i = !1; return Object.defineProperty(ft(e), "enabled", { get: function () { return i }, set: function (e) { "boolean" == typeof e && e !== i && (i = e, this.trigger("enabledchange")) } }), t.enabled && (e.enabled = t.enabled), e.loaded_ = !0, e } return mt(e, n), e }(C), U = function (n) { function e(e) { var t = lt(e = void 0 === e ? {} : e, { kind: qt[e.kind] || "" }), e = n.call(this, t) || this, i = !1; return Object.defineProperty(ft(e), "selected", { get: function () { return i }, set: function (e) { "boolean" == typeof e && e !== i && (i = e, this.trigger("selectedchange")) } }), t.selected && (e.selected = t.selected), e } return mt(e, n), e }(C), j = function (r) { function e(e) { var t; void 0 === e && (e = {}); var i = r.call(this) || this, n = new ri(e); return i.kind = n.kind, i.src = n.src, i.srclang = n.language, i.label = n.label, i.default = n .default, Object.defineProperties(ft(i), { readyState: { get: function () { return t } }, track: { get: function () { return n } } }), t = 0, n.addEventListener("loadeddata", function () { t = 2, i.trigger({ type: "load", target: ft(i) }) }), i } return mt(e, r), e }(ze); j.prototype.allowedEvents_ = { load: "load" }, j.NONE = 0, j.LOADING = 1, j.LOADED = 2, j.ERROR = 3; var ai = { audio: { ListClass: Bt, TrackClass: x, capitalName: "Audio" }, video: { ListClass: Ft, TrackClass: U, capitalName: "Video" }, text: { ListClass: k, TrackClass: ri, capitalName: "Text" } }; Object.keys(ai).forEach(function (e) { ai[e].getterName = e + "Tracks", ai[e].privateName = e + "Tracks_" }); var si = { remoteText: { ListClass: k, TrackClass: ri, capitalName: "RemoteText", getterName: "remoteTextTracks", privateName: "remoteTextTracks_" }, remoteTextEl: { ListClass: jt, TrackClass: j, capitalName: "RemoteTextTrackEls", getterName: "remoteTextTrackEls", privateName: "remoteTextTrackEls_" } }, oi = g({}, ai, si); si.names = Object.keys(si), ai.names = Object.keys(ai), oi.names = [].concat(si.names).concat(ai.names); var ui = "undefined" != typeof f ? f : "undefined" != typeof window ? window : {}, li = "undefined" != typeof document ? document : (li = ui["__GLOBAL_DOCUMENT_CACHE@4"]) || (ui[ "__GLOBAL_DOCUMENT_CACHE@4"] = {}), Xt = li, ci = Object.create || function (e) { if (1 !== arguments.length) throw new Error("Object.create shim only accepts one parameter."); return di.prototype = e, new di }; function di() { } function hi(e, t) { this.name = "ParsingError", this.code = e.code, this.message = t || e.message } function pi(e) { function t(e, t, i, n) { return 3600 * (0 | e) + 60 * (0 | t) + (0 | i) + (0 | n) / 1e3 } e = e.match(/^(\d+):(\d{1,2})(:\d{1,2})?\.(\d{3})/); return e ? e[3] ? t(e[1], e[2], e[3].replace(":", ""), e[4]) : 59 < e[1] ? t(e[1], e[2], 0, e[4]) : t(0, e[ 1], e[2], e[4]) : null } function fi() { this.values = ci(null) } function mi(e, t, i, n) { var r, a, s = n ? e.split(n) : [e]; for (r in s) "string" == typeof s[r] && (2 === (a = s[r].split(i)).length && t(a[0], a[1])) } function gi(t, e, s) { var i = t; function n() { var e = pi(t); if (null === e) throw new hi(hi.Errors.BadTimeStamp, "Malformed timestamp: " + i); return t = t.replace(/^[^\sa-zA-Z-]+/, ""), e } function r() { t = t.replace(/^\s+/, "") } if (r(), e.startTime = n(), r(), "--\x3e" !== t.substr(0, 3)) throw new hi(hi.Errors.BadTimeStamp, "Malformed time stamp (time stamps must be separated by '--\x3e'): " + i); t = t.substr(3), r(), e.endTime = n(), r(), function (e, t) { var a = new fi; mi(e, function (e, t) { switch (e) { case "region": for (var i = s.length - 1; 0 <= i; i--) if (s[i].id === t) { a.set(e, s[i].region); break } break; case "vertical": a.alt(e, t, ["rl", "lr"]); break; case "line": var n = t.split(","), r = n[0]; a.integer(e, r), a.percent(e, r) && a.set("snapToLines", !1), a.alt(e, r, [ "auto" ]), 2 === n.length && a.alt("lineAlign", n[1], ["start", "center", "end"]); break; case "position": n = t.split(","), a.percent(e, n[0]), 2 === n.length && a.alt("positionAlign", n[1], ["start", "center", "end"]); break; case "size": a.percent(e, t); break; case "align": a.alt(e, t, ["start", "center", "end", "left", "right"]) } }, /:/, /\s/), t.region = a.get("region", null), t.vertical = a.get("vertical", ""); try { t.line = a.get("line", "auto") } catch (e) { } t.lineAlign = a.get("lineAlign", "start"), t.snapToLines = a.get("snapToLines", !0), t.size = a.get( "size", 100); try { t.align = a.get("align", "center") } catch (e) { t.align = a.get("align", "middle") } try { t.position = a.get("position", "auto") } catch (e) { t.position = a.get("position", { start: 0, left: 0, center: 50, middle: 50, end: 100, right: 100 }, t.align) } t.positionAlign = a.get("positionAlign", { start: "start", left: "start", center: "center", middle: "center", end: "end", right: "end" }, t.align) }(t, e) } ((hi.prototype = ci(Error.prototype)).constructor = hi).Errors = { BadSignature: { code: 0, message: "Malformed WebVTT signature." }, BadTimeStamp: { code: 1, message: "Malformed time stamp." } }, fi.prototype = { set: function (e, t) { this.get(e) || "" === t || (this.values[e] = t) }, get: function (e, t, i) { return i ? this.has(e) ? this.values[e] : t[i] : this.has(e) ? this.values[e] : t }, has: function (e) { return e in this.values }, alt: function (e, t, i) { for (var n = 0; n < i.length; ++n) if (t === i[n]) { this.set(e, t); break } }, integer: function (e, t) { /^-?\d+$/.test(t) && this.set(e, parseInt(t, 10)) }, percent: function (e, t) { return !!(t.match(/^([\d]{1,3})(\.[\d]*)?%$/) && 0 <= (t = parseFloat(t)) && t <= 100) && (this .set(e, t), !0) } }; var yi = Xt.createElement && Xt.createElement("textarea"), vi = { c: "span", i: "i", b: "b", u: "u", ruby: "ruby", rt: "rt", v: "span", lang: "span" }, _i = { white: "rgba(255,255,255,1)", lime: "rgba(0,255,0,1)", cyan: "rgba(0,255,255,1)", red: "rgba(255,0,0,1)", yellow: "rgba(255,255,0,1)", magenta: "rgba(255,0,255,1)", blue: "rgba(0,0,255,1)", black: "rgba(0,0,0,1)" }, bi = { v: "title", lang: "lang" }, Ti = { rt: "ruby" }; function Si(e, t) { for (var i, n, r, a, s, o, u, l, c, d, h = e.document.createElement("div"), p = h, f = []; null !== (i = function () { if (!t) return null; var e = t.match(/^([^<]*)(<[^>]*>?)?/); return e = e[1] || e[2], t = t.substr(e.length), e }());) "<" !== i[0] ? p.appendChild(e.document.createTextNode((s = i, yi.innerHTML = s, s = yi .textContent, yi.textContent = "", s))) : "/" !== i[1] ? (a = pi(i.substr(1, i.length - 2))) ? (n = e.document.createProcessingInstruction("timestamp", a), p.appendChild(n)) : (r = i.match( /^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/)) && (l = r[1], c = r[3], d = void 0, d = vi[l], (n = d ? (d = e.document.createElement(d), (l = bi[l]) && c && (d[l] = c.trim()), d) : null) && (o = p, Ti[(u = n).localName] && Ti[u.localName] !== o.localName || (r[2] && ((a = r[2].split(".")) .forEach(function (e) { var t = /^bg_/.test(e), e = t ? e.slice(3) : e; _i.hasOwnProperty(e) && (e = _i[e], n.style[t ? "background-color" : "color"] = e) }), n.className = a.join(" ")), f.push(r[1]), p.appendChild(n), p = n))) : f.length && f[f .length - 1] === i.substr(2).replace(">", "") && (f.pop(), p = p.parentNode); return h } var wi = [ [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] ]; function Ei(e) { var t = [], i = ""; if (!e || !e.childNodes) return "ltr"; function a(e, t) { for (var i = t.childNodes.length - 1; 0 <= i; i--) e.push(t.childNodes[i]) } for (a(t, e); i = function e(t) { if (!t || !t.length) return null; var i = t.pop(), n = i.textContent || i.innerText; if (n) { var r = n.match(/^.*(\n|\r)/); return r ? r[t.length = 0] : n } return "ruby" === i.tagName ? e(t) : i.childNodes ? (a(t, i), e(t)) : void 0 }(t);) for (var n = 0; n < i.length; n++) if (function (e) { for (var t = 0; t < wi.length; t++) { var i = wi[t]; if (e >= i[0] && e <= i[1]) return 1 } }(i.charCodeAt(n))) return "rtl"; return "ltr" } function ki() { } function Ci(e, t, i) { ki.call(this), this.cue = t, this.cueDiv = Si(e, t.text); var n = { color: "rgba(255, 255, 255, 1)", backgroundColor: "rgba(0, 0, 0, 0.8)", position: "relative", left: 0, right: 0, top: 0, bottom: 0, display: "inline", writingMode: "" === t.vertical ? "horizontal-tb" : "lr" === t.vertical ? "vertical-lr" : "vertical-rl", unicodeBidi: "plaintext" }; this.applyStyles(n, this.cueDiv), this.div = e.document.createElement("div"), n = { direction: Ei(this.cueDiv), writingMode: "" === t.vertical ? "horizontal-tb" : "lr" === t.vertical ? "vertical-lr" : "vertical-rl", unicodeBidi: "plaintext", textAlign: "middle" === t.align ? "center" : t.align, font: i.font, whiteSpace: "pre-line", position: "absolute" }, this.applyStyles(n), this.div.appendChild(this.cueDiv); var r = 0; switch (t.positionAlign) { case "start": r = t.position; break; case "center": r = t.position - t.size / 2; break; case "end": r = t.position - t.size } "" === t.vertical ? this.applyStyles({ left: this.formatStyle(r, "%"), width: this.formatStyle(t.size, "%") }) : this.applyStyles({ top: this.formatStyle(r, "%"), height: this.formatStyle(t.size, "%") }), this.move = function (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") }) } } function Ii(e) { var t, i, n, r; e.div && (t = e.div.offsetHeight, i = e.div.offsetWidth, n = e.div.offsetTop, r = (r = e.div.childNodes) && (r = r[0]) && r.getClientRects && r.getClientRects(), e = e.div.getBoundingClientRect(), r = r ? Math.max(r[0] && r[0].height || 0, e.height / r.length) : 0), this.left = e.left, this.right = e .right, this.top = e.top || n, this.height = e.height || t, this.bottom = e.bottom || n + (e.height || t), this.width = e.width || i, this.lineHeight = void 0 !== r ? r : e.lineHeight } function xi(e, t, o, u) { var i, n = new Ii(t), r = t.cue, a = function (e) { if ("number" == typeof e.line && (e.snapToLines || 0 <= e.line && e.line <= 100)) return e.line; if (!e.track || !e.track.textTrackList || !e.track.textTrackList.mediaElement) return -1; for (var t = e.track, i = t.textTrackList, n = 0, r = 0; r < i.length && i[r] !== t; r++) "showing" === i[r].mode && n++; return -1 * ++n }(r), s = []; if (r.snapToLines) { switch (r.vertical) { case "": s = ["+y", "-y"], i = "height"; break; case "rl": s = ["+x", "-x"], i = "width"; break; case "lr": s = ["-x", "+x"], i = "width" } var l = n.lineHeight, c = l * Math.round(a), d = o[i] + l, h = s[0]; Math.abs(c) > d && (c = c < 0 ? -1 : 1, c *= Math.ceil(d / l) * l), a < 0 && (c += "" === r.vertical ? o .height : o.width, s = s.reverse()), n.move(h, c) } else { var p = n.lineHeight / o.height * 100; switch (r.lineAlign) { case "center": a -= p / 2; break; case "end": a -= p } switch (r.vertical) { case "": t.applyStyles({ top: t.formatStyle(a, "%") }); break; case "rl": t.applyStyles({ left: t.formatStyle(a, "%") }); break; case "lr": t.applyStyles({ right: t.formatStyle(a, "%") }) } s = ["+y", "-x", "+x", "-y"], n = new Ii(t) } n = function (e, t) { for (var i, n = new Ii(e), r = 1, a = 0; a < t.length; a++) { for (; e.overlapsOppositeAxis(o, t[a]) || e.within(o) && e.overlapsAny(u);) e.move(t[a]); if (e.within(o)) return e; var s = e.intersectPercentage(o); s < r && (i = new Ii(e), r = s), e = new Ii(n) } return i || n }(n, s); t.move(n.toCSSCompatValues(o)) } function Ai() { } ki.prototype.applyStyles = function (e, t) { for (var i in t = t || this.div, e) e.hasOwnProperty(i) && (t.style[i] = e[i]) }, ki.prototype.formatStyle = function (e, t) { return 0 === e ? 0 : e + t }, (Ci.prototype = ci(ki.prototype)).constructor = Ci, Ii.prototype.move = function (e, t) { switch (t = void 0 !== t ? t : this.lineHeight, 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 } }, Ii.prototype.overlaps = function (e) { return this.left < e.right && this.right > e.left && this.top < e.bottom && this.bottom > e.top }, Ii.prototype.overlapsAny = function (e) { for (var t = 0; t < e.length; t++) if (this.overlaps(e[t])) return !0; return !1 }, Ii.prototype.within = function (e) { return this.top >= e.top && this.bottom <= e.bottom && this.left >= e.left && this.right <= e.right }, Ii.prototype.overlapsOppositeAxis = function (e, t) { switch (t) { case "+x": return this.left < e.left; case "-x": return this.right > e.right; case "+y": return this.top < e.top; case "-y": return this.bottom > e.bottom } }, Ii.prototype.intersectPercentage = function (e) { return Math.max(0, Math.min(this.right, e.right) - Math.max(this.left, e.left)) * Math.max(0, Math.min( this.bottom, e.bottom) - Math.max(this.top, e.top)) / (this.height * this.width) }, Ii.prototype.toCSSCompatValues = function (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 } }, Ii.getSimpleBoxPosition = function (e) { var t = e.div ? e.div.offsetHeight : e.tagName ? e.offsetHeight : 0, i = e.div ? e.div.offsetWidth : e.tagName ? e.offsetWidth : 0, n = e.div ? e.div.offsetTop : e.tagName ? e.offsetTop : 0; return { left: (e = e.div ? e.div.getBoundingClientRect() : e.tagName ? e.getBoundingClientRect() : e).left, right: e.right, top: e.top || n, height: e.height || t, bottom: e.bottom || n + (e.height || t), width: e.width || i } }, Ai.StringDecoder = function () { return { decode: function (e) { if (!e) return ""; if ("string" != typeof e) throw new Error("Error - expected string data."); return decodeURIComponent(encodeURIComponent(e)) } } }, Ai.convertCueToDOMTree = function (e, t) { return e && t ? Si(e, t) : null }; Ai.processCues = function (n, r, e) { if (!n || !r || !e) return null; for (; e.firstChild;) e.removeChild(e.firstChild); var a = n.document.createElement("div"); if (a.style.position = "absolute", a.style.left = "0", a.style.right = "0", a.style.top = "0", a.style .bottom = "0", a.style.margin = "1.5%", e.appendChild(a), function (e) { for (var t = 0; t < e.length; t++) if (e[t].hasBeenReset || !e[t].displayState) return 1 }(r)) { var s = [], o = Ii.getSimpleBoxPosition(a), u = { font: Math.round(.05 * o.height * 100) / 100 + "px sans-serif" }; !function () { for (var e, t, i = 0; i < r.length; i++) t = r[i], e = new Ci(n, t, u), a.appendChild(e.div), xi(0, e, o, s), t.displayState = e.div, s.push(Ii.getSimpleBoxPosition(e)) }() } else for (var t = 0; t < r.length; t++) a.appendChild(r[t].displayState) }, (Ai.Parser = function (e, t, i) { i || (i = t, t = {}), t = t || {}, this.window = e, this.vttjs = t, this.state = "INITIAL", this .buffer = "", this.decoder = i || new TextDecoder("utf8"), this.regionList = [] }).prototype = { reportOrThrowError: function (e) { if (!(e instanceof hi)) throw e; this.onparsingerror && this.onparsingerror(e) }, parse: function (e) { var n = this; function t() { for (var e = n.buffer, t = 0; t < e.length && "\r" !== e[t] && "\n" !== e[t];) ++t; var i = e.substr(0, t); return "\r" === e[t] && ++t, "\n" === e[t] && ++t, n.buffer = e.substr(t), i } function i(e) { e.match(/X-TIMESTAMP-MAP/) ? mi(e, function (e, t) { var i; "X-TIMESTAMP-MAP" === e && (t = t, i = new fi, mi(t, function (e, t) { switch (e) { case "MPEGT": i.integer(e + "S", t); break; case "LOCA": i.set(e + "L", pi(t)) } }, /[^\d]:/, /,/), n.ontimestampmap && n.ontimestampmap({ MPEGTS: i.get("MPEGTS"), LOCAL: i.get("LOCAL") })) }, /=/) : mi(e, function (e, t) { var r; "Region" === e && (t = t, r = new fi, mi(t, function (e, t) { switch (e) { case "id": r.set(e, t); break; case "width": r.percent(e, t); break; case "lines": r.integer(e, t); break; case "regionanchor": case "viewportanchor": var i = t.split(","); if (2 !== i.length) break; var n = new fi; if (n.percent("x", i[0]), n.percent("y", i[1]), !n.has( "x") || !n.has("y")) break; r.set(e + "X", n.get("x")), r.set(e + "Y", n.get("y")); break; case "scroll": r.alt(e, t, ["up"]) } }, /=/, /\s/), r.has("id") && ((t = new (n.vttjs.VTTRegion || n.window .VTTRegion)).width = r.get("width", 100), t.lines = r.get( "lines", 3), t.regionAnchorX = r.get("regionanchorX", 0), t .regionAnchorY = r.get("regionanchorY", 100), t.viewportAnchorX = r .get("viewportanchorX", 0), t.viewportAnchorY = r.get( "viewportanchorY", 100), t.scroll = r.get("scroll", ""), n .onregion && n.onregion(t), n.regionList.push({ id: r.get("id"), region: t }))) }, /:/) } e && (n.buffer += n.decoder.decode(e, { stream: !0 })); try { if ("INITIAL" === n.state) { if (!/\r\n|\n/.test(n.buffer)) return this; var r, a = (r = t()).match(/^WEBVTT([ \t].*)?$/); if (!a || !a[0]) throw new hi(hi.Errors.BadSignature); n.state = "HEADER" } for (var s = !1; n.buffer;) { if (!/\r\n|\n/.test(n.buffer)) return this; switch (s ? s = !1 : r = t(), n.state) { case "HEADER": /:/.test(r) ? i(r) : r || (n.state = "ID"); continue; case "NOTE": r || (n.state = "ID"); continue; case "ID": if (/^NOTE($|[ \t])/.test(r)) { n.state = "NOTE"; break } if (!r) continue; n.cue = new (n.vttjs.VTTCue || n.window.VTTCue)(0, 0, ""); try { n.cue.align = "center" } catch (e) { n.cue.align = "middle" } if (n.state = "CUE", -1 === r.indexOf("--\x3e")) { n.cue.id = r; continue } case "CUE": try { gi(r, n.cue, n.regionList) } catch (e) { n.reportOrThrowError(e), n.cue = null, n.state = "BADCUE"; continue } n.state = "CUETEXT"; continue; case "CUETEXT": var o = -1 !== r.indexOf("--\x3e"); if (!r || o && (s = !0)) { n.oncue && n.oncue(n.cue), n.cue = null, n.state = "ID"; continue } n.cue.text && (n.cue.text += "\n"), n.cue.text += r.replace(/\u2028/g, "\n") .replace(/u2029/g, "\n"); continue; case "BADCUE": r || (n.state = "ID"); continue } } } catch (e) { n.reportOrThrowError(e), "CUETEXT" === n.state && n.cue && n.oncue && n.oncue(n.cue), n .cue = null, n.state = "INITIAL" === n.state ? "BADWEBVTT" : "BADCUE" } return this }, flush: function () { var t = this; try { if (t.buffer += t.decoder.decode(), !t.cue && "HEADER" !== t.state || (t.buffer += "\n\n", t .parse()), "INITIAL" === t.state) throw new hi(hi.Errors.BadSignature) } catch (e) { t.reportOrThrowError(e) } return t.onflush && t.onflush(), this } }; var Pi = Ai, Li = { "": 1, lr: 1, rl: 1 }, Di = { start: 1, center: 1, end: 1, left: 1, right: 1, auto: 1, "line-left": 1, "line-right": 1 }; function Oi(e) { return "string" == typeof e && (!!Di[e.toLowerCase()] && e.toLowerCase()) } function Mi(e, t, i) { this.hasBeenReset = !1; var n = "", r = !1, a = e, s = t, o = i, u = null, l = "", c = !0, d = "auto", h = "start", p = "auto", f = "auto", m = 100, g = "center"; Object.defineProperties(this, { id: { enumerable: !0, get: function () { return n }, set: function (e) { n = "" + e } }, pauseOnExit: { enumerable: !0, get: function () { return r }, set: function (e) { r = !!e } }, startTime: { enumerable: !0, get: function () { return a }, set: function (e) { if ("number" != typeof e) throw new TypeError( "Start time must be set to a number."); a = e, this.hasBeenReset = !0 } }, endTime: { enumerable: !0, get: function () { return s }, set: function (e) { if ("number" != typeof e) throw new TypeError("End time must be set to a number."); s = e, this.hasBeenReset = !0 } }, text: { enumerable: !0, get: function () { return o }, set: function (e) { o = "" + e, this.hasBeenReset = !0 } }, region: { enumerable: !0, get: function () { return u }, set: function (e) { u = e, this.hasBeenReset = !0 } }, vertical: { enumerable: !0, get: function () { return l }, set: function (e) { e = "string" == typeof (e = e) && (!!Li[e.toLowerCase()] && e.toLowerCase()); if (!1 === e) throw new SyntaxError( "Vertical: an invalid or illegal direction string was specified."); l = e, this.hasBeenReset = !0 } }, snapToLines: { enumerable: !0, get: function () { return c }, set: function (e) { c = !!e, this.hasBeenReset = !0 } }, line: { enumerable: !0, get: function () { return d }, set: function (e) { if ("number" != typeof e && "auto" !== e) throw new SyntaxError( "Line: an invalid number or illegal string was specified."); d = e, this.hasBeenReset = !0 } }, lineAlign: { enumerable: !0, get: function () { return h }, set: function (e) { e = Oi(e); e && (h = e, this.hasBeenReset = !0) } }, position: { enumerable: !0, get: function () { return p }, set: function (e) { if (e < 0 || 100 < e) throw new Error("Position must be between 0 and 100."); p = e, this.hasBeenReset = !0 } }, positionAlign: { enumerable: !0, get: function () { return f }, set: function (e) { e = Oi(e); e && (f = e, this.hasBeenReset = !0) } }, size: { enumerable: !0, get: function () { return m }, set: function (e) { if (e < 0 || 100 < e) throw new Error("Size must be between 0 and 100."); m = e, this.hasBeenReset = !0 } }, align: { enumerable: !0, get: function () { return g }, set: function (e) { e = Oi(e); if (!e) throw new SyntaxError( "align: an invalid or illegal alignment string was specified."); g = e, this.hasBeenReset = !0 } } }), this.displayState = void 0 } Mi.prototype.getCueAsHTML = function () { return WebVTT.convertCueToDOMTree(window, this.text) }; var Ri = Mi, Ni = { "": !0, up: !0 }; function Ui(e) { return "number" == typeof e && 0 <= e && e <= 100 } function Bi() { var t = 100, i = 3, n = 0, r = 100, a = 0, s = 100, o = ""; Object.defineProperties(this, { width: { enumerable: !0, get: function () { return t }, set: function (e) { if (!Ui(e)) throw new Error("Width must be between 0 and 100."); t = e } }, lines: { enumerable: !0, get: function () { return i }, set: function (e) { if ("number" != typeof e) throw new TypeError("Lines must be set to a number."); i = e } }, regionAnchorY: { enumerable: !0, get: function () { return r }, set: function (e) { if (!Ui(e)) throw new Error("RegionAnchorX must be between 0 and 100."); r = e } }, regionAnchorX: { enumerable: !0, get: function () { return n }, set: function (e) { if (!Ui(e)) throw new Error("RegionAnchorY must be between 0 and 100."); n = e } }, viewportAnchorY: { enumerable: !0, get: function () { return s }, set: function (e) { if (!Ui(e)) throw new Error("ViewportAnchorY must be between 0 and 100."); s = e } }, viewportAnchorX: { enumerable: !0, get: function () { return a }, set: function (e) { if (!Ui(e)) throw new Error("ViewportAnchorX must be between 0 and 100."); a = e } }, scroll: { enumerable: !0, get: function () { return o }, set: function (e) { e = "string" == typeof (e = e) && (!!Ni[e.toLowerCase()] && e.toLowerCase()); !1 === e || (o = e) } } }) } var Fi = m(function (e) { e = e.exports = { WebVTT: Pi, VTTCue: Ri, VTTRegion: Bi }; Kt.vttjs = e, Kt.WebVTT = e.WebVTT; var t = e.VTTCue, i = e.VTTRegion, n = Kt.VTTCue, r = Kt.VTTRegion; e.shim = function () { Kt.VTTCue = t, Kt.VTTRegion = i }, e.restore = function () { Kt.VTTCue = n, Kt.VTTRegion = r }, Kt.VTTCue || e.shim() }); Fi.WebVTT, Fi.VTTCue, Fi.VTTRegion; var ji = function (n) { function i(t, e) { var i; return void 0 === e && (e = function () { }), (t = void 0 === t ? {} : t).reportTouchActivity = !1, ( i = n.call(this, null, t, e) || this).onDurationChange_ = function (e) { return i.onDurationChange(e) }, i.trackProgress_ = function (e) { return i.trackProgress(e) }, i.trackCurrentTime_ = function (e) { return i.trackCurrentTime(e) }, i.stopTrackingCurrentTime_ = function (e) { return i.stopTrackingCurrentTime(e) }, i.disposeSourceHandler_ = function (e) { return i.disposeSourceHandler(e) }, i.queuedHanders_ = new Set, i.hasStarted_ = !1, i.on("playing", function () { this.hasStarted_ = !0 }), i.on("loadstart", function () { this.hasStarted_ = !1 }), oi.names.forEach(function (e) { e = oi[e]; t && t[e.getterName] && (i[e.privateName] = t[e.getterName]) }), i.featuresProgressEvents || i.manualProgressOn(), i.featuresTimeupdateEvents || i .manualTimeUpdatesOn(), ["Text", "Audio", "Video"].forEach(function (e) { !1 === t["native" + e + "Tracks"] && (i["featuresNative" + e + "Tracks"] = !1) }), !1 === t.nativeCaptions || !1 === t.nativeTextTracks ? i.featuresNativeTextTracks = !1 : ! 0 !== t.nativeCaptions && !0 !== t.nativeTextTracks || (i.featuresNativeTextTracks = !0), i .featuresNativeTextTracks || i.emulateTextTracks(), i.preloadTextTracks = !1 !== t .preloadTextTracks, i.autoRemoteTextTracks_ = new oi.text.ListClass, i.initTrackListeners(), t .nativeControlsForTouch || i.emitTapEvents(), i.constructor && (i.name_ = i.constructor.name || "Unknown Tech"), i } mt(i, n); var e = i.prototype; return e.triggerSourceset = function (e) { var t = this; this.isReady_ || this.one("ready", function () { return t.setTimeout(function () { return t.triggerSourceset(e) }, 1) }), this.trigger({ src: e, type: "sourceset" }) }, e.manualProgressOn = function () { this.on("durationchange", this.onDurationChange_), this.manualProgress = !0, this.one("ready", this.trackProgress_) }, e.manualProgressOff = function () { this.manualProgress = !1, this.stopTrackingProgress(), this.off("durationchange", this .onDurationChange_) }, e.trackProgress = function (e) { this.stopTrackingProgress(), this.progressInterval = this.setInterval(Ve(this, function () { var e = this.bufferedPercent(); this.bufferedPercent_ !== e && this.trigger("progress"), 1 === (this .bufferedPercent_ = e) && this.stopTrackingProgress() }), 500) }, e.onDurationChange = function (e) { this.duration_ = this.duration() }, e.buffered = function () { return vt(0, 0) }, e.bufferedPercent = function () { return _t(this.buffered(), this.duration_) }, e.stopTrackingProgress = function () { this.clearInterval(this.progressInterval) }, e.manualTimeUpdatesOn = function () { this.manualTimeUpdates = !0, this.on("play", this.trackCurrentTime_), this.on("pause", this .stopTrackingCurrentTime_) }, e.manualTimeUpdatesOff = function () { this.manualTimeUpdates = !1, this.stopTrackingCurrentTime(), this.off("play", this .trackCurrentTime_), this.off("pause", this.stopTrackingCurrentTime_) }, e.trackCurrentTime = function () { this.currentTimeInterval && this.stopTrackingCurrentTime(), this.currentTimeInterval = this .setInterval(function () { this.trigger({ type: "timeupdate", target: this, manuallyTriggered: !0 }) }, 250) }, e.stopTrackingCurrentTime = function () { this.clearInterval(this.currentTimeInterval), this.trigger({ type: "timeupdate", target: this, manuallyTriggered: !0 }) }, e.dispose = function () { this.clearTracks(ai.names), this.manualProgress && this.manualProgressOff(), this .manualTimeUpdates && this.manualTimeUpdatesOff(), n.prototype.dispose.call(this) }, e.clearTracks = function (e) { var r = this; (e = [].concat(e)).forEach(function (e) { for (var t = r[e + "Tracks"]() || [], i = t.length; i--;) { var n = t[i]; "text" === e && r.removeRemoteTextTrack(n), t.removeTrack(n) } }) }, e.cleanupAutoTextTracks = function () { for (var e = this.autoRemoteTextTracks_ || [], t = e.length; t--;) { var i = e[t]; this.removeRemoteTextTrack(i) } }, e.reset = function () { }, e.crossOrigin = function () { }, e.setCrossOrigin = function () { }, e .error = function (e) { return void 0 !== e && (this.error_ = new bt(e), this.trigger("error")), this.error_ }, e.played = function () { return this.hasStarted_ ? vt(0, 0) : vt() }, e.play = function () { }, e.setScrubbing = function () { }, e.scrubbing = function () { }, e .setCurrentTime = function () { this.manualTimeUpdates && this.trigger({ type: "timeupdate", target: this, manuallyTriggered: !0 }) }, e.initTrackListeners = function () { var r = this; ai.names.forEach(function (e) { function t() { r.trigger(e + "trackchange") } var i = ai[e], n = r[i.getterName](); n.addEventListener("removetrack", t), n.addEventListener("addtrack", t), r.on( "dispose", function () { n.removeEventListener("removetrack", t), n.removeEventListener( "addtrack", t) }) }) }, e.addWebVttScript_ = function () { var e, t = this; window.WebVTT || (document.body.contains(this.el()) ? !this.options_["vtt.js"] && S(Fi) && 0 < Object.keys(Fi).length ? this.trigger("vttjsloaded") : ((e = document.createElement( "script")).src = this.options_["vtt.js"] || "https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js", e.onload = function () { t.trigger("vttjsloaded") }, e.onerror = function () { t.trigger("vttjserror") }, this.on("dispose", function () { e.onload = null, e.onerror = null }), window.WebVTT = !0, this.el().parentNode.appendChild(e)) : this.ready(this .addWebVttScript_)) }, e.emulateTextTracks = function () { function t(e) { return n.addTrack(e.track) } function i(e) { return n.removeTrack(e.track) } var e = this, n = this.textTracks(), r = this.remoteTextTracks(); r.on("addtrack", t), r.on("removetrack", i), this.addWebVttScript_(); function a() { return e.trigger("texttrackchange") } function s() { a(); for (var e = 0; e < n.length; e++) { var t = n[e]; t.removeEventListener("cuechange", a), "showing" === t.mode && t.addEventListener( "cuechange", a) } } s(), n.addEventListener("change", s), n.addEventListener("addtrack", s), n.addEventListener( "removetrack", s), this.on("dispose", function () { r.off("addtrack", t), r.off("removetrack", i), n.removeEventListener("change", s), n .removeEventListener("addtrack", s), n.removeEventListener("removetrack", s); for (var e = 0; e < n.length; e++) n[e].removeEventListener("cuechange", a) }) }, e.addTextTrack = function (e, t, i) { if (!e) throw new Error("TextTrack kind is required but was not provided"); return function (e, t, i, n, r) { void 0 === r && (r = {}); var a = e.textTracks(); return r.kind = t, i && (r.label = i), n && (r.language = n), r.tech = e, r = new oi .text.TrackClass(r), a.addTrack(r), r }(this, e, t, i) }, e.createRemoteTextTrack = function (e) { e = lt(e, { tech: this }); return new si.remoteTextEl.TrackClass(e) }, e.addRemoteTextTrack = function (e, t) { var i = this, n = this.createRemoteTextTrack(e = void 0 === e ? {} : e); return !0 !== t && !1 !== t && (h.warn( 'Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js' ), t = !0), this.remoteTextTrackEls().addTrackElement_(n), this.remoteTextTracks() .addTrack(n.track), !0 !== t && this.ready(function () { return i.autoRemoteTextTracks_.addTrack(n.track) }), n }, e.removeRemoteTextTrack = function (e) { var t = this.remoteTextTrackEls().getTrackElementByTrack_(e); this.remoteTextTrackEls().removeTrackElement_(t), this.remoteTextTracks().removeTrack(e), this .autoRemoteTextTracks_.removeTrack(e) }, e.getVideoPlaybackQuality = function () { return {} }, e.requestPictureInPicture = function () { var e = this.options_.Promise || window.Promise; if (e) return e.reject() }, e.disablePictureInPicture = function () { return !0 }, e.setDisablePictureInPicture = function () { }, e.requestVideoFrameCallback = function (e) { var t = this, i = Pe++; return this.paused() ? (this.queuedHanders_.add(i), this.one("playing", function () { t.queuedHanders_.has(i) && (t.queuedHanders_.delete(i), e()) })) : this.requestNamedAnimationFrame(i, e), i }, e.cancelVideoFrameCallback = function (e) { this.queuedHanders_.has(e) ? this.queuedHanders_.delete(e) : this.cancelNamedAnimationFrame(e) }, e.setPoster = function () { }, e.playsinline = function () { }, e.setPlaysinline = function () { }, e .overrideNativeAudioTracks = function () { }, e.overrideNativeVideoTracks = function () { }, e .canPlayType = function () { return "" }, i.canPlayType = function () { return "" }, i.canPlaySource = function (e, t) { return i.canPlayType(e.type) }, i.isTech = function (e) { return e.prototype instanceof i || e instanceof i || e === i }, i.registerTech = function (e, t) { if (i.techs_ || (i.techs_ = {}), !i.isTech(t)) throw new Error("Tech " + e + " must be a Tech"); if (!i.canPlayType) throw new Error("Techs must have a static canPlayType method on them"); if (!i.canPlaySource) throw new Error("Techs must have a static canPlaySource method on them"); return e = ut(e), i.techs_[e] = t, i.techs_[ot(e)] = t, "Tech" !== e && i.defaultTechOrder_ .push(e), t }, i.getTech = function (e) { if (e) return i.techs_ && i.techs_[e] ? i.techs_[e] : (e = ut(e), window && window.videojs && window.videojs[e] ? (h.warn("The " + e + " tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)" ), window.videojs[e]) : void 0) }, i }(pt); oi.names.forEach(function (e) { var t = oi[e]; ji.prototype[t.getterName] = function () { return this[t.privateName] = this[t.privateName] || new t.ListClass, this[t.privateName] } }), ji.prototype.featuresVolumeControl = !0, ji.prototype.featuresMuteControl = !0, ji.prototype .featuresFullscreenResize = !1, ji.prototype.featuresPlaybackRate = !1, ji.prototype .featuresProgressEvents = !1, ji.prototype.featuresSourceset = !1, ji.prototype.featuresTimeupdateEvents = ! 1, ji.prototype.featuresNativeTextTracks = !1, ji.prototype.featuresVideoFrameCallback = !1, ji .withSourceHandlers = function (r) { r.registerSourceHandler = function (e, t) { var i = (i = r.sourceHandlers) || (r.sourceHandlers = []); void 0 === t && (t = i.length), i.splice(t, 0, e) }, r.canPlayType = function (e) { for (var t, i = r.sourceHandlers || [], n = 0; n < i.length; n++) if (t = i[n].canPlayType(e)) return t; return "" }, r.selectSourceHandler = function (e, t) { for (var i = r.sourceHandlers || [], n = 0; n < i.length; n++) if (i[n].canHandleSource(e, t)) return i[n]; return null }, r.canPlaySource = function (e, t) { var i = r.selectSourceHandler(e, t); return i ? i.canHandleSource(e, t) : "" }; ["seekable", "seeking", "duration"].forEach(function (e) { var t = this[e]; "function" == typeof t && (this[e] = function () { return this.sourceHandler_ && this.sourceHandler_[e] ? this.sourceHandler_[e] .apply(this.sourceHandler_, arguments) : t.apply(this, arguments) }) }, r.prototype), r.prototype.setSource = function (e) { var t = r.selectSourceHandler(e, this.options_); t || (r.nativeSourceHandler ? t = r.nativeSourceHandler : h.error( "No source handler found for the current source.")), this.disposeSourceHandler(), this .off("dispose", this.disposeSourceHandler_), t !== r.nativeSourceHandler && (this .currentSource_ = e), this.sourceHandler_ = t.handleSource(e, this, this.options_), this .one("dispose", this.disposeSourceHandler_) }, r.prototype.disposeSourceHandler = function () { this.currentSource_ && (this.clearTracks(["audio", "video"]), this.currentSource_ = null), this .cleanupAutoTextTracks(), this.sourceHandler_ && (this.sourceHandler_.dispose && this .sourceHandler_.dispose(), this.sourceHandler_ = null) } }, pt.registerComponent("Tech", ji), ji.registerTech("Tech", ji), ji.defaultTechOrder_ = []; var Hi = {}, qi = {}, Vi = {}; function Wi(e, t, i) { e.setTimeout(function () { return function i(n, e, r, a, s, o) { void 0 === n && (n = {}); void 0 === e && (e = []); void 0 === s && (s = []); void 0 === o && (o = !1); var t = e, e = t[0], u = t.slice(1); if ("string" == typeof e) i(n, Hi[e], r, a, s, o); else if (e) { var l = Qi(a, e); if (!l.setSource) return s.push(l), i(n, u, r, a, s, o); l.setSource(b({}, n), function (e, t) { return e ? i(n, u, r, a, s, o) : (s.push(l), void i(t, n.type === t .type ? u : Hi[t.type], r, a, s, o)) }) } else u.length ? i(n, u, r, a, s, o) : o ? r(n, s) : i(n, Hi["*"], r, a, s, !0) }(t, Hi[t.type], i, e) }, 1) } function Gi(e, t, i, n) { void 0 === n && (n = null); var r = "call" + ut(i), r = e.reduce(Yi(r), n), n = r === Vi, r = n ? null : t[i](r); return function (e, t, i, n) { for (var r = e.length - 1; 0 <= r; r--) { var a = e[r]; a[t] && a[t](n, i) } }(e, i, r, n), r } var zi = { buffered: 1, currentTime: 1, duration: 1, muted: 1, played: 1, paused: 1, seekable: 1, volume: 1, ended: 1 }, Xi = { setCurrentTime: 1, setMuted: 1, setVolume: 1 }, Ki = { play: 1, pause: 1 }; function Yi(i) { return function (e, t) { return e === Vi ? Vi : t[i] ? t[i](e) : e } } function Qi(e, t) { var i = qi[e.id()], n = null; if (null == i) return n = t(e), qi[e.id()] = [ [t, n] ], n; for (var r = 0; r < i.length; r++) { var a = i[r], s = a[0], a = a[1]; s === t && (n = a) } return null === n && (n = t(e), i.push([t, n])), n } function $i(e) { return e = Nt(e = void 0 === e ? "" : e), Zi[e.toLowerCase()] || "" } function Ji(e) { var t; return e = Array.isArray(e) ? (t = [], e.forEach(function (e) { e = Ji(e), Array.isArray(e) ? t = t.concat(e) : T(e) && t.push(e) }), t) : "string" == typeof e && e.trim() ? [en({ src: e })] : T(e) && "string" == typeof e.src && e.src && e.src.trim() ? [en(e)] : [] } var Zi = { opus: "video/ogg", ogv: "video/ogg", mp4: "video/mp4", mov: "video/mp4", m4v: "video/mp4", mkv: "video/x-matroska", m4a: "audio/mp4", mp3: "audio/mpeg", aac: "audio/aac", caf: "audio/x-caf", flac: "audio/flac", oga: "audio/ogg", wav: "audio/wav", m3u8: "application/x-mpegURL", mpd: "application/dash+xml", jpg: "image/jpeg", jpeg: "image/jpeg", gif: "image/gif", png: "image/png", svg: "image/svg+xml", webp: "image/webp" }; function en(e) { var t; return e.type || (t = $i(e.src)) && (e.type = t), e } I = function (u) { function e(e, t, i) { var n = lt({ createEl: !1 }, t), i = u.call(this, e, n, i) || this; if (t.playerOptions.sources && 0 !== t.playerOptions.sources.length) e.src(t.playerOptions.sources); else for (var r = 0, a = t.playerOptions.techOrder; r < a.length; r++) { var s = ut(a[r]), o = ji.getTech(s); if ((o = !s ? pt.getComponent(s) : o) && o.isSupported()) { e.loadTech_(s); break } } return i } return mt(e, u), e }(pt); pt.registerComponent("MediaLoader", I); C = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.options_.controlText && i.controlText(i.options_.controlText), i.handleMouseOver_ = function (e) { return i.handleMouseOver(e) }, i.handleMouseOut_ = function (e) { return i.handleMouseOut(e) }, i.handleClick_ = function (e) { return i.handleClick(e) }, i.handleKeyDown_ = function (e) { return i.handleKeyDown(e) }, i.emitTapEvents(), i.enable(), i } mt(e, n); var t = e.prototype; return t.createEl = function (e, t, i) { void 0 === e && (e = "div"), void 0 === t && (t = {}), void 0 === i && (i = {}), t = b({ className: this.buildCSSClass(), tabIndex: 0 }, t), "button" === e && h.error("Creating a ClickableComponent with an HTML element of " + e + " is not supported; use a Button instead."), i = b({ role: "button" }, i), this.tabIndex_ = t.tabIndex; i = $(e, t, i); return i.appendChild($("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": !0 })), this.createControlTextEl(i), i }, t.dispose = function () { this.controlTextEl_ = null, n.prototype.dispose.call(this) }, t.createControlTextEl = function (e) { return this.controlTextEl_ = $("span", { className: "vjs-control-text" }, { "aria-live": "polite" }), e && e.appendChild(this.controlTextEl_), this.controlText(this.controlText_, e), this .controlTextEl_ }, t.controlText = function (e, t) { if (void 0 === t && (t = this.el()), void 0 === e) return this.controlText_ || "Need Text"; var i = this.localize(e); this.controlText_ = e, J(this.controlTextEl_, i), this.nonIconControl || this.player_.options_ .noUITitleAttributes || t.setAttribute("title", i) }, t.buildCSSClass = function () { return "vjs-control vjs-button " + n.prototype.buildCSSClass.call(this) }, t.enable = function () { this.enabled_ || (this.enabled_ = !0, this.removeClass("vjs-disabled"), this.el_.setAttribute( "aria-disabled", "false"), "undefined" != typeof this.tabIndex_ && this.el_ .setAttribute("tabIndex", this.tabIndex_), this.on(["tap", "click"], this.handleClick_), this.on("keydown", this.handleKeyDown_)) }, t.disable = function () { this.enabled_ = !1, this.addClass("vjs-disabled"), this.el_.setAttribute("aria-disabled", "true"), "undefined" != typeof this.tabIndex_ && this.el_.removeAttribute("tabIndex"), this.off("mouseover", this.handleMouseOver_), this.off("mouseout", this.handleMouseOut_), this.off(["tap", "click"], this.handleClick_), this.off("keydown", this.handleKeyDown_) }, t.handleLanguagechange = function () { this.controlText(this.controlText_) }, t.handleClick = function (e) { this.options_.clickHandler && this.options_.clickHandler.call(this, arguments) }, t.handleKeyDown = function (e) { ht.isEventKey(e, "Space") || ht.isEventKey(e, "Enter") ? (e.preventDefault(), e .stopPropagation(), this.trigger("click")) : n.prototype.handleKeyDown.call(this, e) }, e }(pt); pt.registerComponent("ClickableComponent", C), pt.registerComponent("PosterImage", function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.update(), i.update_ = function (e) { return i.update(e) }, e.on("posterchange", i.update_), i } mt(e, n); var t = e.prototype; return t.dispose = function () { this.player().off("posterchange", this.update_), n.prototype.dispose.call(this) }, t.createEl = function () { return $("div", { className: "vjs-poster", tabIndex: -1 }) }, t.update = function (e) { var t = this.player().poster(); this.setSrc(t), t ? this.show() : this.hide() }, t.setSrc = function (e) { this.el_.style.backgroundImage = e ? 'url("' + e + '")' : "" }, t.handleClick = function (e) { var t; this.player_.controls() && (t = this.player_.usingPlugin("eme") && this.player_.eme .sessions && 0 < this.player_.eme.sessions.length, !this.player_.tech(!0) || (N || O) && t || this.player_.tech(!0).focus(), this.player_.paused() ? Et(this .player_.play()) : this.player_.pause()) }, e }(C)); var tn = "#222", nn = { monospace: "monospace", sansSerif: "sans-serif", serif: "serif", monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace', monospaceSerif: '"Courier New", monospace', proportionalSansSerif: "sans-serif", proportionalSerif: "serif", casual: '"Comic Sans MS", Impact, fantasy', script: '"Monotype Corsiva", cursive', smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif' }; function rn(e, t) { var i; if (4 === e.length) i = e[1] + e[1] + e[2] + e[2] + e[3] + e[3]; else { if (7 !== e.length) throw new Error("Invalid color code provided, " + e + "; must be formatted as e.g. #f0e or #f604e2."); i = e.slice(1) } return "rgba(" + parseInt(i.slice(0, 2), 16) + "," + parseInt(i.slice(2, 4), 16) + "," + parseInt(i.slice(4, 6), 16) + "," + t + ")" } function an(e, t, i) { try { e.style[t] = i } catch (e) { return } } pt.registerComponent("TextTrackDisplay", function (a) { function e(i, e, t) { function n(e) { return r.updateDisplay(e) } var r = a.call(this, i, e, t) || this; return i.on("loadstart", function (e) { return r.toggleDisplay(e) }), i.on("texttrackchange", n), i.on("loadedmetadata", function (e) { return r.preselectTrack(e) }), i.ready(Ve(ft(r), function () { if (i.tech_ && i.tech_.featuresNativeTextTracks) this.hide(); else { i.on("fullscreenchange", n), i.on("playerresize", n), window .addEventListener("orientationchange", n), i.on("dispose", function () { return window.removeEventListener("orientationchange", n) }); for (var e = this.options_.playerOptions.tracks || [], t = 0; t < e .length; t++) this.player_.addRemoteTextTrack(e[t], !0); this.preselectTrack() } })), r } mt(e, a); var t = e.prototype; return t.preselectTrack = function () { for (var e, t, i, n = { captions: 1, subtitles: 1 }, r = this.player_.textTracks(), a = this.player_.cache_.selectedLanguage, s = 0; s < r .length; s++) { var o = r[s]; a && a.enabled && a.language && a.language === o.language && o.kind in n ? i = o .kind !== a.kind && i || o : a && !a.enabled ? t = e = i = null : o.default && ( "descriptions" !== o.kind || e ? o.kind in n && !t && (t = o) : e = o) } i ? i.mode = "showing" : t ? t.mode = "showing" : e && (e.mode = "showing") }, t.toggleDisplay = function () { this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks ? this.hide() : this .show() }, t.createEl = function () { return a.prototype.createEl.call(this, "div", { className: "vjs-text-track-display" }, { translate: "yes", "aria-live": "off", "aria-atomic": "true" }) }, t.clearDisplay = function () { "function" == typeof window.WebVTT && window.WebVTT.processCues(window, [], this.el_) }, t.updateDisplay = function () { var e = this.player_.textTracks(), t = this.options_.allowMultipleShowingTracks; if (this.clearDisplay(), t) { for (var i = [], n = 0; n < e.length; ++n) { var r = e[n]; "showing" === r.mode && i.push(r) } this.updateForTrack(i) } else { for (var a = null, s = null, o = e.length; o--;) { var u = e[o]; "showing" === u.mode && ("descriptions" === u.kind ? a = u : s = u) } s ? ("off" !== this.getAttribute("aria-live") && this.setAttribute("aria-live", "off"), this.updateForTrack(s)) : a && ("assertive" !== this.getAttribute( "aria-live") && this.setAttribute("aria-live", "assertive"), this .updateForTrack(a)) } }, t.updateDisplayState = function (e) { for (var t = this.player_.textTrackSettings.getValues(), i = e.activeCues, n = i .length; n--;) { var r, a = i[n]; a && (r = a.displayState, t.color && (r.firstChild.style.color = t.color), t .textOpacity && an(r.firstChild, "color", rn(t.color || "#fff", t.textOpacity)), t.backgroundColor && (r.firstChild.style.backgroundColor = t.backgroundColor), t .backgroundOpacity && an(r.firstChild, "backgroundColor", rn(t .backgroundColor || "#000", t.backgroundOpacity)), t.windowColor && (t .windowOpacity ? an(r, "backgroundColor", rn(t.windowColor, t .windowOpacity)) : r.style.backgroundColor = t.windowColor), t .edgeStyle && ("dropshadow" === t.edgeStyle ? r.firstChild.style.textShadow = "2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px " + tn : "raised" === t .edgeStyle ? r.firstChild.style.textShadow = "1px 1px #222, 2px 2px #222, 3px 3px " + tn : "depressed" === t.edgeStyle ? r.firstChild.style.textShadow = "1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px " + tn : "uniform" === t .edgeStyle && (r.firstChild.style.textShadow = "0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px " + tn)), t .fontPercent && 1 !== t.fontPercent && (a = window.parseFloat(r.style.fontSize), r.style.fontSize = a * t.fontPercent + "px", r.style.height = "auto", r .style.top = "auto"), t.fontFamily && "default" !== t.fontFamily && ( "small-caps" === t.fontFamily ? r.firstChild.style.fontVariant = "small-caps" : r.firstChild.style.fontFamily = nn[t.fontFamily])) } }, t.updateForTrack = function (e) { if (Array.isArray(e) || (e = [e]), "function" == typeof window.WebVTT && !e.every(function ( e) { return !e.activeCues })) { for (var t = [], i = 0; i < e.length; ++i) for (var n = e[i], r = 0; r < n.activeCues.length; ++r) t.push(n.activeCues[r]); window.WebVTT.processCues(window, t, this.el_); for (var a = 0; a < e.length; ++a) { for (var s = e[a], o = 0; o < s.activeCues.length; ++o) { var u = s.activeCues[o].displayState; te(u, "vjs-text-track-cue"), te(u, "vjs-text-track-cue-" + (s.language || a)), s .language && oe(u, "lang", s.language) } this.player_.textTrackSettings && this.updateDisplayState(s) } } }, e }(pt)), pt.registerComponent("LoadingSpinner", function (i) { function e() { return i.apply(this, arguments) || this } return mt(e, i), e.prototype.createEl = function () { var e = this.player_.isAudio(), t = this.localize(e ? "Audio Player" : "Video Player"), e = $("span", { className: "vjs-control-text", textContent: this.localize("{1} is loading.", [t]) }), t = i.prototype.createEl.call(this, "div", { className: "vjs-loading-spinner", dir: "ltr" }); return t.appendChild(e), t }, e }(pt)); var sn = function (t) { function e() { return t.apply(this, arguments) || this } mt(e, t); var i = e.prototype; return i.createEl = function (e, t, i) { void 0 === t && (t = {}), void 0 === i && (i = {}); i = $("button", t = b({ className: this.buildCSSClass() }, t), i = b({ type: "button" }, i)); return i.appendChild($("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": !0 })), this.createControlTextEl(i), i }, i.addChild = function (e, t) { void 0 === t && (t = {}); var i = this.constructor.name; return h.warn("Adding an actionable (user controllable) child to a Button (" + i + ") is not supported; use a ClickableComponent instead."), pt.prototype.addChild.call( this, e, t) }, i.enable = function () { t.prototype.enable.call(this), this.el_.removeAttribute("disabled") }, i.disable = function () { t.prototype.disable.call(this), this.el_.setAttribute("disabled", "disabled") }, i.handleKeyDown = function (e) { ht.isEventKey(e, "Space") || ht.isEventKey(e, "Enter") ? e.stopPropagation() : t.prototype .handleKeyDown.call(this, e) }, e }(C); pt.registerComponent("Button", sn); Bt = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.mouseused_ = !1, i.on("mousedown", function (e) { return i.handleMouseDown(e) }), i } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-big-play-button" }, t.handleClick = function (e) { var t = this.player_.play(); if (this.mouseused_ && e.clientX && e.clientY) { var i = this.player_.usingPlugin("eme") && this.player_.eme.sessions && 0 < this.player_.eme .sessions.length; return Et(t), void (!this.player_.tech(!0) || (N || O) && i || this.player_.tech(!0).focus()) } var i = this.player_.getChild("controlBar"), n = i && i.getChild("playToggle"); n ? (i = function () { return n.focus() }, wt(t) ? t.then(i, function () { }) : this.setTimeout(i, 1)) : this.player_.tech(!0).focus() }, t.handleKeyDown = function (e) { this.mouseused_ = !1, n.prototype.handleKeyDown.call(this, e) }, t.handleMouseDown = function (e) { this.mouseused_ = !0 }, e }(sn); Bt.prototype.controlText_ = "Play Video", pt.registerComponent("BigPlayButton", Bt), pt.registerComponent( "CloseButton", function (i) { function e(e, t) { e = i.call(this, e, t) || this; return e.controlText(t && t.controlText || e.localize("Close")), e } mt(e, i); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-close-button " + i.prototype.buildCSSClass.call(this) }, t.handleClick = function (e) { this.trigger({ type: "close", bubbles: !1 }) }, t.handleKeyDown = function (e) { ht.isEventKey(e, "Esc") ? (e.preventDefault(), e.stopPropagation(), this.trigger("click")) : i.prototype.handleKeyDown.call(this, e) }, e }(sn)); Ft = function (n) { function e(e, t) { var i = n.call(this, e, t = void 0 === t ? {} : t) || this; return t.replay = void 0 === t.replay || t.replay, i.on(e, "play", function (e) { return i.handlePlay(e) }), i.on(e, "pause", function (e) { return i.handlePause(e) }), t.replay && i.on(e, "ended", function (e) { return i.handleEnded(e) }), i } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-play-control " + n.prototype.buildCSSClass.call(this) }, t.handleClick = function (e) { this.player_.paused() ? Et(this.player_.play()) : this.player_.pause() }, t.handleSeeked = function (e) { this.removeClass("vjs-ended"), this.player_.paused() ? this.handlePause(e) : this.handlePlay(e) }, t.handlePlay = function (e) { this.removeClass("vjs-ended"), this.removeClass("vjs-paused"), this.addClass("vjs-playing"), this.controlText("Pause") }, t.handlePause = function (e) { this.removeClass("vjs-playing"), this.addClass("vjs-paused"), this.controlText("Play") }, t.handleEnded = function (e) { var t = this; this.removeClass("vjs-playing"), this.addClass("vjs-ended"), this.controlText("Replay"), this .one(this.player_, "seeked", function (e) { return t.handleSeeked(e) }) }, e }(sn); Ft.prototype.controlText_ = "Play", pt.registerComponent("PlayToggle", Ft); function on(e, t) { e = e < 0 ? 0 : e; var i = Math.floor(e % 60), n = Math.floor(e / 60 % 60), r = Math.floor(e / 3600), a = Math.floor(t / 60 % 60), t = Math.floor(t / 3600); return (r = 0 < (r = isNaN(e) || e === 1 / 0 ? n = i = "-" : r) || 0 < t ? r + ":" : "") + (n = ((r || 10 <= a) && n < 10 ? "0" + n : n) + ":") + (i = i < 10 ? "0" + i : i) } var un = on; function ln(e, t) { return un(e, t = void 0 === t ? e : t) } k = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.on(e, ["timeupdate", "ended"], function (e) { return i.updateContent(e) }), i.updateTextNode_(), i } mt(e, n); var t = e.prototype; return t.createEl = function () { var e = this.buildCSSClass(), t = n.prototype.createEl.call(this, "div", { className: e + " vjs-time-control vjs-control" }), i = $("span", { className: "vjs-control-text", textContent: this.localize(this.labelText_) + " " }, { role: "presentation" }); return t.appendChild(i), this.contentEl_ = $("span", { className: e + "-display" }, { "aria-live": "off", role: "presentation" }), t.appendChild(this.contentEl_), t }, t.dispose = function () { this.contentEl_ = null, this.textNode_ = null, n.prototype.dispose.call(this) }, t.updateTextNode_ = function (e) { var t = this; e = ln(e = void 0 === e ? 0 : e), this.formattedTime_ !== e && (this.formattedTime_ = e, this .requestNamedAnimationFrame("TimeDisplay#updateTextNode_", function () { var e; t.contentEl_ && ((e = t.textNode_) && t.contentEl_.firstChild !== e && (e = null, h.warn( "TimeDisplay#updateTextnode_: Prevented replacement of text node element since it was no longer a child of this node. Appending a new node instead." )), t.textNode_ = document.createTextNode(t.formattedTime_), t .textNode_ && (e ? t.contentEl_.replaceChild(t.textNode_, e) : t .contentEl_.appendChild(t.textNode_))) })) }, t.updateContent = function (e) { }, e }(pt); k.prototype.labelText_ = "Time", k.prototype.controlText_ = "Time", pt.registerComponent("TimeDisplay", k); jt = function (e) { function t() { return e.apply(this, arguments) || this } mt(t, e); var i = t.prototype; return i.buildCSSClass = function () { return "vjs-current-time" }, i.updateContent = function (e) { var t = this.player_.ended() ? this.player_.duration() : this.player_.scrubbing() ? this.player_ .getCache().currentTime : this.player_.currentTime(); this.updateTextNode_(t) }, t }(k); jt.prototype.labelText_ = "Current Time", jt.prototype.controlText_ = "Current Time", pt.registerComponent( "CurrentTimeDisplay", jt); j = function (n) { function e(e, t) { var i = n.call(this, e, t) || this, t = function (e) { return i.updateContent(e) }; return i.on(e, "durationchange", t), i.on(e, "loadstart", t), i.on(e, "loadedmetadata", t), i } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-duration" }, t.updateContent = function (e) { var t = this.player_.duration(); this.updateTextNode_(t) }, e }(k); j.prototype.labelText_ = "Duration", j.prototype.controlText_ = "Duration", pt.registerComponent( "DurationDisplay", j), pt.registerComponent("TimeDivider", function (n) { function e() { return n.apply(this, arguments) || this } return mt(e, n), e.prototype.createEl = function () { var e = n.prototype.createEl.call(this, "div", { className: "vjs-time-control vjs-time-divider" }, { "aria-hidden": !0 }), t = n.prototype.createEl.call(this, "div"), i = n.prototype.createEl.call(this, "span", { textContent: "/" }); return t.appendChild(i), e.appendChild(t), e }, e }(pt)); f = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.on(e, "durationchange", function (e) { return i.updateContent(e) }), i } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-remaining-time" }, t.createEl = function () { var e = n.prototype.createEl.call(this); return !1 !== this.options_.displayNegative && e.insertBefore($("span", {}, { "aria-hidden": !0 }, "-"), this.contentEl_), e }, t.updateContent = function (e) { var t; "number" == typeof this.player_.duration() && (t = this.player_.ended() ? 0 : this.player_ .remainingTimeDisplay ? this.player_.remainingTimeDisplay() : this.player_ .remainingTime(), this.updateTextNode_(t)) }, e }(k); f.prototype.labelText_ = "Remaining Time", f.prototype.controlText_ = "Remaining Time", pt.registerComponent( "RemainingTimeDisplay", f), pt.registerComponent("LiveDisplay", function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.updateShowing(), i.on(i.player(), "durationchange", function (e) { return i.updateShowing(e) }), i } mt(e, n); var t = e.prototype; return t.createEl = function () { var e = n.prototype.createEl.call(this, "div", { className: "vjs-live-control vjs-control" }); return this.contentEl_ = $("div", { className: "vjs-live-display" }, { "aria-live": "off" }), this.contentEl_.appendChild($("span", { className: "vjs-control-text", textContent: this.localize("Stream Type") + " " })), this.contentEl_.appendChild(document.createTextNode(this.localize("LIVE"))), e .appendChild(this.contentEl_), e }, t.dispose = function () { this.contentEl_ = null, n.prototype.dispose.call(this) }, t.updateShowing = function (e) { this.player().duration() === 1 / 0 ? this.show() : this.hide() }, e }(pt)); ui = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.updateLiveEdgeStatus(), i.player_.liveTracker && (i.updateLiveEdgeStatusHandler_ = function (e) { return i.updateLiveEdgeStatus(e) }, i.on(i.player_.liveTracker, "liveedgechange", i.updateLiveEdgeStatusHandler_)), i } mt(e, n); var t = e.prototype; return t.createEl = function () { var e = n.prototype.createEl.call(this, "button", { className: "vjs-seek-to-live-control vjs-control" }); return this.textEl_ = $("span", { className: "vjs-seek-to-live-text", textContent: this.localize("LIVE") }, { "aria-hidden": "true" }), e.appendChild(this.textEl_), e }, t.updateLiveEdgeStatus = function () { !this.player_.liveTracker || this.player_.liveTracker.atLiveEdge() ? (this.setAttribute( "aria-disabled", !0), this.addClass("vjs-at-live-edge"), this.controlText( "Seek to live, currently playing live")) : (this.setAttribute("aria-disabled", !1), this .removeClass("vjs-at-live-edge"), this.controlText( "Seek to live, currently behind live")) }, t.handleClick = function () { this.player_.liveTracker.seekToLiveEdge() }, t.dispose = function () { this.player_.liveTracker && this.off(this.player_.liveTracker, "liveedgechange", this .updateLiveEdgeStatusHandler_), this.textEl_ = null, n.prototype.dispose.call(this) }, e }(sn); ui.prototype.controlText_ = "Seek to live, currently playing live", pt.registerComponent("SeekToLive", ui); function cn(e, t, i) { return e = Number(e), Math.min(i, Math.max(t, isNaN(e) ? t : e)) } li = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.handleMouseDown_ = function (e) { return i.handleMouseDown(e) }, i.handleMouseUp_ = function (e) { return i.handleMouseUp(e) }, i.handleKeyDown_ = function (e) { return i.handleKeyDown(e) }, i.handleClick_ = function (e) { return i.handleClick(e) }, i.handleMouseMove_ = function (e) { return i.handleMouseMove(e) }, i.update_ = function (e) { return i.update(e) }, i.bar = i.getChild(i.options_.barName), i.vertical(!!i.options_.vertical), i.enable(), i } mt(e, n); var t = e.prototype; return t.enabled = function () { return this.enabled_ }, t.enable = function () { this.enabled() || (this.on("mousedown", this.handleMouseDown_), this.on("touchstart", this .handleMouseDown_), this.on("keydown", this.handleKeyDown_), this.on("click", this .handleClick_), this.on(this.player_, "controlsvisible", this.update), this .playerEvent && this.on(this.player_, this.playerEvent, this.update), this.removeClass( "disabled"), this.setAttribute("tabindex", 0), this.enabled_ = !0) }, t.disable = function () { var e; this.enabled() && (e = this.bar.el_.ownerDocument, this.off("mousedown", this.handleMouseDown_), this.off("touchstart", this.handleMouseDown_), this.off("keydown", this.handleKeyDown_), this.off("click", this.handleClick_), this.off(this.player_, "controlsvisible", this .update_), this.off(e, "mousemove", this.handleMouseMove_), this.off(e, "mouseup", this.handleMouseUp_), this.off(e, "touchmove", this.handleMouseMove_), this.off(e, "touchend", this.handleMouseUp_), this.removeAttribute("tabindex"), this.addClass( "disabled"), this.playerEvent && this.off(this.player_, this.playerEvent, this .update), this.enabled_ = !1) }, t.createEl = function (e, t, i) { return void 0 === i && (i = {}), (t = void 0 === t ? {} : t).className = t.className + " vjs-slider", t = b({ tabIndex: 0 }, t), i = b({ role: "slider", "aria-valuenow": 0, "aria-valuemin": 0, "aria-valuemax": 100, tabIndex: 0 }, i), n.prototype.createEl.call(this, e, t, i) }, t.handleMouseDown = function (e) { var t = this.bar.el_.ownerDocument; "mousedown" === e.type && e.preventDefault(), "touchstart" !== e.type || M || e .preventDefault(), le(), this.addClass("vjs-sliding"), this.trigger("slideractive"), this.on(t, "mousemove", this.handleMouseMove_), this.on(t, "mouseup", this.handleMouseUp_), this .on(t, "touchmove", this.handleMouseMove_), this.on(t, "touchend", this.handleMouseUp_), this.handleMouseMove(e, !0) }, t.handleMouseMove = function (e) { }, t.handleMouseUp = function () { var e = this.bar.el_.ownerDocument; ce(), this.removeClass("vjs-sliding"), this.trigger("sliderinactive"), this.off(e, "mousemove", this.handleMouseMove_), this.off(e, "mouseup", this.handleMouseUp_), this.off(e, "touchmove", this.handleMouseMove_), this.off(e, "touchend", this.handleMouseUp_), this .update() }, t.update = function () { var t = this; if (this.el_ && this.bar) { var i = this.getProgress(); return i === this.progress_ ? i : (this.progress_ = i, this.requestNamedAnimationFrame( "Slider#update", function () { var e = t.vertical() ? "height" : "width"; t.bar.el().style[e] = (100 * i).toFixed(2) + "%" }), i) } }, t.getProgress = function () { return Number(cn(this.getPercent(), 0, 1).toFixed(4)) }, t.calculateDistance = function (e) { e = pe(this.el_, e); return this.vertical() ? e.y : e.x }, t.handleKeyDown = function (e) { ht.isEventKey(e, "Left") || ht.isEventKey(e, "Down") ? (e.preventDefault(), e.stopPropagation(), this.stepBack()) : ht.isEventKey(e, "Right") || ht.isEventKey(e, "Up") ? (e .preventDefault(), e.stopPropagation(), this.stepForward()) : n.prototype.handleKeyDown .call(this, e) }, t.handleClick = function (e) { e.stopPropagation(), e.preventDefault() }, t.vertical = function (e) { if (void 0 === e) return this.vertical_ || !1; this.vertical_ = !!e, this.vertical_ ? this.addClass("vjs-slider-vertical") : this.addClass( "vjs-slider-horizontal") }, e }(pt); pt.registerComponent("Slider", li); function dn(e, t) { return cn(e / t * 100, 0, 100).toFixed(2) + "%" } pt.registerComponent("LoadProgressBar", function (r) { function e(e, t) { var i = r.call(this, e, t) || this; return i.partEls_ = [], i.on(e, "progress", function (e) { return i.update(e) }), i } mt(e, r); var t = e.prototype; return t.createEl = function () { var e = r.prototype.createEl.call(this, "div", { className: "vjs-load-progress" }), t = $("span", { className: "vjs-control-text" }), i = $("span", { textContent: this.localize("Loaded") }), n = document.createTextNode(": "); return this.percentageEl_ = $("span", { className: "vjs-control-text-loaded-percentage", textContent: "0%" }), e.appendChild(t), t.appendChild(i), t.appendChild(n), t.appendChild(this .percentageEl_), e }, t.dispose = function () { this.partEls_ = null, this.percentageEl_ = null, r.prototype.dispose.call(this) }, t.update = function (e) { var l = this; this.requestNamedAnimationFrame("LoadProgressBar#update", function () { var e = l.player_.liveTracker, t = l.player_.buffered(), e = e && e.isLive() ? e.seekableEnd() : l.player_.duration(), i = l.player_.bufferedEnd(), n = l.partEls_, e = dn(i, e); l.percent_ !== e && (l.el_.style.width = e, J(l.percentageEl_, e), l.percent_ = e); for (var r = 0; r < t.length; r++) { var a = t.start(r), s = t.end(r), o = n[r]; o || (o = l.el_.appendChild($()), n[r] = o), o.dataset.start === a && o .dataset.end === s || (o.dataset.start = a, o.dataset.end = s, o.style .left = dn(a, i), o.style.width = dn(s - a, i)) } for (var u = n.length; u > t.length; u--) l.el_.removeChild(n[u - 1]); n.length = t.length }) }, e }(pt)), pt.registerComponent("TimeTooltip", function (i) { function e(e, t) { t = i.call(this, e, t) || this; return t.update = We(Ve(ft(t), t.update), 30), t } mt(e, i); var t = e.prototype; return t.createEl = function () { return i.prototype.createEl.call(this, "div", { className: "vjs-time-tooltip" }, { "aria-hidden": "true" }) }, t.update = function (e, t, i) { var n = he(this.el_), r = de(this.player_.el()), a = e.width * t; r && n && (t = e.left - r.left + a, r = e.width - a + (r.right - e.right), t < (e = n .width / 2) ? e += e - t : r < e && (e = r), e < 0 ? e = 0 : e > n.width && (e = n.width), e = Math.round(e), this.el_.style.right = "-" + e + "px", this.write( i)) }, t.write = function (e) { J(this.el_, e) }, t.updateTime = function (n, r, a, s) { var o = this; this.requestNamedAnimationFrame("TimeTooltip#updateTime", function () { var e, t, i = o.player_.duration(); i = o.player_.liveTracker && o.player_.liveTracker.isLive() ? ((t = (e = o .player_.liveTracker.liveWindow()) - r * e) < 1 ? "" : "-") + ln(t, e) : ln(a, i), o.update(n, r, i), s && s() }) }, e }(pt)); Xt = function (i) { function e(e, t) { t = i.call(this, e, t) || this; return t.update = We(Ve(ft(t), t.update), 30), t } mt(e, i); var t = e.prototype; return t.createEl = function () { return i.prototype.createEl.call(this, "div", { className: "vjs-play-progress vjs-slider-bar" }, { "aria-hidden": "true" }) }, t.update = function (e, t) { var i, n = this.getChild("timeTooltip"); n && (i = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_ .currentTime(), n.updateTime(e, t, i)) }, e }(pt); Xt.prototype.options_ = { children: [] }, q || A || Xt.prototype.options_.children.push("timeTooltip"), pt.registerComponent("PlayProgressBar", Xt); I = function (i) { function e(e, t) { t = i.call(this, e, t) || this; return t.update = We(Ve(ft(t), t.update), 30), t } mt(e, i); var t = e.prototype; return t.createEl = function () { return i.prototype.createEl.call(this, "div", { className: "vjs-mouse-display" }) }, t.update = function (e, t) { var i = this, n = t * this.player_.duration(); this.getChild("timeTooltip").updateTime(e, t, n, function () { i.el_.style.left = e.width * t + "px" }) }, e }(pt); I.prototype.options_ = { children: ["timeTooltip"] }, pt.registerComponent("MouseTimeDisplay", I); Bt = function (a) { function e(e, t) { t = a.call(this, e, t) || this; return t.setEventHandlers_(), t } mt(e, a); var t = e.prototype; return t.setEventHandlers_ = function () { var t = this; this.update_ = Ve(this, this.update), this.update = We(this.update_, 30), this.on(this.player_, ["ended", "durationchange", "timeupdate"], this.update), this.player_.liveTracker && this.on(this.player_.liveTracker, "liveedgechange", this.update), this.updateInterval = null, this.enableIntervalHandler_ = function (e) { return t.enableInterval_(e) }, this.disableIntervalHandler_ = function (e) { return t.disableInterval_(e) }, this.on(this.player_, ["playing"], this.enableIntervalHandler_), this.on(this.player_, [ "ended", "pause", "waiting" ], this.disableIntervalHandler_), "hidden" in document && "visibilityState" in document && this.on(document, "visibilitychange", this.toggleVisibility_) }, t.toggleVisibility_ = function (e) { "hidden" === document.visibilityState ? (this.cancelNamedAnimationFrame("SeekBar#update"), this .cancelNamedAnimationFrame("Slider#update"), this.disableInterval_(e)) : (this.player_ .ended() || this.player_.paused() || this.enableInterval_(), this.update()) }, t.enableInterval_ = function () { this.updateInterval || (this.updateInterval = this.setInterval(this.update, 30)) }, t.disableInterval_ = function (e) { this.player_.liveTracker && this.player_.liveTracker.isLive() && e && "ended" !== e.type || this .updateInterval && (this.clearInterval(this.updateInterval), this.updateInterval = null) }, t.createEl = function () { return a.prototype.createEl.call(this, "div", { className: "vjs-progress-holder" }, { "aria-label": this.localize("Progress Bar") }) }, t.update = function (e) { var n = this; if ("hidden" !== document.visibilityState) { var r = a.prototype.update.call(this); return this.requestNamedAnimationFrame("SeekBar#update", function () { var e = n.player_.ended() ? n.player_.duration() : n.getCurrentTime_(), t = n.player_.liveTracker, i = n.player_.duration(); t && t.isLive() && (i = n.player_.liveTracker.liveCurrentTime()), n.percent_ !== r && (n.el_.setAttribute("aria-valuenow", (100 * r).toFixed(2)), n .percent_ = r), n.currentTime_ === e && n.duration_ === i || (n.el_ .setAttribute("aria-valuetext", n.localize( "progress bar timing: currentTime={1} duration={2}", [ln(e, i), ln(i, i) ], "{1} of {2}")), n.currentTime_ = e, n.duration_ = i), n.bar && n .bar.update(de(n.el()), n.getProgress()) }), r } }, t.userSeek_ = function (e) { this.player_.liveTracker && this.player_.liveTracker.isLive() && this.player_.liveTracker .nextSeekedFromUser(), this.player_.currentTime(e) }, t.getCurrentTime_ = function () { return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_ .currentTime() }, t.getPercent = function () { var e, t = this.getCurrentTime_(), i = this.player_.liveTracker; return i && i.isLive() ? (e = (t - i.seekableStart()) / i.liveWindow(), i.atLiveEdge() && (e = 1)) : e = t / this.player_.duration(), e }, t.handleMouseDown = function (e) { _e(e) && (e.stopPropagation(), this.videoWasPlaying = !this.player_.paused(), this.player_ .pause(), a.prototype.handleMouseDown.call(this, e)) }, t.handleMouseMove = function (e, t) { if (void 0 === t && (t = !1), _e(e)) { t || this.player_.scrubbing() || this.player_.scrubbing(!0); var i = this.calculateDistance(e), n = this.player_.liveTracker; if (n && n.isLive()) { if (.99 <= i) return void n.seekToLiveEdge(); var r, t = n.seekableStart(), e = n.liveCurrentTime(); if ((r = (r = e <= (r = t + i * n.liveWindow()) ? e : r) <= t ? t + .1 : r) === 1 / 0) return } else (r = i * this.player_.duration()) === this.player_.duration() && (r -= .1); this.userSeek_(r) } }, t.enable = function () { a.prototype.enable.call(this); var e = this.getChild("mouseTimeDisplay"); e && e.show() }, t.disable = function () { a.prototype.disable.call(this); var e = this.getChild("mouseTimeDisplay"); e && e.hide() }, t.handleMouseUp = function (e) { a.prototype.handleMouseUp.call(this, e), e && e.stopPropagation(), this.player_.scrubbing(!1), this.player_.trigger({ type: "timeupdate", target: this, manuallyTriggered: !0 }), this.videoWasPlaying ? Et(this.player_.play()) : this.update_() }, t.stepForward = function () { this.userSeek_(this.player_.currentTime() + 5) }, t.stepBack = function () { this.userSeek_(this.player_.currentTime() - 5) }, t.handleAction = function (e) { this.player_.paused() ? this.player_.play() : this.player_.pause() }, t.handleKeyDown = function (e) { var t, i = this.player_.liveTracker; ht.isEventKey(e, "Space") || ht.isEventKey(e, "Enter") ? (e.preventDefault(), e .stopPropagation(), this.handleAction(e)) : ht.isEventKey(e, "Home") ? (e.preventDefault(), e.stopPropagation(), this.userSeek_(0)) : ht.isEventKey(e, "End") ? (e.preventDefault(), e.stopPropagation(), i && i.isLive() ? this.userSeek_(i.liveCurrentTime()) : this .userSeek_(this.player_.duration())) : /^[0-9]$/.test(ht(e)) ? (e.preventDefault(), e .stopPropagation(), t = 10 * (ht.codes[ht(e)] - ht.codes[0]) / 100, i && i.isLive() ? this.userSeek_(i.seekableStart() + i.liveWindow() * t) : this.userSeek_(this.player_ .duration() * t)) : ht.isEventKey(e, "PgDn") ? (e.preventDefault(), e .stopPropagation(), this.userSeek_(this.player_.currentTime() - 60)) : ht.isEventKey(e, "PgUp") ? (e.preventDefault(), e.stopPropagation(), this.userSeek_(this.player_ .currentTime() + 60)) : a.prototype.handleKeyDown.call(this, e) }, t.dispose = function () { this.disableInterval_(), this.off(this.player_, ["ended", "durationchange", "timeupdate"], this .update), this.player_.liveTracker && this.off(this.player_.liveTracker, "liveedgechange", this.update), this.off(this.player_, ["playing"], this .enableIntervalHandler_), this.off(this.player_, ["ended", "pause", "waiting"], this .disableIntervalHandler_), "hidden" in document && "visibilityState" in document && this .off(document, "visibilitychange", this.toggleVisibility_), a.prototype.dispose.call(this) }, e }(li); Bt.prototype.options_ = { children: ["loadProgressBar", "playProgressBar"], barName: "playProgressBar" }, q || A || Bt.prototype.options_.children.splice(1, 0, "mouseTimeDisplay"), pt.registerComponent( "SeekBar", Bt); Ft = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.handleMouseMove = We(Ve(ft(i), i.handleMouseMove), 30), i.throttledHandleMouseSeek = We(Ve( ft(i), i.handleMouseSeek), 30), i.handleMouseUpHandler_ = function (e) { return i.handleMouseUp(e) }, i.handleMouseDownHandler_ = function (e) { return i.handleMouseDown(e) }, i.enable(), i } mt(e, n); var t = e.prototype; return t.createEl = function () { return n.prototype.createEl.call(this, "div", { className: "vjs-progress-control vjs-control" }) }, t.handleMouseMove = function (e) { var t, i, n, r, a = this.getChild("seekBar"); a && (t = a.getChild("playProgressBar"), i = a.getChild("mouseTimeDisplay"), (t || i) && (r = he(n = a.el()), e = pe(n, e).x, e = cn(e, 0, 1), i && i.update(r, e), t && t.update( r, a.getProgress()))) }, t.handleMouseSeek = function (e) { var t = this.getChild("seekBar"); t && t.handleMouseMove(e) }, t.enabled = function () { return this.enabled_ }, t.disable = function () { var e; this.children().forEach(function (e) { return e.disable && e.disable() }), this.enabled() && (this.off(["mousedown", "touchstart"], this.handleMouseDownHandler_), this.off(this.el_, "mousemove", this.handleMouseMove), this .removeListenersAddedOnMousedownAndTouchstart(), this.addClass("disabled"), this .enabled_ = !1, this.player_.scrubbing() && (e = this.getChild("seekBar"), this.player_ .scrubbing(!1), e.videoWasPlaying && Et(this.player_.play()))) }, t.enable = function () { this.children().forEach(function (e) { return e.enable && e.enable() }), this.enabled() || (this.on(["mousedown", "touchstart"], this.handleMouseDownHandler_), this.on(this.el_, "mousemove", this.handleMouseMove), this.removeClass("disabled"), this .enabled_ = !0) }, t.removeListenersAddedOnMousedownAndTouchstart = function () { var e = this.el_.ownerDocument; this.off(e, "mousemove", this.throttledHandleMouseSeek), this.off(e, "touchmove", this .throttledHandleMouseSeek), this.off(e, "mouseup", this.handleMouseUpHandler_), this .off(e, "touchend", this.handleMouseUpHandler_) }, t.handleMouseDown = function (e) { var t = this.el_.ownerDocument, i = this.getChild("seekBar"); i && i.handleMouseDown(e), this.on(t, "mousemove", this.throttledHandleMouseSeek), this.on(t, "touchmove", this.throttledHandleMouseSeek), this.on(t, "mouseup", this .handleMouseUpHandler_), this.on(t, "touchend", this.handleMouseUpHandler_) }, t.handleMouseUp = function (e) { var t = this.getChild("seekBar"); t && t.handleMouseUp(e), this.removeListenersAddedOnMousedownAndTouchstart() }, e }(pt); Ft.prototype.options_ = { children: ["seekBar"] }, pt.registerComponent("ProgressControl", Ft); jt = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.on(e, ["enterpictureinpicture", "leavepictureinpicture"], function (e) { return i.handlePictureInPictureChange(e) }), i.on(e, ["disablepictureinpicturechanged", "loadedmetadata"], function (e) { return i.handlePictureInPictureEnabledChange(e) }), i.on(e, ["loadedmetadata", "audioonlymodechange", "audiopostermodechange"], function () { "audio" === e.currentType().substring(0, 5) || e.audioPosterMode() || e .audioOnlyMode() ? (e.isInPictureInPicture() && e.exitPictureInPicture(), i.hide()) : i .show() }), i.disable(), i } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-picture-in-picture-control " + n.prototype.buildCSSClass.call(this) }, t.handlePictureInPictureEnabledChange = function () { document.pictureInPictureEnabled && !1 === this.player_.disablePictureInPicture() ? this .enable() : this.disable() }, t.handlePictureInPictureChange = function (e) { this.player_.isInPictureInPicture() ? this.controlText("Exit Picture-in-Picture") : this .controlText("Picture-in-Picture"), this.handlePictureInPictureEnabledChange() }, t.handleClick = function (e) { this.player_.isInPictureInPicture() ? this.player_.exitPictureInPicture() : this.player_ .requestPictureInPicture() }, e }(sn); jt.prototype.controlText_ = "Picture-in-Picture", pt.registerComponent("PictureInPictureToggle", jt); j = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.on(e, "fullscreenchange", function (e) { return i.handleFullscreenChange(e) }), !1 === document[e.fsApi_.fullscreenEnabled] && i.disable(), i } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-fullscreen-control " + n.prototype.buildCSSClass.call(this) }, t.handleFullscreenChange = function (e) { this.player_.isFullscreen() ? this.controlText("Non-Fullscreen") : this.controlText( "Fullscreen") }, t.handleClick = function (e) { this.player_.isFullscreen() ? this.player_.exitFullscreen() : this.player_.requestFullscreen() }, e }(sn); j.prototype.controlText_ = "Fullscreen", pt.registerComponent("FullscreenToggle", j); pt.registerComponent("VolumeLevel", function (t) { function e() { return t.apply(this, arguments) || this } return mt(e, t), e.prototype.createEl = function () { var e = t.prototype.createEl.call(this, "div", { className: "vjs-volume-level" }); return e.appendChild(t.prototype.createEl.call(this, "span", { className: "vjs-control-text" })), e }, e }(pt)), pt.registerComponent("VolumeLevelTooltip", function (i) { function e(e, t) { t = i.call(this, e, t) || this; return t.update = We(Ve(ft(t), t.update), 30), t } mt(e, i); var t = e.prototype; return t.createEl = function () { return i.prototype.createEl.call(this, "div", { className: "vjs-volume-tooltip" }, { "aria-hidden": "true" }) }, t.update = function (e, t, i, n) { if (!i) { var r = de(this.el_), a = de(this.player_.el()), i = e.width * t; if (!a || !r) return; t = e.left - a.left + i, a = e.width - i + (a.right - e.right), e = r.width / 2; t < e ? e += e - t : a < e && (e = a), e < 0 ? e = 0 : e > r.width && (e = r.width), this.el_.style.right = "-" + e + "px" } this.write(n + "%") }, t.write = function (e) { J(this.el_, e) }, t.updateVolume = function (e, t, i, n, r) { var a = this; this.requestNamedAnimationFrame("VolumeLevelTooltip#updateVolume", function () { a.update(e, t, i, n.toFixed(0)), r && r() }) }, e }(pt)); k = function (i) { function e(e, t) { t = i.call(this, e, t) || this; return t.update = We(Ve(ft(t), t.update), 30), t } mt(e, i); var t = e.prototype; return t.createEl = function () { return i.prototype.createEl.call(this, "div", { className: "vjs-mouse-display" }) }, t.update = function (e, t, i) { var n = this, r = 100 * t; this.getChild("volumeLevelTooltip").updateVolume(e, t, i, r, function () { i ? n.el_.style.bottom = e.height * t + "px" : n.el_.style.left = e.width * t + "px" }) }, e }(pt); k.prototype.options_ = { children: ["volumeLevelTooltip"] }, pt.registerComponent("MouseVolumeLevelDisplay", k); f = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.on("slideractive", function (e) { return i.updateLastVolume_(e) }), i.on(e, "volumechange", function (e) { return i.updateARIAAttributes(e) }), e.ready(function () { return i.updateARIAAttributes() }), i } mt(e, n); var t = e.prototype; return t.createEl = function () { return n.prototype.createEl.call(this, "div", { className: "vjs-volume-bar vjs-slider-bar" }, { "aria-label": this.localize("Volume Level"), "aria-live": "polite" }) }, t.handleMouseDown = function (e) { _e(e) && n.prototype.handleMouseDown.call(this, e) }, t.handleMouseMove = function (e) { var t, i, n, r = this.getChild("mouseVolumeLevelDisplay"); r && (t = de(n = this.el()), i = this.vertical(), n = pe(n, e), n = i ? n.y : n.x, n = cn(n, 0, 1), r.update(t, n, i)), _e(e) && (this.checkMuted(), this.player_.volume(this .calculateDistance(e))) }, t.checkMuted = function () { this.player_.muted() && this.player_.muted(!1) }, t.getPercent = function () { return this.player_.muted() ? 0 : this.player_.volume() }, t.stepForward = function () { this.checkMuted(), this.player_.volume(this.player_.volume() + .1) }, t.stepBack = function () { this.checkMuted(), this.player_.volume(this.player_.volume() - .1) }, t.updateARIAAttributes = function (e) { var t = this.player_.muted() ? 0 : this.volumeAsPercentage_(); this.el_.setAttribute("aria-valuenow", t), this.el_.setAttribute("aria-valuetext", t + "%") }, t.volumeAsPercentage_ = function () { return Math.round(100 * this.player_.volume()) }, t.updateLastVolume_ = function () { var e = this, t = this.player_.volume(); this.one("sliderinactive", function () { 0 === e.player_.volume() && e.player_.lastVolume_(t) }) }, e }(li); f.prototype.options_ = { children: ["volumeLevel"], barName: "volumeLevel" }, q || A || f.prototype.options_.children.splice(0, 0, "mouseVolumeLevelDisplay"), f.prototype .playerEvent = "volumechange", pt.registerComponent("VolumeBar", f); ui = function (a) { function e(e, t) { var i, n, r; return (t = void 0 === t ? {} : t).vertical = t.vertical || !1, "undefined" != typeof t.volumeBar && !S(t.volumeBar) || (t.volumeBar = t.volumeBar || {}, t.volumeBar.vertical = t.vertical), i = a .call(this, e, t) || this, n = ft(i), (r = e).tech_ && !r.tech_.featuresVolumeControl && n .addClass("vjs-hidden"), n.on(r, "loadstart", function () { r.tech_.featuresVolumeControl ? n.removeClass("vjs-hidden") : n.addClass("vjs-hidden") }), i.throttledHandleMouseMove = We(Ve(ft(i), i.handleMouseMove), 30), i.handleMouseUpHandler_ = function (e) { return i.handleMouseUp(e) }, i.on("mousedown", function (e) { return i.handleMouseDown(e) }), i.on("touchstart", function (e) { return i.handleMouseDown(e) }), i.on("mousemove", function (e) { return i.handleMouseMove(e) }), i.on(i.volumeBar, ["focus", "slideractive"], function () { i.volumeBar.addClass("vjs-slider-active"), i.addClass("vjs-slider-active"), i.trigger( "slideractive") }), i.on(i.volumeBar, ["blur", "sliderinactive"], function () { i.volumeBar.removeClass("vjs-slider-active"), i.removeClass("vjs-slider-active"), i .trigger("sliderinactive") }), i } mt(e, a); var t = e.prototype; return t.createEl = function () { var e = "vjs-volume-horizontal"; return this.options_.vertical && (e = "vjs-volume-vertical"), a.prototype.createEl.call(this, "div", { className: "vjs-volume-control vjs-control " + e }) }, t.handleMouseDown = function (e) { var t = this.el_.ownerDocument; this.on(t, "mousemove", this.throttledHandleMouseMove), this.on(t, "touchmove", this .throttledHandleMouseMove), this.on(t, "mouseup", this.handleMouseUpHandler_), this.on( t, "touchend", this.handleMouseUpHandler_) }, t.handleMouseUp = function (e) { var t = this.el_.ownerDocument; this.off(t, "mousemove", this.throttledHandleMouseMove), this.off(t, "touchmove", this .throttledHandleMouseMove), this.off(t, "mouseup", this.handleMouseUpHandler_), this .off(t, "touchend", this.handleMouseUpHandler_) }, t.handleMouseMove = function (e) { this.volumeBar.handleMouseMove(e) }, e }(pt); ui.prototype.options_ = { children: ["volumeBar"] }, pt.registerComponent("VolumeControl", ui); Xt = function (a) { function e(e, t) { var i, n, r = a.call(this, e, t) || this; return i = ft(r), (n = e).tech_ && !n.tech_.featuresMuteControl && i.addClass("vjs-hidden"), i.on(n, "loadstart", function () { n.tech_.featuresMuteControl ? i.removeClass("vjs-hidden") : i.addClass("vjs-hidden") }), r.on(e, ["loadstart", "volumechange"], function (e) { return r.update(e) }), r } mt(e, a); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-mute-control " + a.prototype.buildCSSClass.call(this) }, t.handleClick = function (e) { var t = this.player_.volume(), i = this.player_.lastVolume_(); 0 === t ? (this.player_.volume(i < .1 ? .1 : i), this.player_.muted(!1)) : this.player_.muted(! this.player_.muted()) }, t.update = function (e) { this.updateIcon_(), this.updateControlText_() }, t.updateIcon_ = function () { var e = this.player_.volume(), t = 3; q && this.player_.tech_ && this.player_.tech_.el_ && this.player_.muted(this.player_.tech_.el_ .muted), 0 === e || this.player_.muted() ? t = 0 : e < .33 ? t = 1 : e < .67 && (t = 2); for (var i = 0; i < 4; i++) ie(this.el_, "vjs-vol-" + i); te(this.el_, "vjs-vol-" + t) }, t.updateControlText_ = function () { var e = this.player_.muted() || 0 === this.player_.volume() ? "Unmute" : "Mute"; this.controlText() !== e && this.controlText(e) }, e }(sn); Xt.prototype.controlText_ = "Mute", pt.registerComponent("MuteToggle", Xt); I = function (n) { function e(e, t) { var i; return "undefined" != typeof (t = void 0 === t ? {} : t).inline ? t.inline = t.inline : t.inline = ! 0, "undefined" != typeof t.volumeControl && !S(t.volumeControl) || (t.volumeControl = t .volumeControl || {}, t.volumeControl.vertical = !t.inline), (i = n.call(this, e, t) || this).handleKeyPressHandler_ = function (e) { return i.handleKeyPress(e) }, i.on(e, ["loadstart"], function (e) { return i.volumePanelState_(e) }), i.on(i.muteToggle, "keyup", function (e) { return i.handleKeyPress(e) }), i.on(i.volumeControl, "keyup", function (e) { return i.handleVolumeControlKeyUp(e) }), i.on("keydown", function (e) { return i.handleKeyPress(e) }), i.on("mouseover", function (e) { return i.handleMouseOver(e) }), i.on("mouseout", function (e) { return i.handleMouseOut(e) }), i.on(i.volumeControl, ["slideractive"], i.sliderActive_), i.on(i.volumeControl, [ "sliderinactive" ], i.sliderInactive_), i } mt(e, n); var t = e.prototype; return t.sliderActive_ = function () { this.addClass("vjs-slider-active") }, t.sliderInactive_ = function () { this.removeClass("vjs-slider-active") }, t.volumePanelState_ = function () { this.volumeControl.hasClass("vjs-hidden") && this.muteToggle.hasClass("vjs-hidden") && this .addClass("vjs-hidden"), this.volumeControl.hasClass("vjs-hidden") && !this.muteToggle .hasClass("vjs-hidden") && this.addClass("vjs-mute-toggle-only") }, t.createEl = function () { var e = "vjs-volume-panel-horizontal"; return this.options_.inline || (e = "vjs-volume-panel-vertical"), n.prototype.createEl.call( this, "div", { className: "vjs-volume-panel vjs-control " + e }) }, t.dispose = function () { this.handleMouseOut(), n.prototype.dispose.call(this) }, t.handleVolumeControlKeyUp = function (e) { ht.isEventKey(e, "Esc") && this.muteToggle.focus() }, t.handleMouseOver = function (e) { this.addClass("vjs-hover"), Be(document, "keyup", this.handleKeyPressHandler_) }, t.handleMouseOut = function (e) { this.removeClass("vjs-hover"), Fe(document, "keyup", this.handleKeyPressHandler_) }, t.handleKeyPress = function (e) { ht.isEventKey(e, "Esc") && this.handleMouseOut() }, e }(pt); I.prototype.options_ = { children: ["muteToggle", "volumeControl"] }, pt.registerComponent("VolumePanel", I); var hn = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return t && (i.menuButton_ = t.menuButton), i.focusedChild_ = -1, i.on("keydown", function (e) { return i.handleKeyDown(e) }), i.boundHandleBlur_ = function (e) { return i.handleBlur(e) }, i.boundHandleTapClick_ = function (e) { return i.handleTapClick(e) }, i } mt(e, n); var t = e.prototype; return t.addEventListenerForItem = function (e) { e instanceof pt && (this.on(e, "blur", this.boundHandleBlur_), this.on(e, ["tap", "click"], this .boundHandleTapClick_)) }, t.removeEventListenerForItem = function (e) { e instanceof pt && (this.off(e, "blur", this.boundHandleBlur_), this.off(e, ["tap", "click"], this.boundHandleTapClick_)) }, t.removeChild = function (e) { "string" == typeof e && (e = this.getChild(e)), this.removeEventListenerForItem(e), n.prototype .removeChild.call(this, e) }, t.addItem = function (e) { e = this.addChild(e); e && this.addEventListenerForItem(e) }, t.createEl = function () { var e = this.options_.contentElType || "ul"; this.contentEl_ = $(e, { className: "vjs-menu-content" }), this.contentEl_.setAttribute("role", "menu"); e = n.prototype.createEl.call(this, "div", { append: this.contentEl_, className: "vjs-menu" }); return e.appendChild(this.contentEl_), Be(e, "click", function (e) { e.preventDefault(), e.stopImmediatePropagation() }), e }, t.dispose = function () { this.contentEl_ = null, this.boundHandleBlur_ = null, this.boundHandleTapClick_ = null, n .prototype.dispose.call(this) }, t.handleBlur = function (e) { var t = e.relatedTarget || document.activeElement; this.children().some(function (e) { return e.el() === t }) || (e = this.menuButton_) && e.buttonPressed_ && t !== e.el().firstChild && e .unpressButton() }, t.handleTapClick = function (t) { var e; this.menuButton_ && (this.menuButton_.unpressButton(), e = this.children(), !Array.isArray(e) || (e = e.filter(function (e) { return e.el() === t.target })[0]) && "CaptionSettingsMenuItem" !== e.name() && this.menuButton_.focus()) }, t.handleKeyDown = function (e) { ht.isEventKey(e, "Left") || ht.isEventKey(e, "Down") ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) : (ht.isEventKey(e, "Right") || ht.isEventKey(e, "Up")) && (e .preventDefault(), e.stopPropagation(), this.stepBack()) }, t.stepForward = function () { var e = 0; void 0 !== this.focusedChild_ && (e = this.focusedChild_ + 1), this.focus(e) }, t.stepBack = function () { var e = 0; void 0 !== this.focusedChild_ && (e = this.focusedChild_ - 1), this.focus(e) }, t.focus = function (e) { void 0 === e && (e = 0); var t = this.children().slice(); t.length && t[0].hasClass("vjs-menu-title") && t.shift(), 0 < t.length && (e < 0 ? e = 0 : e >= t.length && (e = t.length - 1), t[this.focusedChild_ = e].el_.focus()) }, e }(pt); pt.registerComponent("Menu", hn); Bt = function (n) { function e(e, t) { var i; (i = n.call(this, e, t = void 0 === t ? {} : t) || this).menuButton_ = new sn(e, t), i.menuButton_ .controlText(i.controlText_), i.menuButton_.el_.setAttribute("aria-haspopup", "true"); t = sn.prototype.buildCSSClass(); i.menuButton_.el_.className = i.buildCSSClass() + " " + t, i.menuButton_.removeClass("vjs-control"), i.addChild(i.menuButton_), i.update(), i.enabled_ = !0; t = function (e) { return i.handleClick(e) }; return i.handleMenuKeyUp_ = function (e) { return i.handleMenuKeyUp(e) }, i.on(i.menuButton_, "tap", t), i.on(i.menuButton_, "click", t), i.on(i.menuButton_, "keydown", function (e) { return i.handleKeyDown(e) }), i.on(i.menuButton_, "mouseenter", function () { i.addClass("vjs-hover"), i.menu.show(), Be(document, "keyup", i.handleMenuKeyUp_) }), i.on("mouseleave", function (e) { return i.handleMouseLeave(e) }), i.on("keydown", function (e) { return i.handleSubmenuKeyDown(e) }), i } mt(e, n); var t = e.prototype; return t.update = function () { var e = this.createMenu(); this.menu && (this.menu.dispose(), this.removeChild(this.menu)), this.menu = e, this.addChild( e), this.buttonPressed_ = !1, this.menuButton_.el_.setAttribute("aria-expanded", "false"), this.items && this.items.length <= this.hideThreshold_ ? (this.hide(), this.menu.contentEl_ .removeAttribute("role")) : (this.show(), this.menu.contentEl_.setAttribute("role", "menu")) }, t.createMenu = function () { var e, t = new hn(this.player_, { menuButton: this }); if (this.hideThreshold_ = 0, this.options_.title && (e = $("li", { className: "vjs-menu-title", textContent: ut(this.options_.title), tabIndex: -1 }), e = new pt(this.player_, { el: e }), t.addItem(e)), this.items = this.createItems(), this.items) for (var i = 0; i < this.items.length; i++) t.addItem(this.items[i]); return t }, t.createItems = function () { }, t.createEl = function () { return n.prototype.createEl.call(this, "div", { className: this.buildWrapperCSSClass() }, {}) }, t.buildWrapperCSSClass = function () { var e = "vjs-menu-button"; return !0 === this.options_.inline ? e += "-inline" : e += "-popup", "vjs-menu-button " + e + " " + sn.prototype.buildCSSClass() + " " + n.prototype.buildCSSClass.call(this) }, t.buildCSSClass = function () { var e = "vjs-menu-button"; return !0 === this.options_.inline ? e += "-inline" : e += "-popup", "vjs-menu-button " + e + " " + n.prototype.buildCSSClass.call(this) }, t.controlText = function (e, t) { return void 0 === t && (t = this.menuButton_.el()), this.menuButton_.controlText(e, t) }, t.dispose = function () { this.handleMouseLeave(), n.prototype.dispose.call(this) }, t.handleClick = function (e) { this.buttonPressed_ ? this.unpressButton() : this.pressButton() }, t.handleMouseLeave = function (e) { this.removeClass("vjs-hover"), Fe(document, "keyup", this.handleMenuKeyUp_) }, t.focus = function () { this.menuButton_.focus() }, t.blur = function () { this.menuButton_.blur() }, t.handleKeyDown = function (e) { ht.isEventKey(e, "Esc") || ht.isEventKey(e, "Tab") ? (this.buttonPressed_ && this .unpressButton(), ht.isEventKey(e, "Tab") || (e.preventDefault(), this.menuButton_ .focus())) : (ht.isEventKey(e, "Up") || ht.isEventKey(e, "Down")) && (this .buttonPressed_ || (e.preventDefault(), this.pressButton())) }, t.handleMenuKeyUp = function (e) { (ht.isEventKey(e, "Esc") || ht.isEventKey(e, "Tab")) && this.removeClass("vjs-hover") }, t.handleSubmenuKeyPress = function (e) { this.handleSubmenuKeyDown(e) }, t.handleSubmenuKeyDown = function (e) { (ht.isEventKey(e, "Esc") || ht.isEventKey(e, "Tab")) && (this.buttonPressed_ && this .unpressButton(), ht.isEventKey(e, "Tab") || (e.preventDefault(), this.menuButton_.focus())) }, t.pressButton = function () { this.enabled_ && (this.buttonPressed_ = !0, this.menu.show(), this.menu.lockShowing(), this .menuButton_.el_.setAttribute("aria-expanded", "true"), q && Y() || this.menu.focus()) }, t.unpressButton = function () { this.enabled_ && (this.buttonPressed_ = !1, this.menu.unlockShowing(), this.menu.hide(), this .menuButton_.el_.setAttribute("aria-expanded", "false")) }, t.disable = function () { this.unpressButton(), this.enabled_ = !1, this.addClass("vjs-disabled"), this.menuButton_ .disable() }, t.enable = function () { this.enabled_ = !0, this.removeClass("vjs-disabled"), this.menuButton_.enable() }, e }(pt); pt.registerComponent("MenuButton", Bt); Ft = function (r) { function e(e, t) { var i = t.tracks, t = r.call(this, e, t) || this; if (t.items.length <= 1 && t.hide(), !i) return ft(t); var n = Ve(ft(t), t.update); return i.addEventListener("removetrack", n), i.addEventListener("addtrack", n), i.addEventListener( "labelchange", n), t.player_.on("ready", n), t.player_.on("dispose", function () { i.removeEventListener("removetrack", n), i.removeEventListener("addtrack", n), i .removeEventListener("labelchange", n) }), t } return mt(e, r), e }(Bt); pt.registerComponent("TrackButton", Ft); var pn = ["Tab", "Esc", "Up", "Down", "Right", "Left"], jt = function (n) { function e(e, t) { e = n.call(this, e, t) || this; return e.selectable = t.selectable, e.isSelected_ = t.selected || !1, e.multiSelectable = t .multiSelectable, e.selected(e.isSelected_), e.selectable ? e.multiSelectable ? e.el_ .setAttribute("role", "menuitemcheckbox") : e.el_.setAttribute("role", "menuitemradio") : e.el_ .setAttribute("role", "menuitem"), e } mt(e, n); var t = e.prototype; return t.createEl = function (e, t, i) { this.nonIconControl = !0; i = n.prototype.createEl.call(this, "li", b({ className: "vjs-menu-item", tabIndex: -1 }, t), i); return i.replaceChild($("span", { className: "vjs-menu-item-text", textContent: this.localize(this.options_.label) }), i.querySelector(".vjs-icon-placeholder")), i }, t.handleKeyDown = function (t) { pn.some(function (e) { return ht.isEventKey(t, e) }) || n.prototype.handleKeyDown.call(this, t) }, t.handleClick = function (e) { this.selected(!0) }, t.selected = function (e) { this.selectable && (e ? (this.addClass("vjs-selected"), this.el_.setAttribute("aria-checked", "true"), this.controlText(", selected"), this.isSelected_ = !0) : (this.removeClass( "vjs-selected"), this.el_.setAttribute("aria-checked", "false"), this .controlText(""), this.isSelected_ = !1)) }, e }(C); pt.registerComponent("MenuItem", jt); var fn = function (u) { function e(e, t) { var n, i = t.track, r = e.textTracks(); t.label = i.label || i.language || "Unknown", t.selected = "showing" === i.mode, (n = u.call(this, e, t) || this).track = i, n.kinds = (t.kinds || [t.kind || n.track.kind]).filter(Boolean); function a() { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; n.handleTracksChange.apply(ft(n), t) } function s() { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; n.handleSelectedLanguageChange.apply(ft(n), t) } var o; return e.on(["loadstart", "texttrackchange"], a), r.addEventListener("change", a), r .addEventListener("selectedlanguagechange", s), n.on("dispose", function () { e.off(["loadstart", "texttrackchange"], a), r.removeEventListener("change", a), r .removeEventListener("selectedlanguagechange", s) }), void 0 === r.onchange && n.on(["tap", "click"], function () { if ("object" != typeof window.Event) try { o = new window.Event("change") } catch (e) { } o || (o = document.createEvent("Event")).initEvent("change", !0, !0), r.dispatchEvent(o) }), n.handleTracksChange(), n } mt(e, u); var t = e.prototype; return t.handleClick = function (e) { var t = this.track, i = this.player_.textTracks(); if (u.prototype.handleClick.call(this, e), i) for (var n = 0; n < i.length; n++) { var r = i[n]; -1 !== this.kinds.indexOf(r.kind) && (r === t ? "showing" !== r.mode && ( r.mode = "showing") : "disabled" !== r.mode && (r.mode = "disabled")) } }, t.handleTracksChange = function (e) { var t = "showing" === this.track.mode; t !== this.isSelected_ && this.selected(t) }, t.handleSelectedLanguageChange = function (e) { var t; "showing" === this.track.mode && ((t = this.player_.cache_.selectedLanguage) && t.enabled && t .language === this.track.language && t.kind !== this.track.kind || (this.player_.cache_ .selectedLanguage = { enabled: !0, language: this.track.language, kind: this.track.kind })) }, t.dispose = function () { this.track = null, u.prototype.dispose.call(this) }, e }(jt); pt.registerComponent("TextTrackMenuItem", fn); var mn = function (i) { function e(e, t) { return t.track = { player: e, kind: t.kind, kinds: t.kinds, default: !1, mode: "disabled" }, t.kinds || (t.kinds = [t.kind]), t.label ? t.track.label = t.label : t.track.label = t.kinds .join(" and ") + " off", t.selectable = !0, t.multiSelectable = !1, i.call(this, e, t) || this } mt(e, i); var t = e.prototype; return t.handleTracksChange = function (e) { for (var t = this.player().textTracks(), i = !0, n = 0, r = t.length; n < r; n++) { var a = t[n]; if (-1 < this.options_.kinds.indexOf(a.kind) && "showing" === a.mode) { i = !1; break } } i !== this.isSelected_ && this.selected(i) }, t.handleSelectedLanguageChange = function (e) { for (var t = this.player().textTracks(), i = !0, n = 0, r = t.length; n < r; n++) { var a = t[n]; if (-1 < ["captions", "descriptions", "subtitles"].indexOf(a.kind) && "showing" === a .mode) { i = !1; break } } i && (this.player_.cache_.selectedLanguage = { enabled: !1 }) }, e }(fn); pt.registerComponent("OffTextTrackMenuItem", mn); j = function (i) { function e(e, t) { return (t = void 0 === t ? {} : t).tracks = e.textTracks(), i.call(this, e, t) || this } return mt(e, i), e.prototype.createItems = function (e, t) { var i; void 0 === t && (t = fn), this.label_ && (i = this.label_ + " off"), (e = void 0 === e ? [] : e) .push(new mn(this.player_, { kinds: this.kinds_, kind: this.kind_, label: i })), this.hideThreshold_ += 1; var n = this.player_.textTracks(); Array.isArray(this.kinds_) || (this.kinds_ = [this.kind_]); for (var r = 0; r < n.length; r++) { var a, s = n[r]; -1 < this.kinds_.indexOf(s.kind) && ((a = new t(this.player_, { track: s, kinds: this.kinds_, kind: this.kind_, selectable: !0, multiSelectable: !1 })).addClass("vjs-" + s.kind + "-menu-item"), e.push(a)) } return e }, e }(Ft); pt.registerComponent("TextTrackButton", j); var gn = function (a) { function e(e, t) { var i = t.track, n = t.cue, r = e.currentTime(); return t.selectable = !0, t.multiSelectable = !1, t.label = n.text, t.selected = n.startTime <= r && r < n.endTime, (t = a.call(this, e, t) || this).track = i, t.cue = n, t } return mt(e, a), e.prototype.handleClick = function (e) { a.prototype.handleClick.call(this), this.player_.currentTime(this.cue.startTime) }, e }(jt); pt.registerComponent("ChaptersTrackMenuItem", gn); k = function (r) { function e(e, t, i) { var n = r.call(this, e, t, i) || this; return n.selectCurrentItem_ = function () { n.items.forEach(function (e) { e.selected(n.track_.activeCues[0] === e.cue) }) }, n } mt(e, r); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-chapters-button " + r.prototype.buildCSSClass.call(this) }, t.buildWrapperCSSClass = function () { return "vjs-chapters-button " + r.prototype.buildWrapperCSSClass.call(this) }, t.update = function (e) { e && e.track && "chapters" !== e.track.kind || ((e = this.findChaptersTrack()) !== this.track_ ? (this.setTrack(e), r.prototype.update.call(this)) : (!this.items || e && e.cues && e .cues.length !== this.items.length) && r.prototype.update.call(this)) }, t.setTrack = function (e) { var t; this.track_ !== e && (this.updateHandler_ || (this.updateHandler_ = this.update.bind(this)), this.track_ && ((t = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this .track_)) && t.removeEventListener("load", this.updateHandler_), this.track_ .removeEventListener("cuechange", this.selectCurrentItem_), this.track_ = null), this.track_ = e, this.track_ && (this.track_.mode = "hidden", (e = this.player_ .remoteTextTrackEls().getTrackElementByTrack_(this.track_)) && e .addEventListener("load", this.updateHandler_), this.track_.addEventListener( "cuechange", this.selectCurrentItem_))) }, t.findChaptersTrack = function () { for (var e = this.player_.textTracks() || [], t = e.length - 1; 0 <= t; t--) { var i = e[t]; if (i.kind === this.kind_) return i } }, t.getMenuCaption = function () { return this.track_ && this.track_.label ? this.track_.label : this.localize(ut(this.kind_)) }, t.createMenu = function () { return this.options_.title = this.getMenuCaption(), r.prototype.createMenu.call(this) }, t.createItems = function () { var e = []; if (!this.track_) return e; var t = this.track_.cues; if (!t) return e; for (var i = 0, n = t.length; i < n; i++) { var r = t[i], r = new gn(this.player_, { track: this.track_, cue: r }); e.push(r) } return e }, e }(j); k.prototype.kind_ = "chapters", k.prototype.controlText_ = "Chapters", pt.registerComponent("ChaptersButton", k); li = function (a) { function e(e, t, i) { var i = a.call(this, e, t, i) || this, n = e.textTracks(), r = Ve(ft(i), i.handleTracksChange); return n.addEventListener("change", r), i.on("dispose", function () { n.removeEventListener("change", r) }), i } mt(e, a); var t = e.prototype; return t.handleTracksChange = function (e) { for (var t = this.player().textTracks(), i = !1, n = 0, r = t.length; n < r; n++) { var a = t[n]; if (a.kind !== this.kind_ && "showing" === a.mode) { i = !0; break } } i ? this.disable() : this.enable() }, t.buildCSSClass = function () { return "vjs-descriptions-button " + a.prototype.buildCSSClass.call(this) }, t.buildWrapperCSSClass = function () { return "vjs-descriptions-button " + a.prototype.buildWrapperCSSClass.call(this) }, e }(j); li.prototype.kind_ = "descriptions", li.prototype.controlText_ = "Descriptions", pt.registerComponent( "DescriptionsButton", li); f = function (n) { function e(e, t, i) { return n.call(this, e, t, i) || this } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-subtitles-button " + n.prototype.buildCSSClass.call(this) }, t.buildWrapperCSSClass = function () { return "vjs-subtitles-button " + n.prototype.buildWrapperCSSClass.call(this) }, e }(j); f.prototype.kind_ = "subtitles", f.prototype.controlText_ = "Subtitles", pt.registerComponent("SubtitlesButton", f); var yn = function (i) { function e(e, t) { return t.track = { player: e, kind: t.kind, label: t.kind + " settings", selectable: !1, default: !1, mode: "disabled" }, t.selectable = !1, t.name = "CaptionSettingsMenuItem", (e = i.call(this, e, t) || this) .addClass("vjs-texttrack-settings"), e.controlText(", opens " + t.kind + " settings dialog"), e } return mt(e, i), e.prototype.handleClick = function (e) { this.player().getChild("textTrackSettings").open() }, e }(fn); pt.registerComponent("CaptionSettingsMenuItem", yn); ui = function (n) { function e(e, t, i) { return n.call(this, e, t, i) || this } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-captions-button " + n.prototype.buildCSSClass.call(this) }, t.buildWrapperCSSClass = function () { return "vjs-captions-button " + n.prototype.buildWrapperCSSClass.call(this) }, t.createItems = function () { var e = []; return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || !this.player() .getChild("textTrackSettings") || (e.push(new yn(this.player_, { kind: this.kind_ })), this.hideThreshold_ += 1), n.prototype.createItems.call(this, e) }, e }(j); ui.prototype.kind_ = "captions", ui.prototype.controlText_ = "Captions", pt.registerComponent("CaptionsButton", ui); var vn = function (n) { function e() { return n.apply(this, arguments) || this } return mt(e, n), e.prototype.createEl = function (e, t, i) { t = n.prototype.createEl.call(this, e, t, i), i = t.querySelector(".vjs-menu-item-text"); return "captions" === this.options_.track.kind && (i.appendChild($("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": !0 })), i.appendChild($("span", { className: "vjs-control-text", textContent: " " + this.localize("Captions") }))), t }, e }(fn); pt.registerComponent("SubsCapsMenuItem", vn); Xt = function (i) { function e(e, t) { return (t = i.call(this, e, t = void 0 === t ? {} : t) || this).label_ = "subtitles", -1 < ["en", "en-us", "en-ca", "fr-ca" ].indexOf(t.player_.language_) && (t.label_ = "captions"), t.menuButton_.controlText(ut(t .label_)), t } mt(e, i); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-subs-caps-button " + i.prototype.buildCSSClass.call(this) }, t.buildWrapperCSSClass = function () { return "vjs-subs-caps-button " + i.prototype.buildWrapperCSSClass.call(this) }, t.createItems = function () { var e = []; return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || !this.player() .getChild("textTrackSettings") || (e.push(new yn(this.player_, { kind: this.label_ })), this.hideThreshold_ += 1), e = i.prototype.createItems.call(this, e, vn) }, e }(j); Xt.prototype.kinds_ = ["captions", "subtitles"], Xt.prototype.controlText_ = "Subtitles", pt.registerComponent( "SubsCapsButton", Xt); var _n = function (s) { function e(e, t) { var n, i = t.track, r = e.audioTracks(); t.label = i.label || i.language || "Unknown", t.selected = i.enabled, (n = s.call(this, e, t) || this).track = i, n.addClass("vjs-" + i.kind + "-menu-item"); function a() { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; n.handleTracksChange.apply(ft(n), t) } return r.addEventListener("change", a), n.on("dispose", function () { r.removeEventListener("change", a) }), n } mt(e, s); var t = e.prototype; return t.createEl = function (e, t, i) { t = s.prototype.createEl.call(this, e, t, i), i = t.querySelector(".vjs-menu-item-text"); return "main-desc" === this.options_.track.kind && (i.appendChild($("span", { className: "vjs-icon-placeholder" }, { "aria-hidden": !0 })), i.appendChild($("span", { className: "vjs-control-text", textContent: " " + this.localize("Descriptions") }))), t }, t.handleClick = function (e) { if (s.prototype.handleClick.call(this, e), this.track.enabled = !0, this.player_.tech_ .featuresNativeAudioTracks) for (var t = this.player_.audioTracks(), i = 0; i < t.length; i++) { var n = t[i]; n !== this.track && (n.enabled = n === this.track) } }, t.handleTracksChange = function (e) { this.selected(this.track.enabled) }, e }(jt); pt.registerComponent("AudioTrackMenuItem", _n); I = function (i) { function e(e, t) { return (t = void 0 === t ? {} : t).tracks = e.audioTracks(), i.call(this, e, t) || this } mt(e, i); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-audio-button " + i.prototype.buildCSSClass.call(this) }, t.buildWrapperCSSClass = function () { return "vjs-audio-button " + i.prototype.buildWrapperCSSClass.call(this) }, t.createItems = function (e) { void 0 === e && (e = []), this.hideThreshold_ = 1; for (var t = this.player_.audioTracks(), i = 0; i < t.length; i++) { var n = t[i]; e.push(new _n(this.player_, { track: n, selectable: !0, multiSelectable: !1 })) } return e }, e }(Ft); I.prototype.controlText_ = "Audio Track", pt.registerComponent("AudioTrackButton", I); var bn = function (a) { function e(e, t) { var i, n = t.rate, r = parseFloat(n, 10); return t.label = n, t.selected = r === e.playbackRate(), t.selectable = !0, t.multiSelectable = !1, (i = a.call(this, e, t) || this).label = n, i.rate = r, i.on(e, "ratechange", function (e) { return i.update(e) }), i } mt(e, a); var t = e.prototype; return t.handleClick = function (e) { a.prototype.handleClick.call(this), this.player().playbackRate(this.rate) }, t.update = function (e) { this.selected(this.player().playbackRate() === this.rate) }, e }(jt); bn.prototype.contentElType = "button", pt.registerComponent("PlaybackRateMenuItem", bn); C = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.menuButton_.el_.setAttribute("aria-describedby", i.labelElId_), i.updateVisibility(), i .updateLabel(), i.on(e, "loadstart", function (e) { return i.updateVisibility(e) }), i.on(e, "ratechange", function (e) { return i.updateLabel(e) }), i.on(e, "playbackrateschange", function (e) { return i.handlePlaybackRateschange(e) }), i } mt(e, n); var t = e.prototype; return t.createEl = function () { var e = n.prototype.createEl.call(this); return this.labelElId_ = "vjs-playback-rate-value-label-" + this.id_, this.labelEl_ = $("div", { className: "vjs-playback-rate-value", id: this.labelElId_, textContent: "1x" }), e.appendChild(this.labelEl_), e }, t.dispose = function () { this.labelEl_ = null, n.prototype.dispose.call(this) }, t.buildCSSClass = function () { return "vjs-playback-rate " + n.prototype.buildCSSClass.call(this) }, t.buildWrapperCSSClass = function () { return "vjs-playback-rate " + n.prototype.buildWrapperCSSClass.call(this) }, t.createItems = function () { for (var e = this.playbackRates(), t = [], i = e.length - 1; 0 <= i; i--) t.push(new bn(this .player(), { rate: e[i] + "x" })); return t }, t.updateARIAAttributes = function () { this.el().setAttribute("aria-valuenow", this.player().playbackRate()) }, t.handleClick = function (e) { var t = this.player().playbackRate(), i = this.playbackRates(), t = (i.indexOf(t) + 1) % i.length; this.player().playbackRate(i[t]) }, t.handlePlaybackRateschange = function (e) { this.update() }, t.playbackRates = function () { var e = this.player(); return e.playbackRates && e.playbackRates() || [] }, t.playbackRateSupported = function () { return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this .playbackRates() && 0 < this.playbackRates().length }, t.updateVisibility = function (e) { this.playbackRateSupported() ? this.removeClass("vjs-hidden") : this.addClass("vjs-hidden") }, t.updateLabel = function (e) { this.playbackRateSupported() && (this.labelEl_.textContent = this.player().playbackRate() + "x") }, e }(Bt); C.prototype.controlText_ = "Playback Rate", pt.registerComponent("PlaybackRateMenuButton", C); k = function (n) { function e() { return n.apply(this, arguments) || this } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-spacer " + n.prototype.buildCSSClass.call(this) }, t.createEl = function (e, t, i) { return void 0 === e && (e = "div"), void 0 === i && (i = {}), (t = void 0 === t ? {} : t) .className || (t.className = this.buildCSSClass()), n.prototype.createEl.call(this, e, t, i) }, e }(pt); pt.registerComponent("Spacer", k), pt.registerComponent("CustomControlSpacer", function (e) { function t() { return e.apply(this, arguments) || this } mt(t, e); var i = t.prototype; return i.buildCSSClass = function () { return "vjs-custom-control-spacer " + e.prototype.buildCSSClass.call(this) }, i.createEl = function () { return e.prototype.createEl.call(this, "div", { className: this.buildCSSClass(), textContent: " " }) }, t }(k)); li = function (e) { function t() { return e.apply(this, arguments) || this } return mt(t, e), t.prototype.createEl = function () { return e.prototype.createEl.call(this, "div", { className: "vjs-control-bar", dir: "ltr" }) }, t }(pt); li.prototype.options_ = { children: ["playToggle", "volumePanel", "currentTimeDisplay", "timeDivider", "durationDisplay", "progressControl", "liveDisplay", "seekToLive", "remainingTimeDisplay", "customControlSpacer", "playbackRateMenuButton", "chaptersButton", "descriptionsButton", "subsCapsButton", "audioTrackButton", "fullscreenToggle" ] }, "exitPictureInPicture" in document && li.prototype.options_.children.splice(li.prototype.options_ .children.length - 1, 0, "pictureInPictureToggle"), pt.registerComponent("ControlBar", li); f = function (n) { function e(e, t) { var i = n.call(this, e, t) || this; return i.on(e, "error", function (e) { return i.open(e) }), i } mt(e, n); var t = e.prototype; return t.buildCSSClass = function () { return "vjs-error-display " + n.prototype.buildCSSClass.call(this) }, t.content = function () { var e = this.player().error(); return e ? this.localize(e.message) : "" }, e }(At); f.prototype.options_ = g({}, At.prototype.options_, { pauseOnOpen: !1, fillAlways: !0, temporary: !1, uncloseable: !0 }), pt.registerComponent("ErrorDisplay", f); var Tn = "vjs-text-track-settings", ui = ["#000", "Black"], j = ["#00F", "Blue"], Xt = ["#0FF", "Cyan"], Ft = ["#0F0", "Green"], I = ["#F0F", "Magenta"], jt = ["#F00", "Red"], Bt = ["#FFF", "White"], C = ["#FF0", "Yellow"], k = ["1", "Opaque"], li = ["0.5", "Semi-Transparent"], f = ["0", "Transparent"], Sn = { backgroundColor: { selector: ".vjs-bg-color > select", id: "captions-background-color-%s", label: "Color", options: [ui, Bt, jt, Ft, j, C, I, Xt] }, backgroundOpacity: { selector: ".vjs-bg-opacity > select", id: "captions-background-opacity-%s", label: "Transparency", options: [k, li, f] }, color: { selector: ".vjs-fg-color > select", id: "captions-foreground-color-%s", label: "Color", options: [Bt, ui, jt, Ft, j, C, I, Xt] }, edgeStyle: { selector: ".vjs-edge-style > select", id: "%s", label: "Text Edge Style", options: [ ["none", "None"], ["raised", "Raised"], ["depressed", "Depressed"], ["uniform", "Uniform"], ["dropshadow", "Dropshadow"] ] }, fontFamily: { selector: ".vjs-font-family > select", id: "captions-font-family-%s", label: "Font Family", options: [ ["proportionalSansSerif", "Proportional Sans-Serif"], ["monospaceSansSerif", "Monospace Sans-Serif"], ["proportionalSerif", "Proportional Serif"], ["monospaceSerif", "Monospace Serif"], ["casual", "Casual"], ["script", "Script"], ["small-caps", "Small Caps"] ] }, fontPercent: { selector: ".vjs-font-percent > select", id: "captions-font-size-%s", label: "Font Size", options: [ ["0.50", "50%"], ["0.75", "75%"], ["1.00", "100%"], ["1.25", "125%"], ["1.50", "150%"], ["1.75", "175%"], ["2.00", "200%"], ["3.00", "300%"], ["4.00", "400%"] ], default: 2, parser: function (e) { return "1.00" === e ? null : Number(e) } }, textOpacity: { selector: ".vjs-text-opacity > select", id: "captions-foreground-opacity-%s", label: "Transparency", options: [k, li] }, windowColor: { selector: ".vjs-window-color > select", id: "captions-window-color-%s", label: "Color" }, windowOpacity: { selector: ".vjs-window-opacity > select", id: "captions-window-opacity-%s", label: "Transparency", options: [f, li, k] } }; function wn(e, t) { if ((e = t ? t(e) : e) && "none" !== e) return e } Sn.windowColor.options = Sn.backgroundColor.options, pt.registerComponent("TextTrackSettings", function (n) { function e(e, t) { var i; return t.temporary = !1, (i = n.call(this, e, t) || this).updateDisplay = i.updateDisplay.bind( ft(i)), i.fill(), i.hasBeenOpened_ = i.hasBeenFilled_ = !0, i.endDialog = $("p", { className: "vjs-control-text", textContent: i.localize("End of dialog window.") }), i.el().appendChild(i.endDialog), i.setDefaults(), void 0 === t .persistTextTrackSettings && (i.options_.persistTextTrackSettings = i.options_.playerOptions .persistTextTrackSettings), i.on(i.$(".vjs-done-button"), "click", function () { i.saveSettings(), i.close() }), i.on(i.$(".vjs-default-button"), "click", function () { i.setDefaults(), i.updateDisplay() }), _(Sn, function (e) { i.on(i.$(e.selector), "change", i.updateDisplay) }), i.options_.persistTextTrackSettings && i.restoreSettings(), i } mt(e, n); var t = e.prototype; return t.dispose = function () { this.endDialog = null, n.prototype.dispose.call(this) }, t.createElSelect_ = function (e, t, i) { var n = this; void 0 === t && (t = ""), void 0 === i && (i = "label"); var e = Sn[e], r = e.id.replace("%s", this.id_), a = [t, r].join(" ").trim(); return ["<" + i + ' id="' + r + '" class="' + ("label" === i ? "vjs-label" : "") + '">', this.localize(e.label), "", '").join("") }, t.createElFgColor_ = function () { var e = "captions-text-legend-" + this.id_; return ['
', '', this .localize("Text"), "", this.createElSelect_("color", e), '', this.createElSelect_("textOpacity", e), "", "
" ].join("") }, t.createElBgColor_ = function () { var e = "captions-background-" + this.id_; return ['
', '', this .localize("Background"), "", this.createElSelect_("backgroundColor", e), '', this.createElSelect_( "backgroundOpacity", e), "", "
" ].join("") }, t.createElWinColor_ = function () { var e = "captions-window-" + this.id_; return ['
', '', this.localize("Window"), "", this.createElSelect_("windowColor", e), '', this.createElSelect_( "windowOpacity", e), "", "
" ].join("") }, t.createElColors_ = function () { return $("div", { className: "vjs-track-settings-colors", innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this .createElWinColor_() ].join("") }) }, t.createElFont_ = function () { return $("div", { className: "vjs-track-settings-font", innerHTML: ['
', this .createElSelect_("fontPercent", "", "legend"), "
", '
', this .createElSelect_("edgeStyle", "", "legend"), "
", '
', this .createElSelect_("fontFamily", "", "legend"), "
" ].join("") }) }, t.createElControls_ = function () { var e = this.localize("restore all settings to the default values"); return $("div", { className: "vjs-track-settings-controls", innerHTML: ['", '" ].join("") }) }, t.content = function () { return [this.createElColors_(), this.createElFont_(), this.createElControls_()] }, t.label = function () { return this.localize("Caption Settings Dialog") }, t.description = function () { return this.localize("Beginning of dialog window. Escape will cancel and close the window.") }, t.buildCSSClass = function () { return n.prototype.buildCSSClass.call(this) + " vjs-text-track-settings" }, t.getValues = function () { var i, n, e, r = this; return n = function (e, t, i) { var n, t = (n = r.$(t.selector), t = t.parser, wn(n.options[n.options.selectedIndex] .value, t)); return void 0 !== t && (e[i] = t), e }, void 0 === (e = {}) && (e = 0), v(i = Sn).reduce(function (e, t) { return n(e, i[t], t) }, e) }, t.setValues = function (i) { var n = this; _(Sn, function (e, t) { !function (e, t, i) { if (t) for (var n = 0; n < e.options.length; n++) if (wn(e.options[n].value, i) === t) { e.selectedIndex = n; break } }(n.$(e.selector), i[t], e.parser) }) }, t.setDefaults = function () { var i = this; _(Sn, function (e) { var t = e.hasOwnProperty("default") ? e.default : 0; i.$(e.selector).selectedIndex = t }) }, t.restoreSettings = function () { var e; try { e = JSON.parse(window.localStorage.getItem(Tn)) } catch (e) { h.warn(e) } e && this.setValues(e) }, t.saveSettings = function () { if (this.options_.persistTextTrackSettings) { var e = this.getValues(); try { Object.keys(e).length ? window.localStorage.setItem(Tn, JSON.stringify(e)) : window .localStorage.removeItem(Tn) } catch (e) { h.warn(e) } } }, t.updateDisplay = function () { var e = this.player_.getChild("textTrackDisplay"); e && e.updateDisplay() }, t.conditionalBlur_ = function () { this.previouslyActiveEl_ = null; var e = this.player_.controlBar, t = e && e.subsCapsButton, e = e && e.captionsButton; t ? t.focus() : e && e.focus() }, e }(At)), pt.registerComponent("ResizeManager", function (a) { function e(e, t) { var i, n = t.ResizeObserver || window.ResizeObserver, r = lt({ createEl: !(n = null === t.ResizeObserver ? !1 : n), reportTouchActivity: !1 }, t); return (i = a.call(this, e, r) || this).ResizeObserver = t.ResizeObserver || window .ResizeObserver, i.loadListener_ = null, i.resizeObserver_ = null, i.debouncedHandler_ = Ge( function () { i.resizeHandler() }, 100, !1, ft(i)), n ? (i.resizeObserver_ = new i.ResizeObserver(i.debouncedHandler_), i.resizeObserver_.observe(e.el())) : (i.loadListener_ = function () { var e, t; i.el_ && i.el_.contentWindow && (e = i.debouncedHandler_, t = i.unloadListener_ = function () { Fe(this, "resize", e), Fe(this, "unload", t), t = null }, Be(i.el_.contentWindow, "unload", t), Be(i.el_.contentWindow, "resize", e)) }, i.one("load", i.loadListener_)), i } mt(e, a); var t = e.prototype; return t.createEl = function () { return a.prototype.createEl.call(this, "iframe", { className: "vjs-resize-manager", tabIndex: -1 }, { "aria-hidden": "true" }) }, t.resizeHandler = function () { this.player_ && this.player_.trigger && this.player_.trigger("playerresize") }, t.dispose = function () { this.debouncedHandler_ && this.debouncedHandler_.cancel(), this.resizeObserver_ && (this .player_.el() && this.resizeObserver_.unobserve(this.player_.el()), this .resizeObserver_.disconnect()), this.loadListener_ && this.off("load", this .loadListener_), this.el_ && this.el_.contentWindow && this.unloadListener_ && this .unloadListener_.call(this.el_.contentWindow), this.ResizeObserver = null, this .resizeObserver = null, this.debouncedHandler_ = null, this.loadListener_ = null, a .prototype.dispose.call(this) }, e }(pt)); var En = { trackingThreshold: 20, liveTolerance: 15 }; pt.registerComponent("LiveTracker", function (n) { function e(e, t) { var t = lt(En, t, { createEl: !1 }), i = n.call(this, e, t) || this; return i.handleVisibilityChange_ = function (e) { return i.handleVisibilityChange(e) }, i.trackLiveHandler_ = function () { return i.trackLive_() }, i.handlePlay_ = function (e) { return i.handlePlay(e) }, i.handleFirstTimeupdate_ = function (e) { return i.handleFirstTimeupdate(e) }, i.handleSeeked_ = function (e) { return i.handleSeeked(e) }, i.seekToLiveEdge_ = function (e) { return i.seekToLiveEdge(e) }, i.reset_(), i.on(i.player_, "durationchange", function (e) { return i.handleDurationchange(e) }), i.on(i.player_, "canplay", function () { return i.toggleTracking() }), N && "hidden" in document && "visibilityState" in document && i.on(document, "visibilitychange", i.handleVisibilityChange_), i } mt(e, n); var t = e.prototype; return t.handleVisibilityChange = function () { this.player_.duration() === 1 / 0 && (document.hidden ? this.stopTracking() : this .startTracking()) }, t.trackLive_ = function () { var e, t = this.player_.seekable(); t && t.length && (e = Number(window.performance.now().toFixed(4)), t = -1 === this .lastTime_ ? 0 : (e - this.lastTime_) / 1e3, this.lastTime_ = e, this.pastSeekEnd_ = this.pastSeekEnd() + t, e = this.liveCurrentTime(), t = this.player_.currentTime(), t = this.player_.paused() || this.seekedBehindLive_ || Math.abs(e - t) > this .options_.liveTolerance, (t = !this.timeupdateSeen_ || e === 1 / 0 ? !1 : t) !== this.behindLiveEdge_ && (this.behindLiveEdge_ = t, this.trigger("liveedgechange"))) }, t.handleDurationchange = function () { this.toggleTracking() }, t.toggleTracking = function () { this.player_.duration() === 1 / 0 && this.liveWindow() >= this.options_.trackingThreshold ? (this.player_.options_.liveui && this.player_.addClass("vjs-liveui"), this .startTracking()) : (this.player_.removeClass("vjs-liveui"), this.stopTracking()) }, t.startTracking = function () { this.isTracking() || (this.timeupdateSeen_ || (this.timeupdateSeen_ = this.player_ .hasStarted()), this.trackingInterval_ = this.setInterval(this .trackLiveHandler_, 30), this.trackLive_(), this.on(this.player_, ["play", "pause" ], this.trackLiveHandler_), this.timeupdateSeen_ ? this.on(this.player_, "seeked", this.handleSeeked_) : (this.one(this.player_, "play", this.handlePlay_), this .one(this.player_, "timeupdate", this.handleFirstTimeupdate_))) }, t.handleFirstTimeupdate = function () { this.timeupdateSeen_ = !0, this.on(this.player_, "seeked", this.handleSeeked_) }, t.handleSeeked = function () { var e = Math.abs(this.liveCurrentTime() - this.player_.currentTime()); this.seekedBehindLive_ = this.nextSeekedFromUser_ && 2 < e, this.nextSeekedFromUser_ = !1, this.trackLive_() }, t.handlePlay = function () { this.one(this.player_, "timeupdate", this.seekToLiveEdge_) }, t.reset_ = function () { this.lastTime_ = -1, this.pastSeekEnd_ = 0, this.lastSeekEnd_ = -1, this.behindLiveEdge_ = ! 0, this.timeupdateSeen_ = !1, this.seekedBehindLive_ = !1, this.nextSeekedFromUser_ = ! 1, this.clearInterval(this.trackingInterval_), this.trackingInterval_ = null, this.off( this.player_, ["play", "pause"], this.trackLiveHandler_), this.off(this.player_, "seeked", this.handleSeeked_), this.off(this.player_, "play", this.handlePlay_), this.off(this.player_, "timeupdate", this.handleFirstTimeupdate_), this.off(this .player_, "timeupdate", this.seekToLiveEdge_) }, t.nextSeekedFromUser = function () { this.nextSeekedFromUser_ = !0 }, t.stopTracking = function () { this.isTracking() && (this.reset_(), this.trigger("liveedgechange")) }, t.seekableEnd = function () { for (var e = this.player_.seekable(), t = [], i = e ? e.length : 0; i--;) t.push(e.end(i)); return t.length ? t.sort()[t.length - 1] : 1 / 0 }, t.seekableStart = function () { for (var e = this.player_.seekable(), t = [], i = e ? e.length : 0; i--;) t.push(e.start( i)); return t.length ? t.sort()[0] : 0 }, t.liveWindow = function () { var e = this.liveCurrentTime(); return e === 1 / 0 ? 0 : e - this.seekableStart() }, t.isLive = function () { return this.isTracking() }, t.atLiveEdge = function () { return !this.behindLiveEdge() }, t.liveCurrentTime = function () { return this.pastSeekEnd() + this.seekableEnd() }, t.pastSeekEnd = function () { var e = this.seekableEnd(); return -1 !== this.lastSeekEnd_ && e !== this.lastSeekEnd_ && (this.pastSeekEnd_ = 0), this .lastSeekEnd_ = e, this.pastSeekEnd_ }, t.behindLiveEdge = function () { return this.behindLiveEdge_ }, t.isTracking = function () { return "number" == typeof this.trackingInterval_ }, t.seekToLiveEdge = function () { this.seekedBehindLive_ = !1, this.atLiveEdge() || (this.nextSeekedFromUser_ = !1, this .player_.currentTime(this.liveCurrentTime())) }, t.dispose = function () { this.off(document, "visibilitychange", this.handleVisibilityChange_), this.stopTracking(), n .prototype.dispose.call(this) }, e }(pt)); function kn(e) { if ((n = e.el()).hasAttribute("src")) return e.triggerSourceset(n.src), 1; var t = e.$$("source"), i = [], n = ""; if (t.length) { for (var r = 0; r < t.length; r++) { var a = t[r].src; a && -1 === i.indexOf(a) && i.push(a) } return !!i.length && (1 === i.length && (n = i[0]), e.triggerSourceset(n), !0) } } function Cn(e, t) { for (var i = {}, n = 0; n < e.length && !((i = Object.getOwnPropertyDescriptor(e[n], t)) && i.set && i .get); n++) ; return i.enumerable = !0, i.configurable = !0, i } function In(a) { var t, e, i, s = a.el(); s.resetSourceWatch_ || (t = {}, e = Cn([a.el(), window.HTMLMediaElement.prototype, window.Element.prototype, Ln ], "innerHTML"), i = function (r) { return function () { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; var n = r.apply(s, t); return kn(a), n } }, ["append", "appendChild", "insertAdjacentHTML"].forEach(function (e) { s[e] && (t[e] = s[e], s[e] = i(t[e])) }), Object.defineProperty(s, "innerHTML", lt(e, { set: i(e.set) })), s.resetSourceWatch_ = function () { s.resetSourceWatch_ = null, Object.keys(t).forEach(function (e) { s[e] = t[e] }), Object.defineProperty(s, "innerHTML", e) }, a.one("sourceset", s.resetSourceWatch_)) } function xn(i) { var n, t, r, a; i.featuresSourceset && ((n = i.el()).resetSourceset_ || (t = Cn([i.el(), window.HTMLMediaElement.prototype, Dn ], "src"), r = n.setAttribute, a = n.load, Object.defineProperty(n, "src", lt(t, { set: function (e) { e = t.set.call(n, e); return i.triggerSourceset(n.src), e } })), n.setAttribute = function (e, t) { t = r.call(n, e, t); return /src/i.test(e) && i.triggerSourceset(n.src), t }, n.load = function () { var e = a.call(n); return kn(i) || (i.triggerSourceset(""), In(i)), e }, n.currentSrc ? i.triggerSourceset(n.currentSrc) : kn(i) || In(i), n.resetSourceset_ = function () { n.resetSourceset_ = null, n.load = a, n.setAttribute = r, Object.defineProperty(n, "src", t), n.resetSourceWatch_ && n.resetSourceWatch_() })) } function An(t, i, n, e) { function r(e) { return Object.defineProperty(t, i, { value: e, enumerable: !0, writable: !0 }) } var a = { configurable: !0, enumerable: !0, get: function () { var e = n(); return r(e), e } }; return (e = void 0 === e ? !0 : e) && (a.set = r), Object.defineProperty(t, i, a) } var Pn, Ln = Object.defineProperty({}, "innerHTML", { get: function () { return this.cloneNode(!0).innerHTML }, set: function (e) { var t = document.createElement(this.nodeName.toLowerCase()); t.innerHTML = e; for (var i = document.createDocumentFragment(); t.childNodes.length;) i.appendChild(t .childNodes[0]); return this.innerText = "", window.Element.prototype.appendChild.call(this, i), this .innerHTML } }), Dn = Object.defineProperty({}, "src", { get: function () { return this.hasAttribute("src") ? Rt(window.Element.prototype.getAttribute.call(this, "src")) : "" }, set: function (e) { return window.Element.prototype.setAttribute.call(this, "src", e), e } }), On = function (l) { function s(e, t) { var i = l.call(this, e, t) || this, t = e.source, n = !1; if (t && (i.el_.currentSrc !== t.src || e.tag && 3 === e.tag.initNetworkState_) ? i.setSource(t) : i .handleLateInit_(i.el_), e.enableSourceset && i.setupSourcesetHandling_(), i.isScrubbing_ = !1, i.el_.hasChildNodes()) { for (var r = i.el_.childNodes, a = r.length, s = []; a--;) { var o = r[a]; "track" === o.nodeName.toLowerCase() && (i.featuresNativeTextTracks ? (i .remoteTextTrackEls().addTrackElement_(o), i.remoteTextTracks().addTrack(o .track), i.textTracks().addTrack(o.track), n || i.el_.hasAttribute( "crossorigin") || !Ut(o.src) || (n = !0)) : s.push(o)) } for (var u = 0; u < s.length; u++) i.el_.removeChild(s[u]) } return i.proxyNativeTracks_(), i.featuresNativeTextTracks && n && h.warn( "Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\nThis may prevent text tracks from loading." ), i.restoreMetadataTracksInIOSNativePlayer_(), (F || H || L) && !0 === e .nativeControlsForTouch && i.setControls(!0), i.proxyWebkitFullscreen_(), i.triggerReady(), i } mt(s, l); var e = s.prototype; return e.dispose = function () { this.el_ && this.el_.resetSourceset_ && this.el_.resetSourceset_(), s.disposeMediaElement(this .el_), this.options_ = null, l.prototype.dispose.call(this) }, e.setupSourcesetHandling_ = function () { xn(this) }, e.restoreMetadataTracksInIOSNativePlayer_ = function () { function e() { i = []; for (var e = 0; e < n.length; e++) { var t = n[e]; "metadata" === t.kind && i.push({ track: t, storedMode: t.mode }) } } var i, n = this.textTracks(); e(), n.addEventListener("change", e), this.on("dispose", function () { return n.removeEventListener("change", e) }); function r() { for (var e = 0; e < i.length; e++) { var t = i[e]; "disabled" === t.track.mode && t.track.mode !== t.storedMode && (t.track.mode = t .storedMode) } n.removeEventListener("change", r) } this.on("webkitbeginfullscreen", function () { n.removeEventListener("change", e), n.removeEventListener("change", r), n .addEventListener("change", r) }), this.on("webkitendfullscreen", function () { n.removeEventListener("change", e), n.addEventListener("change", e), n .removeEventListener("change", r) }) }, e.overrideNative_ = function (e, t) { var i, n = this; t === this["featuresNative" + e + "Tracks"] && (this[(i = e.toLowerCase()) + "TracksListeners_"] && Object.keys(this[i + "TracksListeners_"]).forEach(function (e) { n.el()[i + "Tracks"].removeEventListener(e, n[i + "TracksListeners_"][e]) }), this["featuresNative" + e + "Tracks"] = !t, this[i + "TracksListeners_"] = null, this.proxyNativeTracksForType_(i)) }, e.overrideNativeAudioTracks = function (e) { this.overrideNative_("Audio", e) }, e.overrideNativeVideoTracks = function (e) { this.overrideNative_("Video", e) }, e.proxyNativeTracksForType_ = function (i) { var e, t, n = this, r = ai[i], a = this.el()[r.getterName], s = this[r.getterName](); this["featuresNative" + r.capitalName + "Tracks"] && a && a.addEventListener && (t = function () { for (var e = [], t = 0; t < s.length; t++) { for (var i = !1, n = 0; n < a.length; n++) if (a[n] === s[t]) { i = !0; break } i || e.push(s[t]) } for (; e.length;) s.removeTrack(e.shift()) }, this[r.getterName + "Listeners_"] = e = { change: function (e) { var t = { type: "change", target: s, currentTarget: s, srcElement: s }; s.trigger(t), "text" === i && n[si.remoteText.getterName]().trigger(t) }, addtrack: function (e) { s.addTrack(e.track) }, removetrack: function (e) { s.removeTrack(e.track) } }, Object.keys(e).forEach(function (t) { var i = e[t]; a.addEventListener(t, i), n.on("dispose", function (e) { return a.removeEventListener(t, i) }) }), this.on("loadstart", t), this.on("dispose", function (e) { return n.off("loadstart", t) })) }, e.proxyNativeTracks_ = function () { var t = this; ai.names.forEach(function (e) { t.proxyNativeTracksForType_(e) }) }, e.createEl = function () { var e, t = this.options_.tag; t && (this.options_.playerElIngest || this.movingMediaElementInDOM) || (t ? (e = t.cloneNode(! 0), t.parentNode && t.parentNode.insertBefore(e, t), s.disposeMediaElement(t), t = e ) : (t = document.createElement("video"), e = lt({}, this.options_.tag && ae(this .options_.tag)), F && !0 === this.options_.nativeControlsForTouch || delete e .controls, re(t, b(e, { id: this.options_.techId, class: "vjs-tech" }))), t.playerId = this.options_.playerId), "undefined" != typeof this.options_ .preload && oe(t, "preload", this.options_.preload), void 0 !== this.options_ .disablePictureInPicture && (t.disablePictureInPicture = this.options_ .disablePictureInPicture); for (var i = ["loop", "muted", "playsinline", "autoplay"], n = 0; n < i.length; n++) { var r = i[n], a = this.options_[r]; "undefined" != typeof a && (a ? oe(t, r, r) : ue(t, r), t[r] = a) } return t }, e.handleLateInit_ = function (e) { if (0 !== e.networkState && 3 !== e.networkState) { if (0 === e.readyState) { var t = !1, i = function () { t = !0 }; this.on("loadstart", i); var n = function () { t || this.trigger("loadstart") }; return this.on("loadedmetadata", n), void this.ready(function () { this.off("loadstart", i), this.off("loadedmetadata", n), t || this.trigger( "loadstart") }) } var r = ["loadstart"]; r.push("loadedmetadata"), 2 <= e.readyState && r.push("loadeddata"), 3 <= e.readyState && r .push("canplay"), 4 <= e.readyState && r.push("canplaythrough"), this.ready(function () { r.forEach(function (e) { this.trigger(e) }, this) }) } }, e.setScrubbing = function (e) { this.isScrubbing_ = e }, e.scrubbing = function () { return this.isScrubbing_ }, e.setCurrentTime = function (e) { try { this.isScrubbing_ && this.el_.fastSeek && V ? this.el_.fastSeek(e) : this.el_.currentTime = e } catch (e) { h(e, "Video is not ready. (Video.js)") } }, e.duration = function () { var t = this; return this.el_.duration === 1 / 0 && A && M && 0 === this.el_.currentTime ? (this.on( "timeupdate", function e() { 0 < t.el_.currentTime && (t.el_.duration === 1 / 0 && t.trigger( "durationchange"), t.off("timeupdate", e)) }), NaN) : this.el_.duration || NaN }, e.width = function () { return this.el_.offsetWidth }, e.height = function () { return this.el_.offsetHeight }, e.proxyWebkitFullscreen_ = function () { var e, t, i = this; "webkitDisplayingFullscreen" in this.el_ && (e = function () { this.trigger("fullscreenchange", { isFullscreen: !1 }), this.el_.controls && !this.options_.nativeControlsForTouch && this .controls() && (this.el_.controls = !1) }, t = function () { "webkitPresentationMode" in this.el_ && "picture-in-picture" !== this.el_ .webkitPresentationMode && (this.one("webkitendfullscreen", e), this.trigger( "fullscreenchange", { isFullscreen: !0, nativeIOSFullscreen: !0 })) }, this.on("webkitbeginfullscreen", t), this.on("dispose", function () { i.off("webkitbeginfullscreen", t), i.off("webkitendfullscreen", e) })) }, e.supportsFullScreen = function () { if ("function" == typeof this.el_.webkitEnterFullScreen) { var e = window.navigator && window.navigator.userAgent || ""; if (/Android/.test(e) || !/Chrome|Mac OS X 10.5/.test(e)) return !0 } return !1 }, e.enterFullScreen = function () { var e = this.el_; if (e.paused && e.networkState <= e.HAVE_METADATA) Et(this.el_.play()), this.setTimeout( function () { e.pause(); try { e.webkitEnterFullScreen() } catch (e) { this.trigger("fullscreenerror", e) } }, 0); else try { e.webkitEnterFullScreen() } catch (e) { this.trigger("fullscreenerror", e) } }, e.exitFullScreen = function () { this.el_.webkitDisplayingFullscreen ? this.el_.webkitExitFullScreen() : this.trigger( "fullscreenerror", new Error("The video is not fullscreen")) }, e.requestPictureInPicture = function () { return this.el_.requestPictureInPicture() }, e.requestVideoFrameCallback = function (e) { return this.featuresVideoFrameCallback ? this.el_.requestVideoFrameCallback(e) : l.prototype .requestVideoFrameCallback.call(this, e) }, e.cancelVideoFrameCallback = function (e) { this.featuresVideoFrameCallback ? this.el_.cancelVideoFrameCallback(e) : l.prototype .cancelVideoFrameCallback.call(this, e) }, e.src = function (e) { if (void 0 === e) return this.el_.src; this.setSrc(e) }, e.reset = function () { s.resetMediaElement(this.el_) }, e.currentSrc = function () { return this.currentSource_ ? this.currentSource_.src : this.el_.currentSrc }, e.setControls = function (e) { this.el_.controls = !!e }, e.addTextTrack = function (e, t, i) { return this.featuresNativeTextTracks ? this.el_.addTextTrack(e, t, i) : l.prototype.addTextTrack .call(this, e, t, i) }, e.createRemoteTextTrack = function (e) { if (!this.featuresNativeTextTracks) return l.prototype.createRemoteTextTrack.call(this, e); var t = document.createElement("track"); return e.kind && (t.kind = e.kind), e.label && (t.label = e.label), (e.language || e.srclang) && (t.srclang = e.language || e.srclang), e.default && (t.default = e.default), e.id && (t.id = e.id), e.src && (t.src = e.src), t }, e.addRemoteTextTrack = function (e, t) { t = l.prototype.addRemoteTextTrack.call(this, e, t); return this.featuresNativeTextTracks && this.el().appendChild(t), t }, e.removeRemoteTextTrack = function (e) { if (l.prototype.removeRemoteTextTrack.call(this, e), this.featuresNativeTextTracks) for (var t = this.$$("track"), i = t.length; i--;) e !== t[i] && e !== t[i].track || this .el().removeChild(t[i]) }, e.getVideoPlaybackQuality = function () { if ("function" == typeof this.el().getVideoPlaybackQuality) return this.el() .getVideoPlaybackQuality(); var e = {}; return "undefined" != typeof this.el().webkitDroppedFrameCount && "undefined" != typeof this .el().webkitDecodedFrameCount && (e.droppedVideoFrames = this.el().webkitDroppedFrameCount, e.totalVideoFrames = this.el().webkitDecodedFrameCount), window.performance && "function" == typeof window.performance.now ? e.creationTime = window.performance.now() : window.performance && window.performance.timing && "number" == typeof window.performance .timing.navigationStart && (e.creationTime = window.Date.now() - window.performance.timing .navigationStart), e }, s }(ji); An(On, "TEST_VID", function () { if (X()) { var e = document.createElement("video"), t = document.createElement("track"); return t.kind = "captions", t.srclang = "en", t.label = "English", e.appendChild(t), e } }), On.isSupported = function () { try { On.TEST_VID.volume = .5 } catch (e) { return !1 } return !(!On.TEST_VID || !On.TEST_VID.canPlayType) }, On.canPlayType = function (e) { return On.TEST_VID.canPlayType(e) }, On.canPlaySource = function (e, t) { return On.canPlayType(e.type) }, On.canControlVolume = function () { try { var e = On.TEST_VID.volume; On.TEST_VID.volume = e / 2 + .1; var t = e !== On.TEST_VID.volume; return t && q ? (window.setTimeout(function () { On && On.prototype && (On.prototype.featuresVolumeControl = e !== On.TEST_VID .volume) }), !1) : t } catch (e) { return !1 } }, On.canMuteVolume = function () { try { var e = On.TEST_VID.muted; return On.TEST_VID.muted = !e, On.TEST_VID.muted ? oe(On.TEST_VID, "muted", "muted") : ue(On .TEST_VID, "muted"), e !== On.TEST_VID.muted } catch (e) { return !1 } }, On.canControlPlaybackRate = function () { if (A && M && R < 58) return !1; try { var e = On.TEST_VID.playbackRate; return On.TEST_VID.playbackRate = e / 2 + .1, e !== On.TEST_VID.playbackRate } catch (e) { return !1 } }, On.canOverrideAttributes = function () { try { var e = function () { }; Object.defineProperty(document.createElement("video"), "src", { get: e, set: e }), Object.defineProperty(document.createElement("audio"), "src", { get: e, set: e }), Object.defineProperty(document.createElement("video"), "innerHTML", { get: e, set: e }), Object.defineProperty(document.createElement("audio"), "innerHTML", { get: e, set: e }) } catch (e) { return !1 } return !0 }, On.supportsNativeTextTracks = function () { return V || q && M }, On.supportsNativeVideoTracks = function () { return !(!On.TEST_VID || !On.TEST_VID.videoTracks) }, On.supportsNativeAudioTracks = function () { return !(!On.TEST_VID || !On.TEST_VID.audioTracks) }, On.Events = ["loadstart", "suspend", "abort", "error", "emptied", "stalled", "loadedmetadata", "loadeddata", "canplay", "canplaythrough", "playing", "waiting", "seeking", "seeked", "ended", "durationchange", "timeupdate", "progress", "play", "pause", "ratechange", "resize", "volumechange" ], [ ["featuresMuteControl", "canMuteVolume"], ["featuresPlaybackRate", "canControlPlaybackRate"], ["featuresSourceset", "canOverrideAttributes"], ["featuresNativeTextTracks", "supportsNativeTextTracks"], ["featuresNativeVideoTracks", "supportsNativeVideoTracks"], ["featuresNativeAudioTracks", "supportsNativeAudioTracks"] ].forEach(function (e) { var t = e[0], i = e[1]; An(On.prototype, t, function () { return On[i]() }, !0) }), On.prototype.featuresVolumeControl = On.canControlVolume(), On.prototype.movingMediaElementInDOM = !q, On.prototype.featuresFullscreenResize = !0, On.prototype.featuresProgressEvents = !0, On.prototype .featuresTimeupdateEvents = !0, On.prototype.featuresVideoFrameCallback = !(!On.TEST_VID || !On.TEST_VID .requestVideoFrameCallback), On.patchCanPlayType = function () { 4 <= P && !D && !M && (Pn = On.TEST_VID && On.TEST_VID.constructor.prototype.canPlayType, On.TEST_VID .constructor.prototype.canPlayType = function (e) { return e && /^application\/(?:x-|vnd\.apple\.)mpegurl/i.test(e) ? "maybe" : Pn.call(this, e) }) }, On.unpatchCanPlayType = function () { var e = On.TEST_VID.constructor.prototype.canPlayType; return Pn && (On.TEST_VID.constructor.prototype.canPlayType = Pn), e }, On.patchCanPlayType(), On.disposeMediaElement = function (e) { if (e) { for (e.parentNode && e.parentNode.removeChild(e); e.hasChildNodes();) e.removeChild(e.firstChild); e.removeAttribute("src"), "function" == typeof e.load && function () { try { e.load() } catch (e) { } }() } }, On.resetMediaElement = function (e) { if (e) { for (var t = e.querySelectorAll("source"), i = t.length; i--;) e.removeChild(t[i]); e.removeAttribute("src"), "function" == typeof e.load && function () { try { e.load() } catch (e) { } }() } }, ["muted", "defaultMuted", "autoplay", "controls", "loop", "playsinline"].forEach(function (e) { On.prototype[e] = function () { return this.el_[e] || this.el_.hasAttribute(e) } }), ["muted", "defaultMuted", "autoplay", "loop", "playsinline"].forEach(function (t) { On.prototype["set" + ut(t)] = function (e) { (this.el_[t] = e) ? this.el_.setAttribute(t, t) : this.el_.removeAttribute(t) } }), ["paused", "currentTime", "buffered", "volume", "poster", "preload", "error", "seeking", "seekable", "ended", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "played", "networkState", "readyState", "videoWidth", "videoHeight", "crossOrigin" ].forEach(function (e) { On.prototype[e] = function () { return this.el_[e] } }), ["volume", "src", "poster", "preload", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "crossOrigin" ].forEach(function (t) { On.prototype["set" + ut(t)] = function (e) { this.el_[t] = e } }), ["pause", "load", "play"].forEach(function (e) { On.prototype[e] = function () { return this.el_[e]() } }), ji.withSourceHandlers(On), On.nativeSourceHandler = {}, On.nativeSourceHandler.canPlayType = function ( e) { try { return On.TEST_VID.canPlayType(e) } catch (e) { return "" } }, On.nativeSourceHandler.canHandleSource = function (e, t) { if (e.type) return On.nativeSourceHandler.canPlayType(e.type); if (e.src) { e = Nt(e.src); return On.nativeSourceHandler.canPlayType("video/" + e) } return "" }, On.nativeSourceHandler.handleSource = function (e, t, i) { t.setSrc(e.src) }, On.nativeSourceHandler.dispose = function () { }, On.registerSourceHandler(On.nativeSourceHandler), ji .registerTech("Html5", On); var Mn = ["progress", "abort", "suspend", "emptied", "stalled", "loadedmetadata", "loadeddata", "timeupdate", "resize", "volumechange", "texttrackchange" ], Rn = { canplay: "CanPlay", canplaythrough: "CanPlayThrough", playing: "Playing", seeked: "Seeked" }, Nn = ["tiny", "xsmall", "small", "medium", "large", "xlarge", "huge"], Un = {}; Nn.forEach(function (e) { var t = "x" === e.charAt(0) ? "x-" + e.substring(1) : e; Un[e] = "vjs-layout-" + t }); var Bn = { tiny: 210, xsmall: 320, small: 425, medium: 768, large: 1440, xlarge: 2560, huge: 1 / 0 }, Fn = function (c) { function o(e, t, i) { var n, r; if (e.id = e.id || t.id || "vjs_video_" + Pe++, (t = b(o.getTagSettings(e), t)).initChildren = !1, t .createEl = !1, t.evented = !1, t.reportTouchActivity = !1, !t.language) if ("function" == typeof e.closest) { var a = e.closest("[lang]"); a && a.getAttribute && (t.language = a.getAttribute("lang")) } else for (var s = e; s && 1 === s.nodeType;) { if (ae(s).hasOwnProperty("lang")) { t.language = s.getAttribute("lang"); break } s = s.parentNode } if ((n = c.call(this, null, t, i) || this).boundDocumentFullscreenChange_ = function (e) { return n.documentFullscreenChange_(e) }, n.boundFullWindowOnEscKey_ = function (e) { return n.fullWindowOnEscKey(e) }, n.boundUpdateStyleEl_ = function (e) { return n.updateStyleEl_(e) }, n.boundApplyInitTime_ = function (e) { return n.applyInitTime_(e) }, n.boundUpdateCurrentBreakpoint_ = function (e) { return n.updateCurrentBreakpoint_(e) }, n.boundHandleTechClick_ = function (e) { return n.handleTechClick_(e) }, n.boundHandleTechDoubleClick_ = function (e) { return n.handleTechDoubleClick_(e) }, n.boundHandleTechTouchStart_ = function (e) { return n.handleTechTouchStart_(e) }, n.boundHandleTechTouchMove_ = function (e) { return n.handleTechTouchMove_(e) }, n.boundHandleTechTouchEnd_ = function (e) { return n.handleTechTouchEnd_(e) }, n.boundHandleTechTap_ = function (e) { return n.handleTechTap_(e) }, n.isFullscreen_ = !1, n.log = p(n.id_), n.fsApi_ = l, n.isPosterFromTech_ = !1, n .queuedCallbacks_ = [], n.isReady_ = !1, n.hasStarted_ = !1, n.userActive_ = !1, n .debugEnabled_ = !1, n.audioOnlyMode_ = !1, n.audioPosterMode_ = !1, n.audioOnlyCache_ = { playerHeight: null, hiddenChildren: [] }, !n.options_ || !n.options_.techOrder || !n.options_.techOrder.length) throw new Error( "No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?" ); n.tag = e, n.tagAttributes = e && ae(e), n.language(n.options_.language), t.languages ? (r = {}, Object.getOwnPropertyNames(t.languages).forEach(function (e) { r[e.toLowerCase()] = t.languages[e] }), n.languages_ = r) : n.languages_ = o.prototype.options_.languages, n.resetCache_(), n .poster_ = t.poster || "", n.controls_ = !!t.controls, e.controls = !1, e.removeAttribute( "controls"), n.changingSrc_ = !1, n.playCallbacks_ = [], n.playTerminatedQueue_ = [], e .hasAttribute("autoplay") ? n.autoplay(!0) : n.autoplay(n.options_.autoplay), t.plugins && Object.keys(t.plugins).forEach(function (e) { if ("function" != typeof n[e]) throw new Error('plugin "' + e + '" does not exist') }), n.scrubbing_ = !1, n.el_ = n.createEl(), rt(ft(n), { eventBusKey: "el_" }), n.fsApi_.requestFullscreen && (Be(document, n.fsApi_.fullscreenchange, n .boundDocumentFullscreenChange_), n.on(n.fsApi_.fullscreenchange, n .boundDocumentFullscreenChange_)), n.fluid_ && n.on(["playerreset", "resize"], n .boundUpdateStyleEl_); i = lt(n.options_); t.plugins && Object.keys(t.plugins).forEach(function (e) { n[e](t.plugins[e]) }), t.debug && n.debug(!0), n.options_.playerOptions = i, n.middleware_ = [], n.playbackRates(t .playbackRates), n.initChildren(), n.isAudio("audio" === e.nodeName.toLowerCase()), n .controls() ? n.addClass("vjs-controls-enabled") : n.addClass("vjs-controls-disabled"), n.el_ .setAttribute("role", "region"), n.isAudio() ? n.el_.setAttribute("aria-label", n.localize( "Audio Player")) : n.el_.setAttribute("aria-label", n.localize("Video Player")), n .isAudio() && n.addClass("vjs-audio"), n.flexNotSupported_() && n.addClass("vjs-no-flex"), F && n .addClass("vjs-touch-enabled"), q || n.addClass("vjs-workinghover"), o.players[n.id_] = ft(n); e = u.split(".")[0]; return n.addClass("vjs-v" + e), n.userActive(!0), n.reportUserActivity(), n.one("play", function ( e) { return n.listenForUserActivity_(e) }), n.on("stageclick", function (e) { return n.handleStageClick_(e) }), n.on("keydown", function (e) { return n.handleKeyDown(e) }), n.on("languagechange", function (e) { return n.handleLanguagechange(e) }), n.breakpoints(n.options_.breakpoints), n.responsive(n.options_.responsive), n.on("ready", function () { n.audioPosterMode(n.options_.audioPosterMode), n.audioOnlyMode(n.options_.audioOnlyMode) }), n } mt(o, c); var e = o.prototype; return e.dispose = function () { var t = this; this.trigger("dispose"), this.off("dispose"), Fe(document, this.fsApi_.fullscreenchange, this .boundDocumentFullscreenChange_), Fe(document, "keydown", this .boundFullWindowOnEscKey_), this.styleEl_ && this.styleEl_.parentNode && (this.styleEl_ .parentNode.removeChild(this.styleEl_), this.styleEl_ = null), o.players[this.id_] = null, this.tag && this.tag.player && (this.tag.player = null), this.el_ && this.el_ .player && (this.el_.player = null), this.tech_ && (this.tech_.dispose(), this .isPosterFromTech_ = !1, this.poster_ = ""), this.playerElIngest_ && (this .playerElIngest_ = null), this.tag && (this.tag = null), qi[this.id()] = null, oi.names .forEach(function (e) { e = oi[e], e = t[e.getterName](); e && e.off && e.off() }), c.prototype.dispose.call(this) }, e.createEl = function () { var t, i = this.tag, e = this.playerElIngest_ = i.parentNode && i.parentNode.hasAttribute && i.parentNode .hasAttribute("data-vjs-player"), n = "video-js" === this.tag.tagName.toLowerCase(); e ? t = this.el_ = i.parentNode : n || (t = this.el_ = c.prototype.createEl.call(this, "div")); var r, a, s = ae(i); if (n) { for (t = this.el_ = i, i = this.tag = document.createElement("video"); t.children.length;) i .appendChild(t.firstChild); ee(t, "video-js") || te(t, "video-js"), t.appendChild(i), e = this.playerElIngest_ = t, Object.keys(t).forEach(function (e) { try { i[e] = t[e] } catch (e) { } }) } i.setAttribute("tabindex", "-1"), s.tabindex = "-1", (N || M && B) && (i.setAttribute("role", "application"), s.role = "application"), i.removeAttribute("width"), i.removeAttribute( "height"), "width" in s && delete s.width, "height" in s && delete s.height, Object .getOwnPropertyNames(s).forEach(function (e) { n && "class" === e || t.setAttribute(e, s[e]), n && i.setAttribute(e, s[e]) }), i.playerId = i.id, i.id += "_html5_api", i.className = "vjs-tech", (i.player = t .player = this).addClass("vjs-paused"), !0 !== window.VIDEOJS_NO_DYNAMIC_STYLE && (this .styleEl_ = xe("vjs-styles-dimensions"), r = Te(".vjs-styles-defaults"), (a = Te( "head")).insertBefore(this.styleEl_, r ? r.nextSibling : a.firstChild)), this .fill_ = !1, this.fluid_ = !1, this.width(this.options_.width), this.height(this.options_ .height), this.fill(this.options_.fill), this.fluid(this.options_.fluid), this .aspectRatio(this.options_.aspectRatio), this.crossOrigin(this.options_.crossOrigin || this .options_.crossorigin); for (var o = i.getElementsByTagName("a"), u = 0; u < o.length; u++) { var l = o.item(u); te(l, "vjs-hidden"), l.setAttribute("hidden", "hidden") } return i.initNetworkState_ = i.networkState, i.parentNode && !e && i.parentNode.insertBefore(t, i), Z(i, t), this.children_.unshift(i), this.el_.setAttribute("lang", this.language_), this.el_.setAttribute("translate", "no"), this.el_ = t }, e.crossOrigin = function (e) { if (!e) return this.techGet_("crossOrigin"); "anonymous" === e || "use-credentials" === e ? this.techCall_("setCrossOrigin", e) : h.warn( 'crossOrigin must be "anonymous" or "use-credentials", given "' + e + '"') }, e.width = function (e) { return this.dimension("width", e) }, e.height = function (e) { return this.dimension("height", e) }, e.dimension = function (e, t) { var i = e + "_"; if (void 0 === t) return this[i] || 0; if ("" === t || "auto" === t) return this[i] = void 0, void this.updateStyleEl_(); var n = parseFloat(t); isNaN(n) ? h.error('Improper value "' + t + '" supplied for for ' + e) : (this[i] = n, this .updateStyleEl_()) }, e.fluid = function (e) { var t, i = this; if (void 0 === e) return !!this.fluid_; this.fluid_ = !!e, it(this) && this.off(["playerreset", "resize"], this.boundUpdateStyleEl_), e ? (this.addClass("vjs-fluid"), this.fill(!1), t = function () { i.on(["playerreset", "resize"], i.boundUpdateStyleEl_) }, it(e = this) ? t() : (e.eventedCallbacks || (e.eventedCallbacks = []), e .eventedCallbacks.push(t))) : this.removeClass("vjs-fluid"), this.updateStyleEl_() }, e.fill = function (e) { if (void 0 === e) return !!this.fill_; this.fill_ = !!e, e ? (this.addClass("vjs-fill"), this.fluid(!1)) : this.removeClass("vjs-fill") }, e.aspectRatio = function (e) { if (void 0 === e) return this.aspectRatio_; if (!/^\d+\:\d+$/.test(e)) throw new Error( "Improper value supplied for aspect ratio. The format should be width:height, for example 16:9." ); this.aspectRatio_ = e, this.fluid(!0), this.updateStyleEl_() }, e.updateStyleEl_ = function () { var e, t, i, n; !0 !== window.VIDEOJS_NO_DYNAMIC_STYLE ? (n = (i = (void 0 !== this.aspectRatio_ && "auto" !== this.aspectRatio_ ? this.aspectRatio_ : 0 < this.videoWidth() ? this .videoWidth() + ":" + this.videoHeight() : "16:9").split(":"))[1] / i[0], e = void 0 !== this.width_ ? this.width_ : void 0 !== this.height_ ? this.height_ / n : this .videoWidth() || 300, t = void 0 !== this.height_ ? this.height_ : e * n, i = /^[^a-zA-Z]/.test(this.id()) ? "dimensions-" + this.id() : this.id() + "-dimensions", this.addClass(i), Ae(this.styleEl_, "\n ." + i + " {\n width: " + e + "px;\n height: " + t + "px;\n }\n\n ." + i + ".vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: " + 100 * n + "%;\n }\n ")) : (t = "number" == typeof this.width_ ? this.width_ : this .options_.width, i = "number" == typeof this.height_ ? this.height_ : this.options_ .height, (n = this.tech_ && this.tech_.el()) && (0 <= t && (n.width = t), 0 <= i && (n .height = i))) }, e.loadTech_ = function (e, t) { var i = this; this.tech_ && this.unloadTech_(); var n = ut(e), r = e.charAt(0).toLowerCase() + e.slice(1); "Html5" !== n && this.tag && (ji.getTech("Html5").disposeMediaElement(this.tag), this.tag .player = null, this.tag = null), this.techName_ = n, this.isReady_ = !1; var a = this.autoplay(), s = { source: t, autoplay: a = "string" == typeof this.autoplay() || !0 === this.autoplay() && this .options_.normalizeAutoplay ? !1 : a, nativeControlsForTouch: this.options_.nativeControlsForTouch, playerId: this.id(), techId: this.id() + "_" + r + "_api", playsinline: this.options_.playsinline, preload: this.options_.preload, loop: this.options_.loop, disablePictureInPicture: this.options_.disablePictureInPicture, muted: this.options_.muted, poster: this.poster(), language: this.language(), playerElIngest: this.playerElIngest_ || !1, "vtt.js": this.options_["vtt.js"], canOverridePoster: !!this.options_.techCanOverridePoster, enableSourceset: this.options_.enableSourceset, Promise: this.options_.Promise }; oi.names.forEach(function (e) { e = oi[e]; s[e.getterName] = i[e.privateName] }), b(s, this.options_[n]), b(s, this.options_[r]), b(s, this.options_[e.toLowerCase()]), this.tag && (s.tag = this.tag), t && t.src === this.cache_.src && 0 < this.cache_ .currentTime && (s.startTime = this.cache_.currentTime); e = ji.getTech(e); if (!e) throw new Error("No Tech named '" + n + "' exists! '" + n + "' should be registered using videojs.registerTech()'"); this.tech_ = new e(s), this.tech_.ready(Ve(this, this.handleTechReady_), !0), It(this .textTracksJson_ || [], this.tech_), Mn.forEach(function (t) { i.on(i.tech_, t, function (e) { return i["handleTech" + ut(t) + "_"](e) }) }), Object.keys(Rn).forEach(function (t) { i.on(i.tech_, t, function (e) { 0 === i.tech_.playbackRate() && i.tech_.seeking() ? i.queuedCallbacks_ .push({ callback: i["handleTech" + Rn[t] + "_"].bind(i), event: e }) : i["handleTech" + Rn[t] + "_"](e) }) }), this.on(this.tech_, "loadstart", function (e) { return i.handleTechLoadStart_(e) }), this.on(this.tech_, "sourceset", function (e) { return i.handleTechSourceset_(e) }), this.on(this.tech_, "waiting", function (e) { return i.handleTechWaiting_(e) }), this.on(this.tech_, "ended", function (e) { return i.handleTechEnded_(e) }), this.on(this.tech_, "seeking", function (e) { return i.handleTechSeeking_(e) }), this.on(this.tech_, "play", function (e) { return i.handleTechPlay_(e) }), this.on(this.tech_, "firstplay", function (e) { return i.handleTechFirstPlay_(e) }), this.on(this.tech_, "pause", function (e) { return i.handleTechPause_(e) }), this.on(this.tech_, "durationchange", function (e) { return i.handleTechDurationChange_(e) }), this.on(this.tech_, "fullscreenchange", function (e, t) { return i.handleTechFullscreenChange_(e, t) }), this.on(this.tech_, "fullscreenerror", function (e, t) { return i.handleTechFullscreenError_(e, t) }), this.on(this.tech_, "enterpictureinpicture", function (e) { return i.handleTechEnterPictureInPicture_(e) }), this.on(this.tech_, "leavepictureinpicture", function (e) { return i.handleTechLeavePictureInPicture_(e) }), this.on(this.tech_, "error", function (e) { return i.handleTechError_(e) }), this.on(this.tech_, "posterchange", function (e) { return i.handleTechPosterChange_(e) }), this.on(this.tech_, "textdata", function (e) { return i.handleTechTextData_(e) }), this.on(this.tech_, "ratechange", function (e) { return i.handleTechRateChange_(e) }), this.on(this.tech_, "loadedmetadata", this.boundUpdateStyleEl_), this .usingNativeControls(this.techGet_("controls")), this.controls() && !this .usingNativeControls() && this.addTechControlsListeners_(), this.tech_.el().parentNode === this.el() || "Html5" === n && this.tag || Z(this.tech_.el(), this.el()), this.tag && (this .tag.player = null, this.tag = null) }, e.unloadTech_ = function () { var t = this; oi.names.forEach(function (e) { e = oi[e]; t[e.privateName] = t[e.getterName]() }), this.textTracksJson_ = Ct(this.tech_), this.isReady_ = !1, this.tech_.dispose(), this .tech_ = !1, this.isPosterFromTech_ && (this.poster_ = "", this.trigger("posterchange")), this.isPosterFromTech_ = !1 }, e.tech = function (e) { return void 0 === e && h.warn( "Using the tech directly can be dangerous. I hope you know what you're doing.\nSee https://github.com/videojs/video.js/issues/2617 for more info.\n" ), this.tech_ }, e.addTechControlsListeners_ = function () { this.removeTechControlsListeners_(), this.on(this.tech_, "click", this.boundHandleTechClick_), this.on(this.tech_, "dblclick", this.boundHandleTechDoubleClick_), this.on(this.tech_, "touchstart", this.boundHandleTechTouchStart_), this.on(this.tech_, "touchmove", this .boundHandleTechTouchMove_), this.on(this.tech_, "touchend", this .boundHandleTechTouchEnd_), this.on(this.tech_, "tap", this.boundHandleTechTap_) }, e.removeTechControlsListeners_ = function () { this.off(this.tech_, "tap", this.boundHandleTechTap_), this.off(this.tech_, "touchstart", this .boundHandleTechTouchStart_), this.off(this.tech_, "touchmove", this .boundHandleTechTouchMove_), this.off(this.tech_, "touchend", this .boundHandleTechTouchEnd_), this.off(this.tech_, "click", this.boundHandleTechClick_), this.off(this.tech_, "dblclick", this.boundHandleTechDoubleClick_) }, e.handleTechReady_ = function () { this.triggerReady(), this.cache_.volume && this.techCall_("setVolume", this.cache_.volume), this .handleTechPosterChange_(), this.handleTechDurationChange_() }, e.handleTechLoadStart_ = function () { this.removeClass("vjs-ended"), this.removeClass("vjs-seeking"), this.error(null), this .handleTechDurationChange_(), this.paused() ? (this.hasStarted(!1), this.trigger( "loadstart")) : (this.trigger("loadstart"), this.trigger("firstplay")), this .manualAutoplay_(!0 === this.autoplay() && this.options_.normalizeAutoplay ? "play" : this .autoplay()) }, e.manualAutoplay_ = function (e) { var n = this; if (this.tech_ && "string" == typeof e) { var t, i = function () { var e = n.muted(); n.muted(!0); function t() { n.muted(e) } n.playTerminatedQueue_.push(t); var i = n.play(); if (wt(i)) return i.catch(function (e) { throw t(), new Error( "Rejection at manualAutoplay. Restoring muted value. " + ( e || "")) }) }; if ("any" !== e || this.muted() ? t = "muted" !== e || this.muted() ? this.play() : i() : wt(t = this.play()) && (t = t.catch(i)), wt(t)) return t.then(function () { n.trigger({ type: "autoplay-success", autoplay: e }) }).catch(function () { n.trigger({ type: "autoplay-failure", autoplay: e }) }) } }, e.updateSourceCaches_ = function (e) { var t = e = void 0 === e ? "" : e, i = ""; "string" != typeof t && (t = e.src, i = e.type), this.cache_.source = this.cache_.source || {}, this.cache_.sources = this.cache_.sources || [], t && !i && (i = function (e, t) { if (!t) return ""; if (e.cache_.source.src === t && e.cache_.source.type) return e.cache_.source.type; var i = e.cache_.sources.filter(function (e) { return e.src === t }); if (i.length) return i[0].type; for (var n = e.$$("source"), r = 0; r < n.length; r++) { var a = n[r]; if (a.type && a.src && a.src === t) return a.type } return $i(t) }(this, t)), this.cache_.source = lt({}, e, { src: t, type: i }); for (var i = this.cache_.sources.filter(function (e) { return e.src && e.src === t }), n = [], r = this.$$("source"), a = [], s = 0; s < r.length; s++) { var o = ae(r[s]); n.push(o), o.src && o.src === t && a.push(o.src) } a.length && !i.length ? this.cache_.sources = n : i.length || (this.cache_.sources = [this .cache_.source ]), this.cache_.src = t }, e.handleTechSourceset_ = function (e) { var t, i, n, r = this; this.changingSrc_ || (t = function (e) { return r.updateSourceCaches_(e) }, i = this.currentSource().src, n = e.src, i && !/^blob:/.test(i) && /^blob:/.test( n) && (this.lastSource_ && (this.lastSource_.tech === n || this.lastSource_.player === i) || (t = function () { })), t(n), e.src || this.tech_.any(["sourceset", "loadstart"], function (e) { "sourceset" !== e.type && (e = r.techGet("currentSrc"), r.lastSource_.tech = e, r.updateSourceCaches_(e)) })), this.lastSource_ = { player: this.currentSource().src, tech: e.src }, this.trigger({ src: e.src, type: "sourceset" }) }, e.hasStarted = function (e) { if (void 0 === e) return this.hasStarted_; e !== this.hasStarted_ && (this.hasStarted_ = e, this.hasStarted_ ? (this.addClass( "vjs-has-started"), this.trigger("firstplay")) : this.removeClass( "vjs-has-started")) }, e.handleTechPlay_ = function () { this.removeClass("vjs-ended"), this.removeClass("vjs-paused"), this.addClass("vjs-playing"), this.hasStarted(!0), this.trigger("play") }, e.handleTechRateChange_ = function () { 0 < this.tech_.playbackRate() && 0 === this.cache_.lastPlaybackRate && (this.queuedCallbacks_ .forEach(function (e) { return e.callback(e.event) }), this.queuedCallbacks_ = []), this.cache_.lastPlaybackRate = this.tech_ .playbackRate(), this.trigger("ratechange") }, e.handleTechWaiting_ = function () { var t = this; this.addClass("vjs-waiting"), this.trigger("waiting"); var i = this.currentTime(); this.on("timeupdate", function e() { i !== t.currentTime() && (t.removeClass("vjs-waiting"), t.off("timeupdate", e)) }) }, e.handleTechCanPlay_ = function () { this.removeClass("vjs-waiting"), this.trigger("canplay") }, e.handleTechCanPlayThrough_ = function () { this.removeClass("vjs-waiting"), this.trigger("canplaythrough") }, e.handleTechPlaying_ = function () { this.removeClass("vjs-waiting"), this.trigger("playing") }, e.handleTechSeeking_ = function () { this.addClass("vjs-seeking"), this.trigger("seeking") }, e.handleTechSeeked_ = function () { this.removeClass("vjs-seeking"), this.removeClass("vjs-ended"), this.trigger("seeked") }, e.handleTechFirstPlay_ = function () { this.options_.starttime && (h.warn( "Passing the `starttime` option to the player will be deprecated in 6.0"), this .currentTime(this.options_.starttime)), this.addClass("vjs-has-started"), this.trigger( "firstplay") }, e.handleTechPause_ = function () { this.removeClass("vjs-playing"), this.addClass("vjs-paused"), this.trigger("pause") }, e.handleTechEnded_ = function () { this.addClass("vjs-ended"), this.removeClass("vjs-waiting"), this.options_.loop ? (this .currentTime(0), this.play()) : this.paused() || this.pause(), this.trigger("ended") }, e.handleTechDurationChange_ = function () { this.duration(this.techGet_("duration")) }, e.handleTechClick_ = function (e) { this.controls_ && (void 0 !== this.options_ && void 0 !== this.options_.userActions && void 0 !== this.options_.userActions.click && !1 === this.options_.userActions.click || (void 0 !== this.options_ && void 0 !== this.options_.userActions && "function" == typeof this.options_.userActions.click ? this.options_.userActions.click.call(this, e) : this.paused() ? Et(this.play()) : this.pause())) }, e.handleTechDoubleClick_ = function (t) { this.controls_ && (Array.prototype.some.call(this.$$(".vjs-control-bar, .vjs-modal-dialog"), function (e) { return e.contains(t.target) }) || void 0 !== this.options_ && void 0 !== this.options_.userActions && void 0 !== this.options_.userActions.doubleClick && !1 === this.options_.userActions.doubleClick || (void 0 !== this.options_ && void 0 !== this.options_.userActions && "function" == typeof this.options_.userActions.doubleClick ? this.options_.userActions.doubleClick .call(this, t) : this.isFullscreen() ? this.exitFullscreen() : this .requestFullscreen())) }, e.handleTechTap_ = function () { this.userActive(!this.userActive()) }, e.handleTechTouchStart_ = function () { this.userWasActive = this.userActive() }, e.handleTechTouchMove_ = function () { this.userWasActive && this.reportUserActivity() }, e.handleTechTouchEnd_ = function (e) { e.cancelable && e.preventDefault() }, e.handleStageClick_ = function () { this.reportUserActivity() }, e.toggleFullscreenClass_ = function () { this.isFullscreen() ? this.addClass("vjs-fullscreen") : this.removeClass("vjs-fullscreen") }, e.documentFullscreenChange_ = function (e) { var t = e.target.player; t && t !== this || (e = this.el(), !(t = document[this.fsApi_.fullscreenElement] === e) && e .matches ? t = e.matches(":" + this.fsApi_.fullscreen) : !t && e.msMatchesSelector && ( t = e.msMatchesSelector(":" + this.fsApi_.fullscreen)), this.isFullscreen(t)) }, e.handleTechFullscreenChange_ = function (e, t) { var i = this; t && (t.nativeIOSFullscreen && (this.addClass("vjs-ios-native-fs"), this.tech_.one( "webkitendfullscreen", function () { i.removeClass("vjs-ios-native-fs") })), this.isFullscreen(t.isFullscreen)) }, e.handleTechFullscreenError_ = function (e, t) { this.trigger("fullscreenerror", t) }, e.togglePictureInPictureClass_ = function () { this.isInPictureInPicture() ? this.addClass("vjs-picture-in-picture") : this.removeClass( "vjs-picture-in-picture") }, e.handleTechEnterPictureInPicture_ = function (e) { this.isInPictureInPicture(!0) }, e.handleTechLeavePictureInPicture_ = function (e) { this.isInPictureInPicture(!1) }, e.handleTechError_ = function () { var e = this.tech_.error(); this.error(e) }, e.handleTechTextData_ = function () { this.trigger("textdata", 1 < arguments.length ? arguments[1] : null) }, e.getCache = function () { return this.cache_ }, e.resetCache_ = function () { this.cache_ = { currentTime: 0, initTime: 0, inactivityTimeout: this.options_.inactivityTimeout, duration: NaN, lastVolume: 1, lastPlaybackRate: this.defaultPlaybackRate(), media: null, src: "", source: {}, sources: [], playbackRates: [], volume: 1 } }, e.techCall_ = function (n, r) { this.ready(function () { if (n in Xi) return e = this.middleware_, t = this.tech_, i = r, t[t = n](e.reduce( Yi(t), i)); if (n in Ki) return Gi(this.middleware_, this.tech_, n, r); var e, t, i; try { this.tech_ && this.tech_[n](r) } catch (e) { throw h(e), e } }, !0) }, e.techGet_ = function (t) { if (this.tech_ && this.tech_.isReady_) { if (t in zi) return e = this.middleware_, i = this.tech_, n = t, e.reduceRight(Yi(n), i[n] ()); if (t in Ki) return Gi(this.middleware_, this.tech_, t); var e, i, n; try { return this.tech_[t]() } catch (e) { if (void 0 === this.tech_[t]) throw h("Video.js: " + t + " method not defined for " + this.techName_ + " playback technology.", e), e; if ("TypeError" === e.name) throw h("Video.js: " + t + " unavailable on " + this .techName_ + " playback technology element.", e), this.tech_.isReady_ = !1, e; throw h(e), e } } }, e.play = function () { var t = this, e = this.options_.Promise || window.Promise; return e ? new e(function (e) { t.play_(e) }) : this.play_() }, e.play_ = function (e) { var t = this; this.playCallbacks_.push(e = void 0 === e ? Et : e); e = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); if (this.waitToPlay_ && (this.off(["ready", "loadstart"], this.waitToPlay_), this.waitToPlay_ = null), !this.isReady_ || !e) return this.waitToPlay_ = function (e) { t.play_() }, this.one(["ready", "loadstart"], this.waitToPlay_), void (e || !V && !q || this .load()); e = this.techGet_("play"); null === e ? this.runPlayTerminatedQueue_() : this.runPlayCallbacks_(e) }, e.runPlayTerminatedQueue_ = function () { var e = this.playTerminatedQueue_.slice(0); this.playTerminatedQueue_ = [], e.forEach(function (e) { e() }) }, e.runPlayCallbacks_ = function (t) { var e = this.playCallbacks_.slice(0); this.playCallbacks_ = [], this.playTerminatedQueue_ = [], e.forEach(function (e) { e(t) }) }, e.pause = function () { this.techCall_("pause") }, e.paused = function () { return !1 !== this.techGet_("paused") }, e.played = function () { return this.techGet_("played") || vt(0, 0) }, e.scrubbing = function (e) { if ("undefined" == typeof e) return this.scrubbing_; this.scrubbing_ = !!e, this.techCall_("setScrubbing", this.scrubbing_), e ? this.addClass( "vjs-scrubbing") : this.removeClass("vjs-scrubbing") }, e.currentTime = function (e) { return "undefined" != typeof e ? (e < 0 && (e = 0), this.isReady_ && !this.changingSrc_ && this .tech_ && this.tech_.isReady_ ? (this.techCall_("setCurrentTime", e), void (this.cache_ .initTime = 0)) : (this.cache_.initTime = e, this.off("canplay", this .boundApplyInitTime_), void this.one("canplay", this.boundApplyInitTime_))) : (this .cache_.currentTime = this.techGet_("currentTime") || 0, this.cache_.currentTime) }, e.applyInitTime_ = function () { this.currentTime(this.cache_.initTime) }, e.duration = function (e) { if (void 0 === e) return void 0 !== this.cache_.duration ? this.cache_.duration : NaN; (e = (e = parseFloat(e)) < 0 ? 1 / 0 : e) !== this.cache_.duration && ((this.cache_.duration = e) === 1 / 0 ? this.addClass("vjs-live") : this.removeClass("vjs-live"), isNaN(e) || this.trigger("durationchange")) }, e.remainingTime = function () { return this.duration() - this.currentTime() }, e.remainingTimeDisplay = function () { return Math.floor(this.duration()) - Math.floor(this.currentTime()) }, e.buffered = function () { var e; return e = !(e = this.techGet_("buffered")) || !e.length ? vt(0, 0) : e }, e.bufferedPercent = function () { return _t(this.buffered(), this.duration()) }, e.bufferedEnd = function () { var e = this.buffered(), t = this.duration(), e = e.end(e.length - 1); return e = t < e ? t : e }, e.volume = function (e) { var t; return void 0 !== e ? (t = Math.max(0, Math.min(1, parseFloat(e))), this.cache_.volume = t, this .techCall_("setVolume", t), void (0 < t && this.lastVolume_(t))) : (t = parseFloat(this .techGet_("volume")), isNaN(t) ? 1 : t) }, e.muted = function (e) { if (void 0 === e) return this.techGet_("muted") || !1; this.techCall_("setMuted", e) }, e.defaultMuted = function (e) { return void 0 !== e ? this.techCall_("setDefaultMuted", e) : this.techGet_("defaultMuted") || !1 }, e.lastVolume_ = function (e) { if (void 0 === e || 0 === e) return this.cache_.lastVolume; this.cache_.lastVolume = e }, e.supportsFullScreen = function () { return this.techGet_("supportsFullScreen") || !1 }, e.isFullscreen = function (e) { if (void 0 === e) return this.isFullscreen_; var t = this.isFullscreen_; this.isFullscreen_ = Boolean(e), this.isFullscreen_ !== t && this.fsApi_.prefixed && this .trigger("fullscreenchange"), this.toggleFullscreenClass_() }, e.requestFullscreen = function (s) { var e = this.options_.Promise || window.Promise; if (e) { var o = this; return new e(function (e, i) { function n() { o.off("fullscreenerror", r), o.off("fullscreenchange", t) } function t() { n(), e() } function r(e, t) { n(), i(t) } o.one("fullscreenchange", t), o.one("fullscreenerror", r); var a = o.requestFullscreenHelper_(s); a && (a.then(n, n), a.then(e, i)) }) } return this.requestFullscreenHelper_() }, e.requestFullscreenHelper_ = function (e) { var t = this; if (this.fsApi_.prefixed || (i = this.options_.fullscreen && this.options_.fullscreen.options || {}, void 0 !== e && (i = e)), this.fsApi_.requestFullscreen) { var i = this.el_[this.fsApi_.requestFullscreen](i); return i && i.then(function () { return t.isFullscreen(!0) }, function () { return t.isFullscreen(!1) }), i } this.tech_.supportsFullScreen() && !0 == !this.options_.preferFullWindow ? this.techCall_( "enterFullScreen") : this.enterFullWindow() }, e.exitFullscreen = function () { var e = this.options_.Promise || window.Promise; if (e) { var s = this; return new e(function (e, i) { function n() { s.off("fullscreenerror", r), s.off("fullscreenchange", t) } function t() { n(), e() } function r(e, t) { n(), i(t) } s.one("fullscreenchange", t), s.one("fullscreenerror", r); var a = s.exitFullscreenHelper_(); a && (a.then(n, n), a.then(e, i)) }) } return this.exitFullscreenHelper_() }, e.exitFullscreenHelper_ = function () { var e = this; if (this.fsApi_.requestFullscreen) { var t = document[this.fsApi_.exitFullscreen](); return t && Et(t.then(function () { return e.isFullscreen(!1) })), t } this.tech_.supportsFullScreen() && !0 == !this.options_.preferFullWindow ? this.techCall_( "exitFullScreen") : this.exitFullWindow() }, e.enterFullWindow = function () { this.isFullscreen(!0), this.isFullWindow = !0, this.docOrigOverflow = document.documentElement .style.overflow, Be(document, "keydown", this.boundFullWindowOnEscKey_), document .documentElement.style.overflow = "hidden", te(document.body, "vjs-full-window"), this .trigger("enterFullWindow") }, e.fullWindowOnEscKey = function (e) { ht.isEventKey(e, "Esc") && !0 === this.isFullscreen() && (this.isFullWindow ? this .exitFullWindow() : this.exitFullscreen()) }, e.exitFullWindow = function () { this.isFullscreen(!1), this.isFullWindow = !1, Fe(document, "keydown", this .boundFullWindowOnEscKey_), document.documentElement.style.overflow = this .docOrigOverflow, ie(document.body, "vjs-full-window"), this.trigger("exitFullWindow") }, e.disablePictureInPicture = function (e) { if (void 0 === e) return this.techGet_("disablePictureInPicture"); this.techCall_("setDisablePictureInPicture", e), this.options_.disablePictureInPicture = e, this .trigger("disablepictureinpicturechanged") }, e.isInPictureInPicture = function (e) { return void 0 !== e ? (this.isInPictureInPicture_ = !!e, void this .togglePictureInPictureClass_()) : !!this.isInPictureInPicture_ }, e.requestPictureInPicture = function () { if ("pictureInPictureEnabled" in document && !1 === this.disablePictureInPicture()) return this .techGet_("requestPictureInPicture") }, e.exitPictureInPicture = function () { if ("pictureInPictureEnabled" in document) return document.exitPictureInPicture() }, e.handleKeyDown = function (e) { var t = this.options_.userActions; t && t.hotkeys && (function (e) { var t = e.tagName.toLowerCase(); if (e.isContentEditable) return !0; if ("input" === t) return -1 === ["button", "checkbox", "hidden", "radio", "reset", "submit" ].indexOf(e.type); return -1 !== ["textarea"].indexOf(t) }(this.el_.ownerDocument.activeElement) || ("function" == typeof t.hotkeys ? t.hotkeys .call(this, e) : this.handleHotkeys(e))) }, e.handleHotkeys = function (e) { var t = this.options_.userActions ? this.options_.userActions.hotkeys : {}, i = t.fullscreenKey, n = t.muteKey, n = void 0 === n ? function (e) { return ht.isEventKey(e, "m") } : n, t = t.playPauseKey, t = void 0 === t ? function (e) { return ht.isEventKey(e, "k") || ht.isEventKey(e, "Space") } : t; (void 0 === i ? function (e) { return ht.isEventKey(e, "f") } : i).call(this, e) ? (e.preventDefault(), e.stopPropagation(), i = pt.getComponent( "FullscreenToggle"), !1 !== document[this.fsApi_.fullscreenEnabled] && i.prototype .handleClick.call(this, e)) : n.call(this, e) ? (e.preventDefault(), e .stopPropagation(), pt.getComponent("MuteToggle").prototype.handleClick.call(this, e)) : t .call(this, e) && (e.preventDefault(), e.stopPropagation(), pt.getComponent("PlayToggle") .prototype.handleClick.call(this, e)) }, e.canPlayType = function (e) { for (var t, i = 0, n = this.options_.techOrder; i < n.length; i++) { var r = n[i], a = ji.getTech(r); if (a = a || pt.getComponent(r)) { if (a.isSupported() && (t = a.canPlayType(e))) return t } else h.error('The "' + r + '" tech is undefined. Skipped browser support check for that tech.') } return "" }, e.selectSource = function (e) { function t(e, i, n) { var r; return e.some(function (t) { return i.some(function (e) { if (r = n(t, e)) return !0 }) }), r } var i, n = this, r = this.options_.techOrder.map(function (e) { return [e, ji.getTech(e)] }).filter(function (e) { var t = e[0], e = e[1]; return e ? e.isSupported() : (h.error('The "' + t + '" tech is undefined. Skipped browser support check for that tech.'), ! 1) }), a = function (e, t) { var i = e[0]; if (e[1].canPlaySource(t, n.options_[i.toLowerCase()])) return { source: t, tech: i } }, a = this.options_.sourceOrder ? t(e, r, (i = a, function (e, t) { return i(t, e) })) : t(r, e, a); return a || !1 }, e.handleSrc_ = function (e, n) { var r = this; if ("undefined" == typeof e) return this.cache_.src || ""; this.resetRetryOnError_ && this.resetRetryOnError_(); var t, i, a = Ji(e); a.length ? (this.changingSrc_ = !0, n || (this.cache_.sources = a), this.updateSourceCaches_(a[ 0]), Wi(this, a[0], function (e, t) { var i; return r.middleware_ = t, n || (r.cache_.sources = a), r.updateSourceCaches_(e), r.src_(e) ? 1 < a.length ? r.handleSrc_(a.slice(1)) : (r.changingSrc_ = !1, r.setTimeout(function () { this.error({ code: 4, message: this.localize(this.options_ .notSupportedMessage) }) }, 0), void r.triggerReady()) : (t = t, i = r.tech_, void t.forEach( function (e) { return e.setTech && e.setTech(i) })) }), this.options_.retryOnError && 1 < a.length && (i = function () { r.off("error", t) }, this.one("error", t = function () { r.error(null), r.handleSrc_(a.slice(1), !0) }), this.one("playing", i), this.resetRetryOnError_ = function () { r.off("error", t), r.off("playing", i) })) : this.setTimeout(function () { this.error({ code: 4, message: this.localize(this.options_.notSupportedMessage) }) }, 0) }, e.src = function (e) { return this.handleSrc_(e, !1) }, e.src_ = function (e) { var t, i, n = this, r = this.selectSource([e]); return !r || (t = r.tech, i = this.techName_, ut(t) !== ut(i) ? (this.changingSrc_ = !0, this .loadTech_(r.tech, r.source), this.tech_.ready(function () { n.changingSrc_ = !1 })) : this.ready(function () { this.tech_.constructor.prototype.hasOwnProperty("setSource") ? this.techCall_( "setSource", e) : this.techCall_("src", e.src), this.changingSrc_ = !1 }, !0), !1) }, e.load = function () { this.techCall_("load") }, e.reset = function () { var e = this, t = this.options_.Promise || window.Promise; this.paused() || !t ? this.doReset_() : Et(this.play().then(function () { return e.doReset_() })) }, e.doReset_ = function () { this.tech_ && this.tech_.clearTracks("text"), this.resetCache_(), this.poster(""), this .loadTech_(this.options_.techOrder[0], null), this.techCall_("reset"), this .resetControlBarUI_(), it(this) && this.trigger("playerreset") }, e.resetControlBarUI_ = function () { this.resetProgressBar_(), this.resetPlaybackRate_(), this.resetVolumeBar_() }, e.resetProgressBar_ = function () { this.currentTime(0); var e = this.controlBar, t = e.durationDisplay, e = e.remainingTimeDisplay; t && t.updateContent(), e && e.updateContent() }, e.resetPlaybackRate_ = function () { this.playbackRate(this.defaultPlaybackRate()), this.handleTechRateChange_() }, e.resetVolumeBar_ = function () { this.volume(1), this.trigger("volumechange") }, e.currentSources = function () { var e = this.currentSource(), t = []; return 0 !== Object.keys(e).length && t.push(e), this.cache_.sources || t }, e.currentSource = function () { return this.cache_.source || {} }, e.currentSrc = function () { return this.currentSource() && this.currentSource().src || "" }, e.currentType = function () { return this.currentSource() && this.currentSource().type || "" }, e.preload = function (e) { return void 0 !== e ? (this.techCall_("setPreload", e), void (this.options_.preload = e)) : this .techGet_("preload") }, e.autoplay = function (e) { if (void 0 === e) return this.options_.autoplay || !1; var t; "string" == typeof e && /(any|play|muted)/.test(e) || !0 === e && this.options_ .normalizeAutoplay ? (this.options_.autoplay = e, this.manualAutoplay_("string" == typeof e ? e : "play"), t = !1) : this.options_.autoplay = !!e, t = "undefined" == typeof t ? this.options_.autoplay : t, this.tech_ && this.techCall_("setAutoplay", t) }, e.playsinline = function (e) { return void 0 !== e ? (this.techCall_("setPlaysinline", e), this.options_.playsinline = e, this) : this.techGet_("playsinline") }, e.loop = function (e) { return void 0 !== e ? (this.techCall_("setLoop", e), void (this.options_.loop = e)) : this .techGet_("loop") }, e.poster = function (e) { if (void 0 === e) return this.poster_; (e = e || "") !== this.poster_ && (this.poster_ = e, this.techCall_("setPoster", e), this .isPosterFromTech_ = !1, this.trigger("posterchange")) }, e.handleTechPosterChange_ = function () { var e; this.poster_ && !this.options_.techCanOverridePoster || !this.tech_ || !this.tech_.poster || ( e = this.tech_.poster() || "") !== this.poster_ && (this.poster_ = e, this .isPosterFromTech_ = !0, this.trigger("posterchange")) }, e.controls = function (e) { if (void 0 === e) return !!this.controls_; this.controls_ !== (e = !!e) && (this.controls_ = e, this.usingNativeControls() && this .techCall_("setControls", e), this.controls_ ? (this.removeClass( "vjs-controls-disabled"), this.addClass("vjs-controls-enabled"), this.trigger( "controlsenabled"), this.usingNativeControls() || this .addTechControlsListeners_()) : (this.removeClass("vjs-controls-enabled"), this .addClass("vjs-controls-disabled"), this.trigger("controlsdisabled"), this .usingNativeControls() || this.removeTechControlsListeners_())) }, e.usingNativeControls = function (e) { if (void 0 === e) return !!this.usingNativeControls_; this.usingNativeControls_ !== (e = !!e) && (this.usingNativeControls_ = e, this .usingNativeControls_ ? (this.addClass("vjs-using-native-controls"), this.trigger( "usingnativecontrols")) : (this.removeClass("vjs-using-native-controls"), this .trigger("usingcustomcontrols"))) }, e.error = function (t) { var i = this; if (void 0 === t) return this.error_ || null; if (a("beforeerror").forEach(function (e) { e = e(i, t); T(e) && !Array.isArray(e) || "string" == typeof e || "number" == typeof e || null === e ? t = e : i.log.error( "please return a value that MediaError expects in beforeerror hooks") }), this.options_.suppressNotSupportedError && t && 4 === t.code) { var e = function () { this.error(t) }; return this.options_.suppressNotSupportedError = !1, this.any(["click", "touchstart"], e), void this.one("loadstart", function () { this.off(["click", "touchstart"], e) }) } if (null === t) return this.error_ = t, this.removeClass("vjs-error"), void (this.errorDisplay && this.errorDisplay.close()); this.error_ = new bt(t), this.addClass("vjs-error"), h.error("(CODE:" + this.error_.code + " " + bt.errorTypes[this.error_.code] + ")", this.error_.message, this.error_), this.trigger( "error"), a("error").forEach(function (e) { return e(i, i.error_) }) }, e.reportUserActivity = function (e) { this.userActivity_ = !0 }, e.userActive = function (e) { if (void 0 === e) return this.userActive_; if ((e = !!e) !== this.userActive_) { if (this.userActive_ = e, this.userActive_) return this.userActivity_ = !0, this .removeClass("vjs-user-inactive"), this.addClass("vjs-user-active"), void this .trigger("useractive"); this.tech_ && this.tech_.one("mousemove", function (e) { e.stopPropagation(), e.preventDefault() }), this.userActivity_ = !1, this.removeClass("vjs-user-active"), this.addClass( "vjs-user-inactive"), this.trigger("userinactive") } }, e.listenForUserActivity_ = function () { var t, i, n, r = Ve(this, this.reportUserActivity), e = function (e) { r(), this.clearInterval(t) }; this.on("mousedown", function () { r(), this.clearInterval(t), t = this.setInterval(r, 250) }), this.on("mousemove", function (e) { e.screenX === i && e.screenY === n || (i = e.screenX, n = e.screenY, r()) }), this.on("mouseup", e), this.on("mouseleave", e); var a, e = this.getChild("controlBar"); !e || q || A || (e.on("mouseenter", function (e) { 0 !== this.player().options_.inactivityTimeout && (this.player().cache_ .inactivityTimeout = this.player().options_.inactivityTimeout), this .player().options_.inactivityTimeout = 0 }), e.on("mouseleave", function (e) { this.player().options_.inactivityTimeout = this.player().cache_ .inactivityTimeout })), this.on("keydown", r), this.on("keyup", r), this.setInterval(function () { var e; this.userActivity_ && (this.userActivity_ = !1, this.userActive(!0), this .clearTimeout(a), (e = this.options_.inactivityTimeout) <= 0 || (a = this .setTimeout(function () { this.userActivity_ || this.userActive(!1) }, e))) }, 250) }, e.playbackRate = function (e) { if (void 0 === e) return this.tech_ && this.tech_.featuresPlaybackRate ? this.cache_ .lastPlaybackRate || this.techGet_("playbackRate") : 1; this.techCall_("setPlaybackRate", e) }, e.defaultPlaybackRate = function (e) { return void 0 !== e ? this.techCall_("setDefaultPlaybackRate", e) : this.tech_ && this.tech_ .featuresPlaybackRate ? this.techGet_("defaultPlaybackRate") : 1 }, e.isAudio = function (e) { if (void 0 === e) return !!this.isAudio_; this.isAudio_ = !!e }, e.enableAudioOnlyUI_ = function () { var t = this; this.addClass("vjs-audio-only-mode"); var e = this.children(), i = this.getChild("ControlBar"), n = i && i.currentHeight(); e.forEach(function (e) { e !== i && e.el_ && !e.hasClass("vjs-hidden") && (e.hide(), t.audioOnlyCache_ .hiddenChildren.push(e)) }), this.audioOnlyCache_.playerHeight = this.currentHeight(), this.height(n), this.trigger( "audioonlymodechange") }, e.disableAudioOnlyUI_ = function () { this.removeClass("vjs-audio-only-mode"), this.audioOnlyCache_.hiddenChildren.forEach(function ( e) { return e.show() }), this.height(this.audioOnlyCache_.playerHeight), this.trigger("audioonlymodechange") }, e.audioOnlyMode = function (e) { var t = this; if ("boolean" != typeof e || e === this.audioOnlyMode_) return this.audioOnlyMode_; this.audioOnlyMode_ = e; var i = this.options_.Promise || window.Promise; if (i) { if (e) { var n = []; return this.isInPictureInPicture() && n.push(this.exitPictureInPicture()), this .isFullscreen() && n.push(this.exitFullscreen()), this.audioPosterMode() && n.push( this.audioPosterMode(!1)), i.all(n).then(function () { return t.enableAudioOnlyUI_() }) } return i.resolve().then(function () { return t.disableAudioOnlyUI_() }) } e ? (this.isInPictureInPicture() && this.exitPictureInPicture(), this.isFullscreen() && this .exitFullscreen(), this.enableAudioOnlyUI_()) : this.disableAudioOnlyUI_() }, e.enablePosterModeUI_ = function () { (this.tech_ && this.tech_).hide(), this.addClass("vjs-audio-poster-mode"), this.trigger( "audiopostermodechange") }, e.disablePosterModeUI_ = function () { (this.tech_ && this.tech_).show(), this.removeClass("vjs-audio-poster-mode"), this.trigger( "audiopostermodechange") }, e.audioPosterMode = function (e) { var t = this; if ("boolean" != typeof e || e === this.audioPosterMode_) return this.audioPosterMode_; this.audioPosterMode_ = e; var i = this.options_.Promise || window.Promise; return i ? e ? (this.audioOnlyMode() ? this.audioOnlyMode(!1) : i.resolve()).then(function () { t.enablePosterModeUI_() }) : i.resolve().then(function () { t.disablePosterModeUI_() }) : e ? (this.audioOnlyMode() && this.audioOnlyMode(!1), void this.enablePosterModeUI_()) : void this.disablePosterModeUI_() }, e.addTextTrack = function (e, t, i) { if (this.tech_) return this.tech_.addTextTrack(e, t, i) }, e.addRemoteTextTrack = function (e, t) { if (this.tech_) return this.tech_.addRemoteTextTrack(e, t) }, e.removeRemoteTextTrack = function (e) { var t = (t = (e = void 0 === e ? {} : e).track) || e; if (this.tech_) return this.tech_.removeRemoteTextTrack(t) }, e.getVideoPlaybackQuality = function () { return this.techGet_("getVideoPlaybackQuality") }, e.videoWidth = function () { return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0 }, e.videoHeight = function () { return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0 }, e.language = function (e) { if (void 0 === e) return this.language_; this.language_ !== String(e).toLowerCase() && (this.language_ = String(e).toLowerCase(), it( this) && this.trigger("languagechange")) }, e.languages = function () { return lt(o.prototype.options_.languages, this.languages_) }, e.toJSON = function () { var e = lt(this.options_), t = e.tracks; e.tracks = []; for (var i = 0; i < t.length; i++) { var n = t[i]; (n = lt(n)).player = void 0, e.tracks[i] = n } return e }, e.createModal = function (e, t) { var i = this; (t = t || {}).content = e || ""; var n = new At(this, t); return this.addChild(n), n.on("dispose", function () { i.removeChild(n) }), n.open(), n }, e.updateCurrentBreakpoint_ = function () { if (this.responsive()) for (var e = this.currentBreakpoint(), t = this.currentWidth(), i = 0; i < Nn.length; i++) { var n = Nn[i]; if (t <= this.breakpoints_[n]) { if (e === n) return; e && this.removeClass(Un[e]), this.addClass(Un[n]), this.breakpoint_ = n; break } } }, e.removeCurrentBreakpoint_ = function () { var e = this.currentBreakpointClass(); this.breakpoint_ = "", e && this.removeClass(e) }, e.breakpoints = function (e) { return void 0 === e || (this.breakpoint_ = "", this.breakpoints_ = b({}, Bn, e), this .updateCurrentBreakpoint_()), b(this.breakpoints_) }, e.responsive = function (e) { return void 0 === e ? this.responsive_ : (e = Boolean(e)) !== this.responsive_ ? ((this .responsive_ = e) ? (this.on("playerresize", this.boundUpdateCurrentBreakpoint_), this.updateCurrentBreakpoint_()) : (this.off("playerresize", this .boundUpdateCurrentBreakpoint_), this.removeCurrentBreakpoint_()), e) : void 0 }, e.currentBreakpoint = function () { return this.breakpoint_ }, e.currentBreakpointClass = function () { return Un[this.breakpoint_] || "" }, e.loadMedia = function (e, t) { var i, n, r, a = this; e && "object" == typeof e && (this.reset(), this.cache_.media = lt(e), i = (r = this.cache_ .media).artwork, n = r.poster, e = r.src, r = r.textTracks, !i && n && (this.cache_ .media.artwork = [{ src: n, type: $i(n) }]), e && this.src(e), n && this.poster(n), Array.isArray(r) && r.forEach(function ( e) { return a.addRemoteTextTrack(e, !1) }), this.ready(t)) }, e.getMedia = function () { if (this.cache_.media) return lt(this.cache_.media); var e = this.poster(), t = { src: this.currentSources(), textTracks: Array.prototype.map.call(this.remoteTextTracks(), function (e) { return { kind: e.kind, label: e.label, language: e.language, src: e.src } }) }; return e && (t.poster = e, t.artwork = [{ src: t.poster, type: $i(t.poster) }]), t }, o.getTagSettings = function (e) { var t, i = { sources: [], tracks: [] }, n = ae(e), r = n["data-setup"]; if (ee(e, "vjs-fill") && (n.fill = !0), ee(e, "vjs-fluid") && (n.fluid = !0), null !== r && (r = (t = St(r || "{}"))[0], t = t[1], r && h.error(r), b(n, t)), b(i, n), e.hasChildNodes()) for (var a = e.childNodes, s = 0, o = a.length; s < o; s++) { var u = a[s], l = u.nodeName.toLowerCase(); "source" === l ? i.sources.push(ae(u)) : "track" === l && i.tracks.push(ae(u)) } return i }, e.flexNotSupported_ = function () { var e = document.createElement("i"); return !("flexBasis" in e.style || "webkitFlexBasis" in e.style || "mozFlexBasis" in e.style || "msFlexBasis" in e.style || "msFlexOrder" in e.style) }, e.debug = function (e) { if (void 0 === e) return this.debugEnabled_; e ? (this.trigger("debugon"), this.previousLogLevel_ = this.log.level, this.log.level("debug"), this.debugEnabled_ = !0) : (this.trigger("debugoff"), this.log.level(this .previousLogLevel_), this.previousLogLevel_ = void 0, this.debugEnabled_ = !1) }, e.playbackRates = function (e) { if (void 0 === e) return this.cache_.playbackRates; Array.isArray(e) && e.every(function (e) { return "number" == typeof e }) && (this.cache_.playbackRates = e, this.trigger("playbackrateschange")) }, o }(pt); oi.names.forEach(function (e) { var t = oi[e]; Fn.prototype[t.getterName] = function () { return this.tech_ ? this.tech_[t.getterName]() : (this[t.privateName] = this[t .privateName] || new t.ListClass, this[t.privateName]) } }), Fn.prototype.crossorigin = Fn.prototype.crossOrigin, Fn.players = {}; k = window.navigator; Fn.prototype.options_ = { techOrder: ji.defaultTechOrder_, html5: {}, inactivityTimeout: 2e3, playbackRates: [], liveui: !1, children: ["mediaLoader", "posterImage", "textTrackDisplay", "loadingSpinner", "bigPlayButton", "liveTracker", "controlBar", "errorDisplay", "textTrackSettings", "resizeManager" ], language: k && (k.languages && k.languages[0] || k.userLanguage || k.language) || "en", languages: {}, notSupportedMessage: "No compatible source was found for this media.", normalizeAutoplay: !1, fullscreen: { options: { navigationUI: "hide" } }, breakpoints: {}, responsive: !1, audioOnlyMode: !1, audioPosterMode: !1 }, ["ended", "seeking", "seekable", "networkState", "readyState"].forEach(function (e) { Fn.prototype[e] = function () { return this.techGet_(e) } }), Mn.forEach(function (e) { Fn.prototype["handleTech" + ut(e) + "_"] = function () { return this.trigger(e) } }), pt.registerComponent("Player", Fn); var jn = m(function (i) { function n(e, t) { return i.exports = n = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e }, n(e, t) } i.exports = n }); function Hn(e) { return Qn.hasOwnProperty(e) } function qn(e) { return Hn(e) ? Qn[e] : void 0 } function Vn(e, t, i) { i = (i ? "before" : "") + "pluginsetup", e.trigger(i, t), e.trigger(i + ":" + t.name, t) } function Wn(t, i) { function n() { Vn(this, { name: t, plugin: i, instance: null }, !0); var e = i.apply(this, arguments); return $n(this, t), Vn(this, { name: t, plugin: i, instance: e }), e } return Object.keys(i).forEach(function (e) { n[e] = i[e] }), n } function Gn(r, a) { return a.prototype.name = r, function () { Vn(this, { name: r, plugin: a, instance: null }, !0); for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; var n = Xn(a, [this].concat(t)); return this[r] = function () { return n }, Vn(this, n.getEventHash()), n } } var zn = function () { if ("undefined" == typeof Reflect || !Reflect.construct) return !1; if (Reflect.construct.sham) return !1; if ("function" == typeof Proxy) return !0; try { return Date.prototype.toString.call(Reflect.construct(Date, [], function () { })), !0 } catch (e) { return !1 } }, Xn = m(function (n) { function r(e, t, i) { return zn() ? n.exports = r = Reflect.construct : n.exports = r = function (e, t, i) { var n = [null]; n.push.apply(n, t); n = new (Function.bind.apply(e, n)); return i && jn(n, i.prototype), n }, r.apply(null, arguments) } n.exports = r }), Kn = "plugin", Yn = "activePlugins_", Qn = {}, $n = function (e, t) { e[Yn] = e[Yn] || {}, e[Yn][t] = !0 }, Jn = function () { function i(e) { if (this.constructor === i) throw new Error( "Plugin must be sub-classed; not directly instantiated."); this.player = e, this.log || (this.log = this.player.log.createLogger(this.name)), rt(this), delete this.trigger, st(this, this.constructor.defaultState), $n(e, this.name), this.dispose = this.dispose.bind(this), e.on("dispose", this.dispose) } var e = i.prototype; return e.version = function () { return this.constructor.VERSION }, e.getEventHash = function (e) { return (e = void 0 === e ? {} : e).name = this.name, e.plugin = this.constructor, e.instance = this, e }, e.trigger = function (e, t) { return je(this.eventBusEl_, e, this.getEventHash(t = void 0 === t ? {} : t)) }, e.handleStateChanged = function (e) { }, e.dispose = function () { var e = this.name, t = this.player; this.trigger("dispose"), this.off(), t.off("dispose", this.dispose), t[Yn][e] = !1, this .player = this.state = null, t[e] = Gn(e, Qn[e]) }, i.isBasic = function (e) { e = "string" == typeof e ? qn(e) : e; return "function" == typeof e && !i.prototype.isPrototypeOf(e.prototype) }, i.registerPlugin = function (e, t) { if ("string" != typeof e) throw new Error('Illegal plugin name, "' + e + '", must be a string, was ' + typeof e + "."); if (Hn(e)) h.warn('A plugin named "' + e + '" already exists. You may want to avoid re-registering plugins!'); else if (Fn.prototype.hasOwnProperty(e)) throw new Error('Illegal plugin name, "' + e + '", cannot share a name with an existing player method!'); if ("function" != typeof t) throw new Error('Illegal plugin for "' + e + '", must be a function, was ' + typeof t + "."); return Qn[e] = t, e !== Kn && (i.isBasic(t) ? Fn.prototype[e] = Wn(e, t) : Fn.prototype[e] = Gn( e, t)), t }, i.deregisterPlugin = function (e) { if (e === Kn) throw new Error("Cannot de-register base plugin."); Hn(e) && (delete Qn[e], delete Fn.prototype[e]) }, i.getPlugins = function (e) { var i; return (e = void 0 === e ? Object.keys(Qn) : e).forEach(function (e) { var t = qn(e); t && ((i = i || {})[e] = t) }), i }, i.getPluginVersion = function (e) { e = qn(e); return e && e.VERSION || "" }, i }(); Jn.getPlugin = qn, Jn.BASE_PLUGIN_NAME = Kn, Jn.registerPlugin(Kn, Jn), Fn.prototype.usingPlugin = function (e) { return !!this[Yn] && !0 === this[Yn][e] }, Fn.prototype.hasPlugin = function (e) { return !!Hn(e) }; var Zn = function (e, t) { if ("function" != typeof t && null !== t) throw new TypeError( "Super expression must either be null or a function"); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } }), t && jn(e, t) }, er = function (e) { return 0 === e.indexOf("#") ? e.slice(1) : e }; function tr(e, t, i) { if (r = tr.getPlayer(e)) return t && h.warn('Player "' + e + '" is already initialised. Options will not be applied.'), i && r.ready(i), r; var n = "string" == typeof e ? Te("#" + er(e)) : e; if (!K(n)) throw new TypeError("The element or ID supplied is not valid. (videojs)"); n.ownerDocument.defaultView && n.ownerDocument.body.contains(n) || h.warn( "The element supplied is not included in the DOM"), t = t || {}, a("beforesetup").forEach(function ( e) { e = e(n, lt(t)); T(e) && !Array.isArray(e) ? t = lt(t, e) : h.error( "please return an object in beforesetup hooks") }); var r = new (pt.getComponent("Player"))(n, t, i); return a("setup").forEach(function (e) { return e(r) }), r } tr.hooks_ = i, tr.hooks = a, tr.hook = function (e, t) { a(e, t) }, tr.hookOnce = function (i, e) { a(i, [].concat(e).map(function (t) { return function e() { return n(i, e), t.apply(void 0, arguments) } })) }, tr.removeHook = n, !0 !== window.VIDEOJS_NO_DYNAMIC_STYLE && X() && ((ar = Te(".vjs-styles-defaults")) || (ar = xe("vjs-styles-defaults"), (k = Te("head")) && k.insertBefore(ar, k.firstChild), Ae(ar, "\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: 56.25%\n }\n " ))), Ce(1, tr), tr.VERSION = u, tr.options = Fn.prototype.options_, tr.getPlayers = function () { return Fn.players }, tr.getPlayer = function (e) { var t = Fn.players; if ("string" == typeof e) { var i = er(e), n = t[i]; if (n) return n; i = Te("#" + i) } else i = e; if (K(i)) { e = i.player, i = i.playerId; if (e || t[i]) return e || t[i] } }, tr.getAllPlayers = function () { return Object.keys(Fn.players).map(function (e) { return Fn.players[e] }).filter(Boolean) }, tr.players = Fn.players, tr.getComponent = pt.getComponent, tr.registerComponent = function (e, t) { ji.isTech(t) && h.warn("The " + e + " tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)" ), pt.registerComponent.call(pt, e, t) }, tr.getTech = ji.getTech, tr.registerTech = ji.registerTech, tr.use = function (e, t) { Hi[e] = Hi[e] || [], Hi[e].push(t) }, Object.defineProperty(tr, "middleware", { value: {}, writeable: !1, enumerable: !0 }), Object.defineProperty(tr.middleware, "TERMINATOR", { value: Vi, writeable: !1, enumerable: !0 }), tr.browser = W, tr.TOUCH_ENABLED = F, tr.extend = function (e, t) { var i, n = function () { e.apply(this, arguments) }, r = {}; for (i in "object" == typeof (t = void 0 === t ? {} : t) ? (t.constructor !== Object.prototype .constructor && (n = t.constructor), r = t) : "function" == typeof t && (n = t), Zn(n, e), e && (n.super_ = e), r) r.hasOwnProperty(i) && (n.prototype[i] = r[i]); return n }, tr.mergeOptions = lt, tr.bind = Ve, tr.registerPlugin = Jn.registerPlugin, tr.deregisterPlugin = Jn .deregisterPlugin, tr.plugin = function (e, t) { return h.warn("videojs.plugin() is deprecated; use videojs.registerPlugin() instead"), Jn .registerPlugin(e, t) }, tr.getPlugins = Jn.getPlugins, tr.getPlugin = Jn.getPlugin, tr.getPluginVersion = Jn.getPluginVersion, tr .addLanguage = function (e, t) { var i; return e = ("" + e).toLowerCase(), tr.options.languages = lt(tr.options.languages, ((i = {})[e] = t, i)), tr.options.languages[e] }, tr.log = h, tr.createLogger = p, tr.createTimeRange = tr.createTimeRanges = vt, tr.formatTime = ln, tr .setFormatTime = function (e) { un = e }, tr.resetFormatTime = function () { un = on }, tr.parseUrl = Mt, tr.isCrossOrigin = Ut, tr.EventTarget = ze, tr.on = Be, tr.one = He, tr.off = Fe, tr .trigger = je, tr.xhr = Jt, tr.TextTrack = ri, tr.AudioTrack = x, tr.VideoTrack = U, ["isEl", "isTextNode", "createEl", "hasClass", "addClass", "removeClass", "toggleClass", "setAttributes", "getAttributes", "emptyEl", "appendContent", "insertContent" ].forEach(function (e) { tr[e] = function () { return h.warn("videojs." + e + "() is deprecated; use videojs.dom." + e + "() instead"), we[ e].apply(null, arguments) } }), tr.computedStyle = w, tr.dom = we, tr.url = zt, tr.defineLazyProperty = An, tr.addLanguage("en", { "Non-Fullscreen": "Exit Fullscreen" }); function ir(e, t) { if (/^[a-z]+:/i.test(t)) return t; /^data:/.test(e) && (e = window.location && window.location.href || ""); var i = "function" == typeof window.URL, n = /^\/\//.test(e), r = !window.location && !/\/\//i.test(e); if (i ? e = new window.URL(e, window.location || rr) : /\/\//i.test(e) || (e = nr.buildAbsoluteURL(window .location && window.location.href || "", e)), i) { i = new URL(t, e); return r ? i.href.slice(rr.length) : n ? i.href.slice(i.protocol.length) : i.href } return nr.buildAbsoluteURL(e, t) } var nr = m(function (e, t) { var i, a, n, r, s; i = /^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/?#]*)?((?:[^\/?#]*\/)*[^;?#]*)?(;[^?#]*)?(\?[^#]*)?(#[^]*)?$/, a = /^([^\/?#]*)([^]*)$/, n = /(?:\/|^)\.(?=\/)/g, r = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g, s = { buildAbsoluteURL: function (e, t, i) { if (i = i || {}, e = e.trim(), !(t = t.trim())) { if (!i.alwaysNormalize) return e; var n = s.parseURL(e); if (!n) throw new Error("Error trying to parse base URL."); return n.path = s.normalizePath(n.path), s.buildURLFromParts(n) } n = s.parseURL(t); if (!n) throw new Error("Error trying to parse relative URL."); if (n.scheme) return i.alwaysNormalize ? (n.path = s.normalizePath(n.path), s .buildURLFromParts(n)) : t; t = s.parseURL(e); if (!t) throw new Error("Error trying to parse base URL."); !t.netLoc && t.path && "/" !== t.path[0] && (r = a.exec(t.path), t.netLoc = r[1], t .path = r[2]), t.netLoc && !t.path && (t.path = "/"); var r, e = { scheme: t.scheme, netLoc: n.netLoc, path: null, params: n.params, query: n.query, fragment: n.fragment }; return n.netLoc || (e.netLoc = t.netLoc, "/" !== n.path[0] && (n.path ? (r = (r = t .path).substring(0, r.lastIndexOf("/") + 1) + n.path, e.path = s .normalizePath(r)) : (e.path = t.path, n.params || (e.params = t .params, n.query || (e.query = t.query))))), null === e.path && (e.path = i .alwaysNormalize ? s.normalizePath(n.path) : n.path), s.buildURLFromParts(e) }, parseURL: function (e) { e = i.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(n, ""); e.length !== (e = e.replace( r, "")).length;) ; return e.split("").reverse().join("") }, buildURLFromParts: function (e) { return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment } }, e.exports = s }), rr = "http://example.com", ar = function () { function e() { this.listeners = {} } var t = e.prototype; return t.on = function (e, t) { this.listeners[e] || (this.listeners[e] = []), this.listeners[e].push(t) }, t.off = function (e, t) { if (!this.listeners[e]) return !1; t = this.listeners[e].indexOf(t); return this.listeners[e] = this.listeners[e].slice(0), this.listeners[e].splice(t, 1), -1 < t }, t.trigger = function (e) { var t = this.listeners[e]; if (t) if (2 === arguments.length) for (var i = t.length, n = 0; n < i; ++n) t[n].call(this, arguments[1]); else for (var r = Array.prototype.slice.call(arguments, 1), a = t.length, s = 0; s < a; ++s) t[s].apply(this, r) }, t.dispose = function () { this.listeners = {} }, t.pipe = function (t) { this.on("data", function (e) { t.push(e) }) }, e }(), sr = function (e) { return window.atob ? window.atob(e) : Buffer.from(e, "base64").toString("binary") }; function or(e) { for (var t = sr(e), i = new Uint8Array(t.length), n = 0; n < t.length; n++) i[n] = t.charCodeAt(n); return i } /*! @name m3u8-parser @version 4.7.0 @license Apache-2.0 */ function ur(e) { var t = /([0-9.]*)?@?([0-9.]*)?/.exec(e || ""), e = {}; return t[1] && (e.length = parseInt(t[1], 10)), t[2] && (e.offset = parseInt(t[2], 10)), e } function lr(e) { for (var t, i = e.split(new RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')), n = {}, r = i.length; r--;) "" !== i[r] && ((t = /([^=]*)=(.*)/.exec(i[r]).slice(1))[0] = t[0].replace(/^\s+|\s+$/g, ""), t[1] = t[ 1].replace(/^\s+|\s+$/g, ""), t[1] = t[1].replace(/^['"](.*)['"]$/g, "$1"), n[t[0]] = t[1]); return n } function cr(t) { var i = {}; return Object.keys(t).forEach(function (e) { i[e.toLowerCase().replace(/-(\w)/g, function (e) { return e[1].toUpperCase() })] = t[e] }), i } function dr(e) { var t, i, n, r, a = e.serverControl, s = e.targetDuration, o = e.partTargetDuration; a && (t = "#EXT-X-SERVER-CONTROL", i = "holdBack", n = "partHoldBack", r = s && 3 * s, e = o && 2 * o, s && !a.hasOwnProperty(i) && (a[i] = r, this.trigger("info", { message: t + " defaulting HOLD-BACK to targetDuration * 3 (" + r + ")." })), r && a[i] < r && (this.trigger("warn", { message: t + " clamping HOLD-BACK (" + a[i] + ") to targetDuration * 3 (" + r + ")" }), a[i] = r), o && !a.hasOwnProperty(n) && (a[n] = 3 * o, this.trigger("info", { message: t + " defaulting PART-HOLD-BACK to partTargetDuration * 3 (" + a[n] + ")." })), o && a[n] < e && (this.trigger("warn", { message: t + " clamping PART-HOLD-BACK (" + a[n] + ") to partTargetDuration * 2 (" + e + ")." }), a[n] = e)) } function hr(e) { return e && e.replace(/avc1\.(\d+)\.(\d+)/i, function (e, t, i) { return "avc1." + ("00" + Number(t).toString(16)).slice(-2) + "00" + ("00" + Number(i).toString( 16)).slice(-2) }) } function pr(e) { var e = (e = void 0 === e ? "" : e).split(","), a = []; return e.forEach(function (n) { var r; n = n.trim(), Er.forEach(function (e) { var t, i = wr[e].exec(n.toLowerCase()); !i || i.length <= 1 || (r = e, t = n.substring(0, i[1].length), i = n.replace(t, ""), a.push({ type: t, details: i, mediaType: e })) }), r || a.push({ type: n, details: "", mediaType: "unknown" }) }), a } function fr(e) { return wr.audio.test((e = void 0 === e ? "" : e).trim().toLowerCase()) } function mr(e) { if (e && "string" == typeof e) { var t = e.toLowerCase().split(",").map(function (e) { return hr(e.trim()) }), i = "video"; 1 === t.length && fr(t[0]) ? i = "audio" : 1 === t.length && (n = t[0], wr.text.test((n = void 0 === n ? "" : n).trim().toLowerCase())) && (i = "application"); var n = "mp4"; return t.every(function (e) { return wr.mp4.test(e) }) ? n = "mp4" : t.every(function (e) { return wr.webm.test(e) }) ? n = "webm" : t.every(function (e) { return wr.ogg.test(e) }) && (n = "ogg"), i + "/" + n + ';codecs="' + e + '"' } } function gr(e) { return void 0 === e && (e = ""), window.MediaSource && window.MediaSource.isTypeSupported && window .MediaSource.isTypeSupported(mr(e)) || !1 } function yr(e) { return (e = void 0 === e ? "" : e).toLowerCase().split(",").every(function (e) { e = e.trim(); for (var t = 0; t < kr.length; t++) if (wr["muxer" + kr[t]].test(e)) return !0; return !1 }) } function vr(e) { return Ir.test(e) ? "hls" : xr.test(e) ? "dash" : "application/vnd.videojs.vhs+json" === e ? "vhs-json" : null } var _r = function (t) { function e() { var e = t.call(this) || this; return e.buffer = "", e } return mt(e, t), e.prototype.push = function (e) { var t; for (this.buffer += e, t = this.buffer.indexOf("\n"); -1 < t; t = this.buffer.indexOf("\n")) this.trigger("data", this.buffer.substring(0, t)), this.buffer = this.buffer.substring(t + 1) }, e }(ar), br = String.fromCharCode(9), Tr = function (t) { function e() { var e = t.call(this) || this; return e.customParsers = [], e.tagMappers = [], e } mt(e, t); var i = e.prototype; return i.push = function (i) { var r, a, s = this; 0 !== (i = i.trim()).length && ("#" === i[0] ? this.tagMappers.reduce(function (e, t) { t = t(i); return t === i ? e : e.concat([t]) }, [i]).forEach(function (e) { for (var t, i, n = 0; n < s.customParsers.length; n++) if (s.customParsers[n].call(s, e)) return; if (0 === e.indexOf("#EXT")) if (e = e.replace("\r", ""), r = /^#EXTM3U/.exec(e)) s.trigger("data", { type: "tag", tagType: "m3u" }); else { if (r = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(e)) return a = { type: "tag", tagType: "inf" }, r[1] && (a.duration = parseFloat(r[1])), r[2] && (a.title = r[2]), void s.trigger("data", a); if (r = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(e)) return a = { type: "tag", tagType: "targetduration" }, r[1] && (a.duration = parseInt(r[1], 10)), void s.trigger( "data", a); if (r = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(e)) return a = { type: "tag", tagType: "version" }, r[1] && (a.version = parseInt(r[1], 10)), void s.trigger( "data", a); if (r = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)) return a = { type: "tag", tagType: "media-sequence" }, r[1] && (a.number = parseInt(r[1], 10)), void s.trigger( "data", a); if (r = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)) return a = { type: "tag", tagType: "discontinuity-sequence" }, r[1] && (a.number = parseInt(r[1], 10)), void s.trigger( "data", a); if (r = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(e)) return a = { type: "tag", tagType: "playlist-type" }, r[1] && (a.playlistType = r[1]), void s.trigger("data", a); if (r = /^#EXT-X-BYTERANGE:?(.*)?$/.exec(e)) return a = g(ur(r[1]), { type: "tag", tagType: "byterange" }), void s.trigger("data", a); if (r = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(e)) return a = { type: "tag", tagType: "allow-cache" }, r[1] && (a.allowed = !/NO/.test(r[1])), void s.trigger( "data", a); if (r = /^#EXT-X-MAP:?(.*)$/.exec(e)) return a = { type: "tag", tagType: "map" }, r[1] && ((t = lr(r[1])).URI && (a.uri = t.URI), t .BYTERANGE && (a.byterange = ur(t.BYTERANGE))), void s .trigger("data", a); if (r = /^#EXT-X-STREAM-INF:?(.*)$/.exec(e)) return a = { type: "tag", tagType: "stream-inf" }, r[1] && (a.attributes = lr(r[1]), a.attributes.RESOLUTION && (i = {}, (t = a.attributes.RESOLUTION.split("x"))[0] && (i .width = parseInt(t[0], 10)), t[1] && (i.height = parseInt(t[1], 10)), a.attributes.RESOLUTION = i), a .attributes.BANDWIDTH && (a.attributes.BANDWIDTH = parseInt( a.attributes.BANDWIDTH, 10)), a.attributes[ "PROGRAM-ID"] && (a.attributes["PROGRAM-ID"] = parseInt(a .attributes["PROGRAM-ID"], 10))), void s.trigger("data", a); if (r = /^#EXT-X-MEDIA:?(.*)$/.exec(e)) return a = { type: "tag", tagType: "media" }, r[1] && (a.attributes = lr(r[1])), void s.trigger("data", a); if (r = /^#EXT-X-ENDLIST/.exec(e)) s.trigger("data", { type: "tag", tagType: "endlist" }); else { if (!(r = /^#EXT-X-DISCONTINUITY/.exec(e))) return (r = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(e)) ? (a = { type: "tag", tagType: "program-date-time" }, r[1] && (a.dateTimeString = r[1], a.dateTimeObject = new Date(r[1])), void s.trigger("data", a)) : (r = /^#EXT-X-KEY:?(.*)$/.exec(e)) ? (a = { type: "tag", tagType: "key" }, r[1] && (a.attributes = lr(r[1]), a.attributes.IV && ("0x" === a.attributes.IV.substring(0, 2) .toLowerCase() && (a.attributes.IV = a .attributes.IV.substring(2)), a.attributes .IV = a.attributes.IV.match(/.{8}/g), a .attributes.IV[0] = parseInt(a.attributes.IV[0], 16), a.attributes.IV[1] = parseInt(a .attributes.IV[1], 16), a.attributes.IV[2] = parseInt(a.attributes.IV[2], 16), a.attributes .IV[3] = parseInt(a.attributes.IV[3], 16), a .attributes.IV = new Uint32Array(a.attributes .IV))), void s.trigger("data", a)) : (r = /^#EXT-X-START:?(.*)$/.exec(e)) ? (a = { type: "tag", tagType: "start" }, r[1] && (a.attributes = lr(r[1]), a.attributes[ "TIME-OFFSET"] = parseFloat(a.attributes[ "TIME-OFFSET"]), a.attributes.PRECISE = /YES/ .test(a.attributes.PRECISE)), void s.trigger("data", a)) : (r = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(e)) ? ( a = { type: "tag", tagType: "cue-out-cont" }, r[1] ? a.data = r[1] : a.data = "", void s.trigger( "data", a)) : (r = /^#EXT-X-CUE-OUT:?(.*)?$/.exec( e)) ? (a = { type: "tag", tagType: "cue-out" }, r[1] ? a.data = r[1] : a.data = "", void s.trigger( "data", a)) : (r = /^#EXT-X-CUE-IN:?(.*)?$/.exec(e)) ? ( a = { type: "tag", tagType: "cue-in" }, r[1] ? a.data = r[1] : a.data = "", void s.trigger( "data", a)) : (r = /^#EXT-X-SKIP:(.*)$/.exec(e)) && r[1] ? ((a = { type: "tag", tagType: "skip" }).attributes = lr(r[1]), a.attributes.hasOwnProperty( "SKIPPED-SEGMENTS") && (a.attributes[ "SKIPPED-SEGMENTS"] = parseInt(a.attributes[ "SKIPPED-SEGMENTS"], 10)), a.attributes .hasOwnProperty("RECENTLY-REMOVED-DATERANGES") && (a .attributes["RECENTLY-REMOVED-DATERANGES"] = a .attributes["RECENTLY-REMOVED-DATERANGES"].split(br) ), void s.trigger("data", a)) : (r = /^#EXT-X-PART:(.*)$/.exec(e)) && r[1] ? ((a = { type: "tag", tagType: "part" }).attributes = lr(r[1]), ["DURATION"].forEach(function ( e) { a.attributes.hasOwnProperty(e) && (a.attributes[ e] = parseFloat(a.attributes[e])) }), ["INDEPENDENT", "GAP"].forEach(function (e) { a.attributes.hasOwnProperty(e) && (a.attributes[ e] = /YES/.test(a.attributes[e])) }), a.attributes.hasOwnProperty("BYTERANGE") && (a .attributes.byterange = ur(a.attributes.BYTERANGE)), void s.trigger("data", a)) : (r = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(e)) && r[1] ? (( a = { type: "tag", tagType: "server-control" }).attributes = lr(r[1]), ["CAN-SKIP-UNTIL", "PART-HOLD-BACK", "HOLD-BACK" ].forEach(function (e) { a.attributes.hasOwnProperty(e) && (a.attributes[ e] = parseFloat(a.attributes[e])) }), ["CAN-SKIP-DATERANGES", "CAN-BLOCK-RELOAD"].forEach( function (e) { a.attributes.hasOwnProperty(e) && (a.attributes[ e] = /YES/.test(a.attributes[e])) }), void s.trigger("data", a)) : (r = /^#EXT-X-PART-INF:(.*)$/.exec(e)) && r[1] ? ((a = { type: "tag", tagType: "part-inf" }).attributes = lr(r[1]), ["PART-TARGET"].forEach( function (e) { a.attributes.hasOwnProperty(e) && (a.attributes[ e] = parseFloat(a.attributes[e])) }), void s.trigger("data", a)) : (r = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(e)) && r[1] ? ((a = { type: "tag", tagType: "preload-hint" }).attributes = lr(r[1]), ["BYTERANGE-START", "BYTERANGE-LENGTH" ].forEach(function (e) { var t; a.attributes.hasOwnProperty(e) && (a.attributes[ e] = parseInt(a.attributes[e], 10), t = "BYTERANGE-LENGTH" === e ? "length" : "offset", a.attributes .byterange = a.attributes.byterange || {}, a.attributes.byterange[t] = a .attributes[e], delete a.attributes[e]) }), void s.trigger("data", a)) : (r = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(e)) && r[1] ? (( a = { type: "tag", tagType: "rendition-report" }).attributes = lr(r[1]), ["LAST-MSN", "LAST-PART"] .forEach(function (e) { a.attributes.hasOwnProperty(e) && (a.attributes[ e] = parseInt(a.attributes[e], 10)) }), void s.trigger("data", a)) : void s.trigger( "data", { type: "tag", data: e.slice(4) }); s.trigger("data", { type: "tag", tagType: "discontinuity" }) } } else s.trigger("data", { type: "comment", text: e.slice(1) }) }) : this.trigger("data", { type: "uri", uri: i })) }, i.addParser = function (e) { var t = this, i = e.expression, n = e.customType, r = e.dataParser, a = e.segment; "function" != typeof r && (r = function (e) { return e }), this.customParsers.push(function (e) { if (i.exec(e)) return t.trigger("data", { type: "custom", data: r(e), customType: n, segment: a }), !0 }) }, i.addTagMapper = function (e) { var t = e.expression, i = e.map; this.tagMappers.push(function (e) { return t.test(e) ? i(e) : e }) }, e }(ar), Sr = function (t) { function e() { var e = t.call(this) || this; e.lineStream = new _r, e.parseStream = new Tr, e.lineStream.pipe(e.parseStream); var n, r, a = ft(e), o = [], u = {}, l = !1, c = { AUDIO: {}, VIDEO: {}, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, d = 0; e.manifest = { allowCache: !0, discontinuityStarts: [], segments: [] }; var h = 0, p = 0; return e.on("end", function () { u.uri || !u.parts && !u.preloadHints || (!u.map && n && (u.map = n), !u.key && r && (u .key = r), u.timeline || "number" != typeof d || (u.timeline = d), e .manifest.preloadSegment = u) }), e.parseStream.on("data", function (s) { var t, i; ({ tag: function () { ({ version: function () { s.version && (this.manifest.version = s.version) }, "allow-cache": function () { this.manifest.allowCache = s.allowed, "allowed" in s || (this.trigger("info", { message: "defaulting allowCache to YES" }), this.manifest.allowCache = !0) }, byterange: function () { var e = {}; "length" in s && ((u.byterange = e).length = s.length, "offset" in s || (s.offset = h)), "offset" in s && ((u.byterange = e).offset = s.offset), h = e .offset + e.length }, endlist: function () { this.manifest.endList = !0 }, inf: function () { "mediaSequence" in this.manifest || (this.manifest .mediaSequence = 0, this.trigger("info", { message: "defaulting media sequence to zero" })), "discontinuitySequence" in this.manifest || (this.manifest.discontinuitySequence = 0, this .trigger("info", { message: "defaulting discontinuity sequence to zero" })), 0 < s.duration && (u.duration = s .duration), 0 === s.duration && (u.duration = .01, this.trigger("info", { message: "updating zero segment duration to a small value" })), this.manifest.segments = o }, key: function () { if (s.attributes) if ("NONE" !== s.attributes.METHOD) if (s.attributes.URI) { if ("com.apple.streamingkeydelivery" === s .attributes.KEYFORMAT) return this .manifest.contentProtection = this .manifest.contentProtection || {}, void (this.manifest .contentProtection[ "com.apple.fps.1_0"] = { attributes: s.attributes }); if ("urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" === s.attributes.KEYFORMAT) return -1 === [ "SAMPLE-AES", "SAMPLE-AES-CTR", "SAMPLE-AES-CENC" ].indexOf(s.attributes.METHOD) ? void this.trigger("warn", { message: "invalid key method provided for Widevine" }) : ("SAMPLE-AES-CENC" === s .attributes.METHOD && this .trigger("warn", { message: "SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead" }), "data:text/plain;base64," !== s .attributes.URI.substring(0, 23) ? void this.trigger( "warn", { message: "invalid key URI provided for Widevine" }) : s.attributes.KEYID && "0x" === s.attributes.KEYID .substring(0, 2) ? (this .manifest .contentProtection = this .manifest .contentProtection || {}, void (this.manifest .contentProtection[ "com.widevine.alpha" ] = { attributes: { schemeIdUri: s .attributes .KEYFORMAT, keyId: s .attributes .KEYID .substring( 2) }, pssh: or(s .attributes .URI.split( ",")[1]) })) : void this.trigger( "warn", { message: "invalid key ID provided for Widevine" })); s.attributes.METHOD || this.trigger( "warn", { message: "defaulting key method to AES-128" }), r = { method: s.attributes.METHOD || "AES-128", uri: s.attributes.URI }, "undefined" != typeof s.attributes .IV && (r.iv = s.attributes.IV) } else this.trigger("warn", { message: "ignoring key declaration without URI" }); else r = null; else this.trigger("warn", { message: "ignoring key declaration without attribute list" }) }, "media-sequence": function () { isFinite(s.number) ? this.manifest.mediaSequence = s .number : this.trigger("warn", { message: "ignoring invalid media sequence: " + s.number }) }, "discontinuity-sequence": function () { isFinite(s.number) ? (this.manifest .discontinuitySequence = s.number, d = s.number ) : this.trigger("warn", { message: "ignoring invalid discontinuity sequence: " + s.number }) }, "playlist-type": function () { /VOD|EVENT/.test(s.playlistType) ? this.manifest .playlistType = s.playlistType : this.trigger( "warn", { message: "ignoring unknown playlist type: " + s.playlist }) }, map: function () { n = {}, s.uri && (n.uri = s.uri), s.byterange && (n .byterange = s.byterange), r && (n.key = r) }, "stream-inf": function () { this.manifest.playlists = o, this.manifest.mediaGroups = this.manifest.mediaGroups || c, s.attributes ? (u .attributes || (u.attributes = {}), g(u .attributes, s.attributes)) : this.trigger( "warn", { message: "ignoring empty stream-inf attributes" }) }, media: function () { var e; this.manifest.mediaGroups = this.manifest.mediaGroups || c, s.attributes && s.attributes.TYPE && s .attributes["GROUP-ID"] && s.attributes.NAME ? ((e = this.manifest.mediaGroups[s.attributes.TYPE] )[s.attributes["GROUP-ID"]] = e[s .attributes["GROUP-ID"]] || {}, t = e[s .attributes["GROUP-ID"]], (i = { default: /yes/i.test(s.attributes .DEFAULT) }).default ? i.autoselect = !0 : i.autoselect = /yes/i.test(s.attributes.AUTOSELECT), s .attributes.LANGUAGE && (i.language = s .attributes.LANGUAGE), s.attributes.URI && ( i.uri = s.attributes.URI), s.attributes[ "INSTREAM-ID"] && (i.instreamId = s .attributes["INSTREAM-ID"]), s.attributes .CHARACTERISTICS && (i.characteristics = s .attributes.CHARACTERISTICS), s.attributes .FORCED && (i.forced = /yes/i.test(s.attributes .FORCED)), t[s.attributes.NAME] = i) : this .trigger("warn", { message: "ignoring incomplete or missing media group" }) }, discontinuity: function () { d += 1, u.discontinuity = !0, this.manifest .discontinuityStarts.push(o.length) }, "program-date-time": function () { "undefined" == typeof this.manifest.dateTimeString && ( this.manifest.dateTimeString = s.dateTimeString, this.manifest.dateTimeObject = s.dateTimeObject ), u.dateTimeString = s.dateTimeString, u .dateTimeObject = s.dateTimeObject }, targetduration: function () { !isFinite(s.duration) || s.duration < 0 ? this.trigger( "warn", { message: "ignoring invalid target duration: " + s.duration }) : (this.manifest.targetDuration = s.duration, dr.call(this, this.manifest)) }, start: function () { s.attributes && !isNaN(s.attributes["TIME-OFFSET"]) ? this.manifest.start = { timeOffset: s.attributes["TIME-OFFSET"], precise: s.attributes.PRECISE } : this.trigger("warn", { message: "ignoring start declaration without appropriate attribute list" }) }, "cue-out": function () { u.cueOut = s.data }, "cue-out-cont": function () { u.cueOutCont = s.data }, "cue-in": function () { u.cueIn = s.data }, skip: function () { this.manifest.skip = cr(s.attributes), this .warnOnMissingAttributes_("#EXT-X-SKIP", s .attributes, ["SKIPPED-SEGMENTS"]) }, part: function () { var i = this; l = !0; var e = this.manifest.segments.length, t = cr(s.attributes); u.parts = u.parts || [], u.parts.push(t), t.byterange && (t.byterange.hasOwnProperty("offset") || (t .byterange.offset = p), p = t.byterange .offset + t.byterange.length); var n = u.parts.length - 1; this.warnOnMissingAttributes_("#EXT-X-PART #" + n + " for segment #" + e, s.attributes, ["URI", "DURATION" ]), this.manifest.renditionReports && this .manifest.renditionReports.forEach(function (e, t) { e.hasOwnProperty("lastPart") || i.trigger( "warn", { message: "#EXT-X-RENDITION-REPORT #" + t + " lacks required attribute(s): LAST-PART" }) }) }, "server-control": function () { var e = this.manifest.serverControl = cr(s.attributes); e.hasOwnProperty("canBlockReload") || (e .canBlockReload = !1, this.trigger("info", { message: "#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false" })), dr.call(this, this.manifest), e .canSkipDateranges && !e.hasOwnProperty( "canSkipUntil") && this.trigger("warn", { message: "#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set" }) }, "preload-hint": function () { var e = this.manifest.segments.length, t = cr(s.attributes), i = t.type && "PART" === t.type; u.preloadHints = u.preloadHints || [], u.preloadHints .push(t), t.byterange && (t.byterange .hasOwnProperty("offset") || (t.byterange .offset = i ? p : 0, i && (p = t.byterange .offset + t.byterange.length))); var n = u.preloadHints.length - 1; if (this.warnOnMissingAttributes_( "#EXT-X-PRELOAD-HINT #" + n + " for segment #" + e, s.attributes, ["TYPE", "URI"]), t.type) for (var r = 0; r < u.preloadHints.length - 1; r++) { var a = u.preloadHints[r]; a.type && a.type === t.type && this.trigger( "warn", { message: "#EXT-X-PRELOAD-HINT #" + n + " for segment #" + e + " has the same TYPE " + t.type + " as preload hint #" + r }) } }, "rendition-report": function () { var e = cr(s.attributes); this.manifest.renditionReports = this.manifest .renditionReports || [], this.manifest .renditionReports.push(e); var t = this.manifest.renditionReports.length - 1, e = ["LAST-MSN", "URI"]; l && e.push("LAST-PART"), this.warnOnMissingAttributes_( "#EXT-X-RENDITION-REPORT #" + t, s.attributes, e ) }, "part-inf": function () { this.manifest.partInf = cr(s.attributes), this .warnOnMissingAttributes_("#EXT-X-PART-INF", s .attributes, ["PART-TARGET"]), this.manifest .partInf.partTarget && (this.manifest .partTargetDuration = this.manifest.partInf .partTarget), dr.call(this, this.manifest) } } [s.tagType] || function () { }).call(a) }, uri: function () { u.uri = s.uri, o.push(u), !this.manifest.targetDuration || "duration" in u || (this.trigger("warn", { message: "defaulting segment duration to the target duration" }), u.duration = this.manifest.targetDuration), r && (u.key = r), u .timeline = d, n && (u.map = n), p = 0, u = {} }, comment: function () { }, custom: function () { s.segment ? (u.custom = u.custom || {}, u.custom[s.customType] = s .data) : (this.manifest.custom = this.manifest.custom || {}, this .manifest.custom[s.customType] = s.data) } })[s.type].call(a) }), e } mt(e, t); var i = e.prototype; return i.warnOnMissingAttributes_ = function (e, t, i) { var n = []; i.forEach(function (e) { t.hasOwnProperty(e) || n.push(e) }), n.length && this.trigger("warn", { message: e + " lacks required attribute(s): " + n.join(", ") }) }, i.push = function (e) { this.lineStream.push(e) }, i.end = function () { this.lineStream.push("\n"), this.trigger("end") }, i.addParser = function (e) { this.parseStream.addParser(e) }, i.addTagMapper = function (e) { this.parseStream.addTagMapper(e) }, e }(ar), wr = { mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v|stpp.ttml.im1t)/, webm: /^(vp0?[89]|av0?1|opus|vorbis)/, ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/, video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/, audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3|speex|aac)/, text: /^(stpp.ttml.im1t)/, muxerVideo: /^(avc0?1)/, muxerAudio: /^(mp4a)/, muxerText: /a^/ }, Er = ["video", "audio", "text"], kr = ["Video", "Audio", "Text"], Cr = "mp4a.40.2", Ir = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i, xr = /^application\/dash\+xml/i; function Ar(e, t) { return (t = void 0 === t ? Object : t) && "function" == typeof t.freeze ? t.freeze(e) : e } var Pr = Ar({ HTML: "text/html", isHTML: function (e) { return e === Pr.HTML }, XML_APPLICATION: "application/xml", XML_TEXT: "text/xml", XML_XHTML_APPLICATION: "application/xhtml+xml", XML_SVG_IMAGE: "image/svg+xml" }), Lr = Ar({ HTML: "http://www.w3.org/1999/xhtml", isHTML: function (e) { return e === Lr.HTML }, SVG: "http://www.w3.org/2000/svg", XML: "http://www.w3.org/XML/1998/namespace", XMLNS: "http://www.w3.org/2000/xmlns/" }), Dr = { freeze: Ar, MIME_TYPE: Pr, NAMESPACE: Lr }, Or = Dr.NAMESPACE; function Mr(e) { return "" !== e } function Rr(e, t) { return e.hasOwnProperty(t) || (e[t] = !0), e } function Nr(e) { if (!e) return []; e = (e = e) ? e.split(/[\t\n\f\r ]+/).filter(Mr) : []; return Object.keys(e.reduce(Rr, {})) } function Ur(e, t) { for (var i in e) t[i] = e[i] } function Br(e, t) { var i, n = e.prototype; n instanceof t || ((i = function () { }).prototype = t.prototype, Ur(n, i = new i), e.prototype = n = i), n .constructor != e && (n.constructor = e) } var W = {}, Fr = W.ELEMENT_NODE = 1, jr = W.ATTRIBUTE_NODE = 2, Hr = W.TEXT_NODE = 3, qr = W.CDATA_SECTION_NODE = 4, Vr = W.ENTITY_REFERENCE_NODE = 5, Wr = (W.ENTITY_NODE = 6, W.PROCESSING_INSTRUCTION_NODE = 7), Gr = W.COMMENT_NODE = 8, zr = W.DOCUMENT_NODE = 9, Xr = W.DOCUMENT_TYPE_NODE = 10, Kr = W.DOCUMENT_FRAGMENT_NODE = 11, x = (W.NOTATION_NODE = 12, {}), Yr = {}; x.INDEX_SIZE_ERR = (Yr[1] = "Index size error", 1), x.DOMSTRING_SIZE_ERR = (Yr[2] = "DOMString size error", 2); x.HIERARCHY_REQUEST_ERR = (Yr[3] = "Hierarchy request error", 3); x.WRONG_DOCUMENT_ERR = (Yr[4] = "Wrong document", 4), x.INVALID_CHARACTER_ERR = (Yr[5] = "Invalid character", 5), x.NO_DATA_ALLOWED_ERR = (Yr[6] = "No data allowed", 6), x.NO_MODIFICATION_ALLOWED_ERR = (Yr[7] = "No modification allowed", 7); x.NOT_FOUND_ERR = (Yr[8] = "Not found", 8); x.NOT_SUPPORTED_ERR = (Yr[9] = "Not supported", 9); var Qr; x.INUSE_ATTRIBUTE_ERR = (Yr[10] = "Attribute in use", 10); function $r(e, t) { var i; return t instanceof Error ? i = t : (i = this, Error.call(this, Yr[e]), this.message = Yr[e], Error .captureStackTrace && Error.captureStackTrace(this, $r)), i.code = e, t && (this.message = this .message + ": " + t), i } function Jr() { } function Zr(e, t) { this._node = e, this._refresh = t, ea(this) } function ea(e) { var t, i = e._node._inc || e._node.ownerDocument._inc; e._inc != i && (t = e._refresh(e._node), La(e, "length", t.length), Ur(t, e), e._inc = i) } function ta() { } function ia(e, t) { for (var i = e.length; i--;) if (e[i] === t) return i } function na(e, t, i, n) { n ? t[ia(t, n)] = i : t[t.length++] = i, !e || (t = (i.ownerElement = e).ownerDocument) && (n && ca(t, e, n), e = e, i = i, (t = t) && t._inc++, i.namespaceURI === Or.XMLNS && (e._nsMap[i.prefix ? i .localName : ""] = i.value)) } function ra(e, t, i) { var n = ia(t, i); if (!(0 <= n)) throw $r(8, new Error(e.tagName + "@" + i)); for (var r, a = t.length - 1; n < a;) t[n] = t[++n]; t.length = a, !e || (r = e.ownerDocument) && (ca(r, e, i), i.ownerElement = null) } function aa() { } function sa() { } function oa(e) { return ("<" == e ? "<" : ">" == e && ">") || "&" == e && "&" || '"' == e && """ || "&#" + e .charCodeAt() + ";" } function ua(e, t) { if (t(e)) return 1; if (e = e.firstChild) do { if (ua(e, t)) return 1 } while (e = e.nextSibling) } function la() { } function ca(e, t, i) { e && e._inc++, i.namespaceURI === Or.XMLNS && delete t._nsMap[i.prefix ? i.localName : ""] } function da(e, t, i) { if (e && e._inc) { e._inc++; var n = t.childNodes; if (i) n[n.length++] = i; else { for (var r = t.firstChild, a = 0; r;) r = (n[a++] = r).nextSibling; n.length = a } } } function ha(e, t) { var i = t.previousSibling, n = t.nextSibling; return i ? i.nextSibling = n : e.firstChild = n, n ? n.previousSibling = i : e.lastChild = i, da(e .ownerDocument, e), t } function pa(e, t, i) { var n = t.parentNode; if (n && n.removeChild(t), t.nodeType === Kr) { var r = t.firstChild; if (null == r) return t; var a = t.lastChild } else r = a = t; n = i ? i.previousSibling : e.lastChild; for (r.previousSibling = n, a.nextSibling = i, n ? n.nextSibling = r : e.firstChild = r, null == i ? e .lastChild = a : i.previousSibling = a; r.parentNode = e, r !== a && (r = r.nextSibling);) ; return da(e.ownerDocument || e, e), t.nodeType == Kr && (t.firstChild = t.lastChild = null), t } function fa() { this._nsMap = {} } function ma() { } function ga() { } function ya() { } function va() { } function _a() { } function ba() { } function Ta() { } function Sa() { } function wa() { } function Ea() { } function ka() { } function Ca() { } function Ia(e, t) { var i, n = [], r = 9 == this.nodeType && this.documentElement || this, a = r.prefix, s = r.namespaceURI; return Pa(this, n, e, t, i = s && null == a && null == (a = r.lookupPrefix(s)) ? [{ namespace: s, prefix: null }] : i), n.join("") } function xa(e, t, i) { var n = e.prefix || "", r = e.namespaceURI; if (r && ("xml" !== n || r !== Or.XML) && r !== Or.XMLNS) { for (var a = i.length; a--;) { var s = i[a]; if (s.prefix === n) return s.namespace !== r } return 1 } } function Aa(e, t, i) { e.push(" ", t, '="', i.replace(/[<&"]/g, oa), '"') } function Pa(e, t, i, n, r) { if (r = r || [], n) { if (!(e = n(e))) return; if ("string" == typeof e) return void t.push(e) } switch (e.nodeType) { case Fr: var a = e.attributes, s = a.length, o = e.firstChild, u = e.tagName, l = u; if (!(i = Or.isHTML(e.namespaceURI) || i) && !e.prefix && e.namespaceURI) { for (var c, d = 0; d < a.length; d++) if ("xmlns" === a.item(d).name) { c = a.item(d).value; break } if (!c) for (var h = r.length - 1; 0 <= h; h--) if ("" === (p = r[h]).prefix && p.namespace === e.namespaceURI) { c = p.namespace; break } if (c !== e.namespaceURI) for (var p, h = r.length - 1; 0 <= h; h--) if ((p = r[h]).namespace === e.namespaceURI) { p.prefix && (l = p.prefix + ":" + u); break } } t.push("<", l); for (var f = 0; f < s; f++) "xmlns" == (m = a.item(f)).prefix ? r.push({ prefix: m.localName, namespace: m.value }) : "xmlns" == m.nodeName && r.push({ prefix: "", namespace: m.value }); for (var m, g, y, f = 0; f < s; f++) xa(m = a.item(f), 0, r) && (Aa(t, (g = m.prefix || "") ? "xmlns:" + g : "xmlns", y = m.namespaceURI), r.push({ prefix: g, namespace: y })), Pa(m, t, i, n, r); if (u === l && xa(e, 0, r) && (Aa(t, (g = e.prefix || "") ? "xmlns:" + g : "xmlns", y = e .namespaceURI), r.push({ prefix: g, namespace: y })), o || i && !/^(?:meta|link|img|br|hr|input)$/i.test(u)) { if (t.push(">"), i && /^script$/i.test(u)) for (; o;) o.data ? t.push(o.data) : Pa(o, t, i, n, r.slice()), o = o.nextSibling; else for (; o;) Pa(o, t, i, n, r.slice()), o = o.nextSibling; t.push("") } else t.push("/>"); return; case zr: case Kr: for (o = e.firstChild; o;) Pa(o, t, i, n, r.slice()), o = o.nextSibling; return; case jr: return Aa(t, e.name, e.value), 0; case Hr: return t.push(e.data.replace(/[<&]/g, oa).replace(/]]>/g, "]]>")); case qr: return t.push(""); case Gr: return t.push("\x3c!--", e.data, "--\x3e"); case Xr: var v = e.publicId, _ = e.systemId; return t.push("")) : _ && "." != _ ? t.push(" SYSTEM ", _, ">") : ((_ = e .internalSubset) && t.push(" [", _, "]"), t.push(">"))); case Wr: return t.push(""); case Vr: return t.push("&", e.nodeName, ";"); default: t.push("??", e.nodeName) } } function La(e, t, i) { e[t] = i } x.INVALID_STATE_ERR = (Yr[11] = "Invalid state", 11), x.SYNTAX_ERR = (Yr[12] = "Syntax error", 12), x .INVALID_MODIFICATION_ERR = (Yr[13] = "Invalid modification", 13), x.NAMESPACE_ERR = (Yr[14] = "Invalid namespace", 14), x.INVALID_ACCESS_ERR = (Yr[15] = "Invalid access", 15), $r.prototype = Error .prototype, Ur(x, $r), Jr.prototype = { length: 0, item: function (e) { return this[e] || null }, toString: function (e, t) { for (var i = [], n = 0; n < this.length; n++) Pa(this[n], i, e, t); return i.join("") } }, Zr.prototype.item = function (e) { return ea(this), this[e] }, Br(Zr, Jr), ta.prototype = { length: 0, item: Jr.prototype.item, getNamedItem: function (e) { for (var t = this.length; t--;) { var i = this[t]; if (i.nodeName == e) return i } }, setNamedItem: function (e) { var t = e.ownerElement; if (t && t != this._ownerElement) throw new $r(10); t = this.getNamedItem(e.nodeName); return na(this._ownerElement, this, e, t), t }, setNamedItemNS: function (e) { var t = e.ownerElement; if (t && t != this._ownerElement) throw new $r(10); return t = this.getNamedItemNS(e.namespaceURI, e.localName), na(this._ownerElement, this, e, t), t }, removeNamedItem: function (e) { e = this.getNamedItem(e); return ra(this._ownerElement, this, e), e }, removeNamedItemNS: function (e, t) { t = this.getNamedItemNS(e, t); return ra(this._ownerElement, this, t), t }, getNamedItemNS: function (e, t) { for (var i = this.length; i--;) { var n = this[i]; if (n.localName == t && n.namespaceURI == e) return n } return null } }, aa.prototype = { hasFeature: function (e, t) { return !0 }, createDocument: function (e, t, i) { var n = new la; return n.implementation = this, n.childNodes = new Jr, n.doctype = i || null, i && n .appendChild(i), t && (t = n.createElementNS(e, t), n.appendChild(t)), n }, createDocumentType: function (e, t, i) { var n = new ba; return n.name = e, n.nodeName = e, n.publicId = t || "", n.systemId = i || "", n } }, sa.prototype = { firstChild: null, lastChild: null, previousSibling: null, nextSibling: null, attributes: null, parentNode: null, childNodes: null, ownerDocument: null, nodeValue: null, namespaceURI: null, prefix: null, localName: null, insertBefore: function (e, t) { return pa(this, e, t) }, replaceChild: function (e, t) { this.insertBefore(e, t), t && this.removeChild(t) }, removeChild: function (e) { return ha(this, e) }, appendChild: function (e) { return this.insertBefore(e, null) }, hasChildNodes: function () { return null != this.firstChild }, cloneNode: function (e) { return function e(t, i, n) { var r = new i.constructor; for (var a in i) { var s = i[a]; "object" != typeof s && s != r[a] && (r[a] = s) } i.childNodes && (r.childNodes = new Jr); r.ownerDocument = t; switch (r.nodeType) { case Fr: var o = i.attributes, u = r.attributes = new ta, l = o.length; u._ownerElement = r; for (var c = 0; c < l; c++) r.setAttributeNode(e(t, o.item(c), !0)); break; case jr: n = !0 } if (n) for (var d = i.firstChild; d;) r.appendChild(e(t, d, n)), d = d.nextSibling; return r }(this.ownerDocument || this, this, e) }, normalize: function () { for (var e = this.firstChild; e;) { var t = e.nextSibling; t && t.nodeType == Hr && e.nodeType == Hr ? (this.removeChild(t), e.appendData(t.data)) : (e .normalize(), e = t) } }, isSupported: function (e, t) { return this.ownerDocument.implementation.hasFeature(e, t) }, hasAttributes: function () { return 0 < this.attributes.length }, lookupPrefix: function (e) { for (var t = this; t;) { var i = t._nsMap; if (i) for (var n in i) if (i[n] == e) return n; t = t.nodeType == jr ? t.ownerDocument : t.parentNode } return null }, lookupNamespaceURI: function (e) { for (var t = this; t;) { var i = t._nsMap; if (i && e in i) return i[e]; t = t.nodeType == jr ? t.ownerDocument : t.parentNode } return null }, isDefaultNamespace: function (e) { return null == this.lookupPrefix(e) } }, Ur(W, sa), Ur(W, sa.prototype), la.prototype = { nodeName: "#document", nodeType: zr, doctype: null, documentElement: null, _inc: 1, insertBefore: function (e, t) { if (e.nodeType != Kr) return null == this.documentElement && e.nodeType == Fr && (this .documentElement = e), pa(this, e, t), e.ownerDocument = this, e; for (var i = e.firstChild; i;) { var n = i.nextSibling; this.insertBefore(i, t), i = n } return e }, removeChild: function (e) { return this.documentElement == e && (this.documentElement = null), ha(this, e) }, importNode: function (e, t) { return function e(t, i, n) { var r; switch (i.nodeType) { case Fr: (r = i.cloneNode(!1)).ownerDocument = t; case Kr: break; case jr: n = !0 } r = r || i.cloneNode(!1); r.ownerDocument = t; r.parentNode = null; if (n) for (var a = i.firstChild; a;) r.appendChild(e(t, a, n)), a = a.nextSibling; return r }(this, e, t) }, getElementById: function (t) { var i = null; return ua(this.documentElement, function (e) { if (e.nodeType == Fr && e.getAttribute("id") == t) return i = e, !0 }), i }, getElementsByClassName: function (s) { var o = Nr(s); return new Zr(this, function (r) { var a = []; return 0 < o.length && ua(r.documentElement, function (e) { var t, i, n; e === r || e.nodeType !== Fr || (t = e.getAttribute("class")) && ((i = s === t) || (t = Nr(t), i = o.every((n = t, function (e) { return n && -1 !== n.indexOf(e) }))), i && a.push(e)) }), a }) }, createElement: function (e) { var t = new fa; return t.ownerDocument = this, t.nodeName = e, t.tagName = e, t.localName = e, t.childNodes = new Jr, (t.attributes = new ta)._ownerElement = t }, createDocumentFragment: function () { var e = new Ea; return e.ownerDocument = this, e.childNodes = new Jr, e }, createTextNode: function (e) { var t = new ya; return t.ownerDocument = this, t.appendData(e), t }, createComment: function (e) { var t = new va; return t.ownerDocument = this, t.appendData(e), t }, createCDATASection: function (e) { var t = new _a; return t.ownerDocument = this, t.appendData(e), t }, createProcessingInstruction: function (e, t) { var i = new ka; return i.ownerDocument = this, i.tagName = i.target = e, i.nodeValue = i.data = t, i }, createAttribute: function (e) { var t = new ma; return t.ownerDocument = this, t.name = e, t.nodeName = e, t.localName = e, t.specified = !0, t }, createEntityReference: function (e) { var t = new wa; return t.ownerDocument = this, t.nodeName = e, t }, createElementNS: function (e, t) { var i = new fa, n = t.split(":"), r = i.attributes = new ta; return i.childNodes = new Jr, i.ownerDocument = this, i.nodeName = t, i.tagName = t, i .namespaceURI = e, 2 == n.length ? (i.prefix = n[0], i.localName = n[1]) : i.localName = t, r._ownerElement = i }, createAttributeNS: function (e, t) { var i = new ma, n = t.split(":"); return i.ownerDocument = this, i.nodeName = t, i.name = t, i.namespaceURI = e, i.specified = !0, 2 == n.length ? (i.prefix = n[0], i.localName = n[1]) : i.localName = t, i } }, Br(la, sa), la.prototype.getElementsByTagName = (fa.prototype = { nodeType: Fr, hasAttribute: function (e) { return null != this.getAttributeNode(e) }, getAttribute: function (e) { e = this.getAttributeNode(e); return e && e.value || "" }, getAttributeNode: function (e) { return this.attributes.getNamedItem(e) }, setAttribute: function (e, t) { e = this.ownerDocument.createAttribute(e); e.value = e.nodeValue = "" + t, this.setAttributeNode(e) }, removeAttribute: function (e) { e = this.getAttributeNode(e); e && this.removeAttributeNode(e) }, appendChild: function (e) { return e.nodeType === Kr ? this.insertBefore(e, null) : function (e, t) { var i = t.parentNode; i && (n = e.lastChild, i.removeChild(t), n = e.lastChild); var n = e.lastChild; return t.parentNode = e, t.previousSibling = n, t.nextSibling = null, n ? n .nextSibling = t : e.firstChild = t, e.lastChild = t, da(e.ownerDocument, e, t), t }(this, e) }, setAttributeNode: function (e) { return this.attributes.setNamedItem(e) }, setAttributeNodeNS: function (e) { return this.attributes.setNamedItemNS(e) }, removeAttributeNode: function (e) { return this.attributes.removeNamedItem(e.nodeName) }, removeAttributeNS: function (e, t) { t = this.getAttributeNodeNS(e, t); t && this.removeAttributeNode(t) }, hasAttributeNS: function (e, t) { return null != this.getAttributeNodeNS(e, t) }, getAttributeNS: function (e, t) { t = this.getAttributeNodeNS(e, t); return t && t.value || "" }, setAttributeNS: function (e, t, i) { t = this.ownerDocument.createAttributeNS(e, t); t.value = t.nodeValue = "" + i, this.setAttributeNode(t) }, getAttributeNodeNS: function (e, t) { return this.attributes.getNamedItemNS(e, t) }, getElementsByTagName: function (n) { return new Zr(this, function (t) { var i = []; return ua(t, function (e) { e === t || e.nodeType != Fr || "*" !== n && e.tagName != n || i .push(e) }), i }) }, getElementsByTagNameNS: function (n, r) { return new Zr(this, function (t) { var i = []; return ua(t, function (e) { e === t || e.nodeType !== Fr || "*" !== n && e.namespaceURI !== n || "*" !== r && e.localName != r || i.push(e) }), i }) } }).getElementsByTagName, la.prototype.getElementsByTagNameNS = fa.prototype.getElementsByTagNameNS, Br(fa, sa), ma.prototype.nodeType = jr, Br(ma, sa), ga.prototype = { data: "", substringData: function (e, t) { return this.data.substring(e, e + t) }, appendData: function (e) { e = this.data + e, this.nodeValue = this.data = e, this.length = e.length }, insertData: function (e, t) { this.replaceData(e, 0, t) }, appendChild: function (e) { throw new Error(Yr[3]) }, deleteData: function (e, t) { this.replaceData(e, t, "") }, replaceData: function (e, t, i) { var n = this.data.substring(0, e), t = this.data.substring(e + t); this.nodeValue = this.data = i = n + i + t, this.length = i.length } }, Br(ga, sa), ya.prototype = { nodeName: "#text", nodeType: Hr, splitText: function (e) { var t = (i = this.data).substring(e), i = i.substring(0, e); this.data = this.nodeValue = i, this.length = i.length; t = this.ownerDocument.createTextNode(t); return this.parentNode && this.parentNode.insertBefore(t, this.nextSibling), t } }, Br(ya, ga), va.prototype = { nodeName: "#comment", nodeType: Gr }, Br(va, ga), _a.prototype = { nodeName: "#cdata-section", nodeType: qr }, Br(_a, ga), ba.prototype.nodeType = Xr, Br(ba, sa), Ta.prototype.nodeType = 12, Br(Ta, sa), Sa.prototype .nodeType = 6, Br(Sa, sa), wa.prototype.nodeType = Vr, Br(wa, sa), Ea.prototype.nodeName = "#document-fragment", Ea.prototype.nodeType = Kr, Br(Ea, sa), ka.prototype.nodeType = Wr, Br(ka, sa), Ca .prototype.serializeToString = function (e, t, i) { return Ia.call(e, t, i) }, sa.prototype.toString = Ia; try { Object.defineProperty && (Qr = function e(t) { switch (t.nodeType) { case Fr: case Kr: var i = []; for (t = t.firstChild; t;) 7 !== t.nodeType && 8 !== t.nodeType && i.push(e(t)), t = t .nextSibling; return i.join(""); default: return t.nodeValue } }, Object.defineProperty(Zr.prototype, "length", { get: function () { return ea(this), this.$$length } }), Object.defineProperty(sa.prototype, "textContent", { get: function () { return Qr(this) }, set: function (e) { switch (this.nodeType) { case Fr: case Kr: for (; this.firstChild;) this.removeChild(this.firstChild); (e || String(e)) && this.appendChild(this.ownerDocument.createTextNode(e)); break; default: this.data = e, this.value = e, this.nodeValue = e } } }), La = function (e, t, i) { e["$$" + t] = i }) } catch (e) { } var U = { DocumentType: ba, DOMException: $r, DOMImplementation: aa, Element: fa, Node: sa, NodeList: Jr, XMLSerializer: Ca }, Da = m(function (e, t) { var i = Dr.freeze; t.XML_ENTITIES = i({ amp: "&", apos: "'", gt: ">", lt: "<", quot: '"' }), t.HTML_ENTITIES = i({ lt: "<", gt: ">", amp: "&", quot: '"', apos: "'", Agrave: "À", Aacute: "Á", Acirc: "Â", Atilde: "Ã", Auml: "Ä", Aring: "Å", AElig: "Æ", Ccedil: "Ç", Egrave: "È", Eacute: "É", Ecirc: "Ê", Euml: "Ë", Igrave: "Ì", Iacute: "Í", Icirc: "Î", Iuml: "Ï", ETH: "Ð", Ntilde: "Ñ", Ograve: "Ò", Oacute: "Ó", Ocirc: "Ô", Otilde: "Õ", Ouml: "Ö", Oslash: "Ø", Ugrave: "Ù", Uacute: "Ú", Ucirc: "Û", Uuml: "Ü", Yacute: "Ý", THORN: "Þ", szlig: "ß", agrave: "à", aacute: "á", acirc: "â", atilde: "ã", auml: "ä", aring: "å", aelig: "æ", ccedil: "ç", egrave: "è", eacute: "é", ecirc: "ê", euml: "ë", igrave: "ì", iacute: "í", icirc: "î", iuml: "ï", eth: "ð", ntilde: "ñ", ograve: "ò", oacute: "ó", ocirc: "ô", otilde: "õ", ouml: "ö", oslash: "ø", ugrave: "ù", uacute: "ú", ucirc: "û", uuml: "ü", yacute: "ý", thorn: "þ", yuml: "ÿ", nbsp: " ", iexcl: "¡", cent: "¢", pound: "£", curren: "¤", yen: "¥", brvbar: "¦", sect: "§", uml: "¨", copy: "©", ordf: "ª", laquo: "«", not: "¬", shy: "­­", reg: "®", macr: "¯", deg: "°", plusmn: "±", sup2: "²", sup3: "³", acute: "´", micro: "µ", para: "¶", middot: "·", cedil: "¸", sup1: "¹", ordm: "º", raquo: "»", frac14: "¼", frac12: "½", frac34: "¾", iquest: "¿", times: "×", divide: "÷", forall: "∀", part: "∂", exist: "∃", empty: "∅", nabla: "∇", isin: "∈", notin: "∉", ni: "∋", prod: "∏", sum: "∑", minus: "−", lowast: "∗", radic: "√", prop: "∝", infin: "∞", ang: "∠", and: "∧", or: "∨", cap: "∩", cup: "∪", int: "∫", there4: "∴", sim: "∼", cong: "≅", asymp: "≈", ne: "≠", equiv: "≡", le: "≤", ge: "≥", sub: "⊂", sup: "⊃", nsub: "⊄", sube: "⊆", supe: "⊇", oplus: "⊕", otimes: "⊗", perp: "⊥", sdot: "⋅", Alpha: "Α", Beta: "Β", Gamma: "Γ", Delta: "Δ", Epsilon: "Ε", Zeta: "Ζ", Eta: "Η", Theta: "Θ", Iota: "Ι", Kappa: "Κ", Lambda: "Λ", Mu: "Μ", Nu: "Ν", Xi: "Ξ", Omicron: "Ο", Pi: "Π", Rho: "Ρ", Sigma: "Σ", Tau: "Τ", Upsilon: "Υ", Phi: "Φ", Chi: "Χ", Psi: "Ψ", Omega: "Ω", alpha: "α", beta: "β", gamma: "γ", delta: "δ", epsilon: "ε", zeta: "ζ", eta: "η", theta: "θ", iota: "ι", kappa: "κ", lambda: "λ", mu: "μ", nu: "ν", xi: "ξ", omicron: "ο", pi: "π", rho: "ρ", sigmaf: "ς", sigma: "σ", tau: "τ", upsilon: "υ", phi: "φ", chi: "χ", psi: "ψ", omega: "ω", thetasym: "ϑ", upsih: "ϒ", piv: "ϖ", OElig: "Œ", oelig: "œ", Scaron: "Š", scaron: "š", Yuml: "Ÿ", fnof: "ƒ", circ: "ˆ", tilde: "˜", ensp: " ", emsp: " ", thinsp: " ", zwnj: "‌", zwj: "‍", lrm: "‎", rlm: "‏", ndash: "–", mdash: "—", lsquo: "‘", rsquo: "’", sbquo: "‚", ldquo: "“", rdquo: "”", bdquo: "„", dagger: "†", Dagger: "‡", bull: "•", hellip: "…", permil: "‰", prime: "′", Prime: "″", lsaquo: "‹", rsaquo: "›", oline: "‾", euro: "€", trade: "™", larr: "←", uarr: "↑", rarr: "→", darr: "↓", harr: "↔", crarr: "↵", lceil: "⌈", rceil: "⌉", lfloor: "⌊", rfloor: "⌋", loz: "◊", spades: "♠", clubs: "♣", hearts: "♥", diams: "♦" }), t.entityMap = t.HTML_ENTITIES }); Da.XML_ENTITIES, Da.HTML_ENTITIES, Da.entityMap; var Oa = Dr.NAMESPACE, zt = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, ar = new RegExp("[\\-\\.0-9" + zt.source.slice(1, -1) + "\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"), Ma = new RegExp("^" + zt.source + ar.source + "*(?::" + zt.source + ar.source + "*)?$"), Ra = 0, Na = 1, Ua = 2, Ba = 3, Fa = 4, ja = 5, Ha = 6, qa = 7; function Va(e, t) { this.message = e, this.locator = t, Error.captureStackTrace && Error.captureStackTrace(this, Va) } function Wa() { } function Ga(e, t) { return t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber, t } function za(e, t, i) { for (var n = e.tagName, r = null, a = e.length; a--;) { var s = e[a], o = s.qName, u = s.value, o = 0 < (c = o.indexOf(":")) ? (l = s.prefix = o.slice(0, c), d = o.slice(c + 1), "xmlns" === l && d) : (l = null, "xmlns" === (d = o) && ""); s.localName = d, !1 !== o && (null == r && (r = {}, Xa(i, i = {})), i[o] = r[o] = u, s.uri = Oa.XMLNS, t .startPrefixMapping(o, u)) } for (var l, a = e.length; a--;) (l = (s = e[a]).prefix) && ("xml" === l && (s.uri = Oa.XML), "xmlns" !== l && (s.uri = i[l || ""])); var c, d = 0 < (c = n.indexOf(":")) ? (l = e.prefix = n.slice(0, c), e.localName = n.slice(c + 1)) : (l = null, e.localName = n), h = e.uri = i[l || ""]; if (t.startElement(h, d, n, e), !e.closed) return e.currentNSMap = i, e.localNSMap = r, 1; if (t.endElement(h, d, n), r) for (l in r) t.endPrefixMapping(l) } function Xa(e, t) { for (var i in e) t[i] = e[i] } function Ka() { this.attributeNames = {} } (Va.prototype = new Error).name = Va.name, Wa.prototype = { parse: function (e, t, i) { var n = this.domBuilder; n.startDocument(), Xa(t, t = {}), function (i, e, n, r, a) { function s(e) { var t = e.slice(1, -1); return t in n ? n[t] : "#" === t.charAt(0) ? 65535 < (t = parseInt(t.substr(1) .replace("x", "0x"))) ? (t -= 65536, String.fromCharCode(55296 + (t >> 10), 56320 + (1023 & t))) : String.fromCharCode(t) : (a.error( "entity not found:" + e), e) } function t(e) { var t; f < e && (t = i.substring(f, e).replace(/&#?\w+;/g, s), d && o(f), r.characters(t, 0, e - f), f = e) } function o(e, t) { for (; l <= e && (t = c.exec(i));) u = t.index, l = u + t[0].length, d.lineNumber++; d.columnNumber = e - u + 1 } var u = 0, l = 0, c = /.*(?:\r\n?|\n)|.*$/g, d = r.locator, h = [{ currentNSMap: e }], p = {}, f = 0; for (; ;) { try { var m, g, y = i.indexOf("<", f); if (y < 0) return i.substr(f).match(/^\s*$/) || (m = r.doc, g = m .createTextNode(i.substr(f)), m.appendChild(g), r.currentElement = g ); switch (f < y && t(y), i.charAt(y + 1)) { case "/": var v = i.indexOf(">", y + 3), _ = i.substring(y + 2, v).replace(/[ \t\n\r]+$/g, ""), b = h.pop(); v < 0 ? (_ = i.substring(y + 2).replace(/[\s<].*/, ""), a.error( "end tag name: " + _ + " is not complete:" + b.tagName), v = y + 1 + _.length) : _.match(/\s", t); if (n) { t = e.substring(t, n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); return t ? (t[0].length, i.processingInstruction(t[1], t[ 2]), n + 2) : -1 } return -1 }(i, y, r); break; case "!": d && o(y), v = function (e, t, i, n) { { if ("-" === e.charAt(t + 2)) { if ("-" !== e.charAt(t + 3)) return -1; var r = e.indexOf("--\x3e", t + 4); return t < r ? (i.comment(e, t + 4, r - t - 4), r + 3) : (n.error("Unclosed comment"), -1) } if ("CDATA[" == e.substr(t + 3, 6)) { r = e.indexOf("]]>", t + 9); return i.startCDATA(), i.characters(e, t + 9, r - t - 9), i.endCDATA(), r + 3 } var a = function (e, t) { var i, n = [], r = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; r.lastIndex = t, r.exec(e); for (; i = r.exec(e);) if (n.push(i), i[1]) return n }(e, t), n = a.length; if (1 < n && /!doctype/i.test(a[0][0])) { r = a[1][0], e = !1, t = !1; 3 < n && (/^public$/i.test(a[2][0]) ? (e = a[3][0], t = 4 < n && a[4][0]) : /^system$/i.test(a[2][ 0]) && (t = a[3][0])); n = a[n - 1]; return i.startDTD(r, e, t), i.endDTD(), n.index + n[0] .length } } return -1 }(i, y, r, a); break; default: d && o(y); var E = new Ka, k = h[h.length - 1].currentNSMap, v = function (e, t, n, i, r, a) { function s(e, t, i) { n.attributeNames.hasOwnProperty(e) && a.fatalError( "Attribute " + e + " redefined"), n.addValue(e, t, i) } var o, u = ++t, l = Ra; for (; ;) { var c = e.charAt(u); switch (c) { case "=": if (l === Na) o = e.slice(t, u), l = Ba; else { if (l !== Ua) throw new Error( "attribute equal must after attrName" ); l = Ba } break; case "'": case '"': if (l === Ba || l === Na) { if (l === Na && (a.warning( 'attribute value must after "="'), o = e.slice(t, u)), t = u + 1, !(0 < ( u = e.indexOf(c, t)))) throw new Error( "attribute value no end '" + c + "' match"); d = e.slice(t, u).replace(/&#?\w+;/g, r), s(o, d, t - 1), l = ja } else { if (l != Fa) throw new Error( 'attribute value must after "="'); d = e.slice(t, u).replace(/&#?\w+;/g, r), s(o, d, t), a.warning('attribute "' + o + '" missed start quot(' + c + ")!!"), t = u + 1, l = ja } break; case "/": switch (l) { case Ra: n.setTagName(e.slice(t, u)); case ja: case Ha: case qa: l = qa, n.closed = !0; case Fa: case Na: case Ua: break; default: throw new Error( "attribute invalid close char('/')") } break; case "": return a.error("unexpected end of input"), l == Ra && n.setTagName(e.slice(t, u)), u; case ">": switch (l) { case Ra: n.setTagName(e.slice(t, u)); case ja: case Ha: case qa: break; case Fa: case Na: "/" === (d = e.slice(t, u)).slice(-1) && (n .closed = !0, d = d.slice(0, -1)); case Ua: l === Ua && (d = o), l == Fa ? (a.warning( 'attribute "' + d + '" missed quot(")!'), s(o, d .replace(/&#?\w+;/g, r), t)) : (Oa .isHTML(i[""]) && d.match( /^(?:disabled|checked|selected)$/i ) || a.warning('attribute "' + d + '" missed value!! "' + d + '" instead!!'), s(d, d, t)); break; case Ba: throw new Error("attribute value missed!!") } return u; case "€": c = " "; default: if (c <= " ") switch (l) { case Ra: n.setTagName(e.slice(t, u)), l = Ha; break; case Na: o = e.slice(t, u), l = Ua; break; case Fa: var d = e.slice(t, u).replace( /&#?\w+;/g, r); a.warning('attribute "' + d + '" missed quot(")!!'), s(o, d, t); case ja: l = Ha } else switch (l) { case Ua: n.tagName, Oa.isHTML(i[""]) && o .match( /^(?:disabled|checked|selected)$/i ) || a.warning( 'attribute "' + o + '" missed value!! "' + o + '" instead2!!'), s(o, o, t), t = u, l = Na; break; case ja: a.warning( 'attribute space is required"' + o + '"!!'); case Ha: l = Na, t = u; break; case Ba: l = Fa, t = u; break; case qa: throw new Error( "elements closed character '/' and '>' must be connected to" ) } } u++ } }(i, y, E, k, s, a), C = E.length; if (!E.closed && function (e, t, i, n) { var r = n[i]; null == r && ((r = e.lastIndexOf("")) < t && (r = e .lastIndexOf("", t), e = e.substring(t + 1, a); if (/[&<]/.test(e)) return /^script$/i.test(i) || (e = e .replace(/&#?\w+;/g, n)), r.characters(e, 0, e .length), a } return t + 1 }(i, v, E.tagName, s, r) : v++ } } catch (e) { if (e instanceof Va) throw e; a.error("element parse error: " + e), v = -1 } f < v ? f = v : t(Math.max(y, f) + 1) } }(e, t, i, n, this.errorHandler), n.endDocument() } }, Ka.prototype = { setTagName: function (e) { if (!Ma.test(e)) throw new Error("invalid tagName:" + e); this.tagName = e }, addValue: function (e, t, i) { if (!Ma.test(e)) throw new Error("invalid attribute:" + e); this.attributeNames[e] = this.length, this[this.length++] = { qName: e, value: t, offset: i } }, length: 0, getLocalName: function (e) { return this[e].localName }, getLocator: function (e) { return this[e].locator }, getQName: function (e) { return this[e].qName }, getURI: function (e) { return this[e].uri }, getValue: function (e) { return this[e].value } }; var x = { XMLReader: Wa, ParseError: Va }, Ya = U.DOMImplementation, Qa = Dr.NAMESPACE, $a = x.ParseError, Ja = x.XMLReader; function Za(e) { this.options = e || { locator: {} } } function es() { this.cdata = !1 } function ts(e, t) { t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber } function is(e) { if (e) return "\n@" + (e.systemId || "") + "#[line:" + e.lineNumber + ",col:" + e.columnNumber + "]" } function ns(e, t, i) { return "string" == typeof e ? e.substr(t, i) : e.length >= t + i || t ? new java.lang.String(e, t, i) + "" : e } function rs(e, t) { (e.currentElement || e.doc).appendChild(t) } Za.prototype.parseFromString = function (e, t) { var i = this.options, n = new Ja, r = i.domBuilder || new es, a = i.errorHandler, s = i.locator, o = i.xmlns || {}, u = /\/x?html?$/.test(t), t = u ? Da.HTML_ENTITIES : Da.XML_ENTITIES; return s && r.setDocumentLocator(s), n.errorHandler = function (n, e, r) { if (!n) { if (e instanceof es) return e; n = e } var a = {}, s = n instanceof Function; function t(t) { var i = n[t]; !i && s && (i = 2 == n.length ? function (e) { n(t, e) } : n), a[t] = i ? function (e) { i("[xmldom " + t + "]\t" + e + is(r)) } : function () { } } return r = r || {}, t("warning"), t("error"), t("fatalError"), a }(a, r, s), n.domBuilder = i.domBuilder || r, u && (o[""] = Qa.HTML), o.xml = o.xml || Qa.XML, e && "string" == typeof e ? n.parse(e, o, t) : n.errorHandler.error("invalid doc source"), r.doc }, es.prototype = { startDocument: function () { this.doc = (new Ya).createDocument(null, null, null), this.locator && (this.doc.documentURI = this.locator.systemId) }, startElement: function (e, t, i, n) { var r = this.doc, a = r.createElementNS(e, i || t), s = n.length; rs(this, a), this.currentElement = a, this.locator && ts(this.locator, a); for (var o = 0; o < s; o++) { var e = n.getURI(o), u = n.getValue(o), i = n.getQName(o), l = r.createAttributeNS(e, i); this.locator && ts(n.getLocator(o), l), l.value = l.nodeValue = u, a.setAttributeNode(l) } }, endElement: function (e, t, i) { var n = this.currentElement; n.tagName, this.currentElement = n.parentNode }, startPrefixMapping: function (e, t) { }, endPrefixMapping: function (e) { }, processingInstruction: function (e, t) { t = this.doc.createProcessingInstruction(e, t); this.locator && ts(this.locator, t), rs(this, t) }, ignorableWhitespace: function (e, t, i) { }, characters: function (e, t, i) { var n; (e = ns.apply(this, arguments)) && (n = this.cdata ? this.doc.createCDATASection(e) : this.doc .createTextNode(e), this.currentElement ? this.currentElement.appendChild(n) : /^\s*$/.test( e) && this.doc.appendChild(n), this.locator && ts(this.locator, n)) }, skippedEntity: function (e) { }, endDocument: function () { this.doc.normalize() }, setDocumentLocator: function (e) { (this.locator = e) && (e.lineNumber = 0) }, comment: function (e, t, i) { e = ns.apply(this, arguments); e = this.doc.createComment(e); this.locator && ts(this.locator, e), rs(this, e) }, startCDATA: function () { this.cdata = !0 }, endCDATA: function () { this.cdata = !1 }, startDTD: function (e, t, i) { var n = this.doc.implementation; n && n.createDocumentType && (i = n.createDocumentType(e, t, i), this.locator && ts(this .locator, i), rs(this, i), this.doc.doctype = i) }, warning: function (e) { }, error: function (e) { }, fatalError: function (e) { throw new $a(e, this.locator) } }, "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl" .replace(/\w+/g, function (e) { es.prototype[e] = function () { return null } }); function as(e) { return !!e && "object" == typeof e } function ss() { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; return t.reduce(function (t, i) { return "object" != typeof i || Object.keys(i).forEach(function (e) { Array.isArray(t[e]) && Array.isArray(i[e]) ? t[e] = t[e].concat(i[e]) : as(t[e]) && as(i[e]) ? t[e] = ss(t[e], i[e]) : t[e] = i[e] }), t }, {}) } function os(t) { return Object.keys(t).map(function (e) { return t[e] }) } function us(e) { return e.reduce(function (e, t) { return e.concat(t) }, []) } function ls(e) { if (!e.length) return []; for (var t = [], i = 0; i < e.length; i++) t.push(e[i]); return t } function cs(e, t) { for (var i = 0; i < e.length; i++) if (t(e[i])) return i; return -1 } function ds(e) { var t = e.baseUrl, i = void 0 === (n = e.source) ? "" : n, n = void 0 === (n = e.range) ? "" : n, e = void 0 === (e = e.indexRange) ? "" : e, i = { uri: i, resolvedUri: ir((void 0 === t ? "" : t) || "", i) }; return (n || e) && (n = (n || e).split("-"), e = window.BigInt ? window.BigInt(n[0]) : parseInt(n[0], 10), n = window.BigInt ? window.BigInt(n[1]) : parseInt(n[1], 10), e < Number.MAX_SAFE_INTEGER && "bigint" == typeof e && (e = Number(e)), "bigint" == typeof (n = "bigint" == typeof (n = n < Number .MAX_SAFE_INTEGER && "bigint" == typeof n ? Number(n) : n) || "bigint" == typeof e ? window .BigInt(n) - window.BigInt(e) + window.BigInt(1) : n - e + 1) && n < Number.MAX_SAFE_INTEGER && (n = Number(n)), i.byterange = { length: n, offset: e }), i } function hs(e) { return e && "number" != typeof e && (e = parseInt(e, 10)), isNaN(e) ? null : e } function ps(e) { var a, t = e.type, i = e.duration, n = e.timescale, r = void 0 === n ? 1 : n, s = e.periodDuration, o = e.sourceDuration, e = function (e, t) { for (var i = [], n = e; n < t; n++) i.push(n); return i }((n = ho[t](e)).start, n.end).map((a = e, function (e) { var t = a.duration, i = a.timescale, n = a.periodStart, r = a.startNumber; return { number: (void 0 === r ? 1 : r) + e, duration: t / (void 0 === i ? 1 : i), timeline: n, time: e * t } })); return "static" === t && (e[t = e.length - 1].duration = ("number" == typeof s ? s : o) - i / r * t), e } function fs(e) { var t = e.baseUrl, i = void 0 === (u = e.initialization) ? {} : u, n = e.sourceDuration, r = void 0 === (o = e.indexRange) ? "" : o, a = e.periodStart, s = e.presentationTime, o = void 0 === (u = e.number) ? 0 : u, u = e.duration; if (!t) throw new Error(uo); return i = ds({ baseUrl: t, source: i.sourceURL, range: i.range }), (r = ds({ baseUrl: t, source: t, indexRange: r })).map = i, u ? (e = ps(e)).length && (r.duration = e[0].duration, r.timeline = e[0].timeline) : n && ( r.duration = n, r.timeline = a), r.presentationTime = s || a, r.number = o, [r] } function ms(e, t, i) { for (var n = e.sidx.map || null, r = e.sidx.duration, a = e.timeline || 0, s = (s = e.sidx.byterange) .offset + s.length, o = t.timescale, u = t.references.filter(function (e) { return 1 !== e.referenceType }), l = [], c = e.endList ? "static" : "dynamic", d = e.sidx.timeline, h = d, p = e.mediaSequence || 0, f = "bigint" == typeof t.firstOffset ? window.BigInt(s) + t.firstOffset : s + t.firstOffset, m = 0; m < u.length; m++) { var g = t.references[m], y = g.referencedSize, v = g.subsegmentDuration, g = void 0, g = "bigint" == typeof f ? f + window.BigInt(y) - window.BigInt(1) : f + y - 1, g = fs({ baseUrl: i, timescale: o, timeline: a, periodStart: d, presentationTime: h, number: p, duration: v, sourceDuration: r, indexRange: f + "-" + g, type: c })[0]; n && (g.map = n), l.push(g), f += "bigint" == typeof f ? window.BigInt(y) : y, h += v / o, p++ } return e.segments = l, e } function gs(e) { return i = function (e) { return e.timeline }, os(e.reduce(function (t, e) { return e.forEach(function (e) { t[i(e)] = e }), t }, {})).sort(function (e, t) { return e.timeline > t.timeline ? 1 : -1 }); var i } function ys(e) { var r, a, s = []; return r = e, a = function (e, t, i, n) { s = s.concat(e.playlists || []) }, po.forEach(function (e) { for (var t in r.mediaGroups[e]) for (var i in r.mediaGroups[e][t]) { var n = r.mediaGroups[e][t][i]; a(n, e, t, i) } }), s } function vs(e) { var i = e.playlist, e = e.mediaSequence; i.mediaSequence = e, i.segments.forEach(function (e, t) { e.number = i.mediaSequence + t }) } function _s(e) { var r, a, t = e.oldManifest, i = e.newManifest, n = t.playlists.concat(ys(t)), e = i.playlists.concat(ys(i)); return i.timelineStarts = gs([t.timelineStarts, i.timelineStarts]), n = { oldPlaylists: n, newPlaylists: e, timelineStarts: i.timelineStarts }, r = n.oldPlaylists, e = n.newPlaylists, a = n.timelineStarts, e.forEach(function (t) { t.discontinuitySequence = cs(a, function (e) { return e.timeline === t.timeline }); var e = function (e, t) { for (var i = 0; i < e.length; i++) if (e[i].attributes.NAME === t) return e[i]; return null }(r, t.attributes.NAME); if (e && !t.sidx) { var i = t.segments[0], n = cs(e.segments, function (e) { return Math.abs(e.presentationTime - i.presentationTime) < 1 / 60 }); if (-1 === n) return vs({ playlist: t, mediaSequence: e.mediaSequence + e.segments.length }), t.segments[0].discontinuity = !0, t.discontinuityStarts.unshift(0), void ((!e .segments.length && t.timeline > e.timeline || e.segments.length && t .timeline > e.segments[e.segments.length - 1].timeline) && t .discontinuitySequence--); e.segments[n].discontinuity && !i.discontinuity && (i.discontinuity = !0, t .discontinuityStarts.unshift(0), t.discontinuitySequence--), vs({ playlist: t, mediaSequence: e.segments[n].number }) } }), i } function bs(e) { return e && e.uri + "-" + (t = e.byterange, e = "bigint" == typeof t.offset || "bigint" == typeof t.length ? window.BigInt(t.offset) + window.BigInt(t.length) - window.BigInt(1) : t.offset + t.length - 1, t .offset + "-" + e); var t } function Ts(e) { return os(e.reduce(function (e, t) { var i, n = t.attributes.id + (t.attributes.lang || ""); return e[n] ? (t.segments && (t.segments[0] && (t.segments[0].discontinuity = !0), (i = e[n] .segments).push.apply(i, t.segments)), t.attributes.contentProtection && (e[n] .attributes.contentProtection = t.attributes.contentProtection)) : (e[n] = t, e[n] .attributes.timelineStarts = []), e[n].attributes.timelineStarts.push({ start: t.attributes.periodStart, timeline: t.attributes.periodStart }), e }, {})).map(function (e) { var t, n; return e.discontinuityStarts = (t = e.segments || [], n = "discontinuity", t.reduce(function (e, t, i) { return t[n] && e.push(i), e }, [])), e }) } function Ss(e, t) { var i = bs(e.sidx); return (i = i && t[i] && t[i].sidx) && ms(e, i, e.sidx.resolvedUri), e } function ws(e, h, p) { var f; return void 0 === h && (h = {}), void 0 === p && (p = !1), e = e.reduce(function (e, t) { var i = t.attributes.role && t.attributes.role.value || "", n = t.attributes.lang || "", r = t.attributes.label || "main"; e[r = n && !t.attributes.label ? t.attributes.lang + (i ? " (" + i + ")" : "") : r] || (e[r] = { language: n, autoselect: !0, default: "main" === i, playlists: [], uri: "" }); var a, s, o, u, l, c, d, u = Ss((s = p, o = (a = t).attributes, u = a.segments, l = a.sidx, c = a.mediaSequence, d = a.discontinuitySequence, n = a.discontinuityStarts, u = { attributes: ((a = { NAME: o.id, BANDWIDTH: o.bandwidth, CODECS: o.codecs })["PROGRAM-ID"] = 1, a), uri: "", endList: "static" === o.type, timeline: o.periodStart, resolvedUri: "", targetDuration: o.duration, discontinuitySequence: d, discontinuityStarts: n, timelineStarts: o.timelineStarts, mediaSequence: c, segments: u }, o.contentProtection && (u.contentProtection = o.contentProtection), l && (u .sidx = l), s && (u.attributes.AUDIO = "audio", u.attributes.SUBTITLES = "subs"), u), h); return e[r].playlists.push(u), "undefined" == typeof f && "main" === i && ((f = t).default = ! 0), e }, {}), f || (e[Object.keys(e)[0]].default = !0), e } function Es(e) { var t = e.attributes, i = e.segments, n = e.sidx, r = e.discontinuityStarts, i = { attributes: ((e = { NAME: t.id, AUDIO: "audio", SUBTITLES: "subs", RESOLUTION: { width: t.width, height: t.height }, CODECS: t.codecs, BANDWIDTH: t.bandwidth })["PROGRAM-ID"] = 1, e), uri: "", endList: "static" === t.type, timeline: t.periodStart, resolvedUri: "", targetDuration: t.duration, discontinuityStarts: r, timelineStarts: t.timelineStarts, segments: i }; return t.contentProtection && (i.contentProtection = t.contentProtection), n && (i.sidx = n), i } function ks(e) { return "video/mp4" === (e = e.attributes).mimeType || "video/webm" === e.mimeType || "video" === e .contentType } function Cs(e) { return "audio/mp4" === (e = e.attributes).mimeType || "audio/webm" === e.mimeType || "audio" === e .contentType } function Is(e) { return "text/vtt" === (e = e.attributes).mimeType || "text" === e.contentType } function xs(i) { return i ? Object.keys(i).reduce(function (e, t) { t = i[t]; return e.concat(t.playlists) }, []) : [] } function As(e) { var t = e.dashPlaylists, i = e.locations, n = void 0 === (c = e.sidxMapping) ? {} : c, r = e.previousManifest; if (!t.length) return {}; var a = (d = t[0].attributes).sourceDuration, s = d.type, o = d.suggestedPresentationDelay, u = d.minimumUpdatePeriod, l = Ts(t.filter(ks)).map(Es), c = Ts(t.filter(Cs)), e = Ts(t.filter(Is)), d = t.map(function (e) { return e.attributes.captionServices }).filter(Boolean), a = { allowCache: !0, discontinuityStarts: [], segments: [], endList: !0, mediaGroups: ((t = { AUDIO: {}, VIDEO: {} })["CLOSED-CAPTIONS"] = {}, t.SUBTITLES = {}, t), uri: "", duration: a, playlists: function (e, t) { if (void 0 === t && (t = {}), !Object.keys(t).length) return e; for (var i in e) e[i] = Ss(e[i], t); return e }(l, n) }; 0 <= u && (a.minimumUpdatePeriod = 1e3 * u), i && (a.locations = i), "dynamic" === s && (a .suggestedPresentationDelay = o); var h, p, o = 0 === a.playlists.length, o = c.length ? ws(c, n, o) : null, n = e.length ? (void 0 === (h = n) && (h = {}), e.reduce(function (e, t) { var i = t.attributes.lang || "text"; return e[i] || (e[i] = { language: i, default: !1, autoselect: !1, playlists: [], uri: "" }), e[i].playlists.push(Ss(function (e) { var t = e.attributes, i = e.segments, n = e.mediaSequence, r = e.discontinuityStarts, a = e.discontinuitySequence; "undefined" == typeof i && (i = [{ uri: t.baseUrl, timeline: t.periodStart, resolvedUri: t.baseUrl || "", duration: t.sourceDuration, number: 0 }], t.duration = t.sourceDuration); (e = { NAME: t.id, BANDWIDTH: t.bandwidth })["PROGRAM-ID"] = 1; return t.codecs && (e.CODECS = t.codecs), { attributes: e, uri: "", endList: "static" === t.type, timeline: t.periodStart, resolvedUri: t.baseUrl || "", targetDuration: t.duration, timelineStarts: t.timelineStarts, discontinuityStarts: r, discontinuitySequence: a, mediaSequence: n, segments: i } }(t), h)), e }, {})) : null, l = (e = l.concat(xs(o), xs(n))).map(function (e) { return e.timelineStarts }); return a.timelineStarts = gs(l), e = e, p = a.timelineStarts, e.forEach(function (t) { t.mediaSequence = 0, t.discontinuitySequence = cs(p, function (e) { return e.timeline === t.timeline }), t.segments && t.segments.forEach(function (e, t) { e.number = t }) }), o && (a.mediaGroups.AUDIO.audio = o), n && (a.mediaGroups.SUBTITLES.subs = n), d.length && (a .mediaGroups["CLOSED-CAPTIONS"].cc = d.reduce(function (n, e) { return e && e.forEach(function (e) { var t = e.channel, i = e.language; n[i] = { autoselect: !1, default: !1, instreamId: t, language: i }, e.hasOwnProperty("aspectRatio") && (n[i].aspectRatio = e.aspectRatio), e .hasOwnProperty("easyReader") && (n[i].easyReader = e.easyReader), e .hasOwnProperty("3D") && (n[i]["3D"] = e["3D"]) }), n }, {})), r ? _s({ oldManifest: r, newManifest: a }) : a } function Ps(e, t) { for (var i, n, r, a, s, o, u = e.type, l = e.minimumUpdatePeriod, c = void 0 === l ? 0 : l, d = void 0 === ( l = e.media) ? "" : l, h = e.sourceDuration, p = void 0 === (l = e.timescale) ? 1 : l, f = void 0 === (l = e.startNumber) ? 1 : l, m = e.periodStart, g = [], y = -1, v = 0; v < t .length; v++) { var _ = t[v], b = _.d, T = _.r || 0, S = _.t || 0; y < 0 && (y = S), S && y < S && (y = S); var w, E = void 0; E = T < 0 ? (w = v + 1) === t.length ? "dynamic" === u && 0 < c && 0 < d.indexOf("$Number$") ? (i = y, n = b, _ = o = s = a = r = void 0, r = (S = e).NOW, a = S.clientOffset, s = S .availabilityStartTime, o = S.timescale, _ = S.periodStart, S = S.minimumUpdatePeriod, Math .ceil((((r + a) / 1e3 + (void 0 === S ? 0 : S) - (s + (void 0 === _ ? 0 : _))) * (void 0 === o ? 1 : o) - i) / n)) : (h * p - y) / b : (t[w].t - y) / b : T + 1; for (var k = f + g.length + E, C = f + g.length; C < k;) g.push({ number: C, duration: b / p, time: y, timeline: m }), y += b, C++ } return g } function Ls(e, t) { return e.replace(fo, (r = t, function (e, t, i, n) { if ("$$" === e) return "$"; if ("undefined" == typeof r[t]) return e; e = "" + r[t]; return "RepresentationID" === t || (n = i ? parseInt(n, 10) : 1) <= e.length ? e : new Array(n - e.length + 1).join("0") + e })); var r } function Ds(r, e) { var a = { RepresentationID: r.id, Bandwidth: r.bandwidth || 0 }, t = void 0 === (t = r.initialization) ? { sourceURL: "", range: "" } : t, s = ds({ baseUrl: r.baseUrl, source: Ls(t.sourceURL, a), range: t.range }); return (t = e, (e = r).duration || t ? e.duration ? ps(e) : Ps(e, t) : [{ number: e.startNumber || 1, duration: e.sourceDuration, time: 0, timeline: e.periodStart }]).map(function (e) { a.Number = e.number, a.Time = e.time; var t = Ls(r.media || "", a), i = r.timescale || 1, n = r.presentationTimeOffset || 0, i = r.periodStart + (e.time - n) / i; return { uri: t, timeline: e.timeline, duration: e.duration, resolvedUri: ir(r.baseUrl || "", t), map: s, number: e.number, presentationTime: i } }) } function Os(r, e) { var t = r.duration, i = void 0 === (i = r.segmentUrls) ? [] : i, a = r.periodStart; if (!t && !e || t && e) throw new Error(lo); var n, s = i.map(function (e) { return i = e, e = (t = r).baseUrl, t = t.initialization, t = ds({ baseUrl: e, source: (t = void 0 === t ? {} : t).sourceURL, range: t.range }), (i = ds({ baseUrl: e, source: i.media, range: i.mediaRange })).map = t, i; var t, i }); return t && (n = ps(r)), (n = e ? Ps(r, e) : n).map(function (e, t) { if (s[t]) { var i = s[t], n = r.timescale || 1, t = r.presentationTimeOffset || 0; return i.timeline = e.timeline, i.duration = e.duration, i.number = e.number, i .presentationTime = a + (e.time - t) / n, i } }).filter(function (e) { return e }) } function Ms(e) { var t, i = e.attributes, n = e.segmentInfo; n.template ? (a = Ds, t = ss(i, n.template)) : n.base ? (a = fs, t = ss(i, n.base)) : n.list && (a = Os, t = ss(i, n.list)); var r = { attributes: i }; if (!a) return r; var a, e = a(t, n.segmentTimeline); return t.duration ? (i = t.duration, a = t.timescale, t.duration = i / (void 0 === a ? 1 : a)) : e.length ? t.duration = e.reduce(function (e, t) { return Math.max(e, Math.ceil(t.duration)) }, 0) : t.duration = 0, r.attributes = t, r.segments = e, n.base && t.indexRange && (r.sidx = e[0], r .segments = []), r } function Rs(e, t) { return ls(e.childNodes).filter(function (e) { return e.tagName === t }) } function Ns(e) { return e.textContent.trim() } function Us(e) { if (!(r = /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/.exec(e))) return 0; var t = (a = r.slice(1))[0], i = a[1], n = a[2], e = a[3], r = a[4], a = a[5]; return 31536e3 * parseFloat(t || 0) + 2592e3 * parseFloat(i || 0) + 86400 * parseFloat(n || 0) + 3600 * parseFloat(e || 0) + 60 * parseFloat(r || 0) + parseFloat(a || 0) } function Bs(e) { return e && e.attributes ? ls(e.attributes).reduce(function (e, t) { var i = mo[t.name] || mo.DEFAULT; return e[t.name] = i(t.value), e }, {}) : {} } function Fs(e, i) { return i.length ? us(e.map(function (t) { return i.map(function (e) { return ir(t, Ns(e)) }) })) : e } function js(e) { var t = Rs(e, "SegmentTemplate")[0], i = Rs(e, "SegmentList")[0], n = i && Rs(i, "SegmentURL").map(function (e) { return ss({ tag: "SegmentURL" }, Bs(e)) }), r = Rs(e, "SegmentBase")[0], e = (a = i || t) && Rs(a, "SegmentTimeline")[0], a = (a = i || r || t) && Rs(a, "Initialization")[0]; (t = t && Bs(t)) && a ? t.initialization = a && Bs(a) : t && t.initialization && (t.initialization = { sourceURL: t.initialization }); var s = { template: t, segmentTimeline: e && Rs(e, "S").map(Bs), list: i && ss(Bs(i), { segmentUrls: n, initialization: Bs(a) }), base: r && ss(Bs(r), { initialization: Bs(a) }) }; return Object.keys(s).forEach(function (e) { s[e] || delete s[e] }), s } function Hs(u, l, c) { return function (e) { var t = Bs(e), i = Fs(l, Rs(e, "BaseURL")), n = Rs(e, "Role")[0], n = { role: Bs(n) }, t = ss(u, t, n), n = Rs(e, "Accessibility")[0], n = "urn:scte:dash:cc:cea-608:2015" === (n = Bs(n)).schemeIdUri ? ("string" != typeof n.value ? [] : n.value.split(";")).map(function (e) { var t, i, n; return /^CC\d=/.test(n = e) ? (i = (t = e.split("="))[0], n = t[1]) : /^CC\d$/.test( e) && (i = e), { channel: i, language: n } }) : "urn:scte:dash:cc:cea-708:2015" === n.schemeIdUri ? ("string" != typeof n.value ? [] : n .value.split(";")).map(function (e) { var t, i, n = { channel: void 0, language: void 0, aspectRatio: 1, easyReader: 0, "3D": 0 }; return /=/.test(e) ? (t = (i = e.split("="))[0], i = void 0 === (i = i[1]) ? "" : i, n .channel = t, n.language = e, i.split(",").forEach(function (e) { var t = e.split(":"), e = t[0], t = t[1]; "lang" === e ? n.language = t : "er" === e ? n.easyReader = Number(t) : "war" === e ? n.aspectRatio = Number(t) : "3D" === e && (n["3D"] = Number(t)) })) : n.language = e, n.channel && (n.channel = "SERVICE" + n.channel), n }) : void 0; n && (t = ss(t, { captionServices: n })); n = Rs(e, "Label")[0]; n && n.childNodes.length && (r = n.childNodes[0].nodeValue.trim(), t = ss(t, { label: r })); var r = Rs(e, "ContentProtection").reduce(function (e, t) { var i = Bs(t), n = go[i.schemeIdUri]; return n && (e[n] = { attributes: i }, (t = Rs(t, "cenc:pssh")[0]) && (t = (t = Ns(t)) && or(t), e[n].pssh = t)), e }, {}); Object.keys(r).length && (t = ss(t, { contentProtection: r })); var a, s, o, r = js(e), e = Rs(e, "Representation"), r = ss(c, r); return us(e.map((a = t, s = i, o = r, function (e) { var t = Rs(e, "BaseURL"), t = Fs(s, t), i = ss(a, Bs(e)), n = js(e); return t.map(function (e) { return { segmentInfo: ss(o, n), attributes: ss(i, { baseUrl: e }) } }) }))) } } function qs(e, t) { var i = t = void 0 === t ? {} : t, n = void 0 === (a = i.manifestUri) ? "" : a, t = void 0 === (r = i.NOW) ? Date.now() : r, r = void 0 === (a = i.clientOffset) ? 0 : a; if (!(i = Rs(e, "Period")).length) throw new Error(ao); var a = Rs(e, "Location"), s = Bs(e), e = Fs([n], Rs(e, "BaseURL")); s.type = s.type || "static", s.sourceDuration = s.mediaPresentationDuration || 0, s.NOW = t, s .clientOffset = r, a.length && (s.locations = a.map(Ns)); var o, u, l = []; return i.forEach(function (e, t) { var i, n = Bs(e), r = l[t - 1]; n.start = (i = { attributes: n, priorPeriodAttributes: r ? r.attributes : null, mpdType: s.type }, t = i.attributes, r = i.priorPeriodAttributes, i = i.mpdType, "number" == typeof t .start ? t.start : r && "number" == typeof r.start && "number" == typeof r.duration ? r .start + r.duration : r || "static" !== i ? null : 0), l.push({ node: e, attributes: n }) }), { locations: s.locations, representationInfo: us(l.map((o = s, u = e, function (e, t) { var i = Fs(u, Rs(e.node, "BaseURL")), n = ss(o, { periodStart: e.attributes.start }); "number" == typeof e.attributes.duration && (n.periodDuration = e.attributes .duration); var r = Rs(e.node, "AdaptationSet"), e = js(e.node); return us(r.map(Hs(n, i, e))) }))) } } function Vs(e) { if ("" === e) throw new Error(so); var t, i, n = new ro; try { i = (t = n.parseFromString(e, "application/xml")) && "MPD" === t.documentElement.tagName ? t .documentElement : null } catch (e) { } if (!i || i && 0 < i.getElementsByTagName("parsererror").length) throw new Error(oo); return i } function Ws(e, t) { void 0 === t && (t = {}); var i = qs(Vs(e), t), e = i.representationInfo.map(Ms); return As({ dashPlaylists: e, locations: i.locations, sidxMapping: t.sidxMapping, previousManifest: t.previousManifest }) } function Gs(e) { return function (e) { e = Rs(e, "UTCTiming")[0]; if (!e) return null; var t = Bs(e); switch (t.schemeIdUri) { case "urn:mpeg:dash:utc:http-head:2014": case "urn:mpeg:dash:utc:http-head:2012": t.method = "HEAD"; break; case "urn:mpeg:dash:utc:http-xsdate:2014": case "urn:mpeg:dash:utc:http-iso:2014": case "urn:mpeg:dash:utc:http-xsdate:2012": case "urn:mpeg:dash:utc:http-iso:2012": t.method = "GET"; break; case "urn:mpeg:dash:utc:direct:2014": case "urn:mpeg:dash:utc:direct:2012": t.method = "DIRECT", t.value = Date.parse(t.value); break; case "urn:mpeg:dash:utc:http-ntp:2014": case "urn:mpeg:dash:utc:ntp:2014": case "urn:mpeg:dash:utc:sntp:2014": default: throw new Error(co) } return t }(Vs(e)) } function zs(e) { return e instanceof Uint8Array ? e : (Array.isArray(e) || (t = e, ArrayBuffer.isView(t)) || e instanceof ArrayBuffer || (e = "number" != typeof e || "number" == typeof e && e != e ? 0 : [e]), new Uint8Array(e && e.buffer || e, e && e.byteOffset || 0, e && e.byteLength || 0)); var t } function Xs(e, t) { var i = void 0 !== (t = (void 0 === t ? {} : t).le) && t; e = bo(e = "bigint" != typeof e && "number" != typeof e || "number" == typeof e && e != e ? 0 : e); for (var n = (t = e, Math.ceil(t.toString(2).length / 8)), r = new Uint8Array(new ArrayBuffer(n)), a = 0; a < n; a++) { var s = i ? a : Math.abs(a + 1 - r.length); r[s] = Number(e / To[a] & bo(255)), e < 0 && (r[s] = Math.abs(~r[s]), r[s] -= 0 === a ? 1 : 2) } return r } function Ks(e, t) { if ("string" != typeof (e = "string" != typeof e && e && "function" == typeof e.toString ? e.toString() : e)) return new Uint8Array; t || (e = unescape(encodeURIComponent(e))); for (var i = new Uint8Array(e.length), n = 0; n < e.length; n++) i[n] = e.charCodeAt(n); return i } function Ys(i, e, t) { var n = void 0 === t ? {} : t, r = void 0 === (t = n.offset) ? 0 : t, a = void 0 === (n = n.mask) ? [] : n; return i = zs(i), n = (e = zs(e)).every || Array.prototype.every, e.length && i.length - r >= e.length && n .call(e, function (e, t) { return e === (a[t] ? a[t] & i[r + t] : i[r + t]) }) } function Qs(e, t) { return void 0 === t && (t = 0), (e = zs(e)).length - t < 10 || !Ys(e, So, { offset: t }) ? t : Qs(e, t += function (e, t) { void 0 === t && (t = 0); var i = (e = zs(e))[t + 5], t = e[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9]; return (16 & i) >> 4 ? 20 + t : 10 + t }(e, t)) } function $s(e) { return "string" == typeof e ? Ks(e) : e } function Js(e, t, i) { var n; void 0 === i && (i = !1), n = t, t = Array.isArray(n) ? n.map($s) : [$s(n)], e = zs(e); var r = []; if (!t.length) return r; for (var a = 0; a < e.length;) { var s = (e[a] << 24 | e[a + 1] << 16 | e[a + 2] << 8 | e[a + 3]) >>> 0, o = e.subarray(a + 4, a + 8); if (0 == s) break; var u = a + s; if (u > e.length) { if (i) break; u = e.length } s = e.subarray(a + 8, u); Ys(o, t[0]) && (1 === t.length ? r.push(s) : r.push.apply(r, Js(s, t.slice(1), i))), a = u } return r } function Zs(e, t, i, n) { void 0 === i && (i = !0), void 0 === n && (n = !1); var r = function (e) { for (var t = 1, i = 0; i < Eo.length && !(e & Eo[i]); i++) t++; return t }(e[t]), a = e.subarray(t, t + r); return i && ((a = Array.prototype.slice.call(e, t, t + r))[0] ^= Eo[r - 1]), { length: r, value: function (n, e) { var t = void 0 === e ? {} : e, e = t.signed, e = void 0 !== e && e, t = t.le, r = void 0 !== t && t; n = zs(n); t = r ? "reduce" : "reduceRight", t = (n[t] || Array.prototype[t]).call(n, function (e, t, i) { i = r ? i : Math.abs(i + 1 - n.length); return e + bo(t) * To[i] }, bo(0)); return !e || (e = To[n.length] / bo(2) - bo(1)) < (t = bo(t)) && (t -= e, t -= e, t -= bo( 2)), Number(t) }(a, { signed: n }), bytes: a } } function eo(e) { return "string" == typeof e ? e.match(/.{1,2}/g).map(eo) : "number" == typeof e ? Xs(e) : e } function to(e, t, i) { if (i >= t.length) return t.length; var n = Zs(t, i, !1); if (Ys(e.bytes, n.bytes)) return i; var r = Zs(t, i + n.length); return to(e, t, i + r.length + r.value + n.length) } function io(e, t) { var i; i = t, t = Array.isArray(i) ? i.map(eo) : [eo(i)], e = zs(e); var n = []; if (!t.length) return n; for (var r = 0; r < e.length;) { var a = Zs(e, r, !1), s = Zs(e, r + a.length), o = r + a.length + s.length; 127 === s.value && (s.value = to(a, e, o), s.value !== e.length && (s.value -= o)); var u = o + s.value > e.length ? e.length : o + s.value, u = e.subarray(o, u); Ys(t[0], a.bytes) && (1 === t.length ? n.push(u) : n = n.concat(io(u, t.slice(1)))), r += a.length + s .length + u.length } return n } function no(e, t, i, n) { void 0 === n && (n = 1 / 0), e = zs(e), i = [].concat(i); for (var r, a = 0, s = 0; a < e.length && (s < n || r);) { var o = void 0; if (Ys(e.subarray(a), ko) ? o = 4 : Ys(e.subarray(a), Co) && (o = 3), o) { if (s++, r) return function (e) { for (var t = [], i = 1; i < e.length - 2;) Ys(e.subarray(i, i + 3), Io) && (t.push(i + 2), i++), i++; if (0 === t.length) return e; for (var n = e.length - t.length, r = new Uint8Array(n), a = 0, i = 0; i < n; a++, i++) a === t[0] && (a++, t.shift()), r[i] = e[a]; return r }(e.subarray(r, a)); var u = void 0; "h264" === t ? u = 31 & e[a + o] : "h265" === t && (u = e[a + o] >> 1 & 63), -1 !== i.indexOf(u) && (r = a + o), a += o + ("h264" === t ? 1 : 2) } else a++ } return e.subarray(0, 0) } var ro = { __DOMHandler: es, DOMParser: Za, DOMImplementation: U.DOMImplementation, XMLSerializer: U.XMLSerializer }.DOMParser, ao = "INVALID_NUMBER_OF_PERIOD", so = "DASH_EMPTY_MANIFEST", oo = "DASH_INVALID_XML", uo = "NO_BASE_URL", lo = "SEGMENT_TIME_UNSPECIFIED", co = "UNSUPPORTED_UTC_TIMING_SCHEME", ho = { static: function (e) { var t = e.duration, i = e.timescale, n = void 0 === i ? 1 : i, r = e.sourceDuration, i = e.periodDuration, e = hs(e.endNumber), n = t / n; return "number" == typeof e ? { start: 0, end: e } : "number" == typeof i ? { start: 0, end: i / n } : { start: 0, end: r / n } }, dynamic: function (e) { var t = e.NOW, i = e.clientOffset, n = e.availabilityStartTime, r = e.timescale, a = void 0 === r ? 1 : r, s = e.duration, o = e.periodStart, u = void 0 === o ? 0 : o, r = e.minimumUpdatePeriod, o = void 0 === r ? 0 : r, r = e.timeShiftBufferDepth, r = void 0 === r ? 1 / 0 : r, e = hs(e.endNumber), i = (t + i) / 1e3, u = n + u, o = Math.ceil((i + o - u) * a / s), r = Math.floor((i - u - r) * a / s), s = Math.floor((i - u) * a / s); return { start: Math.max(0, r), end: "number" == typeof e ? e : Math.min(o, s) } } }, po = ["AUDIO", "SUBTITLES"], fo = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g, mo = { mediaPresentationDuration: Us, availabilityStartTime: function (e) { return /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(e = e) && (e += "Z"), Date.parse(e) / 1e3 }, minimumUpdatePeriod: Us, suggestedPresentationDelay: Us, type: function (e) { return e }, timeShiftBufferDepth: Us, start: Us, width: function (e) { return parseInt(e, 10) }, height: function (e) { return parseInt(e, 10) }, bandwidth: function (e) { return parseInt(e, 10) }, startNumber: function (e) { return parseInt(e, 10) }, timescale: function (e) { return parseInt(e, 10) }, presentationTimeOffset: function (e) { return parseInt(e, 10) }, duration: function (e) { var t = parseInt(e, 10); return isNaN(t) ? Us(e) : t }, d: function (e) { return parseInt(e, 10) }, t: function (e) { return parseInt(e, 10) }, r: function (e) { return parseInt(e, 10) }, DEFAULT: function (e) { return e } }, go = { "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b": "org.w3.clearkey", "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed": "com.widevine.alpha", "urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95": "com.microsoft.playready", "urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb": "com.adobe.primetime" }, yo = Math.pow(2, 32), vo = function (e) { var t = new DataView(e.buffer, e.byteOffset, e.byteLength); return t.getBigUint64 ? (e = t.getBigUint64(0)) < Number.MAX_SAFE_INTEGER ? Number(e) : e : t.getUint32( 0) * yo + t.getUint32(4) }, _o = function (e) { var t = new DataView(e.buffer, e.byteOffset, e.byteLength), i = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)), references: [], referenceId: t.getUint32(4), timescale: t.getUint32(8) }, n = 12; 0 === i.version ? (i.earliestPresentationTime = t.getUint32(n), i.firstOffset = t.getUint32(n + 4), n += 8) : (i.earliestPresentationTime = vo(e.subarray(n)), i.firstOffset = vo(e.subarray(n + 8)), n += 16); var r = t.getUint16(n += 2); for (n += 2; 0 < r; n += 12, r--) i.references.push({ referenceType: (128 & e[n]) >>> 7, referencedSize: 2147483647 & t.getUint32(n), subsegmentDuration: t.getUint32(n + 4), startsWithSap: !!(128 & e[n + 8]), sapType: (112 & e[n + 8]) >>> 4, sapDeltaTime: 268435455 & t.getUint32(n + 8) }); return i }, bo = window.BigInt || Number, To = [bo("0x1"), bo("0x100"), bo("0x10000"), bo("0x1000000"), bo("0x100000000"), bo("0x10000000000"), bo( "0x1000000000000"), bo("0x100000000000000"), bo("0x10000000000000000")], So = zs([73, 68, 51]), wo = { EBML: zs([26, 69, 223, 163]), DocType: zs([66, 130]), Segment: zs([24, 83, 128, 103]), SegmentInfo: zs([21, 73, 169, 102]), Tracks: zs([22, 84, 174, 107]), Track: zs([174]), TrackNumber: zs([215]), DefaultDuration: zs([35, 227, 131]), TrackEntry: zs([174]), TrackType: zs([131]), FlagDefault: zs([136]), CodecID: zs([134]), CodecPrivate: zs([99, 162]), VideoTrack: zs([224]), AudioTrack: zs([225]), Cluster: zs([31, 67, 182, 117]), Timestamp: zs([231]), TimestampScale: zs([42, 215, 177]), BlockGroup: zs([160]), BlockDuration: zs([155]), Block: zs([161]), SimpleBlock: zs([163]) }, Eo = [128, 64, 32, 16, 8, 4, 2, 1], ko = zs([0, 0, 0, 1]), Co = zs([0, 0, 1]), Io = zs([0, 0, 3]), xo = { webm: zs([119, 101, 98, 109]), matroska: zs([109, 97, 116, 114, 111, 115, 107, 97]), flac: zs([102, 76, 97, 67]), ogg: zs([79, 103, 103, 83]), ac3: zs([11, 119]), riff: zs([82, 73, 70, 70]), avi: zs([65, 86, 73]), wav: zs([87, 65, 86, 69]), "3gp": zs([102, 116, 121, 112, 51, 103]), mp4: zs([102, 116, 121, 112]), fmp4: zs([115, 116, 121, 112]), mov: zs([102, 116, 121, 112, 113, 116]), moov: zs([109, 111, 111, 118]), moof: zs([109, 111, 111, 102]) }, Ao = { aac: function (e) { var t = Qs(e); return Ys(e, [255, 16], { offset: t, mask: [255, 22] }) }, mp3: function (e) { var t = Qs(e); return Ys(e, [255, 2], { offset: t, mask: [255, 6] }) }, webm: function (e) { e = io(e, [wo.EBML, wo.DocType])[0]; return Ys(e, xo.webm) }, mkv: function (e) { e = io(e, [wo.EBML, wo.DocType])[0]; return Ys(e, xo.matroska) }, mp4: function (e) { return !Ao["3gp"](e) && !Ao.mov(e) && (!(!Ys(e, xo.mp4, { offset: 4 }) && !Ys(e, xo.fmp4, { offset: 4 })) || (!(!Ys(e, xo.moof, { offset: 4 }) && !Ys(e, xo.moov, { offset: 4 })) || void 0)) }, mov: function (e) { return Ys(e, xo.mov, { offset: 4 }) }, "3gp": function (e) { return Ys(e, xo["3gp"], { offset: 4 }) }, ac3: function (e) { var t = Qs(e); return Ys(e, xo.ac3, { offset: t }) }, ts: function (e) { if (e.length < 189 && 1 <= e.length) return 71 === e[0]; for (var t = 0; t + 188 < e.length && t < 188;) { if (71 === e[t] && 71 === e[t + 188]) return !0; t += 1 } return !1 }, flac: function (e) { var t = Qs(e); return Ys(e, xo.flac, { offset: t }) }, ogg: function (e) { return Ys(e, xo.ogg) }, avi: function (e) { return Ys(e, xo.riff) && Ys(e, xo.avi, { offset: 8 }) }, wav: function (e) { return Ys(e, xo.riff) && Ys(e, xo.wav, { offset: 8 }) }, h264: function (e) { return no(e, "h264", 7, 3).length }, h265: function (e) { return no(e, "h265", [32, 33], 3).length } }, Po = Object.keys(Ao).filter(function (e) { return "ts" !== e && "h264" !== e && "h265" !== e }).concat(["ts", "h264", "h265"]); Po.forEach(function (e) { var t = Ao[e]; Ao[e] = function (e) { return t(zs(e)) } }); function Lo(e) { e = zs(e); for (var t = 0; t < Po.length; t++) { var i = Po[t]; if (ll[i](e)) return i } return "" } function Do(e, t, i) { return e && i && i.responseURL && t !== i.responseURL ? i.responseURL : t } function Oo(e) { return tr.log.debug ? tr.log.debug.bind(tr, "VHS:", e + " >") : function () { } } function Mo(e, t) { var i, n = []; if (e && e.length) for (i = 0; i < e.length; i++) t(e.start(i), e.end(i)) && n.push([e.start(i), e.end(i)]); return tr.createTimeRanges(n) } function Ro(e, i) { return Mo(e, function (e, t) { return e - .1 <= i && i <= t + .1 }) } function No(e, t) { return Mo(e, function (e) { return t <= e - hl }) } function Uo(e) { var t = []; if (!e || !e.length) return ""; for (var i = 0; i < e.length; i++) t.push(e.start(i) + " => " + e.end(i)); return t.join(", ") } function Bo(e) { for (var t = [], i = 0; i < e.length; i++) t.push({ start: e.start(i), end: e.end(i) }); return t } function Fo(e) { if (e && e.length && e.end) return e.end(e.length - 1) } function jo(e, t) { var i = 0; if (!e || !e.length) return i; for (var n = 0; n < e.length; n++) { var r = e.start(n), a = e.end(n); a < t || (i += r < t && t <= a ? a - t : a - r) } return i } function Ho(t, e) { if (!e.preload) return e.duration; var i = 0; return (e.parts || []).forEach(function (e) { i += e.duration }), (e.preloadHints || []).forEach(function (e) { "PART" === e.type && (i += t.partTargetDuration) }), i } function qo(e) { return (e.segments || []).reduce(function (i, n, r) { return n.parts ? n.parts.forEach(function (e, t) { i.push({ duration: e.duration, segmentIndex: r, partIndex: t, part: e, segment: n }) }) : i.push({ duration: n.duration, segmentIndex: r, partIndex: null, segment: n, part: null }), i }, []) } function Vo(e) { return (e = e.segments && e.segments.length && e.segments[e.segments.length - 1]) && e.parts || [] } function Wo(e) { var t = e.preloadSegment; if (t) { e = t.parts, t = (t.preloadHints || []).reduce(function (e, t) { return e + ("PART" === t.type ? 1 : 0) }, 0); return t += e && e.length ? e.length : 0 } } function Go(e, t) { return t.endList ? 0 : e && e.suggestedPresentationDelay ? e.suggestedPresentationDelay : (e = 0 < Vo(t) .length) && t.serverControl && t.serverControl.partHoldBack ? t.serverControl.partHoldBack : e && t .partTargetDuration ? 3 * t.partTargetDuration : t.serverControl && t.serverControl.holdBack ? t .serverControl.holdBack : t.targetDuration ? 3 * t.targetDuration : 0 } function zo(e, t, i) { if ((t = "undefined" == typeof t ? e.mediaSequence + e.segments.length : t) < e.mediaSequence) return 0; var n = function (e, t) { var i = 0, n = t - e.mediaSequence, r = e.segments[n]; if (r) { if ("undefined" != typeof r.start) return { result: r.start, precise: !0 }; if ("undefined" != typeof r.end) return { result: r.end - r.duration, precise: !0 } } for (; n--;) { if ("undefined" != typeof (r = e.segments[n]).end) return { result: i + r.end, precise: !0 }; if (i += Ho(e, r), "undefined" != typeof r.start) return { result: i + r.start, precise: !0 } } return { result: i, precise: !1 } }(e, t); return n.precise ? n.result : (t = function (e, t) { for (var i, n = 0, r = t - e.mediaSequence; r < e.segments.length; r++) { if ("undefined" != typeof (i = e.segments[r]).start) return { result: i.start - n, precise: !0 }; if (n += Ho(e, i), "undefined" != typeof i.end) return { result: i.end - n, precise: !0 } } return { result: -1, precise: !1 } }(e, t)).precise ? t.result : n.result + i } function Xo(e, t, i) { if (!e) return 0; if ("number" != typeof i && (i = 0), "undefined" == typeof t) { if (e.totalDuration) return e.totalDuration; if (!e.endList) return window.Infinity } return zo(e, t, i) } function Ko(e) { var t = e.defaultDuration, i = e.durationList, n = e.startIndex, r = e.endIndex, a = 0; if (r < n && (n = (e = [r, n])[0], r = e[1]), n < 0) { for (var s = n; s < Math.min(0, r); s++) a += t; n = 0 } for (var o = n; o < r; o++) a += i[o].duration; return a } function Yo(e, t, i, n) { return e && e.segments ? e.endList ? Xo(e) : null === t ? null : (t = zo(e, e.mediaSequence + e.segments .length, t = t || 0), i && (t -= n = "number" == typeof n ? n : Go(null, e)), Math.max(0, t)) : null } function Qo(e) { return e.excludeUntil && e.excludeUntil > Date.now() } function $o(e) { return e.excludeUntil && e.excludeUntil === 1 / 0 } function Jo(e) { var t = Qo(e); return !e.disabled && !t } function Zo(e, t) { return t.attributes && t.attributes[e] } function eu(e, t) { if (1 === e.playlists.length) return !0; var i = t.attributes.BANDWIDTH || Number.MAX_VALUE; return 0 === e.playlists.filter(function (e) { return !!Jo(e) && (e.attributes.BANDWIDTH || 0) < i }).length } function tu(e, t) { return !(!e && !t || !e && t || e && !t) && (e === t || (!(!e.id || !t.id || e.id !== t.id) || (!(!e .resolvedUri || !t.resolvedUri || e.resolvedUri !== t.resolvedUri) || !(!e.uri || !t .uri || e.uri !== t.uri)))) } function iu(e, t) { var i, n = e && e.mediaGroups && e.mediaGroups.AUDIO || {}, r = !1; for (i in n) { for (var a in n[i]) if (r = t(n[i][a])) break; if (r) break } return !!r } function nu(i) { if (!i || !i.playlists || !i.playlists.length) return iu(i, function (e) { return e.playlists && e.playlists.length || e.uri }); for (var e = 0; e < i.playlists.length; e++) { var t = function (e) { var t = i.playlists[e], e = t.attributes && t.attributes.CODECS; return e && e.split(",").every(fr) || iu(i, function (e) { return tu(t, e) }) ? "continue" : { v: !1 } }(e); if ("continue" !== t && "object" == typeof t) return t.v } return !0 } function ru(e, t) { return e + "-" + t } function au(r, a) { r.mediaGroups && ["AUDIO", "SUBTITLES"].forEach(function (e) { if (r.mediaGroups[e]) for (var t in r.mediaGroups[e]) for (var i in r.mediaGroups[e][t]) { var n = r.mediaGroups[e][t][i]; a(n, e, t, i) } }) } function su(e) { var t = e.playlist, i = e.uri, e = e.id; t.id = e, t.playlistErrors_ = 0, i && (t.uri = i), t.attributes = t.attributes || {} } function ou(o, e) { o.uri = e; for (var t = 0; t < o.playlists.length; t++) o.playlists[t].uri || (o.playlists[t].uri = "placeholder-uri-" + t); var i, u = nu(o); au(o, function (e, t, i, n) { var r = "placeholder-uri-" + t + "-" + i + "-" + n; if (!e.playlists || !e.playlists.length) { if (u && "AUDIO" === t && !e.uri) for (var a = 0; a < o.playlists.length; a++) { var s = o.playlists[a]; if (s.attributes && s.attributes.AUDIO && s.attributes.AUDIO === i) return } e.playlists = [g({}, e)] } e.playlists.forEach(function (e, t) { var i = ru(t, r); e.uri ? e.resolvedUri = e.resolvedUri || dl(o.uri, e.uri) : (e.uri = 0 === t ? r : i, e.resolvedUri = e.uri), e.id = e.id || i, e.attributes = e.attributes || {}, o.playlists[e.id] = e, o.playlists[e.uri] = e }) }), function (e) { for (var t = e.playlists.length; t--;) { var i = e.playlists[t]; su({ playlist: i, id: ru(t, i.uri) }), i.resolvedUri = dl(e.uri, i.uri), e.playlists[i.id] = i, (e.playlists[i.uri] = i) .attributes.BANDWIDTH || ml.warn( "Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.") } }(o), au(i = o, function (e) { e.uri && (e.resolvedUri = dl(i.uri, e.uri)) }) } function uu(e, t, i) { var n = e.slice(), r = t.slice(); i = i || 0; for (var a, s = [], o = 0; o < r.length; o++) { var u = n[o + i], l = r[o]; u ? (a = u.map || a, s.push(function (e, t) { if (!e) return t; var i = gl(e, t); if (e.preloadHints && !t.preloadHints && delete i.preloadHints, e.parts && !t.parts) delete i.parts; else if (e.parts && t.parts) for (var n = 0; n < t.parts.length; n++) e.parts && e.parts[n] && (i.parts[n] = gl(e .parts[n], t.parts[n])); return !e.skipped && t.skipped && (i.skipped = !1), e.preload && !t.preload && (i .preload = !1), i }(u, l))) : (a && !l.map && (l.map = a), s.push(l)) } return s } function lu(e, t) { !e.resolvedUri && e.uri && (e.resolvedUri = dl(t, e.uri)), e.key && !e.key.resolvedUri && (e.key .resolvedUri = dl(t, e.key.uri)), e.map && !e.map.resolvedUri && (e.map.resolvedUri = dl(t, e.map .uri)), e.map && e.map.key && !e.map.key.resolvedUri && (e.map.key.resolvedUri = dl(t, e.map.key .uri)), e.parts && e.parts.length && e.parts.forEach(function (e) { e.resolvedUri || (e.resolvedUri = dl(t, e.uri)) }), e.preloadHints && e.preloadHints.length && e.preloadHints.forEach(function (e) { e.resolvedUri || (e.resolvedUri = dl(t, e.uri)) }) } function cu(e) { var t = e.segments || [], i = e.preloadSegment; if (i && i.parts && i.parts.length) { if (i.preloadHints) for (var n = 0; n < i.preloadHints.length; n++) if ("MAP" === i.preloadHints[n].type) return t; i.duration = e.targetDuration, i.preload = !0, t.push(i) } return t } function du(e, t) { return e === t || e.segments && t.segments && e.segments.length === t.segments.length && e.endList === t .endList && e.mediaSequence === t.mediaSequence && e.preloadSegment === t.preloadSegment } function hu(e, a, t) { void 0 === t && (t = du); var i = gl(e, {}), n = i.playlists[a.id]; if (!n) return null; if (t(n, a)) return null; a.segments = cu(a); var r = gl(n, a); if (r.preloadSegment && !a.preloadSegment && delete r.preloadSegment, n.segments) { if (a.skip) { a.segments = a.segments || []; for (var s = 0; s < a.skip.skippedSegments; s++) a.segments.unshift({ skipped: !0 }) } r.segments = uu(n.segments, a.segments, a.mediaSequence - n.mediaSequence) } r.segments.forEach(function (e) { lu(e, r.resolvedUri) }); for (var o = 0; o < i.playlists.length; o++) i.playlists[o].id === a.id && (i.playlists[o] = r); return i.playlists[a.id] = r, i.playlists[a.uri] = r, au(e, function (e, t, i, n) { if (e.playlists) for (var r = 0; r < e.playlists.length; r++) a.id === e.playlists[r].id && (e.playlists[r] = a) }), i } function pu(e, t) { var i = e.segments || [], n = i[i.length - 1], n = (i = n && n.parts && n.parts[n.parts.length - 1]) && i.duration || n && n.duration; return t && n ? 1e3 * n : 500 * (e.partTargetDuration || e.targetDuration || 10) } function fu(e, t, i, n) { var r = "arraybuffer" === e.responseType ? e.response : e.responseText; !t && r && (e.responseTime = Date.now(), e.roundTripTime = e.responseTime - e.requestTime, e.bytesReceived = r.byteLength || r.length, e.bandwidth || (e.bandwidth = Math.floor(e.bytesReceived / e .roundTripTime * 8 * 1e3))), i.headers && (e.responseHeaders = i.headers), t && "ETIMEDOUT" === t.code && (e.timedout = !0), n(t = !t && !e.aborted && 200 !== i.statusCode && 206 !== i.statusCode && 0 !== i.statusCode ? new Error("XHR Failed with a response of: " + (e && (r || e.responseText))) : t, e) } function mu() { function a(e, i) { e = _l({ timeout: 45e3 }, e); var t = a.beforeRequest || tr.Vhs.xhr.beforeRequest; !t || "function" != typeof t || (t = t(e)) && (e = t); var n = (!0 === tr.Vhs.xhr.original ? vl : tr.Vhs.xhr)(e, function (e, t) { return fu(n, e, t, i) }), r = n.abort; return n.abort = function () { return n.aborted = !0, r.apply(n, arguments) }, n.uri = e.uri, n.requestTime = Date.now(), n } return a.original = !0, a } function gu(e) { var t, i = {}; return e.byterange && (i.Range = (t = e.byterange, e = t.offset, t = "bigint" == typeof t.offset || "bigint" == typeof t.length ? window.BigInt(t.offset) + window.BigInt(t.length) - window.BigInt( 1) : t.offset + t.length - 1, "bytes=" + e + "-" + t)), i } function yu(e, t) { return e = e.toString(16), "00".substring(0, 2 - e.length) + e + (t % 2 ? " " : "") } function vu(e) { return 32 <= e && e < 126 ? String.fromCharCode(e) : "." } function _u(i) { var n = {}; return Object.keys(i).forEach(function (e) { var t = i[e]; ArrayBuffer.isView(t) ? n[e] = { bytes: t.buffer, byteOffset: t.byteOffset, byteLength: t.byteLength } : n[e] = t }), n } function bu(e) { var t = e.byterange || { length: 1 / 0, offset: 0 }; return [t.length, t.offset, e.resolvedUri].join(",") } function Tu(e) { return e.resolvedUri } function Su(e) { for (var t = Array.prototype.slice.call(e), i = "", n = 0; n < t.length / 16; n++) i += t.slice(16 * n, 16 * n + 16).map(yu).join("") + " " + t.slice(16 * n, 16 * n + 16).map(vu).join("") + "\n"; return i } function wu(e) { var t = e.playlist, i = e.time, n = void 0 === i ? void 0 : i; if (!(i = e.callback)) throw new Error("getProgramTime: callback must be provided"); return t && void 0 !== n ? (e = function (e, t) { if (!t || !t.segments || 0 === t.segments.length) return null; for (var i, n = 0, r = 0; r < t.segments.length && !(e <= (n = (i = t.segments[r]) .videoTimingInfo ? i.videoTimingInfo.transmuxedPresentationEnd : n + i.duration)); r++) ; var a = t.segments[t.segments.length - 1]; if (a.videoTimingInfo && a.videoTimingInfo.transmuxedPresentationEnd < e) return null; if (n < e) { if (e > n + .25 * a.duration) return null; i = a } return { segment: i, estimatedStart: i.videoTimingInfo ? i.videoTimingInfo.transmuxedPresentationStart : n - i .duration, type: i.videoTimingInfo ? "accurate" : "estimate" } }(n, t)) ? "estimate" === e.type ? i({ message: "Accurate programTime could not be determined. Please seek to e.seekTime and try again", seekTime: e.estimatedStart }) : (t = { mediaSeconds: n }, (e = function (e, t) { if (!t.dateTimeObject) return null; var i = t.videoTimingInfo.transmuxerPrependedSeconds, i = e - (t.videoTimingInfo.transmuxedPresentationStart + i); return new Date(t.dateTimeObject.getTime() + 1e3 * i) }(n, e.segment)) && (t.programDateTime = e.toISOString()), i(null, t)) : i({ message: "valid programTime was not found" }) : i({ message: "getProgramTime: playlist and time must be provided" }) } function Eu(e) { var t = e.programTime, i = e.playlist, n = e.retryCount, r = void 0 === n ? 2 : n, a = e.seekTo, s = e.pauseAfterSeek, o = void 0 === s || s, u = e.tech, l = e.callback; if (!l) throw new Error("seekToProgramTime: callback must be provided"); return "undefined" != typeof t && i && a ? i.endList || u.hasStarted_ ? function (e) { if (!e.segments || 0 === e.segments.length) return !1; for (var t = 0; t < e.segments.length; t++) if (!e.segments[t].dateTimeObject) return !1; return !0 }(i) ? (n = function (e, t) { var i; try { i = new Date(e) } catch (e) { return null } if (!t || !t.segments || 0 === t.segments.length) return null; if (i < (r = t.segments[0]).dateTimeObject) return null; for (var n = 0; n < t.segments.length - 1; n++) { var r = t.segments[n]; if (i < t.segments[n + 1].dateTimeObject) break } var a, s = t.segments[t.segments.length - 1], e = s.dateTimeObject, a = s.videoTimingInfo ? (a = s.videoTimingInfo).transmuxedPresentationEnd - a .transmuxedPresentationStart - a.transmuxerPrependedSeconds : s.duration + .25 * s.duration; return new Date(e.getTime() + 1e3 * a) < i ? null : { segment: r = e < i ? s : r, estimatedStart: r.videoTimingInfo ? r.videoTimingInfo.transmuxedPresentationStart : fl .duration(t, t.mediaSequence + t.segments.indexOf(r)), type: r.videoTimingInfo ? "accurate" : "estimate" } }(t, i)) ? (s = n.segment, e = function (e, t) { var i; try { n = new Date(e), i = new Date(t) } catch (e) { } var n = n.getTime(); return (i.getTime() - n) / 1e3 }(s.dateTimeObject, t), "estimate" === n.type ? 0 === r ? l({ message: t + " is not buffered yet. Try again" }) : (a(n.estimatedStart + e), void u.one("seeked", function () { Eu({ programTime: t, playlist: i, retryCount: r - 1, seekTo: a, pauseAfterSeek: o, tech: u, callback: l }) })) : (e = s.start + e, u.one("seeked", function () { return l(null, u.currentTime()) }), o && u.pause(), void a(e))) : l({ message: t + " was not found in the stream" }) : l({ message: "programDateTime tags must be provided in the manifest " + i.resolvedUri }) : l({ message: "player must be playing a live stream to start buffering" }) : l({ message: "seekToProgramTime: programTime, seekTo and playlist must be provided" }) } function ku(e, t) { if (4 === e.readyState) return t() } function Cu(e, t, r) { function n(e, t, i, n) { return t.abort(), o = !0, r(e, t, i, n) } function i(e, t) { if (!o) { if (e) return n(e, t, "", s); var i = t.responseText.substring(s && s.byteLength || 0, t.responseText.length); if (s = function () { for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; if ((t = t.filter(function (e) { return e && (e.byteLength || e.length) && "string" != typeof e })).length <= 1) return zs(t[0]); var n = t.reduce(function (e, t, i) { return e + (t.byteLength || t.length) }, 0), r = new Uint8Array(n), a = 0; return t.forEach(function (e) { e = zs(e), r.set(e, a), a += e.byteLength }), r }(s, Ks(i, !0)), a = a || Qs(s), s.length < 10 || a && s.length < a + 2) return ku(t, function () { return n(e, t, "", s) }); i = Lo(s); return "ts" === i && s.length < 188 || !i && s.length < 376 ? ku(t, function () { return n(e, t, "", s) }) : n(null, t, i, s) } } var a, s = [], o = !1, u = t({ uri: e, beforeSend: function (t) { t.overrideMimeType("text/plain; charset=x-user-defined"), t.addEventListener("progress", function (e) { return e.total, e.loaded, fu(t, null, { statusCode: t.status }, i) }) } }, function (e, t) { return fu(u, e, t, i) }); return u } function Iu(e, t) { if (!du(e, t)) return !1; if (e.sidx && t.sidx && (e.sidx.offset !== t.sidx.offset || e.sidx.length !== t.sidx.length)) return !1; if (!e.sidx && t.sidx || e.sidx && !t.sidx) return !1; if (e.segments && !t.segments || !e.segments && t.segments) return !1; if (!e.segments && !t.segments) return !0; for (var i = 0; i < e.segments.length; i++) { var n = e.segments[i], r = t.segments[i]; if (n.uri !== r.uri) return !1; if (n.byterange || r.byterange) { n = n.byterange, r = r.byterange; if (n && !r || !n && r) return !1; if (n.offset !== r.offset || n.length !== r.length) return !1 } } return !0 } function xu(e, t) { var i, n = {}; for (i in e) { var r = e[i].sidx; if (r) { var a = bs(r); if (!t[a]) break; var s = t[a].sidxInfo; s = s, r = r, (Boolean(!s.map && !r.map) || Boolean(s.map && r.map && s.map.byterange.offset === r .map.byterange.offset && s.map.byterange.length === r.map.byterange.length)) && s.uri === r .uri && s.byterange.offset === r.byterange.offset && s.byterange.length === r.byterange .length && (n[a] = t[a]) } } return n } function Au(e) { return e.on = e.addEventListener, e.off = e.removeEventListener, e } function Pu(i) { var n = i.transmuxer, e = i.bytes, t = i.audioAppendStart, r = i.gopsToAlignWith, a = i.remux, s = i.onData, o = i.onTrackInfo, u = i.onAudioTimingInfo, l = i.onVideoTimingInfo, c = i.onVideoSegmentTimingInfo, d = i.onAudioSegmentTimingInfo, h = i.onId3, p = i.onCaptions, f = i.onDone, m = i.onEndedTimeline, g = i.onTransmuxerLog, y = i.isEndOfTimeline, v = { buffer: [] }, _ = y; n.onmessage = function (e) { var t; n.currentTransmux === i && ("data" === e.data.action && function (e, t, i) { var n = e.data.segment, r = n.type, a = n.initSegment, s = n.captions, o = n.captionStreams, u = n.metadata, l = n.videoFrameDtsTime, n = n.videoFramePtsTime; t.buffer.push({ captions: s, captionStreams: o, metadata: u }); e = e.data.segment.boxes || { data: e.data.segment.data }, a = { type: r, data: new Uint8Array(e.data, e.data.byteOffset, e.data.byteLength), initSegment: new Uint8Array(a.data, a.byteOffset, a.byteLength) }; "undefined" != typeof l && (a.videoFrameDtsTime = l), "undefined" != typeof n && (a .videoFramePtsTime = n), i(a) }(e, v, s), "trackinfo" === e.data.action && o(e.data.trackInfo), "gopInfo" === e.data .action && (v.gopInfo = e.data.gopInfo), "audioTimingInfo" === e.data.action && u(e.data .audioTimingInfo), "videoTimingInfo" === e.data.action && l(e.data.videoTimingInfo), "videoSegmentTimingInfo" === e.data.action && c(e.data.videoSegmentTimingInfo), "audioSegmentTimingInfo" === e.data.action && d(e.data.audioSegmentTimingInfo), "id3Frame" === e.data.action && h([e.data.id3Frame], e.data.id3Frame.dispatchType), "caption" === e.data.action && p(e.data.caption), "endedtimeline" === e.data.action && ( _ = !1, m()), "log" === e.data.action && g(e.data.log), "transmuxed" === e.data.type && (_ || (n.onmessage = null, e = (t = { transmuxedData: v, callback: f }).transmuxedData, t = t.callback, e.buffer = [], t(e), El(n)))) }, t && n.postMessage({ action: "setAudioAppendStart", appendStart: t }), Array.isArray(r) && n.postMessage({ action: "alignGopsWith", gopsToAlignWith: r }), "undefined" != typeof a && n.postMessage({ action: "setRemux", remux: a }), e.byteLength && (r = e instanceof ArrayBuffer ? e : e.buffer, a = e instanceof ArrayBuffer ? 0 : e .byteOffset, n.postMessage({ action: "push", data: r, byteOffset: a, byteLength: e.byteLength }, [r])), y && n.postMessage({ action: "endTimeline" }), n.postMessage({ action: "flush" }) } function Lu(e, t) { e.postMessage({ action: t }), El(e) } function Du(e, t) { if (!t.currentTransmux) return t.currentTransmux = e, Lu(t, e), 0; t.transmuxQueue.push(Lu.bind(null, t, e)) } function Ou(e) { if (!e.transmuxer.currentTransmux) return e.transmuxer.currentTransmux = e, void Pu(e); e.transmuxer.transmuxQueue.push(e) } function Mu(i) { var n = i.transmuxer, r = i.endAction || i.action, a = i.callback, e = g({}, i, { endAction: null, transmuxer: null, callback: null }), t = function e(t) { t.data.action === r && (n.removeEventListener("message", e), t.data.data && (t.data.data = new Uint8Array(t.data.data, i.byteOffset || 0, i.byteLength || t.data.data.byteLength), i.data && (i.data = t.data.data)), a(t.data)) }; n.addEventListener("message", t), i.data ? (t = i.data instanceof ArrayBuffer, e.byteOffset = t ? 0 : i.data .byteOffset, e.byteLength = i.data.byteLength, t = [t ? i.data : i.data.buffer], n.postMessage(e, t) ) : n.postMessage(e) } function Ru(e) { e.forEach(function (e) { e.abort() }) } function Nu(e, t) { return t.timedout ? { status: t.status, message: "HLS request timed-out at URL: " + t.uri, code: xl, xhr: t } : t.aborted ? { status: t.status, message: "HLS request aborted at URL: " + t.uri, code: Al, xhr: t } : e ? { status: t.status, message: "HLS request errored at URL: " + t.uri, code: Il, xhr: t } : "arraybuffer" === t.responseType && 0 === t.response.byteLength ? { status: t.status, message: "Empty HLS response at URL: " + t.uri, code: Il, xhr: t } : null } function Uu(a, s, o) { return function (e, t) { var i = t.response, e = Nu(e, t); if (e) return o(e, a); if (16 !== i.byteLength) return o({ status: t.status, message: "Invalid HLS key at URL: " + t.uri, code: Il, xhr: t }, a); for (var i = new DataView(i), n = new Uint32Array([i.getUint32(0), i.getUint32(4), i.getUint32(8), i .getUint32(12) ]), r = 0; r < s.length; r++) s[r].bytes = n; return o(null, a) } } function Bu(i, n) { var e = Lo(i.map.bytes); if ("mp4" !== e) { var t = i.map.resolvedUri || i.map.uri; return n({ internal: !0, message: "Found unsupported " + (e || "unknown") + " container for initialization segment at URL: " + t, code: Il }) } Mu({ action: "probeMp4Tracks", data: i.map.bytes, transmuxer: i.transmuxer, callback: function (e) { var t = e.tracks, e = e.data; return i.map.bytes = e, t.forEach(function (e) { i.map.tracks = i.map.tracks || {}, i.map.tracks[e.type] || "number" == typeof (i.map.tracks[e.type] = e).id && e.timescale && (i.map .timescales = i.map.timescales || {}, i.map.timescales[e.id] = e .timescale) }), n(null) } }) } function Fu(e) { var i = e.segment, n = e.finishProcessingFn, r = e.responseType; return function (e, t) { e = Nu(e, t); if (e) return n(e, i); e = "arraybuffer" !== r && t.responseText ? function (e) { for (var t = new Uint8Array(new ArrayBuffer(e.length)), i = 0; i < e.length; i++) t[i] = e .charCodeAt(i); return t.buffer }(t.responseText.substring(i.lastReachedChar || 0)) : t.response; return i.stats = { bandwidth: (t = t).bandwidth, bytesReceived: t.bytesReceived || 0, roundTripTime: t.roundTripTime || 0 }, i.key ? i.encryptedBytes = new Uint8Array(e) : i.bytes = new Uint8Array(e), n(null, i) } } function ju(e) { var i = e.segment, t = e.bytes, n = e.trackInfoFn, r = e.timingInfoFn, a = e.videoSegmentTimingInfoFn, s = e.audioSegmentTimingInfoFn, o = e.id3Fn, u = e.captionsFn, l = e.isEndOfTimeline, c = e.endedTimelineFn, d = e.dataFn, h = e.doneFn, p = e.onTransmuxerLog, e = i.map && i.map.tracks || {}, f = Boolean(e.audio && e.video), m = r.bind(null, i, "audio", "start"), g = r.bind(null, i, "audio", "end"), y = r.bind(null, i, "video", "start"), v = r.bind(null, i, "video", "end"); Mu({ action: "probeTs", transmuxer: i.transmuxer, data: t, baseStartTime: i.baseStartTime, callback: function (e) { i.bytes = t = e.data; e = e.result; e && (n(i, { hasAudio: e.hasAudio, hasVideo: e.hasVideo, isMuxed: f }), n = null, e.hasAudio && !f && m(e.audioStart), e.hasVideo && y(e .videoStart), y = m = null), Ou({ bytes: t, transmuxer: i.transmuxer, audioAppendStart: i.audioAppendStart, gopsToAlignWith: i.gopsToAlignWith, remux: f, onData: function (e) { e.type = "combined" === e.type ? "video" : e.type, d(i, e) }, onTrackInfo: function (e) { n && (f && (e.isMuxed = !0), n(i, e)) }, onAudioTimingInfo: function (e) { m && "undefined" != typeof e.start && (m(e.start), m = null), g && "undefined" != typeof e.end && g(e.end) }, onVideoTimingInfo: function (e) { y && "undefined" != typeof e.start && (y(e.start), y = null), v && "undefined" != typeof e.end && v(e.end) }, onVideoSegmentTimingInfo: function (e) { a(e) }, onAudioSegmentTimingInfo: function (e) { s(e) }, onId3: function (e, t) { o(i, e, t) }, onCaptions: function (e) { u(i, [e]) }, isEndOfTimeline: l, onEndedTimeline: function () { c() }, onTransmuxerLog: p, onDone: function (e) { h && (e.type = "combined" === e.type ? "video" : e.type, h(null, i, e)) } }) } }) } function Hu(e) { var i = e.segment, n = e.bytes, t = e.trackInfoFn, r = e.timingInfoFn, a = e.videoSegmentTimingInfoFn, s = e.audioSegmentTimingInfoFn, o = e.id3Fn, u = e.captionsFn, l = e.isEndOfTimeline, c = e.endedTimelineFn, d = e.dataFn, h = e.doneFn, p = e.onTransmuxerLog, f = new Uint8Array(n); if (0 < Js(f, ["moof"]).length) { i.isFmp4 = !0; var m = i.map.tracks, g = { isFmp4: !0, hasVideo: !!m.video, hasAudio: !!m.audio }; m.audio && m.audio.codec && "enca" !== m.audio.codec && (g.audioCodec = m.audio.codec), m.video && m .video.codec && "encv" !== m.video.codec && (g.videoCodec = m.video.codec), m.video && m.audio && (g .isMuxed = !0), t(i, g); var y = function (e) { d(i, { data: f, type: g.hasAudio && !g.isMuxed ? "audio" : "video" }), e && e.length && u(i, e), h(null, i, {}) }; Mu({ action: "probeMp4StartTime", timescales: i.map.timescales, data: f, transmuxer: i.transmuxer, callback: function (e) { var t = e.data, e = e.startTime; n = t.buffer, i.bytes = f = t, g.hasAudio && !g.isMuxed && r(i, "audio", "start", e), g.hasVideo && r(i, "video", "start", e), m.video && t.byteLength && i .transmuxer ? Mu({ action: "pushMp4Captions", endAction: "mp4Captions", transmuxer: i.transmuxer, data: f, timescales: i.map.timescales, trackIds: [m.video.id], callback: function (e) { n = e.data.buffer, i.bytes = f = e.data, e.logs.forEach( function (e) { p(tr.mergeOptions(e, { stream: "mp4CaptionParser" })) }), y(e.captions) } }) : y() } }) } else if (i.transmuxer) { if ("undefined" == typeof i.container && (i.container = Lo(f)), "ts" !== i.container && "aac" !== i .container) return t(i, { hasAudio: !1, hasVideo: !1 }), h(null, i, {}), 0; ju({ segment: i, bytes: n, trackInfoFn: t, timingInfoFn: r, videoSegmentTimingInfoFn: a, audioSegmentTimingInfoFn: s, id3Fn: o, captionsFn: u, isEndOfTimeline: l, endedTimelineFn: c, dataFn: d, doneFn: h, onTransmuxerLog: p }) } else h(null, i, {}) } function qu(e, i) { var n = e.id, t = e.key, r = e.encryptedBytes, a = e.decryptionWorker, e = function e(t) { t.data.source === n && (a.removeEventListener("message", e), t = t.data.decrypted, i(new Uint8Array( t.bytes, t.byteOffset, t.byteLength))) }; a.addEventListener("message", e), e = t.bytes.slice ? t.bytes.slice() : new Uint32Array(Array.prototype .slice.call(t.bytes)), a.postMessage(_u({ source: n, encrypted: r, key: e, iv: t.iv }), [r.buffer, e.buffer]) } function Vu(e) { var i = e.activeXhrs, m = e.decryptionWorker, g = e.trackInfoFn, y = e.timingInfoFn, v = e.videoSegmentTimingInfoFn, _ = e.audioSegmentTimingInfoFn, b = e.id3Fn, T = e.captionsFn, S = e.isEndOfTimeline, w = e.endedTimelineFn, E = e.dataFn, k = e.doneFn, C = e.onTransmuxerLog, n = 0, r = !1; return function (e, f) { if (!r) { if (e) return r = !0, Ru(i), k(e, f); if ((n += 1) === i.length) { var t = function () { if (f.encryptedBytes) return t = (e = { decryptionWorker: m, segment: f, trackInfoFn: g, timingInfoFn: y, videoSegmentTimingInfoFn: v, audioSegmentTimingInfoFn: _, id3Fn: b, captionsFn: T, isEndOfTimeline: S, endedTimelineFn: w, dataFn: E, doneFn: k, onTransmuxerLog: C }).decryptionWorker, i = e.segment, n = e.trackInfoFn, r = e.timingInfoFn, a = e.videoSegmentTimingInfoFn, s = e.audioSegmentTimingInfoFn, o = e.id3Fn, u = e.captionsFn, l = e.isEndOfTimeline, c = e.endedTimelineFn, d = e .dataFn, h = e.doneFn, p = e.onTransmuxerLog, void qu({ id: i.requestId, key: i.key, encryptedBytes: i.encryptedBytes, decryptionWorker: t }, function (e) { i.bytes = e, Hu({ segment: i, bytes: i.bytes, trackInfoFn: n, timingInfoFn: r, videoSegmentTimingInfoFn: a, audioSegmentTimingInfoFn: s, id3Fn: o, captionsFn: u, isEndOfTimeline: l, endedTimelineFn: c, dataFn: d, doneFn: h, onTransmuxerLog: p }) }); var e, t, i, n, r, a, s, o, u, l, c, d, h, p; Hu({ segment: f, bytes: f.bytes, trackInfoFn: g, timingInfoFn: y, videoSegmentTimingInfoFn: v, audioSegmentTimingInfoFn: _, id3Fn: b, captionsFn: T, isEndOfTimeline: S, endedTimelineFn: w, dataFn: E, doneFn: k, onTransmuxerLog: C }) }; if (f.endOfAllRequests = Date.now(), f.map && f.map.encryptedBytes && !f.map.bytes) return qu({ decryptionWorker: m, id: f.requestId + "-init", encryptedBytes: f.map.encryptedBytes, key: f.map.key }, function (e) { f.map.bytes = e, Bu(f, function (e) { return e ? (Ru(i), k(e, f)) : void t() }) }); t() } } } } function Wu(e) { var n = e.segment, r = e.progressFn; return e.trackInfoFn, e.timingInfoFn, e.videoSegmentTimingInfoFn, e.audioSegmentTimingInfoFn, e.id3Fn, e .captionsFn, e.isEndOfTimeline, e.endedTimelineFn, e.dataFn, function (e) { var t, i = e.target; if (!i.aborted) return n.stats = tr.mergeOptions(n.stats, (i = (t = e).target, (i = { bandwidth: 1 / 0, bytesReceived: 0, roundTripTime: Date.now() - i.requestTime || 0 }).bytesReceived = t.loaded, i.bandwidth = Math.floor(i.bytesReceived / i .roundTripTime * 8 * 1e3), i)), !n.stats.firstBytesReceivedAt && n.stats .bytesReceived && (n.stats.firstBytesReceivedAt = Date.now()), r(e, n) } } function Gu(e) { var t, i, n, r = e.xhr, a = e.xhrOptions, s = e.decryptionWorker, o = e.segment, u = e.abortFn, l = e.progressFn, c = e.trackInfoFn, d = e.timingInfoFn, h = e.videoSegmentTimingInfoFn, p = e.audioSegmentTimingInfoFn, f = e.id3Fn, m = e.captionsFn, g = e.isEndOfTimeline, y = e.endedTimelineFn, v = e.dataFn, _ = e.doneFn, e = e.onTransmuxerLog, b = [], _ = Vu({ activeXhrs: b, decryptionWorker: s, trackInfoFn: c, timingInfoFn: d, videoSegmentTimingInfoFn: h, audioSegmentTimingInfoFn: p, id3Fn: f, captionsFn: m, isEndOfTimeline: g, endedTimelineFn: y, dataFn: v, doneFn: _, onTransmuxerLog: e }); o.key && !o.key.bytes && (e = [o.key], o.map && !o.map.bytes && o.map.key && o.map.key.resolvedUri === o.key .resolvedUri && e.push(o.map.key), e = r(tr.mergeOptions(a, { uri: o.key.resolvedUri, responseType: "arraybuffer" }), Uu(o, e, _)), b.push(e)), o.map && !o.map.bytes && (!o.map.key || o.key && o.key.resolvedUri === o.map.key.resolvedUri || (t = r(tr.mergeOptions(a, { uri: o.map.key.resolvedUri, responseType: "arraybuffer" }), Uu(o, [o.map.key], _)), b.push(t)), t = r(tr.mergeOptions(a, { uri: o.map.resolvedUri, responseType: "arraybuffer", headers: gu(o.map) }), (i = (t = { segment: o, finishProcessingFn: _ }).segment, n = t.finishProcessingFn, function (e, t) { e = Nu(e, t); if (e) return n(e, i); e = new Uint8Array(t.response); if (i.map.key) return i.map.encryptedBytes = e, n(null, i); i.map.bytes = e, Bu(i, function (e) { return e ? (e.xhr = t, e.status = t.status, n(e, i)) : void n(null, i) }) })), b.push(t)), a = tr.mergeOptions(a, { uri: o.part && o.part.resolvedUri || o.resolvedUri, responseType: "arraybuffer", headers: gu(o) }), (a = r(a, Fu({ segment: o, finishProcessingFn: _, responseType: a.responseType }))).addEventListener("progress", Wu({ segment: o, progressFn: l, trackInfoFn: c, timingInfoFn: d, videoSegmentTimingInfoFn: h, audioSegmentTimingInfoFn: p, id3Fn: f, captionsFn: m, isEndOfTimeline: g, endedTimelineFn: y, dataFn: v })), b.push(a); var T = {}; return b.forEach(function (e) { var t, i; e.addEventListener("loadend", (t = (e = { loadendState: T, abortFn: u }).loadendState, i = e.abortFn, function (e) { e.target.aborted && i && !t.calledAbortFn && (i(), t.calledAbortFn = !0) })) }), function () { return Ru(b) } } function zu(e, t) { return t = t.attributes || {}, e && e.mediaGroups && e.mediaGroups.AUDIO && t.AUDIO && e.mediaGroups.AUDIO[t .AUDIO] } function Xu(e) { var n = {}; return e.forEach(function (e) { var t = e.mediaType, i = e.type, e = e.details; n[t] = n[t] || [], n[t].push(hr("" + i + e)) }), Object.keys(n).forEach(function (e) { return 1 < n[e].length ? (Pl("multiple " + e + " codecs found as attributes: " + n[e].join( ", ") + ". Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs." ), void (n[e] = null)) : void (n[e] = n[e][0]) }), n } function Ku(e) { var t = 0; return e.audio && t++, e.video && t++, t } function Yu(e, t) { var i, n = t.attributes || {}, r = Xu(function (e) { e = e.attributes || {}; if (e.CODECS) return pr(e.CODECS) }(t) || []); return zu(e, t) && !r.audio && !function (e, t) { if (!zu(e, t)) return !0; var i, t = t.attributes || {}, n = e.mediaGroups.AUDIO[t.AUDIO]; for (i in n) if (!n[i].uri && !n[i].playlists) return !0; return !1 }(e, t) && (i = Xu(function (e, t) { if (!e.mediaGroups.AUDIO || !t) return null; var i, n = e.mediaGroups.AUDIO[t]; if (!n) return null; for (i in n) { var r = n[i]; if (r.default && r.playlists) return pr(r.playlists[0].attributes.CODECS) } return null }(e, n.AUDIO) || [])).audio && (r.audio = i.audio), r } function Qu(e) { if (e && e.playlist) { var t = e.playlist; return JSON.stringify({ id: t.id, bandwidth: e.bandwidth, width: e.width, height: e.height, codecs: t.attributes && t.attributes.CODECS || "" }) } } function $u(e, t) { return (e = e && window.getComputedStyle(e)) ? e[t] : "" } function Ju(e, n) { var r = e.slice(); e.sort(function (e, t) { var i = n(e, t); return 0 === i ? r.indexOf(e) - r.indexOf(t) : i }) } function Zu(e, t) { var i, n; return (i = (i = e.attributes.BANDWIDTH ? e.attributes.BANDWIDTH : i) || window.Number.MAX_VALUE) - (n = ( n = t.attributes.BANDWIDTH ? t.attributes.BANDWIDTH : n) || window.Number.MAX_VALUE) } function el(e, t, i, n, r, a) { if (e) { var s = { bandwidth: t, width: i, height: n, limitRenditionByPlayerDimensions: r }, o = e.playlists; fl.isAudioOnly(e) && (o = a.getAudioTrackPlaylists_(), s.audioOnly = !0); var u = o.map(function (e) { var t = e.attributes && e.attributes.RESOLUTION && e.attributes.RESOLUTION.width, i = e.attributes && e.attributes.RESOLUTION && e.attributes.RESOLUTION.height, n = e.attributes && e.attributes.BANDWIDTH; return { bandwidth: n || window.Number.MAX_VALUE, width: t, height: i, playlist: e } }); Ju(u, function (e, t) { return e.bandwidth - t.bandwidth }); var l = (u = u.filter(function (e) { return !fl.isIncompatible(e.playlist) })).filter(function (e) { return fl.isEnabled(e.playlist) }), e = (l = !l.length ? u.filter(function (e) { return !fl.isDisabled(e.playlist) }) : l).filter(function (e) { return e.bandwidth * Sl.BANDWIDTH_VARIANCE < t }), c = e[e.length - 1], o = e.filter(function (e) { return e.bandwidth === c.bandwidth })[0]; if (!1 === r) { var d = o || l[0] || u[0]; if (d && d.playlist) { r = o ? "bandwidthBestRep" : "sortedPlaylistReps"; return l[0] && (r = "enabledPlaylistReps"), Ll("choosing " + Qu(d) + " using " + r + " with options", s), d.playlist } return Ll("could not choose a playlist with options", s), null } d = e.filter(function (e) { return e.width && e.height }); Ju(d, function (e, t) { return e.width - t.width }); var h, p, f, e = d.filter(function (e) { return e.width === i && e.height === n }), c = e[e.length - 1], e = e.filter(function (e) { return e.bandwidth === c.bandwidth })[0]; e || (p = (h = d.filter(function (e) { return e.width > i || e.height > n })).filter(function (e) { return e.width === h[0].width && e.height === h[0].height }), c = p[p.length - 1], p = p.filter(function (e) { return e.bandwidth === c.bandwidth })[0]), a.experimentalLeastPixelDiffSelector && (m = d.map(function (e) { return e.pixelDiff = Math.abs(e.width - i) + Math.abs(e.height - n), e }), Ju(m, function (e, t) { return e.pixelDiff === t.pixelDiff ? t.bandwidth - e.bandwidth : e.pixelDiff - t .pixelDiff }), f = m[0]); var m = f || p || e || o || l[0] || u[0]; if (m && m.playlist) { u = "sortedPlaylistReps"; return f ? u = "leastPixelDiffRep" : p ? u = "resolutionPlusOneRep" : e ? u = "resolutionBestRep" : o ? u = "bandwidthBestRep" : l[0] && (u = "enabledPlaylistReps"), Ll("choosing " + Qu(m) + " using " + u + " with options", s), m.playlist } return Ll("could not choose a playlist with options", s), null } } function tl(e) { var t = e.inbandTextTracks, i = e.metadataArray, r = e.timestampOffset, n = e.videoDuration; if (i) { var a = window.WebKitDataCue || window.VTTCue, s = t.metadataTrack_; if (s && (i.forEach(function (e) { var n = e.cueTime + r; !("number" != typeof n || window.isNaN(n) || n < 0) && n < 1 / 0 && e.frames.forEach( function (e) { var t, i = new a(n, n, e.value || e.url || e.data || ""); i.frame = e, i.value = e, t = i, Object.defineProperties(t.frame, { id: { get: function () { return tr.log.warn( "cue.frame.id is deprecated. Use cue.value.key instead." ), t.value.key } }, value: { get: function () { return tr.log.warn( "cue.frame.value is deprecated. Use cue.value.data instead." ), t.value.data } }, privateData: { get: function () { return tr.log.warn( "cue.frame.privateData is deprecated. Use cue.value.data instead." ), t.value.data } } }), s.addCue(i) }) }), s.cues && s.cues.length)) { for (var o = s.cues, u = [], l = 0; l < o.length; l++) o[l] && u.push(o[l]); var c = u.reduce(function (e, t) { var i = e[t.startTime] || []; return i.push(t), e[t.startTime] = i, e }, {}), d = Object.keys(c).sort(function (e, t) { return Number(e) - Number(t) }); d.forEach(function (e, t) { var e = c[e], i = Number(d[t + 1]) || n; e.forEach(function (e) { e.endTime = i }) }) } } } function il(e, t, i) { var n, r; if (i && i.cues) for (n = i.cues.length; n--;) (r = i.cues[n]).startTime >= e && r.endTime <= t && i.removeCue(r) } function nl(e) { return "number" == typeof e && isFinite(e) } function rl(e) { var t = e.startOfSegment, i = e.duration, n = e.segment, r = e.part, a = e.playlist, s = a.mediaSequence, o = a.id, u = a.segments, l = e.mediaIndex, c = e.partIndex, d = e.timeline, h = (void 0 === u ? [] : u).length - 1, p = "mediaIndex/partIndex increment"; return e.getMediaInfoForTime ? p = "getMediaInfoForTime (" + e.getMediaInfoForTime + ")" : e .isSyncRequest && (p = "getSyncSegmentCandidate (isSyncRequest)"), e.independent && (p += " with independent " + e.independent), a = "number" == typeof c, u = e.segment.uri ? "segment" : "pre-segment", e = a ? Wo({ preloadSegment: n }) - 1 : 0, u + " [" + (s + l) + "/" + (s + h) + "]" + (a ? " part [" + c + "/" + e + "]" : "") + " segment start/end [" + n.start + " => " + n.end + "]" + (a ? " part start/end [" + r.start + " => " + r.end + "]" : "") + " startOfSegment [" + t + "] duration [" + i + "] timeline [" + d + "] selected by [" + p + "] playlist [" + o + "]" } function al(e) { return e + "TimingInfo" } function sl(e) { var t = e.timelineChangeController, i = e.currentTimeline, n = e.segmentTimeline, r = e.loaderType, e = e.audioDisabled; if (i !== n) { if ("audio" === r) { i = t.lastTimelineChange({ type: "main" }); return !i || i.to !== n } if ("main" === r && e) { t = t.pendingTimelineChange({ type: "audio" }); return t && t.to === n ? !1 : !0 } } } function ol(e) { var t = e.segmentDuration, e = e.maxDuration; return !!t && Math.round(t) > e + hl } function ul(e, t) { if ("hls" !== t) return null; var n, r, i = (n = { audioTimingInfo: e.audioTimingInfo, videoTimingInfo: e.videoTimingInfo }, r = 0, ["video", "audio"].forEach(function (e) { var t, i = n[e + "TimingInfo"]; i && (e = i.start, i = i.end, "bigint" == typeof e || "bigint" == typeof i ? t = window .BigInt(i) - window.BigInt(e) : "number" == typeof e && "number" == typeof i && (t = i - e), "undefined" != typeof t && r < t && (r = t)) }), r = "bigint" == typeof r && r < Number.MAX_SAFE_INTEGER ? Number(r) : r); if (!i) return null; var a = e.playlist.targetDuration, s = ol({ segmentDuration: i, maxDuration: 2 * a }), t = ol({ segmentDuration: i, maxDuration: a }), a = "Segment with index " + e.mediaIndex + " from playlist " + e.playlist.id + " has a duration of " + i + " when the reported duration is " + e.duration + " and the target duration is " + a + ". For HLS content, a duration in excess of the target duration may result in playback issues. See the HLS specification section on EXT-X-TARGETDURATION for more details: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1"; return s || t ? { severity: s ? "warn" : "info", message: a } : null } var ll = Ao, cl = 9e4, dl = ir, hl = 1 / 30, pl = tr.createTimeRange, fl = { liveEdgeDelay: Go, duration: Xo, seekable: function (e, t, i) { var n = t || 0, i = Yo(e, t, !0, i); return null === i ? pl() : pl(n, i) }, getMediaInfoForTime: function (e) { for (var t = e.playlist, i = e.currentTime, n = e.startingSegmentIndex, r = e.startingPartIndex, a = e.startTime, s = e.experimentalExactManifestTimings, o = i - a, u = qo(t), l = 0, c = 0; c < u.length; c++) { var d = u[c]; if (n === d.segmentIndex && ("number" != typeof r || "number" != typeof d.partIndex || r === d.partIndex)) { l = c; break } } if (o < 0) { if (0 < l) for (var h = l - 1; 0 <= h; h--) { var p = u[h]; if (o += p.duration, s) { if (o < 0) continue } else if (o + hl <= 0) continue; return { partIndex: p.partIndex, segmentIndex: p.segmentIndex, startTime: a - Ko({ defaultDuration: t.targetDuration, durationList: u, startIndex: l, endIndex: h }) } } return { partIndex: u[0] && u[0].partIndex || null, segmentIndex: u[0] && u[0].segmentIndex || 0, startTime: i } } if (l < 0) { for (var f = l; f < 0; f++) if ((o -= t.targetDuration) < 0) return { partIndex: u[0] && u[0].partIndex || null, segmentIndex: u[0] && u[0].segmentIndex || 0, startTime: i }; l = 0 } for (var m = l; m < u.length; m++) { var g = u[m]; if (o -= g.duration, s) { if (0 < o) continue } else if (0 <= o - hl) continue; return { partIndex: g.partIndex, segmentIndex: g.segmentIndex, startTime: a + Ko({ defaultDuration: t.targetDuration, durationList: u, startIndex: l, endIndex: m }) } } return { segmentIndex: u[u.length - 1].segmentIndex, partIndex: u[u.length - 1].partIndex, startTime: i } }, isEnabled: Jo, isDisabled: function (e) { return e.disabled }, isBlacklisted: Qo, isIncompatible: $o, playlistEnd: Yo, isAes: function (e) { for (var t = 0; t < e.segments.length; t++) if (e.segments[t].key) return !0; return !1 }, hasAttribute: Zo, estimateSegmentRequestTime: function (e, t, i, n) { return Zo("BANDWIDTH", i) ? (e * i.attributes.BANDWIDTH - 8 * (n = void 0 === n ? 0 : n)) / t : NaN }, isLowestEnabledRendition: eu, isAudioOnly: nu, playlistMatch: tu, segmentDurationWithParts: Ho }, ml = tr.log, gl = tr.mergeOptions, W = tr.EventTarget, yl = function (a) { function e(e, t, i) { var n; if (void 0 === i && (i = {}), n = a.call(this) || this, !e) throw new Error( "A non-empty playlist URL or object is required"); n.logger_ = Oo("PlaylistLoader"); var r = i.withCredentials, r = void 0 !== r && r, i = i.handleManifestRedirects, i = void 0 !== i && i; n.src = e, n.vhs_ = t, n.withCredentials = r, n.handleManifestRedirects = i; t = t.options_; return n.customTagParsers = t && t.customTagParsers || [], n.customTagMappers = t && t .customTagMappers || [], n.experimentalLLHLS = t && t.experimentalLLHLS || !1, tr.browser .IE_VERSION && (n.experimentalLLHLS = !1), n.state = "HAVE_NOTHING", n .handleMediaupdatetimeout_ = n.handleMediaupdatetimeout_.bind(ft(n)), n.on("mediaupdatetimeout", n.handleMediaupdatetimeout_), n } mt(e, a); var t = e.prototype; return t.handleMediaupdatetimeout_ = function () { var e, t, i = this; "HAVE_METADATA" === this.state && (e = this.media(), t = dl(this.master.uri, e.uri), this .experimentalLLHLS && (t = function (e, t) { if (t.endList || !t.serverControl) return e; var i, n, r, a, s = {}; return t.serverControl.canBlockReload && (r = t.preloadSegment, i = t .mediaSequence + t.segments.length, r && (n = r.parts || [], -1 < (r = Wo(t) - 1) && r != n.length - 1 && (s._HLS_part = r), (-1 < r || n.length) && i--), s._HLS_msn = i), t.serverControl && t .serverControl.canSkipUntil && (s._HLS_skip = t.serverControl .canSkipDateranges ? "v2" : "YES"), Object.keys(s).length && (a = new window.URL(e), ["_HLS_skip", "_HLS_msn", "_HLS_part"].forEach( function (e) { s.hasOwnProperty(e) && a.searchParams.set(e, s[e]) }), e = a.toString()), e }(t, e)), this.state = "HAVE_CURRENT_METADATA", this.request = this.vhs_.xhr({ uri: t, withCredentials: this.withCredentials }, function (e, t) { if (i.request) return e ? i.playlistRequestError(i.request, i.media(), "HAVE_METADATA") : void i.haveMetadata({ playlistString: i.request.responseText, url: i.media().uri, id: i.media().id }) })) }, t.playlistRequestError = function (e, t, i) { var n = t.uri, t = t.id; this.request = null, i && (this.state = i), this.error = { playlist: this.master.playlists[t], status: e.status, message: "HLS playlist request error at URL: " + n + ".", responseText: e.responseText, code: 500 <= e.status ? 4 : 2 }, this.trigger("error") }, t.parseManifest_ = function (e) { var t = this, i = e.url; return function (e) { var t = e.onwarn, i = e.oninfo, n = e.manifestString, r = e.customTagParsers, a = void 0 === r ? [] : r, r = e.customTagMappers, r = void 0 === r ? [] : r, e = e.experimentalLLHLS, s = new Sr; t && s.on("warn", t), i && s.on("info", i), a.forEach(function (e) { return s.addParser(e) }), r.forEach(function (e) { return s.addTagMapper(e) }), s.push(n), s.end(); var o = s.manifest; e || (["preloadSegment", "skip", "serverControl", "renditionReports", "partInf", "partTargetDuration" ].forEach(function (e) { o.hasOwnProperty(e) && delete o[e] }), o.segments && o.segments.forEach(function (t) { ["parts", "preloadHints"].forEach(function (e) { t.hasOwnProperty(e) && delete t[e] }) })), o.targetDuration || (u = 10, o.segments && o.segments.length && (u = o.segments .reduce(function (e, t) { return Math.max(e, t.duration) }, 0)), t && t("manifest has no targetDuration defaulting to " + u), o .targetDuration = u); var u = Vo(o); return u.length && !o.partTargetDuration && (u = u.reduce(function (e, t) { return Math.max(e, t.duration) }, 0), t && (t("manifest has no partTargetDuration defaulting to " + u), ml .error( "LL-HLS manifest has parts but lacks required #EXT-X-PART-INF:PART-TARGET value. See https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-09#section-4.4.3.7. Playback is not guaranteed." )), o.partTargetDuration = u), o }({ onwarn: function (e) { e = e.message; return t.logger_("m3u8-parser warn for " + i + ": " + e) }, oninfo: function (e) { e = e.message; return t.logger_("m3u8-parser info for " + i + ": " + e) }, manifestString: e.manifestString, customTagParsers: this.customTagParsers, customTagMappers: this.customTagMappers, experimentalLLHLS: this.experimentalLLHLS }) }, t.haveMetadata = function (e) { var t = e.playlistString, i = e.playlistObject, n = e.url, e = e.id; this.request = null, this.state = "HAVE_METADATA"; t = i || this.parseManifest_({ url: n, manifestString: t }); t.lastRequest = Date.now(), su({ playlist: t, uri: n, id: e }); n = hu(this.master, t); this.targetDuration = t.partTargetDuration || t.targetDuration, this.pendingMedia_ = null, n ? ( this.master = n, this.media_ = this.master.playlists[e]) : this.trigger( "playlistunchanged"), this.updateMediaUpdateTimeout_(pu(this.media(), !!n)), this .trigger("loadedplaylist") }, t.dispose = function () { this.trigger("dispose"), this.stopRequest(), window.clearTimeout(this.mediaUpdateTimeout), window.clearTimeout(this.finalRenditionTimeout), this.off() }, t.stopRequest = function () { var e; this.request && (e = this.request, this.request = null, e.onreadystatechange = null, e.abort()) }, t.media = function (i, e) { var n = this; if (!i) return this.media_; if ("HAVE_NOTHING" === this.state) throw new Error("Cannot switch media playlist from " + this .state); if ("string" == typeof i) { if (!this.master.playlists[i]) throw new Error("Unknown playlist URI: " + i); i = this.master.playlists[i] } if (window.clearTimeout(this.finalRenditionTimeout), e) { var t = (i.partTargetDuration || i.targetDuration) / 2 * 1e3 || 5e3; this.finalRenditionTimeout = window.setTimeout(this.media.bind(this, i, !1), t) } else { var r = this.state, e = !this.media_ || i.id !== this.media_.id, t = this.master.playlists[i.id]; if (t && t.endList || i.endList && i.segments.length) return this.request && (this.request .onreadystatechange = null, this.request.abort(), this.request = null), this .state = "HAVE_METADATA", this.media_ = i, void (e && (this.trigger("mediachanging"), "HAVE_MASTER" === r ? this.trigger("loadedmetadata") : this.trigger( "mediachange"))); if (this.updateMediaUpdateTimeout_(pu(i, !0)), e) { if (this.state = "SWITCHING_MEDIA", this.request) { if (i.resolvedUri === this.request.url) return; this.request.onreadystatechange = null, this.request.abort(), this.request = null } this.media_ && this.trigger("mediachanging"), this.pendingMedia_ = i, this.request = this.vhs_.xhr({ uri: i.resolvedUri, withCredentials: this.withCredentials }, function (e, t) { if (n.request) { if (i.lastRequest = Date.now(), i.resolvedUri = Do(n .handleManifestRedirects, i.resolvedUri, t), e) return n .playlistRequestError(n.request, i, r); n.haveMetadata({ playlistString: t.responseText, url: i.uri, id: i.id }), "HAVE_MASTER" === r ? n.trigger("loadedmetadata") : n.trigger( "mediachange") } }) } } }, t.pause = function () { this.mediaUpdateTimeout && (window.clearTimeout(this.mediaUpdateTimeout), this .mediaUpdateTimeout = null), this.stopRequest(), "HAVE_NOTHING" === this.state && (this .started = !1), "SWITCHING_MEDIA" === this.state ? this.media_ ? this.state = "HAVE_METADATA" : this.state = "HAVE_MASTER" : "HAVE_CURRENT_METADATA" === this.state && ( this.state = "HAVE_METADATA") }, t.load = function (e) { var t = this; this.mediaUpdateTimeout && (window.clearTimeout(this.mediaUpdateTimeout), this .mediaUpdateTimeout = null); var i = this.media(); e ? (e = i ? (i.partTargetDuration || i.targetDuration) / 2 * 1e3 : 5e3, this .mediaUpdateTimeout = window.setTimeout(function () { t.mediaUpdateTimeout = null, t.load() }, e)) : this.started ? i && !i.endList ? this.trigger("mediaupdatetimeout") : this .trigger("loadedplaylist") : this.start() }, t.updateMediaUpdateTimeout_ = function (e) { var t = this; this.mediaUpdateTimeout && (window.clearTimeout(this.mediaUpdateTimeout), this .mediaUpdateTimeout = null), this.media() && !this.media().endList && (this .mediaUpdateTimeout = window.setTimeout(function () { t.mediaUpdateTimeout = null, t.trigger("mediaupdatetimeout"), t .updateMediaUpdateTimeout_(e) }, e)) }, t.start = function () { var i = this; if (this.started = !0, "object" == typeof this.src) return this.src.uri || (this.src.uri = window.location.href), this.src.resolvedUri = this.src.uri, void setTimeout( function () { i.setupInitialPlaylist(i.src) }, 0); this.request = this.vhs_.xhr({ uri: this.src, withCredentials: this.withCredentials }, function (e, t) { if (i.request) { if (i.request = null, e) return i.error = { status: t.status, message: "HLS playlist request error at URL: " + i.src + ".", responseText: t.responseText, code: 2 }, "HAVE_NOTHING" === i.state && (i.started = !1), i.trigger("error"); i.src = Do(i.handleManifestRedirects, i.src, t); t = i.parseManifest_({ manifestString: t.responseText, url: i.src }); i.setupInitialPlaylist(t) } }) }, t.srcUri = function () { return "string" == typeof this.src ? this.src : this.src.uri }, t.setupInitialPlaylist = function (e) { if (this.state = "HAVE_MASTER", e.playlists) return this.master = e, ou(this.master, this .srcUri()), e.playlists.forEach(function (t) { t.segments = cu(t), t.segments.forEach(function (e) { lu(e, t.resolvedUri) }) }), this.trigger("loadedplaylist"), void (this.request || this.media(this.master .playlists[0])); var t, i, n, r = this.srcUri() || window.location.href; this.master = (i = ru(0, t = r), (n = { mediaGroups: { AUDIO: {}, VIDEO: {}, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, uri: window.location.href, resolvedUri: window.location.href, playlists: [{ uri: t, id: i, resolvedUri: t, attributes: {} }] }).playlists[i] = n.playlists[0], n.playlists[t] = n.playlists[0], n), this.haveMetadata({ playlistObject: e, url: r, id: this.master.playlists[0].id }), this.trigger("loadedmetadata") }, e }(W), vl = tr.xhr, _l = tr.mergeOptions, zt = Object.freeze({ __proto__: null, createTransferableMessage: _u, initSegmentId: bu, segmentKeyId: Tu, hexDump: Su, tagDump: function (e) { e = e.bytes; return Su(e) }, textRanges: function (e) { for (var t, i, n = "", r = 0; r < e.length; r++) n += (i = r, (t = e).start(i) + "-" + t .end(i) + " "); return n } }), ar = tr.EventTarget, bl = tr.mergeOptions, Tl = function (a) { function e(e, t, i, n) { var r; void 0 === i && (i = {}), (r = a.call(this) || this).masterPlaylistLoader_ = n || ft(r), n || (r .isMaster_ = !0); n = i.withCredentials, n = void 0 !== n && n, i = i.handleManifestRedirects, i = void 0 !== i && i; if (r.vhs_ = t, r.withCredentials = n, r.handleManifestRedirects = i, !e) throw new Error( "A non-empty playlist URL or object is required"); return r.on("minimumUpdatePeriod", function () { r.refreshXml_() }), r.on("mediaupdatetimeout", function () { r.refreshMedia_(r.media().id) }), r.state = "HAVE_NOTHING", r.loadedPlaylists_ = {}, r.logger_ = Oo("DashPlaylistLoader"), r .isMaster_ ? (r.masterPlaylistLoader_.srcUrl = e, r.masterPlaylistLoader_.sidxMapping_ = {}) : r .childPlaylist_ = e, r } mt(e, a); var t = e.prototype; return t.requestErrored_ = function (e, t, i) { return !this.request || (this.request = null, e ? (this.error = "object" != typeof e || e instanceof Error ? { status: t.status, message: "DASH request error at URL: " + t.uri, response: t.response, code: 2 } : e, i && (this.state = i), this.trigger("error"), !0) : void 0) }, t.addSidxSegments_ = function (a, n, r) { var s, o, u = this, l = a.sidx && bs(a.sidx); a.sidx && l && !this.masterPlaylistLoader_.sidxMapping_[l] ? (s = Do(this .handleManifestRedirects, a.sidx.resolvedUri), o = function (e, t) { if (!u.requestErrored_(e, t, n)) { var i, e = u.masterPlaylistLoader_.sidxMapping_; try { i = _o(zs(t.response).subarray(8)) } catch (e) { return void u.requestErrored_(e, t, n) } return e[l] = { sidxInfo: a.sidx, sidx: i }, ms(a, i, a.sidx.resolvedUri), r(!0) } }, this.request = Cu(s, this.vhs_.xhr, function (e, t, i, n) { if (e) return o(e, t); if (!i || "mp4" !== i) return o({ status: t.status, message: "Unsupported " + (i || "unknown") + " container type for sidx segment at URL: " + s, response: "", playlist: a, internal: !0, blacklistDuration: 1 / 0, code: 2 }, t); var r = a.sidx.byterange, i = r.offset, r = r.length; if (n.length >= r + i) return o(e, { response: n.subarray(i, i + r), status: t.status, uri: t.uri }); u.request = u.vhs_.xhr({ uri: s, responseType: "arraybuffer", headers: gu({ byterange: a.sidx.byterange }) }, o) })) : this.mediaRequest_ = window.setTimeout(function () { return r(!1) }, 0) }, t.dispose = function () { this.trigger("dispose"), this.stopRequest(), this.loadedPlaylists_ = {}, window.clearTimeout( this.minimumUpdatePeriodTimeout_), window.clearTimeout(this.mediaRequest_), window .clearTimeout(this.mediaUpdateTimeout), this.mediaUpdateTimeout = null, this.mediaRequest_ = null, this.minimumUpdatePeriodTimeout_ = null, this.masterPlaylistLoader_ .createMupOnMedia_ && (this.off("loadedmetadata", this.masterPlaylistLoader_ .createMupOnMedia_), this.masterPlaylistLoader_.createMupOnMedia_ = null), this.off() }, t.hasPendingRequest = function () { return this.request || this.mediaRequest_ }, t.stopRequest = function () { var e; this.request && (e = this.request, this.request = null, e.onreadystatechange = null, e.abort()) }, t.media = function (t) { var i = this; if (!t) return this.media_; if ("HAVE_NOTHING" === this.state) throw new Error("Cannot switch media playlist from " + this .state); var n = this.state; if ("string" == typeof t) { if (!this.masterPlaylistLoader_.master.playlists[t]) throw new Error( "Unknown playlist URI: " + t); t = this.masterPlaylistLoader_.master.playlists[t] } var e = !this.media_ || t.id !== this.media_.id; if (e && this.loadedPlaylists_[t.id] && this.loadedPlaylists_[t.id].endList) return this.state = "HAVE_METADATA", this.media_ = t, void (e && (this.trigger("mediachanging"), this .trigger("mediachange"))); e && (this.media_ && this.trigger("mediachanging"), this.addSidxSegments_(t, n, function (e) { i.haveMetadata({ startingState: n, playlist: t }) })) }, t.haveMetadata = function (e) { var t = e.startingState, e = e.playlist; this.state = "HAVE_METADATA", this.loadedPlaylists_[e.id] = e, this.mediaRequest_ = null, this .refreshMedia_(e.id), "HAVE_MASTER" === t ? this.trigger("loadedmetadata") : this.trigger( "mediachange") }, t.pause = function () { this.masterPlaylistLoader_.createMupOnMedia_ && (this.off("loadedmetadata", this .masterPlaylistLoader_.createMupOnMedia_), this.masterPlaylistLoader_ .createMupOnMedia_ = null), this.stopRequest(), window.clearTimeout(this .mediaUpdateTimeout), this.mediaUpdateTimeout = null, this.isMaster_ && (window .clearTimeout(this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_), this .masterPlaylistLoader_.minimumUpdatePeriodTimeout_ = null), "HAVE_NOTHING" === this .state && (this.started = !1) }, t.load = function (e) { var t = this; window.clearTimeout(this.mediaUpdateTimeout), this.mediaUpdateTimeout = null; var i = this.media(); e ? (e = i ? i.targetDuration / 2 * 1e3 : 5e3, this.mediaUpdateTimeout = window.setTimeout( function () { return t.load() }, e)) : this.started ? i && !i.endList ? (this.isMaster_ && !this .minimumUpdatePeriodTimeout_ && (this.trigger("minimumUpdatePeriod"), this .updateMinimumUpdatePeriodTimeout_()), this.trigger("mediaupdatetimeout")) : this .trigger("loadedplaylist") : this.start() }, t.start = function () { var i = this; this.started = !0, this.isMaster_ ? this.requestMaster_(function (e, t) { i.haveMaster_(), i.hasPendingRequest() || i.media_ || i.media(i .masterPlaylistLoader_.master.playlists[0]) }) : this.mediaRequest_ = window.setTimeout(function () { return i.haveMaster_() }, 0) }, t.requestMaster_ = function (n) { var r = this; this.request = this.vhs_.xhr({ uri: this.masterPlaylistLoader_.srcUrl, withCredentials: this.withCredentials }, function (e, t) { if (!r.requestErrored_(e, t)) { var i = t.responseText !== r.masterPlaylistLoader_.masterXml_; return r.masterPlaylistLoader_.masterXml_ = t.responseText, t.responseHeaders && t.responseHeaders.date ? r.masterLoaded_ = Date.parse(t.responseHeaders .date) : r.masterLoaded_ = Date.now(), r.masterPlaylistLoader_.srcUrl = Do(r.handleManifestRedirects, r.masterPlaylistLoader_.srcUrl, t), i ? (r .handleMaster_(), void r.syncClientServerClock_(function () { return n(t, i) })) : n(t, i) } "HAVE_NOTHING" === r.state && (r.started = !1) }) }, t.syncClientServerClock_ = function (i) { var n = this, r = Gs(this.masterPlaylistLoader_.masterXml_); return null === r ? (this.masterPlaylistLoader_.clientOffset_ = this.masterLoaded_ - Date.now(), i()) : "DIRECT" === r.method ? (this.masterPlaylistLoader_.clientOffset_ = r.value - Date.now(), i()) : void (this.request = this.vhs_.xhr({ uri: dl(this.masterPlaylistLoader_.srcUrl, r.value), method: r.method, withCredentials: this.withCredentials }, function (e, t) { if (n.request) { if (e) return n.masterPlaylistLoader_.clientOffset_ = n.masterLoaded_ - Date .now(), i(); t = "HEAD" === r.method ? t.responseHeaders && t.responseHeaders.date ? Date .parse(t.responseHeaders.date) : n.masterLoaded_ : Date.parse(t .responseText); n.masterPlaylistLoader_.clientOffset_ = t - Date.now(), i() } })) }, t.haveMaster_ = function () { this.state = "HAVE_MASTER", this.isMaster_ ? this.trigger("loadedplaylist") : this.media_ || this.media(this.childPlaylist_) }, t.handleMaster_ = function () { this.mediaRequest_ = null; var e, t, i, n, r = this.masterPlaylistLoader_.master, t = (a = { masterXml: this.masterPlaylistLoader_.masterXml_, srcUrl: this.masterPlaylistLoader_.srcUrl, clientOffset: this.masterPlaylistLoader_.clientOffset_, sidxMapping: this.masterPlaylistLoader_.sidxMapping_, previousManifest: r }, e = a.masterXml, t = a.srcUrl, i = a.clientOffset, n = a.sidxMapping, a = a .previousManifest, a = Ws(e, { manifestUri: t, clientOffset: i, sidxMapping: n, previousManifest: a }), ou(a, t), a); r && (t = function (e, t, i) { for (var a = !0, s = bl(e, { duration: t.duration, minimumUpdatePeriod: t.minimumUpdatePeriod, timelineStarts: t.timelineStarts }), n = 0; n < t.playlists.length; n++) { var r, o = t.playlists[n]; o.sidx && (r = bs(o.sidx), i && i[r] && i[r].sidx && ms(o, i[r].sidx, o.sidx .resolvedUri)); o = hu(s, o, Iu); o && (s = o, a = !1) } return au(t, function (e, t, i, n) { var r; e.playlists && e.playlists.length && (r = e.playlists[0].id, (e = hu(s, e.playlists[0], Iu)) && ((s = e).mediaGroups[t][i][n] .playlists[0] = s.playlists[r], a = !1)) }), (a = t.minimumUpdatePeriod === e.minimumUpdatePeriod && a) ? null : s }(r, t, this.masterPlaylistLoader_.sidxMapping_)), this.masterPlaylistLoader_.master = t || r; var a = this.masterPlaylistLoader_.master.locations && this.masterPlaylistLoader_.master .locations[0]; return a && a !== this.masterPlaylistLoader_.srcUrl && (this.masterPlaylistLoader_.srcUrl = a), (!r || t && t.minimumUpdatePeriod !== r.minimumUpdatePeriod) && this .updateMinimumUpdatePeriodTimeout_(), Boolean(t) }, t.updateMinimumUpdatePeriodTimeout_ = function () { var e = this.masterPlaylistLoader_; e.createMupOnMedia_ && (e.off("loadedmetadata", e.createMupOnMedia_), e.createMupOnMedia_ = null), e.minimumUpdatePeriodTimeout_ && (window.clearTimeout(e .minimumUpdatePeriodTimeout_), e.minimumUpdatePeriodTimeout_ = null); var t = e.master && e.master.minimumUpdatePeriod; 0 === t && (e.media() ? t = 1e3 * e.media().targetDuration : (e.createMupOnMedia_ = e .updateMinimumUpdatePeriodTimeout_, e.one("loadedmetadata", e.createMupOnMedia_))), "number" != typeof t || t <= 0 ? t < 0 && this.logger_( "found invalid minimumUpdatePeriod of " + t + ", not setting a timeout") : this .createMUPTimeout_(t) }, t.createMUPTimeout_ = function (e) { var t = this.masterPlaylistLoader_; t.minimumUpdatePeriodTimeout_ = window.setTimeout(function () { t.minimumUpdatePeriodTimeout_ = null, t.trigger("minimumUpdatePeriod"), t .createMUPTimeout_(e) }, e) }, t.refreshXml_ = function () { var i = this; this.requestMaster_(function (e, t) { var r, a; t && (i.media_ && (i.media_ = i.masterPlaylistLoader_.master.playlists[i.media_ .id]), i.masterPlaylistLoader_.sidxMapping_ = (t = i.masterPlaylistLoader_ .master, r = i.masterPlaylistLoader_.sidxMapping_, a = xu(t.playlists, r), au(t, function (e, t, i, n) { e.playlists && e.playlists.length && (e = e.playlists, a = bl(a, xu(e, r))) }), a), i.addSidxSegments_(i.media(), i.state, function (e) { i.refreshMedia_(i.media().id) })) }) }, t.refreshMedia_ = function (e) { var t = this; if (!e) throw new Error("refreshMedia_ must take a media id"); this.media_ && this.isMaster_ && this.handleMaster_(); var i = this.masterPlaylistLoader_.master.playlists, n = !this.media_ || this.media_ !== i[e]; n ? this.media_ = i[e] : this.trigger("playlistunchanged"), this.mediaUpdateTimeout || function e() { t.media().endList || (t.mediaUpdateTimeout = window.setTimeout(function () { t.trigger("mediaupdatetimeout"), e() }, pu(t.media(), Boolean(n)))) }(), this.trigger("loadedplaylist") }, e }(ar), Sl = { GOAL_BUFFER_LENGTH: 30, MAX_GOAL_BUFFER_LENGTH: 60, BACK_BUFFER_LENGTH: 30, GOAL_BUFFER_LENGTH_RATE: 1, INITIAL_BANDWIDTH: 4194304, BANDWIDTH_VARIANCE: 1.2, BUFFER_LOW_WATER_LINE: 0, MAX_BUFFER_LOW_WATER_LINE: 30, EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE: 16, BUFFER_LOW_WATER_LINE_RATE: 1, BUFFER_HIGH_WATER_LINE: 30 }, x = function (n) { return function () { var e = function (t) { try { return URL.createObjectURL(new Blob([t], { type: "application/javascript" })) } catch (e) { var i = new BlobBuilder; return i.append(t), URL.createObjectURL(i.getBlob()) } }(n), t = Au(new Worker(e)); t.objURL = e; var i = t.terminate; return t.on = t.addEventListener, t.off = t.removeEventListener, t.terminate = function () { return URL.revokeObjectURL(e), i.call(this) }, t } }, U = function (e) { return "var browserWorkerPolyFill = " + Au.toString() + ";\nbrowserWorkerPolyFill(self);\n" + e }, W = function (e) { return e.toString().replace(/^function.+?{/, "").slice(0, -1) }, wl = x(U(W(function () { var e = function () { this.init = function () { var a = {}; this.on = function (e, t) { a[e] || (a[e] = []), a[e] = a[e].concat(t) }, this.off = function (e, t) { return !!a[e] && (t = a[e].indexOf(t), a[e] = a[e].slice(), a[e] .splice(t, 1), -1 < t) }, this.trigger = function (e) { var t, i, n, r = a[e]; if (r) if (2 === arguments.length) for (i = r.length, t = 0; t < i; ++t) r[t].call(this, arguments[1]); else { for (n = [], t = arguments.length, t = 1; t < arguments .length; ++t) n.push(arguments[t]); for (i = r.length, t = 0; t < i; ++t) r[t].apply(this, n) } }, this.dispose = function () { a = {} } } }; e.prototype.pipe = function (t) { return this.on("data", function (e) { t.push(e) }), this.on("done", function (e) { t.flush(e) }), this.on("partialdone", function (e) { t.partialFlush(e) }), this.on("endedtimeline", function (e) { t.endTimeline(e) }), this.on("reset", function (e) { t.reset(e) }), t }, e.prototype.push = function (e) { this.trigger("data", e) }, e.prototype.flush = function (e) { this.trigger("done", e) }, e.prototype.partialFlush = function (e) { this.trigger("partialdone", e) }, e.prototype.endTimeline = function (e) { this.trigger("endedtimeline", e) }, e.prototype.reset = function (e) { this.trigger("reset", e) }; var u, t, i, n, r, a, s, o, l, c, d, h, p, f, m, g, y, v, _, b, T, S, w, E, k, C, I, x, A, P, L, D, O, M, R, N, U, B, F, j = e, H = Math.pow(2, 32), q = { getUint64: function (e) { var t = new DataView(e.buffer, e.byteOffset, e.byteLength); return t.getBigUint64 ? (e = t.getBigUint64(0)) < Number.MAX_SAFE_INTEGER ? Number(e) : e : t.getUint32(0) * H + t.getUint32(4) }, MAX_UINT32: H }, V = q.MAX_UINT32; !function () { if (T = { avc1: [], avcC: [], btrt: [], dinf: [], dref: [], esds: [], ftyp: [], hdlr: [], mdat: [], mdhd: [], mdia: [], mfhd: [], minf: [], moof: [], moov: [], mp4a: [], mvex: [], mvhd: [], pasp: [], sdtp: [], smhd: [], stbl: [], stco: [], stsc: [], stsd: [], stsz: [], stts: [], styp: [], tfdt: [], tfhd: [], traf: [], trak: [], trun: [], trex: [], tkhd: [], vmhd: [] }, "undefined" != typeof Uint8Array) { for (var e in T) T.hasOwnProperty(e) && (T[e] = [e.charCodeAt(0), e.charCodeAt(1), e .charCodeAt(2), e.charCodeAt(3) ]); S = new Uint8Array(["i".charCodeAt(0), "s".charCodeAt(0), "o".charCodeAt(0), "m" .charCodeAt(0) ]), E = new Uint8Array(["a".charCodeAt(0), "v".charCodeAt(0), "c".charCodeAt(0), "1".charCodeAt(0) ]), w = new Uint8Array([0, 0, 0, 1]), k = 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 ]), C = 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 ]), I = { video: k, audio: C }, P = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1 ]), A = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), L = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0 ]), D = L, O = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), M = L, x = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]) } }(), u = function (e) { for (var t, i = [], n = 0, r = 1; r < arguments.length; r++) i.push(arguments[r]); for (r = i.length; r--;) n += i[r].byteLength; for (t = new Uint8Array(n + 8), new DataView(t.buffer, t.byteOffset, t.byteLength) .setUint32(0, t.byteLength), t.set(e, 4), r = 0, n = 8; r < i.length; r++) t .set(i[r], n), n += i[r].byteLength; return t }, t = function () { return u(T.dinf, u(T.dref, P)) }, i = function (e) { return u(T.esds, new Uint8Array([0, 0, 0, 0, 3, 25, 0, 0, 0, 4, 17, 64, 21, 0, 6, 0, 0, 0, 218, 192, 0, 0, 218, 192, 5, 2, e.audioobjecttype << 3 | e .samplingfrequencyindex >>> 1, e.samplingfrequencyindex << 7 | e .channelcount << 3, 6, 1, 2 ])) }, f = function (e) { return u(T.hdlr, I[e]) }, p = function (e) { var t = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 1, 95, 144, e .duration >>> 24 & 255, e.duration >>> 16 & 255, e.duration >>> 8 & 255, 255 & e.duration, 85, 196, 0, 0 ]); return e.samplerate && (t[12] = e.samplerate >>> 24 & 255, t[13] = e.samplerate >>> 16 & 255, t[14] = e.samplerate >>> 8 & 255, t[15] = 255 & e.samplerate), u(T .mdhd, t) }, h = function (e) { return u(T.mdia, p(e), f(e.type), a(e)) }, r = function (e) { return u(T.mfhd, new Uint8Array([0, 0, 0, 0, (4278190080 & e) >> 24, (16711680 & e) >> 16, (65280 & e) >> 8, 255 & e ])) }, a = function (e) { return u(T.minf, "video" === e.type ? u(T.vmhd, x) : u(T.smhd, A), t(), g(e)) }, We = function (e, t) { for (var i = [], n = t.length; n--;) i[n] = v(t[n]); return u.apply(null, [T.moof, r(e)].concat(i)) }, s = function (e) { for (var t = e.length, i = []; t--;) i[t] = c(e[t]); return u.apply(null, [T.moov, l(4294967295)].concat(i).concat(o(e))) }, o = function (e) { for (var t = e.length, i = []; t--;) i[t] = _(e[t]); return u.apply(null, [T.mvex].concat(i)) }, l = function (e) { e = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 95, 144, (4278190080 & e) >> 24, (16711680 & e) >> 16, (65280 & e) >> 8, 255 & e, 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 u(T.mvhd, e) }, m = function (e) { for (var t, i = e.samples || [], n = new Uint8Array(4 + i.length), r = 0; r < i .length; r++) t = i[r].flags, n[r + 4] = t.dependsOn << 4 | t.isDependedOn << 2 | t.hasRedundancy; return u(T.sdtp, n) }, g = function (e) { return u(T.stbl, y(e), u(T.stts, M), u(T.stsc, D), u(T.stsz, O), u(T.stco, L)) }, y = function (e) { return u(T.stsd, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]), ("video" === e.type ? R : N)(e)) }, R = function (e) { for (var t, i, n = e.sps || [], r = e.pps || [], a = [], s = [], o = 0; o < n .length; o++) a.push((65280 & n[o].byteLength) >>> 8), a.push(255 & n[o] .byteLength), a = a.concat(Array.prototype.slice.call(n[o])); for (o = 0; o < r.length; o++) s.push((65280 & r[o].byteLength) >>> 8), s.push(255 & r[o].byteLength), s = s.concat(Array.prototype.slice.call(r[o])); return t = [T.avc1, 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, (65280 & e.width) >> 8, 255 & e.width, ( 65280 & e.height) >> 8, 255 & e.height, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 19, 118, 105, 100, 101, 111, 106, 115, 45, 99, 111, 110, 116, 114, 105, 98, 45, 104, 108, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17 ]), u(T.avcC, new Uint8Array([1, e.profileIdc, e.profileCompatibility, e .levelIdc, 255 ].concat([n.length], a, [r.length], s))), u(T.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192 ]))], e.sarRatio && (i = e.sarRatio[0], e = e.sarRatio[1], t.push(u(T.pasp, new Uint8Array([(4278190080 & i) >> 24, (16711680 & i) >> 16, ( 65280 & i) >> 8, 255 & i, (4278190080 & e) >> 24, ( 16711680 & e) >> 16, (65280 & e) >> 8, 255 & e])))), u.apply(null, t) }, N = function (e) { return u(T.mp4a, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, ( 65280 & e.channelcount) >> 8, 255 & e.channelcount, (65280 & e .samplesize) >> 8, 255 & e.samplesize, 0, 0, 0, 0, (65280 & e .samplerate) >> 8, 255 & e.samplerate, 0, 0]), i(e)) }, d = function (e) { e = new Uint8Array([0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, (4278190080 & e.id) >> 24, ( 16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 0, (4278190080 & e.duration) >> 24, (16711680 & e.duration) >> 16, (65280 & e.duration) >> 8, 255 & e.duration, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, (65280 & e.width) >> 8, 255 & e.width, 0, 0, (65280 & e.height) >> 8, 255 & e.height, 0, 0 ]); return u(T.tkhd, e) }, v = function (e) { var t, i = u(T.tfhd, new Uint8Array([0, 0, 0, 58, (4278190080 & e.id) >> 24, ( 16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ])), n = Math.floor(e.baseMediaDecodeTime / V), r = Math.floor(e.baseMediaDecodeTime % V), n = u(T.tfdt, new Uint8Array([1, 0, 0, 0, n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n, r >>> 24 & 255, r >>> 16 & 255, r >>> 8 & 255, 255 & r ])); return "audio" === e.type ? (t = b(e, 92), u(T.traf, i, n, t)) : (r = m(e), t = b(e, r.length + 92), u(T.traf, i, n, t, r)) }, c = function (e) { return e.duration = e.duration || 4294967295, u(T.trak, d(e), h(e)) }, _ = function (e) { var t = new Uint8Array([0, 0, 0, 0, (4278190080 & e.id) >> 24, (16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1 ]); return "video" !== e.type && (t[t.length - 1] = 0), u(T.trex, t) }, U = function (e, t) { var i = 0, n = 0, r = 0, a = 0; return e.length && (void 0 !== e[0].duration && (i = 1), void 0 !== e[0].size && ( n = 2), void 0 !== e[0].flags && (r = 4), void 0 !== e[0] .compositionTimeOffset && (a = 8)), [0, 0, i | n | r | a, 1, (4278190080 & e .length) >>> 24, (16711680 & e.length) >>> 16, (65280 & e.length) >>> 8, 255 & e.length, (4278190080 & t) >>> 24, (16711680 & t) >>> 16, (65280 & t) >>> 8, 255 & t ] }, B = function (e, t) { var i, n, r, a, s = e.samples || []; for (t += 20 + 16 * s.length, t = U(s, t), (n = new Uint8Array(t.length + 16 * s .length)).set(t), i = t.length, a = 0; a < s.length; a++) r = s[a], n[i++] = (4278190080 & r.duration) >>> 24, n[i++] = (16711680 & r.duration) >>> 16, n[ i++] = (65280 & r.duration) >>> 8, n[i++] = 255 & r.duration, n[i++] = ( 4278190080 & r.size) >>> 24, n[i++] = (16711680 & r.size) >>> 16, n[i++] = ( 65280 & r.size) >>> 8, n[i++] = 255 & r.size, n[i++] = r.flags.isLeading << 2 | r.flags.dependsOn, n[i++] = r.flags.isDependedOn << 6 | r.flags .hasRedundancy << 4 | r.flags.paddingValue << 1 | r.flags.isNonSyncSample, n[ i++] = 61440 & r.flags.degradationPriority, n[i++] = 15 & r.flags .degradationPriority, n[i++] = (4278190080 & r.compositionTimeOffset) >>> 24, n[ i++] = (16711680 & r.compositionTimeOffset) >>> 16, n[i++] = (65280 & r .compositionTimeOffset) >>> 8, n[i++] = 255 & r.compositionTimeOffset; return u(T.trun, n) }, F = function (e, t) { var i, n, r, a, s = e.samples || []; for (t += 20 + 8 * s.length, t = U(s, t), (i = new Uint8Array(t.length + 8 * s .length)).set(t), n = t.length, a = 0; a < s.length; a++) r = s[a], i[n++] = (4278190080 & r.duration) >>> 24, i[n++] = (16711680 & r.duration) >>> 16, i[ n++] = (65280 & r.duration) >>> 8, i[n++] = 255 & r.duration, i[n++] = ( 4278190080 & r.size) >>> 24, i[n++] = (16711680 & r.size) >>> 16, i[n++] = ( 65280 & r.size) >>> 8, i[n++] = 255 & r.size; return u(T.trun, i) }, b = function (e, t) { return ("audio" === e.type ? F : B)(e, t) }; n = function () { return u(T.ftyp, S, w, S, E) }; function W(e, t) { var i = { size: 0, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0, degradationPriority: 0, isNonSyncSample: 1 } }; return i.dataOffset = t, i.compositionTimeOffset = e.pts - e.dts, i.duration = e .duration, i.size = 4 * e.length, i.size += e.byteLength, e.keyFrame && (i.flags .dependsOn = 2, i.flags.isNonSyncSample = 0), i } function G(e) { for (var t = []; e--;) t.push(0); return t } function z() { var e, i; return X || (e = { 96e3: [ie, [227, 64], G(154), [56]], 88200: [ie, [231], G(170), [56]], 64e3: [ie, [248, 192], G(240), [56]], 48e3: [ie, [255, 192], G(268), [55, 148, 128], G(54), [112]], 44100: [ie, [255, 192], G(268), [55, 163, 128], G(84), [112]], 32e3: [ie, [255, 192], G(268), [55, 234], G(226), [112]], 24e3: [ie, [255, 192], G(268), [55, 255, 128], G(268), [111, 112], G(126), [ 224 ]], 16e3: [ie, [255, 192], G(268), [55, 255, 128], G(268), [111, 255], G(269), [ 223, 108 ], G(195), [1, 192]], 12e3: [ne, G(268), [3, 127, 248], G(268), [6, 255, 240], G(268), [13, 255, 224 ], G(268), [27, 253, 128], G(259), [56]], 11025: [ne, G(268), [3, 127, 248], G(268), [6, 255, 240], G(268), [13, 255, 224 ], G(268), [27, 255, 192], G(268), [55, 175, 128], G(108), [112]], 8e3: [ne, G(268), [3, 121, 16], G(47), [7]] }, i = e, X = Object.keys(i).reduce(function (e, t) { return e[t] = new Uint8Array(i[t].reduce(function (e, t) { return e.concat(t) }, [])), e }, {})), X } var X, K = function (e) { return u(T.mdat, e) }, Y = We, Q = function (e) { var t = n(), i = s(e), e = new Uint8Array(t.byteLength + i.byteLength); return e.set(t), e.set(i, t.byteLength), e }, $ = function (e) { var t, i, n = [], r = []; for (r.byteLength = 0, r.nalCount = 0, r.duration = 0, t = n.byteLength = 0; t < e .length; t++) "access_unit_delimiter_rbsp" === (i = e[t]).nalUnitType ? (n .length && (n.duration = i.dts - n.dts, r.byteLength += n.byteLength, r .nalCount += n.length, r.duration += n.duration, r.push(n)), (n = [i]) .byteLength = i.data.byteLength, n.pts = i.pts, n.dts = i.dts) : ( "slice_layer_without_partitioning_rbsp_idr" === i.nalUnitType && (n .keyFrame = !0), n.duration = i.dts - n.dts, n.byteLength += i.data .byteLength, n.push(i)); return r.length && (!n.duration || n.duration <= 0) && (n.duration = r[r.length - 1] .duration), r.byteLength += n.byteLength, r.nalCount += n.length, r .duration += n.duration, r.push(n), r }, J = function (e) { var t, i, n = [], r = []; for (n.byteLength = 0, n.nalCount = 0, n.duration = 0, n.pts = e[0].pts, n.dts = e[ 0].dts, r.byteLength = 0, r.nalCount = 0, r.duration = 0, r.pts = e[0].pts, r.dts = e[0].dts, t = 0; t < e.length; t++) (i = e[t]).keyFrame ? (n.length && (r .push(n), r.byteLength += n.byteLength, r.nalCount += n.nalCount, r .duration += n.duration), (n = [i]).nalCount = i.length, n.byteLength = i.byteLength, n.pts = i.pts, n.dts = i.dts, n.duration = i.duration) : (n .duration += i.duration, n.nalCount += i.length, n.byteLength += i .byteLength, n.push(i)); return r.length && n.duration <= 0 && (n.duration = r[r.length - 1].duration), r .byteLength += n.byteLength, r.nalCount += n.nalCount, r.duration += n.duration, r.push(n), r }, Z = function (e) { var t; return !e[0][0].keyFrame && 1 < e.length && (t = e.shift(), e.byteLength -= t .byteLength, e.nalCount -= t.nalCount, e[0][0].dts = t.dts, e[0][0].pts = t .pts, e[0][0].duration += t.duration), e }, ee = function (e, t) { for (var i, n, r, a = t || 0, s = [], o = 0; o < e.length; o++) for (n = e[o], i = 0; i < n.length; i++) r = n[i], a += (r = W(r, a)).size, s .push(r); return s }, te = function (e) { for (var t, i, n, r, a, s = 0, o = e.byteLength, u = e.nalCount, l = new Uint8Array( o + 4 * u), c = new DataView(l.buffer), d = 0; d < e.length; d++) for (n = e[d], t = 0; t < n.length; t++) for (r = n[t], i = 0; i < r.length; i++) a = r[i], c.setUint32(s, a.data .byteLength), l.set(a.data, s += 4), s += a.data.byteLength; return l }, ie = [33, 16, 5, 32, 164, 27], ne = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252], re = function (e) { return 9e4 * e }, ae = function (e, t) { return e * t }, se = function (e) { return e / 9e4 }, oe = function (e, t) { return e / t }, ue = 9e4, le = re, ce = se, de = function (e, t) { return re(oe(e, t)) }, he = function (e, t) { return ae(se(e), t) }, pe = function (e, t, i) { return se(i ? e : e - t) }, fe = function (e, t, i, n) { var r, a, s, o, u, l, c = 0, d = 0; if (t.length && (r = de(e.baseMediaDecodeTime, e.samplerate), a = Math.ceil(ue / (e .samplerate / 1024)), i && n && (s = r - Math.max(i, n), d = (c = Math .floor(s / a)) * a), !(c < 1 || ue / 2 < d))) { for (o = (o = z()[e.samplerate]) || t[0].data, u = 0; u < c; u++) l = t[0], t .splice(0, 0, { data: o, dts: l.dts - a, pts: l.pts - a }); return e.baseMediaDecodeTime -= Math.floor(he(d, e.samplerate)), d } }, me = function (e, t, i) { return t.minSegmentDts >= i ? e : (t.minSegmentDts = 1 / 0, e.filter(function (e) { return e.dts >= i && (t.minSegmentDts = Math.min(t.minSegmentDts, e .dts), t.minSegmentPts = t.minSegmentDts, !0) })) }, ge = function (e) { for (var t, i = [], n = 0; n < e.length; n++) t = e[n], i.push({ size: t.data.byteLength, duration: 1024 }); return i }, ye = function (e) { for (var t, i = 0, n = new Uint8Array(function (e) { for (var t = 0, i = 0; i < e.length; i++) t += e[i].data.byteLength; return t }(e)), r = 0; r < e.length; r++) t = e[r], n.set(t.data, i), i += t.data .byteLength; return n }, ve = ue, _e = function (e) { delete e.minSegmentDts, delete e.maxSegmentDts, delete e.minSegmentPts, delete e .maxSegmentPts }, be = function (e, t) { var i = e.minSegmentDts; return t || (i -= e.timelineStartInfo.dts), t = e.timelineStartInfo .baseMediaDecodeTime, t += i, t = Math.max(0, t), "audio" === e.type && (t *= e .samplerate / ve, t = Math.floor(t)), t }, Te = function (e, t) { "number" == typeof t.pts && (void 0 === e.timelineStartInfo.pts && (e .timelineStartInfo.pts = t.pts), void 0 === e.minSegmentPts ? e .minSegmentPts = t.pts : e.minSegmentPts = Math.min(e.minSegmentPts, t.pts), void 0 === e.maxSegmentPts ? e.maxSegmentPts = t.pts : e.maxSegmentPts = Math.max(e.maxSegmentPts, t.pts)), "number" == typeof t.dts && (void 0 === e .timelineStartInfo.dts && (e.timelineStartInfo.dts = t.dts), void 0 === e .minSegmentDts ? e.minSegmentDts = t.dts : e.minSegmentDts = Math.min(e .minSegmentDts, t.dts), void 0 === e.maxSegmentDts ? e.maxSegmentDts = t .dts : e.maxSegmentDts = Math.max(e.maxSegmentDts, t.dts)) }, Se = function (e) { for (var t = 0, i = { payloadType: -1, payloadSize: 0 }, n = 0, r = 0; t < e.byteLength && 128 !== e[t];) { for (; 255 === e[t];) n += 255, t++; for (n += e[t++]; 255 === e[t];) r += 255, t++; if (r += e[t++], !i.payload && 4 === n) { if ("GA94" === String.fromCharCode(e[t + 3], e[t + 4], e[t + 5], e[t + 6])) { i.payloadType = n, i.payloadSize = r, i.payload = e.subarray(t, t + r); break } i.payload = void 0 } t += r, r = n = 0 } return i }, we = function (e) { return 181 !== e.payload[0] || 49 != (e.payload[1] << 8 | e.payload[2]) || "GA94" !== String.fromCharCode(e.payload[3], e.payload[4], e.payload[5], e .payload[6]) || 3 !== e.payload[7] ? null : e.payload.subarray(8, e.payload .length - 1) }, Ee = function (e, t) { var i, n, r, a, s = []; if (!(64 & t[0])) return s; for (n = 31 & t[0], i = 0; i < n; i++) a = { type: 3 & t[2 + (r = 3 * i)], pts: e }, 4 & t[2 + r] && (a.ccData = t[3 + r] << 8 | t[4 + r], s.push(a)); return s }, ke = function (e) { for (var t = e.byteLength, i = [], n = 1; n < t - 2;) 0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] ? (i.push(n + 2), n += 2) : n++; if (0 === i.length) return e; for (var r = t - i.length, a = new Uint8Array(r), s = 0, n = 0; n < r; s++, n++) s === i[0] && (s++, i.shift()), a[n] = e[s]; return a }, Ce = 4, Ie = function e(t) { t = t || {}, e.prototype.init.call(this), this.parse708captions_ = "boolean" != typeof t.parse708captions || t.parse708captions, this.captionPackets_ = [], this .ccStreams_ = [new Ue(0, 0), new Ue(0, 1), new Ue(1, 0), new Ue(1, 1)], this .parse708captions_ && (this.cc708Stream_ = new De({ captionServices: t.captionServices })), this.reset(), this.ccStreams_.forEach(function (e) { e.on("data", this.trigger.bind(this, "data")), e.on("partialdone", this .trigger.bind(this, "partialdone")), e.on("done", this.trigger .bind(this, "done")) }, this), this.parse708captions_ && (this.cc708Stream_.on("data", this.trigger .bind(this, "data")), this.cc708Stream_.on("partialdone", this.trigger .bind(this, "partialdone")), this.cc708Stream_.on("done", this.trigger .bind(this, "done"))) }; (Ie.prototype = new j).push = function (e) { var t, i; if ("sei_rbsp" === e.nalUnitType && (t = Se(e.escapedRBSP)).payload && t .payloadType === Ce && (i = we(t))) if (e.dts < this.latestDts_) this.ignoreNextEqualDts_ = !0; else { if (e.dts === this.latestDts_ && this.ignoreNextEqualDts_) return this .numSameDts_--, void (this.numSameDts_ || (this .ignoreNextEqualDts_ = !1)); i = Ee(e.pts, i), this.captionPackets_ = this.captionPackets_.concat(i), this.latestDts_ !== e.dts && (this.numSameDts_ = 0), this.numSameDts_++, this.latestDts_ = e.dts } }, Ie.prototype.flushCCStreams = function (t) { this.ccStreams_.forEach(function (e) { return "flush" === t ? e.flush() : e.partialFlush() }, this) }, Ie.prototype.flushStream = function (e) { this.captionPackets_.length && (this.captionPackets_.forEach(function (e, t) { e.presortIndex = t }), this.captionPackets_.sort(function (e, t) { return e.pts === t.pts ? e.presortIndex - t.presortIndex : e.pts - t .pts }), this.captionPackets_.forEach(function (e) { e.type < 2 ? this.dispatchCea608Packet(e) : this .dispatchCea708Packet(e) }, this), this.captionPackets_.length = 0), this.flushCCStreams(e) }, Ie.prototype.flush = function () { return this.flushStream("flush") }, Ie.prototype.partialFlush = function () { return this.flushStream("partialFlush") }, Ie.prototype.reset = function () { this.latestDts_ = null, this.ignoreNextEqualDts_ = !1, this.numSameDts_ = 0, this .activeCea608Channel_ = [null, null], this.ccStreams_.forEach(function (e) { e.reset() }) }, Ie.prototype.dispatchCea608Packet = function (e) { this.setsTextOrXDSActive(e) ? this.activeCea608Channel_[e.type] = null : this .setsChannel1Active(e) ? this.activeCea608Channel_[e.type] = 0 : this .setsChannel2Active(e) && (this.activeCea608Channel_[e.type] = 1), null !== this .activeCea608Channel_[e.type] && this.ccStreams_[(e.type << 1) + this .activeCea608Channel_[e.type]].push(e) }, Ie.prototype.setsChannel1Active = function (e) { return 4096 == (30720 & e.ccData) }, Ie.prototype.setsChannel2Active = function (e) { return 6144 == (30720 & e.ccData) }, Ie.prototype.setsTextOrXDSActive = function (e) { return 256 == (28928 & e.ccData) || 4138 == (30974 & e.ccData) || 6186 == (30974 & e .ccData) }, Ie.prototype.dispatchCea708Packet = function (e) { this.parse708captions_ && this.cc708Stream_.push(e) }; function xe(e) { return 32 <= e && e <= 127 || 160 <= e && e <= 255 } function Ae(e) { this.windowNum = e, this.reset() } var Pe = { 127: 9834, 4128: 32, 4129: 160, 4133: 8230, 4138: 352, 4140: 338, 4144: 9608, 4145: 8216, 4146: 8217, 4147: 8220, 4148: 8221, 4149: 8226, 4153: 8482, 4154: 353, 4156: 339, 4157: 8480, 4159: 376, 4214: 8539, 4215: 8540, 4216: 8541, 4217: 8542, 4218: 9168, 4219: 9124, 4220: 9123, 4221: 9135, 4222: 9126, 4223: 9121, 4256: 12600 }; Ae.prototype.reset = function () { this.clearText(), this.pendingNewLine = !1, this.winAttr = {}, this.penAttr = {}, this.penLoc = {}, this.penColor = {}, this.visible = 0, this.rowLock = 0, this .columnLock = 0, this.priority = 0, this.relativePositioning = 0, this .anchorVertical = 0, this.anchorHorizontal = 0, this.anchorPoint = 0, this .rowCount = 1, this.virtualRowCount = this.rowCount + 1, this.columnCount = 41, this.windowStyle = 0, this.penStyle = 0 }, Ae.prototype.getText = function () { return this.rows.join("\n") }, Ae.prototype.clearText = function () { this.rows = [""], this.rowIdx = 0 }, Ae.prototype.newLine = function (e) { for (this.rows.length >= this.virtualRowCount && "function" == typeof this .beforeRowOverflow && this.beforeRowOverflow(e), 0 < this.rows.length && (this .rows.push(""), this.rowIdx++); this.rows.length > this.virtualRowCount;) this.rows.shift(), this.rowIdx-- }, Ae.prototype.isEmpty = function () { return 0 === this.rows.length || 1 === this.rows.length && "" === this.rows[0] }, Ae.prototype.addText = function (e) { this.rows[this.rowIdx] += e }, Ae.prototype.backspace = function () { var e; this.isEmpty() || (e = this.rows[this.rowIdx], this.rows[this.rowIdx] = e.substr(0, e.length - 1)) }; function Le(e, t, i) { this.serviceNum = e, this.text = "", this.currentWindow = new Ae(-1), this.windows = [], this.stream = i, "string" == typeof t && this.createTextDecoder(t) } Le.prototype.init = function (e, t) { this.startPts = e; for (var i = 0; i < 8; i++) this.windows[i] = new Ae(i), "function" == typeof t && ( this.windows[i].beforeRowOverflow = t) }, Le.prototype.setCurrentWindow = function (e) { this.currentWindow = this.windows[e] }, Le.prototype.createTextDecoder = function (t) { if ("undefined" == typeof TextDecoder) this.stream.trigger("log", { level: "warn", message: "The `encoding` option is unsupported without TextDecoder support" }); else try { this.textDecoder_ = new TextDecoder(t) } catch (e) { this.stream.trigger("log", { level: "warn", message: "TextDecoder could not be created with " + t + " encoding. " + e }) } }; var De = function e(t) { t = t || {}, e.prototype.init.call(this); var i, n = this, r = t.captionServices || {}, a = {}; Object.keys(r).forEach(function (e) { i = r[e], /^SERVICE/.test(e) && (a[e] = i.encoding) }), this.serviceEncodings = a, this.current708Packet = null, this.services = {}, this.push = function (e) { (3 === e.type || null === n.current708Packet) && n.new708Packet(), n .add708Bytes(e) } }; De.prototype = new j, De.prototype.new708Packet = function () { null !== this.current708Packet && this.push708Packet(), this.current708Packet = { data: [], ptsVals: [] } }, De.prototype.add708Bytes = function (e) { var t = e.ccData, i = t >>> 8, t = 255 & t; this.current708Packet.ptsVals.push(e.pts), this.current708Packet.data.push(i), this .current708Packet.data.push(t) }, De.prototype.push708Packet = function () { var e, t = this.current708Packet, i = t.data, n = null, r = 0, a = i[r++]; for (t.seq = a >> 6, t.sizeCode = 63 & a; r < i.length; r++) e = 31 & (a = i[r++]), 7 === (n = a >> 5) && 0 < e && (n = i[r++]), this.pushServiceBlock(n, r, e), 0 < e && (r += e - 1) }, De.prototype.pushServiceBlock = function (e, t, i) { for (var n, r = t, a = this.current708Packet.data, s = (s = this.services[e]) || this.initService(e, r); r < t + i && r < a.length; r++) n = a[r], xe(n) ? r = this.handleText(r, s) : 24 === n ? r = this.multiByteCharacter(r, s) : 16 === n ? r = this.extendedCommands(r, s) : 128 <= n && n <= 135 ? r = this .setCurrentWindow(r, s) : 152 <= n && n <= 159 ? r = this.defineWindow(r, s) : 136 === n ? r = this.clearWindows(r, s) : 140 === n ? r = this.deleteWindows(r, s) : 137 === n ? r = this.displayWindows(r, s) : 138 === n ? r = this .hideWindows(r, s) : 139 === n ? r = this.toggleWindows(r, s) : 151 === n ? r = this.setWindowAttributes(r, s) : 144 === n ? r = this.setPenAttributes(r, s) : 145 === n ? r = this.setPenColor(r, s) : 146 === n ? r = this.setPenLocation(r, s) : 143 === n ? s = this.reset(r, s) : 8 === n ? s.currentWindow .backspace() : 12 === n ? s.currentWindow.clearText() : 13 === n ? s .currentWindow.pendingNewLine = !0 : 14 === n ? s.currentWindow.clearText() : 141 === n && r++ }, De.prototype.extendedCommands = function (e, t) { var i = this.current708Packet.data[++e]; return e = xe(i) ? this.handleText(e, t, { isExtended: !0 }) : e }, De.prototype.getPts = function (e) { return this.current708Packet.ptsVals[Math.floor(e / 2)] }, De.prototype.initService = function (t, e) { var i, n = "SERVICE" + t, r = this; return n in this.serviceEncodings && (i = this.serviceEncodings[n]), this.services[ t] = new Le(t, i, r), this.services[t].init(this.getPts(e), function (e) { r.flushDisplayed(e, r.services[t]) }), this.services[t] }, De.prototype.handleText = function (e, t, i) { var n, r = i && i.isExtended, a = i && i.isMultiByte, s = this.current708Packet.data, o = r ? 4096 : 0, u = s[e], i = s[e + 1], s = t.currentWindow, l = t.textDecoder_ && !r ? (a ? (n = [u, i], e++) : n = [u], t.textDecoder_ .decode(new Uint8Array(n))) : (l = Pe[u = o | u] || u, 4096 & u && u === l ? "" : String.fromCharCode(l)); return s.pendingNewLine && !s.isEmpty() && s.newLine(this.getPts(e)), s .pendingNewLine = !1, s.addText(l), e }, De.prototype.multiByteCharacter = function (e, t) { var i = this.current708Packet.data, n = i[e + 1], i = i[e + 2]; return e = xe(n) && xe(i) ? this.handleText(++e, t, { isMultiByte: !0 }) : e }, De.prototype.setCurrentWindow = function (e, t) { var i = this.current708Packet.data[e]; return t.setCurrentWindow(7 & i), e }, De.prototype.defineWindow = function (e, t) { var i = this.current708Packet.data, n = i[e]; t.setCurrentWindow(7 & n); t = t.currentWindow, n = i[++e]; return t.visible = (32 & n) >> 5, t.rowLock = (16 & n) >> 4, t.columnLock = (8 & n) >> 3, t.priority = 7 & n, n = i[++e], t.relativePositioning = (128 & n) >> 7, t.anchorVertical = 127 & n, n = i[++e], t.anchorHorizontal = n, n = i[++e], t .anchorPoint = (240 & n) >> 4, t.rowCount = 15 & n, n = i[++e], t.columnCount = 63 & n, n = i[++e], t.windowStyle = (56 & n) >> 3, t.penStyle = 7 & n, t .virtualRowCount = t.rowCount + 1, e }, De.prototype.setWindowAttributes = function (e, t) { var i = this.current708Packet.data, n = i[e], t = t.currentWindow.winAttr, n = i[++e]; return t.fillOpacity = (192 & n) >> 6, t.fillRed = (48 & n) >> 4, t.fillGreen = ( 12 & n) >> 2, t.fillBlue = 3 & n, n = i[++e], t.borderType = (192 & n) >> 6, t.borderRed = (48 & n) >> 4, t.borderGreen = (12 & n) >> 2, t.borderBlue = 3 & n, n = i[++e], t.borderType += (128 & n) >> 5, t.wordWrap = (64 & n) >> 6, t .printDirection = (48 & n) >> 4, t.scrollDirection = (12 & n) >> 2, t.justify = 3 & n, n = i[++e], t.effectSpeed = (240 & n) >> 4, t.effectDirection = (12 & n) >> 2, t.displayEffect = 3 & n, e }, De.prototype.flushDisplayed = function (e, t) { for (var i = [], n = 0; n < 8; n++) t.windows[n].visible && !t.windows[n] .isEmpty() && i.push(t.windows[n].getText()); t.endPts = e, t.text = i.join("\n\n"), this.pushCaption(t), t.startPts = e }, De.prototype.pushCaption = function (e) { "" !== e.text && (this.trigger("data", { startPts: e.startPts, endPts: e.endPts, text: e.text, stream: "cc708_" + e.serviceNum }), e.text = "", e.startPts = e.endPts) }, De.prototype.displayWindows = function (e, t) { var i = this.current708Packet.data[++e], n = this.getPts(e); this.flushDisplayed(n, t); for (var r = 0; r < 8; r++) i & 1 << r && (t.windows[r].visible = 1); return e }, De.prototype.hideWindows = function (e, t) { var i = this.current708Packet.data[++e], n = this.getPts(e); this.flushDisplayed(n, t); for (var r = 0; r < 8; r++) i & 1 << r && (t.windows[r].visible = 0); return e }, De.prototype.toggleWindows = function (e, t) { var i = this.current708Packet.data[++e], n = this.getPts(e); this.flushDisplayed(n, t); for (var r = 0; r < 8; r++) i & 1 << r && (t.windows[r].visible ^= 1); return e }, De.prototype.clearWindows = function (e, t) { var i = this.current708Packet.data[++e], n = this.getPts(e); this.flushDisplayed(n, t); for (var r = 0; r < 8; r++) i & 1 << r && t.windows[r].clearText(); return e }, De.prototype.deleteWindows = function (e, t) { var i = this.current708Packet.data[++e], n = this.getPts(e); this.flushDisplayed(n, t); for (var r = 0; r < 8; r++) i & 1 << r && t.windows[r].reset(); return e }, De.prototype.setPenAttributes = function (e, t) { var i = this.current708Packet.data, n = i[e], t = t.currentWindow.penAttr, n = i[++e]; return t.textTag = (240 & n) >> 4, t.offset = (12 & n) >> 2, t.penSize = 3 & n, n = i[++e], t.italics = (128 & n) >> 7, t.underline = (64 & n) >> 6, t.edgeType = ( 56 & n) >> 3, t.fontStyle = 7 & n, e }, De.prototype.setPenColor = function (e, t) { var i = this.current708Packet.data, n = i[e], t = t.currentWindow.penColor, n = i[++e]; return t.fgOpacity = (192 & n) >> 6, t.fgRed = (48 & n) >> 4, t.fgGreen = (12 & n) >> 2, t.fgBlue = 3 & n, n = i[++e], t.bgOpacity = (192 & n) >> 6, t.bgRed = ( 48 & n) >> 4, t.bgGreen = (12 & n) >> 2, t.bgBlue = 3 & n, n = i[++e], t .edgeRed = (48 & n) >> 4, t.edgeGreen = (12 & n) >> 2, t.edgeBlue = 3 & n, e }, De.prototype.setPenLocation = function (e, t) { var i = this.current708Packet.data, n = i[e], r = t.currentWindow.penLoc; return t.currentWindow.pendingNewLine = !0, n = i[++e], r.row = 15 & n, n = i[++e], r.column = 63 & n, e }, De.prototype.reset = function (e, t) { var i = this.getPts(e); return this.flushDisplayed(i, t), this.initService(t.serviceNum, e) }; function Oe(e) { return null === e ? "" : (e = Re[e] || e, String.fromCharCode(e)) } function Me() { for (var e = [], t = 15; t--;) e.push(""); return e } var Re = { 42: 225, 92: 233, 94: 237, 95: 243, 96: 250, 123: 231, 124: 247, 125: 209, 126: 241, 127: 9608, 304: 174, 305: 176, 306: 189, 307: 191, 308: 8482, 309: 162, 310: 163, 311: 9834, 312: 224, 313: 160, 314: 232, 315: 226, 316: 234, 317: 238, 318: 244, 319: 251, 544: 193, 545: 201, 546: 211, 547: 218, 548: 220, 549: 252, 550: 8216, 551: 161, 552: 42, 553: 39, 554: 8212, 555: 169, 556: 8480, 557: 8226, 558: 8220, 559: 8221, 560: 192, 561: 194, 562: 199, 563: 200, 564: 202, 565: 203, 566: 235, 567: 206, 568: 207, 569: 239, 570: 212, 571: 217, 572: 249, 573: 219, 574: 171, 575: 187, 800: 195, 801: 227, 802: 205, 803: 204, 804: 236, 805: 210, 806: 242, 807: 213, 808: 245, 809: 123, 810: 125, 811: 92, 812: 94, 813: 95, 814: 124, 815: 126, 816: 196, 817: 228, 818: 214, 819: 246, 820: 223, 821: 165, 822: 164, 823: 9474, 824: 197, 825: 229, 826: 216, 827: 248, 828: 9484, 829: 9488, 830: 9492, 831: 9496 }, Ne = [4352, 4384, 4608, 4640, 5376, 5408, 5632, 5664, 5888, 5920, 4096, 4864, 4896, 5120, 5152 ], Ue = function e(t, i) { e.prototype.init.call(this), this.field_ = t || 0, this.dataChannel_ = i || 0, this .name_ = "CC" + (1 + (this.field_ << 1 | this.dataChannel_)), this .setConstants(), this.reset(), this.push = function (e) { var t, i, n, r, a = 32639 & e.ccData; a !== this.lastControlCode_ ? (4096 == (61440 & a) ? this.lastControlCode_ = a : a !== this.PADDING_ && (this.lastControlCode_ = null), t = a >>> 8, i = 255 & a, a === this.PADDING_ || (a === this .RESUME_CAPTION_LOADING_ ? this.mode_ = "popOn" : a === this .END_OF_CAPTION_ ? (this.mode_ = "popOn", this.clearFormatting(e .pts), this.flushDisplayed(e.pts), r = this.displayed_, this.displayed_ = this.nonDisplayed_, this.nonDisplayed_ = r, this.startPts_ = e.pts) : a === this.ROLL_UP_2_ROWS_ ? ( this.rollUpRows_ = 2, this.setRollUp(e.pts)) : a === this .ROLL_UP_3_ROWS_ ? (this.rollUpRows_ = 3, this.setRollUp(e .pts)) : a === this.ROLL_UP_4_ROWS_ ? (this.rollUpRows_ = 4, this.setRollUp(e.pts)) : a === this.CARRIAGE_RETURN_ ? (this .clearFormatting(e.pts), this.flushDisplayed(e.pts), this .shiftRowsUp_(), this.startPts_ = e.pts) : a === this .BACKSPACE_ ? "popOn" === this.mode_ ? this.nonDisplayed_[this .row_] = this.nonDisplayed_[this.row_].slice(0, -1) : this .displayed_[this.row_] = this.displayed_[this.row_].slice(0, - 1) : a === this.ERASE_DISPLAYED_MEMORY_ ? (this.flushDisplayed(e .pts), this.displayed_ = Me()) : a === this .ERASE_NON_DISPLAYED_MEMORY_ ? this.nonDisplayed_ = Me() : a === this.RESUME_DIRECT_CAPTIONING_ ? ("paintOn" !== this.mode_ && ( this.flushDisplayed(e.pts), this.displayed_ = Me()), this.mode_ = "paintOn", this.startPts_ = e.pts) : this .isSpecialCharacter(t, i) ? (n = Oe((t = (3 & t) << 8) | i), this[this.mode_](e.pts, n), this.column_++) : this .isExtCharacter(t, i) ? ("popOn" === this.mode_ ? this .nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_] .slice(0, -1) : this.displayed_[this.row_] = this .displayed_[this.row_].slice(0, -1), n = Oe((t = (3 & t) << 8) | i), this[this.mode_](e.pts, n), this.column_++) : this.isMidRowCode(t, i) ? (this.clearFormatting(e.pts), this[ this.mode_](e.pts, " "), this.column_++, 14 == (14 & i) && this.addFormatting(e.pts, ["i"]), 1 == (1 & i) && this .addFormatting(e.pts, ["u"])) : this.isOffsetControlCode(t, i) ? this.column_ += 3 & i : this.isPAC(t, i) ? (r = Ne .indexOf(7968 & a), "rollUp" === this.mode_ && (r - this .rollUpRows_ + 1 < 0 && (r = this.rollUpRows_ - 1), this .setRollUp(e.pts, r)), r !== this.row_ && (this .clearFormatting(e.pts), this.row_ = r), 1 & i && -1 === this.formatting_.indexOf("u") && this.addFormatting(e.pts, [ "u" ]), 16 == (16 & a) && (this.column_ = 4 * ((14 & a) >> 1)), this.isColorPAC(i) && 14 == (14 & i) && this.addFormatting(e .pts, ["i"])) : this.isNormalChar(t) && (0 === i && (i = null), n = Oe(t), n += Oe(i), this[this.mode_](e.pts, n), this.column_ += n.length))) : this.lastControlCode_ = null } }; Ue.prototype = new j, Ue.prototype.flushDisplayed = function (e) { var t = this.displayed_.map(function (e, t) { try { return e.trim() } catch (e) { return this.trigger("log", { level: "warn", message: "Skipping a malformed 608 caption at index " + t + "." }), "" } }, this).join("\n").replace(/^\n+|\n+$/g, ""); t.length && this.trigger("data", { startPts: this.startPts_, endPts: e, text: t, stream: this.name_ }) }, Ue.prototype.reset = function () { this.mode_ = "popOn", this.topRow_ = 0, this.startPts_ = 0, this.displayed_ = Me(), this.nonDisplayed_ = Me(), this.lastControlCode_ = null, this.column_ = 0, this .row_ = 14, this.rollUpRows_ = 2, this.formatting_ = [] }, Ue.prototype.setConstants = function () { 0 === this.dataChannel_ ? (this.BASE_ = 16, this.EXT_ = 17, this.CONTROL_ = (20 | this.field_) << 8, this.OFFSET_ = 23) : 1 === this.dataChannel_ && (this .BASE_ = 24, this.EXT_ = 25, this.CONTROL_ = (28 | this.field_) << 8, this .OFFSET_ = 31), this.PADDING_ = 0, this.RESUME_CAPTION_LOADING_ = 32 | this .CONTROL_, this.END_OF_CAPTION_ = 47 | this.CONTROL_, this.ROLL_UP_2_ROWS_ = 37 | this.CONTROL_, this.ROLL_UP_3_ROWS_ = 38 | this.CONTROL_, this .ROLL_UP_4_ROWS_ = 39 | this.CONTROL_, this.CARRIAGE_RETURN_ = 45 | this .CONTROL_, this.RESUME_DIRECT_CAPTIONING_ = 41 | this.CONTROL_, this .BACKSPACE_ = 33 | this.CONTROL_, this.ERASE_DISPLAYED_MEMORY_ = 44 | this .CONTROL_, this.ERASE_NON_DISPLAYED_MEMORY_ = 46 | this.CONTROL_ }, Ue.prototype.isSpecialCharacter = function (e, t) { return e === this.EXT_ && 48 <= t && t <= 63 }, Ue.prototype.isExtCharacter = function (e, t) { return (e === this.EXT_ + 1 || e === this.EXT_ + 2) && 32 <= t && t <= 63 }, Ue.prototype.isMidRowCode = function (e, t) { return e === this.EXT_ && 32 <= t && t <= 47 }, Ue.prototype.isOffsetControlCode = function (e, t) { return e === this.OFFSET_ && 33 <= t && t <= 35 }, Ue.prototype.isPAC = function (e, t) { return e >= this.BASE_ && e < this.BASE_ + 8 && 64 <= t && t <= 127 }, Ue.prototype.isColorPAC = function (e) { return 64 <= e && e <= 79 || 96 <= e && e <= 127 }, Ue.prototype.isNormalChar = function (e) { return 32 <= e && e <= 127 }, Ue.prototype.setRollUp = function (e, t) { if ("rollUp" !== this.mode_ && (this.row_ = 14, this.mode_ = "rollUp", this .flushDisplayed(e), this.nonDisplayed_ = Me(), this.displayed_ = Me()), void 0 !== t && t !== this.row_) for (var i = 0; i < this.rollUpRows_; i++) this.displayed_[t - i] = this .displayed_[this.row_ - i], this.displayed_[this.row_ - i] = ""; void 0 === t && (t = this.row_), this.topRow_ = t - this.rollUpRows_ + 1 }, Ue.prototype.addFormatting = function (e, t) { this.formatting_ = this.formatting_.concat(t); t = t.reduce(function (e, t) { return e + "<" + t + ">" }, ""); this[this.mode_](e, t) }, Ue.prototype.clearFormatting = function (e) { var t; this.formatting_.length && (t = this.formatting_.reverse().reduce(function (e, t) { return e + "" }, ""), this.formatting_ = [], this[this.mode_](e, t)) }, Ue.prototype.popOn = function (e, t) { var i = this.nonDisplayed_[this.row_]; this.nonDisplayed_[this.row_] = i += t }, Ue.prototype.rollUp = function (e, t) { var i = this.displayed_[this.row_]; this.displayed_[this.row_] = i += t }, Ue.prototype.shiftRowsUp_ = function () { for (var e = 0; e < this.topRow_; e++) this.displayed_[e] = ""; for (e = this.row_ + 1; e < 15; e++) this.displayed_[e] = ""; for (e = this.topRow_; e < this.row_; e++) this.displayed_[e] = this.displayed_[e + 1]; this.displayed_[this.row_] = "" }, Ue.prototype.paintOn = function (e, t) { var i = this.displayed_[this.row_]; this.displayed_[this.row_] = i += t }; function Be(e, t) { var i = 1; for (t < e && (i = -1); 4294967296 < Math.abs(t - e);) e += 8589934592 * i; return e } var Fe = { CaptionStream: Ie, Cea608Stream: Ue, Cea708Stream: De }, je = { H264_STREAM_TYPE: 27, ADTS_STREAM_TYPE: 15, METADATA_STREAM_TYPE: 21 }, e = function e(t) { var i, n; e.prototype.init.call(this), this.type_ = t || "shared", this.push = function (e) { "shared" !== this.type_ && e.type !== this.type_ || (void 0 === n && (n = e .dts), e.dts = Be(e.dts, n), e.pts = Be(e.pts, n), i = e.dts, this.trigger("data", e)) }, this.flush = function () { n = i, this.trigger("done") }, this.endTimeline = function () { this.flush(), this.trigger("endedtimeline") }, this.discontinuity = function () { i = n = void 0 }, this.reset = function () { this.discontinuity(), this.trigger("reset") } }; e.prototype = new j; function He(e, t, i) { for (var n = "", r = t; r < i; r++) n += "%" + ("00" + e[r].toString(16)).slice(-2); return n } function qe(e, t, i) { return decodeURIComponent(He(e, t, i)) } function Ve(e) { return e[0] << 21 | e[1] << 14 | e[2] << 7 | e[3] } var We = e, Ie = Be, Ge = { TXXX: function (e) { var t; if (3 === e.data[0]) { for (t = 1; t < e.data.length; t++) if (0 === e.data[t]) { e.description = qe(e.data, 1, t), e.value = qe(e.data, t + 1, e .data.length).replace(/\0*$/, ""); break } e.data = e.value } }, WXXX: function (e) { var t; if (3 === e.data[0]) for (t = 1; t < e.data.length; t++) if (0 === e.data[t]) { e.description = qe(e.data, 1, t), e.url = qe(e.data, t + 1, e .data.length); break } }, PRIV: function (e) { for (var t, i = 0; i < e.data.length; i++) if (0 === e.data[i]) { e.owner = (t = e.data, unescape(He(t, 0, i))); break } e.privateData = e.data.subarray(i + 1), e.data = e.privateData } }, ze = function (e) { var t, i = { descriptor: e && e.descriptor }, u = 0, l = [], c = 0; if (ze.prototype.init.call(this), this.dispatchType = je.METADATA_STREAM_TYPE .toString(16), i.descriptor) for (t = 0; t < i.descriptor.length; t++) this.dispatchType += ("00" + i .descriptor[t].toString(16)).slice(-2); this.push = function (e) { var t, i, n, r, a, s, o; if ("timed-metadata" === e.type) if (e.dataAlignmentIndicator && (c = 0, l.length = 0), 0 === l.length && (e.data.length < 10 || e.data[0] !== "I".charCodeAt(0) || e.data[ 1] !== "D".charCodeAt(0) || e.data[2] !== "3".charCodeAt(0))) this.trigger("log", { level: "warn", message: "Skipping unrecognized metadata packet" }); else if (l.push(e), c += e.data.byteLength, 1 === l.length && (u = Ve(e .data.subarray(6, 10)), u += 10), !(c < u)) { for (t = { data: new Uint8Array(u), frames: [], pts: l[0].pts, dts: l[0].dts }, r = 0; r < u;) t.data.set(l[0].data.subarray(0, u - r), r), r += l[0].data.byteLength, c -= l[0].data.byteLength, l.shift(); i = 10, 64 & t.data[5] && (i += 4, i += Ve(t.data.subarray(10, 14)), u -= Ve(t.data.subarray(16, 20))); do { if ((n = Ve(t.data.subarray(i + 4, i + 8))) < 1) return void this .trigger("log", { level: "warn", message: "Malformed ID3 frame encountered. Skipping metadata parsing." }) } while ((o = { id: String.fromCharCode(t.data[i], t.data[i + 1], t.data[i + 2], t.data[i + 3]), data: t.data.subarray(i + 10, i + n + 10) }).key = o.id, Ge[o.id] && (Ge[o.id](o), "com.apple.streaming.transportStreamTimestamp" === o.owner && ( s = (1 & (a = o.data)[3]) << 30 | a[4] << 22 | a[5] << 14 | a[6] << 6 | a[7] >>> 2, s *= 4, s += 3 & a[7], o.timeStamp = s, void 0 === t.pts && void 0 === t.dts && (t.pts = o .timeStamp, t.dts = o.timeStamp), this.trigger( "timestamp", o))), t.frames.push(o), i += 10, (i += n) < u); this.trigger("data", t) } } }; ze.prototype = new j; var Xe, Ke, e = ze, We = We, Ye = function () { var r = new Uint8Array(188), a = 0; Ye.prototype.init.call(this), this.push = function (e) { var t, i = 0, n = 188; for (a ? ((t = new Uint8Array(e.byteLength + a)).set(r.subarray(0, a)), t .set(e, a), a = 0) : t = e; n < t.byteLength;) 71 !== t[i] || 71 !== t[n] ? (i++, n++) : (this.trigger("data", t.subarray(i, n)), i += 188, n += 188); i < t.byteLength && (r.set(t.subarray(i), 0), a = t.byteLength - i) }, this.flush = function () { 188 === a && 71 === r[0] && (this.trigger("data", r), a = 0), this.trigger( "done") }, this.endTimeline = function () { this.flush(), this.trigger("endedtimeline") }, this.reset = function () { a = 0, this.trigger("reset") } }; Ye.prototype = new j, (Xe = function () { var n, r, a, s; Xe.prototype.init.call(this), (s = this).packetsWaitingForPmt = [], this .programMapTable = void 0, n = function (e, t) { var i = 0; t.payloadUnitStartIndicator && (i += e[i] + 1), ("pat" === t.type ? r : a)(e.subarray(i), t) }, r = function (e, t) { t.section_number = e[7], t.last_section_number = e[8], s.pmtPid = (31 & e[10]) << 8 | e[11], t.pmtPid = s.pmtPid }, a = function (e, t) { var i, n; if (1 & e[5]) { for (s.programMapTable = { video: null, audio: null, "timed-metadata": {} }, i = 3 + ((15 & e[1]) << 8 | e[2]) - 4, n = 12 + ((15 & e[ 10]) << 8 | e[11]); n < i;) { var r = e[n], a = (31 & e[n + 1]) << 8 | e[n + 2]; r === je.H264_STREAM_TYPE && null === s.programMapTable.video ? s.programMapTable.video = a : r === je.ADTS_STREAM_TYPE && null === s.programMapTable.audio ? s.programMapTable.audio = a : r === je.METADATA_STREAM_TYPE && (s.programMapTable[ "timed-metadata"][a] = r), n += 5 + ((15 & e[n + 3]) << 8 | e[n + 4]) } t.programMapTable = s.programMapTable } }, this.push = function (e) { var t = {}, i = 4; if (t.payloadUnitStartIndicator = !!(64 & e[1]), t.pid = 31 & e[1], t .pid <<= 8, t.pid |= e[2], 1 < (48 & e[3]) >>> 4 && (i += e[i] + 1), 0 === t.pid) t.type = "pat", n(e.subarray(i), t), this.trigger( "data", t); else if (t.pid === this.pmtPid) for (t.type = "pmt", n(e.subarray(i), t), this.trigger("data", t); this.packetsWaitingForPmt.length;) this.processPes_.apply( this, this.packetsWaitingForPmt.shift()); else void 0 === this.programMapTable ? this.packetsWaitingForPmt.push([ e, i, t ]) : this.processPes_(e, i, t) }, this.processPes_ = function (e, t, i) { i.pid === this.programMapTable.video ? i.streamType = je .H264_STREAM_TYPE : i.pid === this.programMapTable.audio ? i .streamType = je.ADTS_STREAM_TYPE : i.streamType = this .programMapTable["timed-metadata"][i.pid], i.type = "pes", i.data = e.subarray(t), this.trigger("data", i) } }).prototype = new j, Xe.STREAM_TYPES = { h264: 27, adts: 15 }, (Ke = function () { function n(e, t, i) { var n, r, a, s, o = new Uint8Array(e.size), u = { type: t }, l = 0, c = 0; if (e.data.length && !(e.size < 9)) { for (u.trackId = e.data[0].pid, l = 0; l < e.data.length; l++) n = e .data[l], o.set(n.data, c), c += n.data.byteLength; a = u, s = (r = o)[0] << 16 | r[1] << 8 | r[2], a.data = new Uint8Array, 1 == s && (a.packetLength = 6 + (r[4] << 8 | r[5]), a .dataAlignmentIndicator = 0 != (4 & r[6]), 192 & (s = r[7]) && ( a.pts = (14 & r[9]) << 27 | (255 & r[10]) << 20 | (254 & r[ 11]) << 12 | (255 & r[12]) << 5 | (254 & r[13]) >>> 3, a .pts *= 4, a.pts += (6 & r[13]) >>> 1, a.dts = a.pts, 64 & s && (a.dts = (14 & r[14]) << 27 | (255 & r[15]) << 20 | ( 254 & r[16]) << 12 | (255 & r[17]) << 5 | (254 & r[ 18]) >>> 3, a.dts *= 4, a.dts += (6 & r[18]) >>> 1)), a .data = r.subarray(9 + r[8])), t = "video" === t || u .packetLength <= e.size, (i || t) && (e.size = 0, e.data.length = 0), t && d.trigger("data", u) } } var t, d = this, r = !1, a = { data: [], size: 0 }, s = { data: [], size: 0 }, o = { data: [], size: 0 }; Ke.prototype.init.call(this), this.push = function (i) { ({ pat: function () { }, pes: function () { var e, t; switch (i.streamType) { case je.H264_STREAM_TYPE: e = a, t = "video"; break; case je.ADTS_STREAM_TYPE: e = s, t = "audio"; break; case je.METADATA_STREAM_TYPE: e = o, t = "timed-metadata"; break; default: return } i.payloadUnitStartIndicator && n(e, t, !0), e.data.push( i), e.size += i.data.byteLength }, pmt: function () { var e = { type: "metadata", tracks: [] }; null !== (t = i.programMapTable).video && e.tracks .push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.video, codec: "avc", type: "video" }), null !== t.audio && e.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.audio, codec: "adts", type: "audio" }), r = !0, d.trigger("data", e) } })[i.type]() }, this.reset = function () { a.size = 0, a.data.length = 0, s.size = 0, s.data.length = 0, this .trigger("reset") }, this.flushStreams_ = function () { n(a, "video"), n(s, "audio"), n(o, "timed-metadata") }, this.flush = function () { var e; !r && t && (e = { type: "metadata", tracks: [] }, null !== t.video && e.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.video, codec: "avc", type: "video" }), null !== t.audio && e.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.audio, codec: "adts", type: "audio" }), d.trigger("data", e)), r = !1, this.flushStreams_(), this .trigger("done") } }).prototype = new j; var Qe, $e = { PAT_PID: 0, MP2T_PACKET_LENGTH: 188, TransportPacketStream: Ye, TransportParseStream: Xe, ElementaryStream: Ke, TimestampRolloverStream: We, CaptionStream: Fe.CaptionStream, Cea608Stream: Fe.Cea608Stream, Cea708Stream: Fe.Cea708Stream, MetadataStream: e }; for (Qe in je) je.hasOwnProperty(Qe) && ($e[Qe] = je[Qe]); var Je = $e, Ze = ue, et = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350], tt = function (u) { var l, c = 0; tt.prototype.init.call(this), this.skipWarn_ = function (e, t) { this.trigger("log", { level: "warn", message: "adts skiping bytes " + e + " to " + t + " in frame " + c + " outside syncword" }) }, this.push = function (e) { var t, i, n, r, a, s, o = 0; if (u || (c = 0), "audio" === e.type) { for (l && l.length ? (n = l, (l = new Uint8Array(n.byteLength + e.data .byteLength)).set(n), l.set(e.data, n.byteLength)) : l = e .data; o + 7 < l.length;) if (255 === l[o] && 240 == (246 & l[o + 1])) { if ("number" == typeof s && (this.skipWarn_(s, o), s = null), i = 2 * (1 & ~l[o + 1]), t = (3 & l[o + 3]) << 11 | l[o + 4] << 3 | (224 & l[o + 5]) >> 5, a = (r = 1024 * (1 + (3 & l[o + 6]))) * Ze / et[(60 & l[o + 2]) >>> 2], l .byteLength - o < t) break; this.trigger("data", { pts: e.pts + c * a, dts: e.dts + c * a, sampleCount: r, audioobjecttype: 1 + (l[o + 2] >>> 6 & 3), channelcount: (1 & l[o + 2]) << 2 | (192 & l[o + 3]) >>> 6, samplerate: et[(60 & l[o + 2]) >>> 2], samplingfrequencyindex: (60 & l[o + 2]) >>> 2, samplesize: 16, data: l.subarray(o + 7 + i, o + t) }), c++, o += t } else "number" != typeof s && (s = o), o++; "number" == typeof s && (this.skipWarn_(s, o), s = null), l = l .subarray(o) } }, this.flush = function () { c = 0, this.trigger("done") }, this.reset = function () { l = void 0, this.trigger("reset") }, this.endTimeline = function () { l = void 0, this.trigger("endedtimeline") } }; tt.prototype = new j; var it, nt, rt = tt, at = function (n) { var r = n.byteLength, a = 0, s = 0; this.length = function () { return 8 * r }, this.bitsAvailable = function () { return 8 * r + s }, this.loadWord = function () { var e = n.byteLength - r, t = new Uint8Array(4), i = Math.min(4, r); if (0 === i) throw new Error("no bytes available"); t.set(n.subarray(e, e + i)), a = new DataView(t.buffer).getUint32(0), s = 8 * i, r -= i }, this.skipBits = function (e) { var t; e < s || (e -= s, e -= 8 * (t = Math.floor(e / 8)), r -= t, this .loadWord()), a <<= e, s -= e }, this.readBits = function (e) { var t = Math.min(s, e), i = a >>> 32 - t; return 0 < (s -= t) ? a <<= t : 0 < r && this.loadWord(), 0 < (t = e - t) ? i << t | this.readBits(t) : i }, this.skipLeadingZeros = function () { for (var e = 0; e < s; ++e) if (0 != (a & 2147483648 >>> e)) return a <<= e, s -= e, e; return this.loadWord(), e + this.skipLeadingZeros() }, this.skipUnsignedExpGolomb = function () { this.skipBits(1 + this.skipLeadingZeros()) }, this.skipExpGolomb = function () { this.skipBits(1 + this.skipLeadingZeros()) }, this.readUnsignedExpGolomb = function () { var e = this.skipLeadingZeros(); return this.readBits(e + 1) - 1 }, this.readExpGolomb = function () { var e = this.readUnsignedExpGolomb(); return 1 & e ? 1 + e >>> 1 : -1 * (e >>> 1) }, this.readBoolean = function () { return 1 === this.readBits(1) }, this.readUnsignedByte = function () { return this.readBits(8) }, this.loadWord() }, st = function () { var n, r, a = 0; st.prototype.init.call(this), this.push = function (e) { for (var t, i = (r = r ? ((t = new Uint8Array(r.byteLength + e.data .byteLength)).set(r), t.set(e.data, r.byteLength), t) : e .data).byteLength; a < i - 3; a++) if (1 === r[a + 2]) { n = a + 5; break } for (; n < i;) switch (r[n]) { case 0: if (0 !== r[n - 1]) { n += 2; break } if (0 !== r[n - 2]) { n++; break } for (a + 3 !== n - 2 && this.trigger("data", r.subarray(a + 3, n - 2)); 1 !== r[++n] && n < i;) ; a = n - 2, n += 3; break; case 1: if (0 !== r[n - 1] || 0 !== r[n - 2]) { n += 3; break } this.trigger("data", r.subarray(a + 3, n - 2)), a = n - 2, n += 3; break; default: n += 3 } r = r.subarray(a), n -= a, a = 0 }, this.reset = function () { r = null, a = 0, this.trigger("reset") }, this.flush = function () { r && 3 < r.byteLength && this.trigger("data", r.subarray(a + 3)), r = null, a = 0, this.trigger("done") }, this.endTimeline = function () { this.flush(), this.trigger("endedtimeline") } }; st.prototype = new j, nt = { 100: !0, 110: !0, 122: !0, 244: !0, 44: !0, 83: !0, 86: !0, 118: !0, 128: !0, 138: !0, 139: !0, 134: !0 }, (it = function () { var i, n, r, a, s, o, m, t = new st; it.prototype.init.call(this), (i = this).push = function (e) { "video" === e.type && (n = e.trackId, r = e.pts, a = e.dts, t.push(e)) }, t.on("data", function (e) { var t = { trackId: n, pts: r, dts: a, data: e, nalUnitTypeCode: 31 & e[0] }; switch (t.nalUnitTypeCode) { case 5: t.nalUnitType = "slice_layer_without_partitioning_rbsp_idr"; break; case 6: t.nalUnitType = "sei_rbsp", t.escapedRBSP = s(e.subarray( 1)); break; case 7: t.nalUnitType = "seq_parameter_set_rbsp", t.escapedRBSP = s( e.subarray(1)), t.config = o(t.escapedRBSP); break; case 8: t.nalUnitType = "pic_parameter_set_rbsp"; break; case 9: t.nalUnitType = "access_unit_delimiter_rbsp" } i.trigger("data", t) }), t.on("done", function () { i.trigger("done") }), t.on("partialdone", function () { i.trigger("partialdone") }), t.on("reset", function () { i.trigger("reset") }), t.on("endedtimeline", function () { i.trigger("endedtimeline") }), this.flush = function () { t.flush() }, this.partialFlush = function () { t.partialFlush() }, this.reset = function () { t.reset() }, this.endTimeline = function () { t.endTimeline() }, m = function (e, t) { for (var i = 8, n = 8, r = 0; r < e; r++) i = 0 === (n = 0 !== n ? (i + t.readExpGolomb() + 256) % 256 : n) ? i : n }, s = function (e) { for (var t = e.byteLength, i = [], n = 1; n < t - 2;) 0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] ? (i.push(n + 2), n += 2) : n++; if (0 === i.length) return e; for (var r = t - i.length, a = new Uint8Array(r), s = 0, n = 0; n < r; s++, n++) s === i[0] && (s++, i.shift()), a[n] = e[s]; return a }, o = function (e) { var t, i, n, r, a, s = 0, o = 0, u = 0, l = 0, c = [1, 1], d = new at(e), h = d.readUnsignedByte(), p = d.readUnsignedByte(), f = d.readUnsignedByte(); if (d.skipUnsignedExpGolomb(), nt[h] && (3 === (i = d .readUnsignedExpGolomb()) && d.skipBits(1), d .skipUnsignedExpGolomb(), d.skipUnsignedExpGolomb(), d.skipBits( 1), d.readBoolean())) for (r = 3 !== i ? 8 : 12, a = 0; a < r; a++) d.readBoolean() && m( a < 6 ? 16 : 64, d); if (d.skipUnsignedExpGolomb(), 0 === (n = d.readUnsignedExpGolomb())) d .readUnsignedExpGolomb(); else if (1 === n) for (d.skipBits(1), d.skipExpGolomb(), d.skipExpGolomb(), t = d .readUnsignedExpGolomb(), a = 0; a < t; a++) d.skipExpGolomb(); if (d.skipUnsignedExpGolomb(), d.skipBits(1), e = d .readUnsignedExpGolomb(), i = d.readUnsignedExpGolomb(), 0 === (n = d.readBits(1)) && d.skipBits(1), d.skipBits(1), d .readBoolean() && (s = d.readUnsignedExpGolomb(), o = d .readUnsignedExpGolomb(), u = d.readUnsignedExpGolomb(), l = d .readUnsignedExpGolomb()), d.readBoolean() && d.readBoolean()) { switch (d.readUnsignedByte()) { case 1: c = [1, 1]; break; case 2: c = [12, 11]; break; case 3: c = [10, 11]; break; case 4: c = [16, 11]; break; case 5: c = [40, 33]; break; case 6: c = [24, 11]; break; case 7: c = [20, 11]; break; case 8: c = [32, 11]; break; case 9: c = [80, 33]; break; case 10: c = [18, 11]; break; case 11: c = [15, 11]; break; case 12: c = [64, 33]; break; case 13: c = [160, 99]; break; case 14: c = [4, 3]; break; case 15: c = [3, 2]; break; case 16: c = [2, 1]; break; case 255: c = [d.readUnsignedByte() << 8 | d.readUnsignedByte(), d .readUnsignedByte() << 8 | d.readUnsignedByte() ] } c && (c[0], c[1]) } return { profileIdc: h, levelIdc: f, profileCompatibility: p, width: 16 * (e + 1) - 2 * s - 2 * o, height: (2 - n) * (i + 1) * 16 - 2 * u - 2 * l, sarRatio: c } } }).prototype = new j; function ot(e, t) { var i = 0 <= (i = e[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9]) ? i : 0; return (16 & e[t + 5]) >> 4 ? i + 20 : i + 10 } function ut(e, t) { return e.length - t < 10 || e[t] !== "I".charCodeAt(0) || e[t + 1] !== "D".charCodeAt( 0) || e[t + 2] !== "3".charCodeAt(0) ? t : ut(e, t += ot(e, t)) } function lt(e) { return e[0] << 21 | e[1] << 14 | e[2] << 7 | e[3] } var e = { H264Stream: it, NalByteStream: st }, ct = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350], dt = { isLikelyAacData: function (e) { var t = ut(e, 0); return e.length >= t + 2 && 255 == (255 & e[t]) && 240 == (240 & e[t + 1]) && 16 == (22 & e[t + 1]) }, parseId3TagSize: ot, parseAdtsSize: function (e, t) { var i = (224 & e[t + 5]) >> 5, n = e[t + 4] << 3; return 6144 & e[t + 3] | n | i }, parseType: function (e, t) { return e[t] === "I".charCodeAt(0) && e[t + 1] === "D".charCodeAt(0) && e[t + 2] === "3".charCodeAt(0) ? "timed-metadata" : !0 & e[t] && 240 == ( 240 & e[t + 1]) ? "audio" : null }, parseSampleRate: function (e) { for (var t = 0; t + 5 < e.length;) { if (255 === e[t] && 240 == (246 & e[t + 1])) return ct[(60 & e[t + 2]) >>> 2]; t++ } return null }, parseAacTimestamp: function (e) { var t, i = 10; 64 & e[5] && (i += 4, i += lt(e.subarray(10, 14))); do { if ((t = lt(e.subarray(i + 4, i + 8))) < 1) return null; if ("PRIV" === String.fromCharCode(e[i], e[i + 1], e[i + 2], e[i + 3])) for (var n = e.subarray(i + 10, i + t + 10), r = 0; r < n .byteLength; r++) if (0 === n[r]) { if ("com.apple.streaming.transportStreamTimestamp" !== unescape(function (e, t, i) { for (var n = "", r = t; r < i; r++) n += "%" + ( "00" + e[r].toString(16)).slice(-2); return n }(n, 0, r))) break; var a = n.subarray(r + 1), s = (1 & a[3]) << 30 | a[4] << 22 | a[5] << 14 | a[6] << 6 | a[7] >>> 2; return s *= 4, s += 3 & a[7] } } while (i += 10, (i += t) < e.byteLength); return null } }, ht = function () { var a = new Uint8Array, s = 0; ht.prototype.init.call(this), this.setTimestamp = function (e) { s = e }, this.push = function (e) { var t, i, n = 0, r = 0; for (a.length ? (i = a.length, (a = new Uint8Array(e.byteLength + i)).set(a .subarray(0, i)), a.set(e, i)) : a = e; 3 <= a.length - r;) if (a[r] !== "I".charCodeAt(0) || a[r + 1] !== "D".charCodeAt(0) || a[ r + 2] !== "3".charCodeAt(0)) if (255 != (255 & a[r]) || 240 != (240 & a[r + 1])) r++; else { if (a.length - r < 7) break; if (r + (n = dt.parseAdtsSize(a, r)) > a.length) break; t = { type: "audio", data: a.subarray(r, r + n), pts: s, dts: s }, this.trigger("data", t), r += n } else { if (a.length - r < 10) break; if (r + (n = dt.parseId3TagSize(a, r)) > a.length) break; t = { type: "timed-metadata", data: a.subarray(r, r + n) }, this.trigger("data", t), r += n } e = a.length - r, a = 0 < e ? a.subarray(r) : new Uint8Array }, this.reset = function () { a = new Uint8Array, this.trigger("reset") }, this.endTimeline = function () { a = new Uint8Array, this.trigger("endedtimeline") } }; ht.prototype = new j; function pt(e, t) { t.stream = e, this.trigger("log", t) } function ft(e, t) { for (var i = Object.keys(t), n = 0; n < i.length; n++) { var r = i[n]; "headOfPipeline" !== r && t[r].on && t[r].on("log", pt.bind(e, r)) } } function mt(e, t) { var i; if (e.length === t.length) { for (i = 0; i < e.length; i++) if (e[i] !== t[i]) return; return 1 } } function gt(e, t, i, n, r, a) { return { start: { dts: e, pts: e + (i - t) }, end: { dts: e + (n - t), pts: e + (r - i) }, prependedContentDuration: a, baseMediaDecodeTime: e } } var yt, vt, _t, bt = ht, Tt = ["audioobjecttype", "channelcount", "samplerate", "samplingfrequencyindex", "samplesize" ], St = ["width", "height", "profileIdc", "levelIdc", "profileCompatibility", "sarRatio"], wt = e.H264Stream, Et = dt.isLikelyAacData, kt = ue, Ct = function (a, s) { var o = [], u = 0, l = 0, c = 1 / 0, d = (s = s || {}).firstSequenceNumber || 0; Ct.prototype.init.call(this), this.push = function (t) { Te(a, t), a && Tt.forEach(function (e) { a[e] = t[e] }), o.push(t) }, this.setEarliestDts = function (e) { u = e }, this.setVideoBaseMediaDecodeTime = function (e) { c = e }, this.setAudioAppendStart = function (e) { l = e }, this.flush = function () { var e, t, i, n, r; 0 !== o.length && (e = me(o, a, u), a.baseMediaDecodeTime = be(a, s .keepOriginalTimestamps), r = fe(a, e, l, c), a.samples = ge(e), t = K(ye(e)), o = [], n = Y(d, [a]), i = new Uint8Array(n .byteLength + t.byteLength), d++, i.set(n), i.set(t, n .byteLength), _e(a), n = Math.ceil(1024 * kt / a.samplerate), e .length && (n = e.length * n, this.trigger("segmentTimingInfo", gt( de(a.baseMediaDecodeTime, a.samplerate), e[0].dts, e[0] .pts, e[0].dts + n, e[0].pts + n, r || 0)), this.trigger( "timingInfo", { start: e[0].pts, end: e[0].pts + n })), this.trigger("data", { track: a, boxes: i })), this.trigger("done", "AudioSegmentStream") }, this.reset = function () { _e(a), o = [], this.trigger("reset") } }; Ct.prototype = new j, (yt = function (s, a) { var t, i, o = [], l = [], u = (a = a || {}).firstSequenceNumber || 0; yt.prototype.init.call(this), delete s.minPTS, this.gopCache_ = [], this.push = function (e) { Te(s, e), "seq_parameter_set_rbsp" !== e.nalUnitType || t || (t = e .config, s.sps = [e.data], St.forEach(function (e) { s[e] = t[e] }, this)), "pic_parameter_set_rbsp" !== e.nalUnitType || i || ( i = e.data, s.pps = [e.data]), o.push(e) }, this.flush = function () { for (var e, t, i, n = 0; o.length && "access_unit_delimiter_rbsp" !== o[ 0].nalUnitType;) o.shift(); if (0 === o.length) return this.resetStream_(), void this.trigger( "done", "VideoSegmentStream"); if (e = $(o), (t = J(e))[0][0].keyFrame || ((i = this.getGopForFusion_( o[0], s)) ? (n = i.duration, t.unshift(i), t.byteLength += i .byteLength, t.nalCount += i.nalCount, t.pts = i.pts, t .dts = i.dts, t.duration += i.duration) : t = Z(t)), l.length) { var r = a.alignGopsAtEnd ? this.alignGopsAtEnd_(t) : this .alignGopsAtStart_(t); if (!r) return this.gopCache_.unshift({ gop: t.pop(), pps: s.pps, sps: s.sps }), this.gopCache_.length = Math.min(6, this.gopCache_ .length), o = [], this.resetStream_(), void this .trigger("done", "VideoSegmentStream"); _e(s), t = r } Te(s, t), s.samples = ee(t), e = K(te(t)), s.baseMediaDecodeTime = be(s, a.keepOriginalTimestamps), this.trigger("processedGopsInfo", t .map(function (e) { return { pts: e.pts, dts: e.dts, byteLength: e.byteLength } })), i = t[0], r = t[t.length - 1], this.trigger( "segmentTimingInfo", gt(s.baseMediaDecodeTime, i.dts, i.pts, r .dts + r.duration, r.pts + r.duration, n)), this.trigger( "timingInfo", { start: t[0].pts, end: t[t.length - 1].pts + t[t.length - 1].duration }), this.gopCache_.unshift({ gop: t.pop(), pps: s.pps, sps: s.sps }), this.gopCache_.length = Math.min(6, this.gopCache_.length), o = [], this.trigger("baseMediaDecodeTime", s.baseMediaDecodeTime), this.trigger("timelineStartInfo", s.timelineStartInfo), n = Y(u, [ s]), t = new Uint8Array(n.byteLength + e.byteLength), u++, t .set(n), t.set(e, n.byteLength), this.trigger("data", { track: s, boxes: t }), this.resetStream_(), this.trigger("done", "VideoSegmentStream") }, this.reset = function () { this.resetStream_(), o = [], this.gopCache_.length = 0, l.length = 0, this.trigger("reset") }, this.resetStream_ = function () { _e(s), i = t = void 0 }, this.getGopForFusion_ = function (e) { for (var t, i, n, r = 1 / 0, a = 0; a < this.gopCache_.length; a++) i = (n = this.gopCache_[a]).gop, s.pps && mt(s.pps[0], n.pps[0]) && s .sps && mt(s.sps[0], n.sps[0]) && (i.dts < s.timelineStartInfo .dts || -1e4 <= (i = e.dts - i.dts - i.duration) && i <= 45e3 && (!t || i < r) && (t = n, r = i)); return t ? t.gop : null }, this.alignGopsAtStart_ = function (e) { for (var t, i, n, r, a = e.byteLength, s = e.nalCount, o = e.duration, u = t = 0; u < l.length && t < e.length && (i = l[u], n = e[t], i.pts !== n.pts);) n.pts > i.pts ? u++ : (t++, a -= n .byteLength, s -= n.nalCount, o -= n.duration); return 0 === t ? e : t === e.length ? null : ((r = e.slice(t)) .byteLength = a, r.duration = o, r.nalCount = s, r.pts = r[0] .pts, r.dts = r[0].dts, r) }, this.alignGopsAtEnd_ = function (e) { for (var t, i, n = l.length - 1, r = e.length - 1, a = null, s = ! 1; 0 <= n && 0 <= r;) { if (t = l[n], i = e[r], t.pts === i.pts) { s = !0; break } t.pts > i.pts ? n-- : (n === l.length - 1 && (a = r), r--) } if (!s && null === a) return null; if (0 === (u = s ? r : a)) return e; var o = e.slice(u), u = o.reduce(function (e, t) { return e.byteLength += t.byteLength, e.duration += t .duration, e.nalCount += t.nalCount, e }, { byteLength: 0, duration: 0, nalCount: 0 }); return o.byteLength = u.byteLength, o.duration = u.duration, o .nalCount = u.nalCount, o.pts = o[0].pts, o.dts = o[0].dts, o }, this.alignGopsWith = function (e) { l = e } }).prototype = new j, (_t = function (e, t) { this.numberOfTracks = 0, this.metadataStream = t, "undefined" != typeof (e = e || {}).remux ? this.remuxTracks = !!e.remux : this.remuxTracks = !0, "boolean" == typeof e.keepOriginalTimestamps ? this.keepOriginalTimestamps = e.keepOriginalTimestamps : this.keepOriginalTimestamps = !1, this .pendingTracks = [], this.videoTrack = null, this.pendingBoxes = [], this .pendingCaptions = [], this.pendingMetadata = [], this.pendingBytes = 0, this.emittedTracks = 0, _t.prototype.init.call(this), this.push = function ( e) { return e.text ? this.pendingCaptions.push(e) : e.frames ? this .pendingMetadata.push(e) : (this.pendingTracks.push(e.track), this .pendingBytes += e.boxes.byteLength, "video" === e.track.type && (this.videoTrack = e.track, this.pendingBoxes.push(e.boxes)), void ("audio" === e.track.type && (this.audioTrack = e.track, this.pendingBoxes.unshift(e.boxes)))) } }).prototype = new j, _t.prototype.flush = function (e) { var t, i, n, r = 0, a = { captions: [], captionStreams: {}, metadata: [], info: {} }, s = 0; if (this.pendingTracks.length < this.numberOfTracks) { if ("VideoSegmentStream" !== e && "AudioSegmentStream" !== e) return; if (this.remuxTracks) return; if (0 === this.pendingTracks.length) return this.emittedTracks++, void (this .emittedTracks >= this.numberOfTracks && (this.trigger("done"), this .emittedTracks = 0)) } if (this.videoTrack ? (s = this.videoTrack.timelineStartInfo.pts, St.forEach( function (e) { a.info[e] = this.videoTrack[e] }, this)) : this.audioTrack && (s = this.audioTrack.timelineStartInfo.pts, Tt.forEach(function (e) { a.info[e] = this.audioTrack[e] }, this)), this.videoTrack || this.audioTrack) { for (1 === this.pendingTracks.length ? a.type = this.pendingTracks[0].type : a .type = "combined", this.emittedTracks += this.pendingTracks.length, e = Q( this.pendingTracks), a.initSegment = new Uint8Array(e.byteLength), a .initSegment.set(e), a.data = new Uint8Array(this.pendingBytes), n = 0; n < this.pendingBoxes.length; n++) a.data.set(this.pendingBoxes[n], r), r += this.pendingBoxes[n].byteLength; for (n = 0; n < this.pendingCaptions.length; n++) (t = this.pendingCaptions[n]) .startTime = pe(t.startPts, s, this.keepOriginalTimestamps), t.endTime = pe( t.endPts, s, this.keepOriginalTimestamps), a.captionStreams[t .stream] = !0, a.captions.push(t); for (n = 0; n < this.pendingMetadata.length; n++) (i = this.pendingMetadata[n]) .cueTime = pe(i.pts, s, this.keepOriginalTimestamps), a.metadata.push(i); for (a.metadata.dispatchType = this.metadataStream.dispatchType, this .pendingTracks.length = 0, this.videoTrack = null, this.pendingBoxes .length = 0, this.pendingCaptions.length = 0, this.pendingBytes = 0, this .pendingMetadata.length = 0, this.trigger("data", a), n = 0; n < a.captions .length; n++) t = a.captions[n], this.trigger("caption", t); for (n = 0; n < a.metadata.length; n++) i = a.metadata[n], this.trigger( "id3Frame", i) } this.emittedTracks >= this.numberOfTracks && (this.trigger("done"), this .emittedTracks = 0) }, _t.prototype.setRemux = function (e) { this.remuxTracks = e }, (vt = function (n) { var r, a, s = this, i = !0; vt.prototype.init.call(this), this.baseMediaDecodeTime = (n = n || {}) .baseMediaDecodeTime || 0, this.transmuxPipeline_ = {}, this .setupAacPipeline = function () { var t = {}; (this.transmuxPipeline_ = t).type = "aac", t.metadataStream = new Je .MetadataStream, t.aacStream = new bt, t .audioTimestampRolloverStream = new Je.TimestampRolloverStream( "audio"), t.timedMetadataTimestampRolloverStream = new Je .TimestampRolloverStream("timed-metadata"), t.adtsStream = new rt, t .coalesceStream = new _t(n, t.metadataStream), t.headOfPipeline = t .aacStream, t.aacStream.pipe(t.audioTimestampRolloverStream).pipe(t .adtsStream), t.aacStream.pipe(t .timedMetadataTimestampRolloverStream).pipe(t.metadataStream) .pipe(t.coalesceStream), t.metadataStream.on("timestamp", function ( e) { t.aacStream.setTimestamp(e.timeStamp) }), t.aacStream.on("data", function (e) { "timed-metadata" !== e.type && "audio" !== e.type || t .audioSegmentStream || (a = a || { timelineStartInfo: { baseMediaDecodeTime: s.baseMediaDecodeTime }, codec: "adts", type: "audio" }, t.coalesceStream.numberOfTracks++, t .audioSegmentStream = new Ct(a, n), t .audioSegmentStream.on("log", s.getLogTrigger_( "audioSegmentStream")), t.audioSegmentStream.on( "timingInfo", s.trigger.bind(s, "audioTimingInfo")), t.adtsStream.pipe(t .audioSegmentStream).pipe(t.coalesceStream), s .trigger("trackinfo", { hasAudio: !!a, hasVideo: !!r })) }), t.coalesceStream.on("data", this.trigger.bind(this, "data")), t .coalesceStream.on("done", this.trigger.bind(this, "done")), ft( this, t) }, this.setupTsPipeline = function () { var i = {}; (this.transmuxPipeline_ = i).type = "ts", i.metadataStream = new Je .MetadataStream, i.packetStream = new Je.TransportPacketStream, i .parseStream = new Je.TransportParseStream, i.elementaryStream = new Je.ElementaryStream, i.timestampRolloverStream = new Je .TimestampRolloverStream, i.adtsStream = new rt, i.h264Stream = new wt, i.captionStream = new Je.CaptionStream(n), i .coalesceStream = new _t(n, i.metadataStream), i.headOfPipeline = i .packetStream, i.packetStream.pipe(i.parseStream).pipe(i .elementaryStream).pipe(i.timestampRolloverStream), i .timestampRolloverStream.pipe(i.h264Stream), i .timestampRolloverStream.pipe(i.adtsStream), i .timestampRolloverStream.pipe(i.metadataStream).pipe(i .coalesceStream), i.h264Stream.pipe(i.captionStream).pipe(i .coalesceStream), i.elementaryStream.on("data", function (e) { var t; if ("metadata" === e.type) { for (t = e.tracks.length; t--;) r || "video" !== e .tracks[t].type ? a || "audio" !== e.tracks[t] .type || ((a = e.tracks[t]).timelineStartInfo .baseMediaDecodeTime = s.baseMediaDecodeTime) : (r = e.tracks[t]).timelineStartInfo .baseMediaDecodeTime = s.baseMediaDecodeTime; r && !i.videoSegmentStream && (i.coalesceStream .numberOfTracks++, i.videoSegmentStream = new yt(r, n), i.videoSegmentStream.on("log", s .getLogTrigger_("videoSegmentStream")), i .videoSegmentStream.on("timelineStartInfo", function (e) { a && !n.keepOriginalTimestamps && (a .timelineStartInfo = e, i .audioSegmentStream .setEarliestDts(e.dts - s .baseMediaDecodeTime)) }), i.videoSegmentStream.on( "processedGopsInfo", s.trigger.bind(s, "gopInfo")), i.videoSegmentStream.on( "segmentTimingInfo", s.trigger.bind(s, "videoSegmentTimingInfo")), i .videoSegmentStream.on("baseMediaDecodeTime", function (e) { a && i.audioSegmentStream .setVideoBaseMediaDecodeTime(e) }), i.videoSegmentStream.on("timingInfo", s .trigger.bind(s, "videoTimingInfo")), i .h264Stream.pipe(i.videoSegmentStream).pipe(i .coalesceStream)), a && !i .audioSegmentStream && (i.coalesceStream .numberOfTracks++, i.audioSegmentStream = new Ct(a, n), i.audioSegmentStream.on("log", s .getLogTrigger_("audioSegmentStream")), i .audioSegmentStream.on("timingInfo", s.trigger .bind(s, "audioTimingInfo")), i .audioSegmentStream.on("segmentTimingInfo", s .trigger.bind(s, "audioSegmentTimingInfo")), i.adtsStream.pipe(i.audioSegmentStream).pipe(i .coalesceStream)), s.trigger("trackinfo", { hasAudio: !!a, hasVideo: !!r }) } }), i.coalesceStream.on("data", this.trigger.bind(this, "data")), i .coalesceStream.on("id3Frame", function (e) { e.dispatchType = i.metadataStream.dispatchType, s.trigger( "id3Frame", e) }), i.coalesceStream.on("caption", this.trigger.bind(this, "caption")), i.coalesceStream.on("done", this.trigger.bind(this, "done")), ft(this, i) }, this.setBaseMediaDecodeTime = function (e) { var t = this.transmuxPipeline_; n.keepOriginalTimestamps || (this.baseMediaDecodeTime = e), a && (a .timelineStartInfo.dts = void 0, a.timelineStartInfo.pts = void 0, _e(a), t.audioTimestampRolloverStream && t .audioTimestampRolloverStream.discontinuity()), r && (t .videoSegmentStream && (t.videoSegmentStream.gopCache_ = []), r .timelineStartInfo.dts = void 0, r.timelineStartInfo.pts = void 0, _e(r), t.captionStream.reset()), t .timestampRolloverStream && t.timestampRolloverStream .discontinuity() }, this.setAudioAppendStart = function (e) { a && this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(e) }, this.setRemux = function (e) { var t = this.transmuxPipeline_; n.remux = e, t && t.coalesceStream && t.coalesceStream.setRemux(e) }, this.alignGopsWith = function (e) { r && this.transmuxPipeline_.videoSegmentStream && this.transmuxPipeline_ .videoSegmentStream.alignGopsWith(e) }, this.getLogTrigger_ = function (t) { var i = this; return function (e) { e.stream = t, i.trigger("log", e) } }, this.push = function (e) { var t; i && ((t = Et(e)) && "aac" !== this.transmuxPipeline_.type ? this .setupAacPipeline() : t || "ts" === this.transmuxPipeline_ .type || this.setupTsPipeline(), i = !1), this.transmuxPipeline_ .headOfPipeline.push(e) }, this.flush = function () { i = !0, this.transmuxPipeline_.headOfPipeline.flush() }, this.endTimeline = function () { this.transmuxPipeline_.headOfPipeline.endTimeline() }, this.reset = function () { this.transmuxPipeline_.headOfPipeline && this.transmuxPipeline_ .headOfPipeline.reset() }, this.resetCaptions = function () { this.transmuxPipeline_.captionStream && this.transmuxPipeline_ .captionStream.reset() } }).prototype = new j; function It(e, c) { var i = Rt(e, ["moof", "traf"]), e = Rt(e, ["mdat"]), d = {}, n = []; return e.forEach(function (e, t) { t = i[t]; n.push({ mdat: e, traf: t }) }), n.forEach(function (e) { var t, i, n, r, a, s = e.mdat, o = e.traf, u = Rt(o, ["tfhd"]), l = Ht(u[0]), e = l.trackId, u = Rt(o, ["tfdt"]), u = 0 < u.length ? Bt(u[0]).baseMediaDecodeTime : 0, o = Rt(o, ["trun"]); c === e && 0 < o.length && (o = o, t = u, i = (l = l) .defaultSampleDuration || 0, n = l.defaultSampleSize || 0, r = l .trackId, a = [], o.forEach(function (e) { e = jt(e).samples; e.forEach(function (e) { void 0 === e.duration && (e.duration = i), void 0 === e.size && (e.size = n), e .trackId = r, e.dts = t, void 0 === e .compositionTimeOffset && (e .compositionTimeOffset = 0), "bigint" == typeof t ? (e.pts = t + qt.BigInt(e .compositionTimeOffset), t += qt .BigInt(e.duration)) : (e.pts = t + e .compositionTimeOffset, t += e.duration) }), a = a.concat(e) }), s = function (e, t, i) { for (var n, r, a = new DataView(e.buffer, e.byteOffset, e .byteLength), s = { logs: [], seiNals: [] }, o = 0; o + 4 < e.length; o += n) if (n = a.getUint32(o), o += 4, !(n <= 0)) switch (31 & e[ o]) { case 6: var u = e.subarray(o + 1, o + 1 + n), l = function (e, t) { for (var i = e, n = 0; n < t .length; n++) { var r = t[n]; if (i < r.size) return r; i -= r.size } return null }(o, t), u = { nalUnitType: "sei_rbsp", size: n, data: u, escapedRBSP: Vt(u), trackId: i }; if (l) u.pts = l.pts, u.dts = l.dts, r = l; else { if (!r) { s.logs.push({ level: "warn", message: "We've encountered a nal unit without data at " + o + " for trackId " + i + ". See mux.js#223." }); break } u.pts = r.pts, u.dts = r.dts } s.seiNals.push(u) } return s }(s, a, e), d[e] || (d[e] = { seiNals: [], logs: [] }), d[e].seiNals = d[e].seiNals.concat(s.seiNals), d[e].logs = d[e] .logs.concat(s.logs)) }), d } function xt(e) { var t = 31 & e[1]; return t <<= 8, t |= e[2] } function At(e) { return !!(64 & e[1]) } function Pt(e) { var t = 0; return 1 < (48 & e[3]) >>> 4 && (t += e[4] + 1), t } function Lt(e) { switch (e) { case 5: return "slice_layer_without_partitioning_rbsp_idr"; case 6: return "sei_rbsp"; case 7: return "seq_parameter_set_rbsp"; case 8: return "pic_parameter_set_rbsp"; case 9: return "access_unit_delimiter_rbsp"; default: return null } } var Dt = { Transmuxer: vt, VideoSegmentStream: yt, AudioSegmentStream: Ct, AUDIO_PROPERTIES: Tt, VIDEO_PROPERTIES: St, generateSegmentTimingInfo: gt }, e = function (e) { return e >>> 0 }, Ot = function (e) { var t = ""; return t += String.fromCharCode(e[0]), t += String.fromCharCode(e[1]), t += String .fromCharCode(e[2]), t += String.fromCharCode(e[3]) }, Mt = e, Rt = function e(t, i) { var n, r, a, s = []; if (!i.length) return null; for (n = 0; n < t.byteLength;) r = Mt(t[n] << 24 | t[n + 1] << 16 | t[n + 2] << 8 | t[n + 3]), a = Ot(t.subarray(n + 4, n + 8)), r = 1 < r ? n + r : t .byteLength, a === i[0] && (1 === i.length ? s.push(t.subarray(n + 8, r)) : (a = e(t.subarray(n + 8, r), i.slice(1))).length && (s = s.concat(a))), n = r; return s }, Nt = e, Ut = q.getUint64, Bt = function (e) { var t = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)) }; return 1 === t.version ? t.baseMediaDecodeTime = Ut(e.subarray(4)) : t .baseMediaDecodeTime = Nt(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7]), t }, Ft = function (e) { return { isLeading: (12 & e[0]) >>> 2, dependsOn: 3 & e[0], isDependedOn: (192 & e[1]) >>> 6, hasRedundancy: (48 & e[1]) >>> 4, paddingValue: (14 & e[1]) >>> 1, isNonSyncSample: 1 & e[1], degradationPriority: e[2] << 8 | e[3] } }, jt = function (e) { var t, i = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)), samples: [] }, n = new DataView(e.buffer, e.byteOffset, e.byteLength), r = 1 & i.flags[2], a = 4 & i.flags[2], s = 1 & i.flags[1], o = 2 & i.flags[1], u = 4 & i.flags[1], l = 8 & i.flags[1], c = n.getUint32(4), d = 8; for (r && (i.dataOffset = n.getInt32(d), d += 4), a && c && (t = { flags: Ft(e.subarray(d, d + 4)) }, d += 4, s && (t.duration = n.getUint32(d), d += 4), o && (t.size = n .getUint32(d), d += 4), l && (1 === i.version ? t .compositionTimeOffset = n.getInt32(d) : t.compositionTimeOffset = n .getUint32(d), d += 4), i.samples.push(t), c--); c--;) t = {}, s && (t .duration = n.getUint32(d), d += 4), o && (t.size = n.getUint32(d), d += 4), u && (t.flags = Ft(e.subarray(d, d + 4)), d += 4), l && (1 === i.version ? t .compositionTimeOffset = n.getInt32(d) : t.compositionTimeOffset = n .getUint32(d), d += 4), i.samples.push(t); return i }, Ht = function (e) { var t = new DataView(e.buffer, e.byteOffset, e.byteLength), i = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)), trackId: t.getUint32(4) }, n = 1 & i.flags[2], r = 2 & i.flags[2], a = 8 & i.flags[2], s = 16 & i.flags[2], o = 32 & i.flags[2], u = 65536 & i.flags[0], l = 131072 & i.flags[0], e = 8; return n && (e += 4, i.baseDataOffset = t.getUint32(12), e += 4), r && (i .sampleDescriptionIndex = t.getUint32(e), e += 4), a && (i .defaultSampleDuration = t.getUint32(e), e += 4), s && (i .defaultSampleSize = t.getUint32(e), e += 4), o && (i.defaultSampleFlags = t .getUint32(e)), u && (i.durationIsEmpty = !0), !n && l && (i .baseDataOffsetIsMoof = !0), i }, j = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}, j = "undefined" != typeof window ? window : "undefined" != typeof j ? j : "undefined" != typeof self ? self : {}, qt = j, Vt = ke, Wt = Fe.CaptionStream, Gt = function () { var t, r, a, s, o, i, n = !1; this.isInitialized = function () { return n }, this.init = function (e) { t = new Wt, n = !0, i = !!e && e.isPartial, t.on("data", function (e) { e.startTime = e.startPts / s, e.endTime = e.endPts / s, o .captions.push(e), o.captionStreams[e.stream] = !0 }), t.on("log", function (e) { o.logs.push(e) }) }, this.isNewInit = function (e, t) { return !(e && 0 === e.length || t && "object" == typeof t && 0 === Object .keys(t).length) && (a !== e[0] || s !== t[a]) }, this.parse = function (e, t, i) { if (!this.isInitialized()) return null; if (!t || !i) return null; if (this.isNewInit(t, i)) a = t[0], s = i[a]; else if (null === a || !s) return r.push(e), null; for (; 0 < r.length;) { var n = r.shift(); this.parse(n, t, i) } return (e = function (e, t, i) { if (null === t) return null; t = It(e, t)[t] || {}; return { seiNals: t.seiNals, logs: t.logs, timescale: i } }(e, a, s)) && e.logs && (o.logs = o.logs.concat(e.logs)), null !== e && e.seiNals ? (this.pushNals(e.seiNals), this.flushStream(), o) : o.logs .length ? { logs: o.logs, captions: [], captionStreams: [] } : null }, this.pushNals = function (e) { if (!this.isInitialized() || !e || 0 === e.length) return null; e.forEach(function (e) { t.push(e) }) }, this.flushStream = function () { if (!this.isInitialized()) return null; i ? t.partialFlush() : t.flush() }, this.clearParsedCaptions = function () { o.captions = [], o.captionStreams = {}, o.logs = [] }, this.resetCaptionStream = function () { if (!this.isInitialized()) return null; t.reset() }, this.clearAllCaptions = function () { this.clearParsedCaptions(), this.resetCaptionStream() }, this.reset = function () { r = [], s = a = null, o ? this.clearParsedCaptions() : o = { captions: [], captionStreams: {}, logs: [] }, this.resetCaptionStream() }, this.reset() }, zt = e, Xt = function (e) { return ("00" + e.toString(16)).slice(-2) }, Kt = q.getUint64, j = function (e) { return Rt(e, ["moov", "trak"]).reduce(function (e, t) { var i, n, r = Rt(t, ["tkhd"])[0]; return r ? (i = r[0], r = zt(r[n = 0 === i ? 12 : 20] << 24 | r[1 + n] << 16 | r[2 + n] << 8 | r[3 + n]), (t = Rt(t, ["mdia", "mdhd" ])[0]) ? (i = t[0], e[r] = zt(t[n = 0 === i ? 12 : 20] << 24 | t[1 + n] << 16 | t[2 + n] << 8 | t[3 + n]), e) : null) : null }, {}) }, ke = function (a, e) { e = Rt(e, ["moof", "traf"]).reduce(function (e, t) { var i, n = Rt(t, ["tfhd"])[0], r = zt(n[4] << 24 | n[5] << 16 | n[6] << 8 | n[7]), n = a[r] || 9e4, r = Rt(t, ["tfdt"])[0], t = new DataView(r.buffer, r.byteOffset, r.byteLength), t = 1 === r[0] ? Kt(r.subarray(4, 12)) : t.getUint32(4); return "bigint" == typeof t ? i = t / qt.BigInt(n) : "number" != typeof t || isNaN(t) || (i = t / n), e = (i = i < Number .MAX_SAFE_INTEGER ? Number(i) : i) < e ? i : e }, 1 / 0); return "bigint" == typeof e || isFinite(e) ? e : 0 }, e = function (e) { var e = Rt(e, ["moov", "trak"]), n = []; return e.forEach(function (e) { var t = Rt(e, ["mdia", "hdlr"]), i = Rt(e, ["tkhd"]); t.forEach(function (e, t) { e = Ot(e.subarray(8, 12)), t = i[t]; "vide" === e && (t = 0 === (t = new DataView(t.buffer, t .byteOffset, t.byteLength)).getUint8(0) ? t .getUint32(12) : t.getUint32(20), n.push(t)) }) }), n }, Yt = function (e) { var t = 0 === e[0] ? 12 : 20; return zt(e[t] << 24 | e[1 + t] << 16 | e[2 + t] << 8 | e[3 + t]) }, q = function (e) { var e = Rt(e, ["moov", "trak"]), s = []; return e.forEach(function (e) { var t = {}, i = Rt(e, ["tkhd"])[0]; i && (i = (n = new DataView(i.buffer, i.byteOffset, i.byteLength)) .getUint8(0), t.id = 0 === i ? n.getUint32(12) : n.getUint32(20) ); var n = Rt(e, ["mdia", "hdlr"])[0]; n && (a = Ot(n.subarray(8, 12)), t.type = "vide" === a ? "video" : "soun" === a ? "audio" : a); var r, a = Rt(e, ["mdia", "minf", "stbl", "stsd"])[0]; a && (a = a.subarray(8), t.codec = Ot(a.subarray(4, 8)), (a = Rt(a, [t .codec ])[0]) && (/^[asm]vc[1-9]$/i.test(t.codec) ? (r = a.subarray( 78), "avcC" === Ot(r.subarray(4, 8)) && 11 < r.length ? (t.codec += ".", t.codec += Xt(r[9]), t.codec += Xt(r[ 10]), t.codec += Xt(r[11])) : t.codec = "avc1.4d400d") : /^mp4[a,v]$/i.test(t.codec) ? (r = a .subarray(28), "esds" === Ot(r.subarray(4, 8)) && 20 < r .length && 0 !== r[19] ? (t.codec += "." + Xt(r[19]), t .codec += "." + Xt(r[20] >>> 2 & 63).replace(/^0/, "")) : t.codec = "mp4a.40.2") : t.codec = t .codec.toLowerCase())); e = Rt(e, ["mdia", "mdhd"])[0]; e && (t.timescale = Yt(e)), s.push(t) }), s }, Qt = ke, $t = q, Jt = Ie, Zt = {}; Zt.ts = { parseType: function (e, t) { e = xt(e); return 0 === e ? "pat" : e === t ? "pmt" : t ? "pes" : null }, parsePat: function (e) { var t = At(e), i = 4 + Pt(e); return t && (i += e[i] + 1), (31 & e[i + 10]) << 8 | e[i + 11] }, parsePmt: function (e) { var t = {}, i = At(e), n = 4 + Pt(e); if (i && (n += e[n] + 1), 1 & e[n + 5]) { for (var r = 3 + ((15 & e[n + 1]) << 8 | e[n + 2]) - 4, a = 12 + ((15 & e[n + 10]) << 8 | e[n + 11]); a < r;) { var s = n + a; t[(31 & e[s + 1]) << 8 | e[s + 2]] = e[s], a += 5 + ((15 & e[s + 3]) << 8 | e[s + 4]) } return t } }, parsePayloadUnitStartIndicator: At, parsePesType: function (e, t) { switch (t[xt(e)]) { case je.H264_STREAM_TYPE: return "video"; case je.ADTS_STREAM_TYPE: return "audio"; case je.METADATA_STREAM_TYPE: return "timed-metadata"; default: return null } }, parsePesTime: function (e) { if (!At(e)) return null; var t = 4 + Pt(e); if (t >= e.byteLength) return null; var i = null, n = e[t + 7]; return 192 & n && ((i = {}).pts = (14 & e[t + 9]) << 27 | (255 & e[t + 10]) << 20 | (254 & e[t + 11]) << 12 | (255 & e[t + 12]) << 5 | ( 254 & e[t + 13]) >>> 3, i.pts *= 4, i.pts += (6 & e[t + 13]) >>> 1, i.dts = i.pts, 64 & n && (i.dts = (14 & e[t + 14]) << 27 | (255 & e[t + 15]) << 20 | (254 & e[t + 16]) << 12 | (255 & e[t + 17]) << 5 | (254 & e[t + 18]) >>> 3, i.dts *= 4, i.dts += ( 6 & e[t + 18]) >>> 1)), i }, videoPacketContainsKeyFrame: function (e) { for (var t = 4 + Pt(e), i = e.subarray(t), n = 0, r = 0, a = !1; r < i .byteLength - 3; r++) if (1 === i[r + 2]) { n = r + 5; break } for (; n < i.byteLength;) switch (i[n]) { case 0: if (0 !== i[n - 1]) { n += 2; break } if (0 !== i[n - 2]) { n++; break } for (r + 3 !== n - 2 && "slice_layer_without_partitioning_rbsp_idr" === Lt(31 & i[ r + 3]) && (a = !0); 1 !== i[++n] && n < i.length;) ; r = n - 2, n += 3; break; case 1: if (0 !== i[n - 1] || 0 !== i[n - 2]) { n += 3; break } "slice_layer_without_partitioning_rbsp_idr" === Lt(31 & i[r + 3]) && (a = !0), r = n - 2, n += 3; break; default: n += 3 } return i = i.subarray(r), n -= r, r = 0, a = i && 3 < i.byteLength && "slice_layer_without_partitioning_rbsp_idr" === Lt(31 & i[r + 3]) ? !0 : a } }, Zt.aac = dt; function ei(e, t, i) { for (var n, r, a, s, o = 0, u = 188, l = !1; u <= e.byteLength;) if (71 !== e[o] || 71 !== e[u] && u !== e.byteLength) o++, u++; else { if (n = e.subarray(o, u), "pes" === Zt.ts.parseType(n, t.pid) && (r = Zt.ts .parsePesType(n, t.table), a = Zt.ts.parsePayloadUnitStartIndicator(n), "audio" === r && a && (s = Zt.ts.parsePesTime(n)) && (s.type = "audio", i.audio.push(s), l = !0)), l) break; o += 188, u += 188 } for (o = (u = e.byteLength) - 188, l = !1; 0 <= o;) if (71 !== e[o] || 71 !== e[u] && u !== e.byteLength) o--, u--; else { if (n = e.subarray(o, u), "pes" === Zt.ts.parseType(n, t.pid) && (r = Zt.ts .parsePesType(n, t.table), a = Zt.ts.parsePayloadUnitStartIndicator(n), "audio" === r && a && (s = Zt.ts.parsePesTime(n)) && (s.type = "audio", i.audio.push(s), l = !0)), l) break; o -= 188, u -= 188 } } function ti(e) { var t, i = { pid: null, table: null }, n = {}; for (t in !function (e, t) { for (var i, n = 0, r = 188; r < e.byteLength;) if (71 !== e[n] || 71 !== e[r]) n++, r++; else { switch (i = e.subarray(n, r), Zt.ts.parseType(i, t.pid)) { case "pat": t.pid = Zt.ts.parsePat(i); break; case "pmt": var a = Zt.ts.parsePmt(i); t.table = t.table || {}, Object.keys(a).forEach(function (e) { t.table[e] = a[e] }) } n += 188, r += 188 } }(e, i), i.table) if (i.table.hasOwnProperty(t)) switch (i.table[t]) { case je.H264_STREAM_TYPE: n.video = [], function (e, t, i) { for (var n, r, a, s, o, u, l, c, d = 0, h = 188, p = !1, f = { data: [], size: 0 }; h < e.byteLength;) if (71 !== e[d] || 71 !== e[h]) d++, h++; else { if (n = e.subarray(d, h), "pes" === Zt.ts.parseType(n, t .pid)) if (r = Zt.ts.parsePesType(n, t.table), a = Zt.ts .parsePayloadUnitStartIndicator(n), "video" === r && (a && !p && (s = Zt.ts.parsePesTime(n)) && (s.type = "video", i.video.push(s), p = !0), !i.firstKeyFrame)) { if (a && 0 !== f.size) { for (o = new Uint8Array(f.size), u = 0; f .data.length;) l = f.data.shift(), o .set(l, u), u += l.byteLength; !Zt.ts.videoPacketContainsKeyFrame(o) || ( c = Zt.ts.parsePesTime(o)) && (i .firstKeyFrame = c, i.firstKeyFrame .type = "video"), f.size = 0 } f.data.push(n), f.size += n.byteLength } if (p && i.firstKeyFrame) break; d += 188, h += 188 } for (d = (h = e.byteLength) - 188, p = !1; 0 <= d;) if (71 !== e[d] || 71 !== e[h]) d--, h--; else { if (n = e.subarray(d, h), "pes" === Zt.ts.parseType(n, t .pid) && (r = Zt.ts.parsePesType(n, t.table), a = Zt.ts.parsePayloadUnitStartIndicator(n), "video" === r && a && (s = Zt.ts.parsePesTime( n)) && (s.type = "video", i.video.push(s), p = !0)), p) break; d -= 188, h -= 188 } }(e, i, n), 0 === n.video.length && delete n.video; break; case je.ADTS_STREAM_TYPE: n.audio = [], ei(e, i, n), 0 === n.audio.length && delete n.audio } return n } var ii = ue, ni = function (e, t) { var i, n, r = (Zt.aac.isLikelyAacData(e) ? function (e) { for (var t, i = !1, n = 0, r = null, a = null, s = 0, o = 0; 3 <= e .length - o;) { switch (Zt.aac.parseType(e, o)) { case "timed-metadata": if (e.length - o < 10) { i = !0; break } if ((s = Zt.aac.parseId3TagSize(e, o)) > e.length) { i = !0; break } null === a && (t = e.subarray(o, o + s), a = Zt.aac .parseAacTimestamp(t)), o += s; break; case "audio": if (e.length - o < 7) { i = !0; break } if ((s = Zt.aac.parseAdtsSize(e, o)) > e.length) { i = !0; break } null === r && (t = e.subarray(o, o + s), r = Zt.aac .parseSampleRate(t)), n++, o += s; break; default: o++ } if (i) return null } if (null === r || null === a) return null; var u = ii / r; return { audio: [{ type: "audio", dts: a, pts: a }, { type: "audio", dts: a + 1024 * n * u, pts: a + 1024 * n * u }] } } : ti)(e); return r && (r.audio || r.video) ? (e = t, (t = r).audio && t.audio.length && ( "undefined" != typeof (i = e) && !isNaN(i) || (i = t.audio[0].dts), t .audio.forEach(function (e) { e.dts = Jt(e.dts, i), e.pts = Jt(e.pts, i), e.dtsTime = e.dts / ii, e.ptsTime = e.pts / ii })), t.video && t.video.length && ("undefined" != typeof (n = e) && ! isNaN(n) || (n = t.video[0].dts), t.video.forEach(function (e) { e.dts = Jt(e.dts, n), e.pts = Jt(e.pts, n), e.dtsTime = e.dts / ii, e.ptsTime = e.pts / ii }), t.firstKeyFrame && ((t = t.firstKeyFrame).dts = Jt(t.dts, n), t .pts = Jt(t.pts, n), t.dtsTime = t.dts / ii, t.ptsTime = t.pts / ii) ), r) : null }, ri = function () { function e(e, t) { this.options = t || {}, this.self = e, this.init() } var t = e.prototype; return t.init = function () { var i, e; this.transmuxer && this.transmuxer.dispose(), this.transmuxer = new Dt .Transmuxer(this.options), i = this.self, (e = this.transmuxer).on( "data", function (e) { var t = e.initSegment; e.initSegment = { data: t.buffer, byteOffset: t.byteOffset, byteLength: t.byteLength }; t = e.data; e.data = t.buffer, i.postMessage({ action: "data", segment: e, byteOffset: t.byteOffset, byteLength: t.byteLength }, [e.data]) }), e.on("done", function (e) { i.postMessage({ action: "done" }) }), e.on("gopInfo", function (e) { i.postMessage({ action: "gopInfo", gopInfo: e }) }), e.on("videoSegmentTimingInfo", function (e) { var t = { start: { decode: ce(e.start.dts), presentation: ce(e.start.pts) }, end: { decode: ce(e.end.dts), presentation: ce(e.end.pts) }, baseMediaDecodeTime: ce(e.baseMediaDecodeTime) }; e.prependedContentDuration && (t.prependedContentDuration = ce(e .prependedContentDuration)), i.postMessage({ action: "videoSegmentTimingInfo", videoSegmentTimingInfo: t }) }), e.on("audioSegmentTimingInfo", function (e) { var t = { start: { decode: ce(e.start.dts), presentation: ce(e.start.pts) }, end: { decode: ce(e.end.dts), presentation: ce(e.end.pts) }, baseMediaDecodeTime: ce(e.baseMediaDecodeTime) }; e.prependedContentDuration && (t.prependedContentDuration = ce(e .prependedContentDuration)), i.postMessage({ action: "audioSegmentTimingInfo", audioSegmentTimingInfo: t }) }), e.on("id3Frame", function (e) { i.postMessage({ action: "id3Frame", id3Frame: e }) }), e.on("caption", function (e) { i.postMessage({ action: "caption", caption: e }) }), e.on("trackinfo", function (e) { i.postMessage({ action: "trackinfo", trackInfo: e }) }), e.on("audioTimingInfo", function (e) { i.postMessage({ action: "audioTimingInfo", audioTimingInfo: { start: ce(e.start), end: ce(e.end) } }) }), e.on("videoTimingInfo", function (e) { i.postMessage({ action: "videoTimingInfo", videoTimingInfo: { start: ce(e.start), end: ce(e.end) } }) }), e.on("log", function (e) { i.postMessage({ action: "log", log: e }) }) }, t.pushMp4Captions = function (e) { this.captionParser || (this.captionParser = new Gt, this.captionParser .init()); var t = new Uint8Array(e.data, e.byteOffset, e.byteLength), e = this.captionParser.parse(t, e.trackIds, e.timescales); this.self.postMessage({ action: "mp4Captions", captions: e && e.captions || [], logs: e && e.logs || [], data: t.buffer }, [t.buffer]) }, t.probeMp4StartTime = function (e) { var t = e.timescales, e = e.data, t = Qt(t, e); this.self.postMessage({ action: "probeMp4StartTime", startTime: t, data: e }, [e.buffer]) }, t.probeMp4Tracks = function (e) { var t = e.data, e = $t(t); this.self.postMessage({ action: "probeMp4Tracks", tracks: e, data: t }, [t.buffer]) }, t.probeTs = function (e) { var t = e.data, i = e.baseStartTime, e = "number" != typeof i || isNaN(i) ? void 0 : i * ue, i = ni(t, e), e = null; i && ((e = { hasVideo: i.video && 2 === i.video.length || !1, hasAudio: i.audio && 2 === i.audio.length || !1 }).hasVideo && (e.videoStart = i.video[0].ptsTime), e.hasAudio && (e .audioStart = i.audio[0].ptsTime)), this.self.postMessage({ action: "probeTs", result: e, data: t }, [t.buffer]) }, t.clearAllMp4Captions = function () { this.captionParser && this.captionParser.clearAllCaptions() }, t.clearParsedMp4Captions = function () { this.captionParser && this.captionParser.clearParsedCaptions() }, t.push = function (e) { e = new Uint8Array(e.data, e.byteOffset, e.byteLength); this.transmuxer.push(e) }, t.reset = function () { this.transmuxer.reset() }, t.setTimestampOffset = function (e) { e = e.timestampOffset || 0; this.transmuxer.setBaseMediaDecodeTime(Math.round(le(e))) }, t.setAudioAppendStart = function (e) { this.transmuxer.setAudioAppendStart(Math.ceil(le(e.appendStart))) }, t.setRemux = function (e) { this.transmuxer.setRemux(e.remux) }, t.flush = function (e) { this.transmuxer.flush(), self.postMessage({ action: "done", type: "transmuxed" }) }, t.endTimeline = function () { this.transmuxer.endTimeline(), self.postMessage({ action: "endedtimeline", type: "transmuxed" }) }, t.alignGopsWith = function (e) { this.transmuxer.alignGopsWith(e.gopsToAlignWith.slice()) }, e }(); self.onmessage = function (e) { "init" === e.data.action && e.data.options ? this.messageHandlers = new ri(self, e .data.options) : (this.messageHandlers || (this.messageHandlers = new ri( self)), e.data && e.data.action && "init" !== e.data.action && this .messageHandlers[e.data.action] && this.messageHandlers[e.data.action](e .data)) } }))), El = function (e) { e.currentTransmux = null, e.transmuxQueue.length && (e.currentTransmux = e.transmuxQueue.shift(), "function" == typeof e.currentTransmux ? e.currentTransmux() : Pu(e.currentTransmux)) }, kl = function (e) { Du("reset", e) }, Cl = function (e) { var t = new wl; t.currentTransmux = null, t.transmuxQueue = []; var i = t.terminate; return t.terminate = function () { return t.currentTransmux = null, t.transmuxQueue.length = 0, i.call(t) }, t.postMessage({ action: "init", options: e }), t }, Il = 2, xl = -101, Al = -102, Pl = Oo("CodecUtils"), Ll = Oo("PlaylistSelector"), ar = function () { var e = this.useDevicePixelRatio && window.devicePixelRatio || 1; return el(this.playlists.master, this.systemBandwidth, parseInt($u(this.tech_.el(), "width"), 10) * e, parseInt($u(this.tech_.el(), "height"), 10) * e, this.limitRenditionByPlayerDimensions, this .masterPlaylistController_) }, Dl = function (n) { function e(e, t) { var i = n.call(this) || this; if (!e) throw new TypeError("Initialization settings are required"); if ("function" != typeof e.currentTime) throw new TypeError("No currentTime getter specified"); if (!e.mediaSource) throw new TypeError("No MediaSource specified"); return i.bandwidth = e.bandwidth, i.throughput = { rate: 0, count: 0 }, i.roundTrip = NaN, i.resetStats_(), i.mediaIndex = null, i.partIndex = null, i.hasPlayed_ = e .hasPlayed, i.currentTime_ = e.currentTime, i.seekable_ = e.seekable, i.seeking_ = e.seeking, i .duration_ = e.duration, i.mediaSource_ = e.mediaSource, i.vhs_ = e.vhs, i.loaderType_ = e .loaderType, i.currentMediaInfo_ = void 0, i.startingMediaInfo_ = void 0, i .segmentMetadataTrack_ = e.segmentMetadataTrack, i.goalBufferLength_ = e.goalBufferLength, i .sourceType_ = e.sourceType, i.sourceUpdater_ = e.sourceUpdater, i.inbandTextTracks_ = e .inbandTextTracks, i.state_ = "INIT", i.timelineChangeController_ = e.timelineChangeController, i.shouldSaveSegmentTimingInfo_ = !0, i.parse708captions_ = e.parse708captions, i .useDtsForTimestampOffset_ = e.useDtsForTimestampOffset, i.captionServices_ = e.captionServices, i.experimentalExactManifestTimings = e.experimentalExactManifestTimings, i.checkBufferTimeout_ = null, i.error_ = void 0, i.currentTimeline_ = -1, i.pendingSegment_ = null, i.xhrOptions_ = null, i.pendingSegments_ = [], i.audioDisabled_ = !1, i.isPendingTimestampOffset_ = !1, i .gopBuffer_ = [], i.timeMapping_ = 0, i.safeAppend_ = 11 <= tr.browser.IE_VERSION, i .appendInitSegment_ = { audio: !0, video: !0 }, i.playlistOfLastInitSegment_ = { audio: null, video: null }, i.callQueue_ = [], i.loadQueue_ = [], i.metadataQueue_ = { id3: [], caption: [] }, i.waitingOnRemove_ = !1, i.quotaExceededErrorRetryTimeout_ = null, i.activeInitSegmentId_ = null, i.initSegments_ = {}, i.cacheEncryptionKeys_ = e.cacheEncryptionKeys, i.keyCache_ = {}, i .decrypter_ = e.decrypter, i.syncController_ = e.syncController, i.syncPoint_ = { segmentIndex: 0, time: 0 }, i.transmuxer_ = i.createTransmuxer_(), i.triggerSyncInfoUpdate_ = function () { return i.trigger("syncinfoupdate") }, i.syncController_.on("syncinfoupdate", i.triggerSyncInfoUpdate_), i.mediaSource_ .addEventListener("sourceopen", function () { i.isEndOfStream_() || (i.ended_ = !1) }), i.fetchAtBuffer_ = !1, i.logger_ = Oo("SegmentLoader[" + i.loaderType_ + "]"), Object .defineProperty(ft(i), "state", { get: function () { return this.state_ }, set: function (e) { e !== this.state_ && (this.logger_(this.state_ + " -> " + e), this.state_ = e, this.trigger("statechange")) } }), i.sourceUpdater_.on("ready", function () { i.hasEnoughInfoToAppend_() && i.processCallQueue_() }), "main" === i.loaderType_ && i.timelineChangeController_.on("pendingtimelinechange", function () { i.hasEnoughInfoToAppend_() && i.processCallQueue_() }), "audio" === i.loaderType_ && i.timelineChangeController_.on("timelinechange", function () { i.hasEnoughInfoToLoad_() && i.processLoadQueue_(), i.hasEnoughInfoToAppend_() && i .processCallQueue_() }), i } mt(e, n); var t = e.prototype; return t.createTransmuxer_ = function () { return Cl({ remux: !1, alignGopsAtEnd: this.safeAppend_, keepOriginalTimestamps: !0, parse708captions: this.parse708captions_, captionServices: this.captionServices_ }) }, t.resetStats_ = function () { this.mediaBytesTransferred = 0, this.mediaRequests = 0, this.mediaRequestsAborted = 0, this .mediaRequestsTimedout = 0, this.mediaRequestsErrored = 0, this.mediaTransferDuration = 0, this.mediaSecondsLoaded = 0, this.mediaAppends = 0 }, t.dispose = function () { this.trigger("dispose"), this.state = "DISPOSED", this.pause(), this.abort_(), this .transmuxer_ && this.transmuxer_.terminate(), this.resetStats_(), this .checkBufferTimeout_ && window.clearTimeout(this.checkBufferTimeout_), this .syncController_ && this.triggerSyncInfoUpdate_ && this.syncController_.off( "syncinfoupdate", this.triggerSyncInfoUpdate_), this.off() }, t.setAudio = function (e) { this.audioDisabled_ = !e, e ? this.appendInitSegment_.audio = !0 : this.sourceUpdater_ .removeAudio(0, this.duration_()) }, t.abort = function () { "WAITING" === this.state ? (this.abort_(), this.state = "READY", this.paused() || this .monitorBuffer_()) : this.pendingSegment_ && (this.pendingSegment_ = null) }, t.abort_ = function () { this.pendingSegment_ && this.pendingSegment_.abortRequests && this.pendingSegment_ .abortRequests(), this.pendingSegment_ = null, this.callQueue_ = [], this.loadQueue_ = [], this.metadataQueue_.id3 = [], this.metadataQueue_.caption = [], this .timelineChangeController_.clearPendingTimelineChange(this.loaderType_), this .waitingOnRemove_ = !1, window.clearTimeout(this.quotaExceededErrorRetryTimeout_), this .quotaExceededErrorRetryTimeout_ = null }, t.checkForAbort_ = function (e) { return "APPENDING" !== this.state || this.pendingSegment_ ? !this.pendingSegment_ || this .pendingSegment_.requestId !== e : (this.state = "READY", !0) }, t.error = function (e) { return "undefined" != typeof e && (this.logger_("error occurred:", e), this.error_ = e), this .pendingSegment_ = null, this.error_ }, t.endOfStream = function () { this.ended_ = !0, this.transmuxer_ && kl(this.transmuxer_), this.gopBuffer_.length = 0, this .pause(), this.trigger("ended") }, t.buffered_ = function () { var e = this.getMediaInfo_(); if (!this.sourceUpdater_ || !e) return tr.createTimeRanges(); if ("main" === this.loaderType_) { var t = e.hasAudio, i = e.hasVideo, e = e.isMuxed; if (i && t && !this.audioDisabled_ && !e) return this.sourceUpdater_.buffered(); if (i) return this.sourceUpdater_.videoBuffered() } return this.sourceUpdater_.audioBuffered() }, t.initSegmentForMap = function (e, t) { if (void 0 === t && (t = !1), !e) return null; var i = bu(e), n = this.initSegments_[i]; return t && !n && e.bytes && (this.initSegments_[i] = n = { resolvedUri: e.resolvedUri, byterange: e.byterange, bytes: e.bytes, tracks: e.tracks, timescales: e.timescales }), n || e }, t.segmentKey = function (e, t) { if (void 0 === t && (t = !1), !e) return null; var i = Tu(e), n = this.keyCache_[i]; this.cacheEncryptionKeys_ && t && !n && e.bytes && (this.keyCache_[i] = n = { resolvedUri: e.resolvedUri, bytes: e.bytes }); e = { resolvedUri: (n || e).resolvedUri }; return n && (e.bytes = n.bytes), e }, t.couldBeginLoading_ = function () { return this.playlist_ && !this.paused() }, t.load = function () { if (this.monitorBuffer_(), this.playlist_) return "INIT" === this.state && this .couldBeginLoading_() ? this.init_() : void (!this.couldBeginLoading_() || "READY" !== this.state && "INIT" !== this.state || (this.state = "READY")) }, t.init_ = function () { return this.state = "READY", this.resetEverything(), this.monitorBuffer_() }, t.playlist = function (e, t) { if (void 0 === t && (t = {}), e) { var i = this.playlist_, n = this.pendingSegment_; this.playlist_ = e, this.xhrOptions_ = t, "INIT" === this.state && (e.syncInfo = { mediaSequence: e.mediaSequence, time: 0 }, "main" === this.loaderType_ && this.syncController_.setDateTimeMappingForStart( e)); var r = null; if (i && (i.id ? r = i.id : i.uri && (r = i.uri)), this.logger_("playlist update [" + r + " => " + (e.id || e.uri) + "]"), this.trigger("syncinfoupdate"), "INIT" === this .state && this.couldBeginLoading_()) return this.init_(); if (!i || i.uri !== e.uri) return null !== this.mediaIndex && (e.endList ? this .resyncLoader() : this.resetLoader()), this.currentMediaInfo_ = void 0, void this.trigger("playlistupdate"); t = e.mediaSequence - i.mediaSequence; this.logger_("live window shift [" + t + "]"), null !== this.mediaIndex && (this .mediaIndex -= t, this.mediaIndex < 0 ? (this.mediaIndex = null, this.partIndex = null) : (r = this.playlist_.segments[this.mediaIndex], !this.partIndex || r .parts && r.parts.length && r.parts[this.partIndex] || (r = this.mediaIndex, this.logger_("currently processing part (index " + this.partIndex + ") no longer exists."), this.resetLoader(), this.mediaIndex = r))), n && (n.mediaIndex -= t, n.mediaIndex < 0 ? (n.mediaIndex = null, n.partIndex = null) : (0 <= n.mediaIndex && (n.segment = e.segments[n.mediaIndex]), 0 <= n.partIndex && n .segment.parts && (n.part = n.segment.parts[n.partIndex]))), this.syncController_ .saveExpiredSegmentInfo(i, e) } }, t.pause = function () { this.checkBufferTimeout_ && (window.clearTimeout(this.checkBufferTimeout_), this .checkBufferTimeout_ = null) }, t.paused = function () { return null === this.checkBufferTimeout_ }, t.resetEverything = function (e) { this.ended_ = !1, this.appendInitSegment_ = { audio: !0, video: !0 }, this.resetLoader(), this.remove(0, 1 / 0, e), this.transmuxer_ && (this.transmuxer_ .postMessage({ action: "clearAllMp4Captions" }), this.transmuxer_.postMessage({ action: "reset" })) }, t.resetLoader = function () { this.fetchAtBuffer_ = !1, this.resyncLoader() }, t.resyncLoader = function () { this.transmuxer_ && kl(this.transmuxer_), this.mediaIndex = null, this.partIndex = null, this .syncPoint_ = null, this.isPendingTimestampOffset_ = !1, this.callQueue_ = [], this .loadQueue_ = [], this.metadataQueue_.id3 = [], this.metadataQueue_.caption = [], this .abort(), this.transmuxer_ && this.transmuxer_.postMessage({ action: "clearParsedMp4Captions" }) }, t.remove = function (e, t, i, n) { if (void 0 === i && (i = function () { }), void 0 === n && (n = !1), (t = t === 1 / 0 ? this .duration_() : t) <= e) this.logger_( "skipping remove because end ${end} is <= start ${start}"); else if (this.sourceUpdater_ && this.getMediaInfo_()) { var r, a = 1, s = function () { 0 === --a && i() }; for (r in !n && this.audioDisabled_ || (a++, this.sourceUpdater_.removeAudio(e, t, s)), ! n && "main" !== this.loaderType_ || (this.gopBuffer_ = function (e, t, i, n) { for (var r = Math.ceil((t - n) * cl), a = Math.ceil((i - n) * cl), n = e .slice(), s = e.length; s-- && !(e[s].pts <= a);) ; if (-1 === s) return n; for (var o = s + 1; o-- && !(e[o].pts <= r);) ; return o = Math.max(o, 0), n.splice(o, s - o + 1), n }(this.gopBuffer_, e, t, this.timeMapping_), a++, this.sourceUpdater_.removeVideo(e, t, s)), this.inbandTextTracks_) il(e, t, this.inbandTextTracks_[r]); il(e, t, this.segmentMetadataTrack_), s() } else this.logger_("skipping remove because no source updater or starting media info") }, t.monitorBuffer_ = function () { this.checkBufferTimeout_ && window.clearTimeout(this.checkBufferTimeout_), this .checkBufferTimeout_ = window.setTimeout(this.monitorBufferTick_.bind(this), 1) }, t.monitorBufferTick_ = function () { "READY" === this.state && this.fillBuffer_(), this.checkBufferTimeout_ && window.clearTimeout( this.checkBufferTimeout_), this.checkBufferTimeout_ = window.setTimeout(this .monitorBufferTick_.bind(this), 500) }, t.fillBuffer_ = function () { var e; this.sourceUpdater_.updating() || (e = this.chooseNextRequest_()) && ("number" == typeof e .timestampOffset && (this.isPendingTimestampOffset_ = !1, this.timelineChangeController_ .pendingTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: e.timeline })), this.loadSegment_(e)) }, t.isEndOfStream_ = function (e, t, i) { if (void 0 === e && (e = this.mediaIndex), void 0 === t && (t = this.playlist_), void 0 === i && (i = this.partIndex), !t || !this.mediaSource_) return !1; var n = "number" == typeof e && t.segments[e], e = e + 1 === t.segments.length, n = !n || !n.parts || i + 1 === n.parts.length; return t.endList && "open" === this.mediaSource_.readyState && e && n }, t.chooseNextRequest_ = function () { var e = this.buffered_(), t = Fo(e) || 0, i = jo(e, this.currentTime_()), n = !this.hasPlayed_() && 1 <= i, r = i >= this.goalBufferLength_(), e = this.playlist_.segments; if (!e.length || n || r) return null; this.syncPoint_ = this.syncPoint_ || this.syncController_.getSyncPoint(this.playlist_, this .duration_(), this.currentTimeline_, this.currentTime_()); var a, n = { partIndex: null, mediaIndex: null, startOfSegment: null, playlist: this.playlist_, isSyncRequest: Boolean(!this.syncPoint_) }; n.isSyncRequest ? n.mediaIndex = function (e, t, i) { t = t || []; for (var n = [], r = 0, a = 0; a < t.length; a++) { var s = t[a]; if (e === s.timeline && (n.push(a), i < (r += s.duration))) return a } return 0 === n.length ? 0 : n[n.length - 1] }(this.currentTimeline_, e, t) : null !== this.mediaIndex ? (r = e[this.mediaIndex], a = "number" == typeof this.partIndex ? this.partIndex : -1, n.startOfSegment = r.end || t, r.parts && r.parts[a + 1] ? (n.mediaIndex = this.mediaIndex, n.partIndex = a + 1) : n .mediaIndex = this.mediaIndex + 1) : (a = (o = fl.getMediaInfoForTime({ experimentalExactManifestTimings: this.experimentalExactManifestTimings, playlist: this.playlist_, currentTime: this.fetchAtBuffer_ ? t : this.currentTime_(), startingPartIndex: this.syncPoint_.partIndex, startingSegmentIndex: this.syncPoint_.segmentIndex, startTime: this.syncPoint_.time })).segmentIndex, s = o.startTime, o = o.partIndex, n.getMediaInfoForTime = this .fetchAtBuffer_ ? "bufferedEnd " + t : "currentTime " + this.currentTime_(), n .mediaIndex = a, n.startOfSegment = s, n.partIndex = o); var s = e[n.mediaIndex], o = s && "number" == typeof n.partIndex && s.parts && s.parts[n.partIndex]; if (!s || "number" == typeof n.partIndex && !o) return null; "number" != typeof n.partIndex && s.parts && (n.partIndex = 0, o = s.parts[0]), i || !o || o .independent || (0 === n.partIndex ? (o = (i = e[n.mediaIndex - 1]).parts && i.parts .length && i.parts[i.parts.length - 1]) && o.independent && (--n.mediaIndex, n .partIndex = i.parts.length - 1, n.independent = "previous segment") : s.parts[n .partIndex - 1].independent && (--n.partIndex, n.independent = "previous part")); s = this.mediaSource_ && "ended" === this.mediaSource_.readyState; return n.mediaIndex >= e.length - 1 && s && !this.seeking_() ? null : this.generateSegmentInfo_( n) }, t.generateSegmentInfo_ = function (e) { var t = e.independent, i = e.playlist, n = e.mediaIndex, r = e.startOfSegment, a = e.isSyncRequest, s = e.partIndex, o = e.forceTimestampOffset, u = e.getMediaInfoForTime, l = i.segments[n], e = "number" == typeof s && l.parts[s], t = { requestId: "segment-loader-" + Math.random(), uri: e && e.resolvedUri || l.resolvedUri, mediaIndex: n, partIndex: e ? s : null, isSyncRequest: a, startOfSegment: r, playlist: i, bytes: null, encryptedBytes: null, timestampOffset: null, timeline: l.timeline, duration: e && e.duration || l.duration, segment: l, part: e, byteLength: 0, transmuxer: this.transmuxer_, getMediaInfoForTime: u, independent: t }, o = "undefined" != typeof o ? o : this.isPendingTimestampOffset_; t.timestampOffset = this.timestampOffsetForSegment_({ segmentTimeline: l.timeline, currentTimeline: this.currentTimeline_, startOfSegment: r, buffered: this.buffered_(), overrideCheck: o }); o = Fo(this.sourceUpdater_.audioBuffered()); return "number" == typeof o && (t.audioAppendStart = o - this.sourceUpdater_ .audioTimestampOffset()), this.sourceUpdater_.videoBuffered().length && (t .gopsToAlignWith = function (e, t, i) { if ("undefined" == typeof t || null === t || !e.length) return []; for (var n = Math.ceil((t - i + 3) * cl), r = 0; r < e.length && !(e[r].pts > n); r++) ; return e.slice(r) }(this.gopBuffer_, this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_)), t }, t.timestampOffsetForSegment_ = function (e) { return i = (t = e).segmentTimeline, n = t.currentTimeline, r = t.startOfSegment, e = t.buffered, t.overrideCheck || i !== n ? !(i < n) && e.length ? e.end(e.length - 1) : r : null; var t, i, n, r }, t.earlyAbortWhenNeeded_ = function (e) { var t, i, n, r, a, s, o, u, l, c, d, h, p; !this.vhs_.tech_.paused() && this.xhrOptions_.timeout && this.playlist_.attributes.BANDWIDTH && (Date.now() - (e.firstBytesReceivedAt || Date.now()) < 1e3 || (t = this.currentTime_(), r = e.bandwidth, a = this.pendingSegment_.duration, p = fl.estimateSegmentRequestTime(a, r, this.playlist_, e.bytesReceived), i = this.buffered_(), n = t, void 0 === ( e = this.vhs_.tech_.playbackRate()) && (e = 1), p <= (e = ((i.length ? i.end(i .length - 1) : 0) - n) / e - 1) || (r = { master: this.vhs_.playlists.master, currentTime: t, bandwidth: r, duration: this.duration_(), segmentDuration: a, timeUntilRebuffer: e, currentTimeline: this.currentTimeline_, syncController: this.syncController_ }, a = r.master, s = r.currentTime, o = r.bandwidth, u = r.duration, l = r .segmentDuration, c = r.timeUntilRebuffer, d = r.currentTimeline, h = r .syncController, a = (r = (a = !(a = (r = a.playlists.filter(function (e) { return !fl.isIncompatible(e) })).filter(fl.isEnabled)).length ? r.filter(function (e) { return !fl.isDisabled(e) }) : a).filter(fl.hasAttribute.bind(null, "BANDWIDTH")).map(function (e) { var t = h.getSyncPoint(e, u, d, s) ? 1 : 2; return { playlist: e, rebufferingImpact: fl.estimateSegmentRequestTime(l, o, e) * t - c } })).filter(function (e) { return e.rebufferingImpact <= 0 }), Ju(a, function (e, t) { return Zu(t.playlist, e.playlist) }), (r = a.length ? a[0] : (Ju(r, function (e, t) { return e.rebufferingImpact - t.rebufferingImpact }), r[0] || null)) && (p = p - e - r.rebufferingImpact, !r.playlist || r .playlist.uri === this.playlist_.uri || p < (e <= hl ? 1 : .5) || (this .bandwidth = r.playlist.attributes.BANDWIDTH * Sl.BANDWIDTH_VARIANCE + 1, this.trigger("earlyabort")))))) }, t.handleAbort_ = function (e) { this.logger_("Aborting " + rl(e)), this.mediaRequestsAborted += 1 }, t.handleProgress_ = function (e, t) { this.earlyAbortWhenNeeded_(t.stats), this.checkForAbort_(t.requestId) || this.trigger( "progress") }, t.handleTrackInfo_ = function (e, t) { this.earlyAbortWhenNeeded_(e.stats), this.checkForAbort_(e.requestId) || this .checkForIllegalMediaSwitch(t) || (function (e, t) { if (!e && !t || !e && t || e && !t) return !1; if (e === t) return !0; var i = Object.keys(e).sort(), n = Object.keys(t).sort(); if (i.length !== n.length) return !1; for (var r = 0; r < i.length; r++) { var a = i[r]; if (a !== n[r]) return !1; if (e[a] !== t[a]) return !1 } return !0 }(this.currentMediaInfo_, t = t || {}) || (this.appendInitSegment_ = { audio: !0, video: !0 }, this.startingMediaInfo_ = t, this.currentMediaInfo_ = t, this.logger_( "trackinfo update", t), this.trigger("trackinfo")), this.checkForAbort_(e .requestId) || (this.pendingSegment_.trackInfo = t, this.hasEnoughInfoToAppend_() && this.processCallQueue_())) }, t.handleTimingInfo_ = function (e, t, i, n) { var r; this.earlyAbortWhenNeeded_(e.stats), this.checkForAbort_(e.requestId) || ((r = this .pendingSegment_)[e = al(t)] = r[e] || {}, r[e][i] = n, this.logger_( "timinginfo: " + t + " - " + i + " - " + n), this.hasEnoughInfoToAppend_() && this .processCallQueue_()) }, t.handleCaptions_ = function (e, t) { var g, y, v = this; this.earlyAbortWhenNeeded_(e.stats), this.checkForAbort_(e.requestId) || (0 !== t.length ? this .pendingSegment_.hasAppendedData_ ? (g = null === this.sourceUpdater_ .videoTimestampOffset() ? this.sourceUpdater_.audioTimestampOffset() : this .sourceUpdater_.videoTimestampOffset(), y = {}, t.forEach(function (e) { y[e.stream] = y[e.stream] || { startTime: 1 / 0, captions: [], endTime: 0 }; var t = y[e.stream]; t.startTime = Math.min(t.startTime, e.startTime + g), t.endTime = Math.max(t .endTime, e.endTime + g), t.captions.push(e) }), Object.keys(y).forEach(function (e) { var t, i, n, r, a, s, o, u, l, c, d = y[e], h = d.startTime, p = d.endTime, f = d.captions, m = v.inbandTextTracks_; v.logger_("adding cues from " + h + " -> " + p + " for " + e), t = m, i = v .vhs_.tech_, t[n = e] || (i.trigger({ type: "usage", name: "vhs-608" }), i.trigger({ type: "usage", name: "hls-608" }), /^cc708_/.test(r = n) && (r = "SERVICE" + n.split("_")[1]), (o = i.textTracks().getTrackById(r)) ? t[n] = o : (s = a = n, d = !1, (o = (i.options_.vhs && i.options_.vhs.captionServices || {})[ r]) && (a = o.label, s = o.language, d = o.default), t[n] = i.addRemoteTextTrack({ kind: "captions", id: r, default: d, label: a, language: s }, !1).track)), il(h, p, m[e]), l = (f = { captionArray: f, inbandTextTracks: m, timestampOffset: g }).inbandTextTracks, m = f.captionArray, c = f.timestampOffset, m && ( u = window.WebKitDataCue || window.VTTCue, m.forEach(function (e) { var t = e.stream; l[t].addCue(new u(e.startTime + c, e.endTime + c, e.text)) })) }), this.transmuxer_ && this.transmuxer_.postMessage({ action: "clearParsedMp4Captions" })) : this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, e, t)) : this .logger_("SegmentLoader received no captions from a caption event")) }, t.handleId3_ = function (e, t, i) { var n, r, a, s; this.earlyAbortWhenNeeded_(e.stats), this.checkForAbort_(e.requestId) || (this.pendingSegment_ .hasAppendedData_ ? (n = null === this.sourceUpdater_.videoTimestampOffset() ? this .sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(), r = this.inbandTextTracks_, a = i, s = this.vhs_.tech_, r.metadataTrack_ || (r .metadataTrack_ = s.addRemoteTextTrack({ kind: "metadata", label: "Timed Metadata" }, !1).track, r.metadataTrack_.inBandMetadataTrackDispatchType = a), tl({ inbandTextTracks: this.inbandTextTracks_, metadataArray: t, timestampOffset: n, videoDuration: this.duration_() })) : this.metadataQueue_.id3.push(this.handleId3_.bind(this, e, t, i))) }, t.processMetadataQueue_ = function () { this.metadataQueue_.id3.forEach(function (e) { return e() }), this.metadataQueue_.caption.forEach(function (e) { return e() }), this.metadataQueue_.id3 = [], this.metadataQueue_.caption = [] }, t.processCallQueue_ = function () { var e = this.callQueue_; this.callQueue_ = [], e.forEach(function (e) { return e() }) }, t.processLoadQueue_ = function () { var e = this.loadQueue_; this.loadQueue_ = [], e.forEach(function (e) { return e() }) }, t.hasEnoughInfoToLoad_ = function () { if ("audio" !== this.loaderType_) return !0; var e = this.pendingSegment_; return !!e && (!this.getCurrentMediaInfo_() || !sl({ timelineChangeController: this.timelineChangeController_, currentTimeline: this.currentTimeline_, segmentTimeline: e.timeline, loaderType: this.loaderType_, audioDisabled: this.audioDisabled_ })) }, t.getCurrentMediaInfo_ = function (e) { return (e = void 0 === e ? this.pendingSegment_ : e) && e.trackInfo || this.currentMediaInfo_ }, t.getMediaInfo_ = function (e) { return void 0 === e && (e = this.pendingSegment_), this.getCurrentMediaInfo_(e) || this .startingMediaInfo_ }, t.hasEnoughInfoToAppend_ = function () { if (!this.sourceUpdater_.ready()) return !1; if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) return !1; var e = this.pendingSegment_, t = this.getCurrentMediaInfo_(); if (!e || !t) return !1; var i = t.hasAudio, n = t.hasVideo, t = t.isMuxed; return !(n && !e.videoTimingInfo) && (!(i && !this.audioDisabled_ && !t && !e .audioTimingInfo) && !sl({ timelineChangeController: this.timelineChangeController_, currentTimeline: this.currentTimeline_, segmentTimeline: e.timeline, loaderType: this.loaderType_, audioDisabled: this.audioDisabled_ })) }, t.handleData_ = function (e, t) { if (this.earlyAbortWhenNeeded_(e.stats), !this.checkForAbort_(e.requestId)) if (!this.callQueue_.length && this.hasEnoughInfoToAppend_()) { var i, n = this.pendingSegment_; if (this.setTimeMapping_(n.timeline), this.updateMediaSecondsLoaded_(n.part || n .segment), "closed" !== this.mediaSource_.readyState) { if (e.map && (e.map = this.initSegmentForMap(e.map, !0), n.segment.map = e.map), e .key && this.segmentKey(e.key, !0), n.isFmp4 = e.isFmp4, n.timingInfo = n .timingInfo || {}, n.isFmp4 ? (this.trigger("fmp4"), n.timingInfo.start = n[al(t .type)].start) : (i = this.getCurrentMediaInfo_(), (i = "main" === this .loaderType_ && i && i.hasVideo) && (r = n.videoTimingInfo.start), n .timingInfo.start = this.trueSegmentStart_({ currentStart: n.timingInfo.start, playlist: n.playlist, mediaIndex: n.mediaIndex, currentVideoTimestampOffset: this.sourceUpdater_ .videoTimestampOffset(), useVideoTimingInfo: i, firstVideoFrameTimeForData: r, videoTimingInfo: n.videoTimingInfo, audioTimingInfo: n.audioTimingInfo })), this.updateAppendInitSegmentStatus(n, t.type), this .updateSourceBufferTimestampOffset_(n), n.isSyncRequest) { this.updateTimingInfoEnd_(n), this.syncController_.saveSegmentTimingInfo({ segmentInfo: n, shouldSaveTimelineMapping: "main" === this.loaderType_ }); var r = this.chooseNextRequest_(); if (r.mediaIndex !== n.mediaIndex || r.partIndex !== n.partIndex) return void this.logger_("sync segment was incorrect, not appending"); this.logger_("sync segment was correct, appending") } n.hasAppendedData_ = !0, this.processMetadataQueue_(), this.appendData_(n, t) } } else this.callQueue_.push(this.handleData_.bind(this, e, t)) }, t.updateAppendInitSegmentStatus = function (e, t) { "main" !== this.loaderType_ || "number" != typeof e.timestampOffset || e .changedTimestampOffset || (this.appendInitSegment_ = { audio: !0, video: !0 }), this.playlistOfLastInitSegment_[t] !== e.playlist && (this.appendInitSegment_[t] = !0) }, t.getInitSegmentAndUpdateState_ = function (e) { var t = e.type, i = e.initSegment, n = e.map, r = e.playlist; if (n) { e = bu(n); if (this.activeInitSegmentId_ === e) return null; i = this.initSegmentForMap(n, !0).bytes, this.activeInitSegmentId_ = e } return i && this.appendInitSegment_[t] ? (this.playlistOfLastInitSegment_[t] = r, this .appendInitSegment_[t] = !1, this.activeInitSegmentId_ = null, i) : null }, t.handleQuotaExceededError_ = function (e, t) { var i = this, n = e.segmentInfo, r = e.type, a = e.bytes, s = this.sourceUpdater_.audioBuffered(), o = this.sourceUpdater_.videoBuffered(); 1 < s.length && this.logger_("On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: " + Bo(s) .join(", ")), 1 < o.length && this.logger_( "On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: " + Bo(o).join(", ")); var u = s.length ? s.start(0) : 0, l = s.length ? s.end(s.length - 1) : 0, c = o.length ? o.start(0) : 0, e = o.length ? o.end(o.length - 1) : 0; if (l - u <= 1 && e - c <= 1) return this.logger_( "On QUOTA_EXCEEDED_ERR, single segment too large to append to buffer, triggering an error. Appended byte length: " + a.byteLength + ", audio buffer: " + Bo(s).join(", ") + ", video buffer: " + Bo(o) .join(", ") + ", "), this.error({ message: "Quota exceeded error with append of a single segment of content", excludeUntil: 1 / 0 }), void this.trigger("error"); this.waitingOnRemove_ = !0, this.callQueue_.push(this.appendToSourceBuffer_.bind(this, { segmentInfo: n, type: r, bytes: a })); a = this.currentTime_() - 1; this.logger_("On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to " + a), this.remove(0, a, function () { i.logger_("On QUOTA_EXCEEDED_ERR, retrying append in 1s"), i.waitingOnRemove_ = !1, i.quotaExceededErrorRetryTimeout_ = window.setTimeout(function () { i.logger_("On QUOTA_EXCEEDED_ERR, re-processing call queue"), i .quotaExceededErrorRetryTimeout_ = null, i.processCallQueue_() }, 1e3) }, !0) }, t.handleAppendError_ = function (e, t) { var i = e.segmentInfo, n = e.type, e = e.bytes; t && (22 !== t.code ? (this.logger_("Received non QUOTA_EXCEEDED_ERR on append", t), this.error( n + " append of " + e.length + "b failed for segment #" + i.mediaIndex + " in playlist " + i.playlist.id), this.trigger("appenderror")) : this .handleQuotaExceededError_({ segmentInfo: i, type: n, bytes: e })) }, t.appendToSourceBuffer_ = function (e) { var t, i, n = e.segmentInfo, r = e.type, a = e.initSegment, s = e.data, o = e.bytes; o || (e = [s], s = s.byteLength, a && (e.unshift(a), s += a.byteLength), i = 0, (e = { bytes: s, segments: e }).bytes && (t = new Uint8Array(e.bytes), e.segments.forEach(function (e) { t.set(e, i), i += e.byteLength })), o = t), this.sourceUpdater_.appendBuffer({ segmentInfo: n, type: r, bytes: o }, this.handleAppendError_.bind(this, { segmentInfo: n, type: r, bytes: o })) }, t.handleSegmentTimingInfo_ = function (e, t, i) { this.pendingSegment_ && t === this.pendingSegment_.requestId && ((t = this.pendingSegment_ .segment)[e = e + "TimingInfo"] || (t[e] = {}), t[e].transmuxerPrependedSeconds = i .prependedContentDuration || 0, t[e].transmuxedPresentationStart = i.start.presentation, t[e].transmuxedDecodeStart = i.start.decode, t[e].transmuxedPresentationEnd = i.end .presentation, t[e].transmuxedDecodeEnd = i.end.decode, t[e].baseMediaDecodeTime = i .baseMediaDecodeTime) }, t.appendData_ = function (e, t) { var i = t.type, n = t.data; n && n.byteLength && ("audio" === i && this.audioDisabled_ || (t = this .getInitSegmentAndUpdateState_({ type: i, initSegment: t.initSegment, playlist: e.playlist, map: e.isFmp4 ? e.segment.map : null }), this.appendToSourceBuffer_({ segmentInfo: e, type: i, initSegment: t, data: n }))) }, t.loadSegment_ = function (t) { var i = this; this.state = "WAITING", this.pendingSegment_ = t, this.trimBackBuffer_(t), "number" == typeof t .timestampOffset && this.transmuxer_ && this.transmuxer_.postMessage({ action: "clearAllMp4Captions" }), this.hasEnoughInfoToLoad_() ? this.updateTransmuxerAndRequestSegment_(t) : this .loadQueue_.push(function () { var e = g({}, t, { forceTimestampOffset: !0 }); g(t, i.generateSegmentInfo_(e)), i.isPendingTimestampOffset_ = !1, i .updateTransmuxerAndRequestSegment_(t) }) }, t.updateTransmuxerAndRequestSegment_ = function (n) { var r = this; this.shouldUpdateTransmuxerTimestampOffset_(n.timestampOffset) && (this.gopBuffer_.length = 0, n .gopsToAlignWith = [], this.timeMapping_ = 0, this.transmuxer_.postMessage({ action: "reset" }), this.transmuxer_.postMessage({ action: "setTimestampOffset", timestampOffset: n.timestampOffset })); var e = this.createSimplifiedSegmentObj_(n), t = this.isEndOfStream_(n.mediaIndex, n.playlist, n.partIndex), i = null !== this.mediaIndex, a = n.timeline !== this.currentTimeline_ && 0 < n.timeline, a = t || i && a; this.logger_("Requesting " + rl(n)), e.map && !e.map.bytes && (this.logger_( "going to request init segment."), this.appendInitSegment_ = { video: !0, audio: !0 }), n.abortRequests = Gu({ xhr: this.vhs_.xhr, xhrOptions: this.xhrOptions_, decryptionWorker: this.decrypter_, segment: e, abortFn: this.handleAbort_.bind(this, n), progressFn: this.handleProgress_.bind(this), trackInfoFn: this.handleTrackInfo_.bind(this), timingInfoFn: this.handleTimingInfo_.bind(this), videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, "video", n .requestId), audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, "audio", n .requestId), captionsFn: this.handleCaptions_.bind(this), isEndOfTimeline: a, endedTimelineFn: function () { r.logger_("received endedtimeline callback") }, id3Fn: this.handleId3_.bind(this), dataFn: this.handleData_.bind(this), doneFn: this.segmentRequestFinished_.bind(this), onTransmuxerLog: function (e) { var t = e.message, i = e.level, e = e.stream; r.logger_(rl(n) + " logged from transmuxer stream " + e + " as a " + i + ": " + t) } }) }, t.trimBackBuffer_ = function (e) { var t, i, n, r, r = (t = this.seekable_(), i = this.currentTime_(), n = this.playlist_ .targetDuration || 10, r = i - Sl.BACK_BUFFER_LENGTH, t.length && (r = Math.max(r, t .start(0))), Math.min(i - n, r)); 0 < r && this.remove(0, r) }, t.createSimplifiedSegmentObj_ = function (e) { var t = e.segment, i = e.part, n = { resolvedUri: (i || t).resolvedUri, byterange: (i || t).byterange, requestId: e.requestId, transmuxer: e.transmuxer, audioAppendStart: e.audioAppendStart, gopsToAlignWith: e.gopsToAlignWith, part: e.part }, i = e.playlist.segments[e.mediaIndex - 1]; return i && i.timeline === t.timeline && (i.videoTimingInfo ? n.baseStartTime = i .videoTimingInfo.transmuxedDecodeEnd : i.audioTimingInfo && (n.baseStartTime = i .audioTimingInfo.transmuxedDecodeEnd)), t.key && (e = t.key.iv || new Uint32Array([ 0, 0, 0, e.mediaIndex + e.playlist.mediaSequence ]), n.key = this.segmentKey(t.key), n.key.iv = e), t.map && (n.map = this.initSegmentForMap( t.map)), n }, t.saveTransferStats_ = function (e) { this.mediaRequests += 1, e && (this.mediaBytesTransferred += e.bytesReceived, this .mediaTransferDuration += e.roundTripTime) }, t.saveBandwidthRelatedStats_ = function (e, t) { this.pendingSegment_.byteLength = t.bytesReceived, e < 1 / 60 ? this.logger_( "Ignoring segment's bandwidth because its duration of " + e + " is less than the min to record " + 1 / 60) : (this.bandwidth = t.bandwidth, this .roundTrip = t.roundTripTime) }, t.handleTimeout_ = function () { this.mediaRequestsTimedout += 1, this.bandwidth = 1, this.roundTrip = NaN, this.trigger( "bandwidthupdate") }, t.segmentRequestFinished_ = function (e, t, i) { if (this.callQueue_.length) this.callQueue_.push(this.segmentRequestFinished_.bind(this, e, t, i)); else if (this.saveTransferStats_(t.stats), this.pendingSegment_ && t.requestId === this .pendingSegment_.requestId) { if (e) return this.pendingSegment_ = null, this.state = "READY", e.code === Al ? void 0 : ( this.pause(), e.code === xl ? void this.handleTimeout_() : (this .mediaRequestsErrored += 1, this.error(e), void this.trigger("error"))); e = this.pendingSegment_; this.saveBandwidthRelatedStats_(e.duration, t.stats), e.endOfAllRequests = t .endOfAllRequests, i.gopInfo && (this.gopBuffer_ = function (e, t, i) { if (!t.length) return e; if (i) return t.slice(); for (var n = t[0].pts, r = 0; r < e.length && !(e[r].pts >= n); r++) ; return e.slice(0, r).concat(t) }(this.gopBuffer_, i.gopInfo, this.safeAppend_)), this.state = "APPENDING", this .trigger("appending"), this.waitForAppendsToComplete_(e) } }, t.setTimeMapping_ = function (e) { e = this.syncController_.mappingForTimeline(e); null !== e && (this.timeMapping_ = e) }, t.updateMediaSecondsLoaded_ = function (e) { "number" == typeof e.start && "number" == typeof e.end ? this.mediaSecondsLoaded += e.end - e .start : this.mediaSecondsLoaded += e.duration }, t.shouldUpdateTransmuxerTimestampOffset_ = function (e) { return null !== e && ("main" === this.loaderType_ && e !== this.sourceUpdater_ .videoTimestampOffset() || !this.audioDisabled_ && e !== this.sourceUpdater_ .audioTimestampOffset()) }, t.trueSegmentStart_ = function (e) { var t = e.currentStart, i = e.playlist, n = e.mediaIndex, r = e.firstVideoFrameTimeForData, a = e.currentVideoTimestampOffset, s = e.useVideoTimingInfo, o = e.videoTimingInfo, e = e.audioTimingInfo; if ("undefined" != typeof t) return t; if (!s) return e.start; i = i.segments[n - 1]; return 0 !== n && i && "undefined" != typeof i.start && i.end === r + a ? o.start : r }, t.waitForAppendsToComplete_ = function (e) { var t = this.getCurrentMediaInfo_(e); if (!t) return this.error({ message: "No starting media returned, likely due to an unsupported media format.", blacklistDuration: 1 / 0 }), void this.trigger("error"); var i = t.hasAudio, n = t.hasVideo, t = t.isMuxed, n = "main" === this.loaderType_ && n, t = !this.audioDisabled_ && i && !t; if (e.waitingOnAppends = 0, !e.hasAppendedData_) return e.timingInfo || "number" != typeof e .timestampOffset || (this.isPendingTimestampOffset_ = !0), e.timingInfo = { start: 0 }, e.waitingOnAppends++, this.isPendingTimestampOffset_ || (this .updateSourceBufferTimestampOffset_(e), this.processMetadataQueue_()), void this .checkAppendsDone_(e); n && e.waitingOnAppends++, t && e.waitingOnAppends++, n && this.sourceUpdater_ .videoQueueCallback(this.checkAppendsDone_.bind(this, e)), t && this.sourceUpdater_ .audioQueueCallback(this.checkAppendsDone_.bind(this, e)) }, t.checkAppendsDone_ = function (e) { this.checkForAbort_(e.requestId) || (e.waitingOnAppends--, 0 === e.waitingOnAppends && this .handleAppendsDone_()) }, t.checkForIllegalMediaSwitch = function (e) { var t, i, e = (t = this.loaderType_, i = this.getCurrentMediaInfo_(), e = e, "main" === t && i && e ? e.hasAudio || e.hasVideo ? i.hasVideo && !e.hasVideo ? "Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest." : !i.hasVideo && e.hasVideo ? "Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest." : null : "Neither audio nor video found in segment." : null); return !!e && (this.error({ message: e, blacklistDuration: 1 / 0 }), this.trigger("error"), !0) }, t.updateSourceBufferTimestampOffset_ = function (e) { var t; null === e.timestampOffset || "number" != typeof e.timingInfo.start || e .changedTimestampOffset || "main" !== this.loaderType_ || (t = !1, e.timestampOffset -= this .getSegmentStartTimeForTimestampOffsetCalculation_({ videoTimingInfo: e.segment.videoTimingInfo, audioTimingInfo: e.segment.audioTimingInfo, timingInfo: e.timingInfo }), e.changedTimestampOffset = !0, e.timestampOffset !== this.sourceUpdater_ .videoTimestampOffset() && (this.sourceUpdater_.videoTimestampOffset(e.timestampOffset), t = !0), e.timestampOffset !== this.sourceUpdater_.audioTimestampOffset() && (this .sourceUpdater_.audioTimestampOffset(e.timestampOffset), t = !0), t && this.trigger( "timestampoffset")) }, t.getSegmentStartTimeForTimestampOffsetCalculation_ = function (e) { var t = e.videoTimingInfo, i = e.audioTimingInfo, e = e.timingInfo; return this.useDtsForTimestampOffset_ ? t && "number" == typeof t.transmuxedDecodeStart ? t .transmuxedDecodeStart : i && "number" == typeof i.transmuxedDecodeStart ? i .transmuxedDecodeStart : e.start : e.start }, t.updateTimingInfoEnd_ = function (e) { e.timingInfo = e.timingInfo || {}; var t = this.getMediaInfo_(), t = "main" === this.loaderType_ && t && t.hasVideo && e.videoTimingInfo ? e .videoTimingInfo : e.audioTimingInfo; t && (e.timingInfo.end = "number" == typeof t.end ? t.end : t.start + e.duration) }, t.handleAppendsDone_ = function () { if (this.pendingSegment_ && this.trigger("appendsdone"), !this.pendingSegment_) return this .state = "READY", void (this.paused() || this.monitorBuffer_()); var e = this.pendingSegment_; this.updateTimingInfoEnd_(e), this.shouldSaveSegmentTimingInfo_ && this.syncController_ .saveSegmentTimingInfo({ segmentInfo: e, shouldSaveTimelineMapping: "main" === this.loaderType_ }); var t = ul(e, this.sourceType_); if (t && ("warn" === t.severity ? tr.log.warn(t.message) : this.logger_(t.message)), this .recordThroughput_(e), this.pendingSegment_ = null, this.state = "READY", !e .isSyncRequest || (this.trigger("syncinfoupdate"), e.hasAppendedData_)) { this.logger_("Appended " + rl(e)), this.addSegmentMetadataCue_(e), this.fetchAtBuffer_ = !0, this.currentTimeline_ !== e.timeline && (this.timelineChangeController_ .lastTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: e.timeline }), "main" !== this.loaderType_ || this.audioDisabled_ || this .timelineChangeController_.lastTimelineChange({ type: "audio", from: this.currentTimeline_, to: e.timeline })), this.currentTimeline_ = e.timeline, this.trigger("syncinfoupdate"); var i = e.segment, t = e.part, i = i.end && this.currentTime_() - i.end > 3 * e.playlist.targetDuration, t = t && t.end && this.currentTime_() - t.end > 3 * e.playlist.partTargetDuration; if (i || t) return this.logger_("bad " + (i ? "segment" : "part") + " " + rl(e)), void this .resetEverything(); null !== this.mediaIndex && this.trigger("bandwidthupdate"), this.trigger("progress"), this .mediaIndex = e.mediaIndex, this.partIndex = e.partIndex, this.isEndOfStream_(e .mediaIndex, e.playlist, e.partIndex) && this.endOfStream(), this.trigger( "appended"), e.hasAppendedData_ && this.mediaAppends++, this.paused() || this .monitorBuffer_() } else this.logger_("Throwing away un-appended sync request " + rl(e)) }, t.recordThroughput_ = function (e) { var t, i; e.duration < 1 / 60 ? this.logger_("Ignoring segment's throughput because its duration of " + e .duration + " is less than the min to record " + 1 / 60) : (t = this.throughput.rate, i = Date.now() - e.endOfAllRequests + 1, i = Math.floor(e.byteLength / i * 8 * 1e3), this.throughput.rate += (i - t) / ++this.throughput.count) }, t.addSegmentMetadataCue_ = function (e) { var t, i, n, r; this.segmentMetadataTrack_ && (i = (t = e.segment).start, r = t.end, nl(i) && nl(r) && (il(i, r, this.segmentMetadataTrack_), n = window.WebKitDataCue || window.VTTCue, e = { custom: t.custom, dateTimeObject: t.dateTimeObject, dateTimeString: t.dateTimeString, bandwidth: e.playlist.attributes.BANDWIDTH, resolution: e.playlist.attributes.RESOLUTION, codecs: e.playlist.attributes.CODECS, byteLength: e.byteLength, uri: e.uri, timeline: e.timeline, playlist: e.playlist.id, start: i, end: r }, (r = new n(i, r, JSON.stringify(e))).value = e, this.segmentMetadataTrack_ .addCue(r))) }, e }(tr.EventTarget); function Ol() { } function Ml(e) { return "string" != typeof e ? e : e.replace(/./, function (e) { return e.toUpperCase() }) } function Rl(e, t) { var i = t[e + "Buffer"]; return i && i.updating || t.queuePending[e] } function Nl(e, t) { if (0 !== t.queue.length) { var i = 0, n = t.queue[i]; if ("mediaSource" !== n.type) { if ("mediaSource" !== e && t.ready() && "closed" !== t.mediaSource.readyState && !Rl(e, t)) { if (n.type !== e) { if (null === (i = function (e, t) { for (var i = 0; i < t.length; i++) { var n = t[i]; if ("mediaSource" === n.type) return null; if (n.type === e) return i } return null }(e, t.queue))) return; n = t.queue[i] } t.queue.splice(i, 1), (t.queuePending[e] = n).action(e, t), n.doneFn || (t.queuePending[e] = null, Nl(e, t)) } } else t.updating() || "closed" === t.mediaSource.readyState || (t.queue.shift(), n.action(t), n .doneFn && n.doneFn(), Nl("audio", t), Nl("video", t)) } } function Ul(e, t) { var i = t[e + "Buffer"], n = Ml(e); i && (i.removeEventListener("updateend", t["on" + n + "UpdateEnd_"]), i.removeEventListener("error", t[ "on" + n + "Error_"]), t.codecs[e] = null, t[e + "Buffer"] = null) } function Bl(e, t) { return e && t && -1 !== Array.prototype.indexOf.call(e.sourceBuffers, t) } function Fl(e) { var t = e.type, i = e.sourceUpdater, n = e.action, r = e.doneFn, e = e.name; i.queue.push({ type: t, action: n, doneFn: r, name: e }), Nl(t, i) } function jl(i, n) { return function (e) { var t; n.queuePending[i] && (t = n.queuePending[i].doneFn, n.queuePending[i] = null, t && t(n[i + "Error_"])), Nl(i, n) } } function Hl(e) { return decodeURIComponent(escape(String.fromCharCode.apply(null, e))) } function ql(e, t) { e.abort(), e.pause(), t && t.activePlaylistLoader && (t.activePlaylistLoader.pause(), t .activePlaylistLoader = null) } function Vl(e, t) { (t.activePlaylistLoader = e).load() } function Wl(e, t) { for (var i = 0; i < e.length; i++) { if (tu(t, e[i])) return !0; if (e[i].playlists && Wl(e[i].playlists, t)) return !0 } return !1 } function Gl(a) { ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach(function (e) { mc[e](e, a) }); var e, s = a.mediaTypes, t = a.masterPlaylistLoader, i = a.tech, n = a.vhs, r = a.segmentLoaders, o = r.AUDIO, u = r.main; function l() { s.AUDIO.onTrackChanged(), i.trigger({ type: "usage", name: "vhs-audio-change" }), i.trigger({ type: "usage", name: "hls-audio-change" }) } for (e in ["AUDIO", "SUBTITLES"].forEach(function (e) { var u, l, o, c, t, i, d, h, n, r; s[e].activeGroup = (u = e, l = a, function (t) { var e = l.masterPlaylistLoader, i = l.mediaTypes[u].groups, n = e.media(); if (!n) return null; var r = null; n.attributes[u] && (r = i[n.attributes[u]]); var a = Object.keys(i); if (!r) if ("AUDIO" === u && 1 < a.length && nu(l.master)) for (var s = 0; s < a.length; s++) { var o = i[a[s]]; if (Wl(o, n)) { r = o; break } } else i.main ? r = i.main : 1 === a.length && (r = i[a[0]]); return "undefined" == typeof t ? r : null !== t && r && r.filter(function (e) { return e.id === t.id })[0] || null }), s[e].activeTrack = gc[e](e, a), s[e].onGroupChanged = (o = e, c = a, function () { var e = c.segmentLoaders, t = e[o], i = e.main, n = c.mediaTypes[o], r = n.activeTrack(), a = n.getActiveGroup(), s = n.activePlaylistLoader, e = n.lastGroup_; a && e && a.id === e.id || (n.lastGroup_ = a, n.lastTrack_ = r, ql(t, n), a && !a .isMasterPlaylist && (a.playlistLoader ? (t.resyncLoader(), Vl(a .playlistLoader, n)) : s && i.resetEverything())) }), s[e].onGroupChanging = (t = e, i = a, function () { var e = i.segmentLoaders[t]; i.mediaTypes[t].lastGroup_ = null, e.abort(), e.pause() }), s[e].onTrackChanged = (d = e, h = a, function () { var e = h.masterPlaylistLoader, t = h.segmentLoaders, i = t[d], n = t.main, r = h.mediaTypes[d], a = r.activeTrack(), s = r.getActiveGroup(), o = r.activePlaylistLoader, u = r.lastTrack_; if ((!u || !a || u.id !== a.id) && (r.lastGroup_ = s, r.lastTrack_ = a, ql(i, r), s)) { if (s.isMasterPlaylist) { if (!a || !u || a.id === u.id) return; var l = h.vhs.masterPlaylistController_, t = l.selectPlaylist(); return l.media() === t ? void 0 : (r.logger_( "track change. Switching master audio from " + u.id + " to " + a .id), e.pause(), n.resetEverything(), void l.fastQualityChange_( t)) } if ("AUDIO" === d) { if (!s.playlistLoader) return n.setAudio(!0), void n.resetEverything(); i.setAudio(!0), n.setAudio(!1) } o !== s.playlistLoader && (i.track && i.track(a), i.resetEverything()), Vl(s .playlistLoader, r) } }), s[e].getActiveGroup = (n = e, r = a.mediaTypes, function () { var e = r[n].activeTrack(); return e ? r[n].activeGroup(e) : null }) }), (r = s.AUDIO.activeGroup()) && (r = (r.filter(function (e) { return e.default })[0] || r[0]).id, s.AUDIO.tracks[r].enabled = !0, s.AUDIO.onGroupChanged(), s.AUDIO .onTrackChanged(), s.AUDIO.getActiveGroup().playlistLoader ? (u.setAudio(!1), o.setAudio(!0)) : u .setAudio(!0)), t.on("mediachange", function () { ["AUDIO", "SUBTITLES"].forEach(function (e) { return s[e].onGroupChanged() }) }), t.on("mediachanging", function () { ["AUDIO", "SUBTITLES"].forEach(function (e) { return s[e].onGroupChanging() }) }), i.audioTracks().addEventListener("change", l), i.remoteTextTracks().addEventListener("change", s .SUBTITLES.onTrackChanged), n.on("dispose", function () { i.audioTracks().removeEventListener("change", l), i.remoteTextTracks().removeEventListener( "change", s.SUBTITLES.onTrackChanged) }), i.clearTracks("audio"), s.AUDIO.tracks) i.audioTracks().addTrack(s.AUDIO.tracks[e]) } function zl(e, t, i) { var n, r, a, s, o = e.masterPlaylistController_, u = o[(e.options_.smoothQualityChange ? "smooth" : "fast") + "QualityChange_"].bind(o); t.attributes && (n = t.attributes.RESOLUTION, this.width = n && n.width, this.height = n && n.height, this .bandwidth = t.attributes.BANDWIDTH), this.codecs = Yu(o.master(), t), this.playlist = t, this.id = i, this.enabled = (r = e.playlists, a = t.id, s = u, function (e) { var t = r.master.playlists[a], i = $o(t), n = Jo(t); return "undefined" == typeof e ? n : (e ? delete t.disabled : t.disabled = !0, e === n || i || ( s(), e ? r.trigger("renditionenabled") : r.trigger("renditiondisabled")), e) }) } function Xl(t, e) { var i = 0, n = 0, r = tr.mergeOptions(Tc, e); function a() { n && t.currentTime(n) } function s(e) { null != e && (n = t.duration() !== 1 / 0 && t.currentTime() || 0, t.one("loadedmetadata", a), t.src(e), t.trigger({ type: "usage", name: "vhs-error-reload" }), t.trigger({ type: "usage", name: "hls-error-reload" }), t.play()) } function o() { return Date.now() - i < 1e3 * r.errorInterval ? (t.trigger({ type: "usage", name: "vhs-error-reload-canceled" }), void t.trigger({ type: "usage", name: "hls-error-reload-canceled" })) : r.getSource && "function" == typeof r.getSource ? (i = Date.now(), r.getSource.call(t, s)) : void tr.log.error("ERROR: reloadSourceOnError - The option getSource must be a function!") } function u() { t.off("loadedmetadata", a), t.off("error", o), t.off("dispose", u) } t.ready(function () { t.trigger({ type: "usage", name: "vhs-error-reload-initialized" }), t.trigger({ type: "usage", name: "hls-error-reload-initialized" }) }), t.on("error", o), t.on("dispose", u), t.reloadSourceOnError = function (e) { u(), Xl(t, e) } } var Kl, Yl = ["video", "audio"], Ql = function (n, r, a) { return function (t, i) { var e = i[t + "Buffer"]; if (Bl(i.mediaSource, e)) { i.logger_("Appending segment " + r.mediaIndex + "'s " + n.length + " bytes to " + t + "Buffer"); try { e.appendBuffer(n) } catch (e) { i.logger_("Error with code " + e.code + " " + (22 === e.code ? "(QUOTA_EXCEEDED_ERR) " : "") + "when appending segment " + r.mediaIndex + " to " + t + "Buffer"), i .queuePending[t] = null, a(e) } } } }, $l = function (n, r) { return function (t, i) { var e = i[t + "Buffer"]; if (Bl(i.mediaSource, e)) { i.logger_("Removing " + n + " to " + r + " from " + t + "Buffer"); try { e.remove(n, r) } catch (e) { i.logger_("Remove " + n + " to " + r + " from " + t + "Buffer failed") } } } }, Jl = function (n) { return function (e, t) { var i = t[e + "Buffer"]; Bl(t.mediaSource, i) && (t.logger_("Setting " + e + "timestampOffset to " + n), i .timestampOffset = n) } }, Zl = function (i) { return function (e, t) { i() } }, ec = function (t) { return function (e) { if ("open" === e.mediaSource.readyState) { e.logger_("Calling mediaSource endOfStream(" + (t || "") + ")"); try { e.mediaSource.endOfStream(t) } catch (e) { tr.log.warn("Failed to call media source endOfStream", e) } } } }, tc = function (t) { return function (e) { e.logger_("Setting mediaSource duration to " + t); try { e.mediaSource.duration = t } catch (e) { tr.log.warn("Failed to set media source duration", e) } } }, ic = function () { return function (t, e) { if ("open" === e.mediaSource.readyState) { var i = e[t + "Buffer"]; if (Bl(e.mediaSource, i)) { e.logger_("calling abort on " + t + "Buffer"); try { i.abort() } catch (e) { tr.log.warn("Failed to abort on " + t + "Buffer", e) } } } } }, nc = function (n, r) { return function (e) { var t = Ml(n), i = mr(r); e.logger_("Adding " + n + "Buffer with codec " + r + " to mediaSource"); i = e.mediaSource.addSourceBuffer(i); i.addEventListener("updateend", e["on" + t + "UpdateEnd_"]), i.addEventListener("error", e[ "on" + t + "Error_"]), e.codecs[n] = r, e[n + "Buffer"] = i } }, rc = function (i) { return function (e) { var t = e[i + "Buffer"]; if (Ul(i, e), Bl(e.mediaSource, t)) { e.logger_("Removing " + i + "Buffer with codec " + e.codecs[i] + " from mediaSource"); try { e.mediaSource.removeSourceBuffer(t) } catch (e) { tr.log.warn("Failed to removeSourceBuffer " + i + "Buffer", e) } } } }, ac = function (r) { return function (e, t) { var i = t[e + "Buffer"], n = mr(r); Bl(t.mediaSource, i) && t.codecs[e] !== r && (t.logger_("changing " + e + "Buffer codec from " + t.codecs[e] + " to " + r), i.changeType(n), t.codecs[e] = r) } }, sc = function (i) { function e(e) { var t = i.call(this) || this; return t.mediaSource = e, t.sourceopenListener_ = function () { return Nl("mediaSource", ft(t)) }, t.mediaSource.addEventListener("sourceopen", t.sourceopenListener_), t.logger_ = Oo( "SourceUpdater"), t.audioTimestampOffset_ = 0, t.videoTimestampOffset_ = 0, t.queue = [], t .queuePending = { audio: null, video: null }, t.delayedAudioAppendQueue_ = [], t.videoAppendQueued_ = !1, t.codecs = {}, t .onVideoUpdateEnd_ = jl("video", ft(t)), t.onAudioUpdateEnd_ = jl("audio", ft(t)), t .onVideoError_ = function (e) { t.videoError_ = e }, t.onAudioError_ = function (e) { t.audioError_ = e }, t.createdSourceBuffers_ = !1, t.initializedEme_ = !1, t.triggeredReady_ = !1, t } mt(e, i); var t = e.prototype; return t.initializedEme = function () { this.initializedEme_ = !0, this.triggerReady() }, t.hasCreatedSourceBuffers = function () { return this.createdSourceBuffers_ }, t.hasInitializedAnyEme = function () { return this.initializedEme_ }, t.ready = function () { return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme() }, t.createSourceBuffers = function (e) { this.hasCreatedSourceBuffers() || (this.addOrChangeSourceBuffers(e), this .createdSourceBuffers_ = !0, this.trigger("createdsourcebuffers"), this.triggerReady()) }, t.triggerReady = function () { this.ready() && !this.triggeredReady_ && (this.triggeredReady_ = !0, this.trigger("ready")) }, t.addSourceBuffer = function (e, t) { Fl({ type: "mediaSource", sourceUpdater: this, action: nc(e, t), name: "addSourceBuffer" }) }, t.abort = function (e) { Fl({ type: e, sourceUpdater: this, action: ic(e), name: "abort" }) }, t.removeSourceBuffer = function (e) { this.canRemoveSourceBuffer() ? Fl({ type: "mediaSource", sourceUpdater: this, action: rc(e), name: "removeSourceBuffer" }) : tr.log.error("removeSourceBuffer is not supported!") }, t.canRemoveSourceBuffer = function () { return !tr.browser.IE_VERSION && !tr.browser.IS_FIREFOX && window.MediaSource && window .MediaSource.prototype && "function" == typeof window.MediaSource.prototype .removeSourceBuffer }, e.canChangeType = function () { return window.SourceBuffer && window.SourceBuffer.prototype && "function" == typeof window .SourceBuffer.prototype.changeType }, t.canChangeType = function () { return this.constructor.canChangeType() }, t.changeType = function (e, t) { this.canChangeType() ? Fl({ type: e, sourceUpdater: this, action: ac(t), name: "changeType" }) : tr.log.error("changeType is not supported!") }, t.addOrChangeSourceBuffers = function (i) { var n = this; if (!i || "object" != typeof i || 0 === Object.keys(i).length) throw new Error( "Cannot addOrChangeSourceBuffers to undefined codecs"); Object.keys(i).forEach(function (e) { var t = i[e]; if (!n.hasCreatedSourceBuffers()) return n.addSourceBuffer(e, t); n.canChangeType() && n.changeType(e, t) }) }, t.appendBuffer = function (e, t) { var i = this, n = e.segmentInfo, r = e.type, a = e.bytes; if (this.processedAppend_ = !0, "audio" === r && this.videoBuffer && !this.videoAppendQueued_) return this.delayedAudioAppendQueue_.push([e, t]), void this.logger_( "delayed audio append of " + a.length + " until video append"); Fl({ type: r, sourceUpdater: this, action: Ql(a, n || { mediaIndex: -1 }, t), doneFn: t, name: "appendBuffer" }), "video" === r && (this.videoAppendQueued_ = !0, this.delayedAudioAppendQueue_.length && (r = this.delayedAudioAppendQueue_.slice(), this.logger_("queuing delayed audio " + r .length + " appendBuffers"), this.delayedAudioAppendQueue_.length = 0, r .forEach(function (e) { i.appendBuffer.apply(i, e) }))) }, t.audioBuffered = function () { return Bl(this.mediaSource, this.audioBuffer) && this.audioBuffer.buffered || tr .createTimeRange() }, t.videoBuffered = function () { return Bl(this.mediaSource, this.videoBuffer) && this.videoBuffer.buffered || tr .createTimeRange() }, t.buffered = function () { var e = Bl(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null, t = Bl(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null; return t && !e ? this.audioBuffered() : e && !t ? this.videoBuffered() : function (e, t) { var i = null, n = null, r = 0, a = [], s = []; if (!(e && e.length && t && t.length)) return tr.createTimeRange(); for (var o = e.length; o--;) a.push({ time: e.start(o), type: "start" }), a.push({ time: e.end(o), type: "end" }); for (o = t.length; o--;) a.push({ time: t.start(o), type: "start" }), a.push({ time: t.end(o), type: "end" }); for (a.sort(function (e, t) { return e.time - t.time }), o = 0; o < a.length; o++) "start" === a[o].type ? 2 === ++r && (i = a[o].time) : "end" === a[o].type && 1 === --r && (n = a[o].time), null !== i && null !== n && (s .push([i, n]), n = i = null); return tr.createTimeRanges(s) }(this.audioBuffered(), this.videoBuffered()) }, t.setDuration = function (e, t) { void 0 === t && (t = Ol), Fl({ type: "mediaSource", sourceUpdater: this, action: tc(e), name: "duration", doneFn: t }) }, t.endOfStream = function (e, t) { void 0 === t && (t = Ol), Fl({ type: "mediaSource", sourceUpdater: this, action: ec(e = "string" != typeof (e = void 0 === e ? null : e) ? void 0 : e), name: "endOfStream", doneFn: t }) }, t.removeAudio = function (e, t, i) { void 0 === i && (i = Ol), this.audioBuffered().length && 0 !== this.audioBuffered().end(0) ? Fl({ type: "audio", sourceUpdater: this, action: $l(e, t), doneFn: i, name: "remove" }) : i() }, t.removeVideo = function (e, t, i) { void 0 === i && (i = Ol), this.videoBuffered().length && 0 !== this.videoBuffered().end(0) ? Fl({ type: "video", sourceUpdater: this, action: $l(e, t), doneFn: i, name: "remove" }) : i() }, t.updating = function () { return !(!Rl("audio", this) && !Rl("video", this)) }, t.audioTimestampOffset = function (e) { return "undefined" != typeof e && this.audioBuffer && this.audioTimestampOffset_ !== e && (Fl({ type: "audio", sourceUpdater: this, action: Jl(e), name: "timestampOffset" }), this.audioTimestampOffset_ = e), this.audioTimestampOffset_ }, t.videoTimestampOffset = function (e) { return "undefined" != typeof e && this.videoBuffer && this.videoTimestampOffset !== e && (Fl({ type: "video", sourceUpdater: this, action: Jl(e), name: "timestampOffset" }), this.videoTimestampOffset_ = e), this.videoTimestampOffset_ }, t.audioQueueCallback = function (e) { this.audioBuffer && Fl({ type: "audio", sourceUpdater: this, action: Zl(e), name: "callback" }) }, t.videoQueueCallback = function (e) { this.videoBuffer && Fl({ type: "video", sourceUpdater: this, action: Zl(e), name: "callback" }) }, t.dispose = function () { var t = this; this.trigger("dispose"), Yl.forEach(function (e) { t.abort(e), t.canRemoveSourceBuffer() ? t.removeSourceBuffer(e) : t[e + "QueueCallback"](function () { return Ul(e, t) }) }), this.videoAppendQueued_ = !1, this.delayedAudioAppendQueue_.length = 0, this .sourceopenListener_ && this.mediaSource.removeEventListener("sourceopen", this .sourceopenListener_), this.off() }, e }(tr.EventTarget), oc = new Uint8Array("\n\n".split("").map(function (e) { return e.charCodeAt(0) })), uc = function (i) { function e(e, t) { return (t = i.call(this, e, t = void 0 === t ? {} : t) || this).mediaSource_ = null, t .subtitlesTrack_ = null, t.loaderType_ = "subtitle", t.featuresNativeTextTracks_ = e .featuresNativeTextTracks, t.shouldSaveSegmentTimingInfo_ = !1, t } mt(e, i); var t = e.prototype; return t.createTransmuxer_ = function () { return null }, t.buffered_ = function () { if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues || !this.subtitlesTrack_.cues.length) return tr.createTimeRanges(); var e = this.subtitlesTrack_.cues, t = e[0].startTime, e = e[e.length - 1].startTime; return tr.createTimeRanges([ [t, e] ]) }, t.initSegmentForMap = function (e, t) { if (void 0 === t && (t = !1), !e) return null; var i = bu(e), n = this.initSegments_[i]; return t && !n && e.bytes && (t = oc.byteLength + e.bytes.byteLength, (t = new Uint8Array(t)) .set(e.bytes), t.set(oc, e.bytes.byteLength), this.initSegments_[i] = n = { resolvedUri: e.resolvedUri, byterange: e.byterange, bytes: t }), n || e }, t.couldBeginLoading_ = function () { return this.playlist_ && this.subtitlesTrack_ && !this.paused() }, t.init_ = function () { return this.state = "READY", this.resetEverything(), this.monitorBuffer_() }, t.track = function (e) { return "undefined" == typeof e || (this.subtitlesTrack_ = e, "INIT" === this.state && this .couldBeginLoading_() && this.init_()), this.subtitlesTrack_ }, t.remove = function (e, t) { il(e, t, this.subtitlesTrack_) }, t.fillBuffer_ = function () { var e = this, t = this.chooseNextRequest_(); if (t) { if (null === this.syncController_.timestampOffsetForTimeline(t.timeline)) return this .syncController_.one("timestampoffset", function () { e.state = "READY", e.paused() || e.monitorBuffer_() }), void (this.state = "WAITING_ON_TIMELINE"); this.loadSegment_(t) } }, t.timestampOffsetForSegment_ = function () { return null }, t.chooseNextRequest_ = function () { return this.skipEmptySegments_(i.prototype.chooseNextRequest_.call(this)) }, t.skipEmptySegments_ = function (e) { for (; e && e.segment.empty;) { if (e.mediaIndex + 1 >= e.playlist.segments.length) { e = null; break } e = this.generateSegmentInfo_({ playlist: e.playlist, mediaIndex: e.mediaIndex + 1, startOfSegment: e.startOfSegment + e.duration, isSyncRequest: e.isSyncRequest }) } return e }, t.stopForError = function (e) { this.error(e), this.state = "READY", this.pause(), this.trigger("error") }, t.segmentRequestFinished_ = function (e, t, i) { var n = this; if (this.subtitlesTrack_) { if (this.saveTransferStats_(t.stats), !this.pendingSegment_) return this.state = "READY", void (this.mediaRequestsAborted += 1); if (e) return e.code === xl && this.handleTimeout_(), e.code === Al ? this .mediaRequestsAborted += 1 : this.mediaRequestsErrored += 1, void this.stopForError( e); var r = this.pendingSegment_; this.saveBandwidthRelatedStats_(r.duration, t.stats), this.state = "APPENDING", this .trigger("appending"); var a = r.segment; if (a.map && (a.map.bytes = t.map.bytes), r.bytes = t.bytes, "function" != typeof window .WebVTT && this.subtitlesTrack_ && this.subtitlesTrack_.tech_) { var s = function () { n.subtitlesTrack_.tech_.off("vttjsloaded", o), n.stopForError({ message: "Error loading vtt.js" }) }, o = function () { n.subtitlesTrack_.tech_.off("vttjserror", s), n.segmentRequestFinished_(e, t, i) }; return this.state = "WAITING_ON_VTTJS", this.subtitlesTrack_.tech_.one("vttjsloaded", o), void this.subtitlesTrack_.tech_.one("vttjserror", s) } a.requested = !0; try { this.parseVTTCues_(r) } catch (e) { return void this.stopForError({ message: e.message }) } if (this.updateTimeMapping_(r, this.syncController_.timelines[r.timeline], this.playlist_), r.cues.length ? r.timingInfo = { start: r.cues[0].startTime, end: r.cues[r.cues.length - 1].endTime } : r.timingInfo = { start: r.startOfSegment, end: r.startOfSegment + r.duration }, r.isSyncRequest) return this.trigger("syncinfoupdate"), this.pendingSegment_ = null, void (this.state = "READY"); r.byteLength = r.bytes.byteLength, this.mediaSecondsLoaded += a.duration, r.cues.forEach( function (e) { n.subtitlesTrack_.addCue(n.featuresNativeTextTracks_ ? new window.VTTCue(e .startTime, e.endTime, e.text) : e) }), function (t) { var e = t.cues; if (e) for (var i = 0; i < e.length; i++) { for (var n = [], r = 0, a = 0; a < e.length; a++) e[i].startTime === e[a] .startTime && e[i].endTime === e[a].endTime && e[i].text === e[a] .text && 1 < ++r && n.push(e[a]); n.length && n.forEach(function (e) { return t.removeCue(e) }) } }(this.subtitlesTrack_), this.handleAppendsDone_() } else this.state = "READY" }, t.handleData_ = function () { }, t.updateTimingInfoEnd_ = function () { }, t.parseVTTCues_ = function (t) { var e = !1; "function" == typeof window.TextDecoder ? i = new window.TextDecoder("utf8") : (i = window .WebVTT.StringDecoder(), e = !0); var i = new window.WebVTT.Parser(window, window.vttjs, i); t.cues = [], t.timestampmap = { MPEGTS: 0, LOCAL: 0 }, i.oncue = t.cues.push.bind(t.cues), i.ontimestampmap = function (e) { t.timestampmap = e }, i.onparsingerror = function (e) { tr.log.warn("Error encountered when parsing cues: " + e.message) }, t.segment.map && (n = t.segment.map.bytes, e && (n = Hl(n)), i.parse(n)); var n = t.bytes; e && (n = Hl(n)), i.parse(n), i.flush() }, t.updateTimeMapping_ = function (e, t, i) { var n, r, a = e.segment; t && (e.cues.length ? (r = e.timestampmap, n = r.MPEGTS / cl - r.LOCAL + t.mapping, e.cues .forEach(function (e) { e.startTime += n, e.endTime += n }), i.syncInfo || (r = e.cues[0].startTime, t = e.cues[e.cues.length - 1].startTime, i.syncInfo = { mediaSequence: i.mediaSequence + e.mediaIndex, time: Math.min(r, t - a.duration) })) : a.empty = !0) }, e }(Dl), lc = [{ name: "VOD", run: function (e, t, i, n, r) { if (i === 1 / 0) return null; return { time: 0, segmentIndex: 0, partIndex: null } } }, { name: "ProgramDateTime", run: function (e, t, i, n, r) { if (!Object.keys(e.timelineToDatetimeMappings).length) return null; var a = null, s = null, o = qo(t); r = r || 0; for (var u = 0; u < o.length; u++) { var l = o[t.endList || 0 === r ? u : o.length - (u + 1)], c = l.segment, d = e.timelineToDatetimeMappings[c.timeline]; if (d && c.dateTimeObject) { var h = c.dateTimeObject.getTime() / 1e3 + d; if (c.parts && "number" == typeof l.partIndex) for (var p = 0; p < l.partIndex; p++) h += c.parts[p].duration; d = Math.abs(r - h); if (null !== s && (0 === d || s < d)) break; s = d, a = { time: h, segmentIndex: l.segmentIndex, partIndex: l.partIndex } } } return a } }, { name: "Segment", run: function (e, t, i, n, r) { var a = null, s = null; r = r || 0; for (var o = qo(t), u = 0; u < o.length; u++) { var l = o[t.endList || 0 === r ? u : o.length - (u + 1)], c = l.segment, d = l.part && l.part.start || c && c.start; if (c.timeline === n && "undefined" != typeof d) { c = Math.abs(r - d); if (null !== s && s < c) break; (!a || null === s || c <= s) && (s = c, a = { time: d, segmentIndex: l.segmentIndex, partIndex: l.partIndex }) } } return a } }, { name: "Discontinuity", run: function (e, t, i, n, r) { var a = null; if (r = r || 0, t.discontinuityStarts && t.discontinuityStarts.length) for (var s = null, o = 0; o < t.discontinuityStarts.length; o++) { var u = t.discontinuityStarts[o], l = t.discontinuitySequence + o + 1, c = e.discontinuities[l]; if (c) { l = Math.abs(r - c.time); if (null !== s && s < l) break; (!a || null === s || l <= s) && (s = l, a = { time: c.time, segmentIndex: u, partIndex: null }) } } return a } }, { name: "Playlist", run: function (e, t, i, n, r) { return t.syncInfo ? { time: t.syncInfo.time, segmentIndex: t.syncInfo.mediaSequence - t.mediaSequence, partIndex: null } : null } }], cc = function (i) { function e(e) { var t = i.call(this) || this; return t.timelines = [], t.discontinuities = [], t.timelineToDatetimeMappings = {}, t.logger_ = Oo( "SyncController"), t } mt(e, i); var t = e.prototype; return t.getSyncPoint = function (e, t, i, n) { i = this.runStrategies_(e, t, i, n); return i.length ? this.selectSyncPoint_(i, { key: "time", value: n }) : null }, t.getExpiredTime = function (e, t) { if (!e || !e.segments) return null; t = this.runStrategies_(e, t, e.discontinuitySequence, 0); if (!t.length) return null; t = this.selectSyncPoint_(t, { key: "segmentIndex", value: 0 }); return 0 < t.segmentIndex && (t.time *= -1), Math.abs(t.time + Ko({ defaultDuration: e.targetDuration, durationList: e.segments, startIndex: t.segmentIndex, endIndex: 0 })) }, t.runStrategies_ = function (e, t, i, n) { for (var r = [], a = 0; a < lc.length; a++) { var s = lc[a], o = s.run(this, e, t, i, n); o && (o.strategy = s.name, r.push({ strategy: s.name, syncPoint: o })) } return r }, t.selectSyncPoint_ = function (e, t) { for (var i = e[0].syncPoint, n = Math.abs(e[0].syncPoint[t.key] - t.value), r = e[0].strategy, a = 1; a < e.length; a++) { var s = Math.abs(e[a].syncPoint[t.key] - t.value); s < n && (n = s, i = e[a].syncPoint, r = e[a].strategy) } return this.logger_("syncPoint for [" + t.key + ": " + t.value + "] chosen with strategy [" + r + "]: [time:" + i.time + ", segmentIndex:" + i.segmentIndex + ("number" == typeof i .partIndex ? ",partIndex:" + i.partIndex : "") + "]"), i }, t.saveExpiredSegmentInfo = function (e, t) { var i = t.mediaSequence - e.mediaSequence; if (86400 < i) tr.log.warn("Not saving expired segment info. Media sequence gap " + i + " is too large."); else for (var n = i - 1; 0 <= n; n--) { var r = e.segments[n]; if (r && "undefined" != typeof r.start) { t.syncInfo = { mediaSequence: e.mediaSequence + n, time: r.start }, this.logger_("playlist refresh sync: [time:" + t.syncInfo.time + ", mediaSequence: " + t.syncInfo.mediaSequence + "]"), this.trigger( "syncinfoupdate"); break } } }, t.setDateTimeMappingForStart = function (e) { var t; this.timelineToDatetimeMappings = {}, e.segments && e.segments.length && e.segments[0] .dateTimeObject && (e = (t = e.segments[0]).dateTimeObject.getTime() / 1e3, this .timelineToDatetimeMappings[t.timeline] = -e) }, t.saveSegmentTimingInfo = function (e) { var t = e.segmentInfo, i = e.shouldSaveTimelineMapping, n = this.calculateSegmentTimeMapping_(t, t.timingInfo, i), e = t.segment; n && (this.saveDiscontinuitySyncInfo_(t), t.playlist.syncInfo || (t.playlist.syncInfo = { mediaSequence: t.playlist.mediaSequence + t.mediaIndex, time: e.start })); t = e.dateTimeObject; e.discontinuity && i && t && (this.timelineToDatetimeMappings[e.timeline] = -t.getTime() / 1e3) }, t.timestampOffsetForTimeline = function (e) { return "undefined" == typeof this.timelines[e] ? null : this.timelines[e].time }, t.mappingForTimeline = function (e) { return "undefined" == typeof this.timelines[e] ? null : this.timelines[e].mapping }, t.calculateSegmentTimeMapping_ = function (e, t, i) { var n, r, a = e.segment, s = e.part, o = this.timelines[e.timeline]; if ("number" == typeof e.timestampOffset) o = { time: e.startOfSegment, mapping: e.startOfSegment - t.start }, i && (this.timelines[e.timeline] = o, this.trigger("timestampoffset"), this.logger_( "time mapping for timeline " + e.timeline + ": [time: " + o.time + "] [mapping: " + o.mapping + "]")), n = e.startOfSegment, r = t.end + o.mapping; else { if (!o) return !1; n = t.start + o.mapping, r = t.end + o.mapping } return s && (s.start = n, s.end = r), (!a.start || n < a.start) && (a.start = n), a.end = r, !0 }, t.saveDiscontinuitySyncInfo_ = function (e) { var t = e.playlist, i = e.segment; if (i.discontinuity) this.discontinuities[i.timeline] = { time: i.start, accuracy: 0 }; else if (t.discontinuityStarts && t.discontinuityStarts.length) for (var n = 0; n < t.discontinuityStarts.length; n++) { var r, a = t.discontinuityStarts[n], s = t.discontinuitySequence + n + 1, o = a - e.mediaIndex, u = Math.abs(o); (!this.discontinuities[s] || this.discontinuities[s].accuracy > u) && (r = void 0, r = o < 0 ? i.start - Ko({ defaultDuration: t.targetDuration, durationList: t.segments, startIndex: e.mediaIndex, endIndex: a }) : i.end + Ko({ defaultDuration: t.targetDuration, durationList: t.segments, startIndex: e.mediaIndex + 1, endIndex: a }), this.discontinuities[s] = { time: r, accuracy: u }) } }, t.dispose = function () { this.trigger("dispose"), this.off() }, e }(tr.EventTarget), dc = function (t) { function e() { var e = t.call(this) || this; return e.pendingTimelineChanges_ = {}, e.lastTimelineChanges_ = {}, e } mt(e, t); var i = e.prototype; return i.clearPendingTimelineChange = function (e) { this.pendingTimelineChanges_[e] = null, this.trigger("pendingtimelinechange") }, i.pendingTimelineChange = function (e) { var t = e.type, i = e.from, e = e.to; return "number" == typeof i && "number" == typeof e && (this.pendingTimelineChanges_[t] = { type: t, from: i, to: e }, this.trigger("pendingtimelinechange")), this.pendingTimelineChanges_[t] }, i.lastTimelineChange = function (e) { var t = e.type, i = e.from, e = e.to; return "number" == typeof i && "number" == typeof e && (this.lastTimelineChanges_[t] = { type: t, from: i, to: e }, delete this.pendingTimelineChanges_[t], this.trigger("timelinechange")), this .lastTimelineChanges_[t] }, i.dispose = function () { this.trigger("dispose"), this.pendingTimelineChanges_ = {}, this.lastTimelineChanges_ = {}, this .off() }, e }(tr.EventTarget), hc = x(U(W(function () { function e(e, t, i) { return e(i = { path: t, exports: {}, require: function (e, t) { return function () { throw new Error( "Dynamic requires are not currently supported by @rollup/plugin-commonjs" ) }(null == t && i.path) } }, i.exports), i.exports } var t = e(function (e) { function n(e, t) { for (var i = 0; i < t.length; i++) { var n = t[i]; n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n) } } e.exports = function (e, t, i) { return t && n(e.prototype, t), i && n(e, i), e }, e.exports.default = e.exports, e.exports.__esModule = !0 }), i = e(function (i) { function n(e, t) { return i.exports = n = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e }, i.exports.default = i.exports, i.exports.__esModule = !0, n(e, t) } i.exports = n, i.exports.default = i.exports, i.exports.__esModule = !0 }), n = e(function (e) { e.exports = function (e, t) { e.prototype = Object.create(t.prototype), e.prototype.constructor = e, i(e, t) }, e.exports.default = e.exports, e.exports.__esModule = !0 }), r = function () { function e() { this.listeners = {} } var t = e.prototype; return t.on = function (e, t) { this.listeners[e] || (this.listeners[e] = []), this.listeners[e].push(t) }, t.off = function (e, t) { if (!this.listeners[e]) return !1; t = this.listeners[e].indexOf(t); return this.listeners[e] = this.listeners[e].slice(0), this.listeners[e] .splice(t, 1), -1 < t }, t.trigger = function (e) { var t = this.listeners[e]; if (t) if (2 === arguments.length) for (var i = t.length, n = 0; n < i; ++n) t[n].call(this, arguments[ 1]); else for (var r = Array.prototype.slice.call(arguments, 1), a = t.length, s = 0; s < a; ++s) t[s].apply(this, r) }, t.dispose = function () { this.listeners = {} }, t.pipe = function (t) { this.on("data", function (e) { t.push(e) }) }, e }(); /*! @name aes-decrypter @version 3.1.2 @license Apache-2.0 */ var c = null, m = function () { function e(e) { var t, i, n; c = c || function () { for (var e, t, i, n, r, a, s, o = [ [ [], [], [], [], [] ], [ [], [], [], [], [] ] ], u = o[0], l = o[1], c = u[4], d = l[4], h = [], p = [], f = 0; f < 256; f++) p[(h[f] = f << 1 ^ 283 * (f >> 7)) ^ f] = f; for (e = t = 0; !c[e]; e ^= i || 1, t = p[t] || 1) for (s = 16843009 * h[n = h[i = h[d[c[e] = r = (r = t ^ t << 1 ^ t << 2 ^ t << 3 ^ t << 4) >> 8 ^ 255 & r ^ 99] = e]]] ^ 65537 * n ^ 257 * i ^ 16843008 * e, a = 257 * h[r] ^ 16843008 * r, f = 0; f < 4; f++) u[f][e] = a = a << 24 ^ a >>> 8, l[f][r] = s = s << 24 ^ s >>> 8; for (f = 0; f < 5; f++) u[f] = u[f].slice(0), l[f] = l[f].slice(0); return o }(), this._tables = [ [c[0][0].slice(), c[0][1].slice(), c[0][2].slice(), c[0][3].slice(), c[ 0][4].slice()], [c[1][0].slice(), c[1][1].slice(), c[1][2].slice(), c[1][3].slice(), c[ 1][4].slice()] ]; var r = this._tables[0][4], a = this._tables[1], s = e.length, o = 1; if (4 !== s && 6 !== s && 8 !== s) throw new Error("Invalid aes key size"); var u = e.slice(0), l = []; for (this._key = [u, l], t = s; t < 4 * s + 28; t++) n = u[t - 1], (t % s == 0 || 8 === s && t % s == 4) && (n = r[n >>> 24] << 24 ^ r[n >> 16 & 255] << 16 ^ r[n >> 8 & 255] << 8 ^ r[255 & n], t % s == 0 && (n = n << 8 ^ n >>> 24 ^ o << 24, o = o << 1 ^ 283 * (o >> 7))), u[t] = u[t - s] ^ n; for (i = 0; t; i++, t--) n = u[3 & i ? t : t - 4], l[i] = t <= 4 || i < 4 ? n : a[0][r[n >>> 24]] ^ a[1][r[n >> 16 & 255]] ^ a[2][r[n >> 8 & 255]] ^ a[3][r[ 255 & n]] } return e.prototype.decrypt = function (e, t, i, n, r, a) { for (var s, o, u, l = this._key[1], c = e ^ l[0], d = n ^ l[1], h = i ^ l[ 2], p = t ^ l[3], f = l.length / 4 - 2, m = 4, t = this._tables[1], g = t[0], y = t[1], v = t[2], _ = t[3], b = t[4], T = 0; T < f; T++) s = g[c >>> 24] ^ y[d >> 16 & 255] ^ v[h >> 8 & 255] ^ _[255 & p] ^ l[ m], o = g[d >>> 24] ^ y[h >> 16 & 255] ^ v[p >> 8 & 255] ^ _[255 & c] ^ l[m + 1], u = g[h >>> 24] ^ y[p >> 16 & 255] ^ v[c >> 8 & 255] ^ _[255 & d] ^ l[m + 2], p = g[p >>> 24] ^ y[c >> 16 & 255] ^ v[d >> 8 & 255] ^ _[255 & h] ^ l[m + 3], m += 4, c = s, d = o, h = u; for (T = 0; T < 4; T++) r[(3 & -T) + a] = b[c >>> 24] << 24 ^ b[d >> 16 & 255] << 16 ^ b[h >> 8 & 255] << 8 ^ b[255 & p] ^ l[m++], s = c, c = d, d = h, h = p, p = s }, e }(), l = function (t) { function e() { var e = t.call(this, r) || this; return e.jobs = [], e.delay = 1, e.timeout_ = null, e } n(e, t); var i = e.prototype; return i.processJob_ = function () { this.jobs.shift()(), this.jobs.length ? this.timeout_ = setTimeout(this .processJob_.bind(this), this.delay) : this.timeout_ = null }, i.push = function (e) { this.jobs.push(e), this.timeout_ || (this.timeout_ = setTimeout(this .processJob_.bind(this), this.delay)) }, e }(r), g = function (e) { return e << 24 | (65280 & e) << 8 | (16711680 & e) >> 8 | e >>> 24 }, a = function () { function u(e, t, i, n) { var r = u.STEP, a = new Int32Array(e.buffer), s = new Uint8Array(e.byteLength), o = 0; for (this.asyncStream_ = new l, this.asyncStream_.push(this.decryptChunk_(a .subarray(o, o + r), t, i, s)), o = r; o < a.length; o += r) i = new Uint32Array([g(a[o - 4]), g(a[o - 3]), g(a[o - 2]), g(a[o - 1])]), this .asyncStream_.push(this.decryptChunk_(a.subarray(o, o + r), t, i, s)); this.asyncStream_.push(function () { /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */ var e; n(null, (e = s).subarray(0, e.byteLength - e[e.byteLength - 1])) }) } return u.prototype.decryptChunk_ = function (t, i, n, r) { return function () { var e = function (e, t, i) { for (var n, r, a, s, o = new Int32Array(e.buffer, e .byteOffset, e.byteLength >> 2), u = new m(Array .prototype.slice.call(t)), e = new Uint8Array(e .byteLength), l = new Int32Array(e.buffer), c = i[0], d = i[1], h = i[2], p = i[3], f = 0; f < o .length; f += 4) n = g(o[f]), r = g(o[f + 1]), a = g(o[ f + 2]), s = g(o[f + 3]), u.decrypt(n, r, a, s, l, f), l[f] = g(l[f] ^ c), l[f + 1] = g(l[f + 1] ^ d), l[f + 2] = g(l[f + 2] ^ h), l[f + 3] = g(l[f + 3] ^ p), c = n, d = r, h = a, p = s; return e }(t, i, n); r.set(e, t.byteOffset) } }, t(u, null, [{ key: "STEP", get: function () { return 32e3 } }]), u }(); self.onmessage = function (e) { var r = e.data, t = new Uint8Array(r.encrypted.bytes, r.encrypted.byteOffset, r.encrypted .byteLength), i = new Uint32Array(r.key.bytes, r.key.byteOffset, r.key.byteLength / 4), e = new Uint32Array(r.iv.bytes, r.iv.byteOffset, r.iv.byteLength / 4); new a(t, i, e, function (e, t) { var i, n; self.postMessage((i = { source: r.source, decrypted: t }, n = {}, Object.keys(i).forEach(function (e) { var t = i[e]; ArrayBuffer.isView(t) ? n[e] = { bytes: t.buffer, byteOffset: t.byteOffset, byteLength: t.byteLength } : n[e] = t }), n), [t.buffer]) }) } }))), pc = { AUDIO: function (s, o) { return function () { var e = o.segmentLoaders[s], t = o.mediaTypes[s], i = o.blacklistCurrentPlaylist; ql(e, t); var n = t.activeTrack(), e = t.activeGroup(), e = (e.filter(function (e) { return e.default })[0] || e[0]).id, r = t.tracks[e]; if (n !== r) { for (var a in tr.log.warn( "Problem encountered loading the alternate audio track.Switching back to default." ), t.tracks) t.tracks[a].enabled = t.tracks[a] === r; t.onTrackChanged() } else i({ message: "Problem encountered loading the default audio track." }) } }, SUBTITLES: function (i, n) { return function () { var e = n.segmentLoaders[i], t = n.mediaTypes[i]; tr.log.warn("Problem encountered loading the subtitle track.Disabling subtitle track."), ql(e, t); e = t.activeTrack(); e && (e.mode = "disabled"), t.onTrackChanged() } } }, fc = { AUDIO: function (e, t, i) { var n, r, a; t && (n = i.tech, r = i.requestOptions, a = i.segmentLoaders[e], t.on("loadedmetadata", function () { var e = t.media(); a.playlist(e, r), (!n.paused() || e.endList && "none" !== n.preload()) && a .load() }), t.on("loadedplaylist", function () { a.playlist(t.media(), r), n.paused() || a.load() }), t.on("error", pc[e](e, i))) }, SUBTITLES: function (e, t, i) { var n = i.tech, r = i.requestOptions, a = i.segmentLoaders[e], s = i.mediaTypes[e]; t.on("loadedmetadata", function () { var e = t.media(); a.playlist(e, r), a.track(s.activeTrack()), (!n.paused() || e.endList && "none" !== n.preload()) && a.load() }), t.on("loadedplaylist", function () { a.playlist(t.media(), r), n.paused() || a.load() }), t.on("error", pc[e](e, i)) } }, mc = { AUDIO: function (e, t) { var i, n, r = t.vhs, a = t.sourceType, s = t.segmentLoaders[e], o = t.requestOptions, u = t.master.mediaGroups, l = t.mediaTypes[e], c = l.groups, d = l.tracks, h = l.logger_, p = t.masterPlaylistLoader, f = nu(p.master); for (i in u[e] && 0 !== Object.keys(u[e]).length || (u[e] = { main: { default: { default: !0 } } }, f && (u[e].main.default.playlists = p.master.playlists)), u[e]) for (var m in c[i] || (c[i] = []), u[e][i]) { var g = u[e][i][m], y = void 0, y = f ? (h("AUDIO group '" + i + "' label '" + m + "' is a master playlist"), g .isMasterPlaylist = !0, null) : "vhs-json" === a && g.playlists ? new yl(g .playlists[0], r, o) : g.resolvedUri ? new yl(g.resolvedUri, r, o) : g .playlists && "dash" === a ? new Tl(g.playlists[0], r, o, p) : null, g = tr.mergeOptions({ id: m, playlistLoader: y }, g); fc[e](e, g.playlistLoader, t), c[i].push(g), "undefined" == typeof d[m] && (g = new tr .AudioTrack({ id: m, kind: (n = void 0, n = (y = g).default ? "main" : "alternative", n = y .characteristics && 0 <= y.characteristics.indexOf( "public.accessibility.describes-video") ? "main-desc" : n), enabled: !1, language: g.language, default: g.default, label: m }), d[m] = g) } s.on("error", pc[e](e, t)) }, SUBTITLES: function (e, t) { var i, n = t.tech, r = t.vhs, a = t.sourceType, s = t.segmentLoaders[e], o = t.requestOptions, u = t.master.mediaGroups, l = t.mediaTypes[e], c = l.groups, d = l.tracks, h = t.masterPlaylistLoader; for (i in u[e]) for (var p in c[i] || (c[i] = []), u[e][i]) if (!u[e][i][p].forced) { var f = u[e][i][p], m = void 0; if ("hls" === a) m = new yl(f.resolvedUri, r, o); else if ("dash" === a) { if (!f.playlists.filter(function (e) { return e.excludeUntil !== 1 / 0 }).length) return; m = new Tl(f.playlists[0], r, o, h) } else "vhs-json" === a && (m = new yl(f.playlists ? f.playlists[0] : f.resolvedUri, r, o)); f = tr.mergeOptions({ id: p, playlistLoader: m }, f), fc[e](e, f.playlistLoader, t), c[i].push(f), "undefined" == typeof d[ p] && (f = n.addRemoteTextTrack({ id: p, kind: "subtitles", default: f.default && f.autoselect, language: f.language, label: p }, !1).track, d[p] = f) } s.on("error", pc[e](e, t)) }, "CLOSED-CAPTIONS": function (e, t) { var i, n = t.tech, r = t.master.mediaGroups, t = t.mediaTypes[e], a = t.groups, s = t.tracks; for (i in r[e]) for (var o in a[i] || (a[i] = []), r[e][i]) { var u, l, c = r[e][i][o]; /^(?:CC|SERVICE)/.test(c.instreamId) && (void 0 === (l = (u = n.options_.vhs && n .options_.vhs.captionServices || {})[(l = { label: o, language: c.language, instreamId: c.instreamId, default: c.default && c.autoselect }).instreamId] ? tr.mergeOptions(l, u[l.instreamId]) : l).default && delete l .default, a[i].push(tr.mergeOptions({ id: o }, c)), "undefined" == typeof s[o] && (l = n.addRemoteTextTrack({ id: l.instreamId, kind: "captions", default: l.default, language: l.language, label: l.label }, !1).track, s[o] = l)) } } }, gc = { AUDIO: function (i, n) { return function () { var e, t = n.mediaTypes[i].tracks; for (e in t) if (t[e].enabled) return t[e]; return null } }, SUBTITLES: function (i, n) { return function () { var e, t = n.mediaTypes[i].tracks; for (e in t) if ("showing" === t[e].mode || "hidden" === t[e].mode) return t[e]; return null } } }, yc = ["mediaRequests", "mediaRequestsAborted", "mediaRequestsTimedout", "mediaRequestsErrored", "mediaTransferDuration", "mediaBytesTransferred", "mediaAppends" ], vc = function (v) { function e(e) { var t = v.call(this) || this, i = e.src, n = e.handleManifestRedirects, r = e.withCredentials, a = e.tech, s = e.bandwidth, o = e.externVhs, u = e.useCueTags, l = e.blacklistDuration, c = e.enableLowInitialPlaylist, d = e.sourceType, h = e.cacheEncryptionKeys, p = e.experimentalBufferBasedABR, f = e.experimentalLeastPixelDiffSelector, m = e.captionServices; if (!i) throw new Error("A non-empty playlist URL or JSON manifest string is required"); var g, y = e.maxPlaylistRetries; null !== y && "undefined" != typeof y || (y = 1 / 0), Kl = o, t.experimentalBufferBasedABR = Boolean(p), t.experimentalLeastPixelDiffSelector = Boolean(f), t.withCredentials = r, t.tech_ = a, t.vhs_ = a.vhs, t.sourceType_ = d, t.useCueTags_ = u, t.blacklistDuration = l, t .maxPlaylistRetries = y, t.enableLowInitialPlaylist = c, t.useCueTags_ && (t.cueTagsTrack_ = t .tech_.addTextTrack("metadata", "ad-cues"), t.cueTagsTrack_ .inBandMetadataTrackDispatchType = ""), t.requestOptions_ = { withCredentials: r, handleManifestRedirects: n, maxPlaylistRetries: y, timeout: null }, t.on("error", t.pauseLoading), t.mediaTypes_ = (g = {}, ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS" ].forEach(function (e) { g[e] = { groups: {}, tracks: {}, activePlaylistLoader: null, activeGroup: Ol, activeTrack: Ol, getActiveGroup: Ol, onGroupChanged: Ol, onTrackChanged: Ol, lastTrack_: null, logger_: Oo("MediaGroups[" + e + "]") } }), g), t.mediaSource = new window.MediaSource, t.handleDurationChange_ = t .handleDurationChange_.bind(ft(t)), t.handleSourceOpen_ = t.handleSourceOpen_.bind(ft(t)), t .handleSourceEnded_ = t.handleSourceEnded_.bind(ft(t)), t.mediaSource.addEventListener( "durationchange", t.handleDurationChange_), t.mediaSource.addEventListener("sourceopen", t .handleSourceOpen_), t.mediaSource.addEventListener("sourceended", t.handleSourceEnded_), t .seekable_ = tr.createTimeRanges(), t.hasPlayed_ = !1, t.syncController_ = new cc(e), t .segmentMetadataTrack_ = a.addRemoteTextTrack({ kind: "metadata", label: "segment-metadata" }, !1).track, t.decrypter_ = new hc, t.sourceUpdater_ = new sc(t.mediaSource), t .inbandTextTracks_ = {}, t.timelineChangeController_ = new dc; h = { vhs: t.vhs_, parse708captions: e.parse708captions, useDtsForTimestampOffset: e.useDtsForTimestampOffset, captionServices: m, mediaSource: t.mediaSource, currentTime: t.tech_.currentTime.bind(t.tech_), seekable: function () { return t.seekable() }, seeking: function () { return t.tech_.seeking() }, duration: function () { return t.duration() }, hasPlayed: function () { return t.hasPlayed_ }, goalBufferLength: function () { return t.goalBufferLength() }, bandwidth: s, syncController: t.syncController_, decrypter: t.decrypter_, sourceType: t.sourceType_, inbandTextTracks: t.inbandTextTracks_, cacheEncryptionKeys: h, sourceUpdater: t.sourceUpdater_, timelineChangeController: t.timelineChangeController_, experimentalExactManifestTimings: e.experimentalExactManifestTimings }; t.masterPlaylistLoader_ = new ("dash" === t.sourceType_ ? Tl : yl)(i, t.vhs_, t.requestOptions_), t .setupMasterPlaylistLoaderListeners_(), t.mainSegmentLoader_ = new Dl(tr.mergeOptions(h, { segmentMetadataTrack: t.segmentMetadataTrack_, loaderType: "main" }), e), t.audioSegmentLoader_ = new Dl(tr.mergeOptions(h, { loaderType: "audio" }), e), t.subtitleSegmentLoader_ = new uc(tr.mergeOptions(h, { loaderType: "vtt", featuresNativeTextTracks: t.tech_.featuresNativeTextTracks }), e), t.setupSegmentLoaderListeners_(), t.experimentalBufferBasedABR && (t .masterPlaylistLoader_.one("loadedplaylist", function () { return t.startABRTimer_() }), t.tech_.on("pause", function () { return t.stopABRTimer_() }), t.tech_.on("play", function () { return t.startABRTimer_() })), yc.forEach(function (e) { t[e + "_"] = function (e) { return this.audioSegmentLoader_[e] + this.mainSegmentLoader_[e] }.bind(ft(t), e) }), t.logger_ = Oo("MPC"), t.triggeredFmp4Usage = !1, "none" === t.tech_.preload() ? (t .loadOnPlay_ = function () { t.loadOnPlay_ = null, t.masterPlaylistLoader_.load() }, t.tech_.one("play", t.loadOnPlay_)) : t.masterPlaylistLoader_.load(), t .timeToLoadedData__ = -1, t.mainAppendsToLoadedData__ = -1, t.audioAppendsToLoadedData__ = -1; e = "none" === t.tech_.preload() ? "play" : "loadstart"; return t.tech_.one(e, function () { var e = Date.now(); t.tech_.one("loadeddata", function () { t.timeToLoadedData__ = Date.now() - e, t.mainAppendsToLoadedData__ = t .mainSegmentLoader_.mediaAppends, t.audioAppendsToLoadedData__ = t .audioSegmentLoader_.mediaAppends }) }), t } mt(e, v); var t = e.prototype; return t.mainAppendsToLoadedData_ = function () { return this.mainAppendsToLoadedData__ }, t.audioAppendsToLoadedData_ = function () { return this.audioAppendsToLoadedData__ }, t.appendsToLoadedData_ = function () { var e = this.mainAppendsToLoadedData_(), t = this.audioAppendsToLoadedData_(); return -1 === e || -1 === t ? -1 : e + t }, t.timeToLoadedData_ = function () { return this.timeToLoadedData__ }, t.checkABR_ = function () { var e = this.selectPlaylist(); e && this.shouldSwitchToMedia_(e) && this.switchMedia_(e, "abr") }, t.switchMedia_ = function (e, t, i) { var n = this.media(), r = n && (n.id || n.uri), n = e.id || e.uri; r && r !== n && (this.logger_("switch media " + r + " -> " + n + " from " + t), this.tech_ .trigger({ type: "usage", name: "vhs-rendition-change-" + t })), this.masterPlaylistLoader_.media(e, i) }, t.startABRTimer_ = function () { var e = this; this.stopABRTimer_(), this.abrTimer_ = window.setInterval(function () { return e.checkABR_() }, 250) }, t.stopABRTimer_ = function () { this.tech_.scrubbing && this.tech_.scrubbing() || (window.clearInterval(this.abrTimer_), this .abrTimer_ = null) }, t.getAudioTrackPlaylists_ = function () { var e = this.master(), t = e && e.playlists || []; if (!e || !e.mediaGroups || !e.mediaGroups.AUDIO) return t; var i, n = e.mediaGroups.AUDIO, r = Object.keys(n); if (Object.keys(this.mediaTypes_.AUDIO.groups).length) i = this.mediaTypes_.AUDIO.activeTrack(); else { var a, s = n.main || r.length && n[r[0]]; for (a in s) if (s[a].default) { i = { label: a }; break } } if (!i) return t; var o, u = []; for (o in n) if (n[o][i.label]) { var l = n[o][i.label]; if (l.playlists && l.playlists.length) u.push.apply(u, l.playlists); else if (l.uri) u.push(l); else if (e.playlists.length) for (var c = 0; c < e.playlists.length; c++) { var d = e.playlists[c]; d.attributes && d.attributes.AUDIO && d.attributes.AUDIO === o && u.push(d) } } return u.length ? u : t }, t.setupMasterPlaylistLoaderListeners_ = function () { var i = this; this.masterPlaylistLoader_.on("loadedmetadata", function () { var e = i.masterPlaylistLoader_.media(), t = 1.5 * e.targetDuration * 1e3; eu(i.masterPlaylistLoader_.master, i.masterPlaylistLoader_.media()) ? i .requestOptions_.timeout = 0 : i.requestOptions_.timeout = t, e.endList && "none" !== i.tech_.preload() && (i.mainSegmentLoader_.playlist(e, i .requestOptions_), i.mainSegmentLoader_.load()), Gl({ sourceType: i.sourceType_, segmentLoaders: { AUDIO: i.audioSegmentLoader_, SUBTITLES: i.subtitleSegmentLoader_, main: i.mainSegmentLoader_ }, tech: i.tech_, requestOptions: i.requestOptions_, masterPlaylistLoader: i.masterPlaylistLoader_, vhs: i.vhs_, master: i.master(), mediaTypes: i.mediaTypes_, blacklistCurrentPlaylist: i.blacklistCurrentPlaylist.bind(i) }), i.triggerPresenceUsage_(i.master(), e), i.setupFirstPlay(), !i.mediaTypes_ .AUDIO.activePlaylistLoader || i.mediaTypes_.AUDIO.activePlaylistLoader .media() ? i.trigger("selectedinitialmedia") : i.mediaTypes_.AUDIO .activePlaylistLoader.one("loadedmetadata", function () { i.trigger("selectedinitialmedia") }) }), this.masterPlaylistLoader_.on("loadedplaylist", function () { i.loadOnPlay_ && i.tech_.off("play", i.loadOnPlay_); var e, t = i.masterPlaylistLoader_.media(); if (!t) { if (i.excludeUnsupportedVariants_(), !(e = (e = i.enableLowInitialPlaylist ? i .selectInitialPlaylist() : e) || i.selectPlaylist()) || !i .shouldSwitchToMedia_(e)) return; if (i.initialMedia_ = e, i.switchMedia_(i.initialMedia_, "initial"), !( "vhs-json" === i.sourceType_ && i.initialMedia_.segments)) return; t = i.initialMedia_ } i.handleUpdatedMediaPlaylist(t) }), this.masterPlaylistLoader_.on("error", function () { i.blacklistCurrentPlaylist(i.masterPlaylistLoader_.error) }), this.masterPlaylistLoader_.on("mediachanging", function () { i.mainSegmentLoader_.abort(), i.mainSegmentLoader_.pause() }), this.masterPlaylistLoader_.on("mediachange", function () { var e = i.masterPlaylistLoader_.media(), t = 1.5 * e.targetDuration * 1e3; eu(i.masterPlaylistLoader_.master, i.masterPlaylistLoader_.media()) ? i .requestOptions_.timeout = 0 : i.requestOptions_.timeout = t, i .mainSegmentLoader_.playlist(e, i.requestOptions_), i.mainSegmentLoader_.load(), i.tech_.trigger({ type: "mediachange", bubbles: !0 }) }), this.masterPlaylistLoader_.on("playlistunchanged", function () { var e = i.masterPlaylistLoader_.media(); "playlist-unchanged" !== e.lastExcludeReason_ && i.stuckAtPlaylistEnd_(e) && (i .blacklistCurrentPlaylist({ message: "Playlist no longer updating.", reason: "playlist-unchanged" }), i.tech_.trigger("playliststuck")) }), this.masterPlaylistLoader_.on("renditiondisabled", function () { i.tech_.trigger({ type: "usage", name: "vhs-rendition-disabled" }), i.tech_.trigger({ type: "usage", name: "hls-rendition-disabled" }) }), this.masterPlaylistLoader_.on("renditionenabled", function () { i.tech_.trigger({ type: "usage", name: "vhs-rendition-enabled" }), i.tech_.trigger({ type: "usage", name: "hls-rendition-enabled" }) }) }, t.handleUpdatedMediaPlaylist = function (e) { this.useCueTags_ && this.updateAdCues_(e), this.mainSegmentLoader_.playlist(e, this .requestOptions_), this.updateDuration(!e.endList), this.tech_.paused() || (this .mainSegmentLoader_.load(), this.audioSegmentLoader_ && this.audioSegmentLoader_.load()) }, t.triggerPresenceUsage_ = function (e, t) { var i, n = e.mediaGroups || {}, r = !0, e = Object.keys(n.AUDIO); for (i in n.AUDIO) for (var a in n.AUDIO[i]) n.AUDIO[i][a].uri || (r = !1); r && (this.tech_.trigger({ type: "usage", name: "vhs-demuxed" }), this.tech_.trigger({ type: "usage", name: "hls-demuxed" })), Object.keys(n.SUBTITLES).length && (this.tech_.trigger({ type: "usage", name: "vhs-webvtt" }), this.tech_.trigger({ type: "usage", name: "hls-webvtt" })), Kl.Playlist.isAes(t) && (this.tech_.trigger({ type: "usage", name: "vhs-aes" }), this.tech_.trigger({ type: "usage", name: "hls-aes" })), e.length && 1 < Object.keys(n.AUDIO[e[0]]).length && (this.tech_.trigger({ type: "usage", name: "vhs-alternate-audio" }), this.tech_.trigger({ type: "usage", name: "hls-alternate-audio" })), this.useCueTags_ && (this.tech_.trigger({ type: "usage", name: "vhs-playlist-cue-tags" }), this.tech_.trigger({ type: "usage", name: "hls-playlist-cue-tags" })) }, t.shouldSwitchToMedia_ = function (e) { var t = this.masterPlaylistLoader_.media() || this.masterPlaylistLoader_.pendingMedia_, i = this.tech_.currentTime(), n = this.bufferLowWaterLine(), r = this.bufferHighWaterLine(); return function (e) { var t = e.currentPlaylist, i = e.buffered, n = e.currentTime, r = e.nextPlaylist, a = e.bufferLowWaterLine, s = e.bufferHighWaterLine, o = e.duration, u = e.experimentalBufferBasedABR, l = e.log; if (!r) return tr.log.warn( "We received no playlist to switch to. Please check your stream."), !1; var c = "allowing switch " + (t && t.id || "null") + " -> " + r.id; if (!t) return l(c + " as current playlist is not set"), !0; if (r.id === t.id) return !1; e = Boolean(Ro(i, n).length); if (!t.endList) return e || "number" != typeof t.partTargetDuration ? (l(c + " as current playlist is live"), !0) : (l("not " + c + " as current playlist is live llhls, but currentTime isn't in buffered." ), !1); i = jo(i, n), n = u ? Sl.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE : Sl .MAX_BUFFER_LOW_WATER_LINE; if (o < n) return l(c + " as duration < max low water line (" + o + " < " + n + ")"), ! 0; n = r.attributes.BANDWIDTH, r = t.attributes.BANDWIDTH; if (n < r && (!u || i < s)) { t = c + " as next bandwidth < current bandwidth (" + n + " < " + r + ")"; return u && (t += " and forwardBuffer < bufferHighWaterLine (" + i + " < " + s + ")"), l(t), !0 } if ((!u || r < n) && a <= i) { a = c + " as forwardBuffer >= bufferLowWaterLine (" + i + " >= " + a + ")"; return u && (a += " and next bandwidth > current bandwidth (" + n + " > " + r + ")"), l(a), !0 } return l("not " + c + " as no switching criteria met"), !1 }({ buffered: this.tech_.buffered(), currentTime: i, currentPlaylist: t, nextPlaylist: e, bufferLowWaterLine: n, bufferHighWaterLine: r, duration: this.duration(), experimentalBufferBasedABR: this.experimentalBufferBasedABR, log: this.logger_ }) }, t.setupSegmentLoaderListeners_ = function () { var t = this; this.experimentalBufferBasedABR || (this.mainSegmentLoader_.on("bandwidthupdate", function () { var e = t.selectPlaylist(); t.shouldSwitchToMedia_(e) && t.switchMedia_(e, "bandwidthupdate"), t.tech_ .trigger("bandwidthupdate") }), this.mainSegmentLoader_.on("progress", function () { t.trigger("progress") })), this.mainSegmentLoader_.on("error", function () { t.blacklistCurrentPlaylist(t.mainSegmentLoader_.error()) }), this.mainSegmentLoader_.on("appenderror", function () { t.error = t.mainSegmentLoader_.error_, t.trigger("error") }), this.mainSegmentLoader_.on("syncinfoupdate", function () { t.onSyncInfoUpdate_() }), this.mainSegmentLoader_.on("timestampoffset", function () { t.tech_.trigger({ type: "usage", name: "vhs-timestamp-offset" }), t.tech_.trigger({ type: "usage", name: "hls-timestamp-offset" }) }), this.audioSegmentLoader_.on("syncinfoupdate", function () { t.onSyncInfoUpdate_() }), this.audioSegmentLoader_.on("appenderror", function () { t.error = t.audioSegmentLoader_.error_, t.trigger("error") }), this.mainSegmentLoader_.on("ended", function () { t.logger_("main segment loader ended"), t.onEndOfStream() }), this.mainSegmentLoader_.on("earlyabort", function (e) { t.experimentalBufferBasedABR || (t.delegateLoaders_("all", ["abort"]), t .blacklistCurrentPlaylist({ message: "Aborted early because there isn't enough bandwidth to complete the request without rebuffering." }, 120)) }); function e() { if (!t.sourceUpdater_.hasCreatedSourceBuffers()) return t.tryToCreateSourceBuffers_(); var e = t.getCodecsOrExclude_(); e && t.sourceUpdater_.addOrChangeSourceBuffers(e) } this.mainSegmentLoader_.on("trackinfo", e), this.audioSegmentLoader_.on("trackinfo", e), this .mainSegmentLoader_.on("fmp4", function () { t.triggeredFmp4Usage || (t.tech_.trigger({ type: "usage", name: "vhs-fmp4" }), t.tech_.trigger({ type: "usage", name: "hls-fmp4" }), t.triggeredFmp4Usage = !0) }), this.audioSegmentLoader_.on("fmp4", function () { t.triggeredFmp4Usage || (t.tech_.trigger({ type: "usage", name: "vhs-fmp4" }), t.tech_.trigger({ type: "usage", name: "hls-fmp4" }), t.triggeredFmp4Usage = !0) }), this.audioSegmentLoader_.on("ended", function () { t.logger_("audioSegmentLoader ended"), t.onEndOfStream() }) }, t.mediaSecondsLoaded_ = function () { return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_ .mediaSecondsLoaded) }, t.load = function () { this.mainSegmentLoader_.load(), this.mediaTypes_.AUDIO.activePlaylistLoader && this .audioSegmentLoader_.load(), this.mediaTypes_.SUBTITLES.activePlaylistLoader && this .subtitleSegmentLoader_.load() }, t.smoothQualityChange_ = function (e) { void 0 === e && (e = this.selectPlaylist()), this.fastQualityChange_(e) }, t.fastQualityChange_ = function (e) { var t = this; (e = void 0 === e ? this.selectPlaylist() : e) !== this.masterPlaylistLoader_.media() ? (this .switchMedia_(e, "fast-quality"), this.mainSegmentLoader_.resetEverything(function () { tr.browser.IE_VERSION || tr.browser.IS_EDGE ? t.tech_.setCurrentTime(t.tech_ .currentTime() + .04) : t.tech_.setCurrentTime(t.tech_.currentTime()) })) : this.logger_("skipping fastQualityChange because new media is same as old") }, t.play = function () { if (!this.setupFirstPlay()) { this.tech_.ended() && this.tech_.setCurrentTime(0), this.hasPlayed_ && this.load(); var e = this.tech_.seekable(); return this.tech_.duration() === 1 / 0 && this.tech_.currentTime() < e.start(0) ? this.tech_ .setCurrentTime(e.end(e.length - 1)) : void 0 } }, t.setupFirstPlay = function () { var e = this, t = this.masterPlaylistLoader_.media(); if (!t || this.tech_.paused() || this.hasPlayed_) return !1; if (!t.endList) { var i = this.seekable(); if (!i.length) return !1; if (tr.browser.IE_VERSION && 0 === this.tech_.readyState()) return this.tech_.one( "loadedmetadata", function () { e.trigger("firstplay"), e.tech_.setCurrentTime(i.end(0)), e.hasPlayed_ = !0 }), !1; this.trigger("firstplay"), this.tech_.setCurrentTime(i.end(0)) } return this.hasPlayed_ = !0, this.load(), !0 }, t.handleSourceOpen_ = function () { var e; this.tryToCreateSourceBuffers_(), !this.tech_.autoplay() || "undefined" != typeof (e = this.tech_ .play()) && "function" == typeof e.then && e.then(null, function (e) { }), this.trigger( "sourceopen") }, t.handleSourceEnded_ = function () { var e, t; !this.inbandTextTracks_.metadataTrack_ || (e = this.inbandTextTracks_.metadataTrack_.cues) && e .length && (t = this.duration(), e[e.length - 1].endTime = isNaN(t) || Math.abs(t) === 1 / 0 ? Number.MAX_VALUE : t) }, t.handleDurationChange_ = function () { this.tech_.trigger("durationchange") }, t.onEndOfStream = function () { var e, t = this.mainSegmentLoader_.ended_; (t = this.mediaTypes_.AUDIO.activePlaylistLoader ? ((e = this.mainSegmentLoader_ .getCurrentMediaInfo_()) && !e.hasVideo || t) && this.audioSegmentLoader_.ended_ : t) && ( this.stopABRTimer_(), this.sourceUpdater_.endOfStream()) }, t.stuckAtPlaylistEnd_ = function (e) { if (!this.seekable().length) return !1; var t = this.syncController_.getExpiredTime(e, this.duration()); if (null === t) return !1; var i = Kl.Playlist.playlistEnd(e, t), e = this.tech_.currentTime(), t = this.tech_.buffered(); if (!t.length) return i - e <= .1; t = t.end(t.length - 1); return t - e <= .1 && i - t <= .1 }, t.blacklistCurrentPlaylist = function (e, t) { var i = (e = void 0 === e ? {} : e).playlist || this.masterPlaylistLoader_.media(); if (t = t || e.blacklistDuration || this.blacklistDuration, !i) return this.error = e, void ( "open" !== this.mediaSource.readyState ? this.trigger("error") : this.sourceUpdater_ .endOfStream("network")); i.playlistErrors_++; var n, r = this.masterPlaylistLoader_.master.playlists, a = r.filter(Jo), s = 1 === a.length && a[0] === i; if (1 === r.length && t !== 1 / 0) return tr.log.warn("Problem encountered with playlist " + i .id + ". Trying again since it is the only playlist."), this.tech_.trigger( "retryplaylist"), this.masterPlaylistLoader_.load(s); s && (n = !1, r.forEach(function (e) { var t; e === i || "undefined" != typeof (t = e.excludeUntil) && t !== 1 / 0 && (n = !0, delete e.excludeUntil) }), n && (tr.log.warn( "Removing other playlists from the exclusion list because the last rendition is about to be excluded." ), this.tech_.trigger("retryplaylist"))), a = i.playlistErrors_ > this .maxPlaylistRetries ? 1 / 0 : Date.now() + 1e3 * t, i.excludeUntil = a, e.reason && (i .lastExcludeReason_ = e.reason), this.tech_.trigger("blacklistplaylist"), this.tech_ .trigger({ type: "usage", name: "vhs-rendition-blacklisted" }), this.tech_.trigger({ type: "usage", name: "hls-rendition-blacklisted" }); r = this.selectPlaylist(); if (!r) return this.error = "Playback cannot continue. No available working or supported playlists.", void this .trigger("error"); t = e.internal ? this.logger_ : tr.log.warn, a = e.message ? " " + e.message : ""; t((e.internal ? "Internal problem" : "Problem") + " encountered with playlist " + i.id + "." + a + " Switching to playlist " + r.id + "."), r.attributes.AUDIO !== i.attributes .AUDIO && this.delegateLoaders_("audio", ["abort", "pause"]), r.attributes.SUBTITLES !== i .attributes.SUBTITLES && this.delegateLoaders_("subtitle", ["abort", "pause"]), this .delegateLoaders_("main", ["abort", "pause"]); a = r.targetDuration / 2 * 1e3 || 5e3, a = "number" == typeof r.lastRequest && Date.now() - r .lastRequest <= a; return this.switchMedia_(r, "exclude", s || a) }, t.pauseLoading = function () { this.delegateLoaders_("all", ["abort", "pause"]), this.stopABRTimer_() }, t.delegateLoaders_ = function (i, e) { var n = this, r = [], t = "all" === i; !t && "main" !== i || r.push(this.masterPlaylistLoader_); var a = []; !t && "audio" !== i || a.push("AUDIO"), !t && "subtitle" !== i || (a.push("CLOSED-CAPTIONS"), a .push("SUBTITLES")), a.forEach(function (e) { e = n.mediaTypes_[e] && n.mediaTypes_[e].activePlaylistLoader; e && r.push(e) }), ["main", "audio", "subtitle"].forEach(function (e) { var t = n[e + "SegmentLoader_"]; !t || i !== e && "all" !== i || r.push(t) }), r.forEach(function (t) { return e.forEach(function (e) { "function" == typeof t[e] && t[e]() }) }) }, t.setCurrentTime = function (e) { var t = Ro(this.tech_.buffered(), e); return this.masterPlaylistLoader_ && this.masterPlaylistLoader_.media() && this .masterPlaylistLoader_.media().segments ? t && t.length ? e : (this.mainSegmentLoader_ .resetEverything(), this.mainSegmentLoader_.abort(), this.mediaTypes_.AUDIO .activePlaylistLoader && (this.audioSegmentLoader_.resetEverything(), this .audioSegmentLoader_.abort()), this.mediaTypes_.SUBTITLES.activePlaylistLoader && ( this.subtitleSegmentLoader_.resetEverything(), this.subtitleSegmentLoader_.abort()), void this.load()) : 0 }, t.duration = function () { if (!this.masterPlaylistLoader_) return 0; var e = this.masterPlaylistLoader_.media(); return e ? e.endList ? this.mediaSource ? this.mediaSource.duration : Kl.Playlist.duration(e) : 1 / 0 : 0 }, t.seekable = function () { return this.seekable_ }, t.onSyncInfoUpdate_ = function () { var e; if (this.masterPlaylistLoader_) { var t = this.masterPlaylistLoader_.media(); if (t) { var i = this.syncController_.getExpiredTime(t, this.duration()); if (null !== i) { var n, r, a = this.masterPlaylistLoader_.master, s = Kl.Playlist.seekable(t, i, Kl.Playlist.liveEdgeDelay(a, t)); if (0 !== s.length) { if (this.mediaTypes_.AUDIO.activePlaylistLoader) { if (t = this.mediaTypes_.AUDIO.activePlaylistLoader.media(), null === (i = this.syncController_.getExpiredTime(t, this.duration()))) return; if (0 === (e = Kl.Playlist.seekable(t, i, Kl.Playlist.liveEdgeDelay(a, t))) .length) return } this.seekable_ && this.seekable_.length && (n = this.seekable_.end(0), r = this .seekable_.start(0)), !e || e.start(0) > s.end(0) || s.start(0) > e.end( 0) ? this.seekable_ = s : this.seekable_ = tr.createTimeRanges([ [(e.start(0) > s.start(0) ? e : s).start(0), (e.end(0) < s.end(0) ? e : s).end(0)] ]), this.seekable_ && this.seekable_.length && this.seekable_.end(0) === n && this.seekable_.start(0) === r || (this.logger_("seekable updated [" + Uo(this.seekable_) + "]"), this.tech_.trigger("seekablechanged")) } } } } }, t.updateDuration = function (e) { if (this.updateDuration_ && (this.mediaSource.removeEventListener("sourceopen", this .updateDuration_), this.updateDuration_ = null), "open" !== this.mediaSource.readyState) return this.updateDuration_ = this.updateDuration.bind(this, e), void this.mediaSource .addEventListener("sourceopen", this.updateDuration_); if (e) { var t = this.seekable(); return t.length ? void ((isNaN(this.mediaSource.duration) || this.mediaSource.duration < t .end(t.length - 1)) && this.sourceUpdater_.setDuration(t.end(t.length - 1))) : void 0 } e = this.tech_.buffered(), t = Kl.Playlist.duration(this.masterPlaylistLoader_.media()); 0 < e.length && (t = Math.max(t, e.end(e.length - 1))), this.mediaSource.duration !== t && this .sourceUpdater_.setDuration(t) }, t.dispose = function () { var n = this; this.trigger("dispose"), this.decrypter_.terminate(), this.masterPlaylistLoader_.dispose(), this .mainSegmentLoader_.dispose(), this.loadOnPlay_ && this.tech_.off("play", this.loadOnPlay_), ["AUDIO", "SUBTITLES"].forEach(function (e) { var t, i = n.mediaTypes_[e].groups; for (t in i) i[t].forEach(function (e) { e.playlistLoader && e.playlistLoader.dispose() }) }), this.audioSegmentLoader_.dispose(), this.subtitleSegmentLoader_.dispose(), this .sourceUpdater_.dispose(), this.timelineChangeController_.dispose(), this.stopABRTimer_(), this.updateDuration_ && this.mediaSource.removeEventListener("sourceopen", this .updateDuration_), this.mediaSource.removeEventListener("durationchange", this .handleDurationChange_), this.mediaSource.removeEventListener("sourceopen", this .handleSourceOpen_), this.mediaSource.removeEventListener("sourceended", this .handleSourceEnded_), this.off() }, t.master = function () { return this.masterPlaylistLoader_.master }, t.media = function () { return this.masterPlaylistLoader_.media() || this.initialMedia_ }, t.areMediaTypesKnown_ = function () { var e = !!this.mediaTypes_.AUDIO.activePlaylistLoader, t = !!this.mainSegmentLoader_.getCurrentMediaInfo_(), e = !e || !!this.audioSegmentLoader_.getCurrentMediaInfo_(); return t && e }, t.getCodecsOrExclude_ = function () { var n = this, r = { main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {}, audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {} }; r.video = r.main; var e = Yu(this.master(), this.media()), a = {}, t = !!this.mediaTypes_.AUDIO.activePlaylistLoader; if (r.main.hasVideo && (a.video = e.video || r.main.videoCodec || "avc1.4d400d"), r.main .isMuxed && (a.video += "," + (e.audio || r.main.audioCodec || Cr)), (r.main.hasAudio && !r .main.isMuxed || r.audio.hasAudio || t) && (a.audio = e.audio || r.main.audioCodec || r .audio.audioCodec || Cr, r.audio.isFmp4 = (r.main.hasAudio && !r.main.isMuxed ? r.main : r.audio).isFmp4), a.audio || a.video) { var s, i, o = {}; if (["video", "audio"].forEach(function (e) { var t, i; a.hasOwnProperty(e) && (t = r[e].isFmp4, i = a[e], !(t ? gr : yr)(i)) && (i = r[ e].isFmp4 ? "browser" : "muxer", o[i] = o[i] || [], o[i].push(a[e]), "audio" === e && (s = i)) }), t && s && this.media().attributes.AUDIO && (i = this.media().attributes.AUDIO, this .master().playlists.forEach(function (e) { (e.attributes && e.attributes.AUDIO) === i && e !== n.media() && (e .excludeUntil = 1 / 0) }), this.logger_("excluding audio group " + i + " as " + s + ' does not support codec(s): "' + a.audio + '"')), !Object.keys(o).length) { if (this.sourceUpdater_.hasCreatedSourceBuffers() && !this.sourceUpdater_ .canChangeType()) { var u = []; if (["video", "audio"].forEach(function (e) { var t = (pr(n.sourceUpdater_.codecs[e] || "")[0] || {}).type, i = (pr(a[e] || "")[0] || {}).type; t && i && t.toLowerCase() !== i.toLowerCase() && u.push('"' + n .sourceUpdater_.codecs[e] + '" -> "' + a[e] + '"') }), u.length) return void this.blacklistCurrentPlaylist({ playlist: this.media(), message: "Codec switching not supported: " + u.join(", ") + ".", blacklistDuration: 1 / 0, internal: !0 }) } return a } t = Object.keys(o).reduce(function (e, t) { return e && (e += ", "), e += t + ' does not support codec(s): "' + o[t].join( ",") + '"' }, "") + "."; this.blacklistCurrentPlaylist({ playlist: this.media(), internal: !0, message: t, blacklistDuration: 1 / 0 }) } else this.blacklistCurrentPlaylist({ playlist: this.media(), message: "Could not determine codecs for playlist.", blacklistDuration: 1 / 0 }) }, t.tryToCreateSourceBuffers_ = function () { var e; "open" !== this.mediaSource.readyState || this.sourceUpdater_.hasCreatedSourceBuffers() || !this .areMediaTypesKnown_() || (e = this.getCodecsOrExclude_()) && (this.sourceUpdater_ .createSourceBuffers(e), e = [e.video, e.audio].filter(Boolean).join(","), this .excludeIncompatibleVariants_(e)) }, t.excludeUnsupportedVariants_ = function () { var n = this, r = this.master().playlists, a = []; Object.keys(r).forEach(function (e) { var t, i = r[e]; -1 === a.indexOf(i.id) && (a.push(i.id), t = [], !(e = Yu(n .master, i)).audio || yr(e.audio) || gr(e.audio) || t.push( "audio codec " + e.audio), !e.video || yr(e.video) || gr(e.video) || t .push("video codec " + e.video), e.text && "stpp.ttml.im1t" === e.text && t .push("text codec " + e.text), t.length && (i.excludeUntil = 1 / 0, n .logger_("excluding " + i.id + " for unsupported: " + t.join(", ")))) }) }, t.excludeIncompatibleVariants_ = function (e) { var r = this, a = [], s = this.master().playlists, e = Xu(pr(e)), o = Ku(e), u = e.video && pr(e.video)[0] || null, l = e.audio && pr(e.audio)[0] || null; Object.keys(s).forEach(function (e) { var t, i, n = s[e]; -1 === a.indexOf(n.id) && n.excludeUntil !== 1 / 0 && (a.push(n .id), t = [], i = Yu(r.masterPlaylistLoader_.master, n), e = Ku(i), (i .audio || i.video) && (e !== o && t.push('codec count "' + e + '" !== "' + o + '"'), r.sourceUpdater_.canChangeType() || (e = i .video && pr(i.video)[0] || null, i = i.audio && pr(i.audio)[0] || null, e && u && e.type.toLowerCase() !== u.type.toLowerCase() && t .push('video codec "' + e.type + '" !== "' + u.type + '"'), i && l && i.type.toLowerCase() !== l.type.toLowerCase() && t.push( 'audio codec "' + i.type + '" !== "' + l.type + '"')), t .length && (n.excludeUntil = 1 / 0, r.logger_("blacklisting " + n.id + ": " + t.join(" && "))))) }) }, t.updateAdCues_ = function (e) { var t = 0, i = this.seekable(); i.length && (t = i.start(0)), function (e, t, i) { if (void 0 === i && (i = 0), e.segments) for (var n = i, r = 0; r < e.segments.length; r++) { var a, s, o, u = e.segments[r]; if (o = o || function (e, t) { for (var i = e.cues, n = 0; n < i.length; n++) { var r = i[n]; if (t >= r.adStartTime && t <= r.adEndTime) return r } return null }(t, n + u.duration / 2)) { if ("cueIn" in u) { o.endTime = n, o.adEndTime = n, n += u.duration, o = null; continue } if (n < o.endTime) { n += u.duration; continue } o.endTime += u.duration } else "cueOut" in u && ((o = new window.VTTCue(n, n + u.duration, u.cueOut)) .adStartTime = n, o.adEndTime = n + parseFloat(u.cueOut), t.addCue(o)), "cueOutCont" in u && (a = (s = u.cueOutCont.split("/").map(parseFloat))[0], s = s[1], (o = new window.VTTCue(n, n + u.duration, "")).adStartTime = n - a, o.adEndTime = o.adStartTime + s, t.addCue(o)); n += u.duration } }(e, this.cueTagsTrack_, t) }, t.goalBufferLength = function () { var e = this.tech_.currentTime(), t = Sl.GOAL_BUFFER_LENGTH, i = Sl.GOAL_BUFFER_LENGTH_RATE, n = Math.max(t, Sl.MAX_GOAL_BUFFER_LENGTH); return Math.min(t + e * i, n) }, t.bufferLowWaterLine = function () { var e = this.tech_.currentTime(), t = Sl.BUFFER_LOW_WATER_LINE, i = Sl.BUFFER_LOW_WATER_LINE_RATE, n = Math.max(t, Sl.MAX_BUFFER_LOW_WATER_LINE), r = Math.max(t, Sl.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE); return Math.min(t + e * i, this.experimentalBufferBasedABR ? r : n) }, t.bufferHighWaterLine = function () { return Sl.BUFFER_HIGH_WATER_LINE }, e }(tr.EventTarget), _c = ["seeking", "seeked", "pause", "playing", "error"], bc = function () { function e(e) { var i = this; this.masterPlaylistController_ = e.masterPlaylistController, this.tech_ = e.tech, this.seekable = e .seekable, this.allowSeeksWithinUnsafeLiveWindow = e.allowSeeksWithinUnsafeLiveWindow, this .liveRangeSafeTimeDelta = e.liveRangeSafeTimeDelta, this.media = e.media, this .consecutiveUpdates = 0, this.lastRecordedTime = null, this.timer_ = null, this .checkCurrentTimeTimeout_ = null, this.logger_ = Oo("PlaybackWatcher"), this.logger_( "initialize"); function t() { return i.monitorCurrentTime_() } function n() { return i.monitorCurrentTime_() } function r() { return i.techWaiting_() } function a() { return i.cancelTimer_() } var s = this.masterPlaylistController_, o = ["main", "subtitle", "audio"], u = {}; o.forEach(function (e) { u[e] = { reset: function () { return i.resetSegmentDownloads_(e) }, updateend: function () { return i.checkSegmentDownloads_(e) } }, s[e + "SegmentLoader_"].on("appendsdone", u[e].updateend), s[e + "SegmentLoader_"].on("playlistupdate", u[e].reset), i.tech_.on(["seeked", "seeking" ], u[e].reset) }); function l(t) { ["main", "audio"].forEach(function (e) { s[e + "SegmentLoader_"][t]("appended", i.seekingAppendCheck_) }) } this.seekingAppendCheck_ = function () { i.fixesBadSeeks_() && (i.consecutiveUpdates = 0, i.lastRecordedTime = i.tech_.currentTime(), l("off")) }, this.clearSeekingAppendCheck_ = function () { return l("off") }, this.watchForBadSeeking_ = function () { i.clearSeekingAppendCheck_(), l("on") }, this.tech_.on("seeked", this.clearSeekingAppendCheck_), this.tech_.on("seeking", this .watchForBadSeeking_), this.tech_.on("waiting", r), this.tech_.on(_c, a), this.tech_.on( "canplay", n), this.tech_.one("play", t), this.dispose = function () { i.clearSeekingAppendCheck_(), i.logger_("dispose"), i.tech_.off("waiting", r), i.tech_.off( _c, a), i.tech_.off("canplay", n), i.tech_.off("play", t), i.tech_.off("seeking", i .watchForBadSeeking_), i.tech_.off("seeked", i.clearSeekingAppendCheck_), o.forEach( function (e) { s[e + "SegmentLoader_"].off("appendsdone", u[e].updateend), s[e + "SegmentLoader_"].off("playlistupdate", u[e].reset), i.tech_.off([ "seeked", "seeking" ], u[e].reset) }), i.checkCurrentTimeTimeout_ && window.clearTimeout(i.checkCurrentTimeTimeout_), i .cancelTimer_() } } var t = e.prototype; return t.monitorCurrentTime_ = function () { this.checkCurrentTime_(), this.checkCurrentTimeTimeout_ && window.clearTimeout(this .checkCurrentTimeTimeout_), this.checkCurrentTimeTimeout_ = window.setTimeout(this .monitorCurrentTime_.bind(this), 250) }, t.resetSegmentDownloads_ = function (e) { var t = this.masterPlaylistController_[e + "SegmentLoader_"]; 0 < this[e + "StalledDownloads_"] && this.logger_( "resetting possible stalled download count for " + e + " loader"), this[e + "StalledDownloads_"] = 0, this[e + "Buffered_"] = t.buffered_() }, t.checkSegmentDownloads_ = function (e) { var t = this.masterPlaylistController_, i = t[e + "SegmentLoader_"], n = i.buffered_(), r = function (e, t) { if (e === t) return !1; if (!e && t || !t && e) return !0; if (e.length !== t.length) return !0; for (var i = 0; i < e.length; i++) if (e.start(i) !== t.start(i) || e.end(i) !== t.end(i)) return !0; return !1 }(this[e + "Buffered_"], n); this[e + "Buffered_"] = n, r ? this.resetSegmentDownloads_(e) : (this[e + "StalledDownloads_"]++, this.logger_("found #" + this[e + "StalledDownloads_"] + " " + e + " appends that did not increase buffer (possible stalled download)", { playlistId: i.playlist_ && i.playlist_.id, buffered: Bo(n) }), this[e + "StalledDownloads_"] < 10 || (this.logger_(e + " loader stalled download exclusion"), this.resetSegmentDownloads_(e), this .tech_.trigger({ type: "usage", name: "vhs-" + e + "-download-exclusion" }), "subtitle" !== e && t.blacklistCurrentPlaylist({ message: "Excessive " + e + " segment downloading detected." }, 1 / 0))) }, t.checkCurrentTime_ = function () { if (!this.tech_.paused() && !this.tech_.seeking()) { var e = this.tech_.currentTime(), t = this.tech_.buffered(); if (this.lastRecordedTime === e && (!t.length || e + .1 >= t.end(t.length - 1))) return this .techWaiting_(); 5 <= this.consecutiveUpdates && e === this.lastRecordedTime ? (this.consecutiveUpdates++, this.waiting_()) : e === this.lastRecordedTime ? this.consecutiveUpdates++ : (this .consecutiveUpdates = 0, this.lastRecordedTime = e) } }, t.cancelTimer_ = function () { this.consecutiveUpdates = 0, this.timer_ && (this.logger_("cancelTimer_"), clearTimeout(this .timer_)), this.timer_ = null }, t.fixesBadSeeks_ = function () { if (!this.tech_.seeking()) return !1; var e, t = this.seekable(), i = this.tech_.currentTime(); if (this.afterSeekableWindow_(t, i, this.media(), this.allowSeeksWithinUnsafeLiveWindow) && (e = t.end(t.length - 1)), "undefined" != typeof (e = this.beforeSeekableWindow_(t, i) ? (a = t.start(0)) + (a === t.end(0) ? 0 : .1) : e)) return this.logger_( "Trying to seek outside of seekable at time " + i + " with seekable range " + Uo( t) + ". Seeking to " + e + "."), this.tech_.setCurrentTime(e), !0; for (var n = this.masterPlaylistController_.sourceUpdater_, r = this.tech_.buffered(), a = n .audioBuffer ? n.audioBuffered() : null, t = n.videoBuffer ? n.videoBuffered() : null, n = this.media(), s = n.partTargetDuration || 2 * (n.targetDuration - hl), o = [a, t], u = 0; u < o.length; u++) if (o[u]) if (jo(o[u], i) < s) return !1; r = No(r, i); return 0 !== r.length && (e = r.start(0) + .1, this.logger_("Buffered region starts (" + r .start(0) + ") just beyond seek point (" + i + "). Seeking to " + e + "."), this .tech_.setCurrentTime(e), !0) }, t.waiting_ = function () { var e, t; this.techWaiting_() || (e = this.tech_.currentTime(), t = this.tech_.buffered(), (t = Ro(t, e)) .length && e + 3 <= t.end(0) && (this.cancelTimer_(), this.tech_.setCurrentTime(e), this .logger_("Stopped at " + e + " while inside a buffered region [" + t.start(0) + " -> " + t.end(0) + "]. Attempting to resume playback by seeking to the current time."), this.tech_ .trigger({ type: "usage", name: "vhs-unknown-waiting" }), this.tech_.trigger({ type: "usage", name: "hls-unknown-waiting" }))) }, t.techWaiting_ = function () { var e = this.seekable(), t = this.tech_.currentTime(); if (this.tech_.seeking() || null !== this.timer_) return !0; if (this.beforeSeekableWindow_(e, t)) { var i = e.end(e.length - 1); return this.logger_("Fell out of live window at time " + t + ". Seeking to live point (seekable end) " + i), this.cancelTimer_(), this.tech_ .setCurrentTime(i), this.tech_.trigger({ type: "usage", name: "vhs-live-resync" }), this.tech_.trigger({ type: "usage", name: "hls-live-resync" }), !0 } e = this.tech_.vhs.masterPlaylistController_.sourceUpdater_, i = this.tech_.buffered(); if (this.videoUnderflow_({ audioBuffered: e.audioBuffered(), videoBuffered: e.videoBuffered(), currentTime: t })) return this.cancelTimer_(), this.tech_.setCurrentTime(t), this.tech_.trigger({ type: "usage", name: "vhs-video-underflow" }), this.tech_.trigger({ type: "usage", name: "hls-video-underflow" }), !0; e = No(i, t); if (0 < e.length) { i = e.start(0) - t; return this.logger_("Stopped at " + t + ", setting timer for " + i + ", seeking to " + e .start(0)), this.cancelTimer_(), this.timer_ = setTimeout(this.skipTheGap_.bind( this), 1e3 * i, t), !0 } return !1 }, t.afterSeekableWindow_ = function (e, t, i, n) { if (void 0 === n && (n = !1), !e.length) return !1; var r = e.end(e.length - 1) + .1; return (r = !i.endList && n ? e.end(e.length - 1) + 3 * i.targetDuration : r) < t }, t.beforeSeekableWindow_ = function (e, t) { return !!(e.length && 0 < e.start(0) && t < e.start(0) - this.liveRangeSafeTimeDelta) }, t.videoUnderflow_ = function (e) { var t, i, n = e.videoBuffered, r = e.audioBuffered, a = e.currentTime; if (n) return n.length && r.length ? (i = Ro(n, a - 3), e = Ro(n, a), (r = Ro(r, a)).length && ! e.length && i.length && (t = { start: i.end(0), end: r.end(0) })) : No(n, a).length || (t = this.gapFromVideoUnderflow_(n, a)), !!t && (this .logger_("Encountered a gap in video from " + t.start + " to " + t.end + ". Seeking to current time " + a), !0) }, t.skipTheGap_ = function (e) { var t = this.tech_.buffered(), i = this.tech_.currentTime(), t = No(t, i); this.cancelTimer_(), 0 !== t.length && i === e && (this.logger_("skipTheGap_:", "currentTime:", i, "scheduled currentTime:", e, "nextRange start:", t.start(0)), this.tech_ .setCurrentTime(t.start(0) + hl), this.tech_.trigger({ type: "usage", name: "vhs-gap-skip" }), this.tech_.trigger({ type: "usage", name: "hls-gap-skip" })) }, t.gapFromVideoUnderflow_ = function (e, t) { for (var i = function (e) { if (e.length < 2) return tr.createTimeRanges(); for (var t = [], i = 1; i < e.length; i++) { var n = e.end(i - 1), r = e.start(i); t.push([n, r]) } return tr.createTimeRanges(t) }(e), n = 0; n < i.length; n++) { var r = i.start(n), a = i.end(n); if (t - r < 4 && 2 < t - r) return { start: r, end: a } } return null }, e }(), Tc = { errorInterval: 30, getSource: function (e) { return e(this.tech({ IWillNotUseThisInPlugins: !0 }).currentSource_ || this.currentSource()) } }, Sc = { PlaylistLoader: yl, Playlist: fl, utils: zt, STANDARD_PLAYLIST_SELECTOR: ar, INITIAL_PLAYLIST_SELECTOR: function () { var t = this, e = this.playlists.master.playlists.filter(fl.isEnabled); return Ju(e, Zu), e.filter(function (e) { return !!Yu(t.playlists.master, e).video })[0] || null }, lastBandwidthSelector: ar, movingAverageBandwidthSelector: function (t) { var i = -1, n = -1; if (t < 0 || 1 < t) throw new Error("Moving average bandwidth decay must be between 0 and 1."); return function () { var e = this.useDevicePixelRatio && window.devicePixelRatio || 1; return i < 0 && (i = this.systemBandwidth, n = this.systemBandwidth), 0 < this .systemBandwidth && this.systemBandwidth !== n && (i = t * this.systemBandwidth + ( 1 - t) * i, n = this.systemBandwidth), el(this.playlists.master, i, parseInt($u( this.tech_.el(), "width"), 10) * e, parseInt($u(this.tech_.el(), "height"), 10) * e, this.limitRenditionByPlayerDimensions, this .masterPlaylistController_) } }, comparePlaylistBandwidth: Zu, comparePlaylistResolution: function (e, t) { var i, n; return (i = (i = e.attributes.RESOLUTION && e.attributes.RESOLUTION.width ? e.attributes .RESOLUTION.width : i) || window.Number.MAX_VALUE) === (n = (n = t.attributes .RESOLUTION && t.attributes.RESOLUTION.width ? t.attributes.RESOLUTION.width : n) || window.Number.MAX_VALUE) && e.attributes.BANDWIDTH && t.attributes.BANDWIDTH ? e .attributes.BANDWIDTH - t.attributes.BANDWIDTH : i - n }, xhr: mu() }; Object.keys(Sl).forEach(function (t) { Object.defineProperty(Sc, t, { get: function () { return tr.log.warn("using Vhs." + t + " is UNSAFE be sure you know what you are doing"), Sl[t] }, set: function (e) { tr.log.warn("using Vhs." + t + " is UNSAFE be sure you know what you are doing"), "number" != typeof e || e < 0 ? tr.log.warn("value of Vhs." + t + " must be greater than or equal to 0") : Sl[t] = e } }) }); function wc(e, t) { for (var i = t.media(), n = -1, r = 0; r < e.length; r++) if (e[r].id === i.id) { n = r; break } e.selectedIndex_ = n, e.trigger({ selectedIndex: n, type: "change" }) } var Ec = "videojs-vhs"; Sc.canPlaySource = function () { return tr.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.") }; function kc(e) { var n = e.player, t = e.sourceKeySystems, i = e.audioMedia, e = e.mainPlaylists; if (!n.eme.initializeMediaKeys) return Promise.resolve(); var r, e = (e = e = i ? e.concat([i]) : e, r = Object.keys(t), e.reduce(function (e, n) { if (!n.contentProtection) return e; var t = r.reduce(function (e, t) { var i = n.contentProtection[t]; return i && i.pssh && (e[t] = { pssh: i.pssh }), e }, {}); return Object.keys(t).length && e.push(t), e }, [])), a = [], s = []; return e.forEach(function (e) { s.push(new Promise(function (e, t) { n.tech_.one("keysessioncreated", e) })), a.push(new Promise(function (t, i) { n.eme.initializeMediaKeys({ keySystems: e }, function (e) { e ? i(e) : t() }) })) }), Promise.race([Promise.all(a), Promise.race(s)]) } function Cc(e) { var t = e.player; return !!(e = function (e, t, i) { if (!e) return e; var n = {}; t && t.attributes && t.attributes.CODECS && (n = Xu(pr(t.attributes.CODECS))), i && i .attributes && i.attributes.CODECS && (n.audio = i.attributes.CODECS); var r, a = mr(n.video), s = mr(n.audio), o = {}; for (r in e) o[r] = {}, s && (o[r].audioContentType = s), a && (o[r].videoContentType = a), t .contentProtection && t.contentProtection[r] && t.contentProtection[r].pssh && (o[r].pssh = t.contentProtection[r].pssh), "string" == typeof e[r] && (o[r].url = e[r]); return tr.mergeOptions(e, o) }(e.sourceKeySystems, e.media, e.audioMedia)) && (!((t.currentSource().keySystems = e) && !t.eme) || (tr .log.warn("DRM encrypted source cannot be decrypted without a DRM plugin"), !1)) } function Ic() { if (!window.localStorage) return null; var e = window.localStorage.getItem(Ec); if (!e) return null; try { return JSON.parse(e) } catch (e) { return null } } Sc.supportsNativeHls = function () { if (!document || !document.createElement) return !1; var t = document.createElement("video"); if (!tr.getTech("Html5").isSupported()) return !1; return ["application/vnd.apple.mpegurl", "audio/mpegurl", "audio/x-mpegurl", "application/x-mpegurl", "video/x-mpegurl", "video/mpegurl", "application/mpegurl" ].some(function (e) { return /maybe|probably/i.test(t.canPlayType(e)) }) }(), Sc.supportsNativeDash = !!(document && document.createElement && tr.getTech("Html5").isSupported()) && /maybe|probably/i.test(document.createElement("video").canPlayType("application/dash+xml")), Sc .supportsTypeNatively = function (e) { return "hls" === e ? Sc.supportsNativeHls : "dash" === e && Sc.supportsNativeDash }, Sc.isSupported = function () { return tr.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.") }; var xc = function (r) { function e(e, t, i) { var n = r.call(this, t, tr.mergeOptions(i.hls, i.vhs)) || this; if (i.hls && Object.keys(i.hls).length && tr.log.warn( "Using hls options is deprecated. Please rename `hls` to `vhs` in your options object."), "number" == typeof i.initialBandwidth && (n.options_.bandwidth = i.initialBandwidth), n .logger_ = Oo("VhsHandler"), t.options_ && t.options_.playerId && ((i = tr(t.options_.playerId)) .hasOwnProperty("hls") || Object.defineProperty(i, "hls", { get: function () { return tr.log.warn( "player.hls is deprecated. Use player.tech().vhs instead."), t .trigger({ type: "usage", name: "hls-player-access" }), ft(n) }, configurable: !0 }), i.hasOwnProperty("vhs") || Object.defineProperty(i, "vhs", { get: function () { return tr.log.warn( "player.vhs is deprecated. Use player.tech().vhs instead."), t .trigger({ type: "usage", name: "vhs-player-access" }), ft(n) }, configurable: !0 }), i.hasOwnProperty("dash") || Object.defineProperty(i, "dash", { get: function () { return tr.log.warn( "player.dash is deprecated. Use player.tech().vhs instead."), ft(n) }, configurable: !0 }), n.player_ = i), n.tech_ = t, n.source_ = e, n.stats = {}, n.ignoreNextSeekingEvent_ = ! 1, n.setOptions_(), n.options_.overrideNative && t.overrideNativeAudioTracks && t .overrideNativeVideoTracks) t.overrideNativeAudioTracks(!0), t.overrideNativeVideoTracks(!0); else if (n.options_.overrideNative && (t.featuresNativeVideoTracks || t.featuresNativeAudioTracks)) throw new Error("Overriding native HLS requires emulated tracks. See https://git.io/vMpjB"); return n.on(document, ["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange" ], function (e) { var t = document.fullscreenElement || document.webkitFullscreenElement || document .mozFullScreenElement || document.msFullscreenElement; t && t.contains(n.tech_.el()) ? n.masterPlaylistController_.fastQualityChange_() : n .masterPlaylistController_.checkABR_() }), n.on(n.tech_, "seeking", function () { this.ignoreNextSeekingEvent_ ? this.ignoreNextSeekingEvent_ = !1 : this.setCurrentTime( this.tech_.currentTime()) }), n.on(n.tech_, "error", function () { this.tech_.error() && this.masterPlaylistController_ && this.masterPlaylistController_ .pauseLoading() }), n.on(n.tech_, "play", n.play), n } mt(e, r); var t = e.prototype; return t.setOptions_ = function () { var e, t = this; this.options_.withCredentials = this.options_.withCredentials || !1, this.options_ .handleManifestRedirects = !1 !== this.options_.handleManifestRedirects, this.options_ .limitRenditionByPlayerDimensions = !1 !== this.options_.limitRenditionByPlayerDimensions, this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || !1, this.options_ .smoothQualityChange = this.options_.smoothQualityChange || !1, this.options_ .useBandwidthFromLocalStorage = "undefined" != typeof this.source_ .useBandwidthFromLocalStorage ? this.source_.useBandwidthFromLocalStorage : this.options_ .useBandwidthFromLocalStorage || !1, this.options_.useNetworkInformationApi = this.options_ .useNetworkInformationApi || !1, this.options_.useDtsForTimestampOffset = this.options_ .useDtsForTimestampOffset || !1, this.options_.customTagParsers = this.options_ .customTagParsers || [], this.options_.customTagMappers = this.options_.customTagMappers || [], this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || !1, "number" != typeof this.options_.blacklistDuration && (this.options_.blacklistDuration = 300), "number" != typeof this.options_.bandwidth && this.options_.useBandwidthFromLocalStorage && ((e = Ic()) && e.bandwidth && (this.options_.bandwidth = e.bandwidth, this.tech_.trigger({ type: "usage", name: "vhs-bandwidth-from-local-storage" }), this.tech_.trigger({ type: "usage", name: "hls-bandwidth-from-local-storage" })), e && e.throughput && (this.options_.throughput = e.throughput, this.tech_.trigger({ type: "usage", name: "vhs-throughput-from-local-storage" }), this.tech_.trigger({ type: "usage", name: "hls-throughput-from-local-storage" }))), "number" != typeof this.options_.bandwidth && (this.options_.bandwidth = Sl .INITIAL_BANDWIDTH), this.options_.enableLowInitialPlaylist = this.options_ .enableLowInitialPlaylist && this.options_.bandwidth === Sl.INITIAL_BANDWIDTH, [ "withCredentials", "useDevicePixelRatio", "limitRenditionByPlayerDimensions", "bandwidth", "smoothQualityChange", "customTagParsers", "customTagMappers", "handleManifestRedirects", "cacheEncryptionKeys", "playlistSelector", "initialPlaylistSelector", "experimentalBufferBasedABR", "liveRangeSafeTimeDelta", "experimentalLLHLS", "useNetworkInformationApi", "useDtsForTimestampOffset", "experimentalExactManifestTimings", "experimentalLeastPixelDiffSelector" ].forEach(function (e) { "undefined" != typeof t.source_[e] && (t.options_[e] = t.source_[e]) }), this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions, this.useDevicePixelRatio = this.options_.useDevicePixelRatio }, t.src = function (e, t) { var n = this; e && (this.setOptions_(), this.options_.src = 0 === (e = this.source_.src).toLowerCase() .indexOf("data:application/vnd.videojs.vhs+json,") ? JSON.parse(e.substring(e.indexOf( ",") + 1)) : e, this.options_.tech = this.tech_, this.options_.externVhs = Sc, this .options_.sourceType = vr(t), this.options_.seekTo = function (e) { n.tech_.setCurrentTime(e) }, this.options_.smoothQualityChange && tr.log.warn( "smoothQualityChange is deprecated and will be removed in the next major version"), this.masterPlaylistController_ = new vc(this.options_), t = tr.mergeOptions({ liveRangeSafeTimeDelta: .1 }, this.options_, { seekable: function () { return n.seekable() }, media: function () { return n.masterPlaylistController_.media() }, masterPlaylistController: this.masterPlaylistController_ }), this.playbackWatcher_ = new bc(t), this.masterPlaylistController_.on("error", function () { var e = tr.players[n.tech_.options_.playerId], t = n.masterPlaylistController_.error; "object" != typeof t || t.code ? "string" == typeof t && (t = { message: t, code: 3 }) : t.code = 3, e.error(t) }), t = this.options_.experimentalBufferBasedABR ? Sc .movingAverageBandwidthSelector(.55) : Sc.STANDARD_PLAYLIST_SELECTOR, this .masterPlaylistController_.selectPlaylist = (this.selectPlaylist || t).bind(this), this .masterPlaylistController_.selectInitialPlaylist = Sc.INITIAL_PLAYLIST_SELECTOR.bind( this), this.playlists = this.masterPlaylistController_.masterPlaylistLoader_, this .mediaSource = this.masterPlaylistController_.mediaSource, Object.defineProperties( this, { selectPlaylist: { get: function () { return this.masterPlaylistController_.selectPlaylist }, set: function (e) { this.masterPlaylistController_.selectPlaylist = e.bind(this) } }, throughput: { get: function () { return this.masterPlaylistController_.mainSegmentLoader_.throughput .rate }, set: function (e) { this.masterPlaylistController_.mainSegmentLoader_.throughput.rate = e, this.masterPlaylistController_.mainSegmentLoader_.throughput .count = 1 } }, bandwidth: { get: function () { var e = this.masterPlaylistController_.mainSegmentLoader_.bandwidth, t = window.navigator.connection || window.navigator .mozConnection || window.navigator.webkitConnection; return e = this.options_.useNetworkInformationApi && t ? 1e7 <= (t = 1e3 * t.downlink * 1e3) && 1e7 <= e ? Math.max(e, t) : t : e }, set: function (e) { this.masterPlaylistController_.mainSegmentLoader_.bandwidth = e, this.masterPlaylistController_.mainSegmentLoader_.throughput = { rate: 0, count: 0 } } }, systemBandwidth: { get: function () { var e = 1 / (this.bandwidth || 1), t = 0 < this.throughput ? 1 / this.throughput : 0; return Math.floor(1 / (e + t)) }, set: function () { tr.log.error('The "systemBandwidth" property is read-only') } } }), this.options_.bandwidth && (this.bandwidth = this.options_.bandwidth), this.options_ .throughput && (this.throughput = this.options_.throughput), Object.defineProperties( this.stats, { bandwidth: { get: function () { return n.bandwidth || 0 }, enumerable: !0 }, mediaRequests: { get: function () { return n.masterPlaylistController_.mediaRequests_() || 0 }, enumerable: !0 }, mediaRequestsAborted: { get: function () { return n.masterPlaylistController_.mediaRequestsAborted_() || 0 }, enumerable: !0 }, mediaRequestsTimedout: { get: function () { return n.masterPlaylistController_.mediaRequestsTimedout_() || 0 }, enumerable: !0 }, mediaRequestsErrored: { get: function () { return n.masterPlaylistController_.mediaRequestsErrored_() || 0 }, enumerable: !0 }, mediaTransferDuration: { get: function () { return n.masterPlaylistController_.mediaTransferDuration_() || 0 }, enumerable: !0 }, mediaBytesTransferred: { get: function () { return n.masterPlaylistController_.mediaBytesTransferred_() || 0 }, enumerable: !0 }, mediaSecondsLoaded: { get: function () { return n.masterPlaylistController_.mediaSecondsLoaded_() || 0 }, enumerable: !0 }, mediaAppends: { get: function () { return n.masterPlaylistController_.mediaAppends_() || 0 }, enumerable: !0 }, mainAppendsToLoadedData: { get: function () { return n.masterPlaylistController_.mainAppendsToLoadedData_() || 0 }, enumerable: !0 }, audioAppendsToLoadedData: { get: function () { return n.masterPlaylistController_.audioAppendsToLoadedData_() || 0 }, enumerable: !0 }, appendsToLoadedData: { get: function () { return n.masterPlaylistController_.appendsToLoadedData_() || 0 }, enumerable: !0 }, timeToLoadedData: { get: function () { return n.masterPlaylistController_.timeToLoadedData_() || 0 }, enumerable: !0 }, buffered: { get: function () { return Bo(n.tech_.buffered()) }, enumerable: !0 }, currentTime: { get: function () { return n.tech_.currentTime() }, enumerable: !0 }, currentSource: { get: function () { return n.tech_.currentSource_ }, enumerable: !0 }, currentTech: { get: function () { return n.tech_.name_ }, enumerable: !0 }, duration: { get: function () { return n.tech_.duration() }, enumerable: !0 }, master: { get: function () { return n.playlists.master }, enumerable: !0 }, playerDimensions: { get: function () { return n.tech_.currentDimensions() }, enumerable: !0 }, seekable: { get: function () { return Bo(n.tech_.seekable()) }, enumerable: !0 }, timestamp: { get: function () { return Date.now() }, enumerable: !0 }, videoPlaybackQuality: { get: function () { return n.tech_.getVideoPlaybackQuality() }, enumerable: !0 } }), this.tech_.one("canplay", this.masterPlaylistController_.setupFirstPlay.bind( this.masterPlaylistController_)), this.tech_.on("bandwidthupdate", function () { n.options_.useBandwidthFromLocalStorage && function (e) { if (!window.localStorage) return; var t = (t = Ic()) ? tr.mergeOptions(t, e) : e; try { window.localStorage.setItem(Ec, JSON.stringify(t)) } catch (e) { return } }({ bandwidth: n.bandwidth, throughput: Math.round(n.throughput) }) }), this.masterPlaylistController_.on("selectedinitialmedia", function () { var i; (i = n).representations = function () { var e = i.masterPlaylistController_.master(), e = nu(e) ? i.masterPlaylistController_.getAudioTrackPlaylists_() : e.playlists; return e ? e.filter(function (e) { return !$o(e) }).map(function (e, t) { return new zl(i, e, e.id) }) : [] } }), this.masterPlaylistController_.sourceUpdater_.on("createdsourcebuffers", function () { n.setupEme_() }), this.on(this.masterPlaylistController_, "progress", function () { this.tech_.trigger("progress") }), this.on(this.masterPlaylistController_, "firstplay", function () { this.ignoreNextSeekingEvent_ = !0 }), this.setupQualityLevels_(), this.tech_.el() && (this.mediaSourceUrl_ = window.URL .createObjectURL(this.masterPlaylistController_.mediaSource), this.tech_.src(this .mediaSourceUrl_))) }, t.createKeySessions_ = function () { var t = this, e = this.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader; this.logger_("waiting for EME key session creation"), kc({ player: this.player_, sourceKeySystems: this.source_.keySystems, audioMedia: e && e.media(), mainPlaylists: this.playlists.master.playlists }).then(function () { t.logger_("created EME key session"), t.masterPlaylistController_.sourceUpdater_ .initializedEme() }).catch(function (e) { t.logger_("error while creating EME key session", e), t.player_.error({ message: "Failed to initialize media keys for EME", code: 3 }) }) }, t.handleWaitingForKey_ = function () { this.logger_("waitingforkey fired, attempting to create any new key sessions"), this .createKeySessions_() }, t.setupEme_ = function () { var t = this, e = this.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader, e = Cc({ player: this.player_, sourceKeySystems: this.source_.keySystems, media: this.playlists.media(), audioMedia: e && e.media() }); this.player_.tech_.on("keystatuschange", function (e) { "output-restricted" === e.status && t.masterPlaylistController_ .blacklistCurrentPlaylist({ playlist: t.masterPlaylistController_.media(), message: "DRM keystatus changed to " + e.status + ". Playlist will fail to play. Check for HDCP content.", blacklistDuration: 1 / 0 }) }), this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this), this.player_.tech_.on( "waitingforkey", this.handleWaitingForKey_), 11 !== tr.browser.IE_VERSION && e ? this .createKeySessions_() : this.masterPlaylistController_.sourceUpdater_.initializedEme() }, t.setupQualityLevels_ = function () { var i = this, e = tr.players[this.tech_.options_.playerId]; e && e.qualityLevels && !this.qualityLevels_ && (this.qualityLevels_ = e.qualityLevels(), this .masterPlaylistController_.on("selectedinitialmedia", function () { var t, e; t = i.qualityLevels_, (e = i).representations().forEach(function (e) { t.addQualityLevel(e) }), wc(t, e.playlists) }), this.playlists.on("mediachange", function () { wc(i.qualityLevels_, i.playlists) })) }, e.version = function () { return { "@videojs/http-streaming": "2.14.0", "mux.js": "6.0.1", "mpd-parser": "0.21.0", "m3u8-parser": "4.7.0", "aes-decrypter": "3.1.2" } }, t.version = function () { return this.constructor.version() }, t.canChangeType = function () { return sc.canChangeType() }, t.play = function () { this.masterPlaylistController_.play() }, t.setCurrentTime = function (e) { this.masterPlaylistController_.setCurrentTime(e) }, t.duration = function () { return this.masterPlaylistController_.duration() }, t.seekable = function () { return this.masterPlaylistController_.seekable() }, t.dispose = function () { this.playbackWatcher_ && this.playbackWatcher_.dispose(), this.masterPlaylistController_ && this .masterPlaylistController_.dispose(), this.qualityLevels_ && this.qualityLevels_.dispose(), this.player_ && (delete this.player_.vhs, delete this.player_.dash, delete this.player_ .hls), this.tech_ && this.tech_.vhs && delete this.tech_.vhs, this.tech_ && delete this .tech_.hls, this.mediaSourceUrl_ && window.URL.revokeObjectURL && (window.URL .revokeObjectURL(this.mediaSourceUrl_), this.mediaSourceUrl_ = null), this.tech_ && this .tech_.off("waitingforkey", this.handleWaitingForKey_), r.prototype.dispose.call(this) }, t.convertToProgramTime = function (e, t) { return wu({ playlist: this.masterPlaylistController_.media(), time: e, callback: t }) }, t.seekToProgramTime = function (e, t, i, n) { return void 0 === i && (i = !0), void 0 === n && (n = 2), Eu({ programTime: e, playlist: this.masterPlaylistController_.media(), retryCount: n, pauseAfterSeek: i, seekTo: this.options_.seekTo, tech: this.options_.tech, callback: t }) }, e }(tr.getComponent("Component")), Ac = { name: "videojs-http-streaming", VERSION: "2.14.0", canHandleSource: function (e, t) { t = tr.mergeOptions(tr.options, t = void 0 === t ? {} : t); return Ac.canPlayType(e.type, t) }, handleSource: function (e, t, i) { i = tr.mergeOptions(tr.options, i = void 0 === i ? {} : i); return t.vhs = new xc(e, t, i), tr.hasOwnProperty("hls") || Object.defineProperty(t, "hls", { get: function () { return tr.log.warn( "player.tech().hls is deprecated. Use player.tech().vhs instead."), t.vhs }, configurable: !0 }), t.vhs.xhr = mu(), t.vhs.src(e.src, e.type), t.vhs }, canPlayType: function (e, t) { var i = tr.mergeOptions(tr.options, t = void 0 === t ? {} : t), t = i.vhs, t = (t = void 0 === t ? {} : t).overrideNative, t = void 0 === t ? !tr.browser.IS_ANY_SAFARI : t, i = i.hls, i = (i = void 0 === i ? {} : i).overrideNative, i = void 0 !== i && i, e = vr(e); return e && (!Sc.supportsTypeNatively(e) || i || t) ? "maybe" : "" } }; return gr("avc1.4d400d,mp4a.40.2") && tr.getTech("Html5").registerSourceHandler(Ac, 0), tr.VhsHandler = xc, Object.defineProperty(tr, "HlsHandler", { get: function () { return tr.log.warn("videojs.HlsHandler is deprecated. Use videojs.VhsHandler instead."), xc }, configurable: !0 }), tr.VhsSourceHandler = Ac, Object.defineProperty(tr, "HlsSourceHandler", { get: function () { return tr.log.warn( "videojs.HlsSourceHandler is deprecated. Use videojs.VhsSourceHandler instead."), Ac }, configurable: !0 }), tr.Vhs = Sc, Object.defineProperty(tr, "Hls", { get: function () { return tr.log.warn("videojs.Hls is deprecated. Use videojs.Vhs instead."), Sc }, configurable: !0 }), tr.use || (tr.registerComponent("Hls", Sc), tr.registerComponent("Vhs", Sc)), tr.options.vhs = tr .options.vhs || {}, tr.options.hls = tr.options.hls || {}, tr.getPlugin && tr.getPlugin( "reloadSourceOnError") || (tr.registerPlugin || tr.plugin)("reloadSourceOnError", function (e) { Xl(this, e) }), tr });