/*! @name m3u8-parser @version 4.4.0 @license Apache-2.0 */ (function (QUnit, sinon) { 'use strict'; QUnit = QUnit && QUnit.hasOwnProperty('default') ? QUnit['default'] : QUnit; sinon = sinon && sinon.hasOwnProperty('default') ? sinon['default'] : sinon; function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } var cov_2cqxjsgu0h = function () { var path = '/Users/poneill/dev/m3u8-parser/src/stream.js', hash = '1b80598cdb8ae7614511dfb877ac29cf6aedf051', Function = function () {}.constructor, global = new Function('return this')(), gcv = '__coverage__', coverageData = { path: '/Users/poneill/dev/m3u8-parser/src/stream.js', statementMap: { '0': { start: { line: 11, column: 4 }, end: { line: 11, column: 24 } }, '1': { start: { line: 22, column: 4 }, end: { line: 24, column: 5 } }, '2': { start: { line: 23, column: 6 }, end: { line: 23, column: 32 } }, '3': { start: { line: 25, column: 4 }, end: { line: 25, column: 40 } }, '4': { start: { line: 37, column: 4 }, end: { line: 39, column: 5 } }, '5': { start: { line: 38, column: 6 }, end: { line: 38, column: 19 } }, '6': { start: { line: 41, column: 18 }, end: { line: 41, column: 56 } }, '7': { start: { line: 43, column: 4 }, end: { line: 43, column: 42 } }, '8': { start: { line: 44, column: 4 }, end: { line: 44, column: 22 } }, '9': { start: { line: 54, column: 22 }, end: { line: 54, column: 42 } }, '10': { start: { line: 59, column: 4 }, end: { line: 61, column: 5 } }, '11': { start: { line: 60, column: 6 }, end: { line: 60, column: 13 } }, '12': { start: { line: 66, column: 4 }, end: { line: 77, column: 5 } }, '13': { start: { line: 67, column: 6 }, end: { line: 67, column: 32 } }, '14': { start: { line: 68, column: 6 }, end: { line: 70, column: 7 } }, '15': { start: { line: 69, column: 8 }, end: { line: 69, column: 46 } }, '16': { start: { line: 72, column: 6 }, end: { line: 72, column: 54 } }, '17': { start: { line: 73, column: 6 }, end: { line: 73, column: 32 } }, '18': { start: { line: 74, column: 6 }, end: { line: 76, column: 7 } }, '19': { start: { line: 75, column: 8 }, end: { line: 75, column: 39 } }, '20': { start: { line: 84, column: 4 }, end: { line: 84, column: 24 } }, '21': { start: { line: 95, column: 4 }, end: { line: 97, column: 7 } }, '22': { start: { line: 96, column: 6 }, end: { line: 96, column: 29 } } }, fnMap: { '0': { name: '(anonymous_0)', decl: { start: { line: 10, column: 2 }, end: { line: 10, column: 3 } }, loc: { start: { line: 10, column: 16 }, end: { line: 12, column: 3 } }, line: 10 }, '1': { name: '(anonymous_1)', decl: { start: { line: 21, column: 2 }, end: { line: 21, column: 3 } }, loc: { start: { line: 21, column: 21 }, end: { line: 26, column: 3 } }, line: 21 }, '2': { name: '(anonymous_2)', decl: { start: { line: 36, column: 2 }, end: { line: 36, column: 3 } }, loc: { start: { line: 36, column: 22 }, end: { line: 45, column: 3 } }, line: 36 }, '3': { name: '(anonymous_3)', decl: { start: { line: 53, column: 2 }, end: { line: 53, column: 3 } }, loc: { start: { line: 53, column: 16 }, end: { line: 78, column: 3 } }, line: 53 }, '4': { name: '(anonymous_4)', decl: { start: { line: 83, column: 2 }, end: { line: 83, column: 3 } }, loc: { start: { line: 83, column: 12 }, end: { line: 85, column: 3 } }, line: 83 }, '5': { name: '(anonymous_5)', decl: { start: { line: 94, column: 2 }, end: { line: 94, column: 3 } }, loc: { start: { line: 94, column: 20 }, end: { line: 98, column: 3 } }, line: 94 }, '6': { name: '(anonymous_6)', decl: { start: { line: 95, column: 20 }, end: { line: 95, column: 21 } }, loc: { start: { line: 95, column: 35 }, end: { line: 97, column: 5 } }, line: 95 } }, branchMap: { '0': { loc: { start: { line: 22, column: 4 }, end: { line: 24, column: 5 } }, type: 'if', locations: [{ start: { line: 22, column: 4 }, end: { line: 24, column: 5 } }, { start: { line: 22, column: 4 }, end: { line: 24, column: 5 } }], line: 22 }, '1': { loc: { start: { line: 37, column: 4 }, end: { line: 39, column: 5 } }, type: 'if', locations: [{ start: { line: 37, column: 4 }, end: { line: 39, column: 5 } }, { start: { line: 37, column: 4 }, end: { line: 39, column: 5 } }], line: 37 }, '2': { loc: { start: { line: 59, column: 4 }, end: { line: 61, column: 5 } }, type: 'if', locations: [{ start: { line: 59, column: 4 }, end: { line: 61, column: 5 } }, { start: { line: 59, column: 4 }, end: { line: 61, column: 5 } }], line: 59 }, '3': { loc: { start: { line: 66, column: 4 }, end: { line: 77, column: 5 } }, type: 'if', locations: [{ start: { line: 66, column: 4 }, end: { line: 77, column: 5 } }, { start: { line: 66, column: 4 }, end: { line: 77, column: 5 } }], line: 66 } }, s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0 }, f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 }, b: { '0': [0, 0], '1': [0, 0], '2': [0, 0], '3': [0, 0] }, _coverageSchema: '332fd63041d2c1bcb487cc26dd0d5f7d97098a6c' }, coverage = global[gcv] || (global[gcv] = {}); if (coverage[path] && coverage[path].hash === hash) { return coverage[path]; } coverageData.hash = hash; return coverage[path] = coverageData; }(); var Stream = /*#__PURE__*/ function () { function Stream() { cov_2cqxjsgu0h.f[0]++; cov_2cqxjsgu0h.s[0]++; this.listeners = {}; } var _proto = Stream.prototype; _proto.on = function on(type, listener) { cov_2cqxjsgu0h.f[1]++; cov_2cqxjsgu0h.s[1]++; if (!this.listeners[type]) { cov_2cqxjsgu0h.b[0][0]++; cov_2cqxjsgu0h.s[2]++; this.listeners[type] = []; } else { cov_2cqxjsgu0h.b[0][1]++; } cov_2cqxjsgu0h.s[3]++; this.listeners[type].push(listener); }; _proto.off = function off(type, listener) { cov_2cqxjsgu0h.f[2]++; cov_2cqxjsgu0h.s[4]++; if (!this.listeners[type]) { cov_2cqxjsgu0h.b[1][0]++; cov_2cqxjsgu0h.s[5]++; return false; } else { cov_2cqxjsgu0h.b[1][1]++; } var index = (cov_2cqxjsgu0h.s[6]++, this.listeners[type].indexOf(listener)); cov_2cqxjsgu0h.s[7]++; this.listeners[type].splice(index, 1); cov_2cqxjsgu0h.s[8]++; return index > -1; }; _proto.trigger = function trigger(type) { cov_2cqxjsgu0h.f[3]++; var callbacks = (cov_2cqxjsgu0h.s[9]++, this.listeners[type]); var i; var length; var args; cov_2cqxjsgu0h.s[10]++; if (!callbacks) { cov_2cqxjsgu0h.b[2][0]++; cov_2cqxjsgu0h.s[11]++; return; } else { cov_2cqxjsgu0h.b[2][1]++; } cov_2cqxjsgu0h.s[12]++; if (arguments.length === 2) { cov_2cqxjsgu0h.b[3][0]++; cov_2cqxjsgu0h.s[13]++; length = callbacks.length; cov_2cqxjsgu0h.s[14]++; for (i = 0; i < length; ++i) { cov_2cqxjsgu0h.s[15]++; callbacks[i].call(this, arguments[1]); } } else { cov_2cqxjsgu0h.b[3][1]++; cov_2cqxjsgu0h.s[16]++; args = Array.prototype.slice.call(arguments, 1); cov_2cqxjsgu0h.s[17]++; length = callbacks.length; cov_2cqxjsgu0h.s[18]++; for (i = 0; i < length; ++i) { cov_2cqxjsgu0h.s[19]++; callbacks[i].apply(this, args); } } }; _proto.dispose = function dispose() { cov_2cqxjsgu0h.f[4]++; cov_2cqxjsgu0h.s[20]++; this.listeners = {}; }; _proto.pipe = function pipe(destination) { cov_2cqxjsgu0h.f[5]++; cov_2cqxjsgu0h.s[21]++; this.on('data', function (data) { cov_2cqxjsgu0h.f[6]++; cov_2cqxjsgu0h.s[22]++; destination.push(data); }); }; return Stream; }(); var cov_1zef6adobr = function () { var path = '/Users/poneill/dev/m3u8-parser/src/line-stream.js', hash = 'c9bce28e1f61649217c8037a7d69b681f2c1fadb', Function = function () {}.constructor, global = new Function('return this')(), gcv = '__coverage__', coverageData = { path: '/Users/poneill/dev/m3u8-parser/src/line-stream.js', statementMap: { '0': { start: { line: 15, column: 4 }, end: { line: 15, column: 12 } }, '1': { start: { line: 16, column: 4 }, end: { line: 16, column: 21 } }, '2': { start: { line: 27, column: 4 }, end: { line: 27, column: 24 } }, '3': { start: { line: 28, column: 4 }, end: { line: 28, column: 44 } }, '4': { start: { line: 30, column: 4 }, end: { line: 33, column: 5 } }, '5': { start: { line: 31, column: 6 }, end: { line: 31, column: 66 } }, '6': { start: { line: 32, column: 6 }, end: { line: 32, column: 59 } } }, fnMap: { '0': { name: '(anonymous_0)', decl: { start: { line: 14, column: 2 }, end: { line: 14, column: 3 } }, loc: { start: { line: 14, column: 16 }, end: { line: 17, column: 3 } }, line: 14 }, '1': { name: '(anonymous_1)', decl: { start: { line: 24, column: 2 }, end: { line: 24, column: 3 } }, loc: { start: { line: 24, column: 13 }, end: { line: 34, column: 3 } }, line: 24 } }, branchMap: {}, s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 }, f: { '0': 0, '1': 0 }, b: {}, _coverageSchema: '332fd63041d2c1bcb487cc26dd0d5f7d97098a6c' }, coverage = global[gcv] || (global[gcv] = {}); if (coverage[path] && coverage[path].hash === hash) { return coverage[path]; } coverageData.hash = hash; return coverage[path] = coverageData; }(); var LineStream = /*#__PURE__*/ function (_Stream) { _inheritsLoose(LineStream, _Stream); function LineStream() { var _this; cov_1zef6adobr.f[0]++; cov_1zef6adobr.s[0]++; _this = _Stream.call(this) || this; cov_1zef6adobr.s[1]++; _this.buffer = ''; return _this; } var _proto = LineStream.prototype; _proto.push = function push(data) { cov_1zef6adobr.f[1]++; var nextNewline; cov_1zef6adobr.s[2]++; this.buffer += data; cov_1zef6adobr.s[3]++; nextNewline = this.buffer.indexOf('\n'); cov_1zef6adobr.s[4]++; for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\n')) { cov_1zef6adobr.s[5]++; this.trigger('data', this.buffer.substring(0, nextNewline)); cov_1zef6adobr.s[6]++; this.buffer = this.buffer.substring(nextNewline + 1); } }; return LineStream; }(Stream); var cov_293lhq6i0c = function () { var path = '/Users/poneill/dev/m3u8-parser/src/parse-stream.js', hash = '84021a6527e5bf1041f119cb4d7a387e7fd6844f', Function = function () {}.constructor, global = new Function('return this')(), gcv = '__coverage__', coverageData = { path: '/Users/poneill/dev/m3u8-parser/src/parse-stream.js', statementMap: { '0': { start: { line: 13, column: 27 }, end: { line: 19, column: 1 } }, '1': { start: { line: 14, column: 14 }, end: { line: 14, column: 21 } }, '2': { start: { line: 15, column: 16 }, end: { line: 15, column: 31 } }, '3': { start: { line: 16, column: 19 }, end: { line: 16, column: 54 } }, '4': { start: { line: 18, column: 2 }, end: { line: 18, column: 49 } }, '5': { start: { line: 26, column: 24 }, end: { line: 48, column: 1 } }, '6': { start: { line: 28, column: 16 }, end: { line: 28, column: 54 } }, '7': { start: { line: 29, column: 17 }, end: { line: 29, column: 19 } }, '8': { start: { line: 30, column: 10 }, end: { line: 30, column: 22 } }, '9': { start: { line: 33, column: 2 }, end: { line: 46, column: 3 } }, '10': { start: { line: 35, column: 4 }, end: { line: 37, column: 5 } }, '11': { start: { line: 36, column: 6 }, end: { line: 36, column: 15 } }, '12': { start: { line: 40, column: 4 }, end: { line: 40, column: 52 } }, '13': { start: { line: 42, column: 4 }, end: { line: 42, column: 48 } }, '14': { start: { line: 43, column: 4 }, end: { line: 43, column: 48 } }, '15': { start: { line: 44, column: 4 }, end: { line: 44, column: 55 } }, '16': { start: { line: 45, column: 4 }, end: { line: 45, column: 30 } }, '17': { start: { line: 47, column: 2 }, end: { line: 47, column: 16 } }, '18': { start: { line: 76, column: 4 }, end: { line: 76, column: 12 } }, '19': { start: { line: 77, column: 4 }, end: { line: 77, column: 28 } }, '20': { start: { line: 78, column: 4 }, end: { line: 78, column: 25 } }, '21': { start: { line: 91, column: 4 }, end: { line: 91, column: 23 } }, '22': { start: { line: 93, column: 4 }, end: { line: 96, column: 5 } }, '23': { start: { line: 95, column: 6 }, end: { line: 95, column: 13 } }, '24': { start: { line: 99, column: 4 }, end: { line: 105, column: 5 } }, '25': { start: { line: 100, column: 6 }, end: { line: 103, column: 9 } }, '26': { start: { line: 104, column: 6 }, end: { line: 104, column: 13 } }, '27': { start: { line: 108, column: 21 }, end: { line: 117, column: 14 } }, '28': { start: { line: 109, column: 25 }, end: { line: 109, column: 37 } }, '29': { start: { line: 112, column: 6 }, end: { line: 114, column: 7 } }, '30': { start: { line: 113, column: 8 }, end: { line: 113, column: 19 } }, '31': { start: { line: 116, column: 6 }, end: { line: 116, column: 38 } }, '32': { start: { line: 119, column: 4 }, end: { line: 451, column: 7 } }, '33': { start: { line: 120, column: 6 }, end: { line: 124, column: 7 } }, '34': { start: { line: 121, column: 8 }, end: { line: 123, column: 9 } }, '35': { start: { line: 122, column: 10 }, end: { line: 122, column: 17 } }, '36': { start: { line: 127, column: 6 }, end: { line: 133, column: 7 } }, '37': { start: { line: 128, column: 8 }, end: { line: 131, column: 11 } }, '38': { start: { line: 132, column: 8 }, end: { line: 132, column: 15 } }, '39': { start: { line: 137, column: 6 }, end: { line: 137, column: 42 } }, '40': { start: { line: 140, column: 6 }, end: { line: 140, column: 41 } }, '41': { start: { line: 141, column: 6 }, end: { line: 147, column: 7 } }, '42': { start: { line: 142, column: 8 }, end: { line: 145, column: 11 } }, '43': { start: { line: 146, column: 8 }, end: { line: 146, column: 15 } }, '44': { start: { line: 148, column: 6 }, end: { line: 148, column: 62 } }, '45': { start: { line: 149, column: 6 }, end: { line: 162, column: 7 } }, '46': { start: { line: 150, column: 8 }, end: { line: 153, column: 10 } }, '47': { start: { line: 154, column: 8 }, end: { line: 156, column: 9 } }, '48': { start: { line: 155, column: 10 }, end: { line: 155, column: 48 } }, '49': { start: { line: 157, column: 8 }, end: { line: 159, column: 9 } }, '50': { start: { line: 158, column: 10 }, end: { line: 158, column: 33 } }, '51': { start: { line: 160, column: 8 }, end: { line: 160, column: 36 } }, '52': { start: { line: 161, column: 8 }, end: { line: 161, column: 15 } }, '53': { start: { line: 163, column: 6 }, end: { line: 163, column: 67 } }, '54': { start: { line: 164, column: 6 }, end: { line: 174, column: 7 } }, '55': { start: { line: 165, column: 8 }, end: { line: 168, column: 10 } }, '56': { start: { line: 169, column: 8 }, end: { line: 171, column: 9 } }, '57': { start: { line: 170, column: 10 }, end: { line: 170, column: 50 } }, '58': { start: { line: 172, column: 8 }, end: { line: 172, column: 36 } }, '59': { start: { line: 173, column: 8 }, end: { line: 173, column: 15 } }, '60': { start: { line: 175, column: 6 }, end: { line: 175, column: 65 } }, '61': { start: { line: 176, column: 6 }, end: { line: 186, column: 7 } }, '62': { start: { line: 177, column: 8 }, end: { line: 180, column: 10 } }, '63': { start: { line: 181, column: 8 }, end: { line: 183, column: 9 } }, '64': { start: { line: 182, column: 10 }, end: { line: 182, column: 50 } }, '65': { start: { line: 184, column: 8 }, end: { line: 184, column: 36 } }, '66': { start: { line: 185, column: 8 }, end: { line: 185, column: 15 } }, '67': { start: { line: 187, column: 6 }, end: { line: 187, column: 60 } }, '68': { start: { line: 188, column: 6 }, end: { line: 198, column: 7 } }, '69': { start: { line: 189, column: 8 }, end: { line: 192, column: 10 } }, '70': { start: { line: 193, column: 8 }, end: { line: 195, column: 9 } }, '71': { start: { line: 194, column: 10 }, end: { line: 194, column: 49 } }, '72': { start: { line: 196, column: 8 }, end: { line: 196, column: 36 } }, '73': { start: { line: 197, column: 8 }, end: { line: 197, column: 15 } }, '74': { start: { line: 199, column: 6 }, end: { line: 199, column: 70 } }, '75': { start: { line: 200, column: 6 }, end: { line: 210, column: 7 } }, '76': { start: { line: 201, column: 8 }, end: { line: 204, column: 10 } }, '77': { start: { line: 205, column: 8 }, end: { line: 207, column: 9 } }, '78': { start: { line: 206, column: 10 }, end: { line: 206, column: 48 } }, '79': { start: { line: 208, column: 8 }, end: { line: 208, column: 36 } }, '80': { start: { line: 209, column: 8 }, end: { line: 209, column: 15 } }, '81': { start: { line: 211, column: 6 }, end: { line: 211, column: 78 } }, '82': { start: { line: 212, column: 6 }, end: { line: 222, column: 7 } }, '83': { start: { line: 213, column: 8 }, end: { line: 216, column: 10 } }, '84': { start: { line: 217, column: 8 }, end: { line: 219, column: 9 } }, '85': { start: { line: 218, column: 10 }, end: { line: 218, column: 48 } }, '86': { start: { line: 220, column: 8 }, end: { line: 220, column: 36 } }, '87': { start: { line: 221, column: 8 }, end: { line: 221, column: 15 } }, '88': { start: { line: 223, column: 6 }, end: { line: 223, column: 62 } }, '89': { start: { line: 224, column: 6 }, end: { line: 234, column: 7 } }, '90': { start: { line: 225, column: 8 }, end: { line: 228, column: 10 } }, '91': { start: { line: 229, column: 8 }, end: { line: 231, column: 9 } }, '92': { start: { line: 230, column: 10 }, end: { line: 230, column: 40 } }, '93': { start: { line: 232, column: 8 }, end: { line: 232, column: 36 } }, '94': { start: { line: 233, column: 8 }, end: { line: 233, column: 15 } }, '95': { start: { line: 235, column: 6 }, end: { line: 235, column: 74 } }, '96': { start: { line: 236, column: 6 }, end: { line: 249, column: 7 } }, '97': { start: { line: 237, column: 8 }, end: { line: 240, column: 10 } }, '98': { start: { line: 241, column: 8 }, end: { line: 243, column: 9 } }, '99': { start: { line: 242, column: 10 }, end: { line: 242, column: 48 } }, '100': { start: { line: 244, column: 8 }, end: { line: 246, column: 9 } }, '101': { start: { line: 245, column: 10 }, end: { line: 245, column: 48 } }, '102': { start: { line: 247, column: 8 }, end: { line: 247, column: 36 } }, '103': { start: { line: 248, column: 8 }, end: { line: 248, column: 15 } }, '104': { start: { line: 250, column: 6 }, end: { line: 250, column: 63 } }, '105': { start: { line: 251, column: 6 }, end: { line: 261, column: 7 } }, '106': { start: { line: 252, column: 8 }, end: { line: 255, column: 10 } }, '107': { start: { line: 256, column: 8 }, end: { line: 258, column: 9 } }, '108': { start: { line: 257, column: 10 }, end: { line: 257, column: 49 } }, '109': { start: { line: 259, column: 8 }, end: { line: 259, column: 36 } }, '110': { start: { line: 260, column: 8 }, end: { line: 260, column: 15 } }, '111': { start: { line: 262, column: 6 }, end: { line: 262, column: 51 } }, '112': { start: { line: 263, column: 6 }, end: { line: 290, column: 7 } }, '113': { start: { line: 264, column: 8 }, end: { line: 267, column: 10 } }, '114': { start: { line: 269, column: 8 }, end: { line: 286, column: 9 } }, '115': { start: { line: 270, column: 29 }, end: { line: 270, column: 54 } }, '116': { start: { line: 272, column: 10 }, end: { line: 274, column: 11 } }, '117': { start: { line: 273, column: 12 }, end: { line: 273, column: 39 } }, '118': { start: { line: 275, column: 10 }, end: { line: 285, column: 11 } }, '119': { start: { line: 276, column: 37 }, end: { line: 276, column: 68 } }, '120': { start: { line: 278, column: 12 }, end: { line: 278, column: 33 } }, '121': { start: { line: 279, column: 12 }, end: { line: 281, column: 13 } }, '122': { start: { line: 280, column: 14 }, end: { line: 280, column: 60 } }, '123': { start: { line: 282, column: 12 }, end: { line: 284, column: 13 } }, '124': { start: { line: 283, column: 14 }, end: { line: 283, column: 60 } }, '125': { start: { line: 288, column: 8 }, end: { line: 288, column: 36 } }, '126': { start: { line: 289, column: 8 }, end: { line: 289, column: 15 } }, '127': { start: { line: 291, column: 6 }, end: { line: 291, column: 58 } }, '128': { start: { line: 292, column: 6 }, end: { line: 321, column: 7 } }, '129': { start: { line: 293, column: 8 }, end: { line: 296, column: 10 } }, '130': { start: { line: 297, column: 8 }, end: { line: 318, column: 9 } }, '131': { start: { line: 298, column: 10 }, end: { line: 298, column: 55 } }, '132': { start: { line: 300, column: 10 }, end: { line: 311, column: 11 } }, '133': { start: { line: 301, column: 26 }, end: { line: 301, column: 64 } }, '134': { start: { line: 302, column: 31 }, end: { line: 302, column: 33 } }, '135': { start: { line: 304, column: 12 }, end: { line: 306, column: 13 } }, '136': { start: { line: 305, column: 14 }, end: { line: 305, column: 56 } }, '137': { start: { line: 307, column: 12 }, end: { line: 309, column: 13 } }, '138': { start: { line: 308, column: 14 }, end: { line: 308, column: 57 } }, '139': { start: { line: 310, column: 12 }, end: { line: 310, column: 53 } }, '140': { start: { line: 312, column: 10 }, end: { line: 314, column: 11 } }, '141': { start: { line: 313, column: 12 }, end: { line: 313, column: 82 } }, '142': { start: { line: 315, column: 10 }, end: { line: 317, column: 11 } }, '143': { start: { line: 316, column: 12 }, end: { line: 316, column: 90 } }, '144': { start: { line: 319, column: 8 }, end: { line: 319, column: 36 } }, '145': { start: { line: 320, column: 8 }, end: { line: 320, column: 15 } }, '146': { start: { line: 322, column: 6 }, end: { line: 322, column: 53 } }, '147': { start: { line: 323, column: 6 }, end: { line: 333, column: 7 } }, '148': { start: { line: 324, column: 8 }, end: { line: 327, column: 10 } }, '149': { start: { line: 328, column: 8 }, end: { line: 330, column: 9 } }, '150': { start: { line: 329, column: 10 }, end: { line: 329, column: 55 } }, '151': { start: { line: 331, column: 8 }, end: { line: 331, column: 36 } }, '152': { start: { line: 332, column: 8 }, end: { line: 332, column: 15 } }, '153': { start: { line: 334, column: 6 }, end: { line: 334, column: 48 } }, '154': { start: { line: 335, column: 6 }, end: { line: 341, column: 7 } }, '155': { start: { line: 336, column: 8 }, end: { line: 339, column: 11 } }, '156': { start: { line: 340, column: 8 }, end: { line: 340, column: 15 } }, '157': { start: { line: 342, column: 6 }, end: { line: 342, column: 54 } }, '158': { start: { line: 343, column: 6 }, end: { line: 349, column: 7 } }, '159': { start: { line: 344, column: 8 }, end: { line: 347, column: 11 } }, '160': { start: { line: 348, column: 8 }, end: { line: 348, column: 15 } }, '161': { start: { line: 350, column: 6 }, end: { line: 350, column: 65 } }, '162': { start: { line: 351, column: 6 }, end: { line: 362, column: 7 } }, '163': { start: { line: 352, column: 8 }, end: { line: 355, column: 10 } }, '164': { start: { line: 356, column: 8 }, end: { line: 359, column: 9 } }, '165': { start: { line: 357, column: 10 }, end: { line: 357, column: 42 } }, '166': { start: { line: 358, column: 10 }, end: { line: 358, column: 52 } }, '167': { start: { line: 360, column: 8 }, end: { line: 360, column: 36 } }, '168': { start: { line: 361, column: 8 }, end: { line: 361, column: 15 } }, '169': { start: { line: 363, column: 6 }, end: { line: 363, column: 51 } }, '170': { start: { line: 364, column: 6 }, end: { line: 387, column: 7 } }, '171': { start: { line: 365, column: 8 }, end: { line: 368, column: 10 } }, '172': { start: { line: 369, column: 8 }, end: { line: 384, column: 9 } }, '173': { start: { line: 370, column: 10 }, end: { line: 370, column: 55 } }, '174': { start: { line: 372, column: 10 }, end: { line: 383, column: 11 } }, '175': { start: { line: 373, column: 12 }, end: { line: 375, column: 13 } }, '176': { start: { line: 374, column: 14 }, end: { line: 374, column: 69 } }, '177': { start: { line: 377, column: 12 }, end: { line: 377, column: 69 } }, '178': { start: { line: 378, column: 12 }, end: { line: 378, column: 74 } }, '179': { start: { line: 379, column: 12 }, end: { line: 379, column: 74 } }, '180': { start: { line: 380, column: 12 }, end: { line: 380, column: 74 } }, '181': { start: { line: 381, column: 12 }, end: { line: 381, column: 74 } }, '182': { start: { line: 382, column: 12 }, end: { line: 382, column: 71 } }, '183': { start: { line: 385, column: 8 }, end: { line: 385, column: 36 } }, '184': { start: { line: 386, column: 8 }, end: { line: 386, column: 15 } }, '185': { start: { line: 388, column: 6 }, end: { line: 388, column: 53 } }, '186': { start: { line: 389, column: 6 }, end: { line: 402, column: 7 } }, '187': { start: { line: 390, column: 8 }, end: { line: 393, column: 10 } }, '188': { start: { line: 394, column: 8 }, end: { line: 399, column: 9 } }, '189': { start: { line: 395, column: 10 }, end: { line: 395, column: 55 } }, '190': { start: { line: 397, column: 10 }, end: { line: 397, column: 88 } }, '191': { start: { line: 398, column: 10 }, end: { line: 398, column: 76 } }, '192': { start: { line: 400, column: 8 }, end: { line: 400, column: 36 } }, '193': { start: { line: 401, column: 8 }, end: { line: 401, column: 15 } }, '194': { start: { line: 403, column: 6 }, end: { line: 403, column: 61 } }, '195': { start: { line: 404, column: 6 }, end: { line: 416, column: 7 } }, '196': { start: { line: 405, column: 8 }, end: { line: 408, column: 10 } }, '197': { start: { line: 409, column: 8 }, end: { line: 413, column: 9 } }, '198': { start: { line: 410, column: 10 }, end: { line: 410, column: 32 } }, '199': { start: { line: 412, column: 10 }, end: { line: 412, column: 26 } }, '200': { start: { line: 414, column: 8 }, end: { line: 414, column: 36 } }, '201': { start: { line: 415, column: 8 }, end: { line: 415, column: 15 } }, '202': { start: { line: 417, column: 6 }, end: { line: 417, column: 56 } }, '203': { start: { line: 418, column: 6 }, end: { line: 430, column: 7 } }, '204': { start: { line: 419, column: 8 }, end: { line: 422, column: 10 } }, '205': { start: { line: 423, column: 8 }, end: { line: 427, column: 9 } }, '206': { start: { line: 424, column: 10 }, end: { line: 424, column: 32 } }, '207': { start: { line: 426, column: 10 }, end: { line: 426, column: 26 } }, '208': { start: { line: 428, column: 8 }, end: { line: 428, column: 36 } }, '209': { start: { line: 429, column: 8 }, end: { line: 429, column: 15 } }, '210': { start: { line: 431, column: 6 }, end: { line: 431, column: 55 } }, '211': { start: { line: 432, column: 6 }, end: { line: 444, column: 7 } }, '212': { start: { line: 433, column: 8 }, end: { line: 436, column: 10 } }, '213': { start: { line: 437, column: 8 }, end: { line: 441, column: 9 } }, '214': { start: { line: 438, column: 10 }, end: { line: 438, column: 32 } }, '215': { start: { line: 440, column: 10 }, end: { line: 440, column: 26 } }, '216': { start: { line: 442, column: 8 }, end: { line: 442, column: 36 } }, '217': { start: { line: 443, column: 8 }, end: { line: 443, column: 15 } }, '218': { start: { line: 447, column: 6 }, end: { line: 450, column: 9 } }, '219': { start: { line: 464, column: 4 }, end: { line: 466, column: 5 } }, '220': { start: { line: 465, column: 6 }, end: { line: 465, column: 34 } }, '221': { start: { line: 465, column: 29 }, end: { line: 465, column: 33 } }, '222': { start: { line: 467, column: 4 }, end: { line: 479, column: 7 } }, '223': { start: { line: 468, column: 20 }, end: { line: 468, column: 41 } }, '224': { start: { line: 470, column: 6 }, end: { line: 478, column: 7 } }, '225': { start: { line: 471, column: 8 }, end: { line: 476, column: 11 } }, '226': { start: { line: 477, column: 8 }, end: { line: 477, column: 20 } }, '227': { start: { line: 490, column: 18 }, end: { line: 496, column: 5 } }, '228': { start: { line: 491, column: 6 }, end: { line: 493, column: 7 } }, '229': { start: { line: 492, column: 8 }, end: { line: 492, column: 25 } }, '230': { start: { line: 495, column: 6 }, end: { line: 495, column: 18 } }, '231': { start: { line: 498, column: 4 }, end: { line: 498, column: 32 } } }, fnMap: { '0': { name: '(anonymous_0)', decl: { start: { line: 13, column: 27 }, end: { line: 13, column: 28 } }, loc: { start: { line: 13, column: 38 }, end: { line: 19, column: 1 } }, line: 13 }, '1': { name: '(anonymous_1)', decl: { start: { line: 26, column: 24 }, end: { line: 26, column: 25 } }, loc: { start: { line: 26, column: 45 }, end: { line: 48, column: 1 } }, line: 26 }, '2': { name: '(anonymous_2)', decl: { start: { line: 75, column: 2 }, end: { line: 75, column: 3 } }, loc: { start: { line: 75, column: 16 }, end: { line: 79, column: 3 } }, line: 75 }, '3': { name: '(anonymous_3)', decl: { start: { line: 86, column: 2 }, end: { line: 86, column: 3 } }, loc: { start: { line: 86, column: 13 }, end: { line: 452, column: 3 } }, line: 86 }, '4': { name: '(anonymous_4)', decl: { start: { line: 108, column: 44 }, end: { line: 108, column: 45 } }, loc: { start: { line: 108, column: 61 }, end: { line: 117, column: 5 } }, line: 108 }, '5': { name: '(anonymous_5)', decl: { start: { line: 119, column: 21 }, end: { line: 119, column: 22 } }, loc: { start: { line: 119, column: 32 }, end: { line: 451, column: 5 } }, line: 119 }, '6': { name: '(anonymous_6)', decl: { start: { line: 463, column: 2 }, end: { line: 463, column: 3 } }, loc: { start: { line: 463, column: 59 }, end: { line: 480, column: 3 } }, line: 463 }, '7': { name: '(anonymous_7)', decl: { start: { line: 465, column: 19 }, end: { line: 465, column: 20 } }, loc: { start: { line: 465, column: 29 }, end: { line: 465, column: 33 } }, line: 465 }, '8': { name: '(anonymous_8)', decl: { start: { line: 467, column: 28 }, end: { line: 467, column: 29 } }, loc: { start: { line: 467, column: 36 }, end: { line: 479, column: 5 } }, line: 467 }, '9': { name: '(anonymous_9)', decl: { start: { line: 489, column: 2 }, end: { line: 489, column: 3 } }, loc: { start: { line: 489, column: 34 }, end: { line: 499, column: 3 } }, line: 489 }, '10': { name: '(anonymous_10)', decl: { start: { line: 490, column: 18 }, end: { line: 490, column: 19 } }, loc: { start: { line: 490, column: 26 }, end: { line: 496, column: 5 } }, line: 490 } }, branchMap: { '0': { loc: { start: { line: 35, column: 4 }, end: { line: 37, column: 5 } }, type: 'if', locations: [{ start: { line: 35, column: 4 }, end: { line: 37, column: 5 } }, { start: { line: 35, column: 4 }, end: { line: 37, column: 5 } }], line: 35 }, '1': { loc: { start: { line: 93, column: 4 }, end: { line: 96, column: 5 } }, type: 'if', locations: [{ start: { line: 93, column: 4 }, end: { line: 96, column: 5 } }, { start: { line: 93, column: 4 }, end: { line: 96, column: 5 } }], line: 93 }, '2': { loc: { start: { line: 99, column: 4 }, end: { line: 105, column: 5 } }, type: 'if', locations: [{ start: { line: 99, column: 4 }, end: { line: 105, column: 5 } }, { start: { line: 99, column: 4 }, end: { line: 105, column: 5 } }], line: 99 }, '3': { loc: { start: { line: 112, column: 6 }, end: { line: 114, column: 7 } }, type: 'if', locations: [{ start: { line: 112, column: 6 }, end: { line: 114, column: 7 } }, { start: { line: 112, column: 6 }, end: { line: 114, column: 7 } }], line: 112 }, '4': { loc: { start: { line: 121, column: 8 }, end: { line: 123, column: 9 } }, type: 'if', locations: [{ start: { line: 121, column: 8 }, end: { line: 123, column: 9 } }, { start: { line: 121, column: 8 }, end: { line: 123, column: 9 } }], line: 121 }, '5': { loc: { start: { line: 127, column: 6 }, end: { line: 133, column: 7 } }, type: 'if', locations: [{ start: { line: 127, column: 6 }, end: { line: 133, column: 7 } }, { start: { line: 127, column: 6 }, end: { line: 133, column: 7 } }], line: 127 }, '6': { loc: { start: { line: 141, column: 6 }, end: { line: 147, column: 7 } }, type: 'if', locations: [{ start: { line: 141, column: 6 }, end: { line: 147, column: 7 } }, { start: { line: 141, column: 6 }, end: { line: 147, column: 7 } }], line: 141 }, '7': { loc: { start: { line: 149, column: 6 }, end: { line: 162, column: 7 } }, type: 'if', locations: [{ start: { line: 149, column: 6 }, end: { line: 162, column: 7 } }, { start: { line: 149, column: 6 }, end: { line: 162, column: 7 } }], line: 149 }, '8': { loc: { start: { line: 154, column: 8 }, end: { line: 156, column: 9 } }, type: 'if', locations: [{ start: { line: 154, column: 8 }, end: { line: 156, column: 9 } }, { start: { line: 154, column: 8 }, end: { line: 156, column: 9 } }], line: 154 }, '9': { loc: { start: { line: 157, column: 8 }, end: { line: 159, column: 9 } }, type: 'if', locations: [{ start: { line: 157, column: 8 }, end: { line: 159, column: 9 } }, { start: { line: 157, column: 8 }, end: { line: 159, column: 9 } }], line: 157 }, '10': { loc: { start: { line: 164, column: 6 }, end: { line: 174, column: 7 } }, type: 'if', locations: [{ start: { line: 164, column: 6 }, end: { line: 174, column: 7 } }, { start: { line: 164, column: 6 }, end: { line: 174, column: 7 } }], line: 164 }, '11': { loc: { start: { line: 169, column: 8 }, end: { line: 171, column: 9 } }, type: 'if', locations: [{ start: { line: 169, column: 8 }, end: { line: 171, column: 9 } }, { start: { line: 169, column: 8 }, end: { line: 171, column: 9 } }], line: 169 }, '12': { loc: { start: { line: 176, column: 6 }, end: { line: 186, column: 7 } }, type: 'if', locations: [{ start: { line: 176, column: 6 }, end: { line: 186, column: 7 } }, { start: { line: 176, column: 6 }, end: { line: 186, column: 7 } }], line: 176 }, '13': { loc: { start: { line: 181, column: 8 }, end: { line: 183, column: 9 } }, type: 'if', locations: [{ start: { line: 181, column: 8 }, end: { line: 183, column: 9 } }, { start: { line: 181, column: 8 }, end: { line: 183, column: 9 } }], line: 181 }, '14': { loc: { start: { line: 188, column: 6 }, end: { line: 198, column: 7 } }, type: 'if', locations: [{ start: { line: 188, column: 6 }, end: { line: 198, column: 7 } }, { start: { line: 188, column: 6 }, end: { line: 198, column: 7 } }], line: 188 }, '15': { loc: { start: { line: 193, column: 8 }, end: { line: 195, column: 9 } }, type: 'if', locations: [{ start: { line: 193, column: 8 }, end: { line: 195, column: 9 } }, { start: { line: 193, column: 8 }, end: { line: 195, column: 9 } }], line: 193 }, '16': { loc: { start: { line: 200, column: 6 }, end: { line: 210, column: 7 } }, type: 'if', locations: [{ start: { line: 200, column: 6 }, end: { line: 210, column: 7 } }, { start: { line: 200, column: 6 }, end: { line: 210, column: 7 } }], line: 200 }, '17': { loc: { start: { line: 205, column: 8 }, end: { line: 207, column: 9 } }, type: 'if', locations: [{ start: { line: 205, column: 8 }, end: { line: 207, column: 9 } }, { start: { line: 205, column: 8 }, end: { line: 207, column: 9 } }], line: 205 }, '18': { loc: { start: { line: 212, column: 6 }, end: { line: 222, column: 7 } }, type: 'if', locations: [{ start: { line: 212, column: 6 }, end: { line: 222, column: 7 } }, { start: { line: 212, column: 6 }, end: { line: 222, column: 7 } }], line: 212 }, '19': { loc: { start: { line: 217, column: 8 }, end: { line: 219, column: 9 } }, type: 'if', locations: [{ start: { line: 217, column: 8 }, end: { line: 219, column: 9 } }, { start: { line: 217, column: 8 }, end: { line: 219, column: 9 } }], line: 217 }, '20': { loc: { start: { line: 224, column: 6 }, end: { line: 234, column: 7 } }, type: 'if', locations: [{ start: { line: 224, column: 6 }, end: { line: 234, column: 7 } }, { start: { line: 224, column: 6 }, end: { line: 234, column: 7 } }], line: 224 }, '21': { loc: { start: { line: 229, column: 8 }, end: { line: 231, column: 9 } }, type: 'if', locations: [{ start: { line: 229, column: 8 }, end: { line: 231, column: 9 } }, { start: { line: 229, column: 8 }, end: { line: 231, column: 9 } }], line: 229 }, '22': { loc: { start: { line: 236, column: 6 }, end: { line: 249, column: 7 } }, type: 'if', locations: [{ start: { line: 236, column: 6 }, end: { line: 249, column: 7 } }, { start: { line: 236, column: 6 }, end: { line: 249, column: 7 } }], line: 236 }, '23': { loc: { start: { line: 241, column: 8 }, end: { line: 243, column: 9 } }, type: 'if', locations: [{ start: { line: 241, column: 8 }, end: { line: 243, column: 9 } }, { start: { line: 241, column: 8 }, end: { line: 243, column: 9 } }], line: 241 }, '24': { loc: { start: { line: 244, column: 8 }, end: { line: 246, column: 9 } }, type: 'if', locations: [{ start: { line: 244, column: 8 }, end: { line: 246, column: 9 } }, { start: { line: 244, column: 8 }, end: { line: 246, column: 9 } }], line: 244 }, '25': { loc: { start: { line: 251, column: 6 }, end: { line: 261, column: 7 } }, type: 'if', locations: [{ start: { line: 251, column: 6 }, end: { line: 261, column: 7 } }, { start: { line: 251, column: 6 }, end: { line: 261, column: 7 } }], line: 251 }, '26': { loc: { start: { line: 256, column: 8 }, end: { line: 258, column: 9 } }, type: 'if', locations: [{ start: { line: 256, column: 8 }, end: { line: 258, column: 9 } }, { start: { line: 256, column: 8 }, end: { line: 258, column: 9 } }], line: 256 }, '27': { loc: { start: { line: 263, column: 6 }, end: { line: 290, column: 7 } }, type: 'if', locations: [{ start: { line: 263, column: 6 }, end: { line: 290, column: 7 } }, { start: { line: 263, column: 6 }, end: { line: 290, column: 7 } }], line: 263 }, '28': { loc: { start: { line: 269, column: 8 }, end: { line: 286, column: 9 } }, type: 'if', locations: [{ start: { line: 269, column: 8 }, end: { line: 286, column: 9 } }, { start: { line: 269, column: 8 }, end: { line: 286, column: 9 } }], line: 269 }, '29': { loc: { start: { line: 272, column: 10 }, end: { line: 274, column: 11 } }, type: 'if', locations: [{ start: { line: 272, column: 10 }, end: { line: 274, column: 11 } }, { start: { line: 272, column: 10 }, end: { line: 274, column: 11 } }], line: 272 }, '30': { loc: { start: { line: 275, column: 10 }, end: { line: 285, column: 11 } }, type: 'if', locations: [{ start: { line: 275, column: 10 }, end: { line: 285, column: 11 } }, { start: { line: 275, column: 10 }, end: { line: 285, column: 11 } }], line: 275 }, '31': { loc: { start: { line: 279, column: 12 }, end: { line: 281, column: 13 } }, type: 'if', locations: [{ start: { line: 279, column: 12 }, end: { line: 281, column: 13 } }, { start: { line: 279, column: 12 }, end: { line: 281, column: 13 } }], line: 279 }, '32': { loc: { start: { line: 282, column: 12 }, end: { line: 284, column: 13 } }, type: 'if', locations: [{ start: { line: 282, column: 12 }, end: { line: 284, column: 13 } }, { start: { line: 282, column: 12 }, end: { line: 284, column: 13 } }], line: 282 }, '33': { loc: { start: { line: 292, column: 6 }, end: { line: 321, column: 7 } }, type: 'if', locations: [{ start: { line: 292, column: 6 }, end: { line: 321, column: 7 } }, { start: { line: 292, column: 6 }, end: { line: 321, column: 7 } }], line: 292 }, '34': { loc: { start: { line: 297, column: 8 }, end: { line: 318, column: 9 } }, type: 'if', locations: [{ start: { line: 297, column: 8 }, end: { line: 318, column: 9 } }, { start: { line: 297, column: 8 }, end: { line: 318, column: 9 } }], line: 297 }, '35': { loc: { start: { line: 300, column: 10 }, end: { line: 311, column: 11 } }, type: 'if', locations: [{ start: { line: 300, column: 10 }, end: { line: 311, column: 11 } }, { start: { line: 300, column: 10 }, end: { line: 311, column: 11 } }], line: 300 }, '36': { loc: { start: { line: 304, column: 12 }, end: { line: 306, column: 13 } }, type: 'if', locations: [{ start: { line: 304, column: 12 }, end: { line: 306, column: 13 } }, { start: { line: 304, column: 12 }, end: { line: 306, column: 13 } }], line: 304 }, '37': { loc: { start: { line: 307, column: 12 }, end: { line: 309, column: 13 } }, type: 'if', locations: [{ start: { line: 307, column: 12 }, end: { line: 309, column: 13 } }, { start: { line: 307, column: 12 }, end: { line: 309, column: 13 } }], line: 307 }, '38': { loc: { start: { line: 312, column: 10 }, end: { line: 314, column: 11 } }, type: 'if', locations: [{ start: { line: 312, column: 10 }, end: { line: 314, column: 11 } }, { start: { line: 312, column: 10 }, end: { line: 314, column: 11 } }], line: 312 }, '39': { loc: { start: { line: 315, column: 10 }, end: { line: 317, column: 11 } }, type: 'if', locations: [{ start: { line: 315, column: 10 }, end: { line: 317, column: 11 } }, { start: { line: 315, column: 10 }, end: { line: 317, column: 11 } }], line: 315 }, '40': { loc: { start: { line: 323, column: 6 }, end: { line: 333, column: 7 } }, type: 'if', locations: [{ start: { line: 323, column: 6 }, end: { line: 333, column: 7 } }, { start: { line: 323, column: 6 }, end: { line: 333, column: 7 } }], line: 323 }, '41': { loc: { start: { line: 328, column: 8 }, end: { line: 330, column: 9 } }, type: 'if', locations: [{ start: { line: 328, column: 8 }, end: { line: 330, column: 9 } }, { start: { line: 328, column: 8 }, end: { line: 330, column: 9 } }], line: 328 }, '42': { loc: { start: { line: 335, column: 6 }, end: { line: 341, column: 7 } }, type: 'if', locations: [{ start: { line: 335, column: 6 }, end: { line: 341, column: 7 } }, { start: { line: 335, column: 6 }, end: { line: 341, column: 7 } }], line: 335 }, '43': { loc: { start: { line: 343, column: 6 }, end: { line: 349, column: 7 } }, type: 'if', locations: [{ start: { line: 343, column: 6 }, end: { line: 349, column: 7 } }, { start: { line: 343, column: 6 }, end: { line: 349, column: 7 } }], line: 343 }, '44': { loc: { start: { line: 351, column: 6 }, end: { line: 362, column: 7 } }, type: 'if', locations: [{ start: { line: 351, column: 6 }, end: { line: 362, column: 7 } }, { start: { line: 351, column: 6 }, end: { line: 362, column: 7 } }], line: 351 }, '45': { loc: { start: { line: 356, column: 8 }, end: { line: 359, column: 9 } }, type: 'if', locations: [{ start: { line: 356, column: 8 }, end: { line: 359, column: 9 } }, { start: { line: 356, column: 8 }, end: { line: 359, column: 9 } }], line: 356 }, '46': { loc: { start: { line: 364, column: 6 }, end: { line: 387, column: 7 } }, type: 'if', locations: [{ start: { line: 364, column: 6 }, end: { line: 387, column: 7 } }, { start: { line: 364, column: 6 }, end: { line: 387, column: 7 } }], line: 364 }, '47': { loc: { start: { line: 369, column: 8 }, end: { line: 384, column: 9 } }, type: 'if', locations: [{ start: { line: 369, column: 8 }, end: { line: 384, column: 9 } }, { start: { line: 369, column: 8 }, end: { line: 384, column: 9 } }], line: 369 }, '48': { loc: { start: { line: 372, column: 10 }, end: { line: 383, column: 11 } }, type: 'if', locations: [{ start: { line: 372, column: 10 }, end: { line: 383, column: 11 } }, { start: { line: 372, column: 10 }, end: { line: 383, column: 11 } }], line: 372 }, '49': { loc: { start: { line: 373, column: 12 }, end: { line: 375, column: 13 } }, type: 'if', locations: [{ start: { line: 373, column: 12 }, end: { line: 375, column: 13 } }, { start: { line: 373, column: 12 }, end: { line: 375, column: 13 } }], line: 373 }, '50': { loc: { start: { line: 389, column: 6 }, end: { line: 402, column: 7 } }, type: 'if', locations: [{ start: { line: 389, column: 6 }, end: { line: 402, column: 7 } }, { start: { line: 389, column: 6 }, end: { line: 402, column: 7 } }], line: 389 }, '51': { loc: { start: { line: 394, column: 8 }, end: { line: 399, column: 9 } }, type: 'if', locations: [{ start: { line: 394, column: 8 }, end: { line: 399, column: 9 } }, { start: { line: 394, column: 8 }, end: { line: 399, column: 9 } }], line: 394 }, '52': { loc: { start: { line: 404, column: 6 }, end: { line: 416, column: 7 } }, type: 'if', locations: [{ start: { line: 404, column: 6 }, end: { line: 416, column: 7 } }, { start: { line: 404, column: 6 }, end: { line: 416, column: 7 } }], line: 404 }, '53': { loc: { start: { line: 409, column: 8 }, end: { line: 413, column: 9 } }, type: 'if', locations: [{ start: { line: 409, column: 8 }, end: { line: 413, column: 9 } }, { start: { line: 409, column: 8 }, end: { line: 413, column: 9 } }], line: 409 }, '54': { loc: { start: { line: 418, column: 6 }, end: { line: 430, column: 7 } }, type: 'if', locations: [{ start: { line: 418, column: 6 }, end: { line: 430, column: 7 } }, { start: { line: 418, column: 6 }, end: { line: 430, column: 7 } }], line: 418 }, '55': { loc: { start: { line: 423, column: 8 }, end: { line: 427, column: 9 } }, type: 'if', locations: [{ start: { line: 423, column: 8 }, end: { line: 427, column: 9 } }, { start: { line: 423, column: 8 }, end: { line: 427, column: 9 } }], line: 423 }, '56': { loc: { start: { line: 432, column: 6 }, end: { line: 444, column: 7 } }, type: 'if', locations: [{ start: { line: 432, column: 6 }, end: { line: 444, column: 7 } }, { start: { line: 432, column: 6 }, end: { line: 444, column: 7 } }], line: 432 }, '57': { loc: { start: { line: 437, column: 8 }, end: { line: 441, column: 9 } }, type: 'if', locations: [{ start: { line: 437, column: 8 }, end: { line: 441, column: 9 } }, { start: { line: 437, column: 8 }, end: { line: 441, column: 9 } }], line: 437 }, '58': { loc: { start: { line: 464, column: 4 }, end: { line: 466, column: 5 } }, type: 'if', locations: [{ start: { line: 464, column: 4 }, end: { line: 466, column: 5 } }, { start: { line: 464, column: 4 }, end: { line: 466, column: 5 } }], line: 464 }, '59': { loc: { start: { line: 470, column: 6 }, end: { line: 478, column: 7 } }, type: 'if', locations: [{ start: { line: 470, column: 6 }, end: { line: 478, column: 7 } }, { start: { line: 470, column: 6 }, end: { line: 478, column: 7 } }], line: 470 }, '60': { loc: { start: { line: 491, column: 6 }, end: { line: 493, column: 7 } }, type: 'if', locations: [{ start: { line: 491, column: 6 }, end: { line: 493, column: 7 } }, { start: { line: 491, column: 6 }, end: { line: 493, column: 7 } }], line: 491 } }, s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0, '23': 0, '24': 0, '25': 0, '26': 0, '27': 0, '28': 0, '29': 0, '30': 0, '31': 0, '32': 0, '33': 0, '34': 0, '35': 0, '36': 0, '37': 0, '38': 0, '39': 0, '40': 0, '41': 0, '42': 0, '43': 0, '44': 0, '45': 0, '46': 0, '47': 0, '48': 0, '49': 0, '50': 0, '51': 0, '52': 0, '53': 0, '54': 0, '55': 0, '56': 0, '57': 0, '58': 0, '59': 0, '60': 0, '61': 0, '62': 0, '63': 0, '64': 0, '65': 0, '66': 0, '67': 0, '68': 0, '69': 0, '70': 0, '71': 0, '72': 0, '73': 0, '74': 0, '75': 0, '76': 0, '77': 0, '78': 0, '79': 0, '80': 0, '81': 0, '82': 0, '83': 0, '84': 0, '85': 0, '86': 0, '87': 0, '88': 0, '89': 0, '90': 0, '91': 0, '92': 0, '93': 0, '94': 0, '95': 0, '96': 0, '97': 0, '98': 0, '99': 0, '100': 0, '101': 0, '102': 0, '103': 0, '104': 0, '105': 0, '106': 0, '107': 0, '108': 0, '109': 0, '110': 0, '111': 0, '112': 0, '113': 0, '114': 0, '115': 0, '116': 0, '117': 0, '118': 0, '119': 0, '120': 0, '121': 0, '122': 0, '123': 0, '124': 0, '125': 0, '126': 0, '127': 0, '128': 0, '129': 0, '130': 0, '131': 0, '132': 0, '133': 0, '134': 0, '135': 0, '136': 0, '137': 0, '138': 0, '139': 0, '140': 0, '141': 0, '142': 0, '143': 0, '144': 0, '145': 0, '146': 0, '147': 0, '148': 0, '149': 0, '150': 0, '151': 0, '152': 0, '153': 0, '154': 0, '155': 0, '156': 0, '157': 0, '158': 0, '159': 0, '160': 0, '161': 0, '162': 0, '163': 0, '164': 0, '165': 0, '166': 0, '167': 0, '168': 0, '169': 0, '170': 0, '171': 0, '172': 0, '173': 0, '174': 0, '175': 0, '176': 0, '177': 0, '178': 0, '179': 0, '180': 0, '181': 0, '182': 0, '183': 0, '184': 0, '185': 0, '186': 0, '187': 0, '188': 0, '189': 0, '190': 0, '191': 0, '192': 0, '193': 0, '194': 0, '195': 0, '196': 0, '197': 0, '198': 0, '199': 0, '200': 0, '201': 0, '202': 0, '203': 0, '204': 0, '205': 0, '206': 0, '207': 0, '208': 0, '209': 0, '210': 0, '211': 0, '212': 0, '213': 0, '214': 0, '215': 0, '216': 0, '217': 0, '218': 0, '219': 0, '220': 0, '221': 0, '222': 0, '223': 0, '224': 0, '225': 0, '226': 0, '227': 0, '228': 0, '229': 0, '230': 0, '231': 0 }, f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, '10': 0 }, b: { '0': [0, 0], '1': [0, 0], '2': [0, 0], '3': [0, 0], '4': [0, 0], '5': [0, 0], '6': [0, 0], '7': [0, 0], '8': [0, 0], '9': [0, 0], '10': [0, 0], '11': [0, 0], '12': [0, 0], '13': [0, 0], '14': [0, 0], '15': [0, 0], '16': [0, 0], '17': [0, 0], '18': [0, 0], '19': [0, 0], '20': [0, 0], '21': [0, 0], '22': [0, 0], '23': [0, 0], '24': [0, 0], '25': [0, 0], '26': [0, 0], '27': [0, 0], '28': [0, 0], '29': [0, 0], '30': [0, 0], '31': [0, 0], '32': [0, 0], '33': [0, 0], '34': [0, 0], '35': [0, 0], '36': [0, 0], '37': [0, 0], '38': [0, 0], '39': [0, 0], '40': [0, 0], '41': [0, 0], '42': [0, 0], '43': [0, 0], '44': [0, 0], '45': [0, 0], '46': [0, 0], '47': [0, 0], '48': [0, 0], '49': [0, 0], '50': [0, 0], '51': [0, 0], '52': [0, 0], '53': [0, 0], '54': [0, 0], '55': [0, 0], '56': [0, 0], '57': [0, 0], '58': [0, 0], '59': [0, 0], '60': [0, 0] }, _coverageSchema: '332fd63041d2c1bcb487cc26dd0d5f7d97098a6c' }, coverage = global[gcv] || (global[gcv] = {}); if (coverage[path] && coverage[path].hash === hash) { return coverage[path]; } coverageData.hash = hash; return coverage[path] = coverageData; }(); cov_293lhq6i0c.s[0]++; var attributeSeparator = function attributeSeparator() { cov_293lhq6i0c.f[0]++; var key = (cov_293lhq6i0c.s[1]++, '[^=]*'); var value = (cov_293lhq6i0c.s[2]++, '"[^"]*"|[^,]*'); var keyvalue = (cov_293lhq6i0c.s[3]++, '(?:' + key + ')=(?:' + value + ')'); cov_293lhq6i0c.s[4]++; return new RegExp('(?:^|,)(' + keyvalue + ')'); }; cov_293lhq6i0c.s[5]++; var parseAttributes = function parseAttributes(attributes) { cov_293lhq6i0c.f[1]++; var attrs = (cov_293lhq6i0c.s[6]++, attributes.split(attributeSeparator())); var result = (cov_293lhq6i0c.s[7]++, {}); var i = (cov_293lhq6i0c.s[8]++, attrs.length); var attr; cov_293lhq6i0c.s[9]++; while (i--) { cov_293lhq6i0c.s[10]++; if (attrs[i] === '') { cov_293lhq6i0c.b[0][0]++; cov_293lhq6i0c.s[11]++; continue; } else { cov_293lhq6i0c.b[0][1]++; } cov_293lhq6i0c.s[12]++; attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1); cov_293lhq6i0c.s[13]++; attr[0] = attr[0].replace(/^\s+|\s+$/g, ''); cov_293lhq6i0c.s[14]++; attr[1] = attr[1].replace(/^\s+|\s+$/g, ''); cov_293lhq6i0c.s[15]++; attr[1] = attr[1].replace(/^['"](.*)['"]$/g, '$1'); cov_293lhq6i0c.s[16]++; result[attr[0]] = attr[1]; } cov_293lhq6i0c.s[17]++; return result; }; var ParseStream = /*#__PURE__*/ function (_Stream) { _inheritsLoose(ParseStream, _Stream); function ParseStream() { var _this; cov_293lhq6i0c.f[2]++; cov_293lhq6i0c.s[18]++; _this = _Stream.call(this) || this; cov_293lhq6i0c.s[19]++; _this.customParsers = []; cov_293lhq6i0c.s[20]++; _this.tagMappers = []; return _this; } var _proto = ParseStream.prototype; _proto.push = function push(line) { var _this2 = this; cov_293lhq6i0c.f[3]++; var match; var event; cov_293lhq6i0c.s[21]++; line = line.trim(); cov_293lhq6i0c.s[22]++; if (line.length === 0) { cov_293lhq6i0c.b[1][0]++; cov_293lhq6i0c.s[23]++; return; } else { cov_293lhq6i0c.b[1][1]++; } cov_293lhq6i0c.s[24]++; if (line[0] !== '#') { cov_293lhq6i0c.b[2][0]++; cov_293lhq6i0c.s[25]++; this.trigger('data', { type: 'uri', uri: line }); cov_293lhq6i0c.s[26]++; return; } else { cov_293lhq6i0c.b[2][1]++; } var newLines = (cov_293lhq6i0c.s[27]++, this.tagMappers.reduce(function (acc, mapper) { cov_293lhq6i0c.f[4]++; var mappedLine = (cov_293lhq6i0c.s[28]++, mapper(line)); cov_293lhq6i0c.s[29]++; if (mappedLine === line) { cov_293lhq6i0c.b[3][0]++; cov_293lhq6i0c.s[30]++; return acc; } else { cov_293lhq6i0c.b[3][1]++; } cov_293lhq6i0c.s[31]++; return acc.concat([mappedLine]); }, [line])); cov_293lhq6i0c.s[32]++; newLines.forEach(function (newLine) { cov_293lhq6i0c.f[5]++; cov_293lhq6i0c.s[33]++; for (var i = 0; i < _this2.customParsers.length; i++) { cov_293lhq6i0c.s[34]++; if (_this2.customParsers[i].call(_this2, newLine)) { cov_293lhq6i0c.b[4][0]++; cov_293lhq6i0c.s[35]++; return; } else { cov_293lhq6i0c.b[4][1]++; } } cov_293lhq6i0c.s[36]++; if (newLine.indexOf('#EXT') !== 0) { cov_293lhq6i0c.b[5][0]++; cov_293lhq6i0c.s[37]++; _this2.trigger('data', { type: 'comment', text: newLine.slice(1) }); cov_293lhq6i0c.s[38]++; return; } else { cov_293lhq6i0c.b[5][1]++; } cov_293lhq6i0c.s[39]++; newLine = newLine.replace('\r', ''); cov_293lhq6i0c.s[40]++; match = /^#EXTM3U/.exec(newLine); cov_293lhq6i0c.s[41]++; if (match) { cov_293lhq6i0c.b[6][0]++; cov_293lhq6i0c.s[42]++; _this2.trigger('data', { type: 'tag', tagType: 'm3u' }); cov_293lhq6i0c.s[43]++; return; } else { cov_293lhq6i0c.b[6][1]++; } cov_293lhq6i0c.s[44]++; match = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(newLine); cov_293lhq6i0c.s[45]++; if (match) { cov_293lhq6i0c.b[7][0]++; cov_293lhq6i0c.s[46]++; event = { type: 'tag', tagType: 'inf' }; cov_293lhq6i0c.s[47]++; if (match[1]) { cov_293lhq6i0c.b[8][0]++; cov_293lhq6i0c.s[48]++; event.duration = parseFloat(match[1]); } else { cov_293lhq6i0c.b[8][1]++; } cov_293lhq6i0c.s[49]++; if (match[2]) { cov_293lhq6i0c.b[9][0]++; cov_293lhq6i0c.s[50]++; event.title = match[2]; } else { cov_293lhq6i0c.b[9][1]++; } cov_293lhq6i0c.s[51]++; _this2.trigger('data', event); cov_293lhq6i0c.s[52]++; return; } else { cov_293lhq6i0c.b[7][1]++; } cov_293lhq6i0c.s[53]++; match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(newLine); cov_293lhq6i0c.s[54]++; if (match) { cov_293lhq6i0c.b[10][0]++; cov_293lhq6i0c.s[55]++; event = { type: 'tag', tagType: 'targetduration' }; cov_293lhq6i0c.s[56]++; if (match[1]) { cov_293lhq6i0c.b[11][0]++; cov_293lhq6i0c.s[57]++; event.duration = parseInt(match[1], 10); } else { cov_293lhq6i0c.b[11][1]++; } cov_293lhq6i0c.s[58]++; _this2.trigger('data', event); cov_293lhq6i0c.s[59]++; return; } else { cov_293lhq6i0c.b[10][1]++; } cov_293lhq6i0c.s[60]++; match = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(newLine); cov_293lhq6i0c.s[61]++; if (match) { cov_293lhq6i0c.b[12][0]++; cov_293lhq6i0c.s[62]++; event = { type: 'tag', tagType: 'totalduration' }; cov_293lhq6i0c.s[63]++; if (match[1]) { cov_293lhq6i0c.b[13][0]++; cov_293lhq6i0c.s[64]++; event.duration = parseInt(match[1], 10); } else { cov_293lhq6i0c.b[13][1]++; } cov_293lhq6i0c.s[65]++; _this2.trigger('data', event); cov_293lhq6i0c.s[66]++; return; } else { cov_293lhq6i0c.b[12][1]++; } cov_293lhq6i0c.s[67]++; match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(newLine); cov_293lhq6i0c.s[68]++; if (match) { cov_293lhq6i0c.b[14][0]++; cov_293lhq6i0c.s[69]++; event = { type: 'tag', tagType: 'version' }; cov_293lhq6i0c.s[70]++; if (match[1]) { cov_293lhq6i0c.b[15][0]++; cov_293lhq6i0c.s[71]++; event.version = parseInt(match[1], 10); } else { cov_293lhq6i0c.b[15][1]++; } cov_293lhq6i0c.s[72]++; _this2.trigger('data', event); cov_293lhq6i0c.s[73]++; return; } else { cov_293lhq6i0c.b[14][1]++; } cov_293lhq6i0c.s[74]++; match = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(newLine); cov_293lhq6i0c.s[75]++; if (match) { cov_293lhq6i0c.b[16][0]++; cov_293lhq6i0c.s[76]++; event = { type: 'tag', tagType: 'media-sequence' }; cov_293lhq6i0c.s[77]++; if (match[1]) { cov_293lhq6i0c.b[17][0]++; cov_293lhq6i0c.s[78]++; event.number = parseInt(match[1], 10); } else { cov_293lhq6i0c.b[17][1]++; } cov_293lhq6i0c.s[79]++; _this2.trigger('data', event); cov_293lhq6i0c.s[80]++; return; } else { cov_293lhq6i0c.b[16][1]++; } cov_293lhq6i0c.s[81]++; match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(newLine); cov_293lhq6i0c.s[82]++; if (match) { cov_293lhq6i0c.b[18][0]++; cov_293lhq6i0c.s[83]++; event = { type: 'tag', tagType: 'discontinuity-sequence' }; cov_293lhq6i0c.s[84]++; if (match[1]) { cov_293lhq6i0c.b[19][0]++; cov_293lhq6i0c.s[85]++; event.number = parseInt(match[1], 10); } else { cov_293lhq6i0c.b[19][1]++; } cov_293lhq6i0c.s[86]++; _this2.trigger('data', event); cov_293lhq6i0c.s[87]++; return; } else { cov_293lhq6i0c.b[18][1]++; } cov_293lhq6i0c.s[88]++; match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(newLine); cov_293lhq6i0c.s[89]++; if (match) { cov_293lhq6i0c.b[20][0]++; cov_293lhq6i0c.s[90]++; event = { type: 'tag', tagType: 'playlist-type' }; cov_293lhq6i0c.s[91]++; if (match[1]) { cov_293lhq6i0c.b[21][0]++; cov_293lhq6i0c.s[92]++; event.playlistType = match[1]; } else { cov_293lhq6i0c.b[21][1]++; } cov_293lhq6i0c.s[93]++; _this2.trigger('data', event); cov_293lhq6i0c.s[94]++; return; } else { cov_293lhq6i0c.b[20][1]++; } cov_293lhq6i0c.s[95]++; match = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(newLine); cov_293lhq6i0c.s[96]++; if (match) { cov_293lhq6i0c.b[22][0]++; cov_293lhq6i0c.s[97]++; event = { type: 'tag', tagType: 'byterange' }; cov_293lhq6i0c.s[98]++; if (match[1]) { cov_293lhq6i0c.b[23][0]++; cov_293lhq6i0c.s[99]++; event.length = parseInt(match[1], 10); } else { cov_293lhq6i0c.b[23][1]++; } cov_293lhq6i0c.s[100]++; if (match[2]) { cov_293lhq6i0c.b[24][0]++; cov_293lhq6i0c.s[101]++; event.offset = parseInt(match[2], 10); } else { cov_293lhq6i0c.b[24][1]++; } cov_293lhq6i0c.s[102]++; _this2.trigger('data', event); cov_293lhq6i0c.s[103]++; return; } else { cov_293lhq6i0c.b[22][1]++; } cov_293lhq6i0c.s[104]++; match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(newLine); cov_293lhq6i0c.s[105]++; if (match) { cov_293lhq6i0c.b[25][0]++; cov_293lhq6i0c.s[106]++; event = { type: 'tag', tagType: 'allow-cache' }; cov_293lhq6i0c.s[107]++; if (match[1]) { cov_293lhq6i0c.b[26][0]++; cov_293lhq6i0c.s[108]++; event.allowed = !/NO/.test(match[1]); } else { cov_293lhq6i0c.b[26][1]++; } cov_293lhq6i0c.s[109]++; _this2.trigger('data', event); cov_293lhq6i0c.s[110]++; return; } else { cov_293lhq6i0c.b[25][1]++; } cov_293lhq6i0c.s[111]++; match = /^#EXT-X-MAP:?(.*)$/.exec(newLine); cov_293lhq6i0c.s[112]++; if (match) { cov_293lhq6i0c.b[27][0]++; cov_293lhq6i0c.s[113]++; event = { type: 'tag', tagType: 'map' }; cov_293lhq6i0c.s[114]++; if (match[1]) { cov_293lhq6i0c.b[28][0]++; var attributes = (cov_293lhq6i0c.s[115]++, parseAttributes(match[1])); cov_293lhq6i0c.s[116]++; if (attributes.URI) { cov_293lhq6i0c.b[29][0]++; cov_293lhq6i0c.s[117]++; event.uri = attributes.URI; } else { cov_293lhq6i0c.b[29][1]++; } cov_293lhq6i0c.s[118]++; if (attributes.BYTERANGE) { cov_293lhq6i0c.b[30][0]++; var _ref = (cov_293lhq6i0c.s[119]++, attributes.BYTERANGE.split('@')), length = _ref[0], offset = _ref[1]; cov_293lhq6i0c.s[120]++; event.byterange = {}; cov_293lhq6i0c.s[121]++; if (length) { cov_293lhq6i0c.b[31][0]++; cov_293lhq6i0c.s[122]++; event.byterange.length = parseInt(length, 10); } else { cov_293lhq6i0c.b[31][1]++; } cov_293lhq6i0c.s[123]++; if (offset) { cov_293lhq6i0c.b[32][0]++; cov_293lhq6i0c.s[124]++; event.byterange.offset = parseInt(offset, 10); } else { cov_293lhq6i0c.b[32][1]++; } } else { cov_293lhq6i0c.b[30][1]++; } } else { cov_293lhq6i0c.b[28][1]++; } cov_293lhq6i0c.s[125]++; _this2.trigger('data', event); cov_293lhq6i0c.s[126]++; return; } else { cov_293lhq6i0c.b[27][1]++; } cov_293lhq6i0c.s[127]++; match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(newLine); cov_293lhq6i0c.s[128]++; if (match) { cov_293lhq6i0c.b[33][0]++; cov_293lhq6i0c.s[129]++; event = { type: 'tag', tagType: 'stream-inf' }; cov_293lhq6i0c.s[130]++; if (match[1]) { cov_293lhq6i0c.b[34][0]++; cov_293lhq6i0c.s[131]++; event.attributes = parseAttributes(match[1]); cov_293lhq6i0c.s[132]++; if (event.attributes.RESOLUTION) { cov_293lhq6i0c.b[35][0]++; var split = (cov_293lhq6i0c.s[133]++, event.attributes.RESOLUTION.split('x')); var resolution = (cov_293lhq6i0c.s[134]++, {}); cov_293lhq6i0c.s[135]++; if (split[0]) { cov_293lhq6i0c.b[36][0]++; cov_293lhq6i0c.s[136]++; resolution.width = parseInt(split[0], 10); } else { cov_293lhq6i0c.b[36][1]++; } cov_293lhq6i0c.s[137]++; if (split[1]) { cov_293lhq6i0c.b[37][0]++; cov_293lhq6i0c.s[138]++; resolution.height = parseInt(split[1], 10); } else { cov_293lhq6i0c.b[37][1]++; } cov_293lhq6i0c.s[139]++; event.attributes.RESOLUTION = resolution; } else { cov_293lhq6i0c.b[35][1]++; } cov_293lhq6i0c.s[140]++; if (event.attributes.BANDWIDTH) { cov_293lhq6i0c.b[38][0]++; cov_293lhq6i0c.s[141]++; event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10); } else { cov_293lhq6i0c.b[38][1]++; } cov_293lhq6i0c.s[142]++; if (event.attributes['PROGRAM-ID']) { cov_293lhq6i0c.b[39][0]++; cov_293lhq6i0c.s[143]++; event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10); } else { cov_293lhq6i0c.b[39][1]++; } } else { cov_293lhq6i0c.b[34][1]++; } cov_293lhq6i0c.s[144]++; _this2.trigger('data', event); cov_293lhq6i0c.s[145]++; return; } else { cov_293lhq6i0c.b[33][1]++; } cov_293lhq6i0c.s[146]++; match = /^#EXT-X-MEDIA:?(.*)$/.exec(newLine); cov_293lhq6i0c.s[147]++; if (match) { cov_293lhq6i0c.b[40][0]++; cov_293lhq6i0c.s[148]++; event = { type: 'tag', tagType: 'media' }; cov_293lhq6i0c.s[149]++; if (match[1]) { cov_293lhq6i0c.b[41][0]++; cov_293lhq6i0c.s[150]++; event.attributes = parseAttributes(match[1]); } else { cov_293lhq6i0c.b[41][1]++; } cov_293lhq6i0c.s[151]++; _this2.trigger('data', event); cov_293lhq6i0c.s[152]++; return; } else { cov_293lhq6i0c.b[40][1]++; } cov_293lhq6i0c.s[153]++; match = /^#EXT-X-ENDLIST/.exec(newLine); cov_293lhq6i0c.s[154]++; if (match) { cov_293lhq6i0c.b[42][0]++; cov_293lhq6i0c.s[155]++; _this2.trigger('data', { type: 'tag', tagType: 'endlist' }); cov_293lhq6i0c.s[156]++; return; } else { cov_293lhq6i0c.b[42][1]++; } cov_293lhq6i0c.s[157]++; match = /^#EXT-X-DISCONTINUITY/.exec(newLine); cov_293lhq6i0c.s[158]++; if (match) { cov_293lhq6i0c.b[43][0]++; cov_293lhq6i0c.s[159]++; _this2.trigger('data', { type: 'tag', tagType: 'discontinuity' }); cov_293lhq6i0c.s[160]++; return; } else { cov_293lhq6i0c.b[43][1]++; } cov_293lhq6i0c.s[161]++; match = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(newLine); cov_293lhq6i0c.s[162]++; if (match) { cov_293lhq6i0c.b[44][0]++; cov_293lhq6i0c.s[163]++; event = { type: 'tag', tagType: 'program-date-time' }; cov_293lhq6i0c.s[164]++; if (match[1]) { cov_293lhq6i0c.b[45][0]++; cov_293lhq6i0c.s[165]++; event.dateTimeString = match[1]; cov_293lhq6i0c.s[166]++; event.dateTimeObject = new Date(match[1]); } else { cov_293lhq6i0c.b[45][1]++; } cov_293lhq6i0c.s[167]++; _this2.trigger('data', event); cov_293lhq6i0c.s[168]++; return; } else { cov_293lhq6i0c.b[44][1]++; } cov_293lhq6i0c.s[169]++; match = /^#EXT-X-KEY:?(.*)$/.exec(newLine); cov_293lhq6i0c.s[170]++; if (match) { cov_293lhq6i0c.b[46][0]++; cov_293lhq6i0c.s[171]++; event = { type: 'tag', tagType: 'key' }; cov_293lhq6i0c.s[172]++; if (match[1]) { cov_293lhq6i0c.b[47][0]++; cov_293lhq6i0c.s[173]++; event.attributes = parseAttributes(match[1]); cov_293lhq6i0c.s[174]++; if (event.attributes.IV) { cov_293lhq6i0c.b[48][0]++; cov_293lhq6i0c.s[175]++; if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') { cov_293lhq6i0c.b[49][0]++; cov_293lhq6i0c.s[176]++; event.attributes.IV = event.attributes.IV.substring(2); } else { cov_293lhq6i0c.b[49][1]++; } cov_293lhq6i0c.s[177]++; event.attributes.IV = event.attributes.IV.match(/.{8}/g); cov_293lhq6i0c.s[178]++; event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16); cov_293lhq6i0c.s[179]++; event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16); cov_293lhq6i0c.s[180]++; event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16); cov_293lhq6i0c.s[181]++; event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16); cov_293lhq6i0c.s[182]++; event.attributes.IV = new Uint32Array(event.attributes.IV); } else { cov_293lhq6i0c.b[48][1]++; } } else { cov_293lhq6i0c.b[47][1]++; } cov_293lhq6i0c.s[183]++; _this2.trigger('data', event); cov_293lhq6i0c.s[184]++; return; } else { cov_293lhq6i0c.b[46][1]++; } cov_293lhq6i0c.s[185]++; match = /^#EXT-X-START:?(.*)$/.exec(newLine); cov_293lhq6i0c.s[186]++; if (match) { cov_293lhq6i0c.b[50][0]++; cov_293lhq6i0c.s[187]++; event = { type: 'tag', tagType: 'start' }; cov_293lhq6i0c.s[188]++; if (match[1]) { cov_293lhq6i0c.b[51][0]++; cov_293lhq6i0c.s[189]++; event.attributes = parseAttributes(match[1]); cov_293lhq6i0c.s[190]++; event.attributes['TIME-OFFSET'] = parseFloat(event.attributes['TIME-OFFSET']); cov_293lhq6i0c.s[191]++; event.attributes.PRECISE = /YES/.test(event.attributes.PRECISE); } else { cov_293lhq6i0c.b[51][1]++; } cov_293lhq6i0c.s[192]++; _this2.trigger('data', event); cov_293lhq6i0c.s[193]++; return; } else { cov_293lhq6i0c.b[50][1]++; } cov_293lhq6i0c.s[194]++; match = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(newLine); cov_293lhq6i0c.s[195]++; if (match) { cov_293lhq6i0c.b[52][0]++; cov_293lhq6i0c.s[196]++; event = { type: 'tag', tagType: 'cue-out-cont' }; cov_293lhq6i0c.s[197]++; if (match[1]) { cov_293lhq6i0c.b[53][0]++; cov_293lhq6i0c.s[198]++; event.data = match[1]; } else { cov_293lhq6i0c.b[53][1]++; cov_293lhq6i0c.s[199]++; event.data = ''; } cov_293lhq6i0c.s[200]++; _this2.trigger('data', event); cov_293lhq6i0c.s[201]++; return; } else { cov_293lhq6i0c.b[52][1]++; } cov_293lhq6i0c.s[202]++; match = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(newLine); cov_293lhq6i0c.s[203]++; if (match) { cov_293lhq6i0c.b[54][0]++; cov_293lhq6i0c.s[204]++; event = { type: 'tag', tagType: 'cue-out' }; cov_293lhq6i0c.s[205]++; if (match[1]) { cov_293lhq6i0c.b[55][0]++; cov_293lhq6i0c.s[206]++; event.data = match[1]; } else { cov_293lhq6i0c.b[55][1]++; cov_293lhq6i0c.s[207]++; event.data = ''; } cov_293lhq6i0c.s[208]++; _this2.trigger('data', event); cov_293lhq6i0c.s[209]++; return; } else { cov_293lhq6i0c.b[54][1]++; } cov_293lhq6i0c.s[210]++; match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(newLine); cov_293lhq6i0c.s[211]++; if (match) { cov_293lhq6i0c.b[56][0]++; cov_293lhq6i0c.s[212]++; event = { type: 'tag', tagType: 'cue-in' }; cov_293lhq6i0c.s[213]++; if (match[1]) { cov_293lhq6i0c.b[57][0]++; cov_293lhq6i0c.s[214]++; event.data = match[1]; } else { cov_293lhq6i0c.b[57][1]++; cov_293lhq6i0c.s[215]++; event.data = ''; } cov_293lhq6i0c.s[216]++; _this2.trigger('data', event); cov_293lhq6i0c.s[217]++; return; } else { cov_293lhq6i0c.b[56][1]++; } cov_293lhq6i0c.s[218]++; _this2.trigger('data', { type: 'tag', data: newLine.slice(4) }); }); }; _proto.addParser = function addParser(_ref2) { var _this3 = this; var expression = _ref2.expression, customType = _ref2.customType, dataParser = _ref2.dataParser, segment = _ref2.segment; cov_293lhq6i0c.f[6]++; cov_293lhq6i0c.s[219]++; if (typeof dataParser !== 'function') { cov_293lhq6i0c.b[58][0]++; cov_293lhq6i0c.s[220]++; dataParser = function dataParser(line) { cov_293lhq6i0c.f[7]++; cov_293lhq6i0c.s[221]++; return line; }; } else { cov_293lhq6i0c.b[58][1]++; } cov_293lhq6i0c.s[222]++; this.customParsers.push(function (line) { cov_293lhq6i0c.f[8]++; var match = (cov_293lhq6i0c.s[223]++, expression.exec(line)); cov_293lhq6i0c.s[224]++; if (match) { cov_293lhq6i0c.b[59][0]++; cov_293lhq6i0c.s[225]++; _this3.trigger('data', { type: 'custom', data: dataParser(line), customType: customType, segment: segment }); cov_293lhq6i0c.s[226]++; return true; } else { cov_293lhq6i0c.b[59][1]++; } }); }; _proto.addTagMapper = function addTagMapper(_ref3) { var expression = _ref3.expression, map = _ref3.map; cov_293lhq6i0c.f[9]++; cov_293lhq6i0c.s[227]++; var mapFn = function mapFn(line) { cov_293lhq6i0c.f[10]++; cov_293lhq6i0c.s[228]++; if (expression.test(line)) { cov_293lhq6i0c.b[60][0]++; cov_293lhq6i0c.s[229]++; return map(line); } else { cov_293lhq6i0c.b[60][1]++; } cov_293lhq6i0c.s[230]++; return line; }; cov_293lhq6i0c.s[231]++; this.tagMappers.push(mapFn); }; return ParseStream; }(Stream); var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; var win; if (typeof window !== "undefined") { win = window; } else if (typeof commonjsGlobal !== "undefined") { win = commonjsGlobal; } else if (typeof self !== "undefined"){ win = self; } else { win = {}; } var window_1 = win; var cov_236w6i1krd = function () { var path = '/Users/poneill/dev/m3u8-parser/src/utils/decode.js', hash = '0972dd9eb663e9f42bec21411f13556698b9af93', Function = function () {}.constructor, global = new Function('return this')(), gcv = '__coverage__', coverageData = { path: '/Users/poneill/dev/m3u8-parser/src/utils/decode.js', statementMap: { '0': { start: { line: 4, column: 24 }, end: { line: 4, column: 50 } }, '1': { start: { line: 5, column: 16 }, end: { line: 5, column: 52 } }, '2': { start: { line: 7, column: 2 }, end: { line: 9, column: 3 } }, '3': { start: { line: 8, column: 4 }, end: { line: 8, column: 43 } }, '4': { start: { line: 10, column: 2 }, end: { line: 10, column: 15 } } }, fnMap: { '0': { name: 'decodeB64ToUint8Array', decl: { start: { line: 3, column: 24 }, end: { line: 3, column: 45 } }, loc: { start: { line: 3, column: 55 }, end: { line: 11, column: 1 } }, line: 3 } }, branchMap: { '0': { loc: { start: { line: 4, column: 36 }, end: { line: 4, column: 49 } }, type: 'binary-expr', locations: [{ start: { line: 4, column: 36 }, end: { line: 4, column: 43 } }, { start: { line: 4, column: 47 }, end: { line: 4, column: 49 } }], line: 4 } }, s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0 }, f: { '0': 0 }, b: { '0': [0, 0] }, _coverageSchema: '332fd63041d2c1bcb487cc26dd0d5f7d97098a6c' }, coverage = global[gcv] || (global[gcv] = {}); if (coverage[path] && coverage[path].hash === hash) { return coverage[path]; } coverageData.hash = hash; return coverage[path] = coverageData; }(); function decodeB64ToUint8Array(b64Text) { cov_236w6i1krd.f[0]++; var decodedString = (cov_236w6i1krd.s[0]++, window_1.atob((cov_236w6i1krd.b[0][0]++, b64Text) || (cov_236w6i1krd.b[0][1]++, ''))); var array = (cov_236w6i1krd.s[1]++, new Uint8Array(decodedString.length)); cov_236w6i1krd.s[2]++; for (var i = 0; i < decodedString.length; i++) { cov_236w6i1krd.s[3]++; array[i] = decodedString.charCodeAt(i); } cov_236w6i1krd.s[4]++; return array; } var cov_1lcwqcbogg = function () { var path = '/Users/poneill/dev/m3u8-parser/src/parser.js', hash = '708177a9baa565243f33a1239b9315c85a3ebfe3', Function = function () {}.constructor, global = new Function('return this')(), gcv = '__coverage__', coverageData = { path: '/Users/poneill/dev/m3u8-parser/src/parser.js', statementMap: { '0': { start: { line: 32, column: 4 }, end: { line: 32, column: 12 } }, '1': { start: { line: 33, column: 4 }, end: { line: 33, column: 39 } }, '2': { start: { line: 34, column: 4 }, end: { line: 34, column: 41 } }, '3': { start: { line: 35, column: 4 }, end: { line: 35, column: 43 } }, '4': { start: { line: 38, column: 17 }, end: { line: 38, column: 21 } }, '5': { start: { line: 40, column: 17 }, end: { line: 40, column: 19 } }, '6': { start: { line: 41, column: 21 }, end: { line: 41, column: 23 } }, '7': { start: { line: 46, column: 17 }, end: { line: 46, column: 30 } }, '8': { start: { line: 47, column: 31 }, end: { line: 52, column: 5 } }, '9': { start: { line: 55, column: 25 }, end: { line: 55, column: 72 } }, '10': { start: { line: 57, column: 26 }, end: { line: 57, column: 27 } }, '11': { start: { line: 60, column: 4 }, end: { line: 64, column: 6 } }, '12': { start: { line: 67, column: 4 }, end: { line: 416, column: 7 } }, '13': { start: { line: 71, column: 6 }, end: { line: 415, column: 32 } }, '14': { start: { line: 74, column: 10 }, end: { line: 375, column: 48 } }, '15': { start: { line: 76, column: 14 }, end: { line: 76, column: 55 } }, '16': { start: { line: 77, column: 14 }, end: { line: 82, column: 15 } }, '17': { start: { line: 78, column: 16 }, end: { line: 80, column: 19 } }, '18': { start: { line: 81, column: 16 }, end: { line: 81, column: 48 } }, '19': { start: { line: 85, column: 32 }, end: { line: 85, column: 34 } }, '20': { start: { line: 87, column: 14 }, end: { line: 97, column: 15 } }, '21': { start: { line: 88, column: 16 }, end: { line: 88, column: 49 } }, '22': { start: { line: 89, column: 16 }, end: { line: 89, column: 48 } }, '23': { start: { line: 91, column: 16 }, end: { line: 96, column: 17 } }, '24': { start: { line: 92, column: 18 }, end: { line: 94, column: 21 } }, '25': { start: { line: 95, column: 18 }, end: { line: 95, column: 35 } }, '26': { start: { line: 98, column: 14 }, end: { line: 101, column: 15 } }, '27': { start: { line: 99, column: 16 }, end: { line: 99, column: 49 } }, '28': { start: { line: 100, column: 16 }, end: { line: 100, column: 48 } }, '29': { start: { line: 104, column: 14 }, end: { line: 104, column: 43 } }, '30': { start: { line: 107, column: 14 }, end: { line: 112, column: 15 } }, '31': { start: { line: 108, column: 16 }, end: { line: 108, column: 48 } }, '32': { start: { line: 109, column: 16 }, end: { line: 111, column: 19 } }, '33': { start: { line: 113, column: 14 }, end: { line: 118, column: 15 } }, '34': { start: { line: 114, column: 16 }, end: { line: 114, column: 56 } }, '35': { start: { line: 115, column: 16 }, end: { line: 117, column: 19 } }, '36': { start: { line: 119, column: 14 }, end: { line: 121, column: 15 } }, '37': { start: { line: 120, column: 16 }, end: { line: 120, column: 53 } }, '38': { start: { line: 123, column: 14 }, end: { line: 128, column: 15 } }, '39': { start: { line: 124, column: 16 }, end: { line: 124, column: 43 } }, '40': { start: { line: 125, column: 16 }, end: { line: 127, column: 19 } }, '41': { start: { line: 130, column: 14 }, end: { line: 130, column: 44 } }, '42': { start: { line: 133, column: 14 }, end: { line: 138, column: 15 } }, '43': { start: { line: 134, column: 16 }, end: { line: 136, column: 19 } }, '44': { start: { line: 137, column: 16 }, end: { line: 137, column: 23 } }, '45': { start: { line: 140, column: 14 }, end: { line: 143, column: 15 } }, '46': { start: { line: 141, column: 16 }, end: { line: 141, column: 27 } }, '47': { start: { line: 142, column: 16 }, end: { line: 142, column: 23 } }, '48': { start: { line: 144, column: 14 }, end: { line: 149, column: 15 } }, '49': { start: { line: 145, column: 16 }, end: { line: 147, column: 19 } }, '50': { start: { line: 148, column: 16 }, end: { line: 148, column: 23 } }, '51': { start: { line: 153, column: 14 }, end: { line: 197, column: 15 } }, '52': { start: { line: 154, column: 38 }, end: { line: 154, column: 89 } }, '53': { start: { line: 156, column: 16 }, end: { line: 161, column: 17 } }, '54': { start: { line: 157, column: 18 }, end: { line: 159, column: 21 } }, '55': { start: { line: 160, column: 18 }, end: { line: 160, column: 25 } }, '56': { start: { line: 163, column: 16 }, end: { line: 167, column: 17 } }, '57': { start: { line: 164, column: 18 }, end: { line: 166, column: 21 } }, '58': { start: { line: 169, column: 16 }, end: { line: 174, column: 17 } }, '59': { start: { line: 170, column: 18 }, end: { line: 172, column: 21 } }, '60': { start: { line: 173, column: 18 }, end: { line: 173, column: 25 } }, '61': { start: { line: 176, column: 16 }, end: { line: 181, column: 17 } }, '62': { start: { line: 177, column: 18 }, end: { line: 179, column: 21 } }, '63': { start: { line: 180, column: 18 }, end: { line: 180, column: 25 } }, '64': { start: { line: 185, column: 16 }, end: { line: 195, column: 18 } }, '65': { start: { line: 196, column: 16 }, end: { line: 196, column: 23 } }, '66': { start: { line: 199, column: 14 }, end: { line: 203, column: 15 } }, '67': { start: { line: 200, column: 16 }, end: { line: 202, column: 19 } }, '68': { start: { line: 206, column: 14 }, end: { line: 209, column: 16 } }, '69': { start: { line: 211, column: 14 }, end: { line: 213, column: 15 } }, '70': { start: { line: 212, column: 16 }, end: { line: 212, column: 45 } }, '71': { start: { line: 216, column: 14 }, end: { line: 221, column: 15 } }, '72': { start: { line: 217, column: 16 }, end: { line: 219, column: 19 } }, '73': { start: { line: 220, column: 16 }, end: { line: 220, column: 23 } }, '74': { start: { line: 222, column: 14 }, end: { line: 222, column: 57 } }, '75': { start: { line: 225, column: 14 }, end: { line: 230, column: 15 } }, '76': { start: { line: 226, column: 16 }, end: { line: 228, column: 19 } }, '77': { start: { line: 229, column: 16 }, end: { line: 229, column: 23 } }, '78': { start: { line: 231, column: 14 }, end: { line: 231, column: 65 } }, '79': { start: { line: 232, column: 14 }, end: { line: 232, column: 45 } }, '80': { start: { line: 235, column: 14 }, end: { line: 240, column: 15 } }, '81': { start: { line: 236, column: 16 }, end: { line: 238, column: 19 } }, '82': { start: { line: 239, column: 16 }, end: { line: 239, column: 23 } }, '83': { start: { line: 241, column: 14 }, end: { line: 241, column: 62 } }, '84': { start: { line: 244, column: 14 }, end: { line: 244, column: 30 } }, '85': { start: { line: 245, column: 14 }, end: { line: 247, column: 15 } }, '86': { start: { line: 246, column: 16 }, end: { line: 246, column: 43 } }, '87': { start: { line: 248, column: 14 }, end: { line: 250, column: 15 } }, '88': { start: { line: 249, column: 16 }, end: { line: 249, column: 55 } }, '89': { start: { line: 253, column: 14 }, end: { line: 253, column: 45 } }, '90': { start: { line: 254, column: 14 }, end: { line: 255, column: 64 } }, '91': { start: { line: 257, column: 14 }, end: { line: 262, column: 15 } }, '92': { start: { line: 258, column: 16 }, end: { line: 260, column: 19 } }, '93': { start: { line: 261, column: 16 }, end: { line: 261, column: 23 } }, '94': { start: { line: 264, column: 14 }, end: { line: 266, column: 15 } }, '95': { start: { line: 265, column: 16 }, end: { line: 265, column: 43 } }, '96': { start: { line: 267, column: 14 }, end: { line: 267, column: 69 } }, '97': { start: { line: 270, column: 14 }, end: { line: 271, column: 64 } }, '98': { start: { line: 273, column: 14 }, end: { line: 281, column: 15 } }, '99': { start: { line: 277, column: 16 }, end: { line: 279, column: 19 } }, '100': { start: { line: 280, column: 16 }, end: { line: 280, column: 23 } }, '101': { start: { line: 284, column: 37 }, end: { line: 284, column: 85 } }, '102': { start: { line: 286, column: 14 }, end: { line: 287, column: 67 } }, '103': { start: { line: 288, column: 14 }, end: { line: 288, column: 72 } }, '104': { start: { line: 291, column: 14 }, end: { line: 293, column: 16 } }, '105': { start: { line: 294, column: 14 }, end: { line: 298, column: 15 } }, '106': { start: { line: 295, column: 16 }, end: { line: 295, column: 44 } }, '107': { start: { line: 297, column: 16 }, end: { line: 297, column: 82 } }, '108': { start: { line: 299, column: 14 }, end: { line: 301, column: 15 } }, '109': { start: { line: 300, column: 16 }, end: { line: 300, column: 63 } }, '110': { start: { line: 302, column: 14 }, end: { line: 304, column: 15 } }, '111': { start: { line: 303, column: 16 }, end: { line: 303, column: 53 } }, '112': { start: { line: 305, column: 14 }, end: { line: 307, column: 15 } }, '113': { start: { line: 306, column: 16 }, end: { line: 306, column: 71 } }, '114': { start: { line: 308, column: 14 }, end: { line: 310, column: 15 } }, '115': { start: { line: 309, column: 16 }, end: { line: 309, column: 77 } }, '116': { start: { line: 311, column: 14 }, end: { line: 313, column: 15 } }, '117': { start: { line: 312, column: 16 }, end: { line: 312, column: 74 } }, '118': { start: { line: 316, column: 14 }, end: { line: 316, column: 60 } }, '119': { start: { line: 319, column: 14 }, end: { line: 319, column: 35 } }, '120': { start: { line: 320, column: 14 }, end: { line: 320, column: 46 } }, '121': { start: { line: 321, column: 14 }, end: { line: 321, column: 66 } }, '122': { start: { line: 324, column: 14 }, end: { line: 331, column: 15 } }, '123': { start: { line: 329, column: 16 }, end: { line: 329, column: 68 } }, '124': { start: { line: 330, column: 16 }, end: { line: 330, column: 68 } }, '125': { start: { line: 333, column: 14 }, end: { line: 333, column: 63 } }, '126': { start: { line: 334, column: 14 }, end: { line: 334, column: 63 } }, '127': { start: { line: 337, column: 14 }, end: { line: 342, column: 15 } }, '128': { start: { line: 338, column: 16 }, end: { line: 340, column: 19 } }, '129': { start: { line: 341, column: 16 }, end: { line: 341, column: 23 } }, '130': { start: { line: 343, column: 14 }, end: { line: 343, column: 60 } }, '131': { start: { line: 346, column: 14 }, end: { line: 351, column: 15 } }, '132': { start: { line: 347, column: 16 }, end: { line: 349, column: 19 } }, '133': { start: { line: 350, column: 16 }, end: { line: 350, column: 23 } }, '134': { start: { line: 352, column: 14 }, end: { line: 352, column: 59 } }, '135': { start: { line: 355, column: 14 }, end: { line: 360, column: 15 } }, '136': { start: { line: 356, column: 16 }, end: { line: 358, column: 19 } }, '137': { start: { line: 359, column: 16 }, end: { line: 359, column: 23 } }, '138': { start: { line: 361, column: 14 }, end: { line: 364, column: 16 } }, '139': { start: { line: 367, column: 14 }, end: { line: 367, column: 45 } }, '140': { start: { line: 370, column: 14 }, end: { line: 370, column: 49 } }, '141': { start: { line: 373, column: 14 }, end: { line: 373, column: 44 } }, '142': { start: { line: 378, column: 10 }, end: { line: 378, column: 37 } }, '143': { start: { line: 379, column: 10 }, end: { line: 379, column: 32 } }, '144': { start: { line: 382, column: 10 }, end: { line: 387, column: 11 } }, '145': { start: { line: 383, column: 12 }, end: { line: 385, column: 15 } }, '146': { start: { line: 386, column: 12 }, end: { line: 386, column: 63 } }, '147': { start: { line: 389, column: 10 }, end: { line: 391, column: 11 } }, '148': { start: { line: 390, column: 12 }, end: { line: 390, column: 33 } }, '149': { start: { line: 392, column: 10 }, end: { line: 392, column: 48 } }, '150': { start: { line: 394, column: 10 }, end: { line: 396, column: 11 } }, '151': { start: { line: 395, column: 12 }, end: { line: 395, column: 40 } }, '152': { start: { line: 399, column: 10 }, end: { line: 399, column: 26 } }, '153': { start: { line: 406, column: 10 }, end: { line: 413, column: 11 } }, '154': { start: { line: 407, column: 12 }, end: { line: 407, column: 56 } }, '155': { start: { line: 408, column: 12 }, end: { line: 408, column: 61 } }, '156': { start: { line: 411, column: 12 }, end: { line: 411, column: 62 } }, '157': { start: { line: 412, column: 12 }, end: { line: 412, column: 64 } }, '158': { start: { line: 425, column: 4 }, end: { line: 425, column: 32 } }, '159': { start: { line: 435, column: 4 }, end: { line: 435, column: 31 } }, '160': { start: { line: 447, column: 4 }, end: { line: 447, column: 40 } }, '161': { start: { line: 457, column: 4 }, end: { line: 457, column: 43 } } }, fnMap: { '0': { name: '(anonymous_0)', decl: { start: { line: 31, column: 2 }, end: { line: 31, column: 3 } }, loc: { start: { line: 31, column: 16 }, end: { line: 417, column: 3 } }, line: 31 }, '1': { name: '(anonymous_1)', decl: { start: { line: 46, column: 17 }, end: { line: 46, column: 18 } }, loc: { start: { line: 46, column: 28 }, end: { line: 46, column: 30 } }, line: 46 }, '2': { name: '(anonymous_2)', decl: { start: { line: 67, column: 32 }, end: { line: 67, column: 33 } }, loc: { start: { line: 67, column: 48 }, end: { line: 416, column: 5 } }, line: 67 }, '3': { name: '(anonymous_3)', decl: { start: { line: 424, column: 2 }, end: { line: 424, column: 3 } }, loc: { start: { line: 424, column: 14 }, end: { line: 426, column: 3 } }, line: 424 }, '4': { name: '(anonymous_4)', decl: { start: { line: 433, column: 2 }, end: { line: 433, column: 3 } }, loc: { start: { line: 433, column: 8 }, end: { line: 436, column: 3 } }, line: 433 }, '5': { name: '(anonymous_5)', decl: { start: { line: 446, column: 2 }, end: { line: 446, column: 3 } }, loc: { start: { line: 446, column: 21 }, end: { line: 448, column: 3 } }, line: 446 }, '6': { name: '(anonymous_6)', decl: { start: { line: 456, column: 2 }, end: { line: 456, column: 3 } }, loc: { start: { line: 456, column: 24 }, end: { line: 458, column: 3 } }, line: 456 } }, branchMap: { '0': { loc: { start: { line: 74, column: 11 }, end: { line: 375, column: 35 } }, type: 'binary-expr', locations: [{ start: { line: 74, column: 11 }, end: { line: 375, column: 27 } }, { start: { line: 375, column: 31 }, end: { line: 375, column: 35 } }], line: 74 }, '1': { loc: { start: { line: 77, column: 14 }, end: { line: 82, column: 15 } }, type: 'if', locations: [{ start: { line: 77, column: 14 }, end: { line: 82, column: 15 } }, { start: { line: 77, column: 14 }, end: { line: 82, column: 15 } }], line: 77 }, '2': { loc: { start: { line: 87, column: 14 }, end: { line: 97, column: 15 } }, type: 'if', locations: [{ start: { line: 87, column: 14 }, end: { line: 97, column: 15 } }, { start: { line: 87, column: 14 }, end: { line: 97, column: 15 } }], line: 87 }, '3': { loc: { start: { line: 91, column: 16 }, end: { line: 96, column: 17 } }, type: 'if', locations: [{ start: { line: 91, column: 16 }, end: { line: 96, column: 17 } }, { start: { line: 91, column: 16 }, end: { line: 96, column: 17 } }], line: 91 }, '4': { loc: { start: { line: 98, column: 14 }, end: { line: 101, column: 15 } }, type: 'if', locations: [{ start: { line: 98, column: 14 }, end: { line: 101, column: 15 } }, { start: { line: 98, column: 14 }, end: { line: 101, column: 15 } }], line: 98 }, '5': { loc: { start: { line: 107, column: 14 }, end: { line: 112, column: 15 } }, type: 'if', locations: [{ start: { line: 107, column: 14 }, end: { line: 112, column: 15 } }, { start: { line: 107, column: 14 }, end: { line: 112, column: 15 } }], line: 107 }, '6': { loc: { start: { line: 113, column: 14 }, end: { line: 118, column: 15 } }, type: 'if', locations: [{ start: { line: 113, column: 14 }, end: { line: 118, column: 15 } }, { start: { line: 113, column: 14 }, end: { line: 118, column: 15 } }], line: 113 }, '7': { loc: { start: { line: 119, column: 14 }, end: { line: 121, column: 15 } }, type: 'if', locations: [{ start: { line: 119, column: 14 }, end: { line: 121, column: 15 } }, { start: { line: 119, column: 14 }, end: { line: 121, column: 15 } }], line: 119 }, '8': { loc: { start: { line: 123, column: 14 }, end: { line: 128, column: 15 } }, type: 'if', locations: [{ start: { line: 123, column: 14 }, end: { line: 128, column: 15 } }, { start: { line: 123, column: 14 }, end: { line: 128, column: 15 } }], line: 123 }, '9': { loc: { start: { line: 133, column: 14 }, end: { line: 138, column: 15 } }, type: 'if', locations: [{ start: { line: 133, column: 14 }, end: { line: 138, column: 15 } }, { start: { line: 133, column: 14 }, end: { line: 138, column: 15 } }], line: 133 }, '10': { loc: { start: { line: 140, column: 14 }, end: { line: 143, column: 15 } }, type: 'if', locations: [{ start: { line: 140, column: 14 }, end: { line: 143, column: 15 } }, { start: { line: 140, column: 14 }, end: { line: 143, column: 15 } }], line: 140 }, '11': { loc: { start: { line: 144, column: 14 }, end: { line: 149, column: 15 } }, type: 'if', locations: [{ start: { line: 144, column: 14 }, end: { line: 149, column: 15 } }, { start: { line: 144, column: 14 }, end: { line: 149, column: 15 } }], line: 144 }, '12': { loc: { start: { line: 153, column: 14 }, end: { line: 197, column: 15 } }, type: 'if', locations: [{ start: { line: 153, column: 14 }, end: { line: 197, column: 15 } }, { start: { line: 153, column: 14 }, end: { line: 197, column: 15 } }], line: 153 }, '13': { loc: { start: { line: 156, column: 16 }, end: { line: 161, column: 17 } }, type: 'if', locations: [{ start: { line: 156, column: 16 }, end: { line: 161, column: 17 } }, { start: { line: 156, column: 16 }, end: { line: 161, column: 17 } }], line: 156 }, '14': { loc: { start: { line: 163, column: 16 }, end: { line: 167, column: 17 } }, type: 'if', locations: [{ start: { line: 163, column: 16 }, end: { line: 167, column: 17 } }, { start: { line: 163, column: 16 }, end: { line: 167, column: 17 } }], line: 163 }, '15': { loc: { start: { line: 169, column: 16 }, end: { line: 174, column: 17 } }, type: 'if', locations: [{ start: { line: 169, column: 16 }, end: { line: 174, column: 17 } }, { start: { line: 169, column: 16 }, end: { line: 174, column: 17 } }], line: 169 }, '16': { loc: { start: { line: 176, column: 16 }, end: { line: 181, column: 17 } }, type: 'if', locations: [{ start: { line: 176, column: 16 }, end: { line: 181, column: 17 } }, { start: { line: 176, column: 16 }, end: { line: 181, column: 17 } }], line: 176 }, '17': { loc: { start: { line: 176, column: 22 }, end: { line: 176, column: 95 } }, type: 'binary-expr', locations: [{ start: { line: 176, column: 22 }, end: { line: 176, column: 44 } }, { start: { line: 176, column: 48 }, end: { line: 176, column: 95 } }], line: 176 }, '18': { loc: { start: { line: 199, column: 14 }, end: { line: 203, column: 15 } }, type: 'if', locations: [{ start: { line: 199, column: 14 }, end: { line: 203, column: 15 } }, { start: { line: 199, column: 14 }, end: { line: 203, column: 15 } }], line: 199 }, '19': { loc: { start: { line: 207, column: 24 }, end: { line: 207, column: 60 } }, type: 'binary-expr', locations: [{ start: { line: 207, column: 24 }, end: { line: 207, column: 47 } }, { start: { line: 207, column: 51 }, end: { line: 207, column: 60 } }], line: 207 }, '20': { loc: { start: { line: 211, column: 14 }, end: { line: 213, column: 15 } }, type: 'if', locations: [{ start: { line: 211, column: 14 }, end: { line: 213, column: 15 } }, { start: { line: 211, column: 14 }, end: { line: 213, column: 15 } }], line: 211 }, '21': { loc: { start: { line: 216, column: 14 }, end: { line: 221, column: 15 } }, type: 'if', locations: [{ start: { line: 216, column: 14 }, end: { line: 221, column: 15 } }, { start: { line: 216, column: 14 }, end: { line: 221, column: 15 } }], line: 216 }, '22': { loc: { start: { line: 225, column: 14 }, end: { line: 230, column: 15 } }, type: 'if', locations: [{ start: { line: 225, column: 14 }, end: { line: 230, column: 15 } }, { start: { line: 225, column: 14 }, end: { line: 230, column: 15 } }], line: 225 }, '23': { loc: { start: { line: 235, column: 14 }, end: { line: 240, column: 15 } }, type: 'if', locations: [{ start: { line: 235, column: 14 }, end: { line: 240, column: 15 } }, { start: { line: 235, column: 14 }, end: { line: 240, column: 15 } }], line: 235 }, '24': { loc: { start: { line: 245, column: 14 }, end: { line: 247, column: 15 } }, type: 'if', locations: [{ start: { line: 245, column: 14 }, end: { line: 247, column: 15 } }, { start: { line: 245, column: 14 }, end: { line: 247, column: 15 } }], line: 245 }, '25': { loc: { start: { line: 248, column: 14 }, end: { line: 250, column: 15 } }, type: 'if', locations: [{ start: { line: 248, column: 14 }, end: { line: 250, column: 15 } }, { start: { line: 248, column: 14 }, end: { line: 250, column: 15 } }], line: 248 }, '26': { loc: { start: { line: 255, column: 16 }, end: { line: 255, column: 63 } }, type: 'binary-expr', locations: [{ start: { line: 255, column: 16 }, end: { line: 255, column: 41 } }, { start: { line: 255, column: 45 }, end: { line: 255, column: 63 } }], line: 255 }, '27': { loc: { start: { line: 257, column: 14 }, end: { line: 262, column: 15 } }, type: 'if', locations: [{ start: { line: 257, column: 14 }, end: { line: 262, column: 15 } }, { start: { line: 257, column: 14 }, end: { line: 262, column: 15 } }], line: 257 }, '28': { loc: { start: { line: 264, column: 14 }, end: { line: 266, column: 15 } }, type: 'if', locations: [{ start: { line: 264, column: 14 }, end: { line: 266, column: 15 } }, { start: { line: 264, column: 14 }, end: { line: 266, column: 15 } }], line: 264 }, '29': { loc: { start: { line: 271, column: 16 }, end: { line: 271, column: 63 } }, type: 'binary-expr', locations: [{ start: { line: 271, column: 16 }, end: { line: 271, column: 41 } }, { start: { line: 271, column: 45 }, end: { line: 271, column: 63 } }], line: 271 }, '30': { loc: { start: { line: 273, column: 14 }, end: { line: 281, column: 15 } }, type: 'if', locations: [{ start: { line: 273, column: 14 }, end: { line: 281, column: 15 } }, { start: { line: 273, column: 14 }, end: { line: 281, column: 15 } }], line: 273 }, '31': { loc: { start: { line: 273, column: 20 }, end: { line: 276, column: 41 } }, type: 'binary-expr', locations: [{ start: { line: 273, column: 20 }, end: { line: 273, column: 36 } }, { start: { line: 274, column: 20 }, end: { line: 274, column: 41 } }, { start: { line: 275, column: 20 }, end: { line: 275, column: 48 } }, { start: { line: 276, column: 20 }, end: { line: 276, column: 41 } }], line: 273 }, '32': { loc: { start: { line: 287, column: 16 }, end: { line: 287, column: 66 } }, type: 'binary-expr', locations: [{ start: { line: 287, column: 16 }, end: { line: 287, column: 60 } }, { start: { line: 287, column: 64 }, end: { line: 287, column: 66 } }], line: 287 }, '33': { loc: { start: { line: 294, column: 14 }, end: { line: 298, column: 15 } }, type: 'if', locations: [{ start: { line: 294, column: 14 }, end: { line: 298, column: 15 } }, { start: { line: 294, column: 14 }, end: { line: 298, column: 15 } }], line: 294 }, '34': { loc: { start: { line: 299, column: 14 }, end: { line: 301, column: 15 } }, type: 'if', locations: [{ start: { line: 299, column: 14 }, end: { line: 301, column: 15 } }, { start: { line: 299, column: 14 }, end: { line: 301, column: 15 } }], line: 299 }, '35': { loc: { start: { line: 302, column: 14 }, end: { line: 304, column: 15 } }, type: 'if', locations: [{ start: { line: 302, column: 14 }, end: { line: 304, column: 15 } }, { start: { line: 302, column: 14 }, end: { line: 304, column: 15 } }], line: 302 }, '36': { loc: { start: { line: 305, column: 14 }, end: { line: 307, column: 15 } }, type: 'if', locations: [{ start: { line: 305, column: 14 }, end: { line: 307, column: 15 } }, { start: { line: 305, column: 14 }, end: { line: 307, column: 15 } }], line: 305 }, '37': { loc: { start: { line: 308, column: 14 }, end: { line: 310, column: 15 } }, type: 'if', locations: [{ start: { line: 308, column: 14 }, end: { line: 310, column: 15 } }, { start: { line: 308, column: 14 }, end: { line: 310, column: 15 } }], line: 308 }, '38': { loc: { start: { line: 311, column: 14 }, end: { line: 313, column: 15 } }, type: 'if', locations: [{ start: { line: 311, column: 14 }, end: { line: 313, column: 15 } }, { start: { line: 311, column: 14 }, end: { line: 313, column: 15 } }], line: 311 }, '39': { loc: { start: { line: 324, column: 14 }, end: { line: 331, column: 15 } }, type: 'if', locations: [{ start: { line: 324, column: 14 }, end: { line: 331, column: 15 } }, { start: { line: 324, column: 14 }, end: { line: 331, column: 15 } }], line: 324 }, '40': { loc: { start: { line: 337, column: 14 }, end: { line: 342, column: 15 } }, type: 'if', locations: [{ start: { line: 337, column: 14 }, end: { line: 342, column: 15 } }, { start: { line: 337, column: 14 }, end: { line: 342, column: 15 } }], line: 337 }, '41': { loc: { start: { line: 337, column: 18 }, end: { line: 337, column: 65 } }, type: 'binary-expr', locations: [{ start: { line: 337, column: 18 }, end: { line: 337, column: 43 } }, { start: { line: 337, column: 47 }, end: { line: 337, column: 65 } }], line: 337 }, '42': { loc: { start: { line: 346, column: 14 }, end: { line: 351, column: 15 } }, type: 'if', locations: [{ start: { line: 346, column: 14 }, end: { line: 351, column: 15 } }, { start: { line: 346, column: 14 }, end: { line: 351, column: 15 } }], line: 346 }, '43': { loc: { start: { line: 346, column: 18 }, end: { line: 346, column: 65 } }, type: 'binary-expr', locations: [{ start: { line: 346, column: 18 }, end: { line: 346, column: 43 } }, { start: { line: 346, column: 47 }, end: { line: 346, column: 65 } }], line: 346 }, '44': { loc: { start: { line: 355, column: 14 }, end: { line: 360, column: 15 } }, type: 'if', locations: [{ start: { line: 355, column: 14 }, end: { line: 360, column: 15 } }, { start: { line: 355, column: 14 }, end: { line: 360, column: 15 } }], line: 355 }, '45': { loc: { start: { line: 355, column: 18 }, end: { line: 355, column: 77 } }, type: 'binary-expr', locations: [{ start: { line: 355, column: 18 }, end: { line: 355, column: 35 } }, { start: { line: 355, column: 39 }, end: { line: 355, column: 77 } }], line: 355 }, '46': { loc: { start: { line: 382, column: 10 }, end: { line: 387, column: 11 } }, type: 'if', locations: [{ start: { line: 382, column: 10 }, end: { line: 387, column: 11 } }, { start: { line: 382, column: 10 }, end: { line: 387, column: 11 } }], line: 382 }, '47': { loc: { start: { line: 382, column: 14 }, end: { line: 382, column: 73 } }, type: 'binary-expr', locations: [{ start: { line: 382, column: 14 }, end: { line: 382, column: 42 } }, { start: { line: 382, column: 46 }, end: { line: 382, column: 73 } }], line: 382 }, '48': { loc: { start: { line: 389, column: 10 }, end: { line: 391, column: 11 } }, type: 'if', locations: [{ start: { line: 389, column: 10 }, end: { line: 391, column: 11 } }, { start: { line: 389, column: 10 }, end: { line: 391, column: 11 } }], line: 389 }, '49': { loc: { start: { line: 394, column: 10 }, end: { line: 396, column: 11 } }, type: 'if', locations: [{ start: { line: 394, column: 10 }, end: { line: 396, column: 11 } }, { start: { line: 394, column: 10 }, end: { line: 396, column: 11 } }], line: 394 }, '50': { loc: { start: { line: 406, column: 10 }, end: { line: 413, column: 11 } }, type: 'if', locations: [{ start: { line: 406, column: 10 }, end: { line: 413, column: 11 } }, { start: { line: 406, column: 10 }, end: { line: 413, column: 11 } }], line: 406 }, '51': { loc: { start: { line: 407, column: 32 }, end: { line: 407, column: 55 } }, type: 'binary-expr', locations: [{ start: { line: 407, column: 32 }, end: { line: 407, column: 49 } }, { start: { line: 407, column: 53 }, end: { line: 407, column: 55 } }], line: 407 }, '52': { loc: { start: { line: 411, column: 35 }, end: { line: 411, column: 61 } }, type: 'binary-expr', locations: [{ start: { line: 411, column: 35 }, end: { line: 411, column: 55 } }, { start: { line: 411, column: 59 }, end: { line: 411, column: 61 } }], line: 411 } }, s: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0, '7': 0, '8': 0, '9': 0, '10': 0, '11': 0, '12': 0, '13': 0, '14': 0, '15': 0, '16': 0, '17': 0, '18': 0, '19': 0, '20': 0, '21': 0, '22': 0, '23': 0, '24': 0, '25': 0, '26': 0, '27': 0, '28': 0, '29': 0, '30': 0, '31': 0, '32': 0, '33': 0, '34': 0, '35': 0, '36': 0, '37': 0, '38': 0, '39': 0, '40': 0, '41': 0, '42': 0, '43': 0, '44': 0, '45': 0, '46': 0, '47': 0, '48': 0, '49': 0, '50': 0, '51': 0, '52': 0, '53': 0, '54': 0, '55': 0, '56': 0, '57': 0, '58': 0, '59': 0, '60': 0, '61': 0, '62': 0, '63': 0, '64': 0, '65': 0, '66': 0, '67': 0, '68': 0, '69': 0, '70': 0, '71': 0, '72': 0, '73': 0, '74': 0, '75': 0, '76': 0, '77': 0, '78': 0, '79': 0, '80': 0, '81': 0, '82': 0, '83': 0, '84': 0, '85': 0, '86': 0, '87': 0, '88': 0, '89': 0, '90': 0, '91': 0, '92': 0, '93': 0, '94': 0, '95': 0, '96': 0, '97': 0, '98': 0, '99': 0, '100': 0, '101': 0, '102': 0, '103': 0, '104': 0, '105': 0, '106': 0, '107': 0, '108': 0, '109': 0, '110': 0, '111': 0, '112': 0, '113': 0, '114': 0, '115': 0, '116': 0, '117': 0, '118': 0, '119': 0, '120': 0, '121': 0, '122': 0, '123': 0, '124': 0, '125': 0, '126': 0, '127': 0, '128': 0, '129': 0, '130': 0, '131': 0, '132': 0, '133': 0, '134': 0, '135': 0, '136': 0, '137': 0, '138': 0, '139': 0, '140': 0, '141': 0, '142': 0, '143': 0, '144': 0, '145': 0, '146': 0, '147': 0, '148': 0, '149': 0, '150': 0, '151': 0, '152': 0, '153': 0, '154': 0, '155': 0, '156': 0, '157': 0, '158': 0, '159': 0, '160': 0, '161': 0 }, f: { '0': 0, '1': 0, '2': 0, '3': 0, '4': 0, '5': 0, '6': 0 }, b: { '0': [0, 0], '1': [0, 0], '2': [0, 0], '3': [0, 0], '4': [0, 0], '5': [0, 0], '6': [0, 0], '7': [0, 0], '8': [0, 0], '9': [0, 0], '10': [0, 0], '11': [0, 0], '12': [0, 0], '13': [0, 0], '14': [0, 0], '15': [0, 0], '16': [0, 0], '17': [0, 0], '18': [0, 0], '19': [0, 0], '20': [0, 0], '21': [0, 0], '22': [0, 0], '23': [0, 0], '24': [0, 0], '25': [0, 0], '26': [0, 0], '27': [0, 0], '28': [0, 0], '29': [0, 0], '30': [0, 0], '31': [0, 0, 0, 0], '32': [0, 0], '33': [0, 0], '34': [0, 0], '35': [0, 0], '36': [0, 0], '37': [0, 0], '38': [0, 0], '39': [0, 0], '40': [0, 0], '41': [0, 0], '42': [0, 0], '43': [0, 0], '44': [0, 0], '45': [0, 0], '46': [0, 0], '47': [0, 0], '48': [0, 0], '49': [0, 0], '50': [0, 0], '51': [0, 0], '52': [0, 0] }, _coverageSchema: '332fd63041d2c1bcb487cc26dd0d5f7d97098a6c' }, coverage = global[gcv] || (global[gcv] = {}); if (coverage[path] && coverage[path].hash === hash) { return coverage[path]; } coverageData.hash = hash; return coverage[path] = coverageData; }(); var Parser = /*#__PURE__*/ function (_Stream) { _inheritsLoose(Parser, _Stream); function Parser() { var _this; cov_1lcwqcbogg.f[0]++; cov_1lcwqcbogg.s[0]++; _this = _Stream.call(this) || this; cov_1lcwqcbogg.s[1]++; _this.lineStream = new LineStream(); cov_1lcwqcbogg.s[2]++; _this.parseStream = new ParseStream(); cov_1lcwqcbogg.s[3]++; _this.lineStream.pipe(_this.parseStream); var self = (cov_1lcwqcbogg.s[4]++, _assertThisInitialized(_this)); var uris = (cov_1lcwqcbogg.s[5]++, []); var currentUri = (cov_1lcwqcbogg.s[6]++, {}); var currentMap; var _key; cov_1lcwqcbogg.s[7]++; var noop = function noop() { cov_1lcwqcbogg.f[1]++; }; var defaultMediaGroups = (cov_1lcwqcbogg.s[8]++, { 'AUDIO': {}, 'VIDEO': {}, 'CLOSED-CAPTIONS': {}, 'SUBTITLES': {} }); var widevineUuid = (cov_1lcwqcbogg.s[9]++, 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'); var currentTimeline = (cov_1lcwqcbogg.s[10]++, 0); cov_1lcwqcbogg.s[11]++; _this.manifest = { allowCache: true, discontinuityStarts: [], segments: [] }; cov_1lcwqcbogg.s[12]++; _this.parseStream.on('data', function (entry) { cov_1lcwqcbogg.f[2]++; var mediaGroup; var rendition; cov_1lcwqcbogg.s[13]++; ({ tag: function tag() { cov_1lcwqcbogg.s[14]++; ((cov_1lcwqcbogg.b[0][0]++, { 'allow-cache': function allowCache() { cov_1lcwqcbogg.s[15]++; this.manifest.allowCache = entry.allowed; cov_1lcwqcbogg.s[16]++; if (!('allowed' in entry)) { cov_1lcwqcbogg.b[1][0]++; cov_1lcwqcbogg.s[17]++; this.trigger('info', { message: 'defaulting allowCache to YES' }); cov_1lcwqcbogg.s[18]++; this.manifest.allowCache = true; } else { cov_1lcwqcbogg.b[1][1]++; } }, byterange: function byterange() { var byterange = (cov_1lcwqcbogg.s[19]++, {}); cov_1lcwqcbogg.s[20]++; if ('length' in entry) { cov_1lcwqcbogg.b[2][0]++; cov_1lcwqcbogg.s[21]++; currentUri.byterange = byterange; cov_1lcwqcbogg.s[22]++; byterange.length = entry.length; cov_1lcwqcbogg.s[23]++; if (!('offset' in entry)) { cov_1lcwqcbogg.b[3][0]++; cov_1lcwqcbogg.s[24]++; this.trigger('info', { message: 'defaulting offset to zero' }); cov_1lcwqcbogg.s[25]++; entry.offset = 0; } else { cov_1lcwqcbogg.b[3][1]++; } } else { cov_1lcwqcbogg.b[2][1]++; } cov_1lcwqcbogg.s[26]++; if ('offset' in entry) { cov_1lcwqcbogg.b[4][0]++; cov_1lcwqcbogg.s[27]++; currentUri.byterange = byterange; cov_1lcwqcbogg.s[28]++; byterange.offset = entry.offset; } else { cov_1lcwqcbogg.b[4][1]++; } }, endlist: function endlist() { cov_1lcwqcbogg.s[29]++; this.manifest.endList = true; }, inf: function inf() { cov_1lcwqcbogg.s[30]++; if (!('mediaSequence' in this.manifest)) { cov_1lcwqcbogg.b[5][0]++; cov_1lcwqcbogg.s[31]++; this.manifest.mediaSequence = 0; cov_1lcwqcbogg.s[32]++; this.trigger('info', { message: 'defaulting media sequence to zero' }); } else { cov_1lcwqcbogg.b[5][1]++; } cov_1lcwqcbogg.s[33]++; if (!('discontinuitySequence' in this.manifest)) { cov_1lcwqcbogg.b[6][0]++; cov_1lcwqcbogg.s[34]++; this.manifest.discontinuitySequence = 0; cov_1lcwqcbogg.s[35]++; this.trigger('info', { message: 'defaulting discontinuity sequence to zero' }); } else { cov_1lcwqcbogg.b[6][1]++; } cov_1lcwqcbogg.s[36]++; if (entry.duration > 0) { cov_1lcwqcbogg.b[7][0]++; cov_1lcwqcbogg.s[37]++; currentUri.duration = entry.duration; } else { cov_1lcwqcbogg.b[7][1]++; } cov_1lcwqcbogg.s[38]++; if (entry.duration === 0) { cov_1lcwqcbogg.b[8][0]++; cov_1lcwqcbogg.s[39]++; currentUri.duration = 0.01; cov_1lcwqcbogg.s[40]++; this.trigger('info', { message: 'updating zero segment duration to a small value' }); } else { cov_1lcwqcbogg.b[8][1]++; } cov_1lcwqcbogg.s[41]++; this.manifest.segments = uris; }, key: function key() { cov_1lcwqcbogg.s[42]++; if (!entry.attributes) { cov_1lcwqcbogg.b[9][0]++; cov_1lcwqcbogg.s[43]++; this.trigger('warn', { message: 'ignoring key declaration without attribute list' }); cov_1lcwqcbogg.s[44]++; return; } else { cov_1lcwqcbogg.b[9][1]++; } cov_1lcwqcbogg.s[45]++; if (entry.attributes.METHOD === 'NONE') { cov_1lcwqcbogg.b[10][0]++; cov_1lcwqcbogg.s[46]++; _key = null; cov_1lcwqcbogg.s[47]++; return; } else { cov_1lcwqcbogg.b[10][1]++; } cov_1lcwqcbogg.s[48]++; if (!entry.attributes.URI) { cov_1lcwqcbogg.b[11][0]++; cov_1lcwqcbogg.s[49]++; this.trigger('warn', { message: 'ignoring key declaration without URI' }); cov_1lcwqcbogg.s[50]++; return; } else { cov_1lcwqcbogg.b[11][1]++; } cov_1lcwqcbogg.s[51]++; if (entry.attributes.KEYFORMAT === widevineUuid) { cov_1lcwqcbogg.b[12][0]++; var VALID_METHODS = (cov_1lcwqcbogg.s[52]++, ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC']); cov_1lcwqcbogg.s[53]++; if (VALID_METHODS.indexOf(entry.attributes.METHOD) === -1) { cov_1lcwqcbogg.b[13][0]++; cov_1lcwqcbogg.s[54]++; this.trigger('warn', { message: 'invalid key method provided for Widevine' }); cov_1lcwqcbogg.s[55]++; return; } else { cov_1lcwqcbogg.b[13][1]++; } cov_1lcwqcbogg.s[56]++; if (entry.attributes.METHOD === 'SAMPLE-AES-CENC') { cov_1lcwqcbogg.b[14][0]++; cov_1lcwqcbogg.s[57]++; this.trigger('warn', { message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead' }); } else { cov_1lcwqcbogg.b[14][1]++; } cov_1lcwqcbogg.s[58]++; if (entry.attributes.URI.substring(0, 23) !== 'data:text/plain;base64,') { cov_1lcwqcbogg.b[15][0]++; cov_1lcwqcbogg.s[59]++; this.trigger('warn', { message: 'invalid key URI provided for Widevine' }); cov_1lcwqcbogg.s[60]++; return; } else { cov_1lcwqcbogg.b[15][1]++; } cov_1lcwqcbogg.s[61]++; if (!((cov_1lcwqcbogg.b[17][0]++, entry.attributes.KEYID) && (cov_1lcwqcbogg.b[17][1]++, entry.attributes.KEYID.substring(0, 2) === '0x'))) { cov_1lcwqcbogg.b[16][0]++; cov_1lcwqcbogg.s[62]++; this.trigger('warn', { message: 'invalid key ID provided for Widevine' }); cov_1lcwqcbogg.s[63]++; return; } else { cov_1lcwqcbogg.b[16][1]++; } cov_1lcwqcbogg.s[64]++; this.manifest.contentProtection = { 'com.widevine.alpha': { attributes: { schemeIdUri: entry.attributes.KEYFORMAT, keyId: entry.attributes.KEYID.substring(2) }, pssh: decodeB64ToUint8Array(entry.attributes.URI.split(',')[1]) } }; cov_1lcwqcbogg.s[65]++; return; } else { cov_1lcwqcbogg.b[12][1]++; } cov_1lcwqcbogg.s[66]++; if (!entry.attributes.METHOD) { cov_1lcwqcbogg.b[18][0]++; cov_1lcwqcbogg.s[67]++; this.trigger('warn', { message: 'defaulting key method to AES-128' }); } else { cov_1lcwqcbogg.b[18][1]++; } cov_1lcwqcbogg.s[68]++; _key = { method: (cov_1lcwqcbogg.b[19][0]++, entry.attributes.METHOD) || (cov_1lcwqcbogg.b[19][1]++, 'AES-128'), uri: entry.attributes.URI }; cov_1lcwqcbogg.s[69]++; if (typeof entry.attributes.IV !== 'undefined') { cov_1lcwqcbogg.b[20][0]++; cov_1lcwqcbogg.s[70]++; _key.iv = entry.attributes.IV; } else { cov_1lcwqcbogg.b[20][1]++; } }, 'media-sequence': function mediaSequence() { cov_1lcwqcbogg.s[71]++; if (!isFinite(entry.number)) { cov_1lcwqcbogg.b[21][0]++; cov_1lcwqcbogg.s[72]++; this.trigger('warn', { message: 'ignoring invalid media sequence: ' + entry.number }); cov_1lcwqcbogg.s[73]++; return; } else { cov_1lcwqcbogg.b[21][1]++; } cov_1lcwqcbogg.s[74]++; this.manifest.mediaSequence = entry.number; }, 'discontinuity-sequence': function discontinuitySequence() { cov_1lcwqcbogg.s[75]++; if (!isFinite(entry.number)) { cov_1lcwqcbogg.b[22][0]++; cov_1lcwqcbogg.s[76]++; this.trigger('warn', { message: 'ignoring invalid discontinuity sequence: ' + entry.number }); cov_1lcwqcbogg.s[77]++; return; } else { cov_1lcwqcbogg.b[22][1]++; } cov_1lcwqcbogg.s[78]++; this.manifest.discontinuitySequence = entry.number; cov_1lcwqcbogg.s[79]++; currentTimeline = entry.number; }, 'playlist-type': function playlistType() { cov_1lcwqcbogg.s[80]++; if (!/VOD|EVENT/.test(entry.playlistType)) { cov_1lcwqcbogg.b[23][0]++; cov_1lcwqcbogg.s[81]++; this.trigger('warn', { message: 'ignoring unknown playlist type: ' + entry.playlist }); cov_1lcwqcbogg.s[82]++; return; } else { cov_1lcwqcbogg.b[23][1]++; } cov_1lcwqcbogg.s[83]++; this.manifest.playlistType = entry.playlistType; }, map: function map() { cov_1lcwqcbogg.s[84]++; currentMap = {}; cov_1lcwqcbogg.s[85]++; if (entry.uri) { cov_1lcwqcbogg.b[24][0]++; cov_1lcwqcbogg.s[86]++; currentMap.uri = entry.uri; } else { cov_1lcwqcbogg.b[24][1]++; } cov_1lcwqcbogg.s[87]++; if (entry.byterange) { cov_1lcwqcbogg.b[25][0]++; cov_1lcwqcbogg.s[88]++; currentMap.byterange = entry.byterange; } else { cov_1lcwqcbogg.b[25][1]++; } }, 'stream-inf': function streamInf() { cov_1lcwqcbogg.s[89]++; this.manifest.playlists = uris; cov_1lcwqcbogg.s[90]++; this.manifest.mediaGroups = (cov_1lcwqcbogg.b[26][0]++, this.manifest.mediaGroups) || (cov_1lcwqcbogg.b[26][1]++, defaultMediaGroups); cov_1lcwqcbogg.s[91]++; if (!entry.attributes) { cov_1lcwqcbogg.b[27][0]++; cov_1lcwqcbogg.s[92]++; this.trigger('warn', { message: 'ignoring empty stream-inf attributes' }); cov_1lcwqcbogg.s[93]++; return; } else { cov_1lcwqcbogg.b[27][1]++; } cov_1lcwqcbogg.s[94]++; if (!currentUri.attributes) { cov_1lcwqcbogg.b[28][0]++; cov_1lcwqcbogg.s[95]++; currentUri.attributes = {}; } else { cov_1lcwqcbogg.b[28][1]++; } cov_1lcwqcbogg.s[96]++; _extends(currentUri.attributes, entry.attributes); }, media: function media() { cov_1lcwqcbogg.s[97]++; this.manifest.mediaGroups = (cov_1lcwqcbogg.b[29][0]++, this.manifest.mediaGroups) || (cov_1lcwqcbogg.b[29][1]++, defaultMediaGroups); cov_1lcwqcbogg.s[98]++; if (!((cov_1lcwqcbogg.b[31][0]++, entry.attributes) && (cov_1lcwqcbogg.b[31][1]++, entry.attributes.TYPE) && (cov_1lcwqcbogg.b[31][2]++, entry.attributes['GROUP-ID']) && (cov_1lcwqcbogg.b[31][3]++, entry.attributes.NAME))) { cov_1lcwqcbogg.b[30][0]++; cov_1lcwqcbogg.s[99]++; this.trigger('warn', { message: 'ignoring incomplete or missing media group' }); cov_1lcwqcbogg.s[100]++; return; } else { cov_1lcwqcbogg.b[30][1]++; } var mediaGroupType = (cov_1lcwqcbogg.s[101]++, this.manifest.mediaGroups[entry.attributes.TYPE]); cov_1lcwqcbogg.s[102]++; mediaGroupType[entry.attributes['GROUP-ID']] = (cov_1lcwqcbogg.b[32][0]++, mediaGroupType[entry.attributes['GROUP-ID']]) || (cov_1lcwqcbogg.b[32][1]++, {}); cov_1lcwqcbogg.s[103]++; mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']]; cov_1lcwqcbogg.s[104]++; rendition = { default: /yes/i.test(entry.attributes.DEFAULT) }; cov_1lcwqcbogg.s[105]++; if (rendition.default) { cov_1lcwqcbogg.b[33][0]++; cov_1lcwqcbogg.s[106]++; rendition.autoselect = true; } else { cov_1lcwqcbogg.b[33][1]++; cov_1lcwqcbogg.s[107]++; rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT); } cov_1lcwqcbogg.s[108]++; if (entry.attributes.LANGUAGE) { cov_1lcwqcbogg.b[34][0]++; cov_1lcwqcbogg.s[109]++; rendition.language = entry.attributes.LANGUAGE; } else { cov_1lcwqcbogg.b[34][1]++; } cov_1lcwqcbogg.s[110]++; if (entry.attributes.URI) { cov_1lcwqcbogg.b[35][0]++; cov_1lcwqcbogg.s[111]++; rendition.uri = entry.attributes.URI; } else { cov_1lcwqcbogg.b[35][1]++; } cov_1lcwqcbogg.s[112]++; if (entry.attributes['INSTREAM-ID']) { cov_1lcwqcbogg.b[36][0]++; cov_1lcwqcbogg.s[113]++; rendition.instreamId = entry.attributes['INSTREAM-ID']; } else { cov_1lcwqcbogg.b[36][1]++; } cov_1lcwqcbogg.s[114]++; if (entry.attributes.CHARACTERISTICS) { cov_1lcwqcbogg.b[37][0]++; cov_1lcwqcbogg.s[115]++; rendition.characteristics = entry.attributes.CHARACTERISTICS; } else { cov_1lcwqcbogg.b[37][1]++; } cov_1lcwqcbogg.s[116]++; if (entry.attributes.FORCED) { cov_1lcwqcbogg.b[38][0]++; cov_1lcwqcbogg.s[117]++; rendition.forced = /yes/i.test(entry.attributes.FORCED); } else { cov_1lcwqcbogg.b[38][1]++; } cov_1lcwqcbogg.s[118]++; mediaGroup[entry.attributes.NAME] = rendition; }, discontinuity: function discontinuity() { cov_1lcwqcbogg.s[119]++; currentTimeline += 1; cov_1lcwqcbogg.s[120]++; currentUri.discontinuity = true; cov_1lcwqcbogg.s[121]++; this.manifest.discontinuityStarts.push(uris.length); }, 'program-date-time': function programDateTime() { cov_1lcwqcbogg.s[122]++; if (typeof this.manifest.dateTimeString === 'undefined') { cov_1lcwqcbogg.b[39][0]++; cov_1lcwqcbogg.s[123]++; this.manifest.dateTimeString = entry.dateTimeString; cov_1lcwqcbogg.s[124]++; this.manifest.dateTimeObject = entry.dateTimeObject; } else { cov_1lcwqcbogg.b[39][1]++; } cov_1lcwqcbogg.s[125]++; currentUri.dateTimeString = entry.dateTimeString; cov_1lcwqcbogg.s[126]++; currentUri.dateTimeObject = entry.dateTimeObject; }, targetduration: function targetduration() { cov_1lcwqcbogg.s[127]++; if ((cov_1lcwqcbogg.b[41][0]++, !isFinite(entry.duration)) || (cov_1lcwqcbogg.b[41][1]++, entry.duration < 0)) { cov_1lcwqcbogg.b[40][0]++; cov_1lcwqcbogg.s[128]++; this.trigger('warn', { message: 'ignoring invalid target duration: ' + entry.duration }); cov_1lcwqcbogg.s[129]++; return; } else { cov_1lcwqcbogg.b[40][1]++; } cov_1lcwqcbogg.s[130]++; this.manifest.targetDuration = entry.duration; }, totalduration: function totalduration() { cov_1lcwqcbogg.s[131]++; if ((cov_1lcwqcbogg.b[43][0]++, !isFinite(entry.duration)) || (cov_1lcwqcbogg.b[43][1]++, entry.duration < 0)) { cov_1lcwqcbogg.b[42][0]++; cov_1lcwqcbogg.s[132]++; this.trigger('warn', { message: 'ignoring invalid total duration: ' + entry.duration }); cov_1lcwqcbogg.s[133]++; return; } else { cov_1lcwqcbogg.b[42][1]++; } cov_1lcwqcbogg.s[134]++; this.manifest.totalDuration = entry.duration; }, start: function start() { cov_1lcwqcbogg.s[135]++; if ((cov_1lcwqcbogg.b[45][0]++, !entry.attributes) || (cov_1lcwqcbogg.b[45][1]++, isNaN(entry.attributes['TIME-OFFSET']))) { cov_1lcwqcbogg.b[44][0]++; cov_1lcwqcbogg.s[136]++; this.trigger('warn', { message: 'ignoring start declaration without appropriate attribute list' }); cov_1lcwqcbogg.s[137]++; return; } else { cov_1lcwqcbogg.b[44][1]++; } cov_1lcwqcbogg.s[138]++; this.manifest.start = { timeOffset: entry.attributes['TIME-OFFSET'], precise: entry.attributes.PRECISE }; }, 'cue-out': function cueOut() { cov_1lcwqcbogg.s[139]++; currentUri.cueOut = entry.data; }, 'cue-out-cont': function cueOutCont() { cov_1lcwqcbogg.s[140]++; currentUri.cueOutCont = entry.data; }, 'cue-in': function cueIn() { cov_1lcwqcbogg.s[141]++; currentUri.cueIn = entry.data; } }[entry.tagType]) || (cov_1lcwqcbogg.b[0][1]++, noop)).call(self); }, uri: function uri() { cov_1lcwqcbogg.s[142]++; currentUri.uri = entry.uri; cov_1lcwqcbogg.s[143]++; uris.push(currentUri); cov_1lcwqcbogg.s[144]++; if ((cov_1lcwqcbogg.b[47][0]++, this.manifest.targetDuration) && (cov_1lcwqcbogg.b[47][1]++, !('duration' in currentUri))) { cov_1lcwqcbogg.b[46][0]++; cov_1lcwqcbogg.s[145]++; this.trigger('warn', { message: 'defaulting segment duration to the target duration' }); cov_1lcwqcbogg.s[146]++; currentUri.duration = this.manifest.targetDuration; } else { cov_1lcwqcbogg.b[46][1]++; } cov_1lcwqcbogg.s[147]++; if (_key) { cov_1lcwqcbogg.b[48][0]++; cov_1lcwqcbogg.s[148]++; currentUri.key = _key; } else { cov_1lcwqcbogg.b[48][1]++; } cov_1lcwqcbogg.s[149]++; currentUri.timeline = currentTimeline; cov_1lcwqcbogg.s[150]++; if (currentMap) { cov_1lcwqcbogg.b[49][0]++; cov_1lcwqcbogg.s[151]++; currentUri.map = currentMap; } else { cov_1lcwqcbogg.b[49][1]++; } cov_1lcwqcbogg.s[152]++; currentUri = {}; }, comment: function comment() {}, custom: function custom() { cov_1lcwqcbogg.s[153]++; if (entry.segment) { cov_1lcwqcbogg.b[50][0]++; cov_1lcwqcbogg.s[154]++; currentUri.custom = (cov_1lcwqcbogg.b[51][0]++, currentUri.custom) || (cov_1lcwqcbogg.b[51][1]++, {}); cov_1lcwqcbogg.s[155]++; currentUri.custom[entry.customType] = entry.data; } else { cov_1lcwqcbogg.b[50][1]++; cov_1lcwqcbogg.s[156]++; this.manifest.custom = (cov_1lcwqcbogg.b[52][0]++, this.manifest.custom) || (cov_1lcwqcbogg.b[52][1]++, {}); cov_1lcwqcbogg.s[157]++; this.manifest.custom[entry.customType] = entry.data; } } })[entry.type].call(self); }); return _this; } var _proto = Parser.prototype; _proto.push = function push(chunk) { cov_1lcwqcbogg.f[3]++; cov_1lcwqcbogg.s[158]++; this.lineStream.push(chunk); }; _proto.end = function end() { cov_1lcwqcbogg.f[4]++; cov_1lcwqcbogg.s[159]++; this.lineStream.push('\n'); }; _proto.addParser = function addParser(options) { cov_1lcwqcbogg.f[5]++; cov_1lcwqcbogg.s[160]++; this.parseStream.addParser(options); }; _proto.addTagMapper = function addTagMapper(options) { cov_1lcwqcbogg.f[6]++; cov_1lcwqcbogg.s[161]++; this.parseStream.addTagMapper(options); }; return Parser; }(Stream); var cov_fjsqjmk8y = function () { var path = '/Users/poneill/dev/m3u8-parser/src/index.js', hash = '76ca40100e8e493a80564b33ecc5b65381ac7a81', Function = function () {}.constructor, global = new Function('return this')(), gcv = '__coverage__', coverageData = { path: '/Users/poneill/dev/m3u8-parser/src/index.js', statementMap: {}, fnMap: {}, branchMap: {}, s: {}, f: {}, b: {}, _coverageSchema: '332fd63041d2c1bcb487cc26dd0d5f7d97098a6c' }, coverage = global[gcv] || (global[gcv] = {}); if (coverage[path] && coverage[path].hash === hash) { return coverage[path]; } coverageData.hash = hash; return coverage[path] = coverageData; }(); var testDataExpected = { "absoluteUris": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "http://example.com/00001.ts" }, { "duration": 10, "timeline": 0, "uri": "https://example.com/00002.ts" }, { "duration": 10, "timeline": 0, "uri": "//example.com/00003.ts" }, { "duration": 10, "timeline": 0, "uri": "http://example.com/00004.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "allowCache": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 587500, "offset": 522828 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 713084, "offset": 1110328 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 476580, "offset": 1823412 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 535612, "offset": 2299992 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 207176, "offset": 2835604 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 455900, "offset": 3042780 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 657248, "offset": 3498680 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 571708, "offset": 4155928 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 485040, "offset": 4727636 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 709136, "offset": 5212676 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 730004, "offset": 5921812 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 456276, "offset": 6651816 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 468684, "offset": 7108092 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 444996, "offset": 7576776 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 331444, "offset": 8021772 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 44556, "offset": 8353216 }, "duration": 1.4167, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "allowCacheInvalid": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "alternateAudio": { allowCache: true, discontinuityStarts: [], mediaGroups: { // TYPE AUDIO: { // GROUP-ID "audio": { // NAME "English": { language: 'eng', autoselect: true, default: true, uri: "eng/prog_index.m3u8" }, // NAME "Français": { language: "fre", autoselect: true, default: false, uri: "fre/prog_index.m3u8" }, // NAME "Espanol": { language: "sp", autoselect: true, default: false, uri: "sp/prog_index.m3u8" } } }, VIDEO: {}, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, playlists: [{ attributes: { "PROGRAM-ID": 1, BANDWIDTH: 195023, CODECS: "avc1.42e00a,mp4a.40.2", AUDIO: 'audio' }, timeline: 0, uri: "lo/prog_index.m3u8" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 591680, CODECS: "avc1.42e01e,mp4a.40.2", AUDIO: 'audio' }, timeline: 0, uri: "hi/prog_index.m3u8" }], segments: [] }, "alternateVideo": { allowCache: true, discontinuityStarts: [], mediaGroups: { AUDIO: { aac: { English: { autoselect: true, default: true, language: "eng", uri: "eng/prog_index.m3u8" } } }, VIDEO: { "500kbs": { Angle1: { autoselect: true, default: true }, Angle2: { autoselect: true, default: false, uri: "Angle2/500kbs/prog_index.m3u8" }, Angle3: { autoselect: true, default: false, uri: "Angle3/500kbs/prog_index.m3u8" } } }, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, playlists: [{ attributes: { "PROGRAM-ID": 1, BANDWIDTH: 754857, CODECS: "mp4a.40.2,avc1.4d401e", AUDIO: "aac", VIDEO: "500kbs" }, timeline: 0, uri: "Angle1/500kbs/prog_index.m3u8" }], segments: [] }, "brightcove": { "allowCache": true, "playlists": [{ "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 240000, "RESOLUTION": { "width": 396, "height": 224 } }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 40000 }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 440000, "RESOLUTION": { "width": 396, "height": 224 } }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 1928000, "RESOLUTION": { "width": 960, "height": 540 } }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001" }], "discontinuityStarts": [], "mediaGroups": { "VIDEO": {}, "AUDIO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }, "segments": [] }, "byteRange": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 587500, "offset": 522828 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 713084, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video2.ts" }, { "byterange": { "length": 476580, "offset": 1823412 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 535612, "offset": 2299992 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 207176, "offset": 2835604 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 455900, "offset": 3042780 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 657248, "offset": 3498680 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 571708, "offset": 4155928 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 485040, "offset": 4727636 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 709136, "offset": 5212676 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 730004, "offset": 5921812 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 456276, "offset": 6651816 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 468684, "offset": 7108092 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 444996, "offset": 7576776 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 331444, "offset": 8021772 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 44556, "offset": 8353216 }, "duration": 1.4167, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "dateTime": { "allowCache": false, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "dateTimeString": "2016-06-22T09:20:16.166-04:00", "dateTimeObject": new Date("2016-06-22T09:20:16.166-04:00"), "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "dateTimeString": "2016-06-22T09:20:26.166-04:00", "dateTimeObject": new Date("2016-06-22T09:20:26.166-04:00"), "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "dateTimeString": "2016-06-22T09:20:16.166-04:00", "dateTimeObject": new Date("2016-06-22T09:20:16.166-04:00"), "discontinuitySequence": 0, "discontinuityStarts": [] }, "disallowCache": { "allowCache": false, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "disc-sequence": { "allowCache": true, "mediaSequence": 0, "discontinuitySequence": 3, "segments": [{ "duration": 10, "timeline": 3, "uri": "001.ts" }, { "duration": 19, "timeline": 3, "uri": "002.ts" }, { "discontinuity": true, "duration": 10, "timeline": 4, "uri": "003.ts" }, { "duration": 11, "timeline": 4, "uri": "004.ts" }], "targetDuration": 19, "endList": true, "discontinuityStarts": [2] }, "discontinuity": { "allowCache": true, "mediaSequence": 0, "discontinuitySequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "001.ts" }, { "duration": 19, "timeline": 0, "uri": "002.ts" }, { "discontinuity": true, "duration": 10, "timeline": 1, "uri": "003.ts" }, { "duration": 11, "timeline": 1, "uri": "004.ts" }, { "discontinuity": true, "duration": 10, "timeline": 2, "uri": "005.ts" }, { "duration": 10, "timeline": 2, "uri": "006.ts" }, { "duration": 10, "timeline": 2, "uri": "007.ts" }, { "discontinuity": true, "duration": 10, "timeline": 3, "uri": "008.ts" }, { "duration": 16, "timeline": 3, "uri": "009.ts" }], "targetDuration": 19, "endList": true, "discontinuityStarts": [2, 4, 7] }, "domainUris": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "/00001.ts" }, { "duration": 10, "timeline": 0, "uri": "/subdir/00002.ts" }, { "duration": 10, "timeline": 0, "uri": "/00003.ts" }, { "duration": 10, "timeline": 0, "uri": "/00004.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "empty": { "allowCache": true, "discontinuityStarts": [], "segments": [] }, "emptyAllowCache": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "emptyMediaSequence": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 6.08, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 6.6, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }, { "duration": 5, "timeline": 0, "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "emptyPlaylistType": { "allowCache": true, "mediaSequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "emptyTargetDuration": { "allowCache": true, "playlists": [{ "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 240000, "RESOLUTION": { "width": 396, "height": 224 } }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 40000 }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 440000, "RESOLUTION": { "width": 396, "height": 224 } }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 1928000, "RESOLUTION": { "width": 960, "height": 540 } }, "timeline": 0, "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001" }], "discontinuityStarts": [], "mediaGroups": { "VIDEO": {}, "AUDIO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }, "segments": [] }, "encrypted": { "allowCache": true, "mediaSequence": 7794, "discontinuitySequence": 0, "discontinuityStarts": [], "segments": [{ "duration": 2.833, "timeline": 0, "key": { "method": "AES-128", "uri": "https://priv.example.com/key.php?r=52" }, "uri": "http://media.example.com/fileSequence52-A.ts" }, { "duration": 15, "timeline": 0, "key": { "method": "AES-128", "uri": "https://priv.example.com/key.php?r=52" }, "uri": "http://media.example.com/fileSequence52-B.ts" }, { "duration": 13.333, "timeline": 0, "key": { "method": "AES-128", "uri": "https://priv.example.com/key.php?r=52" }, "uri": "http://media.example.com/fileSequence52-C.ts" }, { "duration": 15, "timeline": 0, "key": { "method": "AES-128", "uri": "https://priv.example.com/key.php?r=53" }, "uri": "http://media.example.com/fileSequence53-A.ts" }, { "duration": 14, "timeline": 0, "key": { "method": "AES-128", "uri": "https://priv.example.com/key.php?r=54", "iv": new Uint32Array([0, 0, 331, 3063767524]) }, "uri": "http://media.example.com/fileSequence53-B.ts" }, { "duration": 15, "timeline": 0, "uri": "http://media.example.com/fileSequence53-B.ts" }], "targetDuration": 15 }, "event": { "allowCache": true, "mediaSequence": 0, "playlistType": "EVENT", "segments": [{ "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "extXPlaylistTypeInvalidPlaylist": { "allowCache": true, "mediaSequence": 1, "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "extinf": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 587500, "offset": 522828 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 713084, "offset": 1110328 }, "duration": 5, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 476580, "offset": 1823412 }, "duration": 9.7, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 535612, "offset": 2299992 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 207176, "offset": 2835604 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 455900, "offset": 3042780 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 657248, "offset": 3498680 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 571708, "offset": 4155928 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 485040, "offset": 4727636 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 709136, "offset": 5212676 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 730004, "offset": 5921812 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 456276, "offset": 6651816 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 468684, "offset": 7108092 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 444996, "offset": 7576776 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 331444, "offset": 8021772 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 44556, "offset": 8353216 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "fmp4": { "allowCache": true, "mediaSequence": 1, "playlistType": "VOD", "targetDuration": 6, "discontinuitySequence": 0, "discontinuityStarts": [], "segments": [{ "byterange": { "length": 5666510, "offset": 720 }, "duration": 6.006, "timeline": 0, "uri": "main.mp4", "map": { "byterange": { "length": 720, "offset": 0 }, "uri": "main.mp4" } }, { "byterange": { "length": 5861577, "offset": 5667230 }, "duration": 6.006, "timeline": 0, "uri": "main.mp4", "map": { "byterange": { "length": 720, "offset": 0 }, "uri": "main.mp4" } }], "endList": true }, "headerOnly": { "allowCache": true, "discontinuityStarts": [], "segments": [] }, "invalidAllowCache": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "invalidMediaSequence": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 6.08, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 6.6, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }, { "duration": 5, "timeline": 0, "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "invalidPlaylistType": { "allowCache": true, "mediaSequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "invalidTargetDuration": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 587500, "offset": 522828 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 713084, "offset": 1110328 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 476580, "offset": 1823412 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 535612, "offset": 2299992 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 207176, "offset": 2835604 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 455900, "offset": 3042780 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 657248, "offset": 3498680 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 571708, "offset": 4155928 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 485040, "offset": 4727636 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 709136, "offset": 5212676 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 730004, "offset": 5921812 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 456276, "offset": 6651816 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 468684, "offset": 7108092 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 444996, "offset": 7576776 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 331444, "offset": 8021772 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 44556, "offset": 8353216 }, "duration": 1.4167, "timeline": 0, "uri": "hls_450k_video.ts" }], "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "liveMissingSegmentDuration": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }], "targetDuration": 8, "discontinuitySequence": 0, "discontinuityStarts": [] }, "liveStart30sBefore": { "allowCache": true, "mediaSequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "001.ts" }, { "duration": 19, "timeline": 0, "uri": "002.ts" }, { "duration": 10, "timeline": 0, "uri": "003.ts" }, { "duration": 11, "timeline": 0, "uri": "004.ts" }, { "duration": 10, "timeline": 0, "uri": "005.ts" }, { "duration": 10, "timeline": 0, "uri": "006.ts" }, { "duration": 10, "timeline": 0, "uri": "007.ts" }, { "duration": 10, "timeline": 0, "uri": "008.ts" }, { "duration": 16, "timeline": 0, "uri": "009.ts" }], "targetDuration": 10, "discontinuitySequence": 0, "discontinuityStarts": [] }, "manifestExtTTargetdurationNegative": { "allowCache": true, "mediaSequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/gogo/00001.ts" }], "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "manifestExtXEndlistEarly": { "allowCache": true, "mediaSequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/gogo/00001.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/gogo/00002.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/gogo/00003.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/gogo/00004.ts" }, { "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/gogo/00005.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "manifestNoExtM3u": { "allowCache": true, "mediaSequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "/test/ts-files/zencoder/gogo/00001.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "master-fmp4": { allowCache: true, discontinuityStarts: [], mediaGroups: { AUDIO: { aud1: { English: { autoselect: true, default: true, language: "eng", uri: "a1/prog_index.m3u8" } }, aud2: { English: { autoselect: true, default: true, language: "eng", uri: "a2/prog_index.m3u8" } }, aud3: { English: { autoselect: true, default: true, language: "eng", uri: "a3/prog_index.m3u8" } } }, VIDEO: {}, "CLOSED-CAPTIONS": { cc1: { English: { autoselect: true, default: true, language: "eng", instreamId: "CC1" } } }, SUBTITLES: { sub1: { English: { autoselect: true, default: true, language: "eng", uri: 's1/eng/prog_index.m3u8', forced: false } } } }, playlists: [{ attributes: { "AVERAGE-BANDWIDTH": "2165224", BANDWIDTH: 2215219, CODECS: "avc1.640020,mp4a.40.2", RESOLUTION: { width: 960, height: 540 }, "FRAME-RATE": "59.940", "CLOSED-CAPTIONS": "cc1", AUDIO: "aud1", SUBTITLES: "sub1" }, timeline: 0, uri: "v4/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud1", "AVERAGE-BANDWIDTH": "7962844", "BANDWIDTH": 7976430, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,mp4a.40.2", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v8/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud1", "AVERAGE-BANDWIDTH": "6165024", "BANDWIDTH": 6181885, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,mp4a.40.2", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v7/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud1", "AVERAGE-BANDWIDTH": "4664459", "BANDWIDTH": 4682666, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,mp4a.40.2", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v6/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud1", "AVERAGE-BANDWIDTH": "3164759", "BANDWIDTH": 3170746, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640020,mp4a.40.2", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 720, "width": 1280 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v5/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud1", "AVERAGE-BANDWIDTH": "1262552", "BANDWIDTH": 1276223, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64001e,mp4a.40.2", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 432, "width": 768 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v3/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud1", "AVERAGE-BANDWIDTH": "893243", "BANDWIDTH": 904744, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64001e,mp4a.40.2", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 360, "width": 640 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v2/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud1", "AVERAGE-BANDWIDTH": "527673", "BANDWIDTH": 538201, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640015,mp4a.40.2", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 270, "width": 480 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v1/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "2390334", "BANDWIDTH": 2440329, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640020,ac-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 540, "width": 960 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v4/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "8187954", "BANDWIDTH": 8201540, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,ac-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v8/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "6390134", "BANDWIDTH": 6406995, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,ac-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v7/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "4889569", "BANDWIDTH": 4907776, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,ac-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v6/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "3389869", "BANDWIDTH": 3395856, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640020,ac-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 720, "width": 1280 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v5/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "1487662", "BANDWIDTH": 1501333, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64001e,ac-3", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 432, "width": 768 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v3/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "1118353", "BANDWIDTH": 1129854, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64001e,ac-3", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 360, "width": 640 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v2/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud2", "AVERAGE-BANDWIDTH": "752783", "BANDWIDTH": 763311, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640015,ac-3", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 270, "width": 480 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v1/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "2198334", "BANDWIDTH": 2248329, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640020,ec-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 540, "width": 960 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v4/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "7995954", "BANDWIDTH": 8009540, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,ec-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v8/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "6198134", "BANDWIDTH": 6214995, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,ec-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v7/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "4697569", "BANDWIDTH": 4715776, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64002a,ec-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 1080, "width": 1920 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v6/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "3197869", "BANDWIDTH": 3203856, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640020,ec-3", "FRAME-RATE": "59.940", "RESOLUTION": { "height": 720, "width": 1280 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v5/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "1295662", "BANDWIDTH": 1309333, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64001e,ec-3", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 432, "width": 768 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v3/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "926353", "BANDWIDTH": 937854, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.64001e,ec-3", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 360, "width": 640 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v2/prog_index.m3u8" }, { "attributes": { "AUDIO": "aud3", "AVERAGE-BANDWIDTH": "560783", "BANDWIDTH": 571311, "CLOSED-CAPTIONS": "cc1", "CODECS": "avc1.640015,ec-3", "FRAME-RATE": "29.970", "RESOLUTION": { "height": 270, "width": 480 }, "SUBTITLES": "sub1" }, "timeline": 0, "uri": "v1/prog_index.m3u8" }], segments: [] }, "master": { "allowCache": true, "playlists": [{ "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 240000, "RESOLUTION": { "width": 396, "height": 224 } }, "timeline": 0, "uri": "media.m3u8" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 40000 }, "timeline": 0, "uri": "media1.m3u8" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 440000, "RESOLUTION": { "width": 396, "height": 224 } }, "timeline": 0, "uri": "media2.m3u8" }, { "attributes": { "PROGRAM-ID": 1, "BANDWIDTH": 1928000, "RESOLUTION": { "width": 960, "height": 540 } }, "timeline": 0, "uri": "media3.m3u8" }], "discontinuityStarts": [], "mediaGroups": { "VIDEO": {}, "AUDIO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }, segments: [] }, "media": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "media-00001.ts" }, { "duration": 10, "timeline": 0, "uri": "media-00002.ts" }, { "duration": 10, "timeline": 0, "uri": "media-00003.ts" }, { "duration": 10, "timeline": 0, "uri": "media-00004.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "mediaSequence": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 6.08, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 6.6, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }, { "duration": 5, "timeline": 0, "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "missingEndlist": { "allowCache": true, "mediaSequence": 0, "segments": [{ "duration": 10, "timeline": 0, "uri": "00001.ts" }, { "duration": 10, "timeline": 0, "uri": "00002.ts" }], "targetDuration": 10, "discontinuitySequence": 0, "discontinuityStarts": [] }, "missingExtinf": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "missingMediaSequence": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 6.08, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 6.6, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }, { "duration": 5, "timeline": 0, "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "missingSegmentDuration": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }, { "duration": 8, "timeline": 0, "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "multipleAudioGroups": { allowCache: true, discontinuityStarts: [], mediaGroups: { AUDIO: { "audio-lo": { "English": { autoselect: true, default: true, language: "eng", uri: "englo/prog_index.m3u8" }, "Français": { autoselect: true, default: false, language: "fre", uri: "frelo/prog_index.m3u8" }, "Espanol": { autoselect: true, default: false, language: "sp", uri: "splo/prog_index.m3u8" } }, "audio-hi": { "English": { autoselect: true, default: true, language: "eng", uri: "eng/prog_index.m3u8" }, "Français": { autoselect: true, default: false, language: "fre", uri: "fre/prog_index.m3u8" }, "Espanol": { autoselect: true, default: false, language: "sp", uri: "sp/prog_index.m3u8" } } }, VIDEO: {}, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, playlists: [{ attributes: { "PROGRAM-ID": 1, BANDWIDTH: 195023, CODECS: "mp4a.40.5", AUDIO: "audio-lo" }, timeline: 0, uri: "lo/prog_index.m3u8" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 260000, CODECS: "avc1.42e01e,mp4a.40.2", AUDIO: "audio-lo" }, timeline: 0, uri: "lo2/prog_index.m3u8" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 591680, CODECS: "mp4a.40.2, avc1.64001e", AUDIO: "audio-hi" }, timeline: 0, uri: "hi/prog_index.m3u8" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 650000, CODECS: "avc1.42e01e,mp4a.40.2", AUDIO: "audio-hi" }, timeline: 0, uri: "hi2/prog_index.m3u8" }], segments: [] }, "multipleAudioGroupsCombinedMain": { allowCache: true, discontinuityStarts: [], mediaGroups: { AUDIO: { "audio-lo": { "English": { autoselect: true, default: true, language: "eng" }, "Français": { autoselect: true, default: false, language: "fre", uri: "frelo/prog_index.m3u8" }, "Espanol": { autoselect: true, default: false, language: "sp", uri: "splo/prog_index.m3u8" } }, "audio-hi": { "English": { autoselect: true, default: true, language: "eng", uri: "eng/prog_index.m3u8" }, "Français": { autoselect: true, default: false, language: "fre", uri: "fre/prog_index.m3u8" }, "Espanol": { autoselect: true, default: false, language: "sp", uri: "sp/prog_index.m3u8" } } }, VIDEO: {}, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, playlists: [{ attributes: { "PROGRAM-ID": 1, BANDWIDTH: 195023, CODECS: "mp4a.40.5", AUDIO: "audio-lo" }, timeline: 0, uri: "lo/prog_index.m3u8" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 260000, CODECS: "avc1.42e01e,mp4a.40.2", AUDIO: "audio-lo" }, timeline: 0, uri: "lo2/prog_index.m3u8" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 591680, CODECS: "mp4a.40.2, avc1.64001e", AUDIO: "audio-hi" }, timeline: 0, uri: "hi/prog_index.m3u8" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 650000, CODECS: "avc1.42e01e,mp4a.40.2", AUDIO: "audio-hi" }, timeline: 0, uri: "hi2/prog_index.m3u8" }], segments: [] }, "multipleTargetDurations": { "allowCache": true, "mediaSequence": 0, "targetDuration": 10, "segments": [{ "uri": "001.ts", "timeline": 0 }, { "uri": "002.ts", "duration": 9, "timeline": 0 }, { "uri": "003.ts", "duration": 7, "timeline": 0 }, { "uri": "004.ts", "duration": 10, "timeline": 0 }], "discontinuitySequence": 0, "discontinuityStarts": [] }, "multipleVideo": { allowCache: true, discontinuityStarts: [], mediaGroups: { AUDIO: { aac: { English: { autoselect: true, default: true, language: "eng", uri: "eng/prog_index.m3u8" } } }, VIDEO: { "200kbs": { Angle1: { autoselect: true, default: true }, Angle2: { autoselect: true, default: false, uri: "Angle2/200kbs/prog_index.m3u8" }, Angle3: { autoselect: true, default: false, uri: "Angle3/200kbs/prog_index.m3u8" } }, "500kbs": { Angle1: { autoselect: true, default: true }, Angle2: { autoselect: true, default: false, uri: "Angle2/500kbs/prog_index.m3u8" }, Angle3: { autoselect: true, default: false, uri: "Angle3/500kbs/prog_index.m3u8" } } }, "CLOSED-CAPTIONS": {}, SUBTITLES: {} }, playlists: [{ attributes: { "PROGRAM-ID": 1, BANDWIDTH: 300000, CODECS: "mp4a.40.2,avc1.4d401e", AUDIO: "aac", VIDEO: "200kbs" }, timeline: 0, uri: "Angle1/200kbs/prog_index.m3u" }, { attributes: { "PROGRAM-ID": 1, BANDWIDTH: 754857, CODECS: "mp4a.40.2,avc1.4d401e", AUDIO: "aac", VIDEO: "500kbs" }, timeline: 0, uri: "Angle1/500kbs/prog_index.m3u8" }], segments: [] }, "negativeMediaSequence": { "allowCache": true, "mediaSequence": -11, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 6.08, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 6.6, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }, { "duration": 5, "timeline": 0, "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "playlist": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "byterange": { "length": 522828, "offset": 0 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 587500, "offset": 522828 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 713084, "offset": 1110328 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 476580, "offset": 1823412 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 535612, "offset": 2299992 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 207176, "offset": 2835604 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 455900, "offset": 3042780 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 657248, "offset": 3498680 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 571708, "offset": 4155928 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 485040, "offset": 4727636 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 709136, "offset": 5212676 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 730004, "offset": 5921812 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 456276, "offset": 6651816 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 468684, "offset": 7108092 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 444996, "offset": 7576776 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 331444, "offset": 8021772 }, "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }, { "byterange": { "length": 44556, "offset": 8353216 }, "duration": 1.4167, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "playlistMediaSequenceHigher": { "allowCache": true, "mediaSequence": 17, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "start": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "media-00001.ts" }, { "duration": 10, "timeline": 0, "uri": "media-00002.ts" }, { "duration": 10, "timeline": 0, "uri": "media-00003.ts" }, { "duration": 10, "timeline": 0, "uri": "media-00004.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [], "start": { "timeOffset": 10.3, "precise": false } }, "streamInfInvalid": { "allowCache": true, "playlists": [{ "attributes": { "PROGRAM-ID": 1 }, "timeline": 0, "uri": "media.m3u8" }, { "timeline": 0, "uri": "media1.m3u8" }], "discontinuityStarts": [], "mediaGroups": { "VIDEO": {}, "AUDIO": {}, "CLOSED-CAPTIONS": {}, "SUBTITLES": {} }, "segments": [] }, "twoMediaSequences": { "allowCache": true, "mediaSequence": 11, "playlistType": "VOD", "segments": [{ "duration": 6.64, "timeline": 0, "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts" }, { "duration": 6.08, "timeline": 0, "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts" }, { "duration": 6.6, "timeline": 0, "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts" }, { "duration": 5, "timeline": 0, "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts" }], "targetDuration": 8, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "versionInvalid": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "hls_450k_video.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "whiteSpace": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 10, "timeline": 0, "uri": "http://example.com/00001.ts" }, { "duration": 10, "timeline": 0, "uri": "https://example.com/00002.ts" }, { "duration": 10, "timeline": 0, "uri": "//example.com/00003.ts" }, { "duration": 10, "timeline": 0, "uri": "http://example.com/00004.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] }, "zeroDuration": { "allowCache": true, "mediaSequence": 0, "playlistType": "VOD", "segments": [{ "duration": 0.01, "timeline": 0, "uri": "http://example.com/00001.ts" }], "targetDuration": 10, "endList": true, "discontinuitySequence": 0, "discontinuityStarts": [] } }; var testDataManifests = { 'absoluteUris': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'http://example.com/00001.ts\n' + '#EXTINF:10,\n' + 'https://example.com/00002.ts\n' + '#EXTINF:10,\n' + '//example.com/00003.ts\n' + '#EXTINF:10,\n' + 'http://example.com/00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'allowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n', 'allowCacheInvalid': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:0\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'alternateAudio': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"\n' + '\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="avc1.42e00a,mp4a.40.2",AUDIO="audio"\n' + 'lo/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="avc1.42e01e,mp4a.40.2",AUDIO="audio"\n' + 'hi/prog_index.m3u8\n', 'alternateVideo': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO,URI="Angle2/500kbs/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO,URI="Angle3/500kbs/prog_index.m3u8"\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=754857,CODECS="mp4a.40.2,avc1.4d401e",VIDEO="500kbs",AUDIO="aac"\n' + 'Angle1/500kbs/prog_index.m3u8\n', 'brightcove': '#EXTM3U\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=40000\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=960x540\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001\n' + '\n', 'byteRange': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084\n' + 'hls_450k_video2.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n', 'dateTime': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:NO\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-PROGRAM-DATE-TIME:2016-06-22T09:20:16.166-04:00\n' + '#EXTINF:10\n' + 'hls_450k_video.ts\n' + '#EXT-X-PROGRAM-DATE-TIME:2016-06-22T09:20:26.166-04:00\n' + '#EXTINF:10\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'disallowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:NO\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n', 'disc-sequence': '#EXTM3U\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-TARGETDURATION:19\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-DISCONTINUITY-SEQUENCE:3\n' + '#EXTINF:10,0\n' + '001.ts\n' + '#EXTINF:19,0\n' + '002.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '003.ts\n' + '#EXTINF:11,0\n' + '004.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'discontinuity': '#EXTM3U\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-TARGETDURATION:19\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXTINF:10,0\n' + '001.ts\n' + '#EXTINF:19,0\n' + '002.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '003.ts\n' + '#EXTINF:11,0\n' + '004.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '005.ts\n' + '#EXTINF:10,0\n' + '006.ts\n' + '#EXTINF:10,0\n' + '007.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '008.ts\n' + '#EXTINF:16,0\n' + '009.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'domainUris': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/00001.ts\n' + '#EXTINF:10,\n' + '/subdir/00002.ts\n' + '#EXTINF:10,\n' + '/00003.ts\n' + '#EXTINF:10,\n' + '/00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'empty': '\n', 'emptyAllowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n', 'emptyMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'emptyPlaylistType': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'emptyTargetDuration': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=40000\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=960x540\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001\n' + '\n', 'encrypted': '#EXTM3U\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:7794\n' + '#EXT-X-TARGETDURATION:15\n' + '\n' + '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"\n' + '\n' + '#EXTINF:2.833,\n' + 'http://media.example.com/fileSequence52-A.ts\n' + '#EXTINF:15.0,\n' + 'http://media.example.com/fileSequence52-B.ts\n' + '#EXTINF:13.333,\n' + 'http://media.example.com/fileSequence52-C.ts\n' + '\n' + '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"\n' + '\n' + '#EXTINF:15.0,\n' + 'http://media.example.com/fileSequence53-A.ts\n' + '\n' + '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=54",IV=0x00000000000000000000014BB69D61E4\n' + '\n' + '#EXTINF:14.0,\n' + 'http://media.example.com/fileSequence53-B.ts\n' + '\n' + '#EXT-X-KEY:METHOD=NONE\n' + '\n' + '#EXTINF:15.0,\n' + 'http://media.example.com/fileSequence53-B.ts\n', 'event': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:EVENT\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'extXPlaylistTypeInvalidPlaylist': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:STRING\n' + '#EXT-X-MEDIA-SEQUENCE:1\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'extinf': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:;asljasdfii11)))00,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:5,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:9.7,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:22,\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'fmp4': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:6\n' + '#EXT-X-VERSION:7\n' + '#EXT-X-MEDIA-SEQUENCE:1\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-INDEPENDENT-SEGMENTS\n' + '#EXT-X-MAP:URI="main.mp4",BYTERANGE="720@0"\n' + '#EXTINF:6.00600, \n' + '#EXT-X-BYTERANGE:5666510@720\n' + 'main.mp4\n' + '#EXTINF:6.00600, \n' + '#EXT-X-BYTERANGE:5861577@5667230\n' + 'main.mp4\n' + '#EXT-X-ENDLIST\n' + '\n', 'headerOnly': '#EXTM3U\n' + '\n', 'invalidAllowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:MAYBE\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n', 'invalidMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:gobblegobble\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'invalidPlaylistType': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:asdRASDfasdR\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'invalidTargetDuration': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:NaN\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167, \n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'liveMissingSegmentDuration': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '\n', 'liveStart30sBefore': '#EXTM3U\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,0\n' + '001.ts\n' + '#EXTINF:19,0\n' + '002.ts\n' + '#EXTINF:10,0\n' + '003.ts\n' + '#EXTINF:11,0\n' + '004.ts\n' + '#EXTINF:10,0\n' + '005.ts\n' + '#EXTINF:10,0\n' + '006.ts\n' + '#EXTINF:10,0\n' + '007.ts\n' + '#EXTINF:10,0\n' + '008.ts\n' + '#EXTINF:16,0\n' + '009.ts\n', 'manifestExtTTargetdurationNegative': '#EXTM3U\n' + '#ZEN-TOTAL-DURATION:50\n' + '#EXT-X-TARGETDURATION:-10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00001.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'manifestExtXEndlistEarly': '#EXTM3U\n' + '#ZEN-TOTAL-DURATION:50\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00003.ts\n' + '#EXT-X-ENDLIST\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00005.ts\n' + '\n' + '\n', 'manifestNoExtM3u': '#ZEN-TOTAL-DURATION:10\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00001.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'master-fmp4': '#EXTM3U\n' + '#EXT-X-VERSION:6\n' + '#EXT-X-INDEPENDENT-SEGMENTS\n' + '\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a1/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud2",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a2/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud3",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a3/prog_index.m3u8"\n' + '\n' + '\n' + '#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",NAME="English",LANGUAGE="eng",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,URI="s1/eng/prog_index.m3u8"\n' + '\n' + '\n' + '#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="cc1",NAME="English",LANGUAGE="eng",DEFAULT=YES,AUTOSELECT=YES,INSTREAM-ID="CC1"\n' + '\n' + '\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=163198,BANDWIDTH=166942,CODECS="avc1.64002a",RESOLUTION=1920x1080,URI="v6/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=131314,BANDWIDTH=139041,CODECS="avc1.640020",RESOLUTION=1280x720,URI="v5/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=100233,BANDWIDTH=101724,CODECS="avc1.640020",RESOLUTION=960x540,URI="v4/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=81002,BANDWIDTH=84112,CODECS="avc1.64001e",RESOLUTION=768x432,URI="v3/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=64987,BANDWIDTH=65835,CODECS="avc1.64001e",RESOLUTION=640x360,URI="v2/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=41547,BANDWIDTH=42106,CODECS="avc1.640015",RESOLUTION=480x270,URI="v1/iframe_index.m3u8"\n' + '\n' + '\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2165224,BANDWIDTH=2215219,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v4/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7962844,BANDWIDTH=7976430,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v8/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6165024,BANDWIDTH=6181885,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v7/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4664459,BANDWIDTH=4682666,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v6/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3164759,BANDWIDTH=3170746,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v5/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1262552,BANDWIDTH=1276223,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v3/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=893243,BANDWIDTH=904744,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=527673,BANDWIDTH=538201,CODECS="avc1.640015,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v1/prog_index.m3u8\n' + '\n' + '\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2390334,BANDWIDTH=2440329,CODECS="avc1.640020,ac-3",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v4/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8187954,BANDWIDTH=8201540,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v8/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6390134,BANDWIDTH=6406995,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v7/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4889569,BANDWIDTH=4907776,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v6/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3389869,BANDWIDTH=3395856,CODECS="avc1.640020,ac-3",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v5/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1487662,BANDWIDTH=1501333,CODECS="avc1.64001e,ac-3",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v3/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1118353,BANDWIDTH=1129854,CODECS="avc1.64001e,ac-3",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=752783,BANDWIDTH=763311,CODECS="avc1.640015,ac-3",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v1/prog_index.m3u8\n' + '\n' + '\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2198334,BANDWIDTH=2248329,CODECS="avc1.640020,ec-3",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v4/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7995954,BANDWIDTH=8009540,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v8/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6198134,BANDWIDTH=6214995,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v7/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4697569,BANDWIDTH=4715776,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v6/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3197869,BANDWIDTH=3203856,CODECS="avc1.640020,ec-3",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v5/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1295662,BANDWIDTH=1309333,CODECS="avc1.64001e,ec-3",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v3/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=926353,BANDWIDTH=937854,CODECS="avc1.64001e,ec-3",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=560783,BANDWIDTH=571311,CODECS="avc1.640015,ec-3",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v1/prog_index.m3u8\n' + '\n', 'master': '# A simple master playlist with multiple variant streams\n' + '#EXTM3U\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000,RESOLUTION=396x224\n' + 'media.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=40000\n' + 'media1.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000,RESOLUTION=396x224\n' + 'media2.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=960x540\n' + 'media3.m3u8\n' + '\n', 'media': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media-00001.ts\n' + '#EXTINF:10,\n' + 'media-00002.ts\n' + '#EXTINF:10,\n' + 'media-00003.ts\n' + '#EXTINF:10,\n' + 'media-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'media1': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media1-00001.ts\n' + '#EXTINF:10,\n' + 'media1-00002.ts\n' + '#EXTINF:10,\n' + 'media1-00003.ts\n' + '#EXTINF:10,\n' + 'media1-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'media2': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media2-00001.ts\n' + '#EXTINF:10,\n' + 'media2-00002.ts\n' + '#EXTINF:10,\n' + 'media2-00003.ts\n' + '#EXTINF:10,\n' + 'media2-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'media3': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media3-00001.ts\n' + '#EXTINF:10,\n' + 'media3-00002.ts\n' + '#EXTINF:10,\n' + 'media3-00003.ts\n' + '#EXTINF:10,\n' + 'media3-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'mediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'missingEndlist': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '00001.ts\n' + '#EXTINF:10,\n' + '00002.ts\n' + '\n', 'missingExtinf': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10\n' + 'hls_450k_video.ts\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'missingMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'missingSegmentDuration': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'multipleAudioGroups': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="englo/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="frelo/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="splo/prog_index.m3u8"\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"\n' + '\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="mp4a.40.5", AUDIO="audio-lo"\n' + 'lo/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=260000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-lo"\n' + 'lo2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="mp4a.40.2, avc1.64001e", AUDIO="audio-hi"\n' + 'hi/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=650000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-hi"\n' + 'hi2/prog_index.m3u8\n' + '\n', 'multipleAudioGroupsCombinedMain': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="frelo/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="splo/prog_index.m3u8"\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"\n' + '\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="mp4a.40.5", AUDIO="audio-lo"\n' + 'lo/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=260000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-lo"\n' + 'lo2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="mp4a.40.2, avc1.64001e", AUDIO="audio-hi"\n' + 'hi/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=650000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-hi"\n' + 'hi2/prog_index.m3u8\n' + '\n', 'multipleTargetDurations': '#EXTM3U\n' + '001.ts\n' + '#EXT-X-TARGETDURATION:9\n' + '002.ts\n' + '#EXTINF:7\n' + '003.ts\n' + '#EXT-X-TARGETDURATION:10\n' + '004.ts\n', 'multipleVideo': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO,URI="Angle2/200kbs/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO,URI="Angle3/200kbs/prog_index.m3u8"\n' + ' \n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO,URI="Angle2/500kbs/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO,URI="Angle3/500kbs/prog_index.m3u8"\n' + ' \n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + ' \n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=300000,CODECS="mp4a.40.2,avc1.4d401e",VIDEO="200kbs",AUDIO="aac"\n' + 'Angle1/200kbs/prog_index.m3u\n' + ' \n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=754857,CODECS="mp4a.40.2,avc1.4d401e",VIDEO="500kbs",AUDIO="aac"\n' + 'Angle1/500kbs/prog_index.m3u8\n', 'negativeMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:-11\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'playlist': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167, \n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'playlistMediaSequenceHigher': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:17\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'playlist_allow_cache_template': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:{{{version}}}\n' + '{{#if allowCache}}#EXT-X-ALLOW-CACHE:{{{allowCache}}}{{/if}}\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n', 'playlist_byte_range_template': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:{{{version}}}\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '{{#if byteRange}}#EXT-X-BYTERANGE:{{{byteRange}}}{{/if}}\n' + '//#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '{{#if byteRange1}}#EXT-X-BYTERANGE:{{{byteRange1}}}{{/if}}\n' + '//#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '{{#if byteRange2}}#EXT-X-BYTERANGE:{{{byteRange2}}}{{/if}}\n' + '//#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n', 'playlist_extinf_template': '#EXTM3U\n' + ' #EXT-X-TARGETDURATION:10\n' + ' #EXT-X-VERSION:{{{version}}}\n' + ' #EXT-X-MEDIA-SEQUENCE:0\n' + ' #EXT-X-PLAYLIST-TYPE:VOD\n' + ' {{#if extInf}}#EXTINF:{{{extInf}}}{{/if}}\n' + ' #EXT-X-BYTERANGE:522828@0\n' + ' {{#if segment}}{{{segment}}}\n{{/if}}\n' + ' {{#if extInf1}}#EXTINF:{{{extInf1}}}{{/if}}\n' + ' #EXT-X-BYTERANGE:587500@522828\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:713084@1110328\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:476580@1823412\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:535612@2299992\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:207176@2835604\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:455900@3042780\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:657248@3498680\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:571708@4155928\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:485040@4727636\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:709136@5212676\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:730004@5921812\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:456276@6651816\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:468684@7108092\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:444996@7576776\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:331444@8021772\n' + ' hls_450k_video.ts\n' + ' {{#if extInf2}}#EXTINF:{{{extInf2}}}{{/if}}\n' + ' #EXT-X-BYTERANGE:44556@8353216\n' + ' hls_450k_video.ts\n' + ' #EXT-X-ENDLIST\n' + '\n', 'playlist_media_sequence_template': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '{{#if mediaSequence}}#EXT-X-MEDIA-SEQUENCE:{{{mediaSequence}}}{{/if}}\n' + '{{#if mediaSequence1}}#EXT-X-MEDIA-SEQUENCE:{{{mediaSequence2}}}{{/if}}\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'playlist_target_duration_template': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '{{#if targetDuration}}#EXT-X-TARGETDURATION:{{{targetDuration}}}{{/if}}\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'playlist_type_template': '#EXTM3U\n' + '{{#if playlistType}}#EXT-X-PLAYLIST-TYPE:{{{playlistType}}}{{/if}}\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'start': '#EXT-X-VERSION:3\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-START:TIME-OFFSET=10.3\n' + '#EXTINF:10,\n' + 'media-00001.ts\n' + '#EXTINF:10,\n' + 'media-00002.ts\n' + '#EXTINF:10,\n' + 'media-00003.ts\n' + '#EXTINF:10,\n' + 'media-00004.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'streamInfInvalid': '# A simple master playlist with multiple variant streams\n' + '#EXTM3U\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1\n' + 'media.m3u8\n' + '#EXT-X-STREAM-INF:\n' + 'media1.m3u8\n' + '\n', 'twoMediaSequences': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-MEDIA-SEQUENCE:11\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'versionInvalid': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:NaN\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n', 'whiteSpace': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + ' \n' + '#EXTINF:10,\n' + 'http://example.com/00001.ts \n' + '#EXTINF:10,\n' + ' https://example.com/00002.ts\n' + '#EXTINF:10,\n' + ' //example.com/00003.ts \n' + '#EXTINF:10,\n' + ' http://example.com/00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n', 'zeroDuration': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '\n' + '#EXTINF:0,\n' + 'http://example.com/00001.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n' }; QUnit.module('LineStream', { beforeEach: function beforeEach() { this.lineStream = new LineStream(); } }); QUnit.test('empty inputs produce no tokens', function (assert) { var data = false; this.lineStream.on('data', function () { data = true; }); this.lineStream.push(''); assert.ok(!data, 'no tokens were produced'); }); QUnit.test('splits on newlines', function (assert) { var lines = []; this.lineStream.on('data', function (line) { lines.push(line); }); this.lineStream.push('#EXTM3U\nmovie.ts\n'); assert.strictEqual(2, lines.length, 'two lines are ready'); assert.strictEqual('#EXTM3U', lines.shift(), 'the first line is the first token'); assert.strictEqual('movie.ts', lines.shift(), 'the second line is the second token'); }); QUnit.test('empty lines become empty strings', function (assert) { var lines = []; this.lineStream.on('data', function (line) { lines.push(line); }); this.lineStream.push('\n\n'); assert.strictEqual(2, lines.length, 'two lines are ready'); assert.strictEqual('', lines.shift(), 'the first line is empty'); assert.strictEqual('', lines.shift(), 'the second line is empty'); }); QUnit.test('handles lines broken across appends', function (assert) { var lines = []; this.lineStream.on('data', function (line) { lines.push(line); }); this.lineStream.push('#EXTM'); assert.strictEqual(0, lines.length, 'no lines are ready'); this.lineStream.push('3U\nmovie.ts\n'); assert.strictEqual(2, lines.length, 'two lines are ready'); assert.strictEqual('#EXTM3U', lines.shift(), 'the first line is the first token'); assert.strictEqual('movie.ts', lines.shift(), 'the second line is the second token'); }); QUnit.test('stops sending events after deregistering', function (assert) { var temporaryLines = []; var temporary = function temporary(line) { temporaryLines.push(line); }; var permanentLines = []; var permanent = function permanent(line) { permanentLines.push(line); }; this.lineStream.on('data', temporary); this.lineStream.on('data', permanent); this.lineStream.push('line one\n'); assert.strictEqual(temporaryLines.length, permanentLines.length, 'both callbacks receive the event'); assert.ok(this.lineStream.off('data', temporary), 'a listener was removed'); this.lineStream.push('line two\n'); assert.strictEqual(1, temporaryLines.length, 'no new events are received'); assert.strictEqual(2, permanentLines.length, 'new events are still received'); }); QUnit.module('ParseStream', { beforeEach: function beforeEach() { this.lineStream = new LineStream(); this.parseStream = new ParseStream(); this.lineStream.pipe(this.parseStream); } }); QUnit.test('parses custom tags', function (assert) { var manifest = '#VOD-STARTTIMESTAMP:1501533337573\n'; var element; this.parseStream.addParser({ expression: /^#VOD-STARTTIMESTAMP/, customType: 'startTimestamp' }); this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'element'); assert.strictEqual(element.type, 'custom', 'the type of the data is custom'); assert.strictEqual(element.customType, 'startTimestamp', 'the customType is startTimestamp'); }); QUnit.test('mapper does not conflict with parser', function (assert) { var manifest = '#EXAMPLE\n'; var commentMapper = sinon.spy(function (line) { return '#NEW-COMMENT'; }); var commentMapper2 = sinon.spy(function (line) { return '#SOMETHING-ELSE'; }); var dataCallback = sinon.spy(); this.parseStream.addTagMapper({ expression: /^#EXAMPLE/, map: commentMapper }); this.parseStream.addTagMapper({ expression: /^#EXAMPLE/, map: commentMapper2 }); this.parseStream.addParser({ expression: /^#EXAMPLE/, customType: 'test' }); this.parseStream.addParser({ expression: /^#NEW-COMMENT/, customType: 'test2' }); this.parseStream.on('data', dataCallback); this.lineStream.push(manifest); assert.ok(commentMapper.called); assert.ok(commentMapper2.called); assert.strictEqual(dataCallback.callCount, 3); assert.deepEqual(dataCallback.getCall(0).args[0], { data: '#EXAMPLE', type: 'custom', customType: 'test', segment: undefined }); assert.deepEqual(dataCallback.getCall(1).args[0], { data: '#NEW-COMMENT', type: 'custom', customType: 'test2', segment: undefined }); assert.deepEqual(dataCallback.getCall(2).args[0], { text: 'SOMETHING-ELSE', type: 'comment' }); }); QUnit.test('maps custom tags', function (assert) { var manifest = '#EXAMPLE\n'; var commentMapper = sinon.spy(function (line) { return '#NEW-COMMENT'; }); var dataCallback = sinon.spy(); this.parseStream.addTagMapper({ expression: /^#EXAMPLE/, map: commentMapper }); this.parseStream.on('data', dataCallback); this.lineStream.push(manifest); assert.ok(commentMapper.called); assert.strictEqual(dataCallback.callCount, 2); assert.deepEqual(dataCallback.getCall(0).args[0], { text: 'EXAMPLE', type: 'comment' }); assert.deepEqual(dataCallback.getCall(1).args[0], { text: 'NEW-COMMENT', type: 'comment' }); }); QUnit.test('maps multiple custom tags', function (assert) { var manifest = '#VOD-STARTTIMESTAMP:1501533337573\n'; var commentMapper = sinon.spy(function (line) { return '#NEW-COMMENT'; }); var pdtMapper = sinon.spy(function (line) { var match = /#VOD-STARTTIMESTAMP:(\d+)/g.exec(line)[1]; var ISOdate = new Date(Number(match)).toISOString(); return "#EXT-X-PROGRAM-DATE-TIME:" + ISOdate; }); var dataCallback = sinon.spy(); this.parseStream.addTagMapper({ expression: /^#VOD-STARTTIMESTAMP/, map: commentMapper }); this.parseStream.addTagMapper({ expression: /^#VOD-STARTTIMESTAMP/, map: pdtMapper }); this.parseStream.on('data', dataCallback); this.lineStream.push(manifest); assert.ok(commentMapper.called); assert.ok(pdtMapper.called); assert.strictEqual(dataCallback.callCount, 3); assert.deepEqual(dataCallback.getCall(0).args[0], { text: 'VOD-STARTTIMESTAMP:1501533337573', type: 'comment' }); assert.deepEqual(dataCallback.getCall(1).args[0], { text: 'NEW-COMMENT', type: 'comment' }); var dateTag = dataCallback.getCall(2).args[0]; assert.strictEqual(dateTag.dateTimeString, '2017-07-31T20:35:37.573Z'); assert.strictEqual(dateTag.tagType, 'program-date-time'); assert.strictEqual(dateTag.type, 'tag'); }); QUnit.test('mapper ignores tags', function (assert) { var manifest = '#TAG\n'; var dataCallback = sinon.spy(); this.parseStream.addTagMapper({ expression: /^#NO-MATCH/, map: function map(line) { return '#MAPPED'; } }); this.parseStream.on('data', dataCallback); this.lineStream.push(manifest); assert.strictEqual(dataCallback.callCount, 1); assert.deepEqual(dataCallback.getCall(0).args[0], { text: 'TAG', type: 'comment' }); }); QUnit.test('parses comment lines', function (assert) { var manifest = '# a line that starts with a hash mark without "EXT" is a comment\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'comment', 'the type is comment'); assert.strictEqual(element.text, manifest.slice(1, manifest.length - 1), 'the comment text is parsed'); }); QUnit.test('parses uri lines', function (assert) { var manifest = 'any non-blank line that does not start with a hash-mark is a URI\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'uri', 'the type is uri'); assert.strictEqual(element.uri, manifest.substring(0, manifest.length - 1), 'the uri text is parsed'); }); QUnit.test('parses unknown tag types', function (assert) { var manifest = '#EXT-X-EXAMPLE-TAG:some,additional,stuff\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the type is tag'); assert.strictEqual(element.data, manifest.slice(4, manifest.length - 1), 'unknown tag data is preserved'); }); // #EXTM3U QUnit.test('parses #EXTM3U tags', function (assert) { var manifest = '#EXTM3U\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'm3u', 'the tag type is m3u'); }); // #EXTINF QUnit.test('parses minimal #EXTINF tags', function (assert) { var manifest = '#EXTINF\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'inf', 'the tag type is inf'); }); QUnit.test('parses #EXTINF tags with durations', function (assert) { var manifest = '#EXTINF:15\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'inf', 'the tag type is inf'); assert.strictEqual(element.duration, 15, 'the duration is parsed'); assert.ok(!('title' in element), 'no title is parsed'); manifest = '#EXTINF:21,\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'inf', 'the tag type is inf'); assert.strictEqual(element.duration, 21, 'the duration is parsed'); assert.ok(!('title' in element), 'no title is parsed'); }); QUnit.test('parses #EXTINF tags with a duration and title', function (assert) { var manifest = '#EXTINF:13,Does anyone really use the title attribute?\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'inf', 'the tag type is inf'); assert.strictEqual(element.duration, 13, 'the duration is parsed'); assert.strictEqual(element.title, manifest.substring(manifest.indexOf(',') + 1, manifest.length - 1), 'the title is parsed'); }); QUnit.test('parses #EXTINF tags with carriage returns', function (assert) { var manifest = '#EXTINF:13,Does anyone really use the title attribute?\r\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'inf', 'the tag type is inf'); assert.strictEqual(element.duration, 13, 'the duration is parsed'); assert.strictEqual(element.title, manifest.substring(manifest.indexOf(',') + 1, manifest.length - 2), 'the title is parsed'); }); // #EXT-X-TARGETDURATION QUnit.test('parses minimal #EXT-X-TARGETDURATION tags', function (assert) { var manifest = '#EXT-X-TARGETDURATION\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'targetduration', 'the tag type is targetduration'); assert.ok(!('duration' in element), 'no duration is parsed'); }); QUnit.test('parses #EXT-X-TARGETDURATION with duration', function (assert) { var manifest = '#EXT-X-TARGETDURATION:47\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'targetduration', 'the tag type is targetduration'); assert.strictEqual(element.duration, 47, 'the duration is parsed'); }); // #EXT-X-VERSION QUnit.test('parses minimal #EXT-X-VERSION tags', function (assert) { var manifest = '#EXT-X-VERSION:\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'version', 'the tag type is version'); assert.ok(!('version' in element), 'no version is present'); }); QUnit.test('parses #EXT-X-VERSION with a version', function (assert) { var manifest = '#EXT-X-VERSION:99\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'version', 'the tag type is version'); assert.strictEqual(element.version, 99, 'the version is parsed'); }); // #EXT-X-MEDIA-SEQUENCE QUnit.test('parses minimal #EXT-X-MEDIA-SEQUENCE tags', function (assert) { var manifest = '#EXT-X-MEDIA-SEQUENCE\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'media-sequence', 'the tag type is media-sequence'); assert.ok(!('number' in element), 'no number is present'); }); QUnit.test('parses #EXT-X-MEDIA-SEQUENCE with sequence numbers', function (assert) { var manifest = '#EXT-X-MEDIA-SEQUENCE:109\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'media-sequence', 'the tag type is media-sequence'); assert.ok(element.number, 109, 'the number is parsed'); }); // #EXT-X-PLAYLIST-TYPE QUnit.test('parses minimal #EXT-X-PLAYLIST-TYPE tags', function (assert) { var manifest = '#EXT-X-PLAYLIST-TYPE:\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type'); assert.ok(!('playlistType' in element), 'no playlist type is present'); }); QUnit.test('parses #EXT-X-PLAYLIST-TYPE with mutability info', function (assert) { var manifest = '#EXT-X-PLAYLIST-TYPE:EVENT\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type'); assert.strictEqual(element.playlistType, 'EVENT', 'the playlist type is EVENT'); manifest = '#EXT-X-PLAYLIST-TYPE:VOD\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type'); assert.strictEqual(element.playlistType, 'VOD', 'the playlist type is VOD'); manifest = '#EXT-X-PLAYLIST-TYPE:nonsense\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type'); assert.strictEqual(element.playlistType, 'nonsense', 'the playlist type is parsed'); }); // #EXT-X-BYTERANGE QUnit.test('parses minimal #EXT-X-BYTERANGE tags', function (assert) { var manifest = '#EXT-X-BYTERANGE\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'byterange', 'the tag type is byterange'); assert.ok(!('length' in element), 'no length is present'); assert.ok(!('offset' in element), 'no offset is present'); }); QUnit.test('parses #EXT-X-BYTERANGE with length and offset', function (assert) { var manifest = '#EXT-X-BYTERANGE:45\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'byterange', 'the tag type is byterange'); assert.strictEqual(element.length, 45, 'length is parsed'); assert.ok(!('offset' in element), 'no offset is present'); manifest = '#EXT-X-BYTERANGE:108@16\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'byterange', 'the tag type is byterange'); assert.strictEqual(element.length, 108, 'length is parsed'); assert.strictEqual(element.offset, 16, 'offset is parsed'); }); // #EXT-X-ALLOW-CACHE QUnit.test('parses minimal #EXT-X-ALLOW-CACHE tags', function (assert) { var manifest = '#EXT-X-ALLOW-CACHE:\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'allow-cache', 'the tag type is allow-cache'); assert.ok(!('allowed' in element), 'no allowed is present'); }); QUnit.test('parses valid #EXT-X-ALLOW-CACHE tags', function (assert) { var manifest = '#EXT-X-ALLOW-CACHE:YES\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'allow-cache', 'the tag type is allow-cache'); assert.ok(element.allowed, 'allowed is parsed'); manifest = '#EXT-X-ALLOW-CACHE:NO\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'allow-cache', 'the tag type is allow-cache'); assert.ok(!element.allowed, 'allowed is parsed'); }); // #EXT-X-MAP QUnit.test('parses minimal #EXT-X-MAP tags', function (assert) { var manifest = '#EXT-X-MAP:URI="init.m4s"\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'map', 'the tag type is map'); assert.strictEqual(element.uri, 'init.m4s', 'parsed the uri'); }); QUnit.test('parses #EXT-X-MAP tags with a byterange', function (assert) { var manifest = '#EXT-X-MAP:URI="0.m4s", BYTERANGE="1000@23"\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.uri, '0.m4s', 'parsed the uri'); assert.strictEqual(element.byterange.length, 1000, 'parsed the byterange length'); assert.strictEqual(element.byterange.offset, 23, 'parsed the byterange offset'); }); QUnit.test('parses #EXT-X-MAP tags with arbitrary attributes', function (assert) { var manifest = '#EXT-X-MAP:URI="init.mp4", SOMETHING=YES,BYTERANGE="720@0"\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.uri, 'init.mp4', 'parsed the uri'); assert.strictEqual(element.byterange.length, 720, 'parsed the byterange length'); assert.strictEqual(element.byterange.offset, 0, 'parsed the byterange offset'); }); // #EXT-X-STREAM-INF QUnit.test('parses minimal #EXT-X-STREAM-INF tags', function (assert) { var manifest = '#EXT-X-STREAM-INF\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf'); assert.ok(!('attributes' in element), 'no attributes are present'); }); // #EXT-X-PROGRAM-DATE-TIME QUnit.test('parses minimal EXT-X-PROGRAM-DATE-TIME tags', function (assert) { var manifest = '#EXT-X-PROGRAM-DATE-TIME\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'program-date-time', 'the tag type is date-time'); assert.ok(!('dateTimeString' in element), 'no dateTime is present'); }); QUnit.test('parses EXT-X-PROGRAM-DATE-TIME tags with valid date-time formats', function (assert) { var manifest = '#EXT-X-PROGRAM-DATE-TIME:2016-06-22T09:20:16.166-04:00\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'program-date-time', 'the tag type is date-time'); assert.strictEqual(element.dateTimeString, '2016-06-22T09:20:16.166-04:00', 'dateTimeString is parsed'); assert.deepEqual(element.dateTimeObject, new Date('2016-06-22T09:20:16.166-04:00'), 'dateTimeObject is parsed'); manifest = '#EXT-X-PROGRAM-DATE-TIME:2016-06-22T09:20:16.16389Z\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'program-date-time', 'the tag type is date-time'); assert.strictEqual(element.dateTimeString, '2016-06-22T09:20:16.16389Z', 'dateTimeString is parsed'); assert.deepEqual(element.dateTimeObject, new Date('2016-06-22T09:20:16.16389Z'), 'dateTimeObject is parsed'); }); QUnit.test('parses #EXT-X-STREAM-INF with common attributes', function (assert) { var manifest = '#EXT-X-STREAM-INF:BANDWIDTH=14400\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf'); assert.strictEqual(element.attributes.BANDWIDTH, 14400, 'bandwidth is parsed'); manifest = '#EXT-X-STREAM-INF:PROGRAM-ID=7\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf'); assert.strictEqual(element.attributes['PROGRAM-ID'], 7, 'program-id is parsed'); manifest = '#EXT-X-STREAM-INF:RESOLUTION=396x224\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf'); assert.strictEqual(element.attributes.RESOLUTION.width, 396, 'width is parsed'); assert.strictEqual(element.attributes.RESOLUTION.height, 224, 'heigth is parsed'); manifest = '#EXT-X-STREAM-INF:CODECS="avc1.4d400d, mp4a.40.2"\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf'); assert.strictEqual(element.attributes.CODECS, 'avc1.4d400d, mp4a.40.2', 'codecs are parsed'); }); QUnit.test('parses #EXT-X-STREAM-INF with arbitrary attributes', function (assert) { var manifest = '#EXT-X-STREAM-INF:NUMERIC=24,ALPHA=Value,MIXED=123abc\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf'); assert.strictEqual(element.attributes.NUMERIC, '24', 'numeric attributes are parsed'); assert.strictEqual(element.attributes.ALPHA, 'Value', 'alphabetic attributes are parsed'); assert.strictEqual(element.attributes.MIXED, '123abc', 'mixed attributes are parsed'); }); // #EXT-X-ENDLIST QUnit.test('parses #EXT-X-ENDLIST tags', function (assert) { var manifest = '#EXT-X-ENDLIST\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'endlist', 'the tag type is stream-inf'); }); // #EXT-X-KEY QUnit.test('parses valid #EXT-X-KEY tags', function (assert) { var manifest = '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.deepEqual(element, { type: 'tag', tagType: 'key', attributes: { METHOD: 'AES-128', URI: 'https://priv.example.com/key.php?r=52' } }, 'parsed a valid key'); manifest = '#EXT-X-KEY:URI="https://example.com/key#1",METHOD=FutureType-1024\n'; this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.deepEqual(element, { type: 'tag', tagType: 'key', attributes: { METHOD: 'FutureType-1024', URI: 'https://example.com/key#1' } }, 'parsed the attribute list independent of order'); manifest = '#EXT-X-KEY:IV=1234567890abcdef1234567890abcdef\n'; this.lineStream.push(manifest); assert.ok(element.attributes.IV, 'detected an IV attribute'); assert.deepEqual(element.attributes.IV, new Uint32Array([0x12345678, 0x90abcdef, 0x12345678, 0x90abcdef]), 'parsed an IV value'); }); QUnit.test('parses minimal #EXT-X-KEY tags', function (assert) { var manifest = '#EXT-X-KEY:\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.deepEqual(element, { type: 'tag', tagType: 'key' }, 'parsed a minimal key tag'); }); QUnit.test('parses lightly-broken #EXT-X-KEY tags', function (assert) { var manifest = '#EXT-X-KEY:URI=\'https://example.com/single-quote\',METHOD=AES-128\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.strictEqual(element.attributes.URI, 'https://example.com/single-quote', 'parsed a single-quoted uri'); element = null; manifest = '#EXT-X-KEYURI="https://example.com/key",METHOD=AES-128\n'; this.lineStream.push(manifest); assert.strictEqual(element.tagType, 'key', 'parsed the tag type'); assert.strictEqual(element.attributes.URI, 'https://example.com/key', 'inferred a colon after the tag type'); element = null; manifest = '#EXT-X-KEY: URI = "https://example.com/key",METHOD=AES-128\n'; this.lineStream.push(manifest); assert.strictEqual(element.attributes.URI, 'https://example.com/key', 'trims and removes quotes around the URI'); }); QUnit.test('parses prefixed with 0x or 0X #EXT-X-KEY:IV tags', function (assert) { var manifest; var element; this.parseStream.on('data', function (elem) { element = elem; }); manifest = '#EXT-X-KEY:IV=0x1234567890abcdef1234567890abcdef\n'; this.lineStream.push(manifest); assert.ok(element.attributes.IV, 'detected an IV attribute'); assert.deepEqual(element.attributes.IV, new Uint32Array([0x12345678, 0x90abcdef, 0x12345678, 0x90abcdef]), 'parsed an IV value with 0x'); manifest = '#EXT-X-KEY:IV=0X1234567890abcdef1234567890abcdef\n'; this.lineStream.push(manifest); assert.ok(element.attributes.IV, 'detected an IV attribute'); assert.deepEqual(element.attributes.IV, new Uint32Array([0x12345678, 0x90abcdef, 0x12345678, 0x90abcdef]), 'parsed an IV value with 0X'); }); // #EXT-X-START QUnit.test('parses EXT-X-START tags', function (assert) { var manifest = '#EXT-X-START:TIME-OFFSET=1.1\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'start', 'the tag type is start'); assert.strictEqual(element.attributes['TIME-OFFSET'], 1.1, 'parses time offset'); assert.strictEqual(element.attributes.PRECISE, false, 'precise defaults to false'); }); QUnit.test('parses EXT-X-START PRECISE attribute', function (assert) { var manifest = '#EXT-X-START:TIME-OFFSET=1.4,PRECISE=YES\n'; var element; this.parseStream.on('data', function (elem) { element = elem; }); this.lineStream.push(manifest); assert.ok(element, 'an event was triggered'); assert.strictEqual(element.type, 'tag', 'the line type is tag'); assert.strictEqual(element.tagType, 'start', 'the tag type is start'); assert.strictEqual(element.attributes['TIME-OFFSET'], 1.4, 'parses time offset'); assert.strictEqual(element.attributes.PRECISE, true, 'parses precise attribute'); }); QUnit.test('flags missing EXT-X-START TIME-OFFSET attribute', function (assert) { var parser = new Parser(); var manifest = ['#EXT-X-VERSION:3', '#EXT-X-TARGETDURATION:10', '#EXT-X-START:PRECISE=YES', '#EXTINF:10,', 'media-00001.ts', '#EXT-X-ENDLIST'].join('\n'); var warning; parser.on('warn', function (warn) { warning = warn; }); parser.push(manifest); assert.ok(warning, 'a warning was triggered'); assert.ok(/ignoring start/.test(warning.message), 'message is about start tag'); assert.strictEqual(typeof parser.manifest.start, 'undefined', 'does not parse start'); }); QUnit.test('ignores empty lines', function (assert) { var manifest = '\n'; var event = false; this.parseStream.on('data', function () { event = true; }); this.lineStream.push(manifest); assert.ok(!event, 'no event is triggered'); }); QUnit.module('m3u8 parser'); QUnit.test('can be constructed', function (assert) { assert.notStrictEqual(typeof new Parser(), 'undefined', 'parser is defined'); }); QUnit.test('can set custom parsers', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-VERSION:3', '#EXT-X-TARGETDURATION:10', '#EXT-X-MEDIA-SEQUENCE:0', '#EXT-X-PROGRAM-DATE-TIME:2017-07-31T20:35:35.053+00:00', '#VOD-STARTTIMESTAMP:1501533337573', '#VOD-TOTALDELETEDDURATION:0.0', '#VOD-FRAMERATE:29.97', ''].join('\n'); parser.addParser({ expression: /^#VOD-STARTTIMESTAMP/, customType: 'startTimestamp' }); parser.addParser({ expression: /^#VOD-TOTALDELETEDDURATION/, customType: 'totalDeleteDuration' }); parser.addParser({ expression: /^#VOD-FRAMERATE/, customType: 'framerate', dataParser: function dataParser(line) { return line.split(':')[1]; } }); parser.push(manifest); assert.strictEqual(parser.manifest.custom.startTimestamp, '#VOD-STARTTIMESTAMP:1501533337573', 'sets custom timestamp line'); assert.strictEqual(parser.manifest.custom.totalDeleteDuration, '#VOD-TOTALDELETEDDURATION:0.0', 'sets custom delete duration'); assert.strictEqual(parser.manifest.custom.framerate, '29.97', 'sets framerate'); }); QUnit.test('segment level custom data', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#VOD-TIMING:1511816599485', '#COMMENT', '#EXTINF:8.0,', 'ex1.ts', '#VOD-TIMING', '#EXTINF:8.0,', 'ex2.ts', '#VOD-TIMING:1511816615485', '#EXT-UNKNOWN', '#EXTINF:8.0,', 'ex3.ts', '#VOD-TIMING:1511816623485', '#EXTINF:8.0,', 'ex3.ts', '#EXT-X-ENDLIST'].join('\n'); parser.addParser({ expression: /^#VOD-TIMING/, customType: 'vodTiming', segment: true }); parser.push(manifest); assert.equal(parser.manifest.segments[0].custom.vodTiming, '#VOD-TIMING:1511816599485', 'parser attached segment level custom data'); assert.equal(parser.manifest.segments[1].custom.vodTiming, '#VOD-TIMING', 'parser got segment level custom data without :'); }); QUnit.test('attaches cue-out data to segment', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXTINF:5,', '#COMMENT', 'ex1.ts', '#EXT-X-CUE-OUT:10', '#EXTINF:5,', 'ex2.ts', '#EXT-X-CUE-OUT15', '#EXT-UKNOWN-TAG', '#EXTINF:5,', 'ex3.ts', '#EXT-X-CUE-OUT', '#EXTINF:5,', 'ex3.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.equal(parser.manifest.segments[1].cueOut, '10', 'parser attached cue out tag'); assert.equal(parser.manifest.segments[2].cueOut, '15', 'cue out without : seperator'); assert.equal(parser.manifest.segments[3].cueOut, '', 'cue out without data'); }); QUnit.test('attaches cue-out-cont data to segment', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXTINF:5,', '#COMMENT', 'ex1.ts', '#EXT-X-CUE-OUT-CONT:10/60', '#EXTINF:5,', 'ex2.ts', '#EXT-X-CUE-OUT-CONT15/30', '#EXT-UKNOWN-TAG', '#EXTINF:5,', 'ex3.ts', '#EXT-X-CUE-OUT-CONT', '#EXTINF:5,', 'ex3.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.equal(parser.manifest.segments[1].cueOutCont, '10/60', 'parser attached cue out cont tag'); assert.equal(parser.manifest.segments[2].cueOutCont, '15/30', 'cue out cont without : seperator'); assert.equal(parser.manifest.segments[3].cueOutCont, '', 'cue out cont without data'); }); QUnit.test('attaches cue-in data to segment', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXTINF:5,', '#COMMENT', 'ex1.ts', '#EXT-X-CUE-IN', '#EXTINF:5,', 'ex2.ts', '#EXT-X-CUE-IN:15', '#EXT-UKNOWN-TAG', '#EXTINF:5,', 'ex3.ts', '#EXT-X-CUE-IN=abc', '#EXTINF:5,', 'ex3.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.equal(parser.manifest.segments[1].cueIn, '', 'parser attached cue in tag'); assert.equal(parser.manifest.segments[2].cueIn, '15', 'cue in with data'); assert.equal(parser.manifest.segments[3].cueIn, '=abc', 'cue in without colon seperator'); }); QUnit.test('parses characteristics attribute', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",CHARACTERISTICS="char",NAME="test"', '#EXT-X-STREAM-INF:BANDWIDTH=1,CODECS="mp4a.40.2, avc1.4d400d",SUBTITLES="subs"', 'index.m3u8'].join('\n'); parser.push(manifest); assert.equal(parser.manifest.mediaGroups.SUBTITLES.subs.test.characteristics, 'char', 'parsed CHARACTERISTICS attribute'); }); QUnit.test('parses FORCED attribute', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",CHARACTERISTICS="char",NAME="test",FORCED=YES', '#EXT-X-STREAM-INF:BANDWIDTH=1,CODECS="mp4a.40.2, avc1.4d400d",SUBTITLES="subs"', 'index.m3u8'].join('\n'); parser.push(manifest); assert.ok(parser.manifest.mediaGroups.SUBTITLES.subs.test.forced, 'parsed FORCED attribute'); }); QUnit.test('parses Widevine #EXT-X-KEY attributes and attaches to manifest', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-KEY:METHOD=SAMPLE-AES-CTR,' + 'URI="data:text/plain;base64,AAAAPnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB4iFnN' + 'oYWthX2NlYzJmNjRhYTc4OTBhMTFI49yVmwY=",KEYID=0x800AACAA522958AE888062B5695DB6BF,' + 'KEYFORMATVERSIONS="1",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"', '#EXTINF:5,', 'ex1.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.ok(parser.manifest.contentProtection, 'contentProtection property added'); assert.equal(parser.manifest.contentProtection['com.widevine.alpha'].attributes.schemeIdUri, 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed', 'schemeIdUri set correctly'); assert.equal(parser.manifest.contentProtection['com.widevine.alpha'].attributes.keyId, '800AACAA522958AE888062B5695DB6BF', 'keyId set correctly'); assert.equal(parser.manifest.contentProtection['com.widevine.alpha'].pssh.byteLength, 62, 'base64 URI decoded to TypedArray'); }); QUnit.test('Widevine #EXT-X-KEY attributes not attached to manifest if METHOD is invalid', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-KEY:METHOD=NONE,' + 'URI="data:text/plain;base64,AAAAPnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB4iFnN' + 'oYWthX2NlYzJmNjRhYTc4OTBhMTFI49yVmwY=",KEYID=0x800AACAA522958AE888062B5695DB6BF,' + 'KEYFORMATVERSIONS="1",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"', '#EXTINF:5,', 'ex1.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.notOk(parser.manifest.contentProtection, 'contentProtection not added'); }); QUnit.test('Widevine #EXT-X-KEY attributes not attached to manifest if URI is invalid', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-KEY:METHOD=SAMPLE-AES-CTR,' + 'URI="AAAAPnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB4iFnN' + 'oYWthX2NlYzJmNjRhYTc4OTBhMTFI49yVmwY=",KEYID=0x800AACAA522958AE888062B5695DB6BF,' + 'KEYFORMATVERSIONS="1",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"', '#EXTINF:5,', 'ex1.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.notOk(parser.manifest.contentProtection, 'contentProtection not added'); }); QUnit.test('Widevine #EXT-X-KEY attributes not attached to manifest if KEYID is invalid', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-KEY:METHOD=SAMPLE-AES-CTR,' + 'URI="data:text/plain;base64,AAAAPnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB4iFnN' + 'oYWthX2NlYzJmNjRhYTc4OTBhMTFI49yVmwY=",KEYID=800AACAA522958AE888062B5695DB6BF,' + 'KEYFORMATVERSIONS="1",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"', '#EXTINF:5,', 'ex1.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.notOk(parser.manifest.contentProtection, 'contentProtection not added'); }); QUnit.test('Widevine #EXT-X-KEY attributes not attached to manifest if KEYFORMAT is not Widevine UUID', function (assert) { var parser = new Parser(); var manifest = ['#EXTM3U', '#EXT-X-KEY:METHOD=SAMPLE-AES-CTR,' + 'URI="data:text/plain;base64,AAAAPnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB4iFnN' + 'oYWthX2NlYzJmNjRhYTc4OTBhMTFI49yVmwY=",KEYID=0x800AACAA522958AE888062B5695DB6BF,' + 'KEYFORMATVERSIONS="1",KEYFORMAT="invalid-keyformat"', '#EXTINF:5,', 'ex1.ts', '#EXT-X-ENDLIST'].join('\n'); parser.push(manifest); assert.notOk(parser.manifest.contentProtection, 'contentProtection not added'); }); QUnit.module('m3u8s'); QUnit.test('parses static manifests as expected', function (assert) { var key; for (key in testDataManifests) { if (testDataExpected[key]) { var parser = new Parser(); parser.push(testDataManifests[key]); assert.deepEqual(parser.manifest, testDataExpected[key], key + '.m3u8 was parsed correctly'); } } }); }(QUnit, sinon));