From 68691c29ad520a9d0d22ee20ed5b856e792aa762 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Fri, 22 Oct 2021 11:27:02 -0700 Subject: [PATCH] initial commit --- all-mp4.m3u8 | 16 + all-webm.m3u8 | 8 + audio-aac.m3u8 | 8 + audio-alac.m3u8 | 8 + audio-flac.m3u8 | 8 + audio-mp3.m3u8 | 8 + audio-opus.m3u8 | 8 + av-aac-h264.m3u8 | 6 + av-aac-mp4.m3u8 | 18 + av-aac-mpeg.m3u8 | 14 + av-aac-vp8.m3u8 | 6 + av-aac-vp9.m3u8 | 6 + av-aac-vpx.m3u8 | 8 + av-all-mp4.m3u8 | 18 + av-mp3-mp4.m3u8 | 18 + av-mp4-h264.m3u8 | 6 + av-only-h263-3gp.m3u8 | 6 + av-only-h263-mov.m3u8 | 6 + av-only-h263-mp4.m3u8 | 6 + av-only-h264.m3u8 | 6 + av-opus-mp4.m3u8 | 18 + av-ts-h264.m3u8 | 6 + av-vpx-webm.m3u8 | 8 + av-vpx2-webm.m3u8 | 8 + caminandes-llamigos-vp9-aac.m3u8 | 14 + caminandes-llamigos-vp9-mp3.m3u8 | 18 + caminandes-llamigos-vp9-mp3b.m3u8 | 18 + caminandes-llamigos-vp9-vorbis.m3u8 | 14 + caminandes-llamigos-vp9.m3u8 | 12 + fallback-jpeg.m3u8 | 8 + fallback.html | 29 + flat.html | 78 + h263-in-3gp.m3u8 | 8 + h263-in-mov.m3u8 | 8 + h263-in-mp4.m3u8 | 8 + h264-in-mp4.m3u8 | 8 + index.html | 90 + jpeg-in-mov.m3u8 | 8 + jpeg-in-mp4.m3u8 | 8 + jpeg-in-ts.m3u8 | 8 + jpeg.html | 34 + llamigos-vp9-aac.m3u8 | 14 + llamigos-vp9-mp3.m3u8 | 18 + llamigos-vp9-mp3b.m3u8 | 18 + llamigos-vp9-mp3c.m3u8 | 18 + llamigos-vp9-mp3d.m3u8 | 18 + llamigos-vp9-vorbis.m3u8 | 14 + llamigos-vp9.m3u8 | 12 + m4v-in-mp4.m3u8 | 8 + make-flat.sh | 17 + make-hls.sh | 49 + mp3 audio notes.md | 27 + mp3-in-mp4.m3u8 | 8 + mp3-in-ts.m3u8 | 8 + mp3.html | 29 + mpeg1-in-mp4.m3u8 | 8 + mpeg2-in-mp4.m3u8 | 8 + notes.md | 12 + ogv.html | 176 + ogvjs-1.8.4/COPYING | 21 + ogvjs-1.8.4/COPYING-dav1d.txt | 23 + ogvjs-1.8.4/COPYING-ogg.txt | 28 + ogvjs-1.8.4/COPYING-opus.txt | 44 + ogvjs-1.8.4/COPYING-theora.txt | 28 + ogvjs-1.8.4/COPYING-vorbis.txt | 28 + ogvjs-1.8.4/LICENSE-nestegg.txt | 13 + ogvjs-1.8.4/LICENSE-vpx.txt | 31 + ogvjs-1.8.4/PATENTS-vpx.txt | 23 + ogvjs-1.8.4/README.md | 382 + ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.js | 39 + ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.wasm | Bin 0 -> 136877 bytes ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.js | 40 + .../ogv-decoder-audio-vorbis-wasm.wasm | Bin 0 -> 145191 bytes ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.js | 21 + .../ogv-decoder-video-av1-mt-wasm.wasm | Bin 0 -> 416642 bytes .../ogv-decoder-video-av1-mt-wasm.worker.js | 1 + ogvjs-1.8.4/ogv-decoder-video-av1-wasm.js | 44 + ogvjs-1.8.4/ogv-decoder-video-av1-wasm.wasm | Bin 0 -> 405673 bytes ogvjs-1.8.4/ogv-decoder-video-theora-wasm.js | 43 + .../ogv-decoder-video-theora-wasm.wasm | Bin 0 -> 49045 bytes ogvjs-1.8.4/ogv-decoder-video-vp8-mt-wasm.js | 21 + .../ogv-decoder-video-vp8-mt-wasm.wasm | Bin 0 -> 138515 bytes .../ogv-decoder-video-vp8-mt-wasm.worker.js | 1 + ogvjs-1.8.4/ogv-decoder-video-vp8-wasm.js | 45 + ogvjs-1.8.4/ogv-decoder-video-vp8-wasm.wasm | Bin 0 -> 113396 bytes ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.js | 21 + .../ogv-decoder-video-vp9-mt-wasm.wasm | Bin 0 -> 259755 bytes .../ogv-decoder-video-vp9-mt-wasm.worker.js | 1 + ogvjs-1.8.4/ogv-decoder-video-vp9-wasm.js | 46 + ogvjs-1.8.4/ogv-decoder-video-vp9-wasm.wasm | Bin 0 -> 242794 bytes ogvjs-1.8.4/ogv-demuxer-ogg-wasm.js | 44 + ogvjs-1.8.4/ogv-demuxer-ogg-wasm.wasm | Bin 0 -> 41845 bytes ogvjs-1.8.4/ogv-demuxer-webm-wasm.js | 46 + ogvjs-1.8.4/ogv-demuxer-webm-wasm.wasm | Bin 0 -> 43449 bytes ogvjs-1.8.4/ogv-es2017.js | 2 + ogvjs-1.8.4/ogv-support.js | 1 + ogvjs-1.8.4/ogv-version.js | 1 + ogvjs-1.8.4/ogv-worker-audio.js | 1 + ogvjs-1.8.4/ogv-worker-video.js | 1 + ogvjs-1.8.4/ogv.js | 2 + only-h264.m3u8 | 4 + only-jpeg-mov.m3u8 | 6 + only-jpeg.m3u8 | 6 + only.html | 54 + opus.html | 29 + sync-up.sh | 1 + test.html | 101 + thoughts.md | 49 + timestamp-id3.php | 141 + transcode-segment.php | 309 + transcode.php | 312 + video-js/alt/video-js-cdn.css | 1754 + video-js/alt/video-js-cdn.min.css | 1 + video-js/alt/video.core.js | 30774 ++++++++ video-js/alt/video.core.min.js | 20 + video-js/alt/video.core.novtt.js | 28918 +++++++ video-js/alt/video.core.novtt.min.js | 20 + video-js/alt/video.debug.js | 65240 ++++++++++++++++ video-js/alt/video.novtt.js | 63381 +++++++++++++++ video-js/alt/video.novtt.min.js | 27 + video-js/font/VideoJS.svg | 114 + video-js/font/VideoJS.ttf | Bin 0 -> 7080 bytes video-js/font/VideoJS.woff | Bin 0 -> 4324 bytes video-js/lang/ar.js | 86 + video-js/lang/ar.json | 86 + video-js/lang/ba.js | 26 + video-js/lang/ba.json | 26 + video-js/lang/bg.js | 26 + video-js/lang/bg.json | 26 + video-js/lang/ca.js | 26 + video-js/lang/ca.json | 26 + video-js/lang/cs.js | 85 + video-js/lang/cs.json | 85 + video-js/lang/cy.js | 85 + video-js/lang/cy.json | 85 + video-js/lang/da.js | 26 + video-js/lang/da.json | 26 + video-js/lang/de.js | 89 + video-js/lang/de.json | 90 + video-js/lang/el.js | 40 + video-js/lang/el.json | 40 + video-js/lang/en.js | 89 + video-js/lang/en.json | 89 + video-js/lang/es.js | 89 + video-js/lang/es.json | 89 + video-js/lang/fa.js | 89 + video-js/lang/fa.json | 89 + video-js/lang/fi.js | 26 + video-js/lang/fi.json | 26 + video-js/lang/fr.js | 84 + video-js/lang/fr.json | 84 + video-js/lang/gd.js | 87 + video-js/lang/gd.json | 87 + video-js/lang/gl.js | 87 + video-js/lang/gl.json | 87 + video-js/lang/he.js | 84 + video-js/lang/he.json | 84 + video-js/lang/hi.js | 89 + video-js/lang/hi.json | 89 + video-js/lang/hr.js | 26 + video-js/lang/hr.json | 26 + video-js/lang/hu.js | 89 + video-js/lang/hu.json | 89 + video-js/lang/it.js | 26 + video-js/lang/it.json | 26 + video-js/lang/ja.js | 26 + video-js/lang/ja.json | 26 + video-js/lang/ko.js | 26 + video-js/lang/ko.json | 26 + video-js/lang/nb.js | 87 + video-js/lang/nb.json | 87 + video-js/lang/nl.js | 84 + video-js/lang/nl.json | 84 + video-js/lang/nn.js | 87 + video-js/lang/nn.json | 87 + video-js/lang/oc.js | 87 + video-js/lang/oc.json | 87 + video-js/lang/pl.js | 34 + video-js/lang/pl.json | 34 + video-js/lang/pt-BR.js | 87 + video-js/lang/pt-BR.json | 88 + video-js/lang/pt-PT.js | 41 + video-js/lang/pt-PT.json | 41 + video-js/lang/ro.js | 89 + video-js/lang/ro.json | 89 + video-js/lang/ru.js | 85 + video-js/lang/ru.json | 85 + video-js/lang/sk.js | 85 + video-js/lang/sk.json | 85 + video-js/lang/sl.js | 83 + video-js/lang/sl.json | 83 + video-js/lang/sr.js | 26 + video-js/lang/sr.json | 26 + video-js/lang/sv.js | 87 + video-js/lang/sv.json | 87 + video-js/lang/th.js | 89 + video-js/lang/th.json | 89 + video-js/lang/tr.js | 76 + video-js/lang/tr.json | 76 + video-js/lang/uk.js | 85 + video-js/lang/uk.json | 85 + video-js/lang/vi.js | 84 + video-js/lang/vi.json | 84 + video-js/lang/zh-CN.js | 89 + video-js/lang/zh-CN.json | 89 + video-js/lang/zh-Hans.js | 89 + video-js/lang/zh-Hans.json | 89 + video-js/lang/zh-Hant.js | 87 + video-js/lang/zh-Hant.json | 87 + video-js/lang/zh-TW.js | 87 + video-js/lang/zh-TW.json | 87 + video-js/video-js.css | 1754 + video-js/video-js.min.css | 1 + video-js/video.cjs.js | 54301 +++++++++++++ video-js/video.es.js | 54283 +++++++++++++ video-js/video.js | 65237 +++++++++++++++ video-js/video.min.js | 27 + videojs-ogvjs.js | 705 + vp8-in-mp4.m3u8 | 8 + vp8-in-webm.m3u8 | 8 + vp9-in-mp4.m3u8 | 8 + vp9-in-webm.m3u8 | 8 + vpx-webm.m3u8 | 6 + vpx2-webm.m3u8 | 6 + webm.html | 32 + with-audio.html | 20 + with-codec.html | 31 + 227 files changed, 375909 insertions(+) create mode 100644 all-mp4.m3u8 create mode 100644 all-webm.m3u8 create mode 100644 audio-aac.m3u8 create mode 100644 audio-alac.m3u8 create mode 100644 audio-flac.m3u8 create mode 100644 audio-mp3.m3u8 create mode 100644 audio-opus.m3u8 create mode 100644 av-aac-h264.m3u8 create mode 100644 av-aac-mp4.m3u8 create mode 100644 av-aac-mpeg.m3u8 create mode 100644 av-aac-vp8.m3u8 create mode 100644 av-aac-vp9.m3u8 create mode 100644 av-aac-vpx.m3u8 create mode 100644 av-all-mp4.m3u8 create mode 100644 av-mp3-mp4.m3u8 create mode 100644 av-mp4-h264.m3u8 create mode 100644 av-only-h263-3gp.m3u8 create mode 100644 av-only-h263-mov.m3u8 create mode 100644 av-only-h263-mp4.m3u8 create mode 100644 av-only-h264.m3u8 create mode 100644 av-opus-mp4.m3u8 create mode 100644 av-ts-h264.m3u8 create mode 100644 av-vpx-webm.m3u8 create mode 100644 av-vpx2-webm.m3u8 create mode 100644 caminandes-llamigos-vp9-aac.m3u8 create mode 100644 caminandes-llamigos-vp9-mp3.m3u8 create mode 100644 caminandes-llamigos-vp9-mp3b.m3u8 create mode 100644 caminandes-llamigos-vp9-vorbis.m3u8 create mode 100644 caminandes-llamigos-vp9.m3u8 create mode 100644 fallback-jpeg.m3u8 create mode 100644 fallback.html create mode 100644 flat.html create mode 100644 h263-in-3gp.m3u8 create mode 100644 h263-in-mov.m3u8 create mode 100644 h263-in-mp4.m3u8 create mode 100644 h264-in-mp4.m3u8 create mode 100644 index.html create mode 100644 jpeg-in-mov.m3u8 create mode 100644 jpeg-in-mp4.m3u8 create mode 100644 jpeg-in-ts.m3u8 create mode 100644 jpeg.html create mode 100644 llamigos-vp9-aac.m3u8 create mode 100644 llamigos-vp9-mp3.m3u8 create mode 100644 llamigos-vp9-mp3b.m3u8 create mode 100644 llamigos-vp9-mp3c.m3u8 create mode 100644 llamigos-vp9-mp3d.m3u8 create mode 100644 llamigos-vp9-vorbis.m3u8 create mode 100644 llamigos-vp9.m3u8 create mode 100644 m4v-in-mp4.m3u8 create mode 100644 make-flat.sh create mode 100644 make-hls.sh create mode 100644 mp3 audio notes.md create mode 100644 mp3-in-mp4.m3u8 create mode 100644 mp3-in-ts.m3u8 create mode 100644 mp3.html create mode 100644 mpeg1-in-mp4.m3u8 create mode 100644 mpeg2-in-mp4.m3u8 create mode 100644 notes.md create mode 100644 ogv.html create mode 100644 ogvjs-1.8.4/COPYING create mode 100644 ogvjs-1.8.4/COPYING-dav1d.txt create mode 100644 ogvjs-1.8.4/COPYING-ogg.txt create mode 100644 ogvjs-1.8.4/COPYING-opus.txt create mode 100644 ogvjs-1.8.4/COPYING-theora.txt create mode 100644 ogvjs-1.8.4/COPYING-vorbis.txt create mode 100644 ogvjs-1.8.4/LICENSE-nestegg.txt create mode 100644 ogvjs-1.8.4/LICENSE-vpx.txt create mode 100644 ogvjs-1.8.4/PATENTS-vpx.txt create mode 100644 ogvjs-1.8.4/README.md create mode 100644 ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.worker.js create mode 100644 ogvjs-1.8.4/ogv-decoder-video-av1-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-video-av1-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-video-theora-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-video-theora-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-video-vp8-mt-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-video-vp8-mt-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-video-vp8-mt-wasm.worker.js create mode 100644 ogvjs-1.8.4/ogv-decoder-video-vp8-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-video-vp8-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.worker.js create mode 100644 ogvjs-1.8.4/ogv-decoder-video-vp9-wasm.js create mode 100755 ogvjs-1.8.4/ogv-decoder-video-vp9-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-demuxer-ogg-wasm.js create mode 100755 ogvjs-1.8.4/ogv-demuxer-ogg-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-demuxer-webm-wasm.js create mode 100755 ogvjs-1.8.4/ogv-demuxer-webm-wasm.wasm create mode 100644 ogvjs-1.8.4/ogv-es2017.js create mode 100644 ogvjs-1.8.4/ogv-support.js create mode 100644 ogvjs-1.8.4/ogv-version.js create mode 100644 ogvjs-1.8.4/ogv-worker-audio.js create mode 100644 ogvjs-1.8.4/ogv-worker-video.js create mode 100644 ogvjs-1.8.4/ogv.js create mode 100644 only-h264.m3u8 create mode 100644 only-jpeg-mov.m3u8 create mode 100644 only-jpeg.m3u8 create mode 100644 only.html create mode 100644 opus.html create mode 100644 sync-up.sh create mode 100644 test.html create mode 100644 thoughts.md create mode 100644 timestamp-id3.php create mode 100644 transcode-segment.php create mode 100644 transcode.php create mode 100644 video-js/alt/video-js-cdn.css create mode 100644 video-js/alt/video-js-cdn.min.css create mode 100644 video-js/alt/video.core.js create mode 100644 video-js/alt/video.core.min.js create mode 100644 video-js/alt/video.core.novtt.js create mode 100644 video-js/alt/video.core.novtt.min.js create mode 100644 video-js/alt/video.debug.js create mode 100644 video-js/alt/video.novtt.js create mode 100644 video-js/alt/video.novtt.min.js create mode 100755 video-js/font/VideoJS.svg create mode 100755 video-js/font/VideoJS.ttf create mode 100755 video-js/font/VideoJS.woff create mode 100644 video-js/lang/ar.js create mode 100644 video-js/lang/ar.json create mode 100644 video-js/lang/ba.js create mode 100644 video-js/lang/ba.json create mode 100644 video-js/lang/bg.js create mode 100644 video-js/lang/bg.json create mode 100644 video-js/lang/ca.js create mode 100644 video-js/lang/ca.json create mode 100644 video-js/lang/cs.js create mode 100644 video-js/lang/cs.json create mode 100644 video-js/lang/cy.js create mode 100644 video-js/lang/cy.json create mode 100644 video-js/lang/da.js create mode 100644 video-js/lang/da.json create mode 100644 video-js/lang/de.js create mode 100644 video-js/lang/de.json create mode 100644 video-js/lang/el.js create mode 100644 video-js/lang/el.json create mode 100644 video-js/lang/en.js create mode 100644 video-js/lang/en.json create mode 100644 video-js/lang/es.js create mode 100644 video-js/lang/es.json create mode 100644 video-js/lang/fa.js create mode 100644 video-js/lang/fa.json create mode 100644 video-js/lang/fi.js create mode 100644 video-js/lang/fi.json create mode 100644 video-js/lang/fr.js create mode 100644 video-js/lang/fr.json create mode 100644 video-js/lang/gd.js create mode 100755 video-js/lang/gd.json create mode 100644 video-js/lang/gl.js create mode 100644 video-js/lang/gl.json create mode 100644 video-js/lang/he.js create mode 100644 video-js/lang/he.json create mode 100644 video-js/lang/hi.js create mode 100644 video-js/lang/hi.json create mode 100644 video-js/lang/hr.js create mode 100644 video-js/lang/hr.json create mode 100644 video-js/lang/hu.js create mode 100644 video-js/lang/hu.json create mode 100644 video-js/lang/it.js create mode 100644 video-js/lang/it.json create mode 100644 video-js/lang/ja.js create mode 100644 video-js/lang/ja.json create mode 100644 video-js/lang/ko.js create mode 100644 video-js/lang/ko.json create mode 100644 video-js/lang/nb.js create mode 100644 video-js/lang/nb.json create mode 100644 video-js/lang/nl.js create mode 100644 video-js/lang/nl.json create mode 100644 video-js/lang/nn.js create mode 100644 video-js/lang/nn.json create mode 100644 video-js/lang/oc.js create mode 100644 video-js/lang/oc.json create mode 100644 video-js/lang/pl.js create mode 100644 video-js/lang/pl.json create mode 100644 video-js/lang/pt-BR.js create mode 100644 video-js/lang/pt-BR.json create mode 100644 video-js/lang/pt-PT.js create mode 100644 video-js/lang/pt-PT.json create mode 100644 video-js/lang/ro.js create mode 100644 video-js/lang/ro.json create mode 100644 video-js/lang/ru.js create mode 100644 video-js/lang/ru.json create mode 100644 video-js/lang/sk.js create mode 100644 video-js/lang/sk.json create mode 100644 video-js/lang/sl.js create mode 100644 video-js/lang/sl.json create mode 100644 video-js/lang/sr.js create mode 100644 video-js/lang/sr.json create mode 100644 video-js/lang/sv.js create mode 100644 video-js/lang/sv.json create mode 100644 video-js/lang/th.js create mode 100644 video-js/lang/th.json create mode 100644 video-js/lang/tr.js create mode 100644 video-js/lang/tr.json create mode 100644 video-js/lang/uk.js create mode 100644 video-js/lang/uk.json create mode 100644 video-js/lang/vi.js create mode 100644 video-js/lang/vi.json create mode 100644 video-js/lang/zh-CN.js create mode 100644 video-js/lang/zh-CN.json create mode 100644 video-js/lang/zh-Hans.js create mode 100644 video-js/lang/zh-Hans.json create mode 100644 video-js/lang/zh-Hant.js create mode 100644 video-js/lang/zh-Hant.json create mode 100644 video-js/lang/zh-TW.js create mode 100644 video-js/lang/zh-TW.json create mode 100644 video-js/video-js.css create mode 100644 video-js/video-js.min.css create mode 100644 video-js/video.cjs.js create mode 100644 video-js/video.es.js create mode 100644 video-js/video.js create mode 100644 video-js/video.min.js create mode 100644 videojs-ogvjs.js create mode 100644 vp8-in-mp4.m3u8 create mode 100644 vp8-in-webm.m3u8 create mode 100644 vp9-in-mp4.m3u8 create mode 100644 vp9-in-webm.m3u8 create mode 100644 vpx-webm.m3u8 create mode 100644 vpx2-webm.m3u8 create mode 100644 webm.html create mode 100644 with-audio.html create mode 100644 with-codec.html diff --git a/all-mp4.m3u8 b/all-mp4.m3u8 new file mode 100644 index 0000000..11930c3 --- /dev/null +++ b/all-mp4.m3u8 @@ -0,0 +1,16 @@ +#EXTM3U + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08" +vp9-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08" +vp8-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60" +mpeg2-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a" +mpeg1-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9" +m4v-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c" +jpeg-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a" +h264-in-mp4.m3u8 diff --git a/all-webm.m3u8 b/all-webm.m3u8 new file mode 100644 index 0000000..a0de4e8 --- /dev/null +++ b/all-webm.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp9" +vp9-in-webm.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp8" +vp8-in-webm.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a" +h264-in-mp4.m3u8 diff --git a/audio-aac.m3u8 b/audio-aac.m3u8 new file mode 100644 index 0000000..2aa784e --- /dev/null +++ b/audio-aac.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-aac.mp4 +#EXT-X-ENDLIST diff --git a/audio-alac.m3u8 b/audio-alac.m3u8 new file mode 100644 index 0000000..9f75295 --- /dev/null +++ b/audio-alac.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-alac.mp4 +#EXT-X-ENDLIST diff --git a/audio-flac.m3u8 b/audio-flac.m3u8 new file mode 100644 index 0000000..153e609 --- /dev/null +++ b/audio-flac.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-flac.mp4 +#EXT-X-ENDLIST diff --git a/audio-mp3.m3u8 b/audio-mp3.m3u8 new file mode 100644 index 0000000..65e365d --- /dev/null +++ b/audio-mp3.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-mp3.mp3 +#EXT-X-ENDLIST diff --git a/audio-opus.m3u8 b/audio-opus.m3u8 new file mode 100644 index 0000000..c45196b --- /dev/null +++ b/audio-opus.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-opus.mp4 +#EXT-X-ENDLIST diff --git a/av-aac-h264.m3u8 b/av-aac-h264.m3u8 new file mode 100644 index 0000000..9d77164 --- /dev/null +++ b/av-aac-h264.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.02",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-aac-mp4.m3u8 b/av-aac-mp4.m3u8 new file mode 100644 index 0000000..59e212d --- /dev/null +++ b/av-aac-mp4.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +vp9-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1" +vp8-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.61,mp4a.40.02",AUDIO="a1" +mpeg2-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.40.02",AUDIO="a1" +mpeg1-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.40.02",AUDIO="a1" +m4v-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1" +jpeg-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.02",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-aac-mpeg.m3u8 b/av-aac-mpeg.m3u8 new file mode 100644 index 0000000..0fa0f32 --- /dev/null +++ b/av-aac-mpeg.m3u8 @@ -0,0 +1,14 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.61,mp4a.40.02",AUDIO="a1" +mpeg2-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.40.02",AUDIO="a1" +mpeg1-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.40.02",AUDIO="a1" +m4v-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1" +jpeg-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.02",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-aac-vp8.m3u8 b/av-aac-vp8.m3u8 new file mode 100644 index 0000000..b8f37ac --- /dev/null +++ b/av-aac-vp8.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1" +vp8-in-mp4.m3u8 diff --git a/av-aac-vp9.m3u8 b/av-aac-vp9.m3u8 new file mode 100644 index 0000000..b213091 --- /dev/null +++ b/av-aac-vp9.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +vp9-in-mp4.m3u8 diff --git a/av-aac-vpx.m3u8 b/av-aac-vpx.m3u8 new file mode 100644 index 0000000..3fa7871 --- /dev/null +++ b/av-aac-vpx.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +vp9-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1" +vp8-in-mp4.m3u8 diff --git a/av-all-mp4.m3u8 b/av-all-mp4.m3u8 new file mode 100644 index 0000000..141a0be --- /dev/null +++ b/av-all-mp4.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +vp9-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1" +vp8-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,mp4a.40.02",AUDIO="a1" +mpeg2-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.40.02",AUDIO="a1" +mpeg1-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.40.02",AUDIO="a1" +m4v-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1" +jpeg-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-mp3-mp4.m3u8 b/av-mp3-mp4.m3u8 new file mode 100644 index 0000000..af8428d --- /dev/null +++ b/av-mp3-mp4.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.6b",AUDIO="a1" +vp9-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.6b",AUDIO="a1" +vp8-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,mp4a.6b",AUDIO="a1" +mpeg2-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.6b",AUDIO="a1" +mpeg1-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.6b",AUDIO="a1" +m4v-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.6b",AUDIO="a1" +jpeg-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.6b",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-mp4-h264.m3u8 b/av-mp4-h264.m3u8 new file mode 100644 index 0000000..7b35dac --- /dev/null +++ b/av-mp4-h264.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="mp3-in-mp4.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-only-h263-3gp.m3u8 b/av-only-h263-3gp.m3u8 new file mode 100644 index 0000000..bb8d7e8 --- /dev/null +++ b/av-only-h263-3gp.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=352x288,FRAME-RATE=29.970,CODECS="s263" +h263-in-3gp.m3u8 diff --git a/av-only-h263-mov.m3u8 b/av-only-h263-mov.m3u8 new file mode 100644 index 0000000..7fba238 --- /dev/null +++ b/av-only-h263-mov.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=352x288,FRAME-RATE=29.970,CODECS="s263" +h263-in-mov.m3u8 diff --git a/av-only-h263-mp4.m3u8 b/av-only-h263-mp4.m3u8 new file mode 100644 index 0000000..fbd0b66 --- /dev/null +++ b/av-only-h263-mp4.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=352x288,FRAME-RATE=29.970,CODECS="s263" +h263-in-mp4.m3u8 diff --git a/av-only-h264.m3u8 b/av-only-h264.m3u8 new file mode 100644 index 0000000..239a18a --- /dev/null +++ b/av-only-h264.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-mp3.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.40.34",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-opus-mp4.m3u8 b/av-opus-mp4.m3u8 new file mode 100644 index 0000000..9198e2f --- /dev/null +++ b/av-opus-mp4.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-opus.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.ad",AUDIO="a1" +vp9-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.ad",AUDIO="a1" +vp8-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.60,mp4a.ad",AUDIO="a1" +mpeg2-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6a,mp4a.ad",AUDIO="a1" +mpeg1-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.20.9,mp4a.ad",AUDIO="a1" +m4v-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.ad",AUDIO="a1" +jpeg-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp4a.ad",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-ts-h264.m3u8 b/av-ts-h264.m3u8 new file mode 100644 index 0000000..c8600d5 --- /dev/null +++ b/av-ts-h264.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="mp3-in-ts.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a,mp3",AUDIO="a1" +h264-in-mp4.m3u8 diff --git a/av-vpx-webm.m3u8 b/av-vpx-webm.m3u8 new file mode 100644 index 0000000..484702c --- /dev/null +++ b/av-vpx-webm.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp9",AUDIO="a1" +vp9-in-webm.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp8",AUDIO="a1" +vp8-in-webm.m3u8 diff --git a/av-vpx2-webm.m3u8 b/av-vpx2-webm.m3u8 new file mode 100644 index 0000000..62dca46 --- /dev/null +++ b/av-vpx2-webm.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +vp9-in-webm.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp08.00.10.08,mp4a.40.02",AUDIO="a1" +vp8-in-webm.m3u8 diff --git a/caminandes-llamigos-vp9-aac.m3u8 b/caminandes-llamigos-vp9-aac.m3u8 new file mode 100644 index 0000000..53d1aba --- /dev/null +++ b/caminandes-llamigos-vp9-aac.m3u8 @@ -0,0 +1,14 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.m3u8 diff --git a/caminandes-llamigos-vp9-mp3.m3u8 b/caminandes-llamigos-vp9-mp3.m3u8 new file mode 100644 index 0000000..b5f1eca --- /dev/null +++ b/caminandes-llamigos-vp9-mp3.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.m3u8" + +# mp4a.40.34 is for raw mp3 +# mp4a.6b ? +# mp3 ? + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.m3u8 diff --git a/caminandes-llamigos-vp9-mp3b.m3u8 b/caminandes-llamigos-vp9-mp3b.m3u8 new file mode 100644 index 0000000..3ee303f --- /dev/null +++ b/caminandes-llamigos-vp9-mp3b.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.m3u8" + +# mp4a.40.34 is for raw mp3 +# mp4a.6b ? +# mp3 ? + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.m3u8 diff --git a/caminandes-llamigos-vp9-vorbis.m3u8 b/caminandes-llamigos-vp9-vorbis.m3u8 new file mode 100644 index 0000000..ec63668 --- /dev/null +++ b/caminandes-llamigos-vp9-vorbis.m3u8 @@ -0,0 +1,14 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.vorbis.mp4.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.m3u8 diff --git a/caminandes-llamigos-vp9.m3u8 b/caminandes-llamigos-vp9.m3u8 new file mode 100644 index 0000000..6612a2b --- /dev/null +++ b/caminandes-llamigos-vp9.m3u8 @@ -0,0 +1,12 @@ +#EXTM3U + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.1080p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.720p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.480p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.360p.vp9.pass2.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.240p.vp9.pass2.m3u8 diff --git a/fallback-jpeg.m3u8 b/fallback-jpeg.m3u8 new file mode 100644 index 0000000..ab4d804 --- /dev/null +++ b/fallback-jpeg.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +vp9-in-mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40.02",AUDIO="a1" +jpeg-in-mp4.m3u8 diff --git a/fallback.html b/fallback.html new file mode 100644 index 0000000..dfb8548 --- /dev/null +++ b/fallback.html @@ -0,0 +1,29 @@ + + + + + HLS WebM test with codec + + +

HLS WebM test with codec

+

The video will try to load an HLS containing a VP9-in-MP4 variant, with AAC audio, with no fallback:

+ +

+ + + \ No newline at end of file diff --git a/flat.html b/flat.html new file mode 100644 index 0000000..168e5c1 --- /dev/null +++ b/flat.html @@ -0,0 +1,78 @@ + + + + + Flat VP9/WebM test + + +

Flat WebM test

+

This video will try to load a flat file containing VP9/Opus or VP8/Vorbis in WebM, or an h264/AAC fallback:

+ + +

This one will try VP9/AAC in MP4, or an h264/AAC fallback:

+ + + +

This one will be h264 only:

+ + +

This one will be VP9-in-MP4 only but not specify codecs:

+ + +

This one will be h264 only but not specify codecs:

+ + +

Hail Marys

+ +

VP8 in MP4, no markings:

+ + +

H.263 in MP4, no markings:

+ + +

H.263 in mov, no markings:

+ + +

H.263 in 3gp, no markings:

+ + + +

MPEG-2 in MP4, no markings:

+ + +

MPEG-1 in MP4, no markings:

+ + +

MPEG-4 in MP4, no markings:

+ + + + + \ No newline at end of file diff --git a/h263-in-3gp.m3u8 b/h263-in-3gp.m3u8 new file mode 100644 index 0000000..4df992a --- /dev/null +++ b/h263-in-3gp.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-h263.3gp +#EXT-X-ENDLIST diff --git a/h263-in-mov.m3u8 b/h263-in-mov.m3u8 new file mode 100644 index 0000000..109c26f --- /dev/null +++ b/h263-in-mov.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-h263.mov +#EXT-X-ENDLIST diff --git a/h263-in-mp4.m3u8 b/h263-in-mp4.m3u8 new file mode 100644 index 0000000..ce884d0 --- /dev/null +++ b/h263-in-mp4.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-h263.mp4 +#EXT-X-ENDLIST diff --git a/h264-in-mp4.m3u8 b/h264-in-mp4.m3u8 new file mode 100644 index 0000000..a9efa5c --- /dev/null +++ b/h264-in-mp4.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56 +polyphon-h264.mp4 +#EXT-X-ENDLIST diff --git a/index.html b/index.html new file mode 100644 index 0000000..d923dd6 --- /dev/null +++ b/index.html @@ -0,0 +1,90 @@ + + + + + HLS WebM test + + +

HLS WebM test

+ +

Checking HLS support...

+

Checking MSE support...

+

Checking flat WebM VP8 / Vorbis support...

+

Checking flat WebM generic support...

+

Checking WebAssembly support...

+ +

Caminandes - Llamigos

+ +

HLS with AAC audio and VP9-in-MP4 at several resolutions:

+ + +

HLS with MP3 audio and VP9-in-MP4 at several resolutions:

+ + +

HLS with no audio and VP9-in-MP4 at several resolutions:

+ + +

Short polyphon test

+ +

HLS with AAC audio and VP9, VP8, and H.264 video:

+ + +

Same, with a flat WebM fallback source:

+ + + + + \ No newline at end of file diff --git a/jpeg-in-mov.m3u8 b/jpeg-in-mov.m3u8 new file mode 100644 index 0000000..4680cfc --- /dev/null +++ b/jpeg-in-mov.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-jpeg.mov +#EXT-X-ENDLIST diff --git a/jpeg-in-mp4.m3u8 b/jpeg-in-mp4.m3u8 new file mode 100644 index 0000000..4360b86 --- /dev/null +++ b/jpeg-in-mp4.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-jpeg.mp4 +#EXT-X-ENDLIST diff --git a/jpeg-in-ts.m3u8 b/jpeg-in-ts.m3u8 new file mode 100644 index 0000000..6ec0a06 --- /dev/null +++ b/jpeg-in-ts.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-jpeg.ts +#EXT-X-ENDLIST diff --git a/jpeg.html b/jpeg.html new file mode 100644 index 0000000..660fa57 --- /dev/null +++ b/jpeg.html @@ -0,0 +1,34 @@ + + + + + HLS WebM test with JPEG + + +

HLS WebM test with JPEG

+

The video will try to load an HLS containing a VP9-in-MP4 variant, with AAC audio, with JPEG-in-MP4 fallback:

+ +

HLS containing JPEG-in-MP4, with AAC audio:

+ +

HLS containing JPEG-in-MOV, with AAC audio:

+ +

Flat JPEG-in-MP4:

+ +

Flat JPEG-in-MOV:

+ +

Flat JPEG-in-MOV, with AAC audio:

+ + + \ No newline at end of file diff --git a/llamigos-vp9-aac.m3u8 b/llamigos-vp9-aac.m3u8 new file mode 100644 index 0000000..bfc2e1e --- /dev/null +++ b/llamigos-vp9-aac.m3u8 @@ -0,0 +1,14 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.aac.mp4.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.02",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.mp4.m3u8 diff --git a/llamigos-vp9-mp3.m3u8 b/llamigos-vp9-mp3.m3u8 new file mode 100644 index 0000000..630d197 --- /dev/null +++ b/llamigos-vp9-mp3.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.mp4.m3u8" + +# mp4a.40.34 is for raw mp3 +# mp4a.6b ? +# mp3 ? + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.mp4.m3u8 diff --git a/llamigos-vp9-mp3b.m3u8 b/llamigos-vp9-mp3b.m3u8 new file mode 100644 index 0000000..9523fda --- /dev/null +++ b/llamigos-vp9-mp3b.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.mp4.m3u8" + +# mp4a.40.34 is for raw mp3 +# mp4a.6b ? +# mp3 ? + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.6b",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.6b",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.6b",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.6b",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.6b",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.mp4.m3u8 diff --git a/llamigos-vp9-mp3c.m3u8 b/llamigos-vp9-mp3c.m3u8 new file mode 100644 index 0000000..548b8c6 --- /dev/null +++ b/llamigos-vp9-mp3c.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.mp4.m3u8" + +# mp4a.40.34 is for raw mp3 +# mp4a.6b ? +# mp3 ? + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp3",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.mp4.m3u8 diff --git a/llamigos-vp9-mp3d.m3u8 b/llamigos-vp9-mp3d.m3u8 new file mode 100644 index 0000000..459d2ff --- /dev/null +++ b/llamigos-vp9-mp3d.m3u8 @@ -0,0 +1,18 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.mp3.m3u8" + +# mp4a.40.34 is for raw mp3 +# mp4a.6b ? +# mp3 ? + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,mp4a.40.34",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.mp4.m3u8 diff --git a/llamigos-vp9-vorbis.m3u8 b/llamigos-vp9-vorbis.m3u8 new file mode 100644 index 0000000..4f22c55 --- /dev/null +++ b/llamigos-vp9-vorbis.m3u8 @@ -0,0 +1,14 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="caminandes-llamigos.webm.audio.vorbis.mp4.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.1080p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.720p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=875000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.480p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.360p.vp9.pass2.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=275000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08,vorbis",AUDIO="a1" +caminandes-llamigos.webm.240p.vp9.pass2.mp4.m3u8 diff --git a/llamigos-vp9.m3u8 b/llamigos-vp9.m3u8 new file mode 100644 index 0000000..f2c341e --- /dev/null +++ b/llamigos-vp9.m3u8 @@ -0,0 +1,12 @@ +#EXTM3U + +#EXT-X-STREAM-INF:BANDWIDTH=5500000,RESOLUTION=1920x1080,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.1080p.vp9.fast.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=3000000,RESOLUTION=1280x720,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.720p.vp9.fast.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=1000000,RESOLUTION=854x480,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.480p.vp9.fast.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=400000,RESOLUTION=640x360,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.360p.vp9.fast.mp4.m3u8 +#EXT-X-STREAM-INF:BANDWIDTH=300000,RESOLUTION=426x240,FRAME-RATE=24.0,CODECS="vp09.00.10.08" +caminandes-llamigos.webm.240p.vp9.fast.mp4.m3u8 diff --git a/m4v-in-mp4.m3u8 b/m4v-in-mp4.m3u8 new file mode 100644 index 0000000..bcab1f9 --- /dev/null +++ b/m4v-in-mp4.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-m4v.mp4 +#EXT-X-ENDLIST diff --git a/make-flat.sh b/make-flat.sh new file mode 100644 index 0000000..8c70dd8 --- /dev/null +++ b/make-flat.sh @@ -0,0 +1,17 @@ +ffmpeg \ +-i caminandes-llamigos.webm \ +-f webm \ +-acodec libvorbis \ +-ar 44100 \ +-ac 2 \ +-b:a 112k \ +-vcodec libvpx \ +-pix_fmt yuv420p \ +-r 24 \ +-quality good \ +-cpu-used 2 \ +-vf scale=640:360 \ +-b:v 320k \ +-g 240 \ +-keyint_min 240 \ +caminandes-llamigos.webm.flat.webm diff --git a/make-hls.sh b/make-hls.sh new file mode 100644 index 0000000..9b62842 --- /dev/null +++ b/make-hls.sh @@ -0,0 +1,49 @@ +MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart" +BITRATE_HI="-b:v 3840k" +BITRATE_LO="-b:v 2560k" + +VIDEO_H264="-vcodec h264 $BITRATE_HI" +VIDEO_H263="-vcodec h263 -b:v 1280k" +VIDEO_JPEG="-vcodec mjpeg" +VIDEO_VP8="-vcodec libvpx $BITRATE_HI" +VIDEO_VP9="-vcodec libvpx-vp9 -row-mt 1 $BITRATE_LO" + +AUDIO_VORBIS="-acodec libvorbis -ac 2 -ar 44100 -vb 128k" +AUDIO_OPUS="-acodec libopus -ac 2 -ar 48000 -vb 128k" +AUDIO_AAC="-ac 2 -ar 44100 -vb 128k" +AUDIO_MP3="-acodec libmp3lame -ac 2 -ar 44100 -vb 128k" + +ffmpeg -i polyphon.ogv -vn $AUDIO_MP3 -y polyphon-mp3.mp3 +ffmpeg -i polyphon.ogv -vn $AUDIO_MP3 $MOVFLAGS -y polyphon-mp3.mp4 +ffmpeg -i polyphon.ogv -vn $AUDIO_AAC $MOVFLAGS -y polyphon-aac.mp4 +ffmpeg -i polyphon.ogv -vn $AUDIO_OPUS -y polyphon-opus.webm +ffmpeg -i polyphon.ogv -vn $AUDIO_OPUS $MOVFLAGS -y polyphon-opus.mp4 + +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h264.mp4':fontsize=72:fontcolor=red" $VIDEO_H264 $MOVFLAGS -y polyphon-h264.mp4 + +VIDEO_JPEG="-vcodec mjpeg" +MOVFLAGS="-movflags +frag_keyframe+empty_moov+default_base_moof+faststart" +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='jpeg.mp4':fontsize=72:fontcolor=magenta, scale=640:360" $VIDEO_JPEG $MOVFLAGS -y polyphon-jpeg.mp4 +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='jpeg.mov':fontsize=72:fontcolor=magenta, scale=640:360" $VIDEO_JPEG $MOVFLAGS -y polyphon-jpeg.mov + +VIDEO_H263="-vcodec h263 -b:v 1280k" +VIDEO_H263_PLUS="-vcodec h263p -b:v 1280k" +LD_LIBRARY_PATH=/usr/local/ffmpeg/lib /usr/local/ffmpeg/bin/ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h263.mp4':fontsize=72:fontcolor=brown, scale=352:288" $VIDEO_H263 $MOVFLAGS -y polyphon-h263.mp4 +LD_LIBRARY_PATH=/usr/local/ffmpeg/lib /usr/local/ffmpeg/bin/ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h263plus.mp4':fontsize=72:fontcolor=brown, scale=352:288" $VIDEO_H263_PLUS $MOVFLAGS -y polyphon-h263plus.mp4 +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h263.mov':fontsize=72:fontcolor=brown, scale=352:288" $VIDEO_H263 $MOVFLAGS -y polyphon-h263.mov +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='h263.3gp':fontsize=72:fontcolor=brown, scale=352:288" $VIDEO_H263 $MOVFLAGS -y polyphon-h263.3gp + +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='m4v.mp4':fontsize=72:fontcolor=brown" -vcodec mpeg4 $BITRATE_HI $MOVFLAGS -y polyphon-m4v.mp4 +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='mpeg2.mp4':fontsize=72:fontcolor=brown" -vcodec mpeg2video $BITRATE_HI $MOVFLAGS -y polyphon-mpeg2.mp4 +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='mpeg1.mp4':fontsize=72:fontcolor=brown" -vcodec mpeg1video $BITRATE_HI $MOVFLAGS -y polyphon-mpeg1.mp4 + +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp8.webm':fontsize=72:fontcolor=cyan" $VIDEO_VP8 -y polyphon-vp8.webm +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp9.webm':fontsize=72:fontcolor=green" $VIDEO_VP9 -y polyphon-vp9.webm +ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp9.mp4':fontsize=72:fontcolor=blue" $VIDEO_VP9 $MOVFLAGS -y polyphon-vp9.mp4 +/usr/local/ffmpeg/bin/ffmpeg -i polyphon.ogv -an -vf "drawtext=text='vp8.mp4':fontsize=72:fontcolor=purple" $VIDEO_VP8 $MOVFLAGS -y polyphon-vp8.mp4 + +ffmpeg -i polyphon.ogv $AUDIO_AAC -vf "drawtext=text='h264-aac.mp4':fontsize=72:fontcolor=orange" $VIDEO_H264 $MOVFLAGS -y polyphon-h264-aac.mp4 +ffmpeg -i polyphon.ogv $AUDIO_AAC -vf "drawtext=text='jpeg-aac.mov':fontsize=72:fontcolor=magenta" $VIDEO_JPEG $MOVFLAGS -y polyphon-jpeg-aac.mov +ffmpeg -i polyphon.ogv $AUDIO_AAC -vf "drawtext=text='vp9-aac.mp4':fontsize=72:fontcolor=purple" $VIDEO_VP9 $MOVFLAGS -y polyphon-vp9-aac.mp4 +ffmpeg -i polyphon.ogv $AUDIO_VORBIS -vf "drawtext=text='vp8-vorbis.webm':fontsize=72:fontcolor=darkcyan" $VIDEO_VP8 -y polyphon-vp8-vorbis.webm +ffmpeg -i polyphon.ogv $AUDIO_OPUS -vf "drawtext=text='vp9-opus.webm':fontsize=72:fontcolor=darkgreen" $VIDEO_VP9 -y polyphon-vp9-opus.webm diff --git a/mp3 audio notes.md b/mp3 audio notes.md new file mode 100644 index 0000000..c21aaeb --- /dev/null +++ b/mp3 audio notes.md @@ -0,0 +1,27 @@ +timestamp id3 tag needed to avoid the overlap delay: + +https://www.wowza.com/community/t/id3-priv-tag-in-aac-chunks-for-hls-streaming-is-it-necessary/34473 + + +https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming#section-6.2.4 + +https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming#section-3.4 +A Packed Audio Segment has no Media Initialization Section. + + Each Packed Audio Segment MUST signal the timestamp of its first + sample with an ID3 PRIV tag [ID3] at the beginning of the segment. + The ID3 PRIV owner identifier MUST be + "com.apple.streaming.transportStreamTimestamp". The ID3 payload MUST + be a 33-bit MPEG-2 Program Elementary Stream timestamp expressed as a + big-endian eight-octet number, with the upper 31 bits set to zero. + Clients SHOULD NOT play Packed Audio Segments without this ID3 tag. + +mp3 options: +-write_xing 0/1 +-id3v2_version 3 +-write_id3v1 0/1 + + +https://patchwork.ffmpeg.org/project/ffmpeg/patch/20180112211305.5812-1-rshaffer@tunein.com/ +patch for ffmpeg to add ability to set/retrieve priv tags + diff --git a/mp3-in-mp4.m3u8 b/mp3-in-mp4.m3u8 new file mode 100644 index 0000000..0efbc88 --- /dev/null +++ b/mp3-in-mp4.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-mp3.mp4 +#EXT-X-ENDLIST diff --git a/mp3-in-ts.m3u8 b/mp3-in-ts.m3u8 new file mode 100644 index 0000000..4f9ebf7 --- /dev/null +++ b/mp3-in-ts.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-mp3.ts +#EXT-X-ENDLIST diff --git a/mp3.html b/mp3.html new file mode 100644 index 0000000..ddb11f8 --- /dev/null +++ b/mp3.html @@ -0,0 +1,29 @@ + + + + + HLS WebM test with codec + + +

HLS WebM test with codec

+

The video will try to load an HLS containing VP9-in-MP4 and fallback variants, with Opus audio:

+ +

+ + + + \ No newline at end of file diff --git a/mpeg1-in-mp4.m3u8 b/mpeg1-in-mp4.m3u8 new file mode 100644 index 0000000..6b5d033 --- /dev/null +++ b/mpeg1-in-mp4.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-mpeg1.mp4 +#EXT-X-ENDLIST diff --git a/mpeg2-in-mp4.m3u8 b/mpeg2-in-mp4.m3u8 new file mode 100644 index 0000000..b1680d1 --- /dev/null +++ b/mpeg2-in-mp4.m3u8 @@ -0,0 +1,8 @@ +#EXTM3U +#EXT-X-PLAYLIST-TYPE:VOD +#EXT-X-TARGETDURATION:45 +#EXT-X-VERSION:4 +#EXT-X-MEDIA-SEQUENCE:0 +#EXTINF:40.56, +polyphon-mpeg2.mp4 +#EXT-X-ENDLIST diff --git a/notes.md b/notes.md new file mode 100644 index 0000000..a80401b --- /dev/null +++ b/notes.md @@ -0,0 +1,12 @@ +floating player +like pop-out picture in picture +in your web page + +let it go sticky when you scroll up/down + +minify to hide +increase size at a click +fullscreen also easy + +make it simple to read the article while listening to a music or running a video in the corner that's relevant + diff --git a/ogv.html b/ogv.html new file mode 100644 index 0000000..4273a63 --- /dev/null +++ b/ogv.html @@ -0,0 +1,176 @@ + + + + + HLS WebM test + + + +

HLS WebM test

+ +

Checking HLS support...

+

Checking MSE support...

+

Checking flat WebM VP8 / Vorbis support...

+

Checking flat WebM generic support...

+

Checking WebAssembly support...

+ +

Caminandes - Llamigos

+ + +

HLS with AAC audio and VP9-in-MP4 at several resolutions:

+ + +

HLS with MP3 audio (mp4a.40.34) and VP9-in-MP4 at several resolutions:

+ + +

HLS with MP3 audio (mp4a.6b) and VP9-in-MP4 at several resolutions:

+ + +

HLS with MP3 audio (mp3) and VP9-in-MP4 at several resolutions:

+ + +

HLS with elementary MP3 audio (mp4a.40.34) and VP9-in-MP4 at several resolutions:

+ + + + + + + \ No newline at end of file diff --git a/ogvjs-1.8.4/COPYING b/ogvjs-1.8.4/COPYING new file mode 100644 index 0000000..56c4368 --- /dev/null +++ b/ogvjs-1.8.4/COPYING @@ -0,0 +1,21 @@ +ogv.js wrapper and player code + +Copyright (c) 2013-2019 Brion Vibber and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/ogvjs-1.8.4/COPYING-dav1d.txt b/ogvjs-1.8.4/COPYING-dav1d.txt new file mode 100644 index 0000000..875b138 --- /dev/null +++ b/ogvjs-1.8.4/COPYING-dav1d.txt @@ -0,0 +1,23 @@ +Copyright © 2018-2019, VideoLAN and dav1d authors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ogvjs-1.8.4/COPYING-ogg.txt b/ogvjs-1.8.4/COPYING-ogg.txt new file mode 100644 index 0000000..6111c6c --- /dev/null +++ b/ogvjs-1.8.4/COPYING-ogg.txt @@ -0,0 +1,28 @@ +Copyright (c) 2002, Xiph.org Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ogvjs-1.8.4/COPYING-opus.txt b/ogvjs-1.8.4/COPYING-opus.txt new file mode 100644 index 0000000..9c739c3 --- /dev/null +++ b/ogvjs-1.8.4/COPYING-opus.txt @@ -0,0 +1,44 @@ +Copyright 2001-2011 Xiph.Org, Skype Limited, Octasic, + Jean-Marc Valin, Timothy B. Terriberry, + CSIRO, Gregory Maxwell, Mark Borgerding, + Erik de Castro Lopo + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of Internet Society, IETF or IETF Trust, nor the +names of specific contributors, may be used to endorse or promote +products derived from this software without specific prior written +permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Opus is subject to the royalty-free patent licenses which are +specified at: + +Xiph.Org Foundation: +https://datatracker.ietf.org/ipr/1524/ + +Microsoft Corporation: +https://datatracker.ietf.org/ipr/1914/ + +Broadcom Corporation: +https://datatracker.ietf.org/ipr/1526/ diff --git a/ogvjs-1.8.4/COPYING-theora.txt b/ogvjs-1.8.4/COPYING-theora.txt new file mode 100644 index 0000000..c8ccce4 --- /dev/null +++ b/ogvjs-1.8.4/COPYING-theora.txt @@ -0,0 +1,28 @@ +Copyright (C) 2002-2009 Xiph.org Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ogvjs-1.8.4/COPYING-vorbis.txt b/ogvjs-1.8.4/COPYING-vorbis.txt new file mode 100644 index 0000000..153b926 --- /dev/null +++ b/ogvjs-1.8.4/COPYING-vorbis.txt @@ -0,0 +1,28 @@ +Copyright (c) 2002-2018 Xiph.org Foundation + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +- Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +- Neither the name of the Xiph.org Foundation nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION +OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/ogvjs-1.8.4/LICENSE-nestegg.txt b/ogvjs-1.8.4/LICENSE-nestegg.txt new file mode 100644 index 0000000..a67984a --- /dev/null +++ b/ogvjs-1.8.4/LICENSE-nestegg.txt @@ -0,0 +1,13 @@ +Copyright © 2010 Mozilla Foundation + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/ogvjs-1.8.4/LICENSE-vpx.txt b/ogvjs-1.8.4/LICENSE-vpx.txt new file mode 100644 index 0000000..1ce4434 --- /dev/null +++ b/ogvjs-1.8.4/LICENSE-vpx.txt @@ -0,0 +1,31 @@ +Copyright (c) 2010, The WebM Project authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + + * Neither the name of Google, nor the WebM Project, nor the names + of its contributors may be used to endorse or promote products + derived from this software without specific prior written + permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/ogvjs-1.8.4/PATENTS-vpx.txt b/ogvjs-1.8.4/PATENTS-vpx.txt new file mode 100644 index 0000000..caedf60 --- /dev/null +++ b/ogvjs-1.8.4/PATENTS-vpx.txt @@ -0,0 +1,23 @@ +Additional IP Rights Grant (Patents) +------------------------------------ + +"These implementations" means the copyrightable works that implement the WebM +codecs distributed by Google as part of the WebM Project. + +Google hereby grants to you a perpetual, worldwide, non-exclusive, no-charge, +royalty-free, irrevocable (except as stated in this section) patent license to +make, have made, use, offer to sell, sell, import, transfer, and otherwise +run, modify and propagate the contents of these implementations of WebM, where +such license applies only to those patent claims, both currently owned by +Google and acquired in the future, licensable by Google that are necessarily +infringed by these implementations of WebM. This grant does not include claims +that would be infringed only as a consequence of further modification of these +implementations. If you or your agent or exclusive licensee institute or order +or agree to the institution of patent litigation or any other patent +enforcement activity against any entity (including a cross-claim or +counterclaim in a lawsuit) alleging that any of these implementations of WebM +or any code incorporated within any of these implementations of WebM +constitute direct or contributory patent infringement, or inducement of +patent infringement, then any patent rights granted to you under this License +for these implementations of WebM shall terminate as of the date such +litigation is filed. diff --git a/ogvjs-1.8.4/README.md b/ogvjs-1.8.4/README.md new file mode 100644 index 0000000..bdfbdac --- /dev/null +++ b/ogvjs-1.8.4/README.md @@ -0,0 +1,382 @@ +ogv.js +====== + +Media decoder and player for Ogg Vorbis/Opus/Theora and WebM VP8/VP9/AV1 video. + +Based around libogg, libvorbis, libtheora, libopus, libvpx, libnestegg and dav1d compiled to JavaScript and WebAssembly with Emscripten. + +## Updates + +1.8.4 - 2021-07-02 +* Fix for fix for OGVLoader.base fix + +1.8.3 - 2021-07-02 +* Fixes for build with emscripten 2.0.25 +* Fix for nextTick/setImmediate-style polyfill in front-end +* Provisional fix for OGVLoader.base not working with CDNs + * the fallback code for loading a non-local worker had been broken with WebAssembly for some time, sorry! + +1.8.2 - errored out + +1.8.1 - 2021-02-18 +* Fixed OGVCompat APIs to correctly return false without WebAssembly and Web Audio + +1.8.0 - 2021-02-09 +* Dropping IE support and Flash audio backend + * Updated to stream-file 0.3.0 + * Updated to audio-feeder 0.5.0 + * The old IE 10/11 support _no longer works_ due to the Flash plugin being disabled, and so is being removed +* Drop es6-promise shim + * Now requires WebAssembly, which requires native Promise support +* Build & fixes + * Demo fixed (removed test files that are now offline) + * Builds with emscripten 2.0.13 + * Requires latest meson from git pending a fix hitting release + +1.7.0 - 2020-09-28 +* Builds with emscripten's LLVM upstream backend + * Updated to build with emscripten 2.0.4 +* Reduced amount of memory used between GC runs by reusing frame buffers +* Removed `memoryLimit` option + * JS, Wasm, and threaded Wasm builds now all use dynamic memory growth +* Updated dav1d +* Updated libvpx to 1.8.1 +* Experimental SIMD builds of AV1 decoder optional, with `make SIMD=1` + * These work in Chrome with the "WebAssembly SIMD" flag enabled in chrome://flags/ + * Significant speed boost when available. + * Available with and without multithreading. + * Must enable explicitly with `simd: true` in `options`. +* Experimental SIMD work for VP9 as well, incomplete. + +1.6.1 - 2019-06-18 +* playbackSpeed attribute now supported +* updated audio-feeder to 0.4.21; + * mono audio is now less loud, matching native playback better + * audio resampling now uses linear interpolation for upscaling + * fix for IE in bundling scenarios that use strict mode + * tempo change support thanks to a great patch from velochy! +* updated yuv-canvas to 1.2.6; + * fixes for capturing WebGL canvas as MediaStream +* fixes for seeks on low frame rate video +* updated emscripten toolchain to 1.38.36 + * drop OUTLINING_LIMIT from AV1 JS build; doesn't work in newer emscripten and not really needed + +1.6.0 - 2019-02-26 +* experimental support for AV1 video in WebM +* update buildchain to emscripten 1.38.28 +* fix a stray global +* starting to move to ES6 classes and modules +* building with babel for ES5/IE11 compat +* updated eslint +* updated yuv-canvas to 1.2.4; fixes for software GL rendering +* updated audio-feeder to 0.4.15; fixes for resampling and Flash perf +* retooled buffer copies +* sync fix for audio packets with discard padding +* clients can pass a custom `StreamFile` instance as `{stream:foo}` in options. This can be useful for custom streaming until MSE interfaces are ready. +* refactored WebM keyframe detection +* prefill the frame pipeline as well as the audio pipeline before starting audio +* removed BINARYEN_IGNORE_IMPLICIT_TRAPS=1 option which can cause intermittent breakages +* changed download streaming method to avoid data corruption problem on certain files +* fix for seek on very short WebM files +* fix for replay-after-end-of-playback in WebM + +See more details and history in [CHANGES.md](https://github.com/brion/ogv.js/blob/master/CHANGES.md) + +## Current status + +Note that as of 2021 ogv.js works pretty nicely but may still have some packagine oddities with tools like webpack. It should work via CDNs again as of 1.8.2 if you can't or don't want to package locally, but this is not documented well yet. Improved documentation will come with the next major update & code cleanup! + +Since August 2015, ogv.js can be seen in action [on Wikipedia and Wikimedia Commons](https://commons.wikimedia.org/wiki/Commons:Video) in Safari and IE/Edge where native Ogg and WebM playback is not available. (See [technical details on MediaWiki integration](https://www.mediawiki.org/wiki/Extension:TimedMediaHandler/ogv.js).) + +See also a standalone demo with performance metrics at https://brionv.com/misc/ogv.js/demo/ + +* streaming: yes (with Range header) +* seeking: yes for Ogg and WebM (with Range header) +* color: yes +* audio: yes, with a/v sync (requires Web Audio or Flash) +* background threading: yes (video, audio decoders in Workers) +* [GPU accelerated drawing: yes (WebGL)](https://github.com/brion/ogv.js/wiki/GPU-acceleration) +* GPU accelerated decoding: no +* SIMD acceleration: no +* Web Assembly: yes (with asm.js fallback) +* multithreaded VP8, VP9, AV1: in development (set `options.threading` to `true`; requires flags to be enabled in Firefox 65 and Chrome 72, no support yet in Safari) +* controls: no (currently provided by demo or other UI harness) + +Ogg and WebM files are fairly well supported. + + +## Goals + +Long-form goal is to create a drop-in replacement for the HTML5 video and audio tags which can be used for basic playback of Ogg Theora and Vorbis or WebM media on browsers that don't support Ogg or WebM natively. + +The API isn't quite complete, but works pretty well. + + +## Compatibility + +ogv.js requires a fast JS engine with typed arrays, and Web Audio for audio playback. + +The primary target browsers are (testing 360p/30fps and up): +* Safari 6.1-12 on Mac OS X 10.7-10.14 +* Safari on iOS 10-11 64-bit + +Older versions of Safari have flaky JIT compilers. IE 9 and below lack typed arrays, and IE 10/11 no longer support an audio channel since the Flash plugin was sunset. + +(Note that Windows and Mac OS X can support Ogg and WebM by installing codecs or alternate browsers with built-in support, but this is not possible on iOS where all browsers are really Safari.) + +Testing browsers (these support .ogv and .webm natively): +* Firefox 65 +* Chrome 73 + + +## Package installation + +Pre-built releases of ogv.js are available as [.zip downloads from the GitHub releases page](https://github.com/brion/ogv.js/releases) and through the npm package manager. + +You can load the `ogv.js` main entry point directly in a script tag, or bundle it through whatever build process you like. The other .js files must be made available for runtime loading, together in the same directory. + +ogv.js will try to auto-detect the path to its resources based on the script element that loads ogv.js or ogv-support.js. If you load ogv.js through another bundler (such as browserify or MediaWiki's ResourceLoader) you may need to override this manually before instantiating players: + +``` + // Path to ogv-demuxer-ogg.js, ogv-worker-audio.js, etc + OGVLoader.base = '/path/to/resources'; +``` + +To fetch from npm: + +``` +npm install ogv +``` + +The distribution-ready files will appear in 'node_modules/ogv/dist'. + +To load the player library into your browserify or webpack project: + +``` +var ogv = require('ogv'); + +// Access public classes either as ogv.OGVPlayer or just OGVPlayer. +// Your build/lint tools may be happier with ogv.OGVPlayer! +ogv.OGVLoader.base = '/path/to/resources'; +var player = new ogv.OGVPlayer(); +``` + +## Usage + +The `OGVPlayer` class implements a player, and supports a subset of the events, properties and methods from [HTMLMediaElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement) and [HTMLVideoElement](https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement). + +``` + // Create a new player with the constructor + var player = new OGVPlayer(); + + // Or with options + var player = new OGVPlayer({ + debug: true, + debugFilter: /demuxer/ + }); + + // Now treat it just like a video or audio element + containerElement.appendChild(player); + player.src = 'path/to/media.ogv'; + player.play(); + player.addEventListener('ended', function() { + // ta-da! + }); +``` + +To check for compatibility before creating a player, include `ogv-support.js` and use the `OGVCompat` API: + +``` + if (OGVCompat.supported('OGVPlayer')) { + // go load the full player from ogv.js and instantiate stuff + } +``` + +This will check for typed arrays, web audio, blacklisted iOS versions, and super-slow/broken JIT compilers. + +If you need a URL versioning/cache-buster parameter for dynamic loading of `ogv.js`, you can use the `OGVVersion` symbol provided by `ogv-support.js` or the even tinier `ogv-version.js`: + +``` + var script = document.createElement('script'); + script.src = 'ogv.js?version=' + encodeURIComponent(OGVVersion); + document.querySelector('head').appendChild(script); +``` + +## Distribution notes + +Entry points: +* `ogv.js` contains the main runtime classes, including OGVPlayer, OGVLoader, and OGVCompat. +* `ogv-support.js` contains the OGVCompat class and OGVVersion symbol, useful for checking for runtime support before loading the main `ogv.js`. +* `ogv-version.js` contains only the OGVVersion symbol. + +These entry points may be loaded directly from a script element, or concatenated into a larger project, or otherwise loaded as you like. + +Further code modules are loaded at runtime, which must be available with their defined names together in a directory. If the files are not hosted same-origin to the web page that includes them, you will need to set up appropriate CORS headers to allow loading of the worker JS modules. + +Dynamically loaded assets: +* `ogv-worker-audio.js`, `ogv-worker-video.js`, and `*.worker.js` are Worker entry points, used to run video and audio decoders in the background. +* `ogv-demuxer-ogg-wasm.js/.wasm` are used in playing .ogg, .oga, and .ogv files. +* `ogv-demuxer-webm-wasm.js/.wasm` are used in playing .webm files. +* `ogv-decoder-audio-vorbis-wasm.js/.wasm` and `ogv-decoder-audio-opus-wasm.js/.wasm` are used in playing both Ogg and WebM files containing audio. +* `ogv-decoder-video-theora-wasm.js/.wasm` are used in playing .ogg and .ogv video files. +* `ogv-decoder-video-vp8-wasm.js/.wasm` and `ogv-decoder-video-vp9-wasm.js/.wasm` are used in playing .webm video files. +* `*-mt.js/.wasm` are the multithreaded versions of some of the above modules. They have additional support files. + +If you know you will never use particular formats or codecs you can skip bundling them; for instance if you only need to play Ogg files you don't need `ogv-demuxer-webm-wasm.js` or `ogv-decoder-video-vp8-wasm.js` which are only used for WebM. + + +## Performance + +(This section is somewhat out of date.) + +As of 2015, for SD-or-less resolution basic Ogg Theora decoding speed is reliable on desktop and newer high-end mobile devices; current high-end desktops and laptops can even reach HD resolutions. Older and low-end mobile devices may have difficulty on any but audio and the lowest-resolution video files. + +WebM VP8/VP9 is slower, but works pretty well at a resolution step below Theora. + +AV1 is slower still, and tops out around 360p for single-threaded decoding on a fast desktop or iOS device. + +*Low-res targets* + +I've gotten acceptable performance for Vorbis audio and 160p/15fps Theora files on 32-bit iOS devices: iPhone 4s, iPod Touch 5th-gen and iPad 3. These have difficulty at 240p and above, and just won't keep up with higher resolutions. + +Meanwhile, newer 64-bit iPhones and iPads are comparable to low-end laptops, and videos at 360p and often 480p play acceptably. Since 32-bit and 64-bit iOS devices have the same user-agent, a benchmark must be used to approximately test minimum CPU speed. + +(On iOS, Safari performs significantly better than some alternative browsers that are unable to enable the JIT due to use of the old UIWebView API. Chrome 49 and Firefox for iOS are known to work using the newer WKWebView API internally. Again, a benchmark must be used to detect slow performance, as the browser remains otherwise compatible.) + + +Windows on 32-bit ARM platforms is similar... IE 11 on Windows RT 8.1 on a Surface tablet (NVidia Tegra 3) does not work (crashes IE), while Edge on Windows 10 Mobile works ok at low resolutions, having trouble starting around 240p. + + +In both cases, a native application looms as a possibly better alternative. See [OGVKit](https://github.com/brion/OGVKit) and [OgvRt](https://github.com/brion/OgvRT) projects for experiments in those directions. + + +Note that at these lower resolutions, Vorbis audio and Theora video decoding are about equally expensive operations -- dual-core phones and tablets should be able to eke out a little parallelism here thanks to audio and video being in separate Worker threads. + + +*WebGL drawing acceleration* + +Accelerated YCbCr->RGB conversion and drawing is done using WebGL on supporting browsers, or through software CPU conversion if not. This is abstracted in the [yuv-canvas](https://github.com/brion/yuv-canvas) package, now separately installable. + +It may be possible to do further acceleration of actual decoding operations using WebGL shaders, but this could be ... tricky. WebGL is also only available on the main thread, and there are no compute shaders yet so would have to use fragment shaders. + + +## Difficulties + +*Threading* + +Currently the video and audio codecs run in worker threads by default, while the demuxer and player logic run on the UI thread. This seems to work pretty well. + +There is some overhead in extracting data out of each emscripten module's heap and in the thread-to-thread communications, but the parallelism and smoother main thread makes up for it. + +*Streaming download* + +Streaming buffering is done by chunking the requests at up to a megabyte each, using the HTTP Range header. For cross-site playback, this requires CORS setup to whitelist the Range header! Chunks are downloaded as ArrayBuffers, so a chunk must be loaded in full before demuxing or playback can start. + +Old versions of [Safari have a bug with Range headers](https://bugs.webkit.org/show_bug.cgi?id=82672) which is worked around as necessary with a 'cache-busting' URL string parameter. + + +*Seeking* + +Seeking is implemented via the HTTP Range: header. + +For Ogg files with keyframe indices in a skeleton index, seeking is very fast. Otherwise, a bisection search is used to locate the target frame or audio position, which is very slow over the internet as it creates a lot of short-lived HTTP requests. + +For WebM files with cues, efficient seeking is supported as well as of 1.1.2. WebM files without cues can be seeked in 1.5.5, but inefficiently via linear seek from the beginning. This is fine for small audio-only files, but might be improved for large files with a bisection in future. + +As with chunked streaming, cross-site playback requires CORS support for the Range header. + + +*Audio output* + +Audio output is handled through the [AudioFeeder](https://github.com/brion/audio-feeder) library, which encapsulates use of Web Audio API: + +Firefox, Safari, Chrome, and Edge support the W3C Web Audio API. + +IE is no longer supported; the workaround using Flash no longer works due to sunsetting of the Flash plugin. + +A/V synchronization is performed on files with both audio and video, and seems to actually work. Yay! + +Note that autoplay with audio doesn't work on iOS Safari due to limitations with starting audio playback from event handlers; if playback is started outside an event handler, the player will hang due to broken audio. + +As of 1.1.1, muting before script-triggered playback allows things to work: + +``` + player = new OGVPlayer(); + player.muted = true; + player.src = 'path/to/file-with-audio.ogv'; + player.play(); +``` + +You can then unmute the video in response to a touch or click handler. Alternately if audio is not required, do not include an audio track in the file. + + +*WebM* + +WebM support was added in June 2015, with some major issues finally worked out in May 2016. Initial VP9 support was added in February 2017. It's pretty stable in production use at Wikipedia and is enabled by default as of October 2015. + +Beware that performance of WebM VP8 is much slower than Ogg Theora, and VP9 is slightly slower still. + +For best WebM decode speed, consider encoding VP8 with "profile 1" (simple deblocking filter) which will sacrifice quality modestly, mainly in high-motion scenes. When encoding with ffmpeg, this is the `-profile:v 1` option to the `libvpx` codec. + +It is also recommended to use the `-slices` option for VP8, or `-tile-columns` for VP9, to maximize ability to use multithreaded decoding when available in the future. + +*AV1* + +WebM files containing the AV1 codec are supported as of 1.6.0 (February 2019) using the [dav1d](https://code.videolan.org/videolan/dav1d) decoder. + +Currently this is experimental, and does not advertise support via `canPlayType`. + +Performance is about 2-3x slower than VP8 or VP9, and may require bumping down a resolution step or two to maintain frame rate. There may be further optimizations that can be done to improve this a bit, but the best improvements will come from future improvements to WebAssembly multithreading and SIMD. + +Currently AV1 in MP4 container is not supported. + +## Upstream library notes + +We've experimented with tremor (libivorbis), an integer-only variant of libvorbis. This actually does *not* decode faster, but does save about 200kb off our generated JavaScript, presumably thanks to not including an encoder in the library. However on slow devices like iPod Touch 5th-generation, it makes a significant negative impact on the decode time so we've gone back to libvorbis. + +The Ogg Skeleton library (libskeleton) is a bit ... unfinished and is slightly modified here. + +libvpx is slightly modified to work around emscripten threading limitations in the VP8 decoder. + + +## WebAssembly + +WebAssembly (Wasm) builds are used exclusively as of 1.8.0, as Safari's Wasm support is pretty well established now and IE no longer works due to the Flash plugin deprecation. + + +## Multithreading + +Experimental multithreaded VP8, VP9, and AV1 decoding up to 4 cores is in development, requiring emscripten 1.38.27 to build. + +Multithreading is used only if `options.threading` is true. This requires browser support for the new `SharedArrayBuffer` and `Atomics` APIs, currently available in Firefox and Chrome with experimental flags enabled. + +Threading currently requires WebAssembly; JavaScript builds are possible but perform poorly. + +Speedups will only be noticeable when using the "slices" or "token partitions" option for VP8 encoding, or the "tile columns" option for VP9 encoding. + +If you are making a slim build and will not use the `threading` option, you can leave out the `*-mt.*` files. + + +## Building JS components + +Building ogv.js is known to work on Mac OS X and Linux (tested Fedora 29 and Ubuntu 18.10 with Meson manually updated). + +1. You will need autoconf, automake, libtool, pkg-config, meson, ninja, and node (nodejs). These can be installed through Homebrew on Mac OS X, or through distribution-specific methods on Linux. For meson, you may need a newer version than your distro packages -- install it manually with `pip3` or from source. +2. Install [Emscripten](http://kripken.github.io/emscripten-site/docs/getting_started/Tutorial.html); currently building with 2.0.13. +3. `git submodule update --init` +4. Run `npm install` to install build utilities +5. Run `make js` to configure and build the libraries and the C wrapper + + +## Building the demo + +If you did all the setup above, just run `make demo` or `make`. Look in build/demo/ and enjoy! + + +## License + +libogg, libvorbis, libtheora, libopus, nestegg, libvpx, and dav1d are available under their respective licenses, and the JavaScript and C wrapper code in this repo is licensed under MIT. + +Based on build scripts from https://github.com/devongovett/ogg.js + +See [AUTHORS.md](https://github.com/brion/ogv.js/blob/master/AUTHORS.md) and/or the git history for a list of contributors. diff --git a/ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.js b/ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.js new file mode 100644 index 0000000..89a32e9 --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.js @@ -0,0 +1,39 @@ + +var OGVDecoderAudioOpusW = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDecoderAudioOpusW) { + OGVDecoderAudioOpusW = OGVDecoderAudioOpusW || {}; + + +var a;a||(a=typeof OGVDecoderAudioOpusW !== 'undefined' ? OGVDecoderAudioOpusW : {});var g,h;a.ready=new Promise(function(b,c){g=b;h=c});var m=a,n={},p;for(p in a)a.hasOwnProperty(p)&&(n[p]=a[p]);var q="object"===typeof window,r="function"===typeof importScripts,t="",u,v,w,x,y; +if("object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node)t=r?require("path").dirname(t)+"/":__dirname+"/",u=function(b,c){x||(x=require("fs"));y||(y=require("path"));b=y.normalize(b);return x.readFileSync(b,c?null:"utf8")},w=function(b){b=u(b,!0);b.buffer||(b=new Uint8Array(b));b.buffer||z("Assertion failed: undefined");return b},v=function(b,c,e){x||(x=require("fs"));y||(y=require("path"));b=y.normalize(b);x.readFile(b,function(d,f){d?e(d):c(f.buffer)})}, +1>>=0;if(2147483648=e;e*=2){var d=c*(1+.2/e);d=Math.min(d,b+100663296);d=Math.max(b,d);0>>16);G();var f=1;break a}catch(k){}f=void 0}if(f)return!0}return!1},c:function(b,c,e){var d=C.buffer,f=new Uint32Array(d,b,c),k=[];if(0!==b)for(b=0;b=b)return V;V&&a._free(V);W=b;return V=a._malloc(W)}var Y;"undefined"===typeof performance||"undefined"===typeof performance.now?Y=Date.now:Y=performance.now.bind(performance);function Z(b){var c=Y();b=b();a.cpuTime+=Y()-c;return b}a.loadedMetadata=!!m.audioFormat;a.audioFormat=m.audioFormat||null;a.audioBuffer=null;a.cpuTime=0; +Object.defineProperty(a,"processing",{get:function(){return!1}});a.init=function(b){Z(function(){a._ogv_audio_decoder_init()});b()};a.processHeader=function(b,c){var e=Z(function(){var d=b.byteLength,f=X(d);(new Uint8Array(C.buffer,f,d)).set(new Uint8Array(b));return a._ogv_audio_decoder_process_header(f,d)});c(e)};a.processAudio=function(b,c){var e=Z(function(){var d=b.byteLength,f=X(d);(new Uint8Array(C.buffer,f,d)).set(new Uint8Array(b));return a._ogv_audio_decoder_process_audio(f,d)});c(e)}; +a.close=function(){}; + + + return OGVDecoderAudioOpusW.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = OGVDecoderAudioOpusW; +else if (typeof define === 'function' && define['amd']) + define([], function() { return OGVDecoderAudioOpusW; }); +else if (typeof exports === 'object') + exports["OGVDecoderAudioOpusW"] = OGVDecoderAudioOpusW; diff --git a/ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.wasm b/ogvjs-1.8.4/ogv-decoder-audio-opus-wasm.wasm new file mode 100755 index 0000000000000000000000000000000000000000..60298676fb5f5ed5854aca5f9e70abe4056adc2e GIT binary patch literal 136877 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 literal 0 HcmV?d00001 diff --git a/ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.js b/ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.js new file mode 100644 index 0000000..a59a915 --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.js @@ -0,0 +1,40 @@ + +var OGVDecoderAudioVorbisW = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDecoderAudioVorbisW) { + OGVDecoderAudioVorbisW = OGVDecoderAudioVorbisW || {}; + + +var a;a||(a=typeof OGVDecoderAudioVorbisW !== 'undefined' ? OGVDecoderAudioVorbisW : {});var g,h;a.ready=new Promise(function(b,c){g=b;h=c});var m=a,n={},p;for(p in a)a.hasOwnProperty(p)&&(n[p]=a[p]);function q(b,c){throw c;}var r="object"===typeof window,t="function"===typeof importScripts,u="",v,w,x,y,z; +if("object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node)u=t?require("path").dirname(u)+"/":__dirname+"/",v=function(b,c){y||(y=require("fs"));z||(z=require("path"));b=z.normalize(b);return y.readFileSync(b,c?null:"utf8")},x=function(b){b=v(b,!0);b.buffer||(b=new Uint8Array(b));b.buffer||A("Assertion failed: undefined");return b},w=function(b,c,e){y||(y=require("fs"));z||(z=require("path"));b=z.normalize(b);y.readFile(b,function(d,f){d?e(d):c(f.buffer)})}, +1>>=0;if(2147483648=e;e*=2){var d=c*(1+.2/e);d=Math.min(d,b+100663296);d=Math.max(b,d);0>>16);I();var f=1;break a}catch(k){}f=void 0}if(f)return!0}return!1},c:function(b){if(!(noExitRuntime||0=b)return W;W&&a._free(W);X=b;return W=a._malloc(X)}var Y;"undefined"===typeof performance||"undefined"===typeof performance.now?Y=Date.now:Y=performance.now.bind(performance);function Z(b){var c=Y();b=b();a.cpuTime+=Y()-c;return b}a.loadedMetadata=!!m.audioFormat;a.audioFormat=m.audioFormat||null;a.audioBuffer=null;a.cpuTime=0; +Object.defineProperty(a,"processing",{get:function(){return!1}});a.init=function(b){Z(function(){a._ogv_audio_decoder_init()});b()};a.processHeader=function(b,c){var e=Z(function(){var d=b.byteLength,f=ha(d);(new Uint8Array(E.buffer,f,d)).set(new Uint8Array(b));return a._ogv_audio_decoder_process_header(f,d)});c(e)};a.processAudio=function(b,c){var e=Z(function(){var d=b.byteLength,f=ha(d);(new Uint8Array(E.buffer,f,d)).set(new Uint8Array(b));return a._ogv_audio_decoder_process_audio(f,d)});c(e)}; +a.close=function(){}; + + + return OGVDecoderAudioVorbisW.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = OGVDecoderAudioVorbisW; +else if (typeof define === 'function' && define['amd']) + define([], function() { return OGVDecoderAudioVorbisW; }); +else if (typeof exports === 'object') + exports["OGVDecoderAudioVorbisW"] = OGVDecoderAudioVorbisW; diff --git a/ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.wasm b/ogvjs-1.8.4/ogv-decoder-audio-vorbis-wasm.wasm new file mode 100755 index 0000000000000000000000000000000000000000..41708b46ba873f43a00ac5029c4f830ae13e3edc GIT binary patch literal 145191 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

gOeqNp6QM8D^jiUR3)!Te%VozCbP#xK^#vu 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Μ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 literal 0 HcmV?d00001 diff --git a/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.js b/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.js new file mode 100644 index 0000000..4e5fca5 --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.js @@ -0,0 +1,21 @@ + +var OGVDecoderVideoAV1MTW = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDecoderVideoAV1MTW) { + OGVDecoderVideoAV1MTW = OGVDecoderVideoAV1MTW || {}; + +function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof OGVDecoderVideoAV1MTW!=="undefined"?OGVDecoderVideoAV1MTW:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var options=Module;var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("unhandledRejection",abort);quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"};var nodeWorkerThreads;try{nodeWorkerThreads=require("worker_threads")}catch(e){console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}global.Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}if(ENVIRONMENT_IS_NODE){read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})}}else{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance==="undefined"){global.performance=require("perf_hooks").performance}}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function TextDecoderWrapper(encoding){var textDecoder=new TextDecoder(encoding);this.decode=function(data){if(data.buffer instanceof SharedArrayBuffer){data=new Uint8Array(data)}return textDecoder.decode.call(textDecoder,data)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf-16le"):undefined;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":1073741824/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="ogv-decoder-video-av1-mt-wasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["I"];addOnInit(Module["asm"]["B"]);PThread.tlsInitFunctions.push(Module["asm"]["K"]);wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency("wasm-instantiate")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={108768:function(){throw"Canceled!"},108786:function($0,$1){setTimeout(function(){__emscripten_do_dispatch_to_thread($0,$1)},0)}};function initPthreadsJS(){PThread.initRuntime()}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}Module["_emscripten_futex_wake"]=_emscripten_futex_wake;function killThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in killThread!";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function cancelThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cancelThread!";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cleanupThread!";var pthread=PThread.pthreads[pthread_ptr];if(pthread){GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],initMainThreadBlock:function(){var pthreadPoolSize=1;for(var i=0;i>2]=tb;var headPtr=tb+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=_malloc(512);for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),tb+100>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tb+40>>2,tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(tb)},initWorker:function(){},pthreads:{},threadExitHandlers:[],runExitHandlers:function(){while(PThread.threadExitHandlers.length>0){PThread.threadExitHandlers.pop()()}___pthread_tsd_run_dtors()},runExitHandlersAndDeinitThread:function(tb,exitCode){Atomics.store(GROWABLE_HEAP_U32(),tb+56>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,0);PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0)},setExitStatus:function(status){EXITSTATUS=status},threadExit:function(exitCode){var tb=_pthread_self();if(tb){PThread.runExitHandlersAndDeinitThread(tb,exitCode);if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exit"})}}},threadCancel:function(){PThread.runExitHandlersAndDeinitThread(_pthread_self(),-1);postMessage({"cmd":"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+100>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){PThread.runWithoutMainThreadQueuedCalls(function(){delete PThread.pthreads[worker.pthread.threadInfoStruct];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined})},runWithoutMainThreadQueuedCalls:function(func){GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=0;try{func()}finally{GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=1}},receiveObjectTransfer:function(data){},threadInit:function(){for(var i in PThread.tlsInitFunctions){PThread.tlsInitFunctions[i]()}},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e["data"];var cmd=d["cmd"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d["transferList"])}else{console.error('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processQueuedMainThreadWork"){_emscripten_main_thread_process_queued_calls()}else if(cmd==="spawnThread"){spawnThread(e.data)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="exit"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.threadInfoStruct+64>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd==="exitProcess"){try{exit(d["returnCode"])}catch(e){if(e instanceof ExitStatus)return;throw e}}else if(cmd==="cancelDone"){PThread.returnWorkerToPool(worker)}else if(cmd==="objectTransfer"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target==="setimmediate"){worker.postMessage(e.data)}else{err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)};if(ENVIRONMENT_IS_NODE){worker.on("message",function(data){worker.onmessage({data:data})});worker.on("error",function(data){worker.onerror(data)});worker.on("exit",function(data){})}worker.postMessage({"cmd":"load","urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("ogv-decoder-video-av1-mt-wasm.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>=2;while(ch=GROWABLE_HEAP_U8()[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?GROWABLE_HEAP_F64()[buf++>>1]:GROWABLE_HEAP_I32()[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_NODE)return;if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(!ENVIRONMENT_IS_WEB){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret==="timed-out")return-73;if(ret==="not-equal")return-6;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}var tNow=performance.now();var tEnd=tNow+timeout;var lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr);while(1){tNow=performance.now();if(tNow>tEnd){lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);return-73}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);if(lastAddr==0){break}_emscripten_main_thread_process_queued_calls();if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr)}return 0}}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){if(ENVIRONMENT_IS_NODE)return require("os").cpus().length;return navigator["hardwareConcurrency"]}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=GROWABLE_HEAP_U8().length;requestedSize=requestedSize>>>0;if(requestedSize<=oldSize){return false}var maxHeapSize=1073741824;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;__emscripten_call_on_thread(0,targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;__emscripten_call_on_thread(0,targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!=="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;canvas.getContext=function(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];var contextAttributes={"alpha":!!GROWABLE_HEAP_I32()[a+(0>>2)],"depth":!!GROWABLE_HEAP_I32()[a+(4>>2)],"stencil":!!GROWABLE_HEAP_I32()[a+(8>>2)],"antialias":!!GROWABLE_HEAP_I32()[a+(12>>2)],"premultipliedAlpha":!!GROWABLE_HEAP_I32()[a+(16>>2)],"preserveDrawingBuffer":!!GROWABLE_HEAP_I32()[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!GROWABLE_HEAP_I32()[a+(28>>2)],majorVersion:GROWABLE_HEAP_I32()[a+(32>>2)],minorVersion:GROWABLE_HEAP_I32()[a+(36>>2)],enableExtensionsByDefault:GROWABLE_HEAP_I32()[a+(40>>2)],explicitSwapControl:GROWABLE_HEAP_I32()[a+(44>>2)],proxyContextToMainThread:GROWABLE_HEAP_I32()[a+(48>>2)],renderViaOffscreenBackBuffer:GROWABLE_HEAP_I32()[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}var SYSCALLS={mappings:{},buffers:[null,[],[]],printChar:function(stream,curr){var buffer=SYSCALLS.buffers[stream];if(curr===0||curr===10){(stream===1?out:err)(UTF8ArrayToString(buffer,0));buffer.length=0}else{buffer.push(curr)}},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=GROWABLE_HEAP_I32()[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},get64:function(low,high){return low}};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(2,1,fd);return 0}function _fd_seek(fd,offset_low,offset_high,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(3,1,fd,offset_low,offset_high,whence,newOffset)}function _fd_write(fd,iov,iovcnt,pnum){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(4,1,fd,iov,iovcnt,pnum);var num=0;for(var i=0;i>2];var len=GROWABLE_HEAP_I32()[iov+(i*8+4)>>2];for(var j=0;j>2]=num;return 0}function _ogvjs_callback_async_complete(ret,cpuTime){var callback=Module.callbacks.shift();Module["cpuTime"]+=cpuTime;callback(ret);return}function _ogvjs_callback_frame(bufferY,strideY,bufferCb,strideCb,bufferCr,strideCr,width,height,chromaWidth,chromaHeight,picWidth,picHeight,picX,picY,displayWidth,displayHeight){var heap=wasmMemory.buffer;var format=Module["videoFormat"];function copyAndTrim(arr,buffer,stride,height,picX,picY,picWidth,picHeight,fill){if(trident){var dest64=new Float64Array(arr.buffer);var src64=new Float64Array(heap,buffer,stride*height>>3);dest64.set(src64)}else{arr.set(new Uint8Array(heap,buffer,stride*height))}var x,y,ptr;for(ptr=0,y=0;y0){var next=recycled.shift(),format=next["format"];if(format["width"]===width&&format["height"]===height&&format["chromaWidth"]===chromaWidth&&format["chromaHeight"]===chromaHeight&&format["cropLeft"]===picX&&format["cropTop"]===picY&&format["cropWidth"]===picWidth&&format["cropHeight"]===picHeight&&format["displayWidth"]===displayWidth&&format["displayHeight"]===displayHeight&&next["y"]["bytes"].length===lenY&&next["u"]["bytes"].length===lenCb&&next["v"]["bytes"].length===lenCr){frame=next;break}}if(!frame){frame={"format":{"width":width,"height":height,"chromaWidth":chromaWidth,"chromaHeight":chromaHeight,"cropLeft":picX,"cropTop":picY,"cropWidth":picWidth,"cropHeight":picHeight,"displayWidth":displayWidth,"displayHeight":displayHeight},"y":{"bytes":new Uint8Array(lenY),"stride":strideY},"u":{"bytes":new Uint8Array(lenCb),"stride":strideCb},"v":{"bytes":new Uint8Array(lenCr),"stride":strideCr}}}copyAndTrim(frame["y"]["bytes"],bufferY,strideY,height,picX,picY,picWidth,picHeight,0);copyAndTrim(frame["u"]["bytes"],bufferCb,strideCb,chromaHeight,chromaPicX,chromaPicY,chromaPicWidth,chromaPicHeight,128);copyAndTrim(frame["v"]["bytes"],bufferCr,strideCr,chromaHeight,chromaPicX,chromaPicY,chromaPicWidth,chromaPicHeight,128);Module["frameBuffer"]=frame}function spawnThread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var worker=PThread.getNewWorker();if(!worker){return 6}if(worker.pthread!==undefined)throw"Internal error!";if(!threadParams.pthread_ptr)throw"Internal error, no pthread ptr!";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(64>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(100>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(76>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+12>>2),threadParams.detached);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(172>>2),global_locale);worker.pthread=pthread;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"threadInfoStruct":threadParams.pthread_ptr,"stackBase":threadParams.stackBase,"stackSize":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;if(attr&&attr!=-1){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(228);for(var i=0;i<228>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function _exit(status){exit(status)}function _pthread_exit(status){if(!ENVIRONMENT_IS_PTHREAD)_exit(status);else PThread.threadExit(status);throw"unwind"}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;var tb=_pthread_self();if(!tb)return;var cancelDisabled=Atomics.load(GROWABLE_HEAP_U32(),tb+56>>2);if(cancelDisabled)return;var canceled=Atomics.load(GROWABLE_HEAP_U32(),tb+0>>2);if(canceled==2)throw"Canceled!"}function __emscripten_do_pthread_join(thread,status,block){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self()==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&_emscripten_main_browser_thread_id()==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(GROWABLE_HEAP_U32(),thread+64>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}if(block){_emscripten_check_blocking_allowed()}for(;;){var threadStatus=Atomics.load(GROWABLE_HEAP_U32(),thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(GROWABLE_HEAP_U32(),thread+4>>2);if(status)GROWABLE_HEAP_I32()[status>>2]=threadExitCode;Atomics.store(GROWABLE_HEAP_U32(),thread+64>>2,1);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread});return 0}if(!block){return ERRNO_CODES.EBUSY}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _pthread_join(thread,status){return __emscripten_do_pthread_join(thread,status,true)}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();var GLctx;var proxiedFunctionTable=[null,_emscripten_set_canvas_element_size_main_thread,_fd_close,_fd_seek,_fd_write];var asmLibraryArg={"c":___assert_fail,"h":___cxa_thread_atexit,"A":__emscripten_notify_thread_queue,"m":_abort,"g":_emscripten_asm_const_int,"u":_emscripten_check_blocking_allowed,"l":_emscripten_conditional_set_current_thread_status,"e":_emscripten_futex_wait,"d":_emscripten_futex_wake,"b":_emscripten_get_now,"s":_emscripten_memcpy_big,"v":_emscripten_num_logical_cores,"x":_emscripten_receive_on_main_thread_js,"t":_emscripten_resize_heap,"y":_emscripten_set_canvas_element_size,"k":_emscripten_set_current_thread_status,"z":_emscripten_webgl_create_context,"w":_fd_close,"q":_fd_seek,"j":_fd_write,"r":initPthreadsJS,"a":wasmMemory||Module["wasmMemory"],"n":_ogvjs_callback_async_complete,"o":_ogvjs_callback_frame,"f":_pthread_create,"p":_pthread_exit,"i":_pthread_join};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["B"]).apply(null,arguments)};var _ogv_video_decoder_init=Module["_ogv_video_decoder_init"]=function(){return(_ogv_video_decoder_init=Module["_ogv_video_decoder_init"]=Module["asm"]["C"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["D"]).apply(null,arguments)};var _ogv_video_decoder_async=Module["_ogv_video_decoder_async"]=function(){return(_ogv_video_decoder_async=Module["_ogv_video_decoder_async"]=Module["asm"]["E"]).apply(null,arguments)};var _ogv_video_decoder_destroy=Module["_ogv_video_decoder_destroy"]=function(){return(_ogv_video_decoder_destroy=Module["_ogv_video_decoder_destroy"]=Module["asm"]["F"]).apply(null,arguments)};var _ogv_video_decoder_process_header=Module["_ogv_video_decoder_process_header"]=function(){return(_ogv_video_decoder_process_header=Module["_ogv_video_decoder_process_header"]=Module["asm"]["G"]).apply(null,arguments)};var _ogv_video_decoder_process_frame=Module["_ogv_video_decoder_process_frame"]=function(){return(_ogv_video_decoder_process_frame=Module["_ogv_video_decoder_process_frame"]=Module["asm"]["H"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["J"]).apply(null,arguments)};var _emscripten_tls_init=Module["_emscripten_tls_init"]=function(){return(_emscripten_tls_init=Module["_emscripten_tls_init"]=Module["asm"]["K"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["L"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return(_emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=Module["asm"]["M"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return(_emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=Module["asm"]["N"]).apply(null,arguments)};var __emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=function(){return(__emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=Module["asm"]["O"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=Module["asm"]["P"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["Q"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=Module["asm"]["R"]).apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return(_pthread_self=Module["_pthread_self"]=Module["asm"]["S"]).apply(null,arguments)};var __emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=function(){return(__emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=Module["asm"]["T"]).apply(null,arguments)};var __emscripten_thread_init=Module["__emscripten_thread_init"]=function(){return(__emscripten_thread_init=Module["__emscripten_thread_init"]=Module["asm"]["U"]).apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return(_emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=Module["asm"]["V"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return(___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=Module["asm"]["W"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["X"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["Y"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["Z"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=function(){return(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=Module["asm"]["_"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["$"]).apply(null,arguments)};var __emscripten_allow_main_runtime_queued_calls=Module["__emscripten_allow_main_runtime_queued_calls"]=108468;var __emscripten_main_thread_futex=Module["__emscripten_main_thread_futex"]=376276;Module["keepRuntimeAlive"]=keepRuntimeAlive;Module["PThread"]=PThread;Module["PThread"]=PThread;Module["wasmMemory"]=wasmMemory;Module["ExitStatus"]=ExitStatus;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(!implicit){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exitProcess","returnCode":status});throw new ExitStatus(status)}else{}}if(keepRuntimeAlive()){}else{PThread.terminateAllThreads();exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}if(ENVIRONMENT_IS_PTHREAD){noExitRuntime=false;PThread.initWorker()}run();var inputBuffer,inputBufferSize;function reallocInputBuffer(size){if(inputBuffer&&inputBufferSize>=size){return inputBuffer}if(inputBuffer){Module["_free"](inputBuffer)}inputBufferSize=size;inputBuffer=Module["_malloc"](inputBufferSize);return inputBuffer}var getTimestamp;if(typeof performance==="undefined"||typeof performance.now==="undefined"){getTimestamp=Date.now}else{getTimestamp=performance.now.bind(performance)}function time(func){var start=getTimestamp(),ret;ret=func();Module["cpuTime"]+=getTimestamp()-start;return ret}Module["loadedMetadata"]=!!options["videoFormat"];Module["videoFormat"]=options["videoFormat"]||null;Module["frameBuffer"]=null;Module["cpuTime"]=0;Object.defineProperty(Module,"processing",{get:function getProcessing(){return false}});Module["init"]=function(callback){time(function(){Module["_ogv_video_decoder_init"]()});callback()};Module["processHeader"]=function(data,callback){var ret=time(function(){var len=data.byteLength;var buffer=reallocInputBuffer(len);var dest=new Uint8Array(wasmMemory.buffer,buffer,len);dest.set(new Uint8Array(data));return Module["_ogv_video_decoder_process_header"](buffer,len)});callback(ret)};Module.callbacks=[];Module["processFrame"]=function(data,callback){var isAsync=Module["_ogv_video_decoder_async"]();var len=data.byteLength;var buffer=Module["_malloc"](len);function callbackWrapper(ret){Module["_free"](buffer);callback(ret)}if(isAsync){Module.callbacks.push(callbackWrapper)}var ret=time(function(){var dest=new Uint8Array(wasmMemory.buffer,buffer,len);dest.set(new Uint8Array(data));return Module["_ogv_video_decoder_process_frame"](buffer,len)});if(!isAsync){callbackWrapper(ret)}};Module["close"]=function(){};Module["sync"]=function(){var isAsync=Module["_ogv_video_decoder_async"]();if(isAsync){Module.callbacks.push(function(){});time(function(){Module["_ogv_video_decoder_process_frame"](0,0)})}};Module["recycledFrames"]=[];Module["recycleFrame"]=function(frame){var arr=Module["recycledFrames"];arr.push(frame);if(arr.length>16){arr.shift()}};var trident=typeof navigator==="object"&&navigator.userAgent.match(/Trident/); + + + return OGVDecoderVideoAV1MTW.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = OGVDecoderVideoAV1MTW; +else if (typeof define === 'function' && define['amd']) + define([], function() { return OGVDecoderVideoAV1MTW; }); +else if (typeof exports === 'object') + exports["OGVDecoderVideoAV1MTW"] = OGVDecoderVideoAV1MTW; diff --git a/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.wasm b/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.wasm new file mode 100755 index 0000000000000000000000000000000000000000..8f5522f098b3e5d7ec81662b5887a90fa36d98f0 GIT binary patch literal 416642 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

&n;*aU+Jp<-6BLNKtMuJLTEsm!dJS` zhiDi|#}E>cXF(C65g`(*{&=4Ss1O1I0)hep1H43yN2sPjJ(h?nMYt9Us1_Ic__B0w zT@}Gwz38C<=~!RsigT^LvmRDd=|KrKzGKmw;Efzh(v@}TCJ=RkL<;D9d_Ea#e>ApwDz+ zeGV%_sjxgM;HA_P@ME5UJQO170&PkiUDW^Hs(AX@9ry0(ge7OG+vob`6r%KZxIxQ2^x9gW34;>l=KBvkpfw774j8W zfov2g3Nfq0`cY{lLJbJT#r5};^iMc@3%~e_JEz4zF1T7!^93o^*MINyFR8zU2!BFT z{F^;O6Wk&%Z##Y6ba{d0{r}?eU&Y-*?I8$M0u7lXvboGX_R~K&JR*`C5BV*}hY8=8 zU=HOtX6S%{KFl)4wi;wamN8~u1&p!L)^z$>%G6H$j z*Z6d+3_nyd*QTYTZ(#cadk-9*nttU~hNh1HWbTJQKJhDGJ(#qIR3`zRb@PhnEyQ^5RkkCEo( z`x-yD;@M>QOuQlTTJee&7cqFEJYc@Y*OM7wiNmv)!mwp-0d94ip9~08F=|+jf2_vW z_&f2UGGU3~H+<`m5ObCo)@);Jv!$uAskznH_0mO?lY+F%N)7aG3 z*2VbB_U$`%?y~s**5m&c{{sN-ct~af6f(>#Q3NVP03Z^*7<18zk6aobAPNGYxPyY@Wz@T1Snyz=^6KW6m$ zm%sUIU-1pSTeh^eHn%i3b#(OhZj%6*gHKF7|HAj*_{mTI;xEts_8)x3KZq*i3CEOp zQ~*GE=7bX^{=rv#1Sa#McvT!XmJ8F30KVcUmd3M+YZKfl$QSPw2;eKeVrjf*4#x#^$C5;&hsP#b@M8cm^If_*VjW7=K{s zt%H%bE(Yg0`-!;vj>KGet%BWu<5 z^(`%12oV~T@iPzq-zxsY((aW4Ak(_>`r|;Q2~`*g0Rp0kh_-71z~|#b+{vOK5YsDR zxA@^1o}eNiKx+s5547AmeniFxFs7Iq$pjEkj8P+GaYJJ(C@djLzT!(Hz5ofpScOs_ z7!@G!K%xtXK^ul0eZ`+x_@DyRm_yXasKF3>{Skfe@Z`aXLytb;D?X*BLPl{}aG;vF z9751`j_xA_?a8N~d*S8TnHOIEp0D^7!3Puw!g>hD=pPs!-E-jJ<5SPge(&|~A3y%X zpZvmCd`nkbTT@emC=e~3odW}meD0fk_{pbUdg+a0Kl}Ngo%$>K|4ZXvL^}kZl>&fk z6PT7k26ylS2p|UUm&M0OytbNYsQlu}^`J&Ztq=+3OXCE?5VaiN*5C*F0sd+CLAv;H zNLOA<>&*;}0m=#pe8tyT{I3G=5W)yiCPm1|sdS43`1y*zQSlezG?npnD?p17D#qR$ z=oe1D;&Yg8BqMO>OiKMw0bEQQlIV;MhF?2;#qTJ55CuX4_}t+gO~hqL^hR%QU%#*T zp2EC5q`%C0lF>HNAk@%UTU%#WzeIou{|k@PkGG8fQ98bw5)w%u6H0t83t$KW5FjGY zBH@J$zA!$>3lHLT!zIUE$S@_2ts_9AOKIvpobb4T@*j%#s}~G zaVvI0#x5A(0Reo)S1q0IArGk#%;FLi;_EB^igj2RIz>5E>pA4+sgZTUZ)$34tNE<; z6`v*XIfP#j!08U)L-0v-4!qwg5t6>*w*()Q0wDpM@GpXd5QY{4K#B0{?C$Xu--Y%s z(jNsvEPw*ouDn`l03AdC5+&^6|1XXIaVXo|K(wpMG*j?7eF$U0Q4Aakmgoj@nxR)B340? z*GdefguuazM9H!MiLdxGEB;7=3kZ24?6DjRu8HVLiBQ}zx_ghW_%x99`lSE65Jlu^bYiFOGWUpGGS>&7qoif?SHl?gNzRz#&`1MJu_Ha0PF`0z8&%*?zb{Qq_0AC>m_ zHR2=Py$**l7-fxQ!|cjcC{dC=<0n1%0E1eC;@A*hCBD+a2artw1b~=Fh(9j=^6SQD ze%<&@U-6x2{~~?>pG?;MAoi~mAE0Oe%`%aw!;1e^Oe}i%t>Zt%$hU5g_)ldIkzJ{K z{UQ$lh$8>__)ujaz@*9vAc922hvHIo6c=0S16jKPfG~+g@uR#|1{g>sERBIrVlUAz zRT!Y7pkVW6`2S1eONlO2zEg#S$1T zuT_2&!pFpVL8bN;pXw{!SNy7IZ&v(b4u+4+bEs)(P!8asZ4%<_E4~$cKz+bpE*&p! z+txOTfF5QfV_ZU@75~$@UmE|4gjdik0$k#oB=Ai|w-O&H1_B-&3%XTE%%b>MHApYM zVNo4~zeQRrHvsWnFdY2VhM z4~wfoYuv?);)i{u3;PQ&@vt};l_e>@BGI zz{mI}#UFd|;}-GB=$DY7gz_-O1$rd_8&+hNA8rWdXmt3BUuHQYnIOj$xkQLdFuOU|4LMj%f9v>ZU+MS{2!2v!BE$K}NfkkhC&7ykVnRsV zn;e1=N=Zmn_#p)XlT^AVK>$K@0gL}{9e?dB9rrUuP{^lTr|__4xQKdDSXcx;SO&%| z;6=3w5hWyxG}; z528RQ{{+<%x?LE5F6cm*j)c+(G9o2-7y*Lx!2Hb5_Z6S+EB))nultH`SKcQ@?<$;M z#0U68WPCN_z^H&0|9^S>JK_O!Cf<$qQIss~qHrR?9Upz`_;}U->sT;){Lj7CE&(m!Ro81d2@>*{RM2qklU$0aaH{vL*1#4Um3kTHv9Jxg}R8$BLLRb(1 zMl5=rm98K{X%VOq!rg*FpxPJ4=le<*?&tmL5EVrQXNz-H4T1QM-v>WD3W!pHmd5wX z><>$A0HWB~*$ zogW~Ne_6U09$-bR2%$Am`+UwHu!`k|79l1f7>T_^Wv6_x@={OUZayYaCaBO~G>Kw= zj|QPiZIR|5JO9AK4{0MOdBkckYHA%<{Q2|j$;{1#v7R{s;~DnJPWeBt~T zVPa`tQG-17vk2ar{~(QwjU@=6AVBnSIVh?;sz~ckO!suF7$EcQE-$xU;O%P#`0hdp zXS;9ty6Lp8b;txVfj$8Z<$`caRrh<`Duh@O3$zH|^K(4qyyf!>VC3EILm)=96w&Fx z3Bd;sfG8Z1St}}C0481G%a^6k^S`^F6vJ4pE-0|@SBsbU^fKEQ%>R*_taQaOi}_on z2`4MA5{mlT>GD47kbF5LYmw>-B^JyNSx_n~Ndd*ehgG4hC*2_8d;XEH=dCii3+64A zr49&T$xq6KA%zxPlQ(~b`AZglc$^?g34urF=QsIEclW=Z;IvNQ#S z4|InhmvZyE)f+db`<#E}>v?%6hjg`7D!~hBIOS%EkE1kl{K@mTyg&y$NY?650AyC{Z!2H%a6thdkxRA4Piq?&;QRJ)fS}3z8@>uzuiE-LbG_Lb+jK z-u|~{yI8froUveNetw&q4%9G^B%=w)G_^l^ew@3V*~)=Kf`Z%(=bpt&!u`+VR#bP0e2MA&Xc;*jM72H@*At>bSe@{nv&hBROTrNI)+SENiY5wwa-{iT^ z{kY%wo<8&zD(#@i6Qc*Upo=PVHy)xg6$`Z=LR@>Lt&5pY-6u;{I14 zfF|H`{-cEhWJ3FY!Qo9_IzQ67S5z^@Zl3jAy;-=63r||%A3j|b z+1u*wFCsYvU}1jw#nTs@-K|2Z04%UF|CSm*i+Gs~MdRicX44DN4_-YztZ+8<$yIQZ@KEzr`fyrDc}21g#5; zN+`~DG!3tfU`wN{q~!d{Alb?;Cnc?{eeK5B=-Bjxglyu2*q4k=(;PKxLveH@$3>^* zsqyI8O`DQ)*M=}8ofH$5lz~KL8?w-_sN}Wl*-MVFakX~?MkR5{(b%q`8^vXvsO0TB zxfvlRPq4iR-z+g~tv)Wk?l9{&`FXwvWe-?Sd2(wDaw@y`)R(u7Jbt9JrDxYuZ~SJ* zz_$I*&i(yGtEBNUX?g6HT2h;nmRHf-m7kqo*4Q~%oL^8@-?@Dk`GkZe#6)M7W~Uc7 z4ON!Z_wAoCljGC#%d=8)O6uD3vU1sOiFqG+ z?BBX|ht(F*QK{@~;i&E?FRJPqdAy;jsc-*NN4r`(*u!=1G<%q;e3G*g<5F^qGgC5) zDq9>GImIc-M(XzVm0;be(be5T9y`! ziAqe5k4?^IYejZutj$WxDyV2|%gxFzC~xfSv-%+{JenOwlX5GwGjhsWhsujLH}>y+ zyuPZYecOR&U-kA7yH&)e=O!m4WfhjQp(?pitjxU4b?sgA{mFhuS;eWz>4nv7-cwN7 zx|L#;H}>wDoc89E92*^82H-@wIQYM>fC9nZiQhY)RyV^F8&xT;E69%JY#vFxWU1m0ZVxOa|1mXbL zO{IW)Xd>x-l!lOvZ2Jm7xi@VkyXeG>{9^8b!evJ>8F-Z~SFPM+<5seZj!((VQu#<$ zD$Fi~%!0!pAch=XCpcPjh2l8=>@s-P5&EafrL zmC$!WEshi|l^grknQ>0 zx(CGttdYqg-0bby)Y`q3c}CUctencE1(sas=o*xz4<4_nVAXOpnUN*rS*d;BLr*+e zS6Q}sa|v;YjqRPi+ji~QKl$WS)6MlV?U@kCHdb7a`yPLK=EWmzjdd(pTT|c6B&zK@ zA2@L6@brtXeD94dEiBN^f{iTg%ksSY_D@bd{ld}jzxktXrpS<@mOfx*cNTtsZuZDq zKbre_e`g1q*|MLP>=&?W{GmsldiJH)-}vdzPyS}Gw|h%RM{9c*le9+09z6K?lQXZp z_QSXT?ANFNcKbkocUKqFp!c)iyzn=_{kz}&PZ$5||8Zb!Y-D7|&h6WG@3!V$z5L2s z$4~z9Z~pe&fBCPM{`dDkhIrr!C}D#l0r-UN2E;P~4dWJsx#&~j4VnF-Ham*Oy`Svf z=7@+O;7Y~@WJ4-edsDFlL=mtwCtI(I7l4a2hWhf70V@_l-~qJ|g6s>%7r3kz?NsGt+uUjv z&tTGSPhXL2Wss$&Qmd8DnF-y_Y?{6SYY_w{tx0s8OiN;7;uiKN92hJq$cL~ed zZFqR3thkt!yJd4>HJ6B$ikZjET;#3W*$;6SOvB3F`LfnB+c~;tIWyB}ka@$SyT&Rv zlXoGrGK+}gla-p8O+@7eSdD>oNgmj{2p<$wK^KsR%+Io5A~ejx2LRQxIc$7_g%s?e zo9Kp$NOnm~&snrOf|@GJzPjusKx4?n*LbLg{+5koEx1TYrz7dJruM9K!3(gYps1pT z4VSwYEtJ4ciTy($My^A4?qEVT%PPPgd&)~#n1flepaDGI505{1sJfg0Wah0fU$nK8 z9VTT5hsWzGS=*fH>;xpUn#;CbWBVr`dvdz5wyLs10H=xFCAaQirS?aeBKcwqYp7H) z>xHIb$FR}eW)=+eUZq zmv_JP%CR5*?BuUb5BBzS%5EE-f)Jy;=rPt%IC|{IKRVgAmWWaOCI@-~QE~|Ms1K_|L!Fy<-R9 zGSJ(%ZQHJ0T4K;e$vWB~ZhVrigPDKo{eIiC8*T z;$GvEd5_ikVbB6Cp*7)E3vb0$iI7A&-5Z47L!n}U={ z125>&6onVE$u*Pc<^e<2WkINb7@I*1S!))6k?Daf5&~qf`(0`ZVbLs03_r-SAN7s% zD<-gsvS&vN*)~zFVlVqgD4u6-Uz;qhlFl1J0w9WIgAh&3e3Ug+SkTwArb4Amh-4~M zw^~ajLndj#?acCH&3|M^S9fnAtjru}mJd*yq{v$E&8#BS)6-v+57sb0QtG5oKo%tc z1^W87%E}2cb()ZAHS0>2&1cRa+fxh-sZ~{2RzYTD$)XHwHQC(4ob0}V!NKjN!rpKO z&1S8*0^u@kxVsn7v7jZNMO_4|1R!J*bStIo>t|maH@E;jOm48&L036<^Z;4I?3luO zEerGqOO^5JN8p2u--*viBAz!!02DG{ha%}+Mj<|VBOwKNfB=FN&u-45S7fktIr1hd zigj36>!Qd)3(+lDdfx*V?sXK(D{4QtZUXyE%8)c*jwGmNch!!?ODDj)y+hIwK)4_T zdyBRrrFZNq28Q`nG>__fRDglOkq6K{)V3dj1uUG>!@eGSS@%E|Q{eXniz$pBJT!#{ z0+^J_k`k z!afb{s4P7o(&(5%h?yg=z4fDC{@Llj_}lIM{cPjGQX##)%-tRxAAk7ar>9?f>CHD! zocN2s{M)mCZ{dUJ!pI49VSIxqkb)9Xf)5g>8!JNs;DRU;^O}U3h#{(k1r1R)Usqw#Its8wQHolaTNDnp=>xLTyOe@V;upv$ zEl27Q*-n<$(jGFWxLUyonulyssc-~gg6^T#F=rhnHHFu`4ayfTuF!%8qV8U><^n6V zc$AQInHZoDj9J{wAeKo`-bGlf`N1N!8=G6UC`j?BC=NCE5@keG0Si>zY6=g@O63*^ zup|NdETcULoy(#NUhRSsZ0Yg&sDy&kwImk*Yl(LHz zn+8Q|0bFE77i%4N^cLm=vEKcbUbUVJ`#CMb2Qf61l_BJz)Ci?VV3)}toP-TXBvr)1 zZQd1B5L(47ujGxg-7OkvG}~UK$y5g@Dl$fG{k~*j1q(bd1yk6ImTD<_5dFfluZv8i z=U_|GEVdq%)etgdVftjHkOCQ1)o6J#+ZFAR-F5R30(JH1Y6A;*fMJVSYX_KOrPo0p z?E6t&-_puba%k@Cwab<&=&!Ow9W$-_1`y=q2ddd`t5{SJ^gmgHVbEHG;qhCpy-){g zVAF`iVVSG$-fcTj{3jpvKuRS5RM()443vJ^j_6r7n`v#RXQDM~3Om@Km2Mjrz2lK5 zpLy}+SB|#JDo*TE#f}CTL<8G)Jh12BLytfC?Cg=(L|YO2rw%zFG6^om;brK^S&LOh0sapVWb=jMLi*V)<124{_pvY`Fo;K;~6S>NT! z7iVAp{@XwK`7i$5GEOagz8K>6GzJ18jFH8MSqd0ALkpa68OQ~?1MvrJt7f)&tGcw`iEK@L)kJ&zK#55i8ID|8D=%4X{o-AEfz=agnGK}^_gO*)>k>9(-#;810we68 z=5Q1i(aOR{U%V`Xnhg8-#TW!kLxU7UQ*D99(rPGX6Cim-gx8qJU)nx zA>A#GC>dbf7%4Czi*~8uLfPX;fI?>85WFPum%`3sbf~Z5yp!E#RiL6;jX{7zxhB-o z3~sbg3o(dt;k{GBk;QYNOcS*a5()<1i=`VQv6X>>5MCtne`O8>P7MVau`&}09*5Bi ziWdBaZ32$)+k$PB)ao`!Y*9Z@S!Ko;1y_qRz@}<(1_2Y9HzCMmxejExBQKnw8_5)6 zrQO4uZa|SamTJEL%jFwHOA$v2OGAmlg2E(@22eok9tYOfDb|I1SQ-sAudIK{phC0?4_0`-D;q>+c7$VN#3u`M z%wOTPAc`6Ciop3Ut3NEg#ySB)gr5E{_TB=@ilb{A?KAG~?(XjH?yl#IyZa1IkU-E7 zAh-qymLS31Ex`!{3z7tPNFevA>T?b=6X1QGeTlG zGN>VlLO(lIOdzGc_2W4h@{svfe5opiph_C~QdI?k6?~~`^r!MLmy!@m!WHsiB)EBA z9u|7UWI|`>(4k|;e*WoPjFD0k6Uq7zWK954XIa_c^&v31P2vag13~~G*vWBp3V70# zeEUkUr-1~XPX{hgRnj9NRP@6N@+vnA7X8rz5hbQC*p*xmY2cJ>^tEiR@U_r+qG{^vQIAU(I-@*-Kf|G_C=#a?r6K)upU}!?34Qt%T0#eh_2}Kax z>%_D+W{2$Q(hcN67s1jE!7v#*$3aj8FTx@42qQ4^kF-d-tP8OSAPET`@!7H1*kp7q zz!vg1;A3PEHFQfhAX5Mxek3MhRK|xB1fZ}eIztXglDQzj3Hf4~7bf2P*mXg%JX1C% zkZ@aO;BpU`#1bs`K;k;Gln+@q0~1Rz_*WfFP?SK~YA=(JR$6+x{#R3r(>;e&e1bIG{Jz5w) z5R71>NpdTL=+_ee$U7m{P%jB2?C>!hXbg9+*dYgb2TuSM>>(L|&=Cj;EZpd;Ph`wM zPS`Mm#2n-;NeUixD1vDXGB6={!A2Xv54tpj5HNrsWVC`;t!NQI3N1pHasXtIDzU+t z$t%GujQk^w3}49fD48xrK{6jgzCi^jp{azY_o*T1amdSd2xiGrcw}$@IKkWAfD@9= zM;SV3AW#qy>E%wA2_gL!dAFDZ9T@9`qwmIT85*JRu?7Pv^3E|n{)ZbhKCIQ@+n{U& zMY?-n1pRz0kOO0D0pidJ59l7#E9AqGY$geC2t;7yg4qxZUC4qG_^RZf1tUmE)qlZ= z|B%hDCqai5G-#mz=qZqZJ>lbo5GaI5!S7wj=!1+u_yZ6cVPICvl1^*Fu*l&9FHM9!Vd9j`G(lUD#CE9VIy&ODEfVjM4j?*~g%g4& zWN|XOKp-$4->&;;1{nZBt=Rs#90ZwaCov83VOj(u$agex^9;iwx(F!&91Onj3090~ z$V%X3E%SWb*}+^CSz-oL>aYdMneY>NrInw~t&9jIH`oF(+l4tBG7X0HH8Dk+S5#Dr ziO||679Ri&EIzOxLHYzb838S0Is#fGI<>N)KmmZTCm{ue3IGJugJ=R`6<`JK?~|bi zoz_G$kt_jacp?=tfeTmnL8oM7!r}vY$^h?2VcJsw804LP@;=pj2;rxYDGpMIZdg1B zFJ|_K5y2PvkVc{rK4@SBLmUzi;p@*Tp5hBXl>m%CVpJA35bUtti{yZSK)?wqq#Io; z0-qlwFcVC0=EE6e0K|use=H9{fPlUHrF_ZD#$?f5EVi4FkVNeP|M)>ee|+G> zga9W50}kx@Aq7DS{^)}}q%)c%o1g-2kCNdCF)1>99e75btsomk54@I&XDs-k2QUJ! zGztKOB8iU3~trVEp!@AUfdU*;ym9I}=Q z00wVx`r{jiSYwKfU9i3;p6?;am=YtlN9OK{{gEDqE?a}eg$T~DF$*z%%&AgC0s2Qo zQnP2{Xx!kzTDxSf9&h@iE1@%K)F9}4;IL0rffWGIDUiU1MmE$S0DJTmar8g*D~ZHd z&;em04$VcEfuIt@PJ|g`QOR@?$xzqK)=KYe4x;dSfbydBT0iK*%vVA7zEJ+!humW$ zQ|CCMs6u)#SR3Z zAPB)uXh1S(COyaF$Lt1dCJ6vm>SP3a(Hx|pd!<7d;+Qmnyp@Tbm^OD%8b4g2k%Hh_ z1bKWY0ZFnEn4*hEd?cBI48aq&I0=eKam0KSxkxWUH+}}v>6qv}1kvRua0$(MzcR&u zi)dg&kw^eI6pJwYAz(yS#~Xk~{WB5d0ABiI)jxCn1@=HBh9(o3rNBf2rvN|`wFjzs zs(sc3_=dpW3G9L&VvtD)A!PJ}3W5*<*q~@Z3zC2Rp#x_yB|+3dGU=%ROoZq3rU|)_ z%_q)I3X+I~h9uMo`5-bN>4Ry4a0L~E61f&J3mddh%;AFxe=!D%Fa(MQCVzZw3ecmW z4e$;{o&5#)AkHU|5s85?i6a24k7Nf@d+3i4orpa6kcihhR!j_Gs7MD%>w6IoHHCFn@Oqu=R2&K+rUX|qTKN6eWIDdZLk#fq)k%15yKz%&xlX)I201{N;69phqngpu)Eoeb;hlWeSTz0*jeuyYS0_b>Om{`ku*dU-FEKE)Yoee$}L?MI-3IhYk5r5-jgy0l=e#(1Pd7t#b zG$c~0ENN=W1Sj67!Kg{tLBWIE#w8oc<)^X^&L;meT@dU1;{w4P411vfnh*>T?UrOrE8oFha#k&IX@i=t6YCvPf{yhJQ?P zmM(tyMM$pbUU8KouoH|VrKvXCMJ@Ptk14=MbV z4<&sttv~!w>a6(^GVeE&I3LJ#Jj(;}bWI!<# z7?}Cb^M4fhK#>n7ec(d2IsuRU_F$slnegz#sls_$VLA2ymi$2~G-CO9&L=MV6v0o{ zhRjcrMfM=(g-sxrl8uUwDCghb-lGYj{T@1KO@m&o2bc^fPM~H`!Us}5l=Q(gwv~fr zf!CqmC$Zwdf7)LN&)&n9DGSv7P>ddu>6iC~_&7wdhzv46p7W`!Pv(6(^FQR0{(>SU z{l|w(0&g_D0`mNSwFlNmsfr<6x+njLoCll?IvafYkMn;fd?4jRNgqrTCcf8ye+~zx zex&gG1`R4M%=kz8r*Z_feBh!_UiKd{KS>sK@s;wyT4|zCYyW%j|APbug4}=#1_9vU zyaDL=kIetKxdc5w!IP1ZUTCj>o128QhvPW=oi=XfBaHu4&Q*9P#qc+!u8`N1T_+~Ue;)Ny=z+j7 z9zpI)U2izAwazfCms62+;Ry1VCOO8*hmH?S^xWw@)=F7#tJYEJc@pNr{EJybTqijM z*=@GbvOH;SZSu3;3WWz!Zo>K(R9rDuGCE?QVc@TOQ0K6gg_@)68SxXM0{Zv3stJzH zQjRO_XWEuoPc^GHdahES@T;(W%L?X2Yz__fXZ*yxwY(Q z==LB*A5}*q8$Y9Z9d)@sB_xFOwpC$C%oP|ha0=m z^M+fEYrM0y<4@M{<_lDB$%jh{=wB?KQI@6CqAjAmL(4-WK)F@vt<*-z6~gOHGHg=5 z4Bza>^Zm>?h@=@4nx5hEAZ?7@3EX&O-SeNZ1`Y zG}P5=smBDjXD;b>dIpS~uVlF}|9PQkOjx9&|8-w`Z#}PPuI>7#bkp3?TGh?RXDY9PoL7XF`FVxD`A)uTy{g>WoVQpm(V45|Cc9tiPhtMI=@*l? z#bpGK_8;s0*4@zZqTxxod`SagegJoVVQ==+jN74xo?|V(QWR4dC4NA3jgWsviIJQr zx{Gs>X<+miSw?~pUdomUVvHCq940aLyNt0fV*D6;?49rn!cPr9Km2^~^T3a!Tj6Jf zpAvqu{2#H%Ap8bx4=n=CbdBQ-|JHr3t)g{X?Yznvd0Dw;X+beX&u*8QmcN@dnQStQ z*3(m$Qu$N%noN(-z7Dv^JA7@{Ym#WZ-td%uphk>plKd~S{zCf?cRp%&#G=jI)Lhl9 z(p1mzm7cR!heo}Mfc{L&<;K70?bYqmsnAN+xUaHGdAf|Lq@~dQ&*%KDu}C9FLq+3} z>Jrr?Rd3~;a$m_F6XuW44$qcWx~8~Nahl>2`Qfr$*)x(?MQ;l2=ZBb0(MzJ__21|Y z)19aDOubO4MrxF}s!+(6v!`c!WE*6k(@WJjq9UjAt?~#7Mr^t;|77wXF;inIV!Xm{ z%8!?SAoo}{Qo>REl7M|?LDcR@qrljJBR-RTI+dhkewJP&x`I6A# z*><%y4ptX*QnfY+<+nH~IA(HqLwIqxd$>;cp0LWW_K@sglR!ZOvNOHXzK$Oe$B9`G zbv*n+$i(1r&Ts9bt!j+f5^;6gT$VXYJG(ipvv;<4xBJ#Q&v?9Hg~l~GHov_3ZIz?* zPfmqS)=st#!M0Cq=9&i?4>LTh$>y&r<&>y!H%ECz21Z1L&kpeSdSn}7y~u1FpZ=&C zsp<c+59OL;=I|#y7?D#zstFkotWw1VPZAMJj}3Lht1E+_$BpC0x$kW?4cN|=#uc1 zPz}eMHnnCq`SfpRyhwSKkRQJz);=aTsyFOLaF=ryrXN&v+3P1{`DZLhkc{6LJ1^#R z)c&x0A!e=;PR3?q^x6E)&Bir0ytUj+?u+8jiiZ|mD7=?(#Zbc~O4h?z}@WFGH6G1bBbpCTUfoGX?ZxTIbX+ zsGL)DFKA{& zy=z}-VQ4TxT~?u8MoBUhRxYl(U-=6qJbab z!n&QiOe6}#SBP=M+C{$~)P@_LQ4XujIcnRLKT}vIXCQNEQ2j59zs|dxRAjJEcZ>E9 z8tp10`F17XVpzq=y!BZ|MmzNqwSqOe)P5XP|HQ7McC}U?rEZ1Wat*SYGNnRfVJWDF z20Dlvt=4>`TCG?pH(iQ5C||btN?Lt@k5#^jy}>Qbn~H6uzv{PLs0lC?@OP}7J~ya@+-*E7CtM)mY~_Yh@|gSK~!^|hub?G$$348!S~QzV<~ zoRDsosEX>CW4*7NRCC6q8+(V)PQ0i$xp{G;OR}}wH|8Y2xO#8&u+Wj-+Gb~H5b;A@ zM8(OXq|8OS6Xi+1OILlpTy9Rr=D?pQz39H*TLPNal(u<$n3DXQ?)G}=+NzX;P6v(1 z`5)a@_1*=^S$3Y4^m>mWSW~ICkEiYLWJ2g8oOXKp}f=|%%Kl&clbyj=kuL zll(PJ`>JMUD2HmhYSH}l9VsyZkrM+gOi$4IxAZN}zYw7vzS(Ud38fglz6$QO;^~pr z?z=6?`K)fWu-}4*`4>6-K-<&UD^ok9`cB2S*6(N+bHD3AS#18s+_&N7dZhf}zU1np zD&11`;0AjAgq~4F>kB2)+Wk)3l6>9X67HuG9z+cKE#-tROFQH9`>s4|a(ZfH51zECR3ztLwFYJRCMx*Ox4lkf5Y)arZBgiWr>mB-H2;sru*~$t zXFg)~!8BhsUn^n1-#9sPE!oxHZl&>ic1qU+mDdv$zD|F7P-BzlDlx3=Hi%o+MdKIeLD*pj~ z0-}z1-L#x(@T*L(pK0^jpiwQ0h7QU(7s7A( z@3Y^lt50oaarj<`6x-3plW(+(pfzJAG69xq=x~jK@zCp@8OPR+HrP-?* z%5GD;6VTAG$Px}VNm{z-kO3i*o?es6qJBZwo17K4WB7vyQhqJZR&!{-pv2fc$0(Fq zF3E*GiLVir5MhtWe|N(T8bwMQg*=!Rv^c#q4i)lHT%W2ID8ED)rc}6$HeIZ_RA|3k zv1-v;kqjY^i_LfIE!DWM^ckPW``o2|s*Vwc>-iK*%5NC#(wL;^%$JIu$7G9m{j+Lz ze2SOE_lWHh-7hkaPjRRDWc~SCmsQ^?OrbnpD)}b#m3z6Rv0g3JUk5kAtWIycx}>5U zr8voRwpF{)x7yZxDVa!^i^qtyiH;KKq!c4Xt_uSC>9P1 zK$)QTvL#0^^9P=9qE`AoZS){}$<((TK#`Ng>!)3Y`K;uSP&b51qVrzbj|(U^NL3D? zSZ91u-MODV6lG7eTHlZ2(+Xdmsr`6r^6Ico?Po9I(nS(6{eoaWi%z|6)n9}bXj)ig zcgw&-=rxY*FXj5ArU-eEb$77euj58_MR@#L^o+El_?y{q%_hFRI7n$q=7~#-IrD8=+J30Hoxy62 ztBU6+#rm?m@KxRiZHo17QXa=NMQfi{yQY{T<3REKVQ{UNm+ff7`5F?G;xh?732AW| zF=f%M)LsJYq|9RsyR`pSJ*F@R6tyc?hBx?zIrf^K)mjF*ebeNiE2_Cd<)VCqbRSxM z+WT{7E9)GS0&NB57}$%A#60m|#e&7wh~5_20gAz*PP83CRWv+ea{5NMkc3sr^J%({ zgd>%9ho32KBA%cRM+Ft~QdM|0MB}URT?)i0+s5 zCijqx&%&$N3teb21h)LWF}qhvGNU>b>}5TNQi(^ze;-Cl2=*$*??oryx6DbU1O=6%RhIx%1z!iPXP1;VR z@waVI@CZz+tOdVq$R7#&`U^iP!haCM{7?@ibO3>R*>jTiq2CWy3}ctTFtOfjzG)Q0 zj7eme1T<`DCd2#*gL;kph+-U9FpL3?zbR#yr?m{DZ-O2klVj@8VL&0ngd{P{Hlz=0 zXP6t^7`-5WB;+0C176^9QaHAUWt@t`Y^)K({OwMrWEkdmwABLb$$%`}z(1kONoJS^ z^oA>8zbT;gJ7~J(G0X-odKK`z4Fh z4pQwjW0(mj=K{Mrhft#hw9bR)U&|Th4C?v=?YmmTFyHxuKOoxuPE4nOFEY+)fh>bv z!6R(SqX2pW-AedT2Y7#z2CD?md0nVG93xniUky6(sP{Q+ObmQwg5Pg(tue|Rf~+c_ zuW%wGKj>bHVH%PC1Jdu{IIo&vCYd7-^zSq<%%UiUxrXVlL(PyU%B(V{13K^C(i`sRPb{&p4BmF6kZ-_9A zCXR{Bk8&VW9;VYEx0g6hhMW{}9Dw5&MQGCy_zaGf?7$;rD%dvnJnjzbxDM^G+r+-& z-X$Gl(PDN>ZeCGim7@>N*=ntm-_)nj_g%MCXJGUCVv@41&!RWJYh2awd|y~H zdfTR`>RDMbG535nnvwHcoh_};YKqe*MmRxBn4TPB(D!-w+4lL3EfwbyV9$Nwy*k|{ zwXbs?BrJohM^sX+m)!9rQDe;zruYRhWgRgsf_HKEE^!R0IC!TF`_ztlhH z%4eiG4l#YHI|3Fsa2wKV-7~83NR>p^l<==TJ~wmK8JMqK^HbTgtaGvT!8^R89Uf}i zDGbbS@5}8|?)|27d9zdb)!1R)XDxMf`}&jkK3KC6x{90Un7FPXMmTwbODdE2qMfpcg4?SS-Wr z5#z!tahFN%Ej{0rkfut`t)vWT`ZCFNl+Jc>mYziCHfW7uyrtS{`ENOPG(SyZ8Ks}; zanOY1`-!K~bVh7E-Cq}dLXsKrPQ5m=pCp+=uU{()fW+1h_>+|HyCZ|jZr=9N8(^uM%gOBY48VvHI(Sic+)3V*5 za4g}O_D%SgPVR8~5gNd*@}I-5!{>_IY|9S=W5XR+OGTobeEf6m7)aK-Xsd?@u(PxJ zV!W3p`m2^pyz(?u$nO{bt^JsgLbVp~<&mafIzf?P_E(&UmUU&AvGvn)w?_jLTlSP~ z$U^k(8Y#UHlC+O)(Y^rO7AXwz3^Kwfxp8LZtYD1ByZ)$eL0|WoxH8aHR=_8isCPW#T08% zE+BiE#R-%fR<^~z)fD|){l(O6e(&l3TXNKNJ|XFdb{9lstK3GrA_^^>tKk8^R``cm zfd91m-6^U*=tqt2h-^jmik{^%-lD+nEIsQe;Lq5qr;&lc!p~c!c^avhJv6it-Gp+! zo({6#pj=I^oTIxo`rX__m}a=q!+PXKP96dALfT@flHh z&{Ya}BG-xfW0Fk_R-><1E56|&hFI!w)295cScFNI6U5q4Zc@0Z3W+n{W(Qc`g(nr2 zTZQ}ydJ9|Hio22!132YN^`hRj(KYJXsJ9~bi0vz&-pPt_;lu2~f9pZsVYIuzL`8fw z=>6e$NtWEq7f+a{_Z0r{N1l=E&%nSjwbN4HAnq_WJ}MfGa=Qa86`Y{wHRLZ3c{R$^qV9TJeLv=)8* zmlS>?#5?SB2=$jXJW4+wgjqYCZ$!0GZ(v}$QZ3}| znq_ABJ7SZhQXl`np!boD!?Se45SQuP<}`rbOP9@(_fY#VxykQi9)%Nc7IEd`JW*P zG5S2nQ7SLg;St(VR&z1-j0fbZZp`sSxhgwNiC&cJOR_eoLpiJBw;tMv&Gyu;jt@k+ z$yH{VEisUiammQ0}?Ar1S>p`BZYK$tciE;NA230rhTZ zx}JL-0(>mn$bdYPXkQ>+2ztq}d(>6o4&^9fF9cJexIy&hhMlD|( zWP^UDu3*&uyilXO(J&s0`SRcuPj%FR*VlB^yp2%Jumkr}+1E^gE3k&?l35)WQ^e zY~wu(9B<1ozey%DFek>uB1}vZ?cqkosWw24Az2SCf?&UM%M-(n+mqN>UIgTs2+vM& zGVV`}<|>oO!#F8Ns}k*Bmb1$C7qtIZfyZRR_sAMUvzVH?K z6XiIL=F)3nkFrq<49|c+PR)yiX4uz*j-6Fo!JnFh9er}=klF8|S5f}Ehy*n1m%CKu$!@(+y zeR|Ehl3FqLGf|!WpxQ$7PeZ0o&TU&ccm)ftJ01TglKxlR55j9ZD!UnrNBw$OM2^!=c6WcW+Sdq=x$ z%`510lBgS%qn<^Q*gnu59&=4I4R-5Nbj(#1{S2?(J$+Tc|C}6`A^yMK1-$o|Vit}5 zbY&G&ln(#(ZM+wjXotAEbxrYwB=kE&Jo?V{U@T|#M79d;-B%FeFckbZHD)H{BTiV= z=~dE<>nwZ2+Oq*<_A(ZnG&F0d7bDG}e0(Zb%Ng<+TM-s^9CRbve=OC^M_ebFD6${r z?EOZ|eGNU@(H9-dBE$WA>IkFGpiUy$3oc6s&rf57Q|g~h0`L75kHJ7dz(Bo7K7n5^2>#3>1#z-TY>MMs^t;z`%z_U)0#8crCcH*Ha@Etb{LugZS(i|_ zCK>%{+m@OWs87nGQPB$h#VXgen!mw*kAy{9SfayfNKN#Zi}uFmFAu#9e*H?0#=r7K z|64z!$O^bL*=4kr9^w!Wk4-v%VSgsX-|Rg6WJ1y|mn>rMIb8wuwwUiK_Kh0tj=7|& zh^!gFsV$Mi9Tp=0RI<6pR`|)z!h?|$&@R17@r;NFw6E?`ffM-qz42VhevH4oI#)ME zL7odE*E`R(!2C|=1dElB=a!@_x3`ezoIIn@OW^ODlKlx4Xy>uYzcVZ$&o?c5s$z=K z9fz#3y@>kKy_)sEM1MOx+}i37#9PIwlAhYAzc^ne?1D4KB_+q=hx?)a#*rl=*|{59HfR>U_!|HoY7q|krqlzx|V z3iK^&{qi5ee|~C|DA|~ac&z1SSvvaB&Q7D|@1b|`7;AS0$jvD^&wVZQ5Rh@euNd{8 zD%u#u1D|%KZxY3zkFx4t^0q-AX)UdlT8J0!y8NbT3pvVq*ytR>K0oA@`7ZFeFkz9i z9r*OiX!muq#{6<_ZP*Iv-==0;?g_~2R@?fTk>oFF2~$;oj3Py*h5fLXsL1@ z;;<&|ifQ2QeCy>ZOCG~4@2&23>VzM0b>jBIKRW6s6`x0Y=d}1%>mvV2+h29BKxbWh zQA0u%^w&|4hyz=!DmHTw2e$pjZ2`X)Ek72Jep9VM zGv65dJ>5In^qVm*%$en927g&l&=;c*e>qa~V_sJ>`mg$FTykf5UmLG#bP?+5uxJVg zzkywgTYd)p)1jXB_jMtckRY2t_)kH+g!^n`=sPpmhw#}_kQ1ij2zxI0F5(RA>P<~v zPIVju!Lh%csOty#moIn}qc@OuJ``50YK@Mnr& z9pc2yaM&(>A1gc01Tp}>=YrrfJ{Z3OI|D*6AC>gaYbsH8H*EVm@Vx=$O;COp_|Sk{ z2h)G8hS(ToD!mblKu(I_2M^CNU*R|>3v=}FQNcA|!|&&Tt~lu209JUw4&H%x5!it> ze1DbV`?6EafC)A%EpojVWbzR9oP{=wf-FbFCk1r>oBa$?w6y{rfvRs+VXTfeAICNQ>;Dty zkC8VPc~4An4R|$yo%w=ZKqJFwp}j{H23|uR-M`(zFcaZlk@~<)*!K?9Jqg8DbYTn= z0vUm)x*<4*uVo@H4?Z{^=d-}y7ws%Pa@|Fg>(5XBW75wuu&JTIv7z8&C^`1yEOh#= zUApabwE|HU-Tv+s?cLttk1E*BmU}xVJ}M99z;1zUOhZBbJg9`-OnVHw^*avNUj+kX zJJ=W5x1oD>%ftfq+@o+(=CtT+53UY-{-E{OdfB2`F&S_;vZ;0Fbh)+lS-ny_$2ZDMgPf=K=Jq&sm9=tf zCl(xW0|*b9-}hxNr@gsaF?$z`YidzYT6<`#Ym3PvH48~NbK9=^AGy`x&%LiXT!X-} zy7smot{+?eMXp=iUGKll2+jUmW1o1BZKp|#TV_P4y(L$@e;zr0S7ukVF2N}Lg2!%) zby|V)gY(-uDJN%_Wm5T58JMVa)xvsNT4qP0d>>HF65$!hPo3EY|G<1i#-VwZ3kgm>cHrYiVX& ztTjr-Qn_RR4;8*avZS=O++LU#07Bvr%oUS0>PLuqGX`2}5@fF>v4!lIC88tfzE_G& zL85aDQ=`{^E53l9_lYFHtq?p&icwCpwWVl%ITFe=-B9dTlFdYluBQ7{ty5t3xS1y6 zPxFT{(KJ0rv%?Q`Ghdf)9OIqP0k4>AzMNqCU{H~e-%30+8 z?bHMg-<6s~k|6i{2Hk>CI44uY{HuelEbkd|bD-fjaq_z4aU!++@Bnpd0)TmON4){o zmEUKMi9}~=Q6fGO{7nv9rlJo1VsmBP>Hyvon^tBkg&|1jn%~e1C~0LZI#N!7pOF-(}2iTG^L)ABFXC_%kFg-T&}0Kk(wc2$bz zzHjI2g8lBNj4=6T`iID3Bu@=`BS&uA=w$?(q`<4TmX7hAkNj^MlG7sr$e!BQIHOVS zci%=CVtLcjZWt=d0i1bGUa_#Kaka=Au#9srNK4=?PaxVoStd}Hu z9c=#W?JnPda%y>BI9@}!&9#LI@4)};mRAKMVbU|T_KWO6x!a!K$mXJ6r@~jRU+X|V zji%{G&@l?yIjS@{=7|sVYIs!C6ZJd!j#VHxX%44#n$H0;d{(9sd<-3vTkBeG7wS*Y zpUfG7%cr<6lOk^xO-~xBKN%j~$W!nhir{T)lUtqyT(U>UN#q5}jR;awyaYaj^IGlH zfQE-Ew}(riy}VX;t{(LMmHA}RaMbG)yg_LZ>J=%FcOo}YMpgGjH$v}wTeEpTqTXkk zt2pC8?|0{o5-U+YJWf()I`FuqV5jRIv}Jxu;9b1ApPk21d`( z6KpKE4qlCRTyAqJi^#-eiOMb}2IV5`*N9&Ly_DF^+9_y2?2uu-~ed=EAY?zuN69lq&d{nIL#lkYYzHWrqMM>A_8=m#%}8S}(y{$!o+J7ed$Gt`l@jP>L|(n^PBlz|)_0{$f_<--i>H%s@mAKNvr+C* z_z6YwFs^YviFS`l-DbYfULRxiB0bB@QPLs@y0n(Uk&;QGD zGyMB@-8U&Vu%A`Z#q^ccdo~lqWKm8dDpqwr$2DxakWUDUrk?H-BUMfq2OS7n!j-?Wrt z1~u@_HId*n(3gUUbNPx4Ecw6L;b>`kT=cIr3Kjt?xPKyijBZe zMN`yJ*z@g%TbUVX=dsocykF8#Z+CJ_RxRR5U9Q+e&})e?&`v~qi+JUpm!RiwYwyN= zkL#{>bXOM@Vn8FmpF@K7SALrmhN9lSoLM%1LC?1;N5Z%&m-GVqe&eX2`6uk^`{HJ=Xj9y5X}XZR6#k^wv7-8C$mM0n zkQ(D+;G@Pw(feTc^WavsQrN9to|@eP;KY#fU;LzS-R0)i+%(AlYl&BQxe5bI@0BuN ziUP+nBQ4fKj;m@#qc=g`QyO_GHHhn{$!w*sJKwiIEI9^tQ<^MiI76OcoJ&M}FB>t8 zWTQhyQV{xKQFAKC876Az zEWF(vFzM2&S#~@hH&wfK*87%X5Z)cpIt_NXs!z0McP9q%7WUGeq`jH%Z1%to#?_8Z zbOeqxwq=#fgTuRbcQ=lz0N$tsiHAUb_x-Z?+xs% zP0EzRMe`3hzm*|3t?bgiH}wSGiIt7=548ZEw=6G^kH^3lkIF&~jE!}+S|Ul}jdhA*;9H3aU*?R2_>y=uNmSe^?WnJ)h$ zB{&3eO6}G>tpq$|&^UufCSwnGTy4~-hTY;bLFD1uoPfE;%`lX&Nc4|wEt@Nc6=EVKvC{iXJ51_?GFAzQ`z|GIb=zzT|IPm?w9Ofl z%Ow#B~B^wydw%0>2t+rmc7YIC|0HfhxI~yEJgAQ7ihT=tMi`Qs8<(?##eo z@H2_~Q_MWXEm1WSb5vt-bKAa5eIM+7pTi3^^4MIdPqW^6^edO6t8Es-uO!m^4P_F8WZ6KIn>P0IRJT1 zb%@j=H(O*K)YQXp-FP2q{V%|8P>h=`xyfLhuI#lH@?4ph8sg%J$=-_KwB4bw$Jl2s zXN``=&6N5di}s;Cmz%yUv&Z;y4<4V~0sKr1lXuWX z`o@p|8HG-!fyOFn(w$s|RD!O@K3yfqVYB}W!{MmM zDR#HLp+5AHY2o_{{uNM|8JUK9R+Ju3m;`@HtamF?M|;1rj#s@Sjkv_oMBN+mjPu`S zD2eM&#JV_`;`(#xr@gZ+F-e|xIb;F!`hDf2j6(R~rpko$sqpI;MWzYz!LXmwB}sFG zK)a*51;LiPEfee|h+c9q&@YR>&=`Vo~~A(9@_< z$$OrFaY_BgqRD9A=Z!~7jw0UTb&53qR)g`R$6SNqs(2{P_nu)U_7fs5TW3HYUMYDV zV$f@I?%Lqf(05;PWXvzHmx~R#yyftV6@?LTC&1tF4Dk?c5BO1@LC6r4ODuJc-vPP0 z*DB@Afn4hwqIhG7Ts!-knyP^V@w083;Gg@l(}Ito-MQszX}^bKlDoP)_jmC5bKTE{ zdT8It#;YYGfoG2zgG=MVubi!>%8!tznwzcG7&*+31+^QWggo1$Lv0^}-@7Ryp0{D2 zCAsSZtzh306&`6fV4nMyp)3eCHPD;Wb_2}39cdYWu~wxCzSsI z<=294FR*PB&b?9JR^Wx8tSZW0fNWO)o05p%LI--#M~(|@Ef%;1TN0H0Z}$1nbsZPD z5QniWXlddXt^t{e!1k*!j`zlcROl!A)4C*zdO9#>g5CI`E#siW;cAG*IB0JjcnJc2 z54whjYkq(|4+A|NL&R6$^9AgR%vp@B$2cPdW5+?)%+ka>Q#bmk6yO|mKN>Qe2)PD; zmNR(U37NUbBbM$({{wxSiNpUOpRgg|B_Fag!c9eB(O4-wjEE-mZ$tm%kKQCmYPedH zm_H_*TuU~$-ZkATS~q90XHZg_P25f|a?gX^#x!Tu9LzimRj`|VTX@UYbp}P5!~n7F z={?$Wro*siGlWgHlGx;+cBhB>^Uw&g*)$EWO3oY;a7LFs-_mB+s$DmY$0SJ*b7U0p zyv&uZsFuYgcOWiwqTxFJ1$IXa#8lp(YlmPO>dM8ly24HDHz<+w6k#%&cft+}xw z+adJ1eLwXk^?0?8<=IBxhav8d85iX0Jk{uoinH`s2(`DoFgr0~r1>h9n^NRS$%oBr z8>%YgawDQLU2=4#6bQ}!+rI82ZADG*s?AfQy|Z;@%J$DA#}cUqF`IoKIGi_9P(LPj z8tNIirI)qkl!WfE$y1mrIad_kF=*S>I=^9UnN3b<^d295a|z{H5(5h;CnrYqxL&sA z8r$jSsb7&N6S)01qgLt0AtiS*I1wct6U+~2o|fM_fWnNNgv1R#PaIBLC!60fY}J$3 zWp4rqXpD3|LglJ0b&pamm6%EQ5=vx93WHQ1OX=+solGyeFZzh?UBo3IJs74pdDjO( zBzA+I=Zjd<{T{I>N=Hp&G^L|2x`GsAmW%A7`|TnXbblm1m&*JR|9!Yp#*(I=;B2D% z9z8DH7r~B5GCeouB+`AP*l4$#+!Oeh=?St~?1XaOtzcalg`WRPi4V$h? zo&-(FQnZ)Bq}si*m*GbM9=^@yMY9qxiEQvvLerNi5U1!e_?wYz~WhaAb2et z{8^P#`cJ_iRK)x%LBD{`ONXP9}p%Jb4c8BfoLD3{_PalBm*_2JbiU6A$ zZ51qAhR!oIUS%XS|0MgNn-u&iw3(OlE)<PsdNmoIexRe}pX?j>ky zp91~w3e{ao0jlRJcSdAD?t=FJTl*&6-JD{Oo$VSX;e&d&#y-`$f_leiS=h}*y^?tW zuAbQIYov-MA-}`hRFS;FX_XaW*Mjt8wO_=ONxxlf4@#_H%4;>aBC|oy&-19vb+lJ9 zE5m9tI*A2Umm;2l|NQ31>9z<4PN_z52&C?E4wi@kU9o~icDI3mH!77Qt^nr*?bFI> z@@uh2(5m@6=QAX`c*V()Wx-n0lH5e- zrd-osCWBzJNNLnJw&g~l zIP`heV2sE^lp7K@L)jMPcm+!xkD=V*s_!D*P%fdRx-c6JIj_7JYw{pCv$qlVLcO_h zv$dZCNp=@Ty2YXc+);Brp~(aGsu;wXfO3+q^Q6dR`LUFrP4_`QB~=mOKCsu4HkFbf z1PckW(`h@#+b)psL^8y*!WC+_lAi0Nl)-0q z`g7x1^0+x$_M_iZV@zr`8f9w0uw^vuIkBKK&waAw67cyTd6fPx=tZk^j&~dM@}O=* z;wcOk+T^%&Qg*EQYidXKVWLXpEyUHi>nx|BT};LK;3%}qMMa)YmT$4OlzfbOtrHXs z4{LO)G+vY)`fPAYvx_1)&8A|;1%+UZs% z7g4UNyf5Ge%B3}L&rOA0{2=2>C&5ZAu8B+pU5}`{DvGe*i3RKIND!w|yC&8dQO`}8 z_4GEjqLaL24(M5@-ZH%cd;GQHTF61*w{;7zUYS7)Ke1z(!#Jzwno2is2rd166 z>@7a(^e6n$rtWn7PoS$RyN15v{>Ep7bSc_XpLxnu6?QSFd|FT^456c;Ik2?ylI=qH`FQ{#b`vJH%MIwO8ajOMa^aqsBj<~HHj`nQJ zonjRRIXPA>51R(O>Q!!Gzy{OqGMzrjtPl~PN!~Quk-5W?JYi^ErscOBICWoPF#~gA z?&x0SbYZ{6gHa;#xti5wHXY?$N^`>|K<*<|lg2bq64PWW%>S!9(vwg3;j)NRG*gTJ1{ zT}B;{qY>BN`;-akm;Q_lfxp~pT%LIY@-~$Gib3-j3D5IVqG-2ds+7JsaODnH%o_#rxI07?)Py=(y_Klbn z>fauHQ*|2jvm|e|^)uMnmg=3cH(-y`IC`|)YlD2zizxrfZ@Qur^plsk$+!S=|D*h7 zs4D@y{~_lj8fk>du9`V9sgSp2TL*7t3MOx4#Y8rvSxk!^A|=O_psQ40lw?La*8d?n{%^g^zcOBU5#(&03pHI*E;2@!*22#hZL8j0)N}p>oiKqo4@;<+RZWX<26F> z3jB3pbgiud`nhdcBL3>Y$qn2+F{LoHC*|d-y}^jb8fFyB!S21nH`wno0`7Xf(`(0d zCQ)y#E_yBJQlodg!|Yc+gXj6`tsd`HV{2)LWo)%y^Zog*g1egd;Z-{xsg%M9oYZ z{DwU?DhA(|k{`K}Nqp6;c+X($UlyB0&T~TC95l@;19Iq&I%MYze-h1e4$(%sc)3c- z^B}}8wfcE4;&5H#cU;eO#8K_mb*+%6e8?5MXK0U}*E`)K=#OQi%xo4yE~yz0y@M>l zZ{djuX*a~DrLz-7(ckOU?=O^q-`4~Vvn_=@!yTWf>%otg2ZR_s1|IH>&vleT{fo04 z{m2_%?uCoP#UZCTmEjq?!Vz!ay{<3O!S9H$v-O1j{j;M2j@kl8OT^+2BECIa^*X}? z<>YET@@(RPQ_bS#+#JluSVyYzAkQZbTIwTYfhz%GhCIk4IPO2*>kGdt;J3A4 zPWVi;`)TF$)S58p)w)aV0m>gRw@{D;j-H2K& z*D<9*s}kd^pl_|`f?j!`rAZ(<4z&cH(-oXw%+?Fcf_=X!&WJGqozU`yDT`sBvm0u; ztDui77B|!$ATDvTo~!h?B*s6!%k&hXk2f(Ic6G3q?u>)pWCAX)ARz2K+NWJ5p7~b< zp4g9B?vexkHpkhy?1diN3ne4mp)Z9BqjX2eabs;~z7BAGbE6_}aR%(TRlP=zhY3`x zXNsS}E)yMQsfI(YMj@w-BVgzE68AbwLa$m`^#KmxcYNWfs7%PCw4x}@9r7G*uB-Sv zt9%`Ns(PvGyoLUUgl#k@aY$=|l#>_q?~?JY*B54JXVK8e+u&zyUO+??+AW?v zE5sV-n#BvFJ8`aG*-mdhDc0#0n1D~UMm^p|$RnV$v1xNP`t{^cuUP1{G_}p!5&elr zE;r;p+CPE&G*;3VZy=N(O}!h6c2!5^XvU)dX=$qD6(T;fpQ7#szLvN;XdT4rE%76OFE=ZhX(5xhJ3CzlS--F9OLb;jHQxh=sDR`LZjTi)RUNm%Y#~=LRC%A?@M7bU|;0iq~ z2S0h>qZmGXI|SFj7wUnlg0kZ`y`!56P;!OIa74kDht-j)yWQCN?DWg?zpT)i*{IT(W}_S-ff#-)Il0wb^2 znM084fxlN{F3zaH^RSg!2>DHLyjsj>5@M&_n{`6a2RV+_BCbVXtlKd+w=k~@CCD?t z7tdqgVPO0r`l5s_1iu$z@JzgK!Z^maMcx5zcC~^Z;QX)m=k?bu7~|i5lHjn0=9i>Q zhS_zGj>CQ%+^gza!QA3wV#s6fPHpcQ>EDkmx|6jv^c;qzdpxSzSWXAt?*5UR?)~s# z{hF869?07d@Cc9XUhYnB*={i+yzc!CwKhxRf5Nt*^?iQn0|JuY@p3{hWlq6u9W69UGieE1fe8xf-yyZo?^DGfwqHyhw5y0H{;t>I z#N}S4cB2*dVBR+$6;0!+^GmnpFON@j|IBoMYp-9G+3t4D@u`ionU^w1Rv=j{_VLwG zIA#uuUfw?5a+BmVtrG9qd;KUDsj`vktgI&~7NOgmel+hV-Dl9k0>5W&bq)`$vQ4iW zjaR-e^EK$<51P7xU3yg~xd(mY{DXC!$z18TZ?v!?pv2R$osC_ErJ30Y<4Z;}jSjrg z0Y^_~gg`6`yzWl_N&I>NMqH{wDW1u}YLPhRz7)&?4-L%_pWSGZ_#EK7Q>-7vg!`+p z2-9!H{bmv`u^;`cdx^)d(-v|6hjfqlY)XT~=lemU-~#ygDqStU-@(E2@z~FV`%XcI z?7tU}_ac76TP}uvAU?m(-xi;@ITD5NqPTT#eMz9W|BU2;`22PH06EXlb=5!xy`7>s& zZa`dsg*BYBd~FKzMiQ#FZ|+n~*%b?re%fT-O+G3Fj9X7lsLXAbr*oVwUdwZi+TNEQ$WoNw=)PhA= zU3;jPBZBqzrt$qgz<8HR{mEFA`!I00aeJKiM%MX23tP0;*f(3a15V$+ck@<&xVr#OUuY{(wv{5zu0$&Ihhs-0 zns0a5La^R($CFN(2)|7;MTr7wvE8ImT)U`s=Ay_^iP^HB|i3x!MIJ(`3E)^)eZ;yh8Xg z?xMaMoO z>S2n3q)5HR^V+#P(`1ytmvq$R1je70x5VQ|gtCXlfzfFgS3k2yWIm1?VSX}Tzu?R! z&x^oKWW|SFrLbR@%Jn_-VV9-WUIg9X*7%*~kK#E$EwPOa{K~Gt-Df|>QB)QjIso%O z&uX8Tyj|o!l!1$IajC90DH!i*^;4e#@YhpCy(7KaAzrJW#99Gh@y;b|I?Ba&`P$M= zf;+bcuJa!Ue<`e3pYj;Ta~m4-y}E()TYf42$iklJg^H6Hw|Ne6{uS+omz;}o#W)7k z?CSjy`e~^gCnn)nL~l{tMLDCKbeDw~Z)EBIml#C1_7IbiwMHUxa%4%3r?iM9r@l|Ta;_qZaL! zs^cTiJAp9U-6BaSXOi$pnTYWm&%EiBjB#6Qd?UWXeAiXJNc|BwZ!#(o+Z`YBp5y?^ zyJXbcSHq597o7FqgE)J#{B+_CH`r5oUA!ZEPMo)rM|*>El&&1&gu47#!c*Y&VRi59 z;fT|Rji-t2br0?<5&BuzGtssJ{VW-%^1BCr%`8cbJ>m>eO`XJYecTr_!4HO~6q{cH z-rmkmbe@iWE-ii$@iqKri1js+jpKV_W2K95US;+vmjkVFEDQaz%Ma){1^C`+^<4Z+ zpkwDF#=^xfeD#S+xQKA3N%(>mA-R7kvJT@OVeUh-BukSBluPPA&-(yy zbEo{hq)HEv|GMvTCnux7=3B&1teC_uSDXbdJagJO8)05~kk~th?~F2lz>#j%VSoiz*kT3ZLj(AgvH_5gFqVf306f_XM;Tu2~tg75;J_V8Qfq&Q2fF5FA_JJok=!>eLzQ zL~+hvQNs|AztD8=xeSu&P}RcRX~37f)}i1r;-gKYf7!)6=Cd@F2@ zT{HZkDkaP%5cL=L`N2OI@!ce=G-@>bIlO;e=fMG}=X=aD74_<(EFI<|-lX=*4z@>p zIIS-0Yz!Q3FIQ&XNx+@4l`Z{M@Sl%rCum0WLL$s9P}vK(-KdH*S_;2787j9O3A|UQ zP7gkdcy^%ohoKeD&=Cb@slr!QtR9q=^$Q%Sjm<&1@X4IdIt0mM@cgsecji0M-`!p2 zx&)vfd%JCM&VzrIq?EXaVBQ2BAgnhFBdr`w@jg9ymfKjY=XQDT$L;hM?$Gy7pM`bx z?aHRyNnM5HwqL<$^zR71PAPZ*lK!zH+>AgVG6Ppz$6!8^;}1D*!hD3Jz2mr^Y}eflFuf9)kgU!b;F5uhRdrNT4T2Fg zIHG#A2JtTPD^(xVTOPW~PDlu@>>T8N4C8E@`B#`f#cYE+z`jB0e*V9~PfOD02MRwy^;X7*;S)Rr zT$zPX%){^j@tww@pI1s9daL7s!>V3+Log3kwdd7KVDHqyvg*QOBr+2!9ECfp*CkoG z{fc?)o>mj+1wZeaJ2BQ1_zqMzbhQaXf>Oh0jKliTP+d2`6?O@5vo~vxejV_8YIzKP z_iHrY{u=z(rrUF`KA5lH`*?*fhyTUqc_*a$B5_{&dGF5>!Be|^5R~Eu{u_JAMc~^k z>!Yw-;K`+^sp~4(-+7Q(AK?@A;bkG2-zNzdHNuLTb6{`3leRV(|6N}{^D@kBpsof$R+W<_5`CwjAR!E@#Q&|Vh;c=98Mqj*8c0OW) z@JanSf75>z@X{M|wja3r3~g@$-c#`W06fpI{W!F@3hiu*0GCHwb~w)o>`TEIB2j){ z-&b`$gC9*syTaG{3txY94bQ9k0ke6qKWujBwe|xM8`t6dMd+vS$&=2}@D1Sg7G9sk z+>|E2YS*w&fA?Pa35%_W6XOvx&Y`X7&d|u{cMY&v+K71G3z`EqdcCgj$!mTHVo)J) znSu*X33!b)YAps+_A?4dxT$K^uiu* z?D4_oi@ko>>yNzw*c*twLD+(EBm_r7aU={!!f_-5TO^J~;b=!3jmFU!9F4^mhZ6B9 zk$@73D3OFM8KpX*RA-b*L8&e%)fHPel{E9Yp|7|b{T39Ld{Cl zsz$9E)Tl#^29$0>=^-dN6eWkF8lpe=vxd~h?HwiVSpvE+=5#LnR z#Jz)B!f#{F<%V(ZawE6}+(>RAH;Vg+8^bL{tre)X3bodv)+ea75w*6U);84o9JO|# z)|cFTZa?=v_Z4a$Ld~P7d6HYso#H;`&TwnEU+}w^7r71i2ChxqHPpU^+V{8}+#~J_ z?g_V>d%^AHcyf?akZ(9sa)h%Y$2fa(l50u-{0%0FWEg6-kS^qH(t}JOX=Dm&&Lr97Ju-lNM2gABsIh_6l5Hrx zhm0WK0Ocou^3!Anxj^QUKgj#!E?G<-1L+h$kZeRZ5i7c#IMCh1g&rV2^e_pbCxGK0 zNisc0Qt2g=FHgQTCXbGE?4xIrAPYoDX5$`FJ*fPi1v{4jac8v-x}tTgMM$U-FaKY5rYy zmtV$|l8ww+vWIn)9A&*FXW1ahRW?TQh%Jyv`K=Ng{-nf>za(#62`r~C`)m%O9wJ3d)%G=kP4Y&Wx?7saJ^O`o^7Ps3RwWw)3%JP2OM62NrN^8E| zMe7;u1pgP-dP}V4g0DMaHTHsk2V>=ofj6hXi!-oF=GLCE^ za}cMOkuzj7xk2`m7vy`yTM@>|N&1R1bJR>0()hbg%4f=_T3wQeM7U>Lx!TO_5)gmdKw;$IESHE9L&OujDDRtMYuALeVJm zR!o(3S1glND87;{P+XH8R+z}2Dgxzx%HHyPWuttma-RGP_EvOtvd8np{%4n3@_D zn)8Bw|HvYWZ`FWz#`wo z&T^_rspU?St(G@TWL9pbrB?Z-Us=sD^|U^0I>DNm{cas)*40L9w$f&qnZow8S-Gv9 z`A@c4=H2XOns2i^V(w+Huz1hDlZCR)NQ>#rm z+Aht?sQnzP1?|sR`E+oy-qE4Nx`*Rx>obmztcR(RY#f}X+U#&TWs~RZWc$>))^?4{ z9^3w|7IwyN1$Ljit+%Umm)QGy^s~S2vEF`-C*P*hYharg?;UN7eQevF^{H*U*7s!F zsea)ORsQcf^bC07;1{TA*FNZ2JCoq(_RoUXw|^Gm(&1U?yB(f|**cm;%yDcVX{+*! zTBPdP(buUedWX}rm`vv{V(&QLjGN)oAtBmzK;j>+3zJs3-ApcXkLw)ZF)c;nd9%xT z&$MpedVSITOK<$+$X+{VO z5~+lvJddkH$m?MJ*KNXU!}oUB2R-%LgXaiGISDj`F_?suW1I{s!UU?p2y6mr6C7oT zG7=n}J-na?d=R1hpaBBF zLV^&hLcsaM5V0b_^P|A;qY=Ae!Rg}>!4kpalfg+kBbIdmZ|?@a-UD2{C%8#EVp}ip zlRn_&S>PzyU@N)cDS2Ql`C#t@!CKVd;YDCB8gTGZaPV@l^$PIsD)4VDB4RC=Og;EZ zBiPJfaF}K=nqlBEBg9DA0@ghm+~#d=EO_^LaGHtW-9r4F3f?^(yn7~i_bl-4IpE#% zz`Nf=WL*H>{Q;QIhuk7C@5Nv{OSxr;wJQ*DKL+Pn4JNb}yk|Yw`v!2IjflaU!GE^m zSMRrh8SMaz-wAfK3p{)eV)I^ZAK1_V#ObfNueoo)=MQs7xNpJfk8#Jj6X5mVfj9jC zcJw2-(`hiIv)s>!<-c&h;xfwx@cc{MWkmNY-0$2~?ho*(>xl9roqM zL{C`1EmkID5j`eAi33=uSF7Ul##+@5Jk=C!nE{pUff7L@3J3@RLfn8LJ1|#wQ85ab z2m@w3MBON$BLetTT$a6XaV~3d{5CjC2+%C($r@2lCgYrLXkYLvJDej7IPU|z)`CON0P^ZYwb>bG z_Q324p4SHBjDRO(0nzn9=1d^$6JYEeV6*`k?+YJ^#Ms-4KI(u`N5N;Zf&E5ccowj@ z0hl@lRDB9m&IYQR;1xOWs*aeEcA{6e$6Q3i%W~l@gMs=vK<`GN@Ho(P8+bYaJZ=J> z=fWR`z@PfTA7e0I9WXbJn5S5HXCAz)8QwAvsNW3qo&*X7q+JA3_XFuG;3*T~X%+C) zo|xAF*iz8kmGHeuA~V?vynhee3fR01Y#)Sgd<@^34BxDRZ>Ph%tKp?n;BBkmHD3Y! zzlkWm0x$R)UbGrsI2B&31>>0pe_R8<`Ud{-yNL6v@RLLEv$di^`4HZ?6JB)&-XVCv zHF(ewc;I^Y;J5Il>!MHGfKMHTSKSo7?T-5m}6nK2+-&REF_8< zgj(2iCakpq^M4#Oc?bBk1XhB93L(2t2aCP~8-0q|K7kp#3p7~)KOu;KLgt|!R-OgB zZG;6*VlM9izt%uiC~zZWB^qGk*|63o%=mYhyZgYM4GZjG1^`WO0VfNAgfC$8bFlJr z5zzuR1+)n`nvR$*U_wBF&i*RV|DE9N1+cQS=>IOTry5vT1bY|4cCMoTyTM9Du<%Df z$FD%ZVpy{nmT?#T-vc(#z>5(lS{1A~diQ zNgxGKr_NBimtfW9uuvIh+gtR1AIxhxY_bCOyo_v)3-TyxF!)7e6m)JfGA6p-Rj^7WX4oII zWe!hH!%RF;mgkB(fp&!OVNpyj_P>?@h&o!`3HRd@G z9%BiQ$-sP1gRKPhFDQ|&q!fx{8QF(y5T#B~yahCoI#UL{v7am_<4GCmM!bm;xen{D zgQaTVbHVT*YxqxZ#MBwE+_$j0G4VkjsT?YP1vx-26P~)zBq-(XVg)|w8MM8fg z2cgs_Le=*`R=|YZgv~#J_twD^L&fY$7<{fC{<;CaehWD=KjafCp!h$ACb~kT)D4QK z2)gGZx|{w=_dw^2p~bW_bi0iHPQE6q$YfGUdLlz%Ms6b>d9WxNM)W#4Le`P#qz0LhU}8n?BgSk& zych!C?z7wjd*}wraW_DNleXJ z*djKH6|!XJ$|U%u@`H3Gok$1K9@H24kelQv@`f`>9qB_ti4A#($n+Va%uqy(7KO$n;BCnWskDMlq94<*=oKnuZmbh4Vx!qdY&ZLr z?O}`A7*@0%#puIqgBZ1tft@4t5nWBSPIjyx7iZ*B|8tD zyO%9xV_6C7!aSLR{Xq}WHFPSirs*`0TF|@XB-sQF-UMA939bGZQSoy`xVI3kgpBb{ zM8PLqTVzplkd>MXmHr*M2ZbJlJdu`8qidnUuTdrQVqIA&l=d>Vk6mP!*nYO0jb~-7 z8}nvH>^eO{*U{;;hW4Vt)C$`Edno^TWC(I*9g#(Qidgyu;^HpE%xB2IMU#G{8F}5U z5~4x}JWE?36L{Vcl6do4{7E1MD*UjU8kw*+eM%9?X}Su$%NK@>(-# z9qogxfen2~P9Z1!9vMpVNDOIDo+I+U;5r~H*B?2#`N+5ZNFEVe8iw3LJ$;96pvUMf zYRdeOE2v{K9eiDY6d@G>e8)JNhU2iEJkeke$va zamWhBBda$88M__G-~C1Gkz?yi8mb*Vz%aj!kDZtQQMrR_s1>aiNnU`DaHapHfWwVf($ztKmj{QlI zIiw5daGFo!s3VQ11Lz3)KHWi2BMWKIB3NJ6$Y!&R>;${R?y{3?6Pv@DST>7fZP;Ua z2Kmbm=v#Ck9Z46`o%AeyLff(^mcs_Kxok80j@?71=XsY=o&roxuYcNL{W1bG(<>hbtUxAUT6(S19-PYzaY@h-di|o; zEqcA8*C~2^qSqyQJ)+kkAPP8>PQNppLjgvl)9>c!gDKWhYn;mx>yRfYsX> zXXD?{Kf*P%B&@`)Xj%Fn`ll8=sSo&37}$^<=G0L6)PpHyfgweJ2ekofG}Jnc;7Hlv zMp0ls4wwT&RWlf@C>Lxf8XTuR=EYFAG=u--f%n9M#W=p9ONN2lIz}}g7VYze?z`+$nOpLydi%#nnO@^3@FZOE?;`LrQ_Hss5O{8&(Uuk&F6 ze{$Gf(Eki}u>gvAAWx_NC9s4QaN`84N#O&p^uG)?umRp&V6Px>kvH{!0x-}4x<$BJ z+!3t0E6%FV0wjUmWr`N>ADDO5*s~Ej+KwtH7L!Zy+j9JLSNHrK! zBSxW*C;I$G3g)FRMqh%lHerPNIHS*Z2-gL(F(;*%g~8(ZRTyIeEKFbOpB9WR36|yG z&_BDOdq$(*onTk#f9M~MoQLjN0{x?br96PCztcYn&^we|g!Wkm4OEJ`_5$YqN&mD! z>m)(*@Z>V|&kE?Ea?Gv|F!^8UpWV?LH9_>6=1VE9xN zBFVpLj2loA>!B!Wp)5jhrS}1p##ShfX82Sz;?2LQg8ySTsO%a6d3w}C4U180sU9mosLknjElp1T8l zcLaEEJg!l{;;T=7w*Fl_@WU1&Efk({*wWpPFM?h#C%=;Qv$@f zK!Ya&y;8*cSNTsFu;d0EoeW&65h?#O|EU04JP_4819?S=g`c(IKf1m#}0TO($vUCHgN)hMA0-;NwzxM#`rr-zvoc|Pfn;+Jl9>7yM z;`?}Da~U-CUf}#Z@_qkx{*xmCSeJSNOBIOi6M@SWP{{j%@r%gy5%|kLXF)0SyNU?+ zBvm1qspO(-Qh=_ zpv?>6lPzRDl;RN}`xckAcsAggk&QH){-4>J2aI3SC?RUwj)1eKGucH{#iI&IG>V z1LfKco>mI&JQn`C1S)(I&ONCY)1izdBmAo8Yy$?G50`z_Wv}I5DUJbEoO=^^<2 zRq`iPp^HS3auFGJ7@I48|M}7AL)oQ80tM2^v(x83PCTT#q+EFNBEy1`@3L}`8MQyhPiG- zhG&@7Hso=Jd22(SW|)yS%r|NlMx*Ybt}90ld@N(GL_x;^8i790a@Fca&zP7}V3 zb@?6So)?Mga4dNLEUeQX;rhx*=#{Bp84GaL=VNe_@!<4xunsT5)sqca$ESlwe1K~` ztHDCH;rh@#th38-O=Kh1={?XOAL7c+TJVe=P)T2drL4dej?Gwy_d;JB$2z_qJYpww z(IN1VpP;U`Vx8R&?Qjz7^m$x~+XV%51U%ymt}0#yPdNx(@IBVyi@3^m2kZDz@Q9yr z#qb(<$Y02yp98D7jw=F>k!}4AEAD;dk+0y2*aNJ+x4;>mA(JlLAJA`;-}u@O4kaTH zi4O_S$fwp4LXGu%#OH+F@uT9C;`#UkaTDWGqEwc^bZLMQHERy-WEJF zcu;UsutV_upd&%cgIa=egF=H$gMJU(8@MpAIWQ|QFwi*g_keu?9|epE=ob(XU=wiH z|Cs+e|0({1{JZ*l_)GmS`|a~v;y1>x$S=vy#gF-2^xfyX%y*n`sc%LwqiIAM{@BJW+ z=y}%jOV5>_(>xnI^E?whJw44lAA0=kvCm_T$1IOw9)%v=J%T;jdQgvR?kC+pcVFs0 z)xF7mpnF&MAosTJy!#EeQ*OK6R=Le~d&{lNt+!jOn}?f)+f&youE$+JcU|H7j_U~5 za@S1Pcvl}+J6Gy@)8(|w0hdo*7P?Gw8SGNzlI{}Y;^kuFLS1e-pLPD)d5iNB=b6rL zIafO8I(Kmnb#`_(cYf}4-RZQ`S58};mO0IG8s${uG{C8+Q;d_hQyV9_(<9Yys_#|% zRhv{xRI^m0Rdp)0s+THJ6{u3F%vGF<=cN+4)L4$obrLF5$c!Y$yzU2L1$=-;yzzK} zhpM~kin;U}O`W;DMAU&kn(!`MoeFIWur#bpw+4>)peyBRf$kj-GGxf z*9iSk)z_$tG^$EXNrOu4LsL0Mk=}@RC8{b-mC!zhp>3=~slvwkX0BUx14h?agFdP1 zo9i1iRjML&W#y|<*i)meQ`ePOHme$|)lKU1N^#KLs+-i6<*205RB*|4+WLCGVvTS* zRb_c~1?sDd{j}AnB#uzmG}lQ#N^v&OGUhBN<_Os7&l>VsSAVu2;d3sK6!FX)83Vb$?Z!~>>dI??IrR0VS(DVohKB`Q6_u4& z7OV7-6bk95M}+4~M7}z=fP#9VsxW=8pW!9`iUAREZU<`{(YUs#s1aAz8`N+>osSi1 zo8UZxhh@}Z`n8SqD%e;fILjNJRiuWmR$^C5W3>)QLjCfpno5l@mpW@z0Rn2c3>*O? z7i_3=nr?8^hVqhfG+PG;X+r5vI$H~ks8#h1KoW9yTAic4nyJ=O0yYI?wmO-vc)b8+ z(aY+&R7`}bOkJ-k)W90`8jK0&$f(mcXp6L!t@amYw6%vihks=q0k?%XTrbQ_E70mO zrndKlzyAH} z?*Di3rCL|-^>Cst)Qt;anS#s)D=y;>F2m4H`qvtZ8`R)x})4X!h1!`V~W5+i-eaI6@T0$3|BOS{he! zEQI@raREVm;4_~1CLi5v;qGEHC5|(t3`@7d2>TUM{4wIB;=RYZn)<>9HI+h5v=8a2 z5E@hn%^DG>*9oKeTKuEX?Z#hY;)D-;zI@;Vz8o+7;S{>v_-jhM&0iM4hb)EH;va=> zH~!+kCH7icS`yRN7rGh>;w1D&|3LrnjUB=tv6JH1jYx#9H^Odo=;fc+I*E^02L*?O zhJ{B&MkOXCcj}yyv666PK!4n&U4X3^TNyUteI>SPY&EU#>+oEUP51)FzbkKe{MCD; zcmA%yMl{rfZE$OYLwK$Q8`s?W{#66I6B-wjopDADSGVl{_XRrJk>&+V{Z_>#vpcJ Z%R2oREj#0w=WdjSne-2X;!2_E{|EZ9=@|e3 literal 0 HcmV?d00001 diff --git a/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.worker.js b/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.worker.js new file mode 100644 index 0000000..bdabbc9 --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-video-av1-mt-wasm.worker.js @@ -0,0 +1 @@ +"use strict";var Module={};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(nodeFS.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};function moduleLoaded(){}self.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}OGVDecoderVideoAV1MTW(Module).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["PThread"].threadExit(result)}}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}}; diff --git a/ogvjs-1.8.4/ogv-decoder-video-av1-wasm.js b/ogvjs-1.8.4/ogv-decoder-video-av1-wasm.js new file mode 100644 index 0000000..cb55fad --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-video-av1-wasm.js @@ -0,0 +1,44 @@ + +var OGVDecoderVideoAV1W = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDecoderVideoAV1W) { + OGVDecoderVideoAV1W = OGVDecoderVideoAV1W || {}; + + +var a;a||(a=typeof OGVDecoderVideoAV1W !== 'undefined' ? OGVDecoderVideoAV1W : {});var aa,ba;a.ready=new Promise(function(b,c){aa=b;ba=c});var ca=a,q={},r;for(r in a)a.hasOwnProperty(r)&&(q[r]=a[r]);var da="object"===typeof window,y="function"===typeof importScripts,D="",ea,H,I,J,K; +if("object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node)D=y?require("path").dirname(D)+"/":__dirname+"/",ea=function(b,c){J||(J=require("fs"));K||(K=require("path"));b=K.normalize(b);return J.readFileSync(b,c?null:"utf8")},I=function(b){b=ea(b,!0);b.buffer||(b=new Uint8Array(b));b.buffer||L("Assertion failed: undefined");return b},H=function(b,c,e){J||(J=require("fs"));K||(K=require("path"));b=K.normalize(b);J.readFile(b,function(d,f){d?e(d):c(f.buffer)})}, +1>>=0;if(2147483648=e;e*=2){var d=c*(1+.2/e);d=Math.min(d,b+100663296);d=Math.max(b,d);0>>16);la();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},e:function(){return 0},b:function(){},a:function(b,c,e,d){for(var f=0,g=0;g>2],u=S[c+(8*g+4)>> +2],A=0;A=t);)++w;if(16h?t+=String.fromCharCode(h):(h-=65536,t+=String.fromCharCode(55296|h>>10,56320|h&1023))}}else t+=String.fromCharCode(h)}l=t}n(l); +x.length=0}else x.push(n)}f+=u}S[d>>2]=f;return 0},g:function(b,c,e,d,f,g,z,u,A,n,x,l,p,t,w,h){function E(F,v,B,ha,xa,ya,La,Ma,X){if(Ia){var k=new Float64Array(F.buffer);v=new Float64Array(Q,v,B*ha>>3);k.set(v)}else F.set(new Uint8Array(Q,v,B*ha));var C;for(v=C=0;v=d||(Y&&a._free(Y),Oa=d,Y=a._malloc(Oa));var f=Y;(new Uint8Array(O.buffer,f,d)).set(new Uint8Array(b));return a._ogv_video_decoder_process_header(f,d)});c(e)};a.A=[]; +a.processFrame=function(b,c){function e(u){a._free(g);c(u)}var d=a._ogv_video_decoder_async(),f=b.byteLength,g=a._malloc(f);d&&a.A.push(e);var z=Pa(function(){(new Uint8Array(O.buffer,g,f)).set(new Uint8Array(b));return a._ogv_video_decoder_process_frame(g,f)});d||e(z)};a.close=function(){};a.sync=function(){a._ogv_video_decoder_async()&&(a.A.push(function(){}),Pa(function(){a._ogv_video_decoder_process_frame(0,0)}))};a.recycledFrames=[]; +a.recycleFrame=function(b){var c=a.recycledFrames;c.push(b);16x85Hj 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%0A&_4DNX+So@^ksd$ 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�wE!AmcvWy0%!i;~RwjfkPK4X{Sx&T z19w(-pa5Ja1)zE(J*=4fNR0lXy@RYUawjrULqoH z;5#GuFX9Us-gBVxfYR*|s^F#Ifo7%5j9@RMVeuTbQ*8m-oQMR<>HdB?5Nv+Pd* ze{;5nV&{M@LN1|J+$)P^FS?UHT_d`*yB?;VqPcf5a!fs?B(Jm225e$C@DH)LsaL|h z^6eaJ0EZ}X)A%T7+=X8Z?^Wyz_)#9!0tfJ9`7<_yx>tfnb`|+7B}`%e(OA_V&0@Lk zzKfG6FbMVB#X(=i@E011b}CV}DN)uE*=*UEevoq$#qrlt6lhvUDPZ&3@Vf1l+abfj z@MejjL8lyD7hcPM*O~s+6K%s>$s@@(xFu}zKlv+RtkONH87*sIB-aCxh zp~gP^s23mzD7@c|_zcIw9Uj#8g#!n)S&a8D=-dj_$SfzDVn67@N`q68Lq5WRJV{3h z|5)MHd7No2XY-zLA%`V-GF*lG4Y>x43aMN^Ed>&7k+zx-D=;|1N(T@ruYMA1 z7`h(7*B9Cdu+YXY=3@KQY%XRp!EGShlgE%rFK0;3UF{}~jW#@R(J^CvG{-xA&;#b8bnsRfIe+_`C+Gy;V* z)l-l2F4+xi>36zG1fy-DMu9{T`YIB2zS*NI<#lO54UD9u@9cp7eJl zzeIu!Ws{63o78D!mTH_%-|UvA$tJ+C+tf@uc~?9IS`vM7l=ETOGD2VXgmU-A%P?F9 zond7!MO{)RvBEX~*F<+I^#ChNK&X*SG1{wy)BOj6)xjy8vMQHDoF43#f z&n;?XBeJePrBR9AlmNGr>I*3$| zkZ4v1d!(v5mSKu1xr;scfLQ!&11EmYXJ^Qt*OXNLDzXmr9*tMY*Buf^_Ijib?f@uJH4$AEOo!hngUVn`;i3{>&J& zHN4O9J|}-Lw2k35cxWuVE!^R7TaWD}HUaN=52b~20)IfBRVn7s>KxJ*hHH`D=2FlD zU)yFJRjuL5dJ+(>Iba?lM8B2}T&Br34_qh<>J2Gua?%CI&%32cw8nbW>2U(-Sk`wa z8P0mOdWk!v4qzP8bj1moVc>$^m}R0k6RA-Q*9nqvb%`1!l@jEwWpN4OO{Ooq%`J;I z=}>#dVENB{N~2!y*eFrvU!_rnv{7gSKXs%0xsCerdhcu&x&b6qxK&sI2zG_nI&0RA z+p9kp{^A5mOk~tb$NOW4!{9*W=ZaEb?+w>Yu-4XpXD$jwT=nn8$}d?*gWT2O4ckp6 zL@ShH*xjV=bxYj?@lH$Bn{>oQ;f>H`KD-f4?pD+=CJNn}&y9fk4GdvATS3DL%Aux% zaC3KfD|Ik6+b~+;82gY^qt(xe!qJbx^pc16P{@c#9V3(O;1iiQX6f z9C{{oufFdI-JJ;k;iU=sl#H(HA6i&pFd!cctizH^`Uj z9Z|0qP1iwma``~!=&Wf|2f2#Gx!-JY>R>SxX^w`sI(0B>jVf{;HyS`8{H0!LgQD6| zu<5ixX5kp-CMpZTN<$kotXBt8_F6BGBsvDQa6r#y?$UDdeAZ$a?o(L{>uC=xg9$CX zBUB@o(Fs`IW3M@4EIeMf}*-3j?(xSR~;m@~(ACfvYCyBJMC8=I! zmL-K!J(BmidZgis5yI4$d3q$vk{b9NOD;A8Tnh-PIRUcFw(5)9Q7E$w4S)nHYrfqb zqLQyyy^4CWdLvLSvkm34si34`TE3UUoC4WYf*K2#YSsi5({-lLr;2955lYqwHiWz?HQ&dbF4UC0QF)>F_Qc1LBgH8d> zEbXaz_R1wr(Hv-}mq9pE$jn~ZDP5vyrk_(~%zM|Y3x|H;A=E*8P7%pCBXeSh#x9Rb723(jp6^r3RvK#91eM>NzRB zVVy+zX;>#Wgl>TgH_4<1jf`J$wHL$N1?gwe8Y`a-udfbmhxmD4rdbGrI8Ylu}+eJ#S~d1dmGlsEHV|K?&R=NC643PC z#{yVtbzI53phs3mCVvMiE3w9gJ=|2nFyG60Ph?|#YQ77GP4&X7a=}>ajI4+}33Y$BxPoz`?e3l|KNHdobFlXy4*X?$sN!BC9a z+~k5`QP%FJiC%we+nZ*4bHC6#^!!|_Mw1K1Rc2^k&ZhR!Td=HaVg>xcmz zF&R26F?Lnh(pjZ#-7#FeFgDj6Bl%*8o9~XHuPp=f72Pp7(+=xUE6P1asPf#X)cxTq z(i#;e?igjQw71J6i|HIa!Ri$}3+Gn;)4|iG*sCZJE^qu721y5+Ge+u&k*&L8xR+er zA)}~4$!S!MCRstUV3RvWlEyT!rbG%ixniWLtanqLN`*OlV3PxerEKZxM)H>ET@96~ zU7n&)?kB87Gg|U?Dl%z+-`Z2V8p_vSqNbu~qO;RR(MaiM17`w$FbDi3dJetr5nT7tmoU`HlEryB?DgYJAf}_TK;avq zwTmuOl*5o2(NGwoY%U8I$+2UR3N3`|u&0uQVrcqni&??oX*MV3b+{5Z)q{<#%uaI^ zHhgPAg8ekqnIE?!v4_J&l}uQu4A{I>=%n;+V;Q76>6rPN6Ds0e<|XzQIO{Bo8F^a7 z#l-+4u#AQMve2^eMi{aKw^40!pYydM!YvntTRkSJNsbY^3{3&G+RVvSlmq7CI-8~0 zoZOHDdZQTE!4!|@@DjpH=*=aaG*vS+_qTBu_zapR6HFdv=k1g((MQwIEqZ7pvaWxo zQHkD}2E!$D)o*%+cBG3Rv?F)rcF^1@9EPwm%$rEigwXj2(>-d?NW<%_T?QF=<$GE$ zF>O?nGN63Xcb$Q^zJ8!cX%Y1~U7t|{JwWT6w&ORvhpvahF!$m&q<*fbMx%+)UGr|c zia1*j>LP+eFB6TKE563u4Y^)u6k!W;xC|L{ERf640<1V}Tw=(w%P)`zN?7ND42$TH zv-zlS(q&Sv4#X1(eBgi@XA?qq04C%@MF%)%!u6x@ixyNDVBH$hi)@P5!f{Kso2gP8 zC}9#SCgoS+M%f|0u!#fN)nFW0B4L9Am&;B>4`HQ*6Z80$IrkpfS~*1oy%YDI{)x&) zto57(;#hN2xWEp8blk|X12AV*2OeS2^1_WIWF9eEch0d%huzsm-PXYz#;+Na?XA&l zmkk6kXTq}ZtF5TW7))}V_@T+xYL5fWOKDYPSUEN!B0n=N-rm#}O4Ii+lyEjJ?T?3zX; z?3xC{6?54&;QY6QVcqPXi88bQ6~uB+WasvzeZYxQ>V*#NYD%RRHcgZvmkv3TmNsRz z3R+q`|6{%7b3e6AlpD1=Oh9R*$H;DzR`ciMUPE#1l7zcNv6^z)v6Gg%1OfCg#Wl9& zj99oetR$($oIRx0H#iD2pLq#zRI?_ih!+kPn}nY=D8k7`X9MJ5uybt2V5JY@t#H8@ z!;KRMNd-yqF7wr7fJ-$@46Vn@^<_JmJVxcp*4siDZTgx)CLn|r2avI20xLC`CO#pmF=?FQ*6kBR41*R;c;$$9_+ev7GYAT?aLf;z=ao9jXmPnw6X&S_Wp7ai1ML6Xa#Aic}lf3;bui#^nwQxkCBxluqL@XQ6Hy9JEy z_F%{~Wrsce&<9$z@lE_;IP!!Bd3VcsP1_-l>b#kiQ3lJFnmqu#I&(?MMgD z;5Nh=m0qO}lwfBZV?$}U9W7 wGG@RyjxY?gQ0|v>5yaCBklyLCsftG%;`-%an2g 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 I-o}pp4~t8i0{{R3 literal 0 HcmV?d00001 diff --git a/ogvjs-1.8.4/ogv-decoder-video-theora-wasm.js b/ogvjs-1.8.4/ogv-decoder-video-theora-wasm.js new file mode 100644 index 0000000..6dece9f --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-video-theora-wasm.js @@ -0,0 +1,43 @@ + +var OGVDecoderVideoTheoraW = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDecoderVideoTheoraW) { + OGVDecoderVideoTheoraW = OGVDecoderVideoTheoraW || {}; + + +var a;a||(a=typeof OGVDecoderVideoTheoraW !== 'undefined' ? OGVDecoderVideoTheoraW : {});var aa,l;a.ready=new Promise(function(b,c){aa=b;l=c});var fa=a,m={},r;for(r in a)a.hasOwnProperty(r)&&(m[r]=a[r]);var ha="object"===typeof window,w="function"===typeof importScripts,A="",B,C,E,F,G; +if("object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node)A=w?require("path").dirname(A)+"/":__dirname+"/",B=function(b,c){F||(F=require("fs"));G||(G=require("path"));b=G.normalize(b);return F.readFileSync(b,c?null:"utf8")},E=function(b){b=B(b,!0);b.buffer||(b=new Uint8Array(b));b.buffer||H("Assertion failed: undefined");return b},C=function(b,c,e){F||(F=require("fs"));G||(G=require("path"));b=G.normalize(b);F.readFile(b,function(d,f){d?e(d):c(f.buffer)})}, +1>>=0;if(2147483648=e;e*=2){var d=c*(1+.2/e);d=Math.min(d,b+100663296);d=Math.max(b,d);0>>16);ka();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},c:function(b,c,e,d,f,g,t,p,D,q,x,K,P,Q,ba,ca){function da(y,n,u,ea,ua,va,Ha,Ia,R){if(Fa){var h=new Float64Array(y.buffer);n=new Float64Array(wa,n,u*ea>> +3);h.set(n)}else y.set(new Uint8Array(wa,n,u*ea));var v;for(n=v=0;n=d||(X&&a._free(X),La=d,X=a._malloc(La));var f=X;(new Uint8Array(M.buffer,f,d)).set(new Uint8Array(b));return a._ogv_video_decoder_process_header(f,d)});c(e)};a.s=[]; +a.processFrame=function(b,c){function e(p){a._free(g);c(p)}var d=a._ogv_video_decoder_async(),f=b.byteLength,g=a._malloc(f);d&&a.s.push(e);var t=Z(function(){(new Uint8Array(M.buffer,g,f)).set(new Uint8Array(b));return a._ogv_video_decoder_process_frame(g,f)});d||e(t)};a.close=function(){};a.sync=function(){a._ogv_video_decoder_async()&&(a.s.push(function(){}),Z(function(){a._ogv_video_decoder_process_frame(0,0)}))};a.recycledFrames=[]; +a.recycleFrame=function(b){var c=a.recycledFrames;c.push(b);16r+ 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 z)uMXD6y1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("unhandledRejection",abort);quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"};var nodeWorkerThreads;try{nodeWorkerThreads=require("worker_threads")}catch(e){console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}global.Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}if(ENVIRONMENT_IS_NODE){read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})}}else{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance==="undefined"){global.performance=require("perf_hooks").performance}}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function TextDecoderWrapper(encoding){var textDecoder=new TextDecoder(encoding);this.decode=function(data){if(data.buffer instanceof SharedArrayBuffer){data=new Uint8Array(data)}return textDecoder.decode.call(textDecoder,data)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf-16le"):undefined;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":1073741824/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="ogv-decoder-video-vp8-mt-wasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["Q"];addOnInit(Module["asm"]["K"]);PThread.tlsInitFunctions.push(Module["asm"]["T"]);wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency("wasm-instantiate")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={9132:function(){throw"Canceled!"},9150:function($0,$1){setTimeout(function(){__emscripten_do_dispatch_to_thread($0,$1)},0)}};function initPthreadsJS(){PThread.initRuntime()}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}Module["_emscripten_futex_wake"]=_emscripten_futex_wake;function killThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in killThread!";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function cancelThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cancelThread!";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cleanupThread!";var pthread=PThread.pthreads[pthread_ptr];if(pthread){GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],initMainThreadBlock:function(){var pthreadPoolSize=1;for(var i=0;i>2]=tb;var headPtr=tb+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=_malloc(512);for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),tb+100>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tb+40>>2,tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(tb)},initWorker:function(){},pthreads:{},threadExitHandlers:[],runExitHandlers:function(){while(PThread.threadExitHandlers.length>0){PThread.threadExitHandlers.pop()()}___pthread_tsd_run_dtors()},runExitHandlersAndDeinitThread:function(tb,exitCode){Atomics.store(GROWABLE_HEAP_U32(),tb+56>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,0);PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0)},setExitStatus:function(status){EXITSTATUS=status},threadExit:function(exitCode){var tb=_pthread_self();if(tb){PThread.runExitHandlersAndDeinitThread(tb,exitCode);if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exit"})}}},threadCancel:function(){PThread.runExitHandlersAndDeinitThread(_pthread_self(),-1);postMessage({"cmd":"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+100>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){PThread.runWithoutMainThreadQueuedCalls(function(){delete PThread.pthreads[worker.pthread.threadInfoStruct];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined})},runWithoutMainThreadQueuedCalls:function(func){GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=0;try{func()}finally{GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=1}},receiveObjectTransfer:function(data){},threadInit:function(){for(var i in PThread.tlsInitFunctions){PThread.tlsInitFunctions[i]()}},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e["data"];var cmd=d["cmd"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d["transferList"])}else{console.error('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processQueuedMainThreadWork"){_emscripten_main_thread_process_queued_calls()}else if(cmd==="spawnThread"){spawnThread(e.data)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="exit"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.threadInfoStruct+64>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd==="exitProcess"){try{exit(d["returnCode"])}catch(e){if(e instanceof ExitStatus)return;throw e}}else if(cmd==="cancelDone"){PThread.returnWorkerToPool(worker)}else if(cmd==="objectTransfer"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target==="setimmediate"){worker.postMessage(e.data)}else{err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)};if(ENVIRONMENT_IS_NODE){worker.on("message",function(data){worker.onmessage({data:data})});worker.on("error",function(data){worker.onerror(data)});worker.on("exit",function(data){})}worker.postMessage({"cmd":"load","urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("ogv-decoder-video-vp8-mt-wasm.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>=2;while(ch=GROWABLE_HEAP_U8()[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?GROWABLE_HEAP_F64()[buf++>>1]:GROWABLE_HEAP_I32()[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_NODE)return;if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(!ENVIRONMENT_IS_WEB){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret==="timed-out")return-73;if(ret==="not-equal")return-6;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}var tNow=performance.now();var tEnd=tNow+timeout;var lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr);while(1){tNow=performance.now();if(tNow>tEnd){lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);return-73}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);if(lastAddr==0){break}_emscripten_main_thread_process_queued_calls();if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr)}return 0}}function _emscripten_get_heap_max(){return 1073741824}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){if(ENVIRONMENT_IS_NODE)return require("os").cpus().length;return navigator["hardwareConcurrency"]}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=GROWABLE_HEAP_U8().length;requestedSize=requestedSize>>>0;if(requestedSize<=oldSize){return false}var maxHeapSize=1073741824;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;__emscripten_call_on_thread(0,targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;__emscripten_call_on_thread(0,targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!=="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;canvas.getContext=function(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];var contextAttributes={"alpha":!!GROWABLE_HEAP_I32()[a+(0>>2)],"depth":!!GROWABLE_HEAP_I32()[a+(4>>2)],"stencil":!!GROWABLE_HEAP_I32()[a+(8>>2)],"antialias":!!GROWABLE_HEAP_I32()[a+(12>>2)],"premultipliedAlpha":!!GROWABLE_HEAP_I32()[a+(16>>2)],"preserveDrawingBuffer":!!GROWABLE_HEAP_I32()[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!GROWABLE_HEAP_I32()[a+(28>>2)],majorVersion:GROWABLE_HEAP_I32()[a+(32>>2)],minorVersion:GROWABLE_HEAP_I32()[a+(36>>2)],enableExtensionsByDefault:GROWABLE_HEAP_I32()[a+(40>>2)],explicitSwapControl:GROWABLE_HEAP_I32()[a+(44>>2)],proxyContextToMainThread:GROWABLE_HEAP_I32()[a+(48>>2)],renderViaOffscreenBackBuffer:GROWABLE_HEAP_I32()[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}function _getTempRet0(){return getTempRet0()}function _ogvjs_callback_async_complete(ret,cpuTime){var callback=Module.callbacks.shift();Module["cpuTime"]+=cpuTime;callback(ret);return}function _ogvjs_callback_frame(bufferY,strideY,bufferCb,strideCb,bufferCr,strideCr,width,height,chromaWidth,chromaHeight,picWidth,picHeight,picX,picY,displayWidth,displayHeight){var heap=wasmMemory.buffer;var format=Module["videoFormat"];function copyAndTrim(arr,buffer,stride,height,picX,picY,picWidth,picHeight,fill){if(trident){var dest64=new Float64Array(arr.buffer);var src64=new Float64Array(heap,buffer,stride*height>>3);dest64.set(src64)}else{arr.set(new Uint8Array(heap,buffer,stride*height))}var x,y,ptr;for(ptr=0,y=0;y0){var next=recycled.shift(),format=next["format"];if(format["width"]===width&&format["height"]===height&&format["chromaWidth"]===chromaWidth&&format["chromaHeight"]===chromaHeight&&format["cropLeft"]===picX&&format["cropTop"]===picY&&format["cropWidth"]===picWidth&&format["cropHeight"]===picHeight&&format["displayWidth"]===displayWidth&&format["displayHeight"]===displayHeight&&next["y"]["bytes"].length===lenY&&next["u"]["bytes"].length===lenCb&&next["v"]["bytes"].length===lenCr){frame=next;break}}if(!frame){frame={"format":{"width":width,"height":height,"chromaWidth":chromaWidth,"chromaHeight":chromaHeight,"cropLeft":picX,"cropTop":picY,"cropWidth":picWidth,"cropHeight":picHeight,"displayWidth":displayWidth,"displayHeight":displayHeight},"y":{"bytes":new Uint8Array(lenY),"stride":strideY},"u":{"bytes":new Uint8Array(lenCb),"stride":strideCb},"v":{"bytes":new Uint8Array(lenCr),"stride":strideCr}}}copyAndTrim(frame["y"]["bytes"],bufferY,strideY,height,picX,picY,picWidth,picHeight,0);copyAndTrim(frame["u"]["bytes"],bufferCb,strideCb,chromaHeight,chromaPicX,chromaPicY,chromaPicWidth,chromaPicHeight,128);copyAndTrim(frame["v"]["bytes"],bufferCr,strideCr,chromaHeight,chromaPicX,chromaPicY,chromaPicWidth,chromaPicHeight,128);Module["frameBuffer"]=frame}function spawnThread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var worker=PThread.getNewWorker();if(!worker){return 6}if(worker.pthread!==undefined)throw"Internal error!";if(!threadParams.pthread_ptr)throw"Internal error, no pthread ptr!";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(64>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(100>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(76>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+12>>2),threadParams.detached);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(172>>2),global_locale);worker.pthread=pthread;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"threadInfoStruct":threadParams.pthread_ptr,"stackBase":threadParams.stackBase,"stackSize":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;if(attr&&attr!=-1){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(228);for(var i=0;i<228>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function _exit(status){exit(status)}function _pthread_exit(status){if(!ENVIRONMENT_IS_PTHREAD)_exit(status);else PThread.threadExit(status);throw"unwind"}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;var tb=_pthread_self();if(!tb)return;var cancelDisabled=Atomics.load(GROWABLE_HEAP_U32(),tb+56>>2);if(cancelDisabled)return;var canceled=Atomics.load(GROWABLE_HEAP_U32(),tb+0>>2);if(canceled==2)throw"Canceled!"}function __emscripten_do_pthread_join(thread,status,block){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self()==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&_emscripten_main_browser_thread_id()==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(GROWABLE_HEAP_U32(),thread+64>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}if(block){_emscripten_check_blocking_allowed()}for(;;){var threadStatus=Atomics.load(GROWABLE_HEAP_U32(),thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(GROWABLE_HEAP_U32(),thread+4>>2);if(status)GROWABLE_HEAP_I32()[status>>2]=threadExitCode;Atomics.store(GROWABLE_HEAP_U32(),thread+64>>2,1);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread});return 0}if(!block){return ERRNO_CODES.EBUSY}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _pthread_join(thread,status){return __emscripten_do_pthread_join(thread,status,true)}function _setTempRet0(val){setTempRet0(val)}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();var GLctx;var proxiedFunctionTable=[null,_emscripten_set_canvas_element_size_main_thread];var asmLibraryArg={"f":___assert_fail,"r":___cxa_thread_atexit,"F":__emscripten_notify_thread_queue,"z":__emscripten_throw_longjmp,"J":_abort,"q":_emscripten_asm_const_int,"A":_emscripten_check_blocking_allowed,"p":_emscripten_conditional_set_current_thread_status,"h":_emscripten_futex_wait,"g":_emscripten_futex_wake,"B":_emscripten_get_heap_max,"d":_emscripten_get_now,"x":_emscripten_memcpy_big,"o":_emscripten_num_logical_cores,"C":_emscripten_receive_on_main_thread_js,"y":_emscripten_resize_heap,"D":_emscripten_set_canvas_element_size,"n":_emscripten_set_current_thread_status,"E":_emscripten_webgl_create_context,"b":_getTempRet0,"w":initPthreadsJS,"H":invoke_i,"i":invoke_ii,"l":invoke_iii,"I":invoke_iiii,"v":invoke_iiiij,"e":invoke_vi,"k":invoke_viii,"j":invoke_viiii,"a":wasmMemory||Module["wasmMemory"],"s":_ogvjs_callback_async_complete,"t":_ogvjs_callback_frame,"m":_pthread_create,"u":_pthread_exit,"G":_pthread_join,"c":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["K"]).apply(null,arguments)};var _ogv_video_decoder_init=Module["_ogv_video_decoder_init"]=function(){return(_ogv_video_decoder_init=Module["_ogv_video_decoder_init"]=Module["asm"]["L"]).apply(null,arguments)};var _ogv_video_decoder_async=Module["_ogv_video_decoder_async"]=function(){return(_ogv_video_decoder_async=Module["_ogv_video_decoder_async"]=Module["asm"]["M"]).apply(null,arguments)};var _ogv_video_decoder_destroy=Module["_ogv_video_decoder_destroy"]=function(){return(_ogv_video_decoder_destroy=Module["_ogv_video_decoder_destroy"]=Module["asm"]["N"]).apply(null,arguments)};var _ogv_video_decoder_process_header=Module["_ogv_video_decoder_process_header"]=function(){return(_ogv_video_decoder_process_header=Module["_ogv_video_decoder_process_header"]=Module["asm"]["O"]).apply(null,arguments)};var _ogv_video_decoder_process_frame=Module["_ogv_video_decoder_process_frame"]=function(){return(_ogv_video_decoder_process_frame=Module["_ogv_video_decoder_process_frame"]=Module["asm"]["P"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["R"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["S"]).apply(null,arguments)};var _emscripten_tls_init=Module["_emscripten_tls_init"]=function(){return(_emscripten_tls_init=Module["_emscripten_tls_init"]=Module["asm"]["T"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["U"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return(_emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=Module["asm"]["V"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return(_emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=Module["asm"]["W"]).apply(null,arguments)};var __emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=function(){return(__emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=Module["asm"]["X"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=Module["asm"]["Y"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["Z"]).apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return(_pthread_self=Module["_pthread_self"]=Module["asm"]["_"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=Module["asm"]["$"]).apply(null,arguments)};var __emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=function(){return(__emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=Module["asm"]["aa"]).apply(null,arguments)};var __emscripten_thread_init=Module["__emscripten_thread_init"]=function(){return(__emscripten_thread_init=Module["__emscripten_thread_init"]=Module["asm"]["ba"]).apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return(_emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=Module["asm"]["ca"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return(___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=Module["asm"]["da"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["ea"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["fa"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ga"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=function(){return(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=Module["asm"]["ha"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["ia"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["ja"]).apply(null,arguments)};var dynCall_iiiij=Module["dynCall_iiiij"]=function(){return(dynCall_iiiij=Module["dynCall_iiiij"]=Module["asm"]["ka"]).apply(null,arguments)};var __emscripten_allow_main_runtime_queued_calls=Module["__emscripten_allow_main_runtime_queued_calls"]=9124;var __emscripten_main_thread_futex=Module["__emscripten_main_thread_futex"]=10652;function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{wasmTable.get(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return wasmTable.get(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_viii(index,a1,a2,a3){var sp=stackSave();try{wasmTable.get(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return wasmTable.get(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_i(index){var sp=stackSave();try{return wasmTable.get(index)()}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_iiiij(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return dynCall_iiiij(index,a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}Module["keepRuntimeAlive"]=keepRuntimeAlive;Module["PThread"]=PThread;Module["PThread"]=PThread;Module["wasmMemory"]=wasmMemory;Module["ExitStatus"]=ExitStatus;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(!implicit){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exitProcess","returnCode":status});throw new ExitStatus(status)}else{}}if(keepRuntimeAlive()){}else{PThread.terminateAllThreads();exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}if(ENVIRONMENT_IS_PTHREAD){noExitRuntime=false;PThread.initWorker()}run();var inputBuffer,inputBufferSize;function reallocInputBuffer(size){if(inputBuffer&&inputBufferSize>=size){return inputBuffer}if(inputBuffer){Module["_free"](inputBuffer)}inputBufferSize=size;inputBuffer=Module["_malloc"](inputBufferSize);return inputBuffer}var getTimestamp;if(typeof performance==="undefined"||typeof performance.now==="undefined"){getTimestamp=Date.now}else{getTimestamp=performance.now.bind(performance)}function time(func){var start=getTimestamp(),ret;ret=func();Module["cpuTime"]+=getTimestamp()-start;return ret}Module["loadedMetadata"]=!!options["videoFormat"];Module["videoFormat"]=options["videoFormat"]||null;Module["frameBuffer"]=null;Module["cpuTime"]=0;Object.defineProperty(Module,"processing",{get:function getProcessing(){return false}});Module["init"]=function(callback){time(function(){Module["_ogv_video_decoder_init"]()});callback()};Module["processHeader"]=function(data,callback){var ret=time(function(){var len=data.byteLength;var buffer=reallocInputBuffer(len);var dest=new Uint8Array(wasmMemory.buffer,buffer,len);dest.set(new Uint8Array(data));return Module["_ogv_video_decoder_process_header"](buffer,len)});callback(ret)};Module.callbacks=[];Module["processFrame"]=function(data,callback){var isAsync=Module["_ogv_video_decoder_async"]();var len=data.byteLength;var buffer=Module["_malloc"](len);function callbackWrapper(ret){Module["_free"](buffer);callback(ret)}if(isAsync){Module.callbacks.push(callbackWrapper)}var ret=time(function(){var dest=new Uint8Array(wasmMemory.buffer,buffer,len);dest.set(new Uint8Array(data));return Module["_ogv_video_decoder_process_frame"](buffer,len)});if(!isAsync){callbackWrapper(ret)}};Module["close"]=function(){};Module["sync"]=function(){var isAsync=Module["_ogv_video_decoder_async"]();if(isAsync){Module.callbacks.push(function(){});time(function(){Module["_ogv_video_decoder_process_frame"](0,0)})}};Module["recycledFrames"]=[];Module["recycleFrame"]=function(frame){var arr=Module["recycledFrames"];arr.push(frame);if(arr.length>16){arr.shift()}};var trident=typeof navigator==="object"&&navigator.userAgent.match(/Trident/); + + + return OGVDecoderVideoVP8MTW.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = OGVDecoderVideoVP8MTW; +else if (typeof define === 'function' && define['amd']) + define([], function() { return OGVDecoderVideoVP8MTW; }); +else if (typeof exports === 'object') + exports["OGVDecoderVideoVP8MTW"] = OGVDecoderVideoVP8MTW; diff --git a/ogvjs-1.8.4/ogv-decoder-video-vp8-mt-wasm.wasm b/ogvjs-1.8.4/ogv-decoder-video-vp8-mt-wasm.wasm new file mode 100755 index 0000000000000000000000000000000000000000..b3fc6143d401bae6f0011ebdb61c8c54ef81c74a GIT binary patch literal 138515 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 d=c*(1+.2/e);d=Math.min(d,b+100663296);d=Math.max(b,d);0>>16);na();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},a:function(){return ja},d:Ja,i:Ka,j:La,h:Ma,c:Na,k:function(b,c,e,d,f,g,l,m,S,t,M,N,T,U,ea,fa){function ha(y,q,u,ia,ya,za, +Ra,Sa,V){if(Oa){var h=new Float64Array(y.buffer);q=new Float64Array(Aa,q,u*ia>>3);h.set(q)}else y.set(new Uint8Array(Aa,q,u*ia));var v;for(q=v=0;q=d||(X&&a._free(X),Va=d,X=a._malloc(Va));var f=X;(new Uint8Array(H.buffer,f,d)).set(new Uint8Array(b));return a._ogv_video_decoder_process_header(f,d)});c(e)};a.B=[]; +a.processFrame=function(b,c){function e(m){a._free(g);c(m)}var d=a._ogv_video_decoder_async(),f=b.byteLength,g=a._malloc(f);d&&a.B.push(e);var l=Z(function(){(new Uint8Array(H.buffer,g,f)).set(new Uint8Array(b));return a._ogv_video_decoder_process_frame(g,f)});d||e(l)};a.close=function(){};a.sync=function(){a._ogv_video_decoder_async()&&(a.B.push(function(){}),Z(function(){a._ogv_video_decoder_process_frame(0,0)}))};a.recycledFrames=[]; +a.recycleFrame=function(b){var c=a.recycledFrames;c.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 jgioVIEH3@Oi(s>G literal 0 HcmV?d00001 diff --git a/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.js b/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.js new file mode 100644 index 0000000..6ec0d0c --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.js @@ -0,0 +1,21 @@ + +var OGVDecoderVideoVP9MTW = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDecoderVideoVP9MTW) { + OGVDecoderVideoVP9MTW = OGVDecoderVideoVP9MTW || {}; + +function GROWABLE_HEAP_I8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP8}function GROWABLE_HEAP_U8(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU8}function GROWABLE_HEAP_I32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAP32}function GROWABLE_HEAP_U32(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPU32}function GROWABLE_HEAP_F64(){if(wasmMemory.buffer!=buffer){updateGlobalBufferAndViews(wasmMemory.buffer)}return HEAPF64}var Module=typeof OGVDecoderVideoVP9MTW!=="undefined"?OGVDecoderVideoVP9MTW:{};var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise(function(resolve,reject){readyPromiseResolve=resolve;readyPromiseReject=reject});var options=Module;var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";var ENVIRONMENT_IS_PTHREAD=Module["ENVIRONMENT_IS_PTHREAD"]||false;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);process["on"]("unhandledRejection",abort);quit_=function(status,toThrow){if(keepRuntimeAlive()){process["exitCode"]=status;throw toThrow}process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"};var nodeWorkerThreads;try{nodeWorkerThreads=require("worker_threads")}catch(e){console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?');throw e}global.Worker=nodeWorkerThreads.Worker}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}if(ENVIRONMENT_IS_NODE){read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};readAsync=function readAsync(filename,onload,onerror){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);nodeFS["readFile"](filename,function(err,data){if(err)onerror(err);else onload(data.buffer)})}}else{read_=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}if(ENVIRONMENT_IS_NODE){if(typeof performance==="undefined"){global.performance=require("perf_hooks").performance}}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];function warnOnce(text){if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;err(text)}}var tempRet0=0;var setTempRet0=function(value){tempRet0=value};var getTempRet0=function(){return tempRet0};var Atomics_load=Atomics.load;var Atomics_store=Atomics.store;var Atomics_compareExchange=Atomics.compareExchange;var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime=Module["noExitRuntime"]||true;if(typeof WebAssembly!=="object"){abort("no native wasm support detected")}var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}function TextDecoderWrapper(encoding){var textDecoder=new TextDecoder(encoding);this.decode=function(data){if(data.buffer instanceof SharedArrayBuffer){data=new Uint8Array(data)}return textDecoder.decode.call(textDecoder,data)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(GROWABLE_HEAP_U8(),ptr,maxBytesToRead):""}function stringToUTF8Array(str,heap,outIdx,maxBytesToWrite){if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,GROWABLE_HEAP_U8(),outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoderWrapper("utf-16le"):undefined;function alignUp(x,multiple){if(x%multiple>0){x+=multiple-x%multiple}return x}var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;if(ENVIRONMENT_IS_PTHREAD){buffer=Module["buffer"]}function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(ENVIRONMENT_IS_PTHREAD){wasmMemory=Module["wasmMemory"];buffer=Module["buffer"]}else{if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_MEMORY/65536,"maximum":1073741824/65536,"shared":true});if(!(wasmMemory.buffer instanceof SharedArrayBuffer)){err("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag");if(ENVIRONMENT_IS_NODE){console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)")}throw Error("bad memory")}}}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);var wasmTable;var __ATPRERUN__=[];var __ATINIT__=[];var __ATEXIT__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;var runtimeExited=false;var runtimeKeepaliveCounter=0;function keepRuntimeAlive(){return noExitRuntime||runtimeKeepaliveCounter>0}function preRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return;callRuntimeCallbacks(__ATINIT__)}function exitRuntime(){if(ENVIRONMENT_IS_PTHREAD)return;runtimeExited=true}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}if(ENVIRONMENT_IS_PTHREAD)console.error("Pthread aborting at "+(new Error).stack);what+="";err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return filename.startsWith(dataURIPrefix)}function isFileURI(filename){return filename.startsWith("file://")}var wasmBinaryFile;wasmBinaryFile="ogv-decoder-video-vp9-mt-wasm.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(file){try{if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary(wasmBinaryFile)})}else{if(readAsync){return new Promise(function(resolve,reject){readAsync(wasmBinaryFile,function(response){resolve(new Uint8Array(response))},reject)})}}}return Promise.resolve().then(function(){return getBinary(wasmBinaryFile)})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;wasmTable=Module["asm"]["S"];addOnInit(Module["asm"]["M"]);PThread.tlsInitFunctions.push(Module["asm"]["V"]);wasmModule=module;if(!ENVIRONMENT_IS_PTHREAD){var numWorkersToLoad=PThread.unusedWorkers.length;PThread.unusedWorkers.forEach(function(w){PThread.loadWasmModuleToWorker(w,function(){if(!--numWorkersToLoad)removeRunDependency("wasm-instantiate")})})}}if(!ENVIRONMENT_IS_PTHREAD){addRunDependency("wasm-instantiate")}function receiveInstantiationResult(result){receiveInstance(result["instance"],result["module"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){var result=WebAssembly.instantiate(binary,info);return result}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiationResult,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(receiveInstantiationResult)})})}else{return instantiateArrayBuffer(receiveInstantiationResult)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync().catch(readyPromiseReject);return{}}var ASM_CONSTS={34500:function(){throw"Canceled!"},34518:function($0,$1){setTimeout(function(){__emscripten_do_dispatch_to_thread($0,$1)},0)}};function initPthreadsJS(){PThread.initRuntime()}function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){wasmTable.get(func)()}else{wasmTable.get(func)(callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var ERRNO_CODES={EPERM:63,ENOENT:44,ESRCH:71,EINTR:27,EIO:29,ENXIO:60,E2BIG:1,ENOEXEC:45,EBADF:8,ECHILD:12,EAGAIN:6,EWOULDBLOCK:6,ENOMEM:48,EACCES:2,EFAULT:21,ENOTBLK:105,EBUSY:10,EEXIST:20,EXDEV:75,ENODEV:43,ENOTDIR:54,EISDIR:31,EINVAL:28,ENFILE:41,EMFILE:33,ENOTTY:59,ETXTBSY:74,EFBIG:22,ENOSPC:51,ESPIPE:70,EROFS:69,EMLINK:34,EPIPE:64,EDOM:18,ERANGE:68,ENOMSG:49,EIDRM:24,ECHRNG:106,EL2NSYNC:156,EL3HLT:107,EL3RST:108,ELNRNG:109,EUNATCH:110,ENOCSI:111,EL2HLT:112,EDEADLK:16,ENOLCK:46,EBADE:113,EBADR:114,EXFULL:115,ENOANO:104,EBADRQC:103,EBADSLT:102,EDEADLOCK:16,EBFONT:101,ENOSTR:100,ENODATA:116,ETIME:117,ENOSR:118,ENONET:119,ENOPKG:120,EREMOTE:121,ENOLINK:47,EADV:122,ESRMNT:123,ECOMM:124,EPROTO:65,EMULTIHOP:36,EDOTDOT:125,EBADMSG:9,ENOTUNIQ:126,EBADFD:127,EREMCHG:128,ELIBACC:129,ELIBBAD:130,ELIBSCN:131,ELIBMAX:132,ELIBEXEC:133,ENOSYS:52,ENOTEMPTY:55,ENAMETOOLONG:37,ELOOP:32,EOPNOTSUPP:138,EPFNOSUPPORT:139,ECONNRESET:15,ENOBUFS:42,EAFNOSUPPORT:5,EPROTOTYPE:67,ENOTSOCK:57,ENOPROTOOPT:50,ESHUTDOWN:140,ECONNREFUSED:14,EADDRINUSE:3,ECONNABORTED:13,ENETUNREACH:40,ENETDOWN:38,ETIMEDOUT:73,EHOSTDOWN:142,EHOSTUNREACH:23,EINPROGRESS:26,EALREADY:7,EDESTADDRREQ:17,EMSGSIZE:35,EPROTONOSUPPORT:66,ESOCKTNOSUPPORT:137,EADDRNOTAVAIL:4,ENETRESET:39,EISCONN:30,ENOTCONN:53,ETOOMANYREFS:141,EUSERS:136,EDQUOT:19,ESTALE:72,ENOTSUP:138,ENOMEDIUM:148,EILSEQ:25,EOVERFLOW:61,ECANCELED:11,ENOTRECOVERABLE:56,EOWNERDEAD:62,ESTRPIPE:135};function _emscripten_futex_wake(addr,count){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0||count<0)return-28;if(count==0)return 0;if(count>=2147483647)count=Infinity;var mainThreadWaitAddress=Atomics.load(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2);var mainThreadWoken=0;if(mainThreadWaitAddress==addr){var loadedAddr=Atomics.compareExchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,mainThreadWaitAddress,0);if(loadedAddr==mainThreadWaitAddress){--count;mainThreadWoken=1;if(count<=0)return 1}}var ret=Atomics.notify(GROWABLE_HEAP_I32(),addr>>2,count);if(ret>=0)return ret+mainThreadWoken;throw"Atomics.notify returned an unexpected value "+ret}Module["_emscripten_futex_wake"]=_emscripten_futex_wake;function killThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! killThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in killThread!";GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var pthread=PThread.pthreads[pthread_ptr];pthread.worker.terminate();PThread.freeThreadData(pthread);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(pthread.worker),1);pthread.worker.pthread=undefined}function cancelThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cancelThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cancelThread!";var pthread=PThread.pthreads[pthread_ptr];pthread.worker.postMessage({"cmd":"cancel"})}function cleanupThread(pthread_ptr){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!pthread_ptr)throw"Internal Error! Null pthread_ptr in cleanupThread!";var pthread=PThread.pthreads[pthread_ptr];if(pthread){GROWABLE_HEAP_I32()[pthread_ptr+12>>2]=0;var worker=pthread.worker;PThread.returnWorkerToPool(worker)}}var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],initMainThreadBlock:function(){var pthreadPoolSize=1;for(var i=0;i>2]=tb;var headPtr=tb+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var tlsMemory=_malloc(512);for(var i=0;i<128;++i)GROWABLE_HEAP_U32()[tlsMemory/4+i]=0;Atomics.store(GROWABLE_HEAP_U32(),tb+100>>2,tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tb+40>>2,tb);__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1);_emscripten_register_main_browser_thread_id(tb)},initWorker:function(){},pthreads:{},threadExitHandlers:[],runExitHandlers:function(){while(PThread.threadExitHandlers.length>0){PThread.threadExitHandlers.pop()()}___pthread_tsd_run_dtors()},runExitHandlersAndDeinitThread:function(tb,exitCode){Atomics.store(GROWABLE_HEAP_U32(),tb+56>>2,1);Atomics.store(GROWABLE_HEAP_U32(),tb+60>>2,0);PThread.runExitHandlers();Atomics.store(GROWABLE_HEAP_U32(),tb+4>>2,exitCode);Atomics.store(GROWABLE_HEAP_U32(),tb+0>>2,1);_emscripten_futex_wake(tb+0,2147483647);__emscripten_thread_init(0,0,0)},setExitStatus:function(status){EXITSTATUS=status},threadExit:function(exitCode){var tb=_pthread_self();if(tb){PThread.runExitHandlersAndDeinitThread(tb,exitCode);if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exit"})}}},threadCancel:function(){PThread.runExitHandlersAndDeinitThread(_pthread_self(),-1);postMessage({"cmd":"cancelDone"})},terminateAllThreads:function(){for(var t in PThread.pthreads){var pthread=PThread.pthreads[t];if(pthread&&pthread.worker){PThread.returnWorkerToPool(pthread.worker)}}PThread.pthreads={};for(var i=0;i>2];GROWABLE_HEAP_I32()[pthread.threadInfoStruct+100>>2]=0;_free(tlsMemory);_free(pthread.threadInfoStruct)}pthread.threadInfoStruct=0;if(pthread.allocatedOwnStack&&pthread.stackBase)_free(pthread.stackBase);pthread.stackBase=0;if(pthread.worker)pthread.worker.pthread=null},returnWorkerToPool:function(worker){PThread.runWithoutMainThreadQueuedCalls(function(){delete PThread.pthreads[worker.pthread.threadInfoStruct];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);PThread.freeThreadData(worker.pthread);worker.pthread=undefined})},runWithoutMainThreadQueuedCalls:function(func){GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=0;try{func()}finally{GROWABLE_HEAP_I32()[__emscripten_allow_main_runtime_queued_calls>>2]=1}},receiveObjectTransfer:function(data){},threadInit:function(){for(var i in PThread.tlsInitFunctions){PThread.tlsInitFunctions[i]()}},loadWasmModuleToWorker:function(worker,onFinishedLoading){worker.onmessage=function(e){var d=e["data"];var cmd=d["cmd"];if(worker.pthread)PThread.currentProxiedOperationCallerThread=worker.pthread.threadInfoStruct;if(d["targetThread"]&&d["targetThread"]!=_pthread_self()){var thread=PThread.pthreads[d.targetThread];if(thread){thread.worker.postMessage(e.data,d["transferList"])}else{console.error('Internal error! Worker sent a message "'+cmd+'" to target pthread '+d["targetThread"]+", but that thread no longer exists!")}PThread.currentProxiedOperationCallerThread=undefined;return}if(cmd==="processQueuedMainThreadWork"){_emscripten_main_thread_process_queued_calls()}else if(cmd==="spawnThread"){spawnThread(e.data)}else if(cmd==="cleanupThread"){cleanupThread(d["thread"])}else if(cmd==="killThread"){killThread(d["thread"])}else if(cmd==="cancelThread"){cancelThread(d["thread"])}else if(cmd==="loaded"){worker.loaded=true;if(onFinishedLoading)onFinishedLoading(worker);if(worker.runPthread){worker.runPthread();delete worker.runPthread}}else if(cmd==="print"){out("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="printErr"){err("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="alert"){alert("Thread "+d["threadId"]+": "+d["text"])}else if(cmd==="exit"){var detached=worker.pthread&&Atomics.load(GROWABLE_HEAP_U32(),worker.pthread.threadInfoStruct+64>>2);if(detached){PThread.returnWorkerToPool(worker)}}else if(cmd==="exitProcess"){try{exit(d["returnCode"])}catch(e){if(e instanceof ExitStatus)return;throw e}}else if(cmd==="cancelDone"){PThread.returnWorkerToPool(worker)}else if(cmd==="objectTransfer"){PThread.receiveObjectTransfer(e.data)}else if(e.data.target==="setimmediate"){worker.postMessage(e.data)}else{err("worker sent an unknown command "+cmd)}PThread.currentProxiedOperationCallerThread=undefined};worker.onerror=function(e){err("pthread sent an error! "+e.filename+":"+e.lineno+": "+e.message)};if(ENVIRONMENT_IS_NODE){worker.on("message",function(data){worker.onmessage({data:data})});worker.on("error",function(data){worker.onerror(data)});worker.on("exit",function(data){})}worker.postMessage({"cmd":"load","urlOrBlob":Module["mainScriptUrlOrBlob"]||_scriptDir,"wasmMemory":wasmMemory,"wasmModule":wasmModule})},allocateUnusedWorker:function(){var pthreadMainJs=locateFile("ogv-decoder-video-vp9-mt-wasm.worker.js");PThread.unusedWorkers.push(new Worker(pthreadMainJs))},getNewWorker:function(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()},busySpinWait:function(msecs){var t=performance.now()+msecs;while(performance.now()>=2;while(ch=GROWABLE_HEAP_U8()[sigPtr++]){var double=ch<105;if(double&&buf&1)buf++;readAsmConstArgsArray.push(double?GROWABLE_HEAP_F64()[buf++>>1]:GROWABLE_HEAP_I32()[buf]);++buf}return readAsmConstArgsArray}function _emscripten_asm_const_int(code,sigPtr,argbuf){var args=readAsmConstArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)}function _emscripten_check_blocking_allowed(){if(ENVIRONMENT_IS_NODE)return;if(ENVIRONMENT_IS_WORKER)return;warnOnce("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function _emscripten_conditional_set_current_thread_status(expectedStatus,newStatus){}function _emscripten_futex_wait(addr,val,timeout){if(addr<=0||addr>GROWABLE_HEAP_I8().length||addr&3!=0)return-28;if(!ENVIRONMENT_IS_WEB){var ret=Atomics.wait(GROWABLE_HEAP_I32(),addr>>2,val,timeout);if(ret==="timed-out")return-73;if(ret==="not-equal")return-6;if(ret==="ok")return 0;throw"Atomics.wait returned an unexpected value "+ret}else{if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}var tNow=performance.now();var tEnd=tNow+timeout;var lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr);while(1){tNow=performance.now();if(tNow>tEnd){lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);return-73}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,0);if(lastAddr==0){break}_emscripten_main_thread_process_queued_calls();if(Atomics.load(GROWABLE_HEAP_I32(),addr>>2)!=val){return-6}lastAddr=Atomics.exchange(GROWABLE_HEAP_I32(),__emscripten_main_thread_futex>>2,addr)}return 0}}function _emscripten_memcpy_big(dest,src,num){GROWABLE_HEAP_U8().copyWithin(dest,src,src+num)}function _emscripten_num_logical_cores(){if(ENVIRONMENT_IS_NODE)return require("os").cpus().length;return navigator["hardwareConcurrency"]}function _emscripten_proxy_to_main_thread_js(index,sync){var numCallArgs=arguments.length-2;var stack=stackSave();var serializedNumCallArgs=numCallArgs;var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i>3;for(var i=0;i>>16);updateGlobalBufferAndViews(wasmMemory.buffer);return 1}catch(e){}}function _emscripten_resize_heap(requestedSize){var oldSize=GROWABLE_HEAP_U8().length;requestedSize=requestedSize>>>0;if(requestedSize<=oldSize){return false}var maxHeapSize=1073741824;if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=emscripten_realloc_buffer(newSize);if(replacement){return true}}return false}var JSEvents={inEventHandler:0,removeAllEventListeners:function(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners:function(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall:function(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort(function(x,y){return x.precedence>2]=eventTypeId;GROWABLE_HEAP_I32()[varargs+4>>2]=eventData;GROWABLE_HEAP_I32()[varargs+8>>2]=userData;__emscripten_call_on_thread(0,targetThread,637534208,eventHandlerFunc,eventData,varargs);stackRestore(stackTop)},getTargetThreadForEventCallback:function(targetThread){switch(targetThread){case 1:return 0;case 2:return PThread.currentProxiedOperationCallerThread;default:return targetThread}},getNodeNameForTarget:function(target){if(!target)return"";if(target==window)return"#window";if(target==screen)return"#screen";return target&&target.nodeName?target.nodeName:""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function stringToNewUTF8(jsString){var length=lengthBytesUTF8(jsString)+1;var cString=_malloc(length);stringToUTF8(jsString,cString,length);return cString}function _emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height){var stackTop=stackSave();var varargs=stackAlloc(12);var targetCanvasPtr=0;if(targetCanvas){targetCanvasPtr=stringToNewUTF8(targetCanvas)}GROWABLE_HEAP_I32()[varargs>>2]=targetCanvasPtr;GROWABLE_HEAP_I32()[varargs+4>>2]=width;GROWABLE_HEAP_I32()[varargs+8>>2]=height;__emscripten_call_on_thread(0,targetThread,657457152,0,targetCanvasPtr,varargs);stackRestore(stackTop)}function _emscripten_set_offscreencanvas_size_on_target_thread(targetThread,targetCanvas,width,height){targetCanvas=targetCanvas?UTF8ToString(targetCanvas):"";_emscripten_set_offscreencanvas_size_on_target_thread_js(targetThread,targetCanvas,width,height)}function maybeCStringToJsString(cString){return cString>2?UTF8ToString(cString):cString}var specialHTMLTargets=[0,typeof document!=="undefined"?document:0,typeof window!=="undefined"?window:0];function findEventTarget(target){target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!=="undefined"?document.querySelector(target):undefined);return domElement}function findCanvasEventTarget(target){return findEventTarget(target)}function _emscripten_set_canvas_element_size_calling_thread(target,width,height){var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(canvas.canvasSharedPtr){GROWABLE_HEAP_I32()[canvas.canvasSharedPtr>>2]=width;GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+4>>2]=height}if(canvas.offscreenCanvas||!canvas.controlTransferredOffscreen){if(canvas.offscreenCanvas)canvas=canvas.offscreenCanvas;var autoResizeViewport=false;if(canvas.GLctxObject&&canvas.GLctxObject.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else if(canvas.canvasSharedPtr){var targetThread=GROWABLE_HEAP_I32()[canvas.canvasSharedPtr+8>>2];_emscripten_set_offscreencanvas_size_on_target_thread(targetThread,target,width,height);return 1}else{return-4}return 0}function _emscripten_set_canvas_element_size_main_thread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return _emscripten_proxy_to_main_thread_js(1,1,target,width,height);return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}function _emscripten_set_canvas_element_size(target,width,height){var canvas=findCanvasEventTarget(target);if(canvas){return _emscripten_set_canvas_element_size_calling_thread(target,width,height)}else{return _emscripten_set_canvas_element_size_main_thread(target,width,height)}}function _emscripten_set_current_thread_status(newStatus){}function __webgl_enable_ANGLE_instanced_arrays(ctx){var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=function(index,divisor){ext["vertexAttribDivisorANGLE"](index,divisor)};ctx["drawArraysInstanced"]=function(mode,first,count,primcount){ext["drawArraysInstancedANGLE"](mode,first,count,primcount)};ctx["drawElementsInstanced"]=function(mode,count,type,indices,primcount){ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount)};return 1}}function __webgl_enable_OES_vertex_array_object(ctx){var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=function(){return ext["createVertexArrayOES"]()};ctx["deleteVertexArray"]=function(vao){ext["deleteVertexArrayOES"](vao)};ctx["bindVertexArray"]=function(vao){ext["bindVertexArrayOES"](vao)};ctx["isVertexArray"]=function(vao){return ext["isVertexArrayOES"](vao)};return 1}}function __webgl_enable_WEBGL_draw_buffers(ctx){var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=function(n,bufs){ext["drawBuffersWEBGL"](n,bufs)};return 1}}function __webgl_enable_WEBGL_multi_draw(ctx){return!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"))}var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:function(table){var ret=GL.counter++;for(var i=table.length;i>2]:-1;source+=UTF8ToString(GROWABLE_HEAP_I32()[string+i*4>>2],len<0?undefined:len)}return source},createContext:function(canvas,webGLContextAttributes){if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;canvas.getContext=function(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:function(ctx,webGLContextAttributes){var handle=_malloc(8);GROWABLE_HEAP_I32()[handle+4>>2]=_pthread_self();var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault==="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:function(contextHandle){GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:function(contextHandle){return GL.contexts[contextHandle]},deleteContext:function(contextHandle){if(GL.currentContext===GL.contexts[contextHandle])GL.currentContext=null;if(typeof JSEvents==="object")JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas);if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas)GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined;_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:function(context){if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;__webgl_enable_ANGLE_instanced_arrays(GLctx);__webgl_enable_OES_vertex_array_object(GLctx);__webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}__webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(function(ext){if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};var __emscripten_webgl_power_preferences=["default","low-power","high-performance"];function _emscripten_webgl_do_create_context(target,attributes){var a=attributes>>2;var powerPreference=GROWABLE_HEAP_I32()[a+(24>>2)];var contextAttributes={"alpha":!!GROWABLE_HEAP_I32()[a+(0>>2)],"depth":!!GROWABLE_HEAP_I32()[a+(4>>2)],"stencil":!!GROWABLE_HEAP_I32()[a+(8>>2)],"antialias":!!GROWABLE_HEAP_I32()[a+(12>>2)],"premultipliedAlpha":!!GROWABLE_HEAP_I32()[a+(16>>2)],"preserveDrawingBuffer":!!GROWABLE_HEAP_I32()[a+(20>>2)],"powerPreference":__emscripten_webgl_power_preferences[powerPreference],"failIfMajorPerformanceCaveat":!!GROWABLE_HEAP_I32()[a+(28>>2)],majorVersion:GROWABLE_HEAP_I32()[a+(32>>2)],minorVersion:GROWABLE_HEAP_I32()[a+(36>>2)],enableExtensionsByDefault:GROWABLE_HEAP_I32()[a+(40>>2)],explicitSwapControl:GROWABLE_HEAP_I32()[a+(44>>2)],proxyContextToMainThread:GROWABLE_HEAP_I32()[a+(48>>2)],renderViaOffscreenBackBuffer:GROWABLE_HEAP_I32()[a+(52>>2)]};var canvas=findCanvasEventTarget(target);if(!canvas){return 0}if(contextAttributes.explicitSwapControl){return 0}var contextHandle=GL.createContext(canvas,contextAttributes);return contextHandle}function _emscripten_webgl_create_context(a0,a1){return _emscripten_webgl_do_create_context(a0,a1)}function _getTempRet0(){return getTempRet0()}function _ogvjs_callback_async_complete(ret,cpuTime){var callback=Module.callbacks.shift();Module["cpuTime"]+=cpuTime;callback(ret);return}function _ogvjs_callback_frame(bufferY,strideY,bufferCb,strideCb,bufferCr,strideCr,width,height,chromaWidth,chromaHeight,picWidth,picHeight,picX,picY,displayWidth,displayHeight){var heap=wasmMemory.buffer;var format=Module["videoFormat"];function copyAndTrim(arr,buffer,stride,height,picX,picY,picWidth,picHeight,fill){if(trident){var dest64=new Float64Array(arr.buffer);var src64=new Float64Array(heap,buffer,stride*height>>3);dest64.set(src64)}else{arr.set(new Uint8Array(heap,buffer,stride*height))}var x,y,ptr;for(ptr=0,y=0;y0){var next=recycled.shift(),format=next["format"];if(format["width"]===width&&format["height"]===height&&format["chromaWidth"]===chromaWidth&&format["chromaHeight"]===chromaHeight&&format["cropLeft"]===picX&&format["cropTop"]===picY&&format["cropWidth"]===picWidth&&format["cropHeight"]===picHeight&&format["displayWidth"]===displayWidth&&format["displayHeight"]===displayHeight&&next["y"]["bytes"].length===lenY&&next["u"]["bytes"].length===lenCb&&next["v"]["bytes"].length===lenCr){frame=next;break}}if(!frame){frame={"format":{"width":width,"height":height,"chromaWidth":chromaWidth,"chromaHeight":chromaHeight,"cropLeft":picX,"cropTop":picY,"cropWidth":picWidth,"cropHeight":picHeight,"displayWidth":displayWidth,"displayHeight":displayHeight},"y":{"bytes":new Uint8Array(lenY),"stride":strideY},"u":{"bytes":new Uint8Array(lenCb),"stride":strideCb},"v":{"bytes":new Uint8Array(lenCr),"stride":strideCr}}}copyAndTrim(frame["y"]["bytes"],bufferY,strideY,height,picX,picY,picWidth,picHeight,0);copyAndTrim(frame["u"]["bytes"],bufferCb,strideCb,chromaHeight,chromaPicX,chromaPicY,chromaPicWidth,chromaPicHeight,128);copyAndTrim(frame["v"]["bytes"],bufferCr,strideCr,chromaHeight,chromaPicX,chromaPicY,chromaPicWidth,chromaPicHeight,128);Module["frameBuffer"]=frame}function spawnThread(threadParams){if(ENVIRONMENT_IS_PTHREAD)throw"Internal Error! spawnThread() can only ever be called from main application thread!";var worker=PThread.getNewWorker();if(!worker){return 6}if(worker.pthread!==undefined)throw"Internal error!";if(!threadParams.pthread_ptr)throw"Internal error, no pthread ptr!";PThread.runningWorkers.push(worker);var tlsMemory=_malloc(128*4);for(var i=0;i<128;++i){GROWABLE_HEAP_I32()[tlsMemory+i*4>>2]=0}var stackHigh=threadParams.stackBase+threadParams.stackSize;var pthread=PThread.pthreads[threadParams.pthread_ptr]={worker:worker,stackBase:threadParams.stackBase,stackSize:threadParams.stackSize,allocatedOwnStack:threadParams.allocatedOwnStack,threadInfoStruct:threadParams.pthread_ptr};var tis=pthread.threadInfoStruct>>2;Atomics.store(GROWABLE_HEAP_U32(),tis+(64>>2),threadParams.detached);Atomics.store(GROWABLE_HEAP_U32(),tis+(100>>2),tlsMemory);Atomics.store(GROWABLE_HEAP_U32(),tis+(40>>2),pthread.threadInfoStruct);Atomics.store(GROWABLE_HEAP_U32(),tis+(80>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(76>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104>>2),threadParams.stackSize);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+8>>2),stackHigh);Atomics.store(GROWABLE_HEAP_U32(),tis+(104+12>>2),threadParams.detached);var global_libc=_emscripten_get_global_libc();var global_locale=global_libc+40;Atomics.store(GROWABLE_HEAP_U32(),tis+(172>>2),global_locale);worker.pthread=pthread;var msg={"cmd":"run","start_routine":threadParams.startRoutine,"arg":threadParams.arg,"threadInfoStruct":threadParams.pthread_ptr,"stackBase":threadParams.stackBase,"stackSize":threadParams.stackSize};worker.runPthread=function(){msg.time=performance.now();worker.postMessage(msg,threadParams.transferList)};if(worker.loaded){worker.runPthread();delete worker.runPthread}return 0}function _pthread_create(pthread_ptr,attr,start_routine,arg){if(typeof SharedArrayBuffer==="undefined"){err("Current environment does not support SharedArrayBuffer, pthreads are not available!");return 6}if(!pthread_ptr){err("pthread_create called with a null thread pointer!");return 28}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return _emscripten_sync_run_in_main_thread_4(687865856,pthread_ptr,attr,start_routine,arg)}if(error)return error;var stackSize=0;var stackBase=0;var detached=0;if(attr&&attr!=-1){stackSize=GROWABLE_HEAP_I32()[attr>>2];stackSize+=81920;stackBase=GROWABLE_HEAP_I32()[attr+8>>2];detached=GROWABLE_HEAP_I32()[attr+12>>2]!==0}else{stackSize=2097152}var allocatedOwnStack=stackBase==0;if(allocatedOwnStack){stackBase=_memalign(16,stackSize)}else{stackBase-=stackSize;assert(stackBase>0)}var threadInfoStruct=_malloc(228);for(var i=0;i<228>>2;++i)GROWABLE_HEAP_U32()[(threadInfoStruct>>2)+i]=0;GROWABLE_HEAP_I32()[pthread_ptr>>2]=threadInfoStruct;GROWABLE_HEAP_I32()[threadInfoStruct+12>>2]=threadInfoStruct;var headPtr=threadInfoStruct+152;GROWABLE_HEAP_I32()[headPtr>>2]=headPtr;var threadParams={stackBase:stackBase,stackSize:stackSize,allocatedOwnStack:allocatedOwnStack,detached:detached,startRoutine:start_routine,pthread_ptr:threadInfoStruct,arg:arg,transferList:transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)}function _exit(status){exit(status)}function _pthread_exit(status){if(!ENVIRONMENT_IS_PTHREAD)_exit(status);else PThread.threadExit(status);throw"unwind"}function __pthread_testcancel_js(){if(!ENVIRONMENT_IS_PTHREAD)return;var tb=_pthread_self();if(!tb)return;var cancelDisabled=Atomics.load(GROWABLE_HEAP_U32(),tb+56>>2);if(cancelDisabled)return;var canceled=Atomics.load(GROWABLE_HEAP_U32(),tb+0>>2);if(canceled==2)throw"Canceled!"}function __emscripten_do_pthread_join(thread,status,block){if(!thread){err("pthread_join attempted on a null thread pointer!");return ERRNO_CODES.ESRCH}if(ENVIRONMENT_IS_PTHREAD&&_pthread_self()==thread){err("PThread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}else if(!ENVIRONMENT_IS_PTHREAD&&_emscripten_main_browser_thread_id()==thread){err("Main thread "+thread+" is attempting to join to itself!");return ERRNO_CODES.EDEADLK}var self=GROWABLE_HEAP_I32()[thread+12>>2];if(self!==thread){err("pthread_join attempted on thread "+thread+", which does not point to a valid thread, or does not exist anymore!");return ERRNO_CODES.ESRCH}var detached=Atomics.load(GROWABLE_HEAP_U32(),thread+64>>2);if(detached){err("Attempted to join thread "+thread+", which was already detached!");return ERRNO_CODES.EINVAL}if(block){_emscripten_check_blocking_allowed()}for(;;){var threadStatus=Atomics.load(GROWABLE_HEAP_U32(),thread+0>>2);if(threadStatus==1){var threadExitCode=Atomics.load(GROWABLE_HEAP_U32(),thread+4>>2);if(status)GROWABLE_HEAP_I32()[status>>2]=threadExitCode;Atomics.store(GROWABLE_HEAP_U32(),thread+64>>2,1);if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({"cmd":"cleanupThread","thread":thread});return 0}if(!block){return ERRNO_CODES.EBUSY}__pthread_testcancel_js();if(!ENVIRONMENT_IS_PTHREAD)_emscripten_main_thread_process_queued_calls();_emscripten_futex_wait(thread+0,threadStatus,ENVIRONMENT_IS_PTHREAD?100:1)}}function _pthread_join(thread,status){return __emscripten_do_pthread_join(thread,status,true)}function _setTempRet0(val){setTempRet0(val)}if(!ENVIRONMENT_IS_PTHREAD)PThread.initMainThreadBlock();var GLctx;var proxiedFunctionTable=[null,_emscripten_set_canvas_element_size_main_thread];var asmLibraryArg={"h":___assert_fail,"s":___cxa_thread_atexit,"I":__emscripten_notify_thread_queue,"D":__emscripten_throw_longjmp,"L":_abort,"r":_emscripten_asm_const_int,"E":_emscripten_check_blocking_allowed,"q":_emscripten_conditional_set_current_thread_status,"j":_emscripten_futex_wait,"i":_emscripten_futex_wake,"e":_emscripten_get_now,"B":_emscripten_memcpy_big,"K":_emscripten_num_logical_cores,"F":_emscripten_receive_on_main_thread_js,"C":_emscripten_resize_heap,"G":_emscripten_set_canvas_element_size,"p":_emscripten_set_current_thread_status,"H":_emscripten_webgl_create_context,"b":_getTempRet0,"A":initPthreadsJS,"d":invoke_ii,"f":invoke_iii,"l":invoke_iiii,"o":invoke_iiiii,"u":invoke_iiiiii,"k":invoke_vi,"v":invoke_vii,"g":invoke_viiii,"m":invoke_viiiii,"J":invoke_viiiiii,"t":invoke_viiiiiiii,"a":wasmMemory||Module["wasmMemory"],"x":_ogvjs_callback_async_complete,"y":_ogvjs_callback_frame,"n":_pthread_create,"z":_pthread_exit,"w":_pthread_join,"c":_setTempRet0};var asm=createWasm();var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["M"]).apply(null,arguments)};var _ogv_video_decoder_init=Module["_ogv_video_decoder_init"]=function(){return(_ogv_video_decoder_init=Module["_ogv_video_decoder_init"]=Module["asm"]["N"]).apply(null,arguments)};var _ogv_video_decoder_async=Module["_ogv_video_decoder_async"]=function(){return(_ogv_video_decoder_async=Module["_ogv_video_decoder_async"]=Module["asm"]["O"]).apply(null,arguments)};var _ogv_video_decoder_destroy=Module["_ogv_video_decoder_destroy"]=function(){return(_ogv_video_decoder_destroy=Module["_ogv_video_decoder_destroy"]=Module["asm"]["P"]).apply(null,arguments)};var _ogv_video_decoder_process_header=Module["_ogv_video_decoder_process_header"]=function(){return(_ogv_video_decoder_process_header=Module["_ogv_video_decoder_process_header"]=Module["asm"]["Q"]).apply(null,arguments)};var _ogv_video_decoder_process_frame=Module["_ogv_video_decoder_process_frame"]=function(){return(_ogv_video_decoder_process_frame=Module["_ogv_video_decoder_process_frame"]=Module["asm"]["R"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["T"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["U"]).apply(null,arguments)};var _emscripten_tls_init=Module["_emscripten_tls_init"]=function(){return(_emscripten_tls_init=Module["_emscripten_tls_init"]=Module["asm"]["V"]).apply(null,arguments)};var _emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=function(){return(_emscripten_current_thread_process_queued_calls=Module["_emscripten_current_thread_process_queued_calls"]=Module["asm"]["W"]).apply(null,arguments)};var _emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=function(){return(_emscripten_register_main_browser_thread_id=Module["_emscripten_register_main_browser_thread_id"]=Module["asm"]["X"]).apply(null,arguments)};var _emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=function(){return(_emscripten_main_browser_thread_id=Module["_emscripten_main_browser_thread_id"]=Module["asm"]["Y"]).apply(null,arguments)};var __emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=function(){return(__emscripten_do_dispatch_to_thread=Module["__emscripten_do_dispatch_to_thread"]=Module["asm"]["Z"]).apply(null,arguments)};var _emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=function(){return(_emscripten_sync_run_in_main_thread_4=Module["_emscripten_sync_run_in_main_thread_4"]=Module["asm"]["_"]).apply(null,arguments)};var _emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=function(){return(_emscripten_main_thread_process_queued_calls=Module["_emscripten_main_thread_process_queued_calls"]=Module["asm"]["$"]).apply(null,arguments)};var _pthread_self=Module["_pthread_self"]=function(){return(_pthread_self=Module["_pthread_self"]=Module["asm"]["aa"]).apply(null,arguments)};var _emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=function(){return(_emscripten_run_in_main_runtime_thread_js=Module["_emscripten_run_in_main_runtime_thread_js"]=Module["asm"]["ba"]).apply(null,arguments)};var __emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=function(){return(__emscripten_call_on_thread=Module["__emscripten_call_on_thread"]=Module["asm"]["ca"]).apply(null,arguments)};var __emscripten_thread_init=Module["__emscripten_thread_init"]=function(){return(__emscripten_thread_init=Module["__emscripten_thread_init"]=Module["asm"]["da"]).apply(null,arguments)};var _emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=function(){return(_emscripten_get_global_libc=Module["_emscripten_get_global_libc"]=Module["asm"]["ea"]).apply(null,arguments)};var ___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=function(){return(___pthread_tsd_run_dtors=Module["___pthread_tsd_run_dtors"]=Module["asm"]["fa"]).apply(null,arguments)};var stackSave=Module["stackSave"]=function(){return(stackSave=Module["stackSave"]=Module["asm"]["ga"]).apply(null,arguments)};var stackRestore=Module["stackRestore"]=function(){return(stackRestore=Module["stackRestore"]=Module["asm"]["ha"]).apply(null,arguments)};var stackAlloc=Module["stackAlloc"]=function(){return(stackAlloc=Module["stackAlloc"]=Module["asm"]["ia"]).apply(null,arguments)};var _emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=function(){return(_emscripten_stack_set_limits=Module["_emscripten_stack_set_limits"]=Module["asm"]["ja"]).apply(null,arguments)};var _setThrew=Module["_setThrew"]=function(){return(_setThrew=Module["_setThrew"]=Module["asm"]["ka"]).apply(null,arguments)};var _memalign=Module["_memalign"]=function(){return(_memalign=Module["_memalign"]=Module["asm"]["la"]).apply(null,arguments)};var __emscripten_allow_main_runtime_queued_calls=Module["__emscripten_allow_main_runtime_queued_calls"]=34492;var __emscripten_main_thread_futex=Module["__emscripten_main_thread_futex"]=36088;function invoke_iiiii(index,a1,a2,a3,a4){var sp=stackSave();try{return wasmTable.get(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_vii(index,a1,a2){var sp=stackSave();try{wasmTable.get(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_viiii(index,a1,a2,a3,a4){var sp=stackSave();try{wasmTable.get(index)(a1,a2,a3,a4)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_ii(index,a1){var sp=stackSave();try{return wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_iiiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{return wasmTable.get(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_viiiiiiii(index,a1,a2,a3,a4,a5,a6,a7,a8){var sp=stackSave();try{wasmTable.get(index)(a1,a2,a3,a4,a5,a6,a7,a8)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_iiii(index,a1,a2,a3){var sp=stackSave();try{return wasmTable.get(index)(a1,a2,a3)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_vi(index,a1){var sp=stackSave();try{wasmTable.get(index)(a1)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_iii(index,a1,a2){var sp=stackSave();try{return wasmTable.get(index)(a1,a2)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_viiiii(index,a1,a2,a3,a4,a5){var sp=stackSave();try{wasmTable.get(index)(a1,a2,a3,a4,a5)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6){var sp=stackSave();try{wasmTable.get(index)(a1,a2,a3,a4,a5,a6)}catch(e){stackRestore(sp);if(e!==e+0&&e!=="longjmp")throw e;_setThrew(1,0)}}Module["keepRuntimeAlive"]=keepRuntimeAlive;Module["PThread"]=PThread;Module["PThread"]=PThread;Module["wasmMemory"]=wasmMemory;Module["ExitStatus"]=ExitStatus;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}if(ENVIRONMENT_IS_PTHREAD){readyPromiseResolve(Module);initRuntime();postMessage({"cmd":"loaded"});return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;function exit(status,implicit){EXITSTATUS=status;if(!implicit){if(ENVIRONMENT_IS_PTHREAD){postMessage({"cmd":"exitProcess","returnCode":status});throw new ExitStatus(status)}else{}}if(keepRuntimeAlive()){}else{PThread.terminateAllThreads();exitRuntime();if(Module["onExit"])Module["onExit"](status);ABORT=true}quit_(status,new ExitStatus(status))}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}if(ENVIRONMENT_IS_PTHREAD){noExitRuntime=false;PThread.initWorker()}run();var inputBuffer,inputBufferSize;function reallocInputBuffer(size){if(inputBuffer&&inputBufferSize>=size){return inputBuffer}if(inputBuffer){Module["_free"](inputBuffer)}inputBufferSize=size;inputBuffer=Module["_malloc"](inputBufferSize);return inputBuffer}var getTimestamp;if(typeof performance==="undefined"||typeof performance.now==="undefined"){getTimestamp=Date.now}else{getTimestamp=performance.now.bind(performance)}function time(func){var start=getTimestamp(),ret;ret=func();Module["cpuTime"]+=getTimestamp()-start;return ret}Module["loadedMetadata"]=!!options["videoFormat"];Module["videoFormat"]=options["videoFormat"]||null;Module["frameBuffer"]=null;Module["cpuTime"]=0;Object.defineProperty(Module,"processing",{get:function getProcessing(){return false}});Module["init"]=function(callback){time(function(){Module["_ogv_video_decoder_init"]()});callback()};Module["processHeader"]=function(data,callback){var ret=time(function(){var len=data.byteLength;var buffer=reallocInputBuffer(len);var dest=new Uint8Array(wasmMemory.buffer,buffer,len);dest.set(new Uint8Array(data));return Module["_ogv_video_decoder_process_header"](buffer,len)});callback(ret)};Module.callbacks=[];Module["processFrame"]=function(data,callback){var isAsync=Module["_ogv_video_decoder_async"]();var len=data.byteLength;var buffer=Module["_malloc"](len);function callbackWrapper(ret){Module["_free"](buffer);callback(ret)}if(isAsync){Module.callbacks.push(callbackWrapper)}var ret=time(function(){var dest=new Uint8Array(wasmMemory.buffer,buffer,len);dest.set(new Uint8Array(data));return Module["_ogv_video_decoder_process_frame"](buffer,len)});if(!isAsync){callbackWrapper(ret)}};Module["close"]=function(){};Module["sync"]=function(){var isAsync=Module["_ogv_video_decoder_async"]();if(isAsync){Module.callbacks.push(function(){});time(function(){Module["_ogv_video_decoder_process_frame"](0,0)})}};Module["recycledFrames"]=[];Module["recycleFrame"]=function(frame){var arr=Module["recycledFrames"];arr.push(frame);if(arr.length>16){arr.shift()}};var trident=typeof navigator==="object"&&navigator.userAgent.match(/Trident/); + + + return OGVDecoderVideoVP9MTW.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = OGVDecoderVideoVP9MTW; +else if (typeof define === 'function' && define['amd']) + define([], function() { return OGVDecoderVideoVP9MTW; }); +else if (typeof exports === 'object') + exports["OGVDecoderVideoVP9MTW"] = OGVDecoderVideoVP9MTW; diff --git a/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.wasm b/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.wasm new file mode 100755 index 0000000000000000000000000000000000000000..ac8afbe032e9f7c875ed294ca7c37aa4d064d315 GIT binary patch literal 259755 zcmeFa3!G(FRp)>9KKE7kQFW@j(p~B5q|ZIw2@Rw>O$eQkM5x_kI!^-QD4>5w6T!#a z+o)BkwCF#i3KB6QN<>sZz@W@OIs$)YL}f-sJBo@LC64GY4h{_eh>S8C-w!bPe}8MA zbL-w)Row~VU;m$v-JiPWv0rPiz1G@mt-ba>$!)j4%q2)!;t6yJt>$ld{`IqP+ zxz*VpFH_!?m*mzYxwWoLBzEi?f0A39diUzK$DeMyq?`%=c@ zHuu%ZUVgtOsq_1_NsHgFOB}!d#!?5#BKO0@^Lr}k^82!+$M4tM{Wm1D+<&9hwqki! zt)AQMcP*JG^^RnY-_uEh-*2)yU!I)L{WmB3`27|u81o%>qa1sp(XlC9ltrjAtpHLWjC@`wJa zEd-we0x14)H@*(H`W%8@e zeNpl&&iyNwxGzqg?Y<;=mV06HL(aV@dAoBjPG0HVmnIwDeOdBN?kkhWoja7Q`P*(w z{@nSmx-EIk`Ip?5eAfAw-j@8W^Iv^i@`uiU&27p5a{g;?Oa93Due&Yz-_HM=+mcT^ zKe#RVQ|E`bC4b`lsoRn_xR(E~e&*fYCBb#x>K=6;b8qn9>tF3(<^Rt8rTa7Y$L>?^ z_uVJm@3}|Z|KmR4{-^u6`ycLi-ACPjcfaHQoBN3SukN?queo1$54rDh|HVD*?sKnq zzu|t9r*HUfZePcX54&G*zvO<={kH!t|6%`|{=fJ)`(O0Gtz7mwumrz5iu* zpMRbIF8`hWwf-LeA^)$Ae!-EaoVxCZ-M9K{9`?7q_&5Bwe9O1|i+8xoUicmUHU8WE zz5ZVJLHBL`d;HJ3yZvX}-?+baf93wdb=_S1uRqcIasT)}H?y86hkY%4)}0EqL1>-s zd%b8C^{{?(Z8=Y}i|x5z@8n659`;F*>@hoCmBFi>0Dq)1UhGoM+_8>@MJ71BBzDOM!VFcMhKYm=l1WkZUhvMGkxB*jFe zIAVxxNfD|NA%;ch;4I`=u?3VMwg_3jDQF^7Zqmgz?D=GeA`-(SIi8akYM(b^I5#0| zM~XB5|0Kmm-dq(mo|6=-;r|Dfir~;lF)u}uO%Wr3P|D|uDWJS5k#r1^6h-7VRQRNX z;^!g|TZrPw4coN-x$(ec|NqJJ00Q#=Lvh^RK^(U~S8?1LvB6HN!5Hc7I3=G+I(BS!C&M@Y$RwEkql)3kf}anKfH}Ig+HaKu@uXFgs2qJ>0BKZ!{3Gi~c}w#I zvqfXI-~3!vHupJ_2kJdq3auADoJnr1t)uL@H7cu*E7d^t1k^ZKWNO}sYFzWl%8f>N zFd63c0i50m%fn8%|J7dh2pXAV0&!-VU~)W9Mg;1uLn#L8n}MELDqxDZ(?c%0U+MXM zx}MH!)R%O4E!}XLVvoDqtz4em&`T^Y^=($rH~XY4it$2ztc1>0Nz&>3qIXR*z*^Dl z>dMy2id2B4Yke}x;9*KX>=%lAwHuo#Ep7yacJ2|wN`=x@J|HjRi zY2T;I5J!s&bI(9v3yN?XqMJeCKu0aKKttZVr3a!IAG09QKcuSjA3V`=IvgDLS?BdN z*H}N8glt$e4v`qps2PFWDYF+Q0=J^j^tkVm@qWg-PEJ7(HeTz)eeSbupkQcuQ;_*` z?z!wI%U!uq#)m{BA4+bZFUS3rO3s^>^-#>Z82jU>{$UlMdNhLL{vk)X`=O>J9R6%a zFKdT+dE9@{`DG!8Syrc?p+oYs%AWd&xd3 z1JNpRXucjFW7YJTq8bCL)rCeNU@LIkFNCDStzIQaER9f$>NZb)^r>6&nIX7xp zQ$}>=vv3fc3_%a9>$gMor{VTFt2`^5sz20*JOSF+ja1!GSJ(2|DxL~jy3zQn)|t~_GMuEQ z*~|8IexQ;~Nntf_xD^Trmk9A?fb(H)1s6~+3D51jgI>;|!vw4+}fUg8c z=asZjI0HqU#rlR6Kv2!RNHAW;INUFya*ti;H{R^`*&uWg9Ta6OL@Gk<8{Ocfm?PAN zIjl&B5`0&MaIt?a9Jr%w|FHnect8-0d5ynR#CShY(Z+gg!$1r7yxB7r>I%)q;#qT_ zhN}+=25^FOTQbnIe+?IPUYjDgsXAd8K!bWG_gNC!k6rH*>Y-ysC_pa!&8?`D<9Uo+ zNbGyS&%OluY#Wj!5;b|$2K_WVLi?$3ZD<3*g3*xIhePerNjPqn9}QK*%Be^pVxs&86X&SQik>b>F*^wN z{DD6;YO6CS<_1Nk#0!i0@QYom$QQf9zkhtHqCLtqTkH;h^N9%7u3{m)`8TF=?Hv@0 z%DAUEFZ|dwR$IF`Km5s~Q~A(Tj=Dy%6n^$^V{QA2B)s9GNlc(YTremu9A51%1a)&c zKB;CtA3n6Pek$K3U?=c4m+uard^br82I558{GiyCpBG;DI+D*9U=yjk^QG|VF9TSE zW+EvW6bpmmJV4Mi)XdKtTz}tuA@n z$=l4q8pmDv!tlYOoiFAWaP3SDQbz02VVJ6iWwFUotdU_48Bn(XikTQdGwvD!4|DoK zCKYS|uJx&^8~IH5*tY{?S41=cVw%t9z2Q_tgTm-;E}y5eNO*hlz1(k4dHHUVlGwuj zd>;?JE$z$>iVpB=dT-&3g#32|sg?I)T}gP=^CzKYoMxzH7qw6UeP=!d3mxv5O3;4% zR9Da%giZzm%%JT8XWq_dxu#P%5_Y8xs16Xxj5bwOLI%{590^8qZSGLxxT|&ka<}_} zlIyR5>r3{kp^0u`FXPkwaDByIhv51x>;?9brAOT*AiQL+1;$|udl|cTkuDW`U0yV{ zu-EPZ@}QVgeOJQErA%rS7j2bE7c0{uJYC78!^NJhG7084QF5$UtYlJFJY}m)Vh%p) z^5T45l49Q!zLy3?Wc+!hH;N0xhaQVE;wt3QBfBOC{;A4zad9Br|4=1J^6;roPKleR z4T`5L8ZE0piT;u+!7|07mb6jz4N z{MJ;)XDiopimSpq8djT!xjsEDsIMLr*9?j;7!=QeE}sK6UXafX8RiSaTV5u)DQr$~ z`UUxc@WwYG1ad>-MB0TCoc-{opCP$0)J-HG$Pb1;yqmN`LfAx7J}CNwqR5YgN5A+~ ze$=ouk>Ox|Y52FVrR*^wXCmp)pg590BYf+>BlSu{$wcze{HpK8#(`A(b^)J0ldd#YSY_ATc)=<^Qld5 zd$vw*4eHySUu-kO+*J1#^2ONfQ?@jCQNAxfe@eJs%(D8-To5fb2nm>() z#jR~WCC~E%B%L2+)n)l5JnY*ltR!RdgZUv+=VKqAl^^Hf!Yw^T#Nj13;6yObX`qCgNIMh)nbcPXOh>G?Bx*tG>o zPtPySkC4*0F}^0hg8NIhj`6`kaR^YZ1e94oDQ4h&8||enbLT7!Zb_GHX$)Dsi&`$G zmOW4j^spGwpM_uk-t|e=+k<9h1hH@Hpkz`DFN|oO5BGfSWJxB1m~>zZ?&0TsgF-A( z07K8{T&e=yf#RhV9m)@LCsk)}UT~-B9+P&8jMB(X=({uETtm`h@So0gi%LXW$Em|d zoHV!K#OJM;RNI0{WJE1L4`ohj(k#@xNCOM`(@d>9Z;BE2($Hlz)PfhwVv~H{B7+

J5}s-=dC5Z#ql{sEm$F1FYpO?xY3H=6ku578La%X@#Y5K+ov{S91!UHezJ=7PMWQ zUt~(EX&!qJVbb-CTAq^c=fRY~2@#C$0T+v1WS8XmQ@O8iB~T>cZs5NPxLQ(#+najd zv~q`j7MrYZ84T#7OD%_}gAc>%6!+4RB*FOxAbvS_{ghweC;%=i5_~#@X-PxH(|jW%=BQ`&s^ms< zeev9qmlUusLc^;?;Qm5ruI&g zVx2el*%wD37tqTAufxBOv=mM>@?+rw7>_G5?}0pV4aJeLKtLo5Sz1iAxJq=JAhOdk zw5TP23Eu6Y{KE>TNr(MZ12h&wQtKeyRW6-uiFYlY(H!`9I#_R$ljX(1k-s0M-^ElIJh@Bra@3VPlG`Lx@i#b zw-^XCZ6Kif;L>MJg_Xmzflw`9iUVU9QA7pz+k&9QsxrQ61cG5Y=~p1MM$fLyFa-e<@d$#MF$lQd3IWoK z1;m+>AkKjb7B9-tU=fOiiD`P60;CG>5h~6}51K+EAWvXSrT|e;%>-5ay#SfX+p8c& z>o8haee&Qa;OlJQ)GgvlSgBjYmB>SPTB_*`KtyXbI3y$zRts!c<8mA$S^nlIk|n%0 zdTDFR+4pMcEqwf~UeZg8P2rKZ`s^qo+%F^ZlJMtR)C=#h0=POcoTD_?l?9wS-t;0l zjciXPgUxB`R&wS$-mD>^KKy2HUVW_w*@_xI(-vw%BRoV((ZI{E+7Whl<^G$r3?t!9 zI?GFv4oD?j2~LXn;?<=BLZ@LJydU$69GJPKM)@vdOOd(J&lTB^7s`+GX zg~@_~LmcUdZ2HhW9Wq|31NGC)BL%f9YmHt7e;U_r;aAnZp519sH2LgC&s%$}jv_<0 z@2EN9)m3uDt}2X>u9j|V`cril=MPd-2#}WyoLZj+6eBH3otkiFAhd>J&GnP;KEnoX zdz(mdN~fA$BeHYVP5%Xe2Bgz>s!vk@xDz~JD_*1%bW~g3qKJ@eje_#w~5|~XV6G| zNR#kh>-P;fhiw%UY6Vv923XdPYpL9~dV_Cv6R-=q8Dx{XG z;6k#)sVEiHsqsO6q^ej;d#YdSd64E>5Hh47CAlw`%8V9zPGf{k$x-2RqNEUEg6f%N+CqGlhllwGEL3E8kN~p7nv7E%@iC_ zv(~#t)C`31U8kt^Y`t$CT?sGy`b~_C`=9le1G0XID!xOi# zFC5@j>voh@q(ckZ=CbkFb6Gbr8G}%A2)vDtAFwyb7zcMk0~;H-A;^Q2fsyA5bpeJXoKMUEkr(_PIJra=L<+PPz#5qc zu~LKB^At8fRB5pd(oCrXdCF@IeG9V(B!&wl3z6ikfu39J@QuI#90+2HCyuECI#d2D6#%P<&4~^U) zND;SgiB1BnZjb@SaauJ7yL7lyu;|EQm@W0yO44Mg!IMT>;=qK2t$a&H%;=RQgxg+1 zY|>v#Xf^p@i;2ldJ^(LuNCKn+J4Go%d`LdTj0_Pouj~id9WIr8K(CN|@EB2ynu(s7 zZ6$=Nh!VnhfvQRg(TEa43b*P(Vn{~J&_a|E08VC;5jZj?WP}qtNk))oLPl7EWP~Mv zu39A{&{Up;j3`Biv_1kk1c;)8By9-iIW0w?n&&p-XJV*yoQHzZFeh)~054nii3LG_-fC??tqz`g1v zUP~~%pSt*yJT*|PSt+L#DAhDJs!k$vQlAcQ7*!B(@)H&XDX)Aons zEn}g08YjIKR>fT)mPVCkb-&ciYev+vB$liH6`TatgpIdFmjvYnx>v}Wi8cbu+)X`6 za~nNLw(!Qcq2TWeNp=!GT0eBwhy5v9Ev`MUCpp`^p{HPCT4Q{OWFZiu0-;2dLzu-O8LBA7snbibjmY*54LQ_(9nSh{^j4HVA$5%&i z1gaO}&v+3Xh$I;YX-$U*H-R%ivTT3=(UgQEG;0zFA2EoCnuHX%mrN6W^uMB#+Eyw- z7JyHddaU(|K4_}cZ;M3Z4meAi)zNt+7;Lsl!aZ+eVAM2}XRpHt;GA{6`5-s1HDc1! zYv1OLIa7_6Y!EXDLCiz4{!Fr`;UnBfDUWp0ERoAtHP-Zjg$J}R&_O_%r~^LcZmD3E zTY^Fzv~kpSD@Ks2D_$i~@G!<^`!aaHR*T|IpjlUv2F0d)vQuP zCw60O6;DNM6~op91@v0dtVRKp1Etz`bThV(4Y_Um3?aCLg5b8DP;ngmOkTk6O{$(AYPG2bOyx%8`YhZ@12xxk*Ha$iqf(` zAF7QkCQ4~iGc?)!M~Ml8a7^73DoYzwI@1hNt} zb7fM<6@zKqJTm_T`M3e7*fsT?(KGss%3W!xoYe-5`Ahw7(gw87pIg6!z-FRXn~O~j z09Oll;l)AS8*w5NUuAKYbQBz8sHBM~vHcDJ&E~-!RL)jcIO%BmeYI0%{;0N$U zO*QF`3Y~*qSfLSm@q472wN0U;=BUsi1WloX9x4xlu#-_cf)ORXULlLOElGKJlMe4B zURldCe@_&z@L{QywazYHp~FUa3IS44ZgQ`?r9rq90m-=Gdmi96Ov93BBn|hz%|F$f z{%exY?pu0GS_`4H-BeS}DP&oMS-?yZ&{Cyfqj?G=thK;H_^*q0{||BFhue+25m|EF&iV&3oVvZ+W0(DDSoagDm57P^Lot2 zm?FjLzl&6)D*sd!wmQHy1GMArr+ag2yxlwOGVjDTe}YX4E#xY8ts1 zf!oj71UTqXK*KQ+E5?8+iANGpy@EY%?sW9Ryw>>!t+pm%1I2|fUysNR8)s_LLO}S< zT#y40;EEn)9c`FA@;4N2Df=FzB3hV89V~44?3t2P3iP7{8jO?y;U#;f9N`;YVf(MG zyB4c~3?|}+ZLh@~(}aTp`b<8-vCm;SpTm~~lz2v)0-4y#zWF?PP3Bg}2lzK|9uBl% zqAc^1-UF&vM9&%T2i`!kx1#c}bi<82gY(T*4uv}T-|DcXH4z^jC+C)`1e72S-< zo$(~0m$#Lm3kkC%poWY9V39**XYwv^^zzwkXkeh+6J##f6Rm@kS+c9kL|w?BkwJcv zBQ_OlxO%e_1`=^e6-cU6KAKUbEaGQZOO?b?q1I3?Mxbr!Q^aoB?WtZ3|IvDNwP9-e zUXA)GL>L;ft64|t&uAK%IgNL;ri-K~7pZ+*@cBs{z^egau$Kc7JjeTDPUP8nb?SOJ z*%TS5K=m>fyoOq~B^I2aIqEn!Lze{mWHQ_YRdYru4MM@HFwb_;-WoXtMJn*IYvEAb zDhhE+6nhWSA}~WSX-%;m-tZV5)ZQ8$)FiIXqRcG9Y9g2fvp``mlKIp?aD^5aX7X9? zMC4_VPHjtEh!()>Q=uP(T8lUpAeTVe9j@C2|48AiVX>P2yS{9pqgU4q`x9OX>@Lk((2=sCckc^G&;5|rSaY<4W1sSG?B{|D%#|DtWX9r+UYbe z&1Og1Lr#~%!R&NMcdKvT2PpjW=-c3qnr&W44(hgG;_{P@f zXvuW1&Gk8t`6hjBbA7I6)*(2NcBS3Etj~d?alM<4Gc_vkY$P0_Z{IIhy0_Lcsk=Ec z4O#Fgb#HM4E(zH5Pfalmbth3Td1&u4TP{&*>k64! zrtQHsstV6}=My!zprD8JRG;`hJX-yEo?daPze`Wxgow^QJ0`jJYs3C|=`!^y08!Bk z}B|)*U_T%n)g}{i*lN*<~q5+Y}k? zTi6q}e~}^XQferr!9x4(dHtp(Dd?EJ$b*Tu^_*B9%I&s_5j@-GN!YEWdI=Vs0DUP} z^pNa<$po>lCH7#Sq;ruYJ;$)&h)sj zF|1{QRFBu=K6w!``>1_njY&Gjsh90L=)*_eR8E}P1=2)_VbxAoCcWqO)3{R<;trDq7I zD<$1=`dnKy*^ZjhKU#qo$&fB1GM26b)#(yKN!cuqrL(_Vc7YO=>*SI}x!6u$b(;8L zY6wbK|H-Wkh6KqNp&`7IeYh`YMTuRz|616Pn-%u;+D|K$#jsP$z8si@3+peH3LVVn z^vMcI&edfDV?M{%8YE$8vH;$&g|YyiV->J^?(VVRD8EHn^~4^w?e`Ar1mfTx_WpC}mk~>!tT}k)=q1 zMaas@CCgAXC5^D$8>}%4N!%M8+d~j{fHeE&;HaR}Vf1TNZf1unH)JUs=Q=ka?OaAP z40FV@%f8>mjs9KX7rJ7QMzrd*101=084eJ7mXvYh!XU9V(^2BgRYOx8=wIiH5;y@m zQw$=#2e~X&M}}R*ifG!BD-n}H)@55^s#4Z=e6O5&O{#e*;iOzFlA#ZKTNuu zLp|A-Ne4_u31&Zk!c84*kRsotPS`N$hX|f174=|88`SBvBAMi+fc%iE;aKm_7mKBBE7RnPuR|b7lPRI0Z4@w5>>_op!Hp? ztJ}5$s2Z4k=U<98N{Zt|yOVR!~yTU!?V~StIFIWHb z`fM$6K1Ha?Rr}ZfE0#&ZeSctgQ~-66^1k>C#@OpXWR5^<=MB0SlIx<&F1e1iZ?!0a zk$19}(3j-K!f6^LltULC4UvSm#JWTe;r{YoAsnyt*54-sgf_7>E_D%zc-;<&r2+>* zu;o#F9BB2zIZ6oE`qF86M&u@>TcTd*A(MHaNlgNp^v~0C@xD_(bwWc{5(8yU-N{ z<2}_fN&&*vg?FhTjR4pB(!El$*;B*_SQZ5&I|@t^b4=rLgZT)US}8J#B55so zC+}Sknr5%hXR;r43aJZk`NPO)an6p<1wpY%G0#uGi?%wC+M|){hTf_0DBKGtOM=NO zJ`*RqzkpqVq)T(BjlII3kKQOYGrokf1qI7xiI2Krh^g$liF})HVoON6 zQ63J1u)6F`C(k5inRawu7nhS@CB1IdWN)~q#C9qVvRexe^IS;z&F6G@6Qjh+;2_+~ zYfam157v&b&L7uUwuq;pw9z!$vVawWYHJvTz#*iWFjMrTm7<4Qa94nSc`9bVsSj1; zvuilF7)u4r_p@}_FSAC_)9gxJY*hgOTYxabvxSRR!>evN%o}OT%GI$f9dtyBr+Ig! zP;ezU>`H;ukkJ9uO@4ABcC&9U*E^WlIIJ0q9zzbUvZ(;)IQ#8HWi!|#l$oJS_8O4` zlkC~6&R(R(G-uJI_Ht0Xqv9`;dS{dQ6KwBAYOa2c<|dkWt@VlhJWse!H)uYa?hp($ ziLPxLVHa7|2%}UYt|}ODH-_(wb{H;6Eu#$>|1`5LqQO=sbkWi>7vn#cv=DNfu!Kr_ zTB}Z>Trt!766<6?-Ey;0_$Z_U(MD6y1dGGT_jP|W zZ|PHR9B&i0_&m(|WGsEW5$qVp(uW8}mcG{Ud1015qsXmU`Y<@1ZlBH4j|&%w5zaq| zmcIB*rI=?l8<`VA32g;w6NhrtmWI=V(Be39+DEMF{!;3CCq(p!qC04JgS{77dlsQGU%}}3VH-^X+YKqTLqxRVqcnr4GD#{ zmKz(`TmzdfrR=y93mIA3tils(VAT`7l;bT0;C?q}Id&qe;=`EBS$!z?xnReD3{)TV zuL_Rw_(xSMos2Su_?_b)QJz?B?ND>x)EZdKk4s6u4pcq%JXot#W(ZLHBY9XH;eELW z&Jwi0B_{OZ?v`?N+nb|{92pL=QFz2bpzOxullBWKnR zx)4W5LmYrS)Ge#V5rKn$v}RlGyE2u$YV+|@yPcJRK+J13jlZE z4qm-w;Fq!Y9mfL)jOw*M#~a$ov7B#szV428Pt22(o_x zH}6reF68D>y*ZDYPwVCY=wsDrt)J7uIu8fHPktUh5M}Qalb&!$NZRiFLVA_!^bU@E z5TgA}+C0j^8@7k^u)j~JgdSky86Xy* zVT8Ax>m{%|_!^+{W;l4gcBjyfB;OA^sU7aaMokZBAxhY%dkS%n(@`DVg$Df8kI{t(~BDKn8%6wp|)o;Zbw*g0_u>MSJE*P3(Wly2k{*;mt? z!t|Wsx-qsePQekT6ZK>_R-BSmoHDo87bq>+U7WKV@|-ujbulJc;94<>IKh}iCwd!8 zoX?Fh$-Z=%N?-~GnBnC(D(q2K$V<9Iq%$J<`J(!L{9wekMhw%<7e$D8)JKF!Y#zkb zm?Xrx5g}H|Mu^qJOGO~n!&hr?tB0=YV(Le3J8$z;RhL%zR{Bjvbz*avhEv{#OST+3zZ6zMQ5Yw}N({$UTL5opc9n>HEn zq@(N7eE*Hgv2^{CA~1D;uG86ODa%)?!&@D*^qhm2WBEBmd`e;TkbI899yc+CaVpU| z8i)bYPZ>h)KIn&fkA^U~LwdJnK?qigASC2;SuE#{ z4AOS|$!yqzf0)Z|E~cex#mx;*5#6HozuFyiQ43glwZQaFjE02|EK){&4jC#MGUmKI zWwwSuEo6dz4*Rnqz&^Wq%2@u`qldkSVYNi1IzER#$u; zqWBc$w@a%0g?XI?)bd?@Ff8_%dqO{~2YW<3=9s50K}juG?Mllut@K4smcv%v^E%Rw zZfMJ~VU8(f_w`Hmz>)7jtIG1!c8Y-v;?&Y*T6WA*u`G~jwXLjz`DRd7km=0$xO6by zNT!uT@M(=?;Vx@Lm1s;s3$hzYqIn%TUkB_b-5Y}#XQnG7s=9ywE>73>ggcErwLKtD z3JqsPL2q+Fcj|EO9AoO@n2r~p?4hEl$~t;+SjY30W8WJe+1~WX;>;h7EEL!^YORKM z4glb$5m70$i}AxP4*K@kr%A?X)KB#%m8_b}eV<@A_^3c08TlCAx;rq!INoSzYb!fp ztt&eQP7v0*5z1JYC8se~*am0Q&FqXZ%m8$b35;21P%S}R#Fo$#8=lMeY)@s9g)rwN zM{k2Ic+CzunjQmV?D0`R9{v4V!mnWbc|Jmgsa?v=B0At+CIwa}nPwLWl3=3a zHMDuzTe!65XUrgwbVZFpVsNuBsx?ol5?%Wj6h<2*|>?JaB2ETQFfGL0=j>s2$m8I*Ra)n~26maipOCGzQ!p`5}DKzDQ9 z*;bCNPWW^zXLd{Z6qlCcQ>?gIrfI=ii_Evk5nin?Ul$TO%w7p0a(scA{*5m%_avt^ z8BZ=S>vgB|eM`}kZkqutHc5KR`1d9zA27Ka=m&6$6Vyl+c`2BSgCZ<+E)BO@P>}zt z%p%YI_E}t&g%RH&i>5$pi0N>LEX0M!EOI$--;liOR*PKg+h@Vg6|+EdJ7iIei`Akt zgSW4RD5IE#_1GPoE&%iXF1(9A&G8FD2}d zWp|YYxBL!S%5!m#B%EWuLl#u#*bwKO?~p~OI~y!~WMPLaX#6qD;*ME#V7AqA{*GDB zud;CN_6`ln4{o&(;I~5-Q%}Xy9J9Vd7CSarS@_1w4p}a!8sakqJ7m$x{szl|9kU!D z3+9nx=41uLLr@e!84BF980j1H7`52wY1lv$=Q)dF&YrVlNW|qKiD&rgnI6cbtUf;R zR%zuEZTBA&}r!(afZF2P1F4oT>{S^Ai^>d+qILG5swm$HK1NBlqsK5{YnM?Vg0za94X7z*RcPTziepoWN z)HU>j*X>e=djui4diH-cI>5e`WAX{q*pcUW(&fr{ITkO6<0X%m#dzUV59MSfqJ~K7 z%hSh2k_Mqtk8%VdRYyq4N2LkHmRA3HLP6e0mi?2SQ0h!5EH`XFq3odkB=l-*LK!Cn z5rEjJ^Q%3#TMkbH`4yx{(_;Dt)&ytwnMAlyq-8W3}tu{ZE8fl@;bZD(@k z4f$Pvh_gG7~|s(1%zer38PJ(AO8Z9jiH{ zeA+`Llocab%o$DMGL!vNZw=;BO2OWbE4iX3Gyud{} z)|VYyLVCzC($juYmb@)<53u+Hte(KqPXtRRj#WyJVAG}@trjcmSm0pArx0;lp`Z5Un8$si z(@7G`d=?_5W(b&EIFh8T?vxdk)B0s%fdFdp6YDTY2RmC#9TD54fW;qRZ6$7r4^j=H zv*i=p02VKnIu_A z%SOi28UD7CEJ9GE{RHxXKSw?W?<}IX^VS*PTCd%OT)v;EDqLh*i>>=*EhvAKQ;$mL zFe`RKv|0raeL&Y%(X%Tb!nNyiG4}v6HVwa%46^IR1lp#lQjh@-?t;^~yPGv5 zfXwr(%H>4up2+TfAn)1lto_c}uWBTi>xtA@o34@XJW->5XYF^+epTb&KCv1b(={Hm z8udGSLceqNs~TT}L*x3`J$+IK(xkhf5^14j)lK{z1Aj)PIw;l?6Y$jZFsOt?2-+XL z%E79!&*m#3*rv9X5t^@Ef&`gkM7xIBEQ42JVYF>L$*nxDqY@@}-iisy3?6;XV zQ$ATcp8!>7X$R)p(heU7h<&kk#-BLiWh{-2M)qXwXpqm+4wS#8oyF7O%i5^!8lk$I z;m+#)(=GKPj=>Y*%fge*RwF!V&7dnPDLYVGiUhRzXq2@1Xe6aaYfEG`*@ua??Y(rk?!WB(evh`5%#EGBJRnySndFa z@!Z3Jv_UFWw5B5zx+kura-;9w=I!j}?VN6{AFrRTTQxH_oz7dF?Iu6$uOR{fL2@Ob zYg{gmlIoC5wkTiNn1Dg4aOYF;@<9ndx%{;&EyC8i1J9S9NJ8e^F|ciPn*R}Vdi7E= zSlX?Y_I1>to>X5V zq9BF!yga5L9V8*H*I_g?NU29^C@Qh88UUAdJwjd1>Y@Qvpt_Kzm>D%1vlLa#pXzFL z9#6G?pQ?6Vpb4 zsxRCkV?eN-vBv5e+bcV)+yV5R+QxP!;e|j_aFh^b(h5xLbzKf4-YHP*Rj<7c4U$A<;Q&E~$Nk}Wcgb;oNxb9i%VY8G z^5g#Uc*mh392TNlt~u_nL7Tw^pq?#DC)9D=QQ7tb6w4XiLrE$SXA|rTlAhBn`e*W)2Q&)3><-%8|Ai zRHxPJa0}=NLSTe~Vp+qL%q&)xlT%29WN@A6^hv6Ji+yd#1-=3H7Ok}^=F8UZh`Ay9 zS%|ljDD-WshE6u{%g|Gu!kFLu<8b1h)-ml0x}hz(P;)y>g#ZPnU2Vj;--WhTeQEKH zPGL5@exuaX$TA!dgS1f0kj{j(%_7=@pyQ)(Bco#-r`V__qyU>b=!t5^UN)SuyNS%< zIUE`JaR;LTrBE64jU)VQe49973B-!Pq&gFadm&!+Xg?>^67z8`Pf91N|0=`T8{}l+ z+q;zTWZ*Y832#Nr!8nW*2Tk1?_Z!ofTMvqc7~$|HdXFPGo8NbkA%Uvs&3rRC2u*=$ za#Fj0EC8prYq5#qE2uq!1GZ>4qz0qz)9lNDQAgi&-rI2V>moSDQn`l30(Y3s8eExY z*wh4R6>TE!*&w^7RO_voP7VLE>9 z)D3ta^zhh$P(N; zGLUv*tZ4_fLa*CQE4EpmV@ffnvGq9zi`N*-O0QBEc+CLpqS%1CRFYf}o}F72t$4N( z5XwP6$=ICvwcE!+q)LQNQT< z^r2e-w^{e}v0GAx>BUfSnxHTqyEW#!+Vp5iF7Lb*R|ios7!kEhh>8J4$m}l9-nv=3 z3qm35gIvX~vUg}0_B_vIH|!bbnR)vjfi^VO5L9W{tEmK(ZfZ36r(Neex+cu=Sd=H6 zQls<)JLa^Sf+c~F-{f(AnL1!X`(6#NwINQP4_c4FFzqsYn!Pu7-ZA&$c&PC~k;$ER zn@54tLOjbfQ7z@?=D1Vm;^!jx+#KDIoV7y*%VSM-oY&|eQ&<@?);84gV_qp#lmZ`W zohF{~tf{0l70QUzhAVl;OiFXCskctj`hJuzHi+1l=2WdV+8GdNN7Eba%1UCzV-I6I`_yO*Fl@A^Xe`la2#(Kz#^~G_jn&6# zjBb`RM%CNW81Ie7AjxqWGtp4)@xtvP*0fCSdr;2%2{&c0a2 zsTec~cw@(zY7d0oY#wK7mK$$2MxPsm%lX&^G71He<4lo%Yc%htjx)8k$B#2@O1qjm z%yjcZ0;*2Dj~i7NZp6&$AllTH!%W#_OEezhDjgkW>PCl|GFE^@k7c=yA7+{wU8#Z6 zPL&v`5GM3V42X#gnbqEA29`9PCt7N*ptjZNyvcDyU3dhO!Y@m1nrvr20nx_3D8k61 z&Ov4rzg)gU-%CM)4syK4&P7b^o|)agf*>r`?#$M{FtLA+KDS=ped%&1;{E>KupW<=@AoJRA!DWqw1yq69gGN9bCM2;e zxz273RI7A2@kUJER69`+uxHK9S8+BfzqYxvfAxb*0D~AY6${k9w+ie~OMbQ$vcVi>h=zv&+P2k{BfKSrpYMA_T zX|fJyaf9fbKw!1WgytolL^pVuB=o5vQ!sJNA1pzl zSK1b)b7y>Z%7+Y5U33r-q@g7x51+~=gVEm)ae-yAc58j_6Wy4J@s%#+i}uxzvtr4gycqcBj4xPp8K9(XE&0h3uk8R zvOF6zTxP9Acn>QAyPTA_z22TK8}^^6r|-6>%ZL4E z>FGXuIzH@Q0Zp()T6PzodILS+;nN(X*xv(b%_6CY85L+g2vtoPXqXu9hJTpJiBsY9 z<^wfyndQG7T4gpPTVHj))5a{X~hf1 z7-tukBU=u)ltZjki9hxs59301Bb@0E1X_KquieR9v^ARZHl$T^ww^5Tzek%;pwvBU zn9WuYlr<+I3moh-W@n}KSZh4yY8dqxX#o_#${}YM#k%zJ^CGr5+XWQIKtIHi%qSkU z%D!+5ALf}rcZTUZixs6-#$>fMNjPSI z1K(xRrQMoN?*5%zU z31*uS>+*Rin&5(oCaq=+fbq0M2F|mn=<)~$9|Hh0P(8XCF+I}e3;@A_5rv^d)Iy|Ts8dGQ(Ppiw* z&FsNkBQPf^!zOpP4P_vFqn5F)klI#g%gEerj%P8H5X!U7@g^$$Hc*uF?h~Igw#>XE zHW){V@$T51F`ky{(*z8Yl+84sfAAEM3{xD&If4jd&9Y!ZdebyN zKI0*KpQj^+N(qdLH_=cOJ*5EL>|kNi8FF1iIKq1M{2AorD~wVAOaRX1m*z*GJUARR z^!y0U+;);Mc+S+a85nsC$Wu7k1x*SkjR?q`B=KIT5e*=%G?8=20KPe>Pg~}@_)Y;F z*~#}xrROrFZbErSP1>YB5(x$lN85~9cbEaD~O|F?_PJ`Z?gUMCPuD%w3;1WbPI+jhjXT zW5^U8Fk>2N_US<$d(ad`%sts2)GJz;i{L|=7KuD+avNG`PS65s=(e=b5%`#`W28J@ z*B07ok{>RVq!QEhLX*SRFs3WD`-$5Poc?kL>yziQ8v-7uAuVZko0@h;60m~^koV}FM@Q;oHIRt!V|C>X=Z*>SD(==fs70-iba4z5$LmrPDEr>D>vy1+gOuOjt zt<7RnAsge@+VSK0>?if%m^8Fyc*yPOv!9A@F5Z0eKD~*F|Ix|mJyFAdiut>n`G0yd z|NC9%0_C?&C9#U1*-ZVZsUeV)T3`nxy?&LVv{ zbI@MQt0OowbT|~YNjykt4wqrzpd`F|El?PbyL!aq6(oWuZ^x6dvQT5`r;iszm-Fx} zzJ}q_i4C}_=Y<8GbQKcqfvPZZ>%TsmnwFrAj(KwOKJ(6;8dq-f=eqQdN3flqx*>#C&a`Cl7O|k#4%ed zG0a#^65k3zMme>@NN&T-6KTLut>vx~)n~1c@%PuNGdB`-%2+y~nuW>DZs;xOJDjkL zYF|g&re6$@KDW(x#kAyNAR8`hD8L(p#jScjAL?sFXw}wOgqHXSAOC(oATJ}?(Fh^O zIa@C#-Ty|<;ca|)PIh2P%L+W0cNjF`(L`%zKi2fkyPBFbwYfq+i}w_DeQDC(5G8Zs zkAC;3|4M&fe|OQ)_i!xXn6h4ZPtm#}3!ZRU!UmlW7|?D5B6ckA6n`-(J= zP2H%9uV??&cNZ(GMK2zc&<%g|yXi_X7tc>11Lq-J>RwP}M4%D}7SBh>!lRFqDdXUT zNTCEz>&us|f%Ylz&7c$OInR8S;+-ebSHJqi`nMLfQOjU*gaWpW+&uy@Z{A&X1-iSt zLJE9+_ZTi=^t-P>4y6R6(F()L@)q)P4Ix_SyFBqU2ac>8^#WE{sX#{>@imv&R}Sl1 zsnF{3&dM0lU!1!YJL(~FsoELN){`_%9mJ2NkNSk&ZB=ub0ZN1^DZ?zjN~oO?QE*I6~8SDhF~3OObGP#1UinVw!>*?odMv^{Ln| z!=8KR33ulSckcsLT9J_Y0{X}KoFnuhG=uPVt*>%E?e=-4IB6>*zc%1{kj1nUqHcmYDcc1yIKmORyK7JS25sCH6RERil zPNa$zI%O){l-DOxvrgxCJ+T*BORk~7a%mx+6QVR+5(P2?rZ7e*3%n&auBtQT61043 zH630oMb8fSqLfrd;vtCCA5SaTmCLq!Ht7=FrSsx%FSHSlZp%;W@Z7OxyK)=rsw22NnB<$3nRS6O}Tc8BFY$NWU zBqxxQvx2q%;;_;Yf zAdXSW=rY?zDKC3D6>J8cN9fQrVY>4~DckpcCxVaj)+$Si;Aisf?3P!PQOcZhtnH?T zKaR;Jm;zu?5jYu`VPRQZ$kFQ2C@dM(TEVz%9mXaQDjLKvD+57iG75+=AW8d#sZKWD z+<>xUG0Qke2Bx?u;uu|vYRaN~litijD(BNln}uV=yrMFDOQE(3arkS!- zSCfVBIe;k*UUqfo*POnYiVR~90!p{Oe<~ak!~#Erm&;jbA#92@!Bxg43j18cqX*(= zv#HmDZ4$yAnC;j}RXHFeTon~p9=Bg+Al#?gyF$Ey!~Ig!we7~-PO3oSL%`NK{8rNu zFF^H52u)s&833)to za6pqpFPyS|SmAf&jdz`Bz532PdDq4RB!#`FbEmJ)5u1DMDvqh>!J%Pv(j-qhf8lML zil-MaMQ+hSIv*>y;4?c8I>oX?%|Ll&%c!{I#5x0HP7NPsdHXW$_fxo*(_{Lw>Kj7! z&}MtP;-wNW#J&8XewnuTWZFq8#r@7DTtM8=g)FHwi0QPi4ik7}Hx?#JsHm|fWJBjI zGR@H=v&?*Wye36FA6y!Z$&MV z0s&-DVIX?!axQ)C2s4_zgbNKH=0X@Cvy@hsb1rmizfIB?$C6KpCD~s_$?#NdE=$7G ztYmn)l?<0y$#8^{owt_X2|V-jcy5T>@|a!d1bOR}wzzl0ed|IxqEDADo9+of!>=P0 zzk*T3an;p1#wlt=A3dYr;|`A3QJ^}Q+V)j1a%5edoZAv&PqRL(07Y9{apq0D_v z_lp1G-ag1KVa+|p>ybp^Vcg?PIFjg`QSQ-Dk0dy}b^sU0CxxDR7cg|hBGr)VX>Ud0XQRLrT;{aCYbb z>YTWMFw}GzFw>wV7KA15QB;tG5`$VTiLtcidsMdgNPsLYG3LsMa7Lhxr4?)|LMllV zF&=g5gbAD4Y{cD-B1IKdOlz$SWqt2%KgY*~2oru-jRGtJ|G2-I&Rh{ABd_FCbNcBN zg$*Gq9s~-uy^kmph*)*pPf(0hAo}Hy2nBalGwNm4abYP1L3N zp1qecX26YRn|ioN0l7SZ90zB|XJEpF)zJz!kGck{qL`1aq>?#+Z=2zIyvL8}9K+pGBM)JRo6e?I-KBf-ZC zmNH{DJWW$V+?c0ncLcAYbqeShSAB*_vMma*j-VuTXzEfbbv`Ml6)S#5YEXT zQy{Hi^Vsxjp~DpCLH;QXuy2M>wM4?5l@1pR05xz-lh-d2d*$)t;D(GgFG^Y`n5uDKdwLOA;+VJN8$v1LQbZvlE;s*u0;g35u z>p;Nvf4#iMV9fZ=eo@oiP!#UMSE6UpNoHWqdFFPP1j$E|;cUOQQ2v`;m}|_=&Mq|c z?Ca^m!pwqOSg5JD6a`tc&Dn*{0(o!;yYQRH&6)0Q(EikPxxWBZh;o5H0w)5oOR{0M zmFUy#`|1r;Z90wk0Y%;O#~;{Z5>wuZ+oQX;dSVf+yQg|UIqaTSJ*b9->cI*DO*828 z6?|)(vFFT?RXF*t0g6eCuXebQv)Et|7Yi>yT*1~Ykc36J@PM%M=y%vq=QH-*wS^ON zFXSs13nyy#vg|Z#qDj4d0iIXtMlPgOSvyVNaoGpo@5%?O9hAy7Y60TXrV3hUu9P2U zTR72tA@D4mNL6#oYIeMcwXy(@UCd-AvShTH*V7vjNv!t7`imq@P9*ulD~bgigvbL? zMU=Z68N1i*&7(F6{z-=<30wSveBWY@4X9amlfGz#)P}$y#iqP6Hm8*hBwvICZJK@q zB>h&GGxeMK!V3&47;Xd;D$#o01WuOoN_w@1I)-pi#wgTfFO!e6cxpSm?KiG zoPd*^7f)tzh76WqoCq&wr!+?um=tD%BEx2^(Bru8%nC8=5v*vX+B* zyeXo!Y`3h+KD9ZTQwwVifkL0~cYy3A#QKaX0sp+>xv8+0rZ5iOG76$`wAWmEC3Em` z8yM|;Qh1aQ_#6yK?aJ1kjAaQX zaBb5;R7Dt`iNpYdI)-~DB5zc`W{BHq1kUF_-)*8DNQk0OhlfNRQc~XR=FbxZNUw;B zYmzG<#b&-6+6Jo%Qz(V4sQ^qTn$DT~WAJ;AekDvgtZjJ8IjWX1991dI&1FO?1B=3h zc82^U53*d;!x0MT8^n}oa@0H2f!aiII=Yz?{jg?e6vL{M`a(GjC&v%|9sDVnI|_s2 zPx>=gp%_byHjE2_jT%oOT zXB^*{Of-70+!gL-+X}*UF>4@Y6E>&ql{-S@^*$G`D50Ib37g|;P+$U&yMaxtgw=l-A|~V5VHV=ytZW$0jP_7ADFsH z_^bgUPlURllP1bfoNAjazNt4MH8G-T&=>Nxu)|ETRS5^pP$eoh6v_K8b^~7E4fhTB z%FKt;kj7@nLA^Jij_~QgvIEy4_?ZGK!$dm^OSpHc4D2bX*0&`UZ(0I+O9Iw#Fi4@Q z>dyK+xa{R+n?|5^I9K%ov_?94s6wl1y9S7YAd@^iz?MVTZm7j%!w08nfXwg=PT0@H8V1083A)^r16r3GwFcIfJZ(B ztVBL>1t}1A2&rMAgbleInpz?$5P)*h(U&1%J7DIK*E^Gq4450t!wN*=0!B zW<04!`jR~8oVx%H0ad1Q=hqj&rMmlQJrdwMkPiqdEe7U|Q?`s`nCi2Kur3Y;;b3J( zA`DE~gKcqV-U6Lwo7#7Kan2x$F|`i+cbL6xd=yWKv$sFuZ6VeyP-ZTOlFsohN3Vz- zPW>n+kC`J$ODs*imqsHtz)N_*CR$!$k@T)5|7!U7-A;rqu*0HRSsD^;1T7S~3=PN* z#Rt@fe&tW_nojfvTPvql_J7%a)F<26{<5)bOJmj$awpF2))1fX?9aw!Na1hn4qBEU z+HlDSp%l}>i!KY-;F2#}RJiPEgd#5O?KmzCx#PIxe3da=V*1cwJZI`Gb1yz41a(Ag zs<-S|y@9D5Rflh>UDvaHGb7|He5uL<&x?vg!hDZXqcFd96!woH1gs0!5%XQ`$JuN; zo?@$}p;LiJx7GZNRM?%H@1CRi#fj!|8jgd|QQd9)CFqHXx9z*(1{`(J&Fbi#av4dh6OV!m#1xv(Sby0hPy6x3PAKKv3c-Lxej+f8aly_o zFoHTAb_MT*xB>y#RcMz)E1D&0ThS5=wZ-BHz3U-MUeu5#kR@MJsmKzCaz&Q*Hj*VS zk1^(MpF$(92(nc&H?`5Cz872ey(^aIl_s7FacG_+tTFqeeu|}ySTLiik)5+`)S}%cO`I=0HVO z_9X*Vu`kdO1BI)&9QmC(P;!J716U@|88?R>*=J9$A<`NNB50HxL44r)lyGNgG z?qx0Xkqh<3Rdt7vo`Dr?%klIuV-Dd%o*w2g>0|Tb7U?rS$ldWl?t++N?hIy!fo)&54gjb`ii#`M`sMLqZl9R>U5>W|~QfT`*54M!gkhX0|J0cg= z$0%`d?r6gQMs85W2p~gQ5{<1o#`R%pBe)aa|KZMsAN29EE47 zqwzSy3wWuTm=8*21f!MgV@NJg*sf+Vgvu2&T>@`3Y47Xy-jH4~5wOmn?L>_&ZwOFP zIzWkWBHUxJN+T>`EveYZfx{)pq;V*Frqd=2R{0s|rvZ#Dv9=nyJ%Y;;kH7`sF>q}N z>^&v~?>E84AoszUOvJr_Ze_v9EP2v6_YZpv57s7h|B&vrJ(~Lu#`oy0BG7n}N1Jn* zMhYka<@)wlj**tvSWMEW*fXDC7( zNF!|`46e>u*m$((H54t)Y+Ykjk43lOVd2%y4>t68P6cY$qcmS2X^hK->mi|Fq#m8E zrlG6yKLRFEo%OhBB6PWUnqkG)D_LP$b*tQU!%j~SL$DmdoG+q3A(&IB`IP&y_50HHOJcUz9|IV5A`nWa0=+@jh}DRs)?qJ&nkpf~CPT&n*0%j}-^d2Q9F^m7ut3^+IST9V zzNB7J$PqNHvWaX+yR>?J8VMRjud~E4LkAj3LuA9*Y+kQ{ui#!i(hM0<;zvj*M{2fU znE~qwOpqT+;dKQAsmU5^2oD)rfqonnsv)HXM;)eHEy^xWQ&G0iPt#e#L0egk{>fyf zm^VfOWKw(C!>QMh%a?7)B{ay<*YHm6L)>V%%9uuBvZ`1GlT(c$DBy6JDKiAI#mBay z_Xc9Cle`)Qt5Z#0t6GP0NVb^Yae(MYBmJoI~))(~T@Mm3O=OJ88zpl%GXZ0;cQ+chE1K`X#Z6@9Qea~XFW zz}V#+lOP&?7RI~7<8i>jSCh^uL&H>PmhUi2LnNe;OsKgqa6Zj&k>(@WT)QOZcCu7V z%Nq4^wICEY5`q{Q8aB!s>C7R%V8y*concx(AzP_2Mz9NmPH)-68Gf2f{ljh`UBj}0 z9JYbf_>qk%Ozc?NhHp&6*Zw{mJce!7MytuB>T(QT`L%>RHo5WSg0Wr;sVPKzsInZ> zZ2o?Px-wH@2J)f>YKIaBc{o~cx7$}np=dqNQEC)j5?2RF0`|FP`yR-iSi=5NC~aj) za8cHobkzcDr2-#XrN9-<0-aWC)zU>m1coAYcy-7RNz$m9`$M1{XDFnG~gWE zbe->k5N?m&xD#Xuv|t&clqjuXJ_WntJ;K|Pv^@V}2#b>VMbJpcG|YUu#CrjjT&Lt* z$^#epfF6mJS-4YVvfFrs#gNs32~l1Ll*75S$LgzX>t4vAEW@(l<16A^5By3$!_x|i z*M$d>z?gGW2zq!3OS4Gd5rDL{j~ju=L8ez|>flKG$pMV-)803&07nzuZmiQqsQy@o ztrFVg?w$>4M~G0ly7qLYz(+`vc03*hfuz?M2-5SUL=m8IMS#Z|vH)u6SxUzs5hEl= z+%*(=;gJ;%!&fTW9lp>(ZBLeGU9x^ZrJ%Foatq5}P9@VN`hyWcGWPZEZ7(10ZqTI( z46_v#rHlW?0R`Ep3j^a!GCE#vvWR>r|HAb^k6R|ef&IGjV8Fd(T`I@#MK0MHm_lE3 z8gMd*WD8wWBhqD(QXh8^HQ*e#UHpG6;xh^Ly7q+WH5Zp`P;9c1_`cSp$G{;;l3aUo zjr*F5*teo}(7E&?g<`s{8CFsveGZT!THyKRj}C5yZNlRpyF*y4gI^ zaQ9Mi(mMX z;;Vj8yeZq<&S3U|K<_8;^)a#b_BH*MIv!05hO;&&YkgeLeR;0AsJM z$$sPv0YwCzYGEF?H=*0KS%2DHJa8jq;l>Bl*ZNg!U@-Cq{hbE_)buL;C%B47eto|1 zKrrIIjuNR$%S68TKtNCR^?4%4-Di(aS(y=gj8ArawTi8Sp&dTNs^HJ4{^<1;H4kHp z{6!h=_OmU~G=_@vEz{6*zse2oN8Ru~W$JRQd2Gn(&V*D0;an0uy4hHQn0<*pG3BGc z_#DxX7$AO74)_t0Y$^9S8lmc=A5BmdO`Aq25~J4e12sW=C|l)IJq7cG8z=lPQI9Tr z$)dyR8!iVWE*DVpNkvqr^~{6P(;N;3<}k0(Sk(5f)fSFkRqndM7qtVy1sPs0wx=}S6d=De2hCHJiZ zZ!nTX>};@NyrnTY9&})GU-=T+7^z^R=D%!(9Ubc}K~rT0DYS*_L!^W*;zLwbo5llL)Bppj}E5F12kj`{GlWb+SMrXTSIBw9xc6ZIG zgh!+Ueqt6K29ersgvqd?PXBJZ=2hFp(@59E+v#umAOvD`-yBeY_3ralDN+tjycUc^?R?2R5L~6OV`(B}w;D zZnXy=+J{iY(EyPMRqlUUSmVf69K+kh*(BS<(Ij^ncY|Cq=R`CWNr__&t#BWIVw7t~ zT0_ay{*GM%#v*Y);u`vRP63k5)VCiS88rQQX1O}JN#-Vp2rA%Cq$LCnmo>`+gDry$ zwZaTCT#XVMhLY+19jx;t8Yj0W9sX_JOy9ysdHX;jkOcj=&#r#oduq z`|+4M;x!>C0HuP&mWz#QL|$R}yTr59KVilNQ0Udce_b6#EpFfPvM@`O`jDnR!NTF^5aTog+b8@q^F-rEZ0m&XicV__ zW#!x<(|i^t&tK*Pm#h=aaU?a?oAjaU3#C~Xm^(z{;7F@q_gH4;#J`)b#1=`(r4`HS zQ}5kMjw}TP$0&pgabPFHkyuEqwjJWMSw<~}La#+}T|w=w?lsl}Yo%VsgsEoEbtOG; zav#(u+k6^a;GrR$g)mx3pYQ-qfjcv2jkh+L^%N={(8bpuiF#yxgAC`T!yJ~bgBFGVMWq_ZIXe#*`2q|b*S`Djhix5HI#W+8^cZ0gh`L!DMDnli;n@}uo{ zw6AL4IIG$ittedzoSs=sU~elZoemvz8k<;`q{1ZF8Jye-Aw^PVMcaWv`ubK;#uNws z_JWaH1L-eqmD3zZlV$o@_9EUUK&trwz54)`dJ!Q0J&tj!u@gIk!&^nER4OiF*q~!xp4wXMb`TTPi9&72(yM&+362{8*d4+TsGekE2 zl`mwPT#)_)vRTqESW=KbCMo|&8dC%RvKs!OtKmpd1F7qz<{zoWbMh}seaZ@^>Vf5b z)s^?-S$SaI8V&sgQe!)_>Il;n995(!T#x}Y!OfpszhXhCWvmKRoh*T2mOx#;liU(8 z9UnavI?@Qn1E)oQBg zlqgnbs5&K{sZOLUy}*i$W_3yjG++r(rj{%}AX`!!)Htg;maGxyOF*34Qr*!BSyu(z zR3z#GQTn~+f3N%B1xSkGPy64C{`azxn&DZ&C?Y*ld@dHB=Zep(#piPId153l;aKr` zq4-=XKCc&_*NV^6qj?Dn#pmVX^J4LNq?xDf6`$vd&&A^NYVo;Te4c3KB^)b0FYt-g z_mN`@OTEyI$5MaP_5P@9{ZXgK`pR19kGk9+b+JF{$ar5_z5b|k{ZWhkQCIt;miwbl zO!U=wtUu~Pf7DWc)b;+TYyDBD+kG`I^haIpkGj|&b!4)yEZ(hOIko5dqZa$4uJ%VQ z_eY&r*H`?p{-_H?dGz{JUw|Fwf?Bn>-)-D=#RSGA9b-m>c~`IS-t+KbNx|^ z{ZUu@qn7)lPTba4M zwb&nZwLfaPKkCGEUyaB5qb?BjnU{~ASX^HERP6DqKk9ma)V2Po)3^7Pwa_1Rxj*V+ zf7FppeP#9fqt5k5E%rxU?T=dSk2clOnIY(-S_*PG#1Nk%%rjbVgQap3cfAI@61 z>IyfDGZ0RvM?Q(wCHyvVg30>@O0&)S#&;jGiP9lK*FV{ne+LdWI)Y8gvtJpyA0Qsb z?-UU4c`JZG(YthS!{TmbE)+nVD6EY4PFy-$rF+JtU0VLC>zBt6hH+|B_6CEq8R;DQ zBK1z@)MNU)-u~W}j8~h%o0-lZ4{}izB1W@aN^Xy6BDK#xwja${jka|XGw`N=4b&E7 zFSiIWAFU2YJTh7U!nkm(qakhKA_lKL4vdfOt`cwqX%5@$bxN>~moYy{R=o1uCD=N_ z#?Z|G!%xf@PI7`2KgHVw10~*)3eF6iytD2_}i1) z6@U9|a=VMK6Gi-%WQ*dr%qCktxxetHvz4A~;@@3J{P-orp(6*msP;H8N7|Kb74`v~ z0%CBl7bW4&&0S6xhdDTBka2H=Gw3<|7Zt#5sC#%`g*bpM0eKoJ%h@5{B)*9l7OqSP zI934fBp>P_Ic{js4uGgdvYa^MBX(kT4%bNl5#MrG$}ng@)W$z=&p z381JPXH2sa=n`>g31sLZHCN^|NuxmVWb=8LHD4?4K0%M!>kXP`dTRl}@o* zBCD1qO()ajiVSsJdzE)wZ*`^UrPKN<_)m639!)Bk?HlkoF* z<~tpJ{=4~3mu{h(N5w7gW7`zcG`(%E^LG2j``A0?I@|3VCE(q2oqOziXukW-xy}yz zuFrRO&UNm!@5X%hzPZjW`;PHe_Aa&&&U@KQw4ZQG_}%f0+BnDv+Y`e!#j6 zlDC6UO2UMr@$OFR8$wk{Cnsh1uzCeU!&-$x#*%HODmU6$&Irj4lDA<;pp5HqoKz`R zz<11c-yQU1o-IfF3XcZ!cg+5- zV|iEFQrcZsG=yma`Bx1owMEd3V7#gz@4lM0k;Y`l}u^Kr)HC>@>X*j z+e}j%XR>QnE{~O7<8d$NR{Ca#*&`o60UU)P4mKvq4)!EP`DdkvZA;pq7*Q>Jv~lXS zx!4G9XLq3-c04H59M15{z)h%^r?kh(Cz}CFTMv9kvL1{DI0cYGO2BcpgFED2m&2hx zph)nYKyG8dQohpWGtIuV6#@zso$K3tIPbQ72|8Ncmo|cta1uk-1wiQ6vprBdAUwqF zXwNJ0?;(EutTvTu{BGj!VBc67|6bxz2ad0dZ>YI@6zlgT^ZA0$@@z}O`Lo-Ss0ZD) zCIU{urpsPDa}#L0NNIoNRW~Q0*&}j%TQFMx33Oic2KasGqL)oDU`xc`@ zFZ1`nHzw;TilZu80?-h`m)lZ8I9%gi)Ex{Ehwyk{?~8CA4jsh&LK~Fp1U~f#yWQhl zvFd6snRr5+3L9E`kjK5|YR`v@&J5bRrfJklk9%xg13m7+aOkLRPWzYJx>$PU2hQ;c zL;}AtGDZW+(ot0hvks0BZ2O|LP5`sWPOv3;x7)s0h-?jR`)WU?Zz~$+8>Pk8gG!+)%laz#ux-;NM;#LG%9& z-Sy@kE_|BXT=mU#NyijcCn$r7So;&vj8JATWQD_S_k&rsOewfDz*f&WQL_`qIuT>W zF#`s`fljQw4rMNWEkR+vL(xQrQ6s5gFq;SX74fM$m87r3E0T!ap->*q%^fp$7-cp=8)Xg^dx`Gc{0{#v)B3zw=?=}y z4wpkR=Q3y>;|FmFm_lfJaN1_iE;c$Gu-NIUcn{rZ=G<0olexb4+cv~03^YuB+hnJ0 zlzcuRmUeb?CN+V|I#b9z6E3?$H$G2wlSN}8zamDD#%BUDU-?8cdD#Ynd zJ|2HUW0`q`TXpmtH~Qv=?TbhG11uiuTTw-;py9rTv zt4CD<7V*syDOv;f%^4}00{3l8Q9b}kGpcyqf#I8z=$+;RkZ(3%B=X!3Ue5ZLscHph zFe1ot#<>E_79d-4firFaHvhw$>3kUnXj-;{{(tJVo9j2%-D?rA0EMyxjvg_-%ucu1 zQLqX$nrMWOyA%L9`YOj`qXkNo5@My5He5ok5f%mLq4Ttn=HOaq=d^zR9dzR4KQ z>1l{0>gYgQwaHZa0A;c}(Iku);*>mdSW(@D^}%eqivdfOI8{M$iihIo_vsg@mm!$N z(}BFLFxNP(R)y*E&qORy&gC%~dF^L#&mzN~h|yIo;w=Or0tKPDXR50}s%MSO*?eNk zNcSv?`6F_I#?yHsxp+pGxG!V9fCr#T65`y&4E-pC=DMSLBCzFS$KKDoISvkzu!&l% z#b6Kb4U&8!D$xdBNkmNhZ!{Ask_i-5;;&xy8~X8@HftXv#Sar?3e~~9LQN^{CV{RK z#a5-2&qNfBU>T@nDBGNc zFGqSm9LSd=^K6?Q0d4iVzB%=k}$SzxI1y z8~P-rHLW6C*?9LZ|JM}Phg>UosE6TTh+mZ_DfUUX8fXq34$@b!q8S4>l;U-!2wxvz z`y?KOG2M|9Cn7FlyM_r9mTBMzqp&BsYzZ%gLM&z5BY!9wROQ|yFDaRK8tk#t?cm*r zsukbC0eUQxQ9k9nVtaJt2svbjk_Tyx&>-x#g*FogudF}0C4D_|OrHx~BeW-a zu9?=L?6J}>e-13q{`Yy#)KYU$K%T5dqE50qQI{)uMf}d7?c#@JYKlz(KWZ0t-;{xs zv8(<}tuuUA$YQ5r+HQR6uoaA}k#=p9VG@~K0$hF3HfM4OW(?c9G!%#LtF`a$+FX&k z{Vs7jZQQK}@H$M1?ko2L3G+oKz@$K8}t`S$2U-M%r`<}oMT0oj!5iswbUP-Q_~0)2f%Raua$lPT5# zS#Xr#sa77O*F-FhDFXaz;-5`JWF!Tgzb0p@(~%9Zh8EK}KeUc|WJ7BX#avYs4(b^mdNeTPJ59+9w_(v6hS{W9ffswC ztDmFd6u7B$H0W0(L|8SCcSe{odjP6Bdx4OIZVOG)Z#h&>qx7ed)!J+>t`8o3b0onN zOSyQi0&1^NhlF3*|7L7&Wj1^ z2T;37>D*qeM=I2C&I;w)A-Et-vlVLZz*c)?elN;VS^;r-;d6%HvU0Sggw^^2xIFv-M6;kI@!;}>=YTUhuJ{}`AZ zV7L5)1Q>%FA!w=7Zn4YBT$pYvR=Kd=<`;*4RHk>Qgq?nsj}{%4wI-QYta7BBM|nAz zv3(%e(v*VMnXkUdhN4)Z&dzAj&{32vm4>RnzM-Qu)Gm1y4P|7qnXwx>q^^=9#Dqt2 z=$bVYjqCR4D5g-aBW3bj3o8iQL-9dabK=HV_Lg;g9STL6uEW?AQz^4#b2QpzGhmKr zktBK16`LVq)Nx8uv=!-R2uU`ZA&{t;A>;~myis%IR$P3fPPPZ(cQf?rH zXUskC0<=Kzm!N`NV$$#Hbsw(NR!6N~snKG6`tW%;t0hOFe9URE_!L|zUZ9VFm({fxIikHiI?t77E7sS4h88X2sHD`$9!)ytn&cB5 zCg!+{DV5-c;?>V;EcZnG!qb99DoO2p8vA%{4~nRPWc&=5_Fm&y%BG5U~IBBFxU0)<^~7$c~u zc!TNJlXmFnhMNC5M80uMXH10co-JCDpj2vqOeIfgb$`gYS+^y}pLm9Gi==R-z2Dj! z1yo||Mamv61?|J)2-^}D*zb~>Jkiig

-#O|C0dzGxW_2}cw;L^%L!-B7KzbtvgZ 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�<2Fzs{*I)7Q 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 TWUI~QH)qymi(#8QrETQjzpD=t literal 0 HcmV?d00001 diff --git a/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.worker.js b/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.worker.js new file mode 100644 index 0000000..2eeda30 --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-video-vp9-mt-wasm.worker.js @@ -0,0 +1 @@ +"use strict";var Module={};if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var nodeFS=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(nodeFS.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=function(info,receiveInstance){var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};function moduleLoaded(){}self.onmessage=function(e){try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}OGVDecoderVideoVP9MTW(Module).then(function(instance){Module=instance;moduleLoaded()})}else if(e.data.cmd==="objectTransfer"){Module["PThread"].receiveObjectTransfer(e.data)}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0);var max=e.data.stackBase;var top=e.data.stackBase+e.data.stackSize;Module["establishStackSpace"](top,max);Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["PThread"].threadExit(result)}}catch(ex){if(ex==="Canceled!"){Module["PThread"].threadCancel()}else if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["PThread"].threadExit(ex.status)}}else{Module["PThread"].threadExit(-2);throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["PThread"].threadCancel()}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);throw ex}}; diff --git a/ogvjs-1.8.4/ogv-decoder-video-vp9-wasm.js b/ogvjs-1.8.4/ogv-decoder-video-vp9-wasm.js new file mode 100644 index 0000000..10e730e --- /dev/null +++ b/ogvjs-1.8.4/ogv-decoder-video-vp9-wasm.js @@ -0,0 +1,46 @@ + +var OGVDecoderVideoVP9W = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDecoderVideoVP9W) { + OGVDecoderVideoVP9W = OGVDecoderVideoVP9W || {}; + + +var a;a||(a=typeof OGVDecoderVideoVP9W !== 'undefined' ? OGVDecoderVideoVP9W : {});var aa,n;a.ready=new Promise(function(b,c){aa=b;n=c});var ba=a,p={},q;for(q in a)a.hasOwnProperty(q)&&(p[q]=a[q]);var ca="object"===typeof window,w="function"===typeof importScripts,x="",da,y,z,C,F; +if("object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node)x=w?require("path").dirname(x)+"/":__dirname+"/",da=function(b,c){C||(C=require("fs"));F||(F=require("path"));b=F.normalize(b);return C.readFileSync(b,c?null:"utf8")},z=function(b){b=da(b,!0);b.buffer||(b=new Uint8Array(b));b.buffer||G("Assertion failed: undefined");return b},y=function(b,c,e){C||(C=require("fs"));F||(F=require("path"));b=F.normalize(b);C.readFile(b,function(d,f){d?e(d):c(f.buffer)})}, +1>>=0;if(2147483648=e;e*=2){var d=c*(1+.2/e);d=Math.min(d,b+100663296);d=Math.max(b,d);0>>16);na();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},a:function(){return ja},d:Ja,f:Ka,i:La,g:Ma,e:Na,c:Oa,j:Pa,h:Qa,n:function(b,c,e,d,f,g,h,k,r,u,v,O,T,U,ea,fa){function ha(D, +t,A,ia,ya,za,Ta,Ua,V){if(Ra){var l=new Float64Array(D.buffer);t=new Float64Array(Aa,t,A*ia>>3);l.set(t)}else D.set(new Uint8Array(Aa,t,A*ia));var B;for(t=B=0;t=d||(X&&a._free(X),Xa=d,X=a._malloc(Xa));var f=X;(new Uint8Array(J.buffer,f,d)).set(new Uint8Array(b));return a._ogv_video_decoder_process_header(f,d)});c(e)};a.C=[]; +a.processFrame=function(b,c){function e(k){a._free(g);c(k)}var d=a._ogv_video_decoder_async(),f=b.byteLength,g=a._malloc(f);d&&a.C.push(e);var h=Z(function(){(new Uint8Array(J.buffer,g,f)).set(new Uint8Array(b));return a._ogv_video_decoder_process_frame(g,f)});d||e(h)};a.close=function(){};a.sync=function(){a._ogv_video_decoder_async()&&(a.C.push(function(){}),Z(function(){a._ogv_video_decoder_process_frame(0,0)}))};a.recycledFrames=[]; +a.recycleFrame=function(b){var c=a.recycledFrames;c.push(b);16I1Ro{8`Ip_ZW^X`+Lq$fRDI`>$1WLvTv~{P3Z_s9 z_bO@L^OKTc9O*eW!3iNTG%(PHqSAmfAs=H@?u%~a{`3O>qWj|u z7u*H?M)y1Wg5Vxqsw-#QlBuUibIhH~p~tA@?n>`v>l# z`=)!p^>u&yTmGT@pWOGm?{i=M)$eiN9X}jD5`RbhUGeX_-*dn3{*!yw{ek_dD)W?zi1Hc5$>+a+3-@9LPpK#B(-*ErI{Xgz$_wU^Q?S94ms>^=aE&pHc7u^rKkGcQT{cHEH z+(+F{gScC7*naAb?~HG`^LyR3t9yRI{R{W=?z`R3xu11Ej86x?ey$%Ypq^L!g?rOuS=8&V%t&Y1QgX_tDnw8Q5!*# zW;LrhK*4(~DB@`VfVFxmJ+?I*X#odq0*(tls$^*v4OMjsjIX!)jd@6_6OdFV@WH#` zV+s{M>emd2=%lc{1v04lJ|SaVb=t3O-6NHuY6?A4nSg-zd0YTN6$sKm5hDn!o#XDP z%s~+M>7uMs(1Z{?K@%?&g36U4sLw&*pqVJEZw^5^EHRL-k10}=P|F%?S#>R|tU+3r zBgK*gszw6GvUHjhp=?M|R5mjp#-tdD6h{MMQ&NPgM2LPFI=Boumcs%{(6I2meofGX zK{=+2O@`+S?TSDQ)8u$XVo1Ma#BgOo*o+h#|8f z$wb76Ar$<%928LA3`@ERmK0dzCRF%>nBt3Jh;>+T7!8}${^G{Kbo>9xj{z9u|Bvjr zxdl6JzF2l#9}R=8RD%i9+fpQ7iduaMz8RMMg2?a1%4EjPUor{y{!-a+7=m94jQ|;4 zU+dS4j(EYUNl=cyB!E;)K>m_-q^vGEfwZWu^=mIyWpgi*JW%h^Qm8$T{iW!1dI4q6 zty5TKQmF>2=b^?iL}uhhP~&PZly6l1&qTwlGGL^){IOxnU)+c_A3-B?2oPse6Q&&Z zX%c~Y>rje;`d*+%N_nOt?%a@v-d8*E9zD-xDdj~if~6ZCBinQC0n3*~r#g|PrMz(g zeVd;YS(&_$o>@Zc_9$w#KFfspf;&$!@m0YXQndt-_rr%^xQARu4a?odYJ0AHNWlU zi8?=7Cj*~Mc=TAxD=j*H+ips2g2$QS^tcXjy4G!R-E zb%~KFtVWa}xQ`9;3OyXkpaTUlr7;mVa@AX1^lM>lqeX@FXh{fL617_FvdGuo_8yJ* zhPUi!oQ1aoN8V%5TYP&2 zr_ft+dn7uWs-=V`p^mNlBTMcM1k(CyF;Wc}{nVl4L_&SNhr&S%Ewe^H$67o$^*67>(!SmE*u-HGGDmX){^X1r)0XmB1P;17n8n;#ENr`iDBG zPH`R}j2{!y>jU7) zQ*kh8=!A7CvRlC^LjZX%5MvusVDrc7?kd`qMK`*=G~f%%XY`uVynpd$(V2mdB~Rjk z@14yNQa8GGp7@{mbY!WPkYVromoupt0jN|ry5+p#zj%|StLJV15C8K_x~3BK@{S%+ z-W~WyJ{_MK)zup03xgbE@QrR?zUY6UZ3V^oHvf;Gn<;3g5_R+K{=a-8fVC}O@_+A_ zW>W1Mny>hu{?ky}o;>pJxn>#@h~}#X`M%*D zZXc*y$S|eTC z@mA#xu~e2D!({8_M`fmxYS!?-@pj;Di?F7^PO@&+8O~HW$c+{kvcBLN z2^_U}gA*Vm;+f{bT!m~p43tUJ4&4-G&8%B~Br_OPFNl4rG~_0%X{OMK1n_aOEGlmD zhS=jRZC%{qzM|k0cfu!%0hyu{&J9Q#*?Zv=<$yc@pO_nv^bJh-Mt2D2Pz=Z=SjOCd zGzQUzAC&|0mb^MQAh!?TAo+sIyN%IbaIt!R%{&*oR*9D30wotanD3nDVz3KiJ~!pd zB^T@EFPZ0J2US{@@75#A_srmXWsnC}v8ecJzR&;S7Xw$h9ZvSiZPO%hof2J}@Anr! zR?a^3=yH=$FT6FOq@CUnwyp@Zg`z(h^x zH0Fek6b=cU>b%ft!=#w`WP3B|${KJtWqHYLdf8WGx0D}yXGX#zZII@Oi3Xl!1x$16 zDhX~RLB;ruWEy;%MoOl|2-t$X#Wot7Vc4KK@%mLdD* zFao2>ZY-lC@>=>(ltiXYF4Re7%@OCE7?IKH(2~Z zRFZy~dnI7?hV0AAkZp4az9Bo39WJB$Mm=|Cx0V5i=BelEL4E*0Zv)USfaVSOjATjUbhQK7LEfZ*?aFfAq-HQbm?6d_3|aK? z2K_MVs}3}CLy5&XMU7gIQd%6aQ=7w1oYg~AI)_tuQ=08S?UeG?Wppf;wJc@Vj}_1z zGec|_Ro+aMbw++sz%+lUlR$G)wGi%CnNt^~!yP06BndL4tEO3wrMFl#fAHDP4vlT)*s1a5JSso16k?S!2c%&8sl@{(+C8Dcu?lwd$363-~~ zJtOHXyRHnV%#$>ndONMV9jNP4?VDo_byf{UlME14<~j|EYE#MqN};*nLz-kO+s<3c zTWu>1l^#VS9CK_8d}C(3nTC2xQQDRo>h&ZD8me^FG;0Dvv-QnkE*#;EfCcn9CZTW0 z+^LR|x-)2_fArkvpR3)2=ZwSp@h59j}%JC`G?>8LgwFw|Jf1LsZ%fJYZ z(hE#*@NRI-f*{|kD!oD#B^F8$SZy{CsMNpN9Ze#$s=yAc!lVf<=#_H&`%aL1UI4W&kN&v4n~%(u1T; z0OWb}$qXQJfSRI;KNld4thokKw0@&S@D~n_obxURPQ|?Agq4bU$B8`jCOdp<03zyZ z-oYZ_Mp_KTbl}W_+4?)q$#%biK?9RKY%TR0m(o>Rr%CSR0kaop(CF8~+=dn|H{w&d zTai88!3V_qp!kir$MTDnB-g=W0gwEI%Y2L#6wB~CDy|Mo%91sVv-nBn3k+3=~M((4zIdXONd#WHmxJgurwLVw%_1Br=S36jdZtAkKf z|Av;gdwoQckEt);ks*`_dt?C=5HgDCaooa`nq1T6$`wfZB#yNyp zss~I|4~aw`D47@o&5fra8-71Rn{1rR7qlMGdMt6B!Y0>-vv zBVy`4t&gIjH560L>tW8wdoyp&&lVv_8H(CA=i^mYo4Iv@4y1*msF{0BgD#=9Hos}k z&u?njA#C1l)5s|`7kyJoyL4?zK*iHkrIB@c6Ok8_i*!y;l?=w9Jf(1(3j(V{rIH*$ z->vdvv+0X;{WMrf!P!h{vXVAQfE+E9UuH?X#jQ`IZb^Dha;A?e#?oJZk*~L$>2K2) z-X198eHO8dV+{K{5)CTpida5b+8O^R81sHtF<3P-INnaZOMJkaAhYM($rawkxT4c5 zJRuY!`P_dNqi|Mv03MktPvss6Oog!4uuB0F#}nyJt>w$ZRWRGcTLUgKQ9)UJrj;xa z50gi|RWpN()%!O6M}_S{)_wpdg@|;y*70e%_s0(H?~49ENx3 z9<1sItRmrf1*`H5*aa_S2}L=+pd3tCw8%F?k`-9=g3|A#BbKGmHxN_QC|3)NG3(OqT6&sE0dCw7zbfB1V8=GIIJbY(fd@SrDqm7q1~s5$sIyVrGuICS@I?= zCrd!tlt{w|&;B|jh$?8MB}`>BePJlNj0po=ULoyH3uHeTfNb8^Ax`ca9x;ulI=G64 zxU%rET70eA?1VP7&-otHG&P`djww^la8%MrA@Mmpdh%%W?am>groY|jyJ&GVZm}9l zNui<9OhaupVN){AzuFnYGc?ukM2o?!HC6@$O=1lJOn^bGwHY9BtU>W)u?9icR7cPY z>sB4!bU$U-z|BXBI0&ILG?O%BLx`FaX69{Q1I|`oY?c*wF-jiTJ~Mm_^f0hgn))IV zlC4ru?mrk1Uez)&^9=^LKpx`*E%J)BWV{9!V2w;Z0%eVQxM$9+=)EosENH1tQU{1?xz;^?+5Nrzv#js@~5A=dUic^H&&+Bu~VWp6V1UlQfT%~M$ z@fEDU8;NU7DCC*_76OSw92T;H(U~+N@^!y(PMBK5sK7)%@WRON7|07|4ZpG$++d<- zV$oJ)j)QstL*#dh^3DzU-G5>QH?^|2%8o&>zltWt=qt56QKO`?P=@KO)|oZPQq1Bi z4MiA9FON@1Ley5ML$a_BjONz>M%MxiDdS!nggk9x+&5^Asg?Hq7fhjjI?@O*IW|dx zXdkEOY_p&QB1A7(q1}+FoQV+k2u7&4WwZdtlj@%oERC)fo{ST)ZAbhKvRO85kC%4t zM5xACrwEmyD;{cu+LTH>qCX9mKzSn6K#F5RouFu{4P>lwFioiFoFkqaOGp$P2co3Q z76#oczXP%1g12+Kb?P z=VS5l3%64CBfM-}#Nlxx)h9{OYuW?<##R6H2Y&Sfl?MdCdmbxV^~rY^FB@4aM>0zd z!(>)N8fEqSI!*t~yA8~g%AO9dv|n;Bxesv%3Eb0xS5VC1C}MDQDq;p@;}UXx>fOO6 z2hUS`oqQgl25^SlxTm8*X1q11<9F04h5YX!qN(mXmf;vDYdxXb^d~Jbn{Owf=ON(_O9F0 zrZwP*6rE~2ZONyvpSEjyIK^2EKH2Iv{y>gTB}3)pS~MO`)Vr>azZt&(Auwq|@sNDs zOI-}o{J{aAEp=?sxxi%O!hhTf$1$58#)wSc!#XoJ-xs+)gWoXLd!3oWV%Wh>N zTnMf_qM_7&-->u7!psJoTE~hxwaB)qGA-DDlu>d)As^!~=VGbx-l3@iSi)R#Ad1l%bB2=C$nZ!39(lvWK4O+h&tm+?r~ zL1o5yHT6FaM2{J9l3o*iCO&NxH?hl1GA~1ufhs75R$)5ExJjWkYGvYPwbn+pBDYm5 zETUi;>IE>0z*A#@WmG>aGMm&-7Y4;3b6Cj7cm)W2pySX>q4UBosI&fwM2JN{IhrwQ zhm@C5=Q3c_xv@sBWkc^pR*uFl{4Ro2g)+g*e+GAGHMpI}b1>%wy)q^~E-(@o7=a7P zc7r#N4Dyw%CZ$#AlQ;Dwn&3l*A-wqlh9t5pg#=J0@p{W7=FK0?5c8VO1i;Mf6lU3h z9df~5qe%e;qw~~ay*y{z9dN{~V+J4v8cnI_p4daT6N3ya6zpQI!gL}E(+Ow)|~myc7SM_IAf_RycM4cHtz_|^z>(|4_Sy%PK^D(TpT*)j(q}ci$NH=^H^^B_VpXk@X{KBBi}p&C%6Agl6y{QN4p`K9l6EF~ zrwFD`%c8N^G+@RD8gLXeU{WyfVUaBGP2TmkGVn)WkaSp$p@0n__A8>1*gyO3 z_`29oXPnR8>k1{V4lCYF)RZ!XB+KY;U?%d+JkgBFVi>{MU$knw2}GSj7bOaNfjBio zz)Dlt0{EZ@z;r>LSb+bW`uTp3K?;mV`R-c2Y8l4n&KYQwYUiK-xgj8umhH3xk(w@hDu>uPjy& z{i`fCLtYNGlzm{NFCmFWC}mIsf!7zQ?!#}M{;t@wB_@KkOTUQW|AAXG80FkP$*Y5F zJk%-F7TlU9oX_Gnt>z5^rJx`%VAW#BB%fu~=v~XjOl+Q2Q{$$r8kiElV1x#%&@85y z7D4rVm=;ioW%$t8l%!?lFy)e|IoOW0(5#ZMFa0@(iS_EHTpW!?T%4+k@xff}OEx~l zJEzCTR$M%m3MP~4><9^aK!U;oC5nc{z?02Jh%}jgJvo+P+bbA&Vmh}NxFm`(a0fdR z11EJauZw|O>0;o}${YiyG71}w5UgoaBgB-Ka)iKJG|x57q!lQWymOQpbf|(A20ely zXOvmcWy|QYCAxH?%fK~Fg-ElO=+YFINc>ErQ!0dHo55PprA0`Eu!u2T%Fr=Ims06x z=n_4pAX|=`8PR29)}}d9^;j53s}%aBVpu1ljZNql!KP{FnJ{upw?HZhlV}j)Mluno-As8WrY1S_GScUh=ZLyp68)RwtYT`YoF1a_z*f6 z^Bp%V497pu+X@5Jmy@j^Qz_v z{H`86o;;W*$IV0QHNciUj^hptR^uvASqnan6FJK=&-^wkjtxc{g+mjp z&9lZZ=*znM=%*sBgutS4W2pH@iqC|V*)TUW_EhPnk&6@7%Ng+gPktxliTq=qwl@l( z---E1_y%Kmd^HFLv}RVNc|N*3xC}&hqp7P#e(G7PcTDh~&TWHst=O)u{fz#-p)ApZ zzgWCW+CCIpdtV3;a_g%eaRG?%+zg1791h``5TdoRV7P8LXMK-nW#ydKX0=X>Ay?CJ z_VQQ?-Yi8uq_ADPTf@#K@fQqzEa(lFpfEhQh8|J7DfEzA0llqKZ34YgTo(G{Y;k|| zv5S{B+;I`y3+VtHqO$6BNpw8=%B&WivrTA=g7M#w#WV-uLhlo*NGq&7D=UxQ$`HlD zQi`mSSQ|nTx_~5gO9G#4eI*W){^Hw3XLJ>;Z=h|??4{OdGy0LyNh9+WY>r*GO}{Y ztkw`pyyg!{Av?_eSE@W>R?=nBe6)|=%vcx{U~8Kj6w+W&K%X@`nXCj7FH-Wzv5ZF( zdQ_2F6`9sMoz%p3A}fJmEEV&TL81JD>1sE80`6EdN`pb6j099$GcvhM)^g1VUI7Bi z$|qF;T!K2777oW)b8~-5c zuM|dZ8GK}%lIWf^PQih#mT}pm-tX9wN?2AX*B7X7)^cSfPFSwyOPqvOXCWZtjpF4d zCUqLnx1cRzHZxWgv?XDuz8cY1z+#}SIb&5^61s?XIv4mdyVZzx%x+bFy?8QHM;IJ0 zg3M^#1ewj-t=16Ef+#z`S(b$ao`Eqn8NfXu((X)%CV=znR{LJ5?o zM9oxE8MQDnTeIM*;u|Pt#fXkfsREs~5@r@~&wwi)W~h}SpBp~qi=a^Y7JTZk7P1uBMG@AL1%DKb@{6K_ zcRW_9sMUIV>Y9=!&cC;A^>(sYE}hQ5FMM}1xp;yB7OUB*v!3I5c{ZmW^Q>eVgZ5TM z)Z{(Jb);U+T3P2La<+RiYxLe^i}mmQ-JqypdW9{cQt_Q*o{jQFA*YR5eGx|?A+zl} zXZ$n2sgoAaKbcGdTtj><@_&T72Ow=~J10LNmRv?5T6YhDB07Mmd)ZfOi;XZD3_Y5) zNBW};6s6O64e8+Xlc5a@Rcl^pK9r8vkUqpnu#MAeCzWbb!(SOBD{$b9sdcv!j;Zvh zxxE{TkdSU15^6$I9;IQ!xRqrgt*j?C9kHy_Qh1yIE6Lq!rn~z`3T!9xfpqKs(kH>T zW?tEX{Bh|d?34rlD9JP-V;i7$UbKEU#qAb9U-lg~ncX!-)tYsf4=!%W41Y`%jMtUb zyn}E#@6mtw%DZpsLljwe9a%+RV)0(@_YwwB*3LSTPLzeeHvpImtx2CcPKN4UHH#hf zbiF)c*^F&Tm|tU5rtUU|A{BtctOT{XR{f55XM~fh@AbY;f;0(!Rg7OI7fqBhn@Ql^ z$+i^{Sp%~MSsG;N{mm8yr&lPrcZaH?9VmzNI<|lTKjgkc)!9^#vv8kJb$6(`$`z`c zs^S|=HFyCnI>G>)tANoojjQ=O*oGl*G&O@BDzH}O3y7P*b&qQ3Drvk%7mWFH%+%z< zB2NoFl{i_YXDV`h}Fqp}$y_^DRuWZE7o%;E&^8 zTW}%xCD@ZjmnGLFy}bRnp7p$APtLTk=dpa@acC#;zZMO8hv+($X1UnzlCCr56nTwG zX5M5hPK9fTwU756eLU;fZ`Xbo>{lf+-+MkKrn4oo?THfg+qK^X`&Eg5`us|)&X#zS zm8jqDas4jXuS$Fe2hto0&C~V~ST)Us><}s(`!s>So4_Bsyf*Q`1XhH~gP;=6g2|u^ ztb(`6AR!p{S%OAr-amzA{Odq7!&bu|YZiP#{iy0iHnR8^1=cxcYwD{y^@WAoQd&Kq z09BW%hw1NJJ@{t@z^$IiFLbMkI2gjX9(D3%>cN?2uAb#{pwQ|l->RGd7Q!058T_A} zE0?_h;0aAmc(Uc{5uO-JP$CplG$36G1T_9MN*aF}N$Jz-5?M{RVX7`x?#)~k`XtnK zaJsIk&+hT5&xP{S>Ut{#cbU4_3prO86g!5zBhnpz8aJbSgt;xZ^ef%~GH~Q|3U%TVi1-)83zIV24l}x#<)_a4|@L+r=%nfdG8?27UErC-V zkm)b*7kFV|`8`7rI@d=XPxzUMj{sZ!>={O>Jah$VdUjyaP9_A{oPxfY1QvI{#l4Oa z)DnxkSHa!AwU9CMaND2m5C7fzImaaL{MnACvRz zcr}?o>TqMzlasKzRS}-A(zZ;ysScijC07GGq zBe?f%YDsOv+{WrU=+Y`P#hSzXW+evT(8J8KXG`+Pjl#Q+mr!b0%##tX@DB^6(o~vX zLai2T3bj^8g5gjNRwLAVcCumN7ou8OIFaLE^mvOEfL zal%6|GCb( znyh4UO7K^K0c2X}By2mdgpAf4Z*Jt3WZ_PL4iEo}678zsTxJPqX8RIOEYkj=y_FN##C8hu<9%21*JCulp$%`wy z;W|f~iTd@ni>+y;;VffUCghpzWHG767Pr#C#+t1ZpKKT5+L~7Fo$WW{V`8_m<-q2i zuAsf}{CFj=nnj0&zIFd3lOa`zNunytiSMvx07yR&j6J^QFD~O-y`5eGxw3%O*j~Ir z2O{=_x^hXCZi@T|SzcxR(ab^R(yK*$XfooNun21rk78;Y<@n@8#5*P$cH-E{Wm(x64EoYNE3DE`pU8UBBR7LgryUMg&7;GGh?p^&Z+_SjJ6 z$;#)S`XUY?as}`ke`FoUo@a{IIt1Fi=pyYMMDG@Uva5g@IuPjn9+g;85QPB1v#xg( zz7QV^|Fc#%O=1_}CRawkOpAE(qYJ4Yl2iG__gn3Z?Q#6WCfGH(Qi)j`09u9-ghuP6 zHqf=OxkBYNfAvZ28K50ewwK`)77HW4k?Mm=6tPF|Wa6F0do^&IyiJy97}jNdaCnqH z0&|-Tk*XwniY*b^anX*>VtDt?6^IT4rAy~_L68nkvHsg+ptQn38Pl}}%7|)-nxHAwg~TL=TC5eAA*CMZXq1`2M93mPaWr%*^=yQ0HDX@`NL+0yJlK@j(l zsWvKXps*gGqXabzEC))j94HIx21;GCC{7CYSw_fqJ#36D@hr!P27-+do&9VhLYwYv zjOiCVObBI!%WQ zBRVXjjSkBXFZw7yj*CFbkN-xrV%ydhe0(1iRE6w}&K3gQRZF^~L$alU?sy;5og%gu zbjQ2V9X<;KY_Sy~7aBD3GfdaB-kAI*L&~E-0{N9fssm==(wsI98}#qdVvgwu*3(PA zKlHzW2u@CgMKb^4T)YFqTtO|AWa4z#-q*BR|7=^_x)7gd$>Fh&BF?uRV1dH_Jc|UG zTTzbwcD^q~9*b`HUdlQI>j&=4i66_ve;lcd#FICYf0~z&awlvjEJ(RP^qM}v7oo(D z#t0W!dEDQn&yU6ZJsfz)+f%Ve@jy-G_{(+VyUsBh>KJ+qrHcQR7(yGcuPWbbqJXdB zfH2nOvc0F3Y~|#Nj#JpiadR%)fv*LgU@9oKg1WSx9T}mJ1(X8R;Bdqk>PWUg2{Ef? zlz^cfI8a0ktbRgY^7heqsBkoe!C9%=l7>*Od=wWMa63qqXx&lK+Nm>&UQ#rzok+Zp zA#s$|;#lOk1$V5CF>);O#8iZLsVyyG>=w zqk#~U(_?obLweA-<1gZGiS;rb+j+<}M*|&w?+gbq$e%7fOB3Y~rl4JjdHFiXJhz)X zYP0Xjy@L+Q61XCyDs348ONRZPPY7mr{lHenRaVH$y`Y9R%L{-A`~`|Y=TzQ^416d0 zrWjgDb-3m+h>?a%GP}pcxntpr>J>*D6t@t*I5bbP3=H>%2x~a?5Us*Ngq)R!&`Hi1 z(QJPu8*q1m#_eh$ccpL|c$S_S=;<+2wSb~406E2z_LD~gw7(){hVwUojPXGwu@1UM zqqAtTL=U80I@ARhP{4pu=9aX$BTkmY}2*ChCf-0C1QTSPJtm z&DyX%nt?gM8Rp=1+fOq2;Nt?$i7q5fY#$HEU@bm5W;qd7MK%=eL6M2WsmvdY;$WTf zxdV$7r;qbi979)iW(g?}dBwX%FDU8C2HTZvm&O6eFSsSjfGP=S;ouLk`w~tO#`9_( zZU_ZvfInLpd_%<>!sc2&%Ex})&4HLeis-RKiV!@Hg3C6)BjUF9ZrRw*75dVtFToT9 zU9?CidlZ>E)|c4U(R)ygM}4V}6706{1dfFhD0(pdwB~SV)2K%QHc)8Ut)_*IG2ICm z3*EOf9NIUg%6O(F*sZ12$9=5-jGVku5RG9>>v@}z{v^hzXRea1(8b9NM*0C=j4h^| zfdJ;v#dKJMb^=}c278xiq{W z;hEPlv%*fbSdT>1;-9E2LR3l#roz0SLIeS7lGe^2PjJ+L9!ir!j#r#5XqP@aZS&co zgJH2gm??5j!lP$(!vs{1EIvs~Sg6CX;w00jH|5P4zZ-dL*2H2*em7`*Gk!OO%=z6Q z8NKV>Oq+usrI_ZN(~Z_2D*bQHg?nDL5Fk5Okwg~v&6Bt? z2_3#g5_#xZMcB8tNP=@)NFp=x<`v0OZl%avzIhUH7fYhG;mwoCrQMR~c;d~IXj#>g z;DoY85?K~435J#}l5m(!NFvkb<`p%|B%Cg@MG{%hts;y(TO^SLvLu|=wndUonS^t< zw@4yZX{B(8)fP#lwpbG8(OV?ZY44VVsoxe!I7Tfb!5*{}#3Ck_>HMEe#=bbPeI!aWjOB*E$$k}PkT1g$?L*}Y|w-DMIE``)4= z>0<^9J7Ts-V*01XG^fFDk;G0LRuV40*&@kRWkuYyutgGGUSP27-!h5(DVYCglZn*) za0UhIcZtuj!!jS=SY+zTbUg7JsM>t@0-Lk%p7zBa8xna5{|SANNJ-=HMX2J6FG3ZU z6mj--srVvPacL1}UzhZiggJxCWtj|bj|hv>9ZsRD+CGl!0UVewW-@YytUwHca^ zraA$27|<#O)!Nsk;)_tlRf{S4-s<>JaXJ40!FG3YpFXHSAlKJbApb_-fBLUI~ zBVm>|_tWH9jE;VUt9$slQ$M%s=QjNu)ej2r5qGnGZqm<<`Z=VZ>-BR`KiBH#fPQlQ zWct~sAC6Ht!Y*EZxY+FoH#YFIq#q2XM;uGhM;!K-Bd)EVrhZr)IO6a=IN~s?VPw@$ zw08M_DGkWd-fqp4Qnr3LzVx^)JZ=h)gW-{d2gd>^35N#g!I}dXhH^MK!;^m4`719_DhL!77B&|sTc|$~t(p)hGG~>9AOg@ZYJINbw#zdq zX88!=rHPiNW~?}$r9R&3yrCEgMVti7hn|=-&axuF=}($RGsk9uzdYaA60#tDR!0d- z>M6fAmhi#yz2#@A6Ng0BIV?YpeeAO+@{iJPQyRvQHd;>4ZHYU8#UEgG1eSgRg4myF9jX=xHf`$CQn8XwxRC}N(E<#soFYWIy^O2Zm`{pu z7THz|G40efJ+w*|d0i06Yn@hYLHx|;Wz@t!MV<#NCGRtPaMH)suwC7)W*IW zNYOUvXr+0J#B2l_jm9R%yDfoW@}VJRh8ni$*v*z&*xXipSSc7Yw-?_umaB$BI-19M zO0*QakJ`=A`oO~-a5R%Ps*X+3hjb>A>5_ z5?_XJDH)0*n+Y}R0f~On=1LE$|;lBB=J9wdX1i+N4ggXAAPh1%b6xwNXyzA z(-{8dNfyRvdmFBt4*WUrN9SFJ9T!^~NES9&d5&y^P#HON>KTQ8>N{OtJ&W-gB17tC zwbOQRnZ`inOcr7o4jK|CwRu!k9*jSkGS)&_DXhFG>ywn_tSlXwM*%9UO%AY5Wfr4? z`BPbSxV?nP(fECYq0zt=2wiH{K$E}SwO?fmsptoRPi z@s&~9`te#^J6}WU+eR||EI*Q0ZcVhimJd8WkN^I!|KuO*?+p**$PrkaAcY-0K?SKE*lhu47 zSU5<4#o~y2b>3t7dM$4U3r5dB`y7dSm^Oqc>vP?cP#LMFfTUItJ6~Yjdtf4rRGLG{i3v<;3`Vf(X zn&oN&c@fAfj96pT71*M>DQw|~76`1w7A|=HV?TJIB)gXXr@s|}FA+VxQd+u37MRw4=I1oenV ztgTMk9ZXra+2|A{*OE+TY+#xRT$2hq9ZHhwJ!>ow z0`uf{Cq5L;mMQIHn!JtU6mw-={sc|RkBIV$9ZJ}QY7cN;`+QJ$jbf-^I-$)Drh>vr z%<^QZ^0$KyLP9eSk(l0w%Ag(6atUlA8Eh{-_u!!Dp@njT2*J|eh%aL~wU49(;wnU0 z%1J6t^tKy6f_|yNPq%5C3O%kQ?IOPLkj$!^U0A}-n~B-Rcn+d= z(el~rN&s$L_WUL-TtA>BtZF>h(ypGZH+;2NrKd9jYTckOmn1Z@?ZvGn z_v)m47+J3ma^*^eNBhw4WcLL_Ndunn*e?!Qh=k3dY2(n4_+7Z2+mh*MZ-Gt&Z=KXt zk77&vwR?l&I9N`D!+e*V&s121catq^BFUZIDW-AHaEyJ1Y&oZ0G_8LZ0~U6xXXVns zngUuJxwHrNQ%9uKz+8F1Q(vzuxujHjd&oa}xRe;w&KBM;Vse znY%im{9J^`8y=iwu97N-!&6*Brr5`FgyOM|W)BuZ3#uMQz}jJv^8$z0K~>3cDnyRE zHPsU|65Lqb02Fcb%BO_g*X4=1Bpsv)yvy(nI=IgOY1HbyLJnfu=?>0ujKOjarf}FT za&y+ZUO&SznXHQA{%MT^WXN3$<0wt!Ondk72`Xj9nCl_+r^&jqd+4pn9y%A)sn|M4 zO94(j6t#ZuT6fqkc!MT-^iWfNdN^RKZ@9-y7{dL;!zmbv>p5;+!IzAahU5m8_=_B`K*sl;}ZXv!$|dp?r|fIru)kklpRg}zvahe-w6A>Fzgl0< z*w=w!{~CRL&c3c4_Ftl}&)V0)VgEXP{egX5KkVP2uV?M+(6E14UysN?KEH9;KccUP z?dzst|E2nRt9{)(?0=cQ9d4*R##efa5%%W^P0=m8I(;Z(f-PDr84 z0A)Q>Rm5JXs)-%LP(B37Fp<8|Mci@~LC(t=Cjnam=um=#-hr;vjWT~6jy~jav~}z{ z8|Yk|np2@$ATzE_u`L!lx>7U#w#HkNOF%>S7JV*F2$`f2k2Cx*7*wkM$vyId$}8)A zxybX7e?I%WT7b<#X_B{pjyj7V9JjCKD4aW@G^c zuyW#vT#?H)nh#Wo{iDH`aQbh9NADK?0yC(|}BbynvQqx#$F*3}Xgw*rxSSiU9f7zF1H=B~d5iQz9h**I=kDEd#a~`fX+2Eu6{%b{rq06`I z6zx;cOb!HehJi?|1W5V}YII4DkncKTY!>X!6g?W(fd^4#))6(zoCkrRSYbx~2)oq%9iEFoSh(U47+CR{dq`GK|(XsVj8P^KL5Ic|dDY zpp}!~!XW3CO@|8oeSimpGS@Unr%BgBo(&~cQ( z43{*j6uF@C7q`)3YYnV&Q_`$xt5iWSoAg+lyGp5o2gi;`Wt{+EGA@$a_sb~gmH>xt zAEq^UreoR1OB-@zP7&aMbB|bdo!&9d%@CpS_rTD2QD4%4QD3SiU#C3qysm3n;GQKK z7&k^t)lG?s@g_Rhbogu`I;J{vdZ=259WGIR=*lSHvKPwj@Mk`c_SP;xrb|g#C|nWCa8AYwQL{ZdYsAn4GGtjNH{Q6 z{ibxc1rn}^0Bc}h0L&wxj5E5s8tC%?2Zz@Lx_bd=FuK#ogYM8#X6R1jAnK2GxzIFA zO(lyrAw?{SbCLo^^`$4p{beug`-|=c)(*Gqg|@d|xC$cKJKqaQIr{BXzozuI(dgIq zQ$~MXQw!^bM(73UY?$Ha)iqcsH=Ioj1|vpoH-ZUPvpo}NKr{y)Qs|3C^_vo7A|?p0 z3i{%lgl6k1RcZ%o$5&_2Fd0|TycX$!tPz;glwrc%Z9*9^-=Jk|%A_`B+L~8wCgT$k zDxa-+9| zfN{Tt>_~Rw3kQeYuCLOjTb`S-K_9cL+r%%-7?5XhvJHY1PO1Tr1+iiFPYE9!Y8Ym0 zS6~3#{-I0Kvu&I>&v0yIyQI(a7*aOt$)hSwqKD~QP^kd91jpi-18As%9mw70cZ@~O zeY{#q6uamrD9W&D`i)^T&aNZJ!O)1m(2kWrF-(?(JJGQ$L#kt6Lc6b>z$Zr37lF?L zncD&~w|&Wwxn0P#!8Ga^L#F5eacM2+(}FCtpeBk~c%dz*l(euAz=t$#>3dY=CbUqS zq6Ku&O=+Pe@Z%{`o-AvQc64bLqYyTwuIcz1yZxC+mzvk}pEFdl-Df!<@=9|CkF{w? zO_FRgB4@<@TJS%XuSV7Z83{6ce8Z$a7ztzyh|9UZ83W>ZV*o5o!V;digCT=q0lOH? z*o3u=EO0VTQwX+}p1eCTu65;ClN6V@$*9+Rgah6QX==1b7V;e-9(oP~Qvx}jQU!e|pXQ3qBiv^|KZzfm){8JqL!IA*dPwvJTT`|>| zu;a8N`R6Esq8qc(@#UkF%SUr&6y3_oP~N16MgLvDOe;czXq{m~dznE1XEhAY<~vzT zk%>-g9HAjtP5%luq|LEgP^Ff$I6nab-h)&~R{I=dob6;iQj0?IItwjkC1Mq~-?(y5 zbjLl>-J~Zj7fnxGF4}scp`K{iSmVHkyMXyhAcg*81w#FoEwu8+y&cw>jh@nJJgRsNl<@r#fdDYCa^ z+aO_9epxKx^Oy$1$GAIG<5c!VT)kSN4Q*O#Es9x z8yAIcrE|3U2^;_yon8Z%-Gno@7#^COr#gy9Qo}Z}l1uW3t({!=G#QuUYl?37Z+DK;tuv%@QUW& zD(kmSV&b$Kv&`bb%P|bO_Tl8{|AiX_yRCZ<;NFm}SR#D)*%YlLctoPk$+-c++Ij%L z1SpG@z?r}`sDH)}f+TWcFztHM6{2u@VD=%a+9u8o$6`%TY%niE{8Y{A{vyr|xYo|P zG1S*62K-EUG9a5~gQlGuIJ8H;l7>GHeUhUC6IVIAa^i*-ldR?R*2tRyIjuE(d|^>A zgo-Mz4@yw@Lal~4m5XA_$qW*+>@SCWaZ)*(={oaL(#{XgOde8 z6lS4hYAO>)m{j^ru@!hUDS$UW3aL5#own`A+sXI^)~xwCwSvY2*gD*712t9W;HVvz`H8Ih#PRyu9?YUAHXbL+ z?>fgd$7&_`Ut^LRrh`94b#{(8&lZy;yuhl<-jF8v(SK)gU= zls9w&oqC3Uaoaz3K}d)7>Cwhx9H(CQsXZp9yt)f1jpMq&^!Yy(EDbN3pyRJfpRW7a!QF}GWIsh}#WLGws;c-m7*IG>|BlvK1 zjKsV%t`0{VLIEFG=nhAhiVtq5A;#Qm)NsWVA9xrLBlM7mvmlA#qi8$I4gI3F+c?xu zaLPwQOtigeZI9JVW~O>@3KS2V4h${GXb(L|rF_40mC}nV#f(7{8B*RASIybj#H9&z zK&2kxEarjQgW!fUh%Lwx8T_(rVy|T36KAVf3bgo;#4ZeGA}+@}53<+L1U}e=h_WW1 zJ>E{+9FVN|N2P^Z)Dzp|1rCnIs z)L0J1#N~@sS38;dE7ZaZeLG@@$s$MR!AlRu_cGHXud$6f-I-TXD~O^b{Z_dU6fOW} z#Ct3L8u1UlK#haW!#5z|_@sMD?j1D@!pET0=<9g?Yv4jm$T*Tv0wSV3n?UvUGL`7S zt90QG$PhGw#a>|Q{-&XCzKQ`#O|d^f_hv2xTZToS$QmbkfYYat0veiRClPn4;MA8l z{C-_RSU}Iiv*C(sb^P0ZDb-azv_h~$Be0!&nXNY0m|FM=1mr1(Q1&;(`x zCXCS0EIS{XT_C_^C{eDV|LL?rfDuqi-|!Y4`> zoFBvFg8B3H0l2PW7StULfeF#y)nNg>$+-L)=7`R zdcaV7_vD8zzqXhU;zZxxReoWdZtpBV5Mu2e<%ddGDnBd}(A2!nBjhqtx}Mv1))>Zr z0#NXCj$uSC!H8!N=S#1KS23pRAc@J*(&NI;v)^Gooi*${?WN-jui?b4rQ_+Nm~(ZK z9ktQgS7Y0tY?uO$q&_`I+jS;k+;7XuAs=L=8r1-8$v2l8YOBS8+e^o5uK}K=JFzwkAXUG+HL*l)>~pe&eys3I`kjozwMd_sOl zA^y{KqQq(0Wx|1l3%GFidN0*kwXkdm3`(rYKw;vns37`E*k{c|J&^S4ZO%-qWlOI% zs2FY|n9vR`WHsQ#OkU8Vbs{SEcX8e<+b((2Ev%8I91-Y7TAO2FK#JuPaGLUj+ghC= z1JkAx;f3Vn_9^2|`Ni3qSZ5g&T!vd8uKEq0Z`MKlx(C7JBsNlb<2?bbMZIOsx-MZP zPIIdbc0!w&`h)BhczQ#HfPaGcu4%EjCX7R!^nz#{MJ|(yh4|fP9it6g_#jvhy_~s} zrv7!f?=i7Wdv9SnC8s2>UCW%;X(BD;nl3JJ;pREEpPtMy(lV2!-XYN2>>YaL6WDUD z5t9K^oR}NqIuN5lK_pOsU%H(N)aQ|i9B9qEwkwROvWcoRU*#|;nOosg0RoP875;SS zQX`;lRJ?@41JuE|=RfE1QVj$|)*EPzXhYh`yWHY-0RZm`h`2Ml6+*0K+o5c5s4Z6E9=+F-1U@d(aUONfu}&+o zs4x_PbSgLP9H(R%BQ+#yw5pA|e~-~70|<5w>Po6$OybN0x}yFH4k_i41l0in@hyRF&l&)vVq66&F!xH~>~68fu7-Y0CVhPOW#+ z3ulj2PQrO|XfmjnMS_RrHb3$GRdK=F3&Tl*9z*N%8=BPAWQ5J3ESUjl%aBz@F!Pb`b#O3VKFmuS$eA6T z@bIdvW9QXzy@ot;n%oKS``Bx^69E3yCPWjQhHqoG%G!$&BkN$)Hs=SLRA*s!;|sM_ zHYKq-%SEdRH#%{V+1i>osym1Tm7Bz6Q_67w&p)ss6=rxJ4HgjJjkc|e2|&7L<&>OMob8 z+`;&RTrGKq2|+n38(casVq$q(y%8!PFbdSf(cx0_I(LzN%|G*J;g$lr)-RjpsxHw! zja*Jv(13J%W|`=*v2S5Y&_Gp)G+Ro=RozSyFSN3~MPVM&<jZy7 zp@A%!MotXw<{31Nk|3Gl+u)`&YSaY_MceI0T7o2aO2i@3M_5D9BiA*g4Oi%*WzR0y zCNB%7^hUO*nIz>)JC`pRioywmby=uxO)k5_>au`(PTiv-!O7h+qZHmNb#YK*e0EW= zVGdMq7ofGJCrN8E$F@^Lp$a37P8;j+sK?lalR?a5B& z(C0ek*$y^zP|0elzxyQWq5?43yDYsGWgV)zR`(%VTHv{u_~#~ zeAtR1{o1sCZI$KGRqXS$!DhV)zt>1JUnvF9v8ZExnKhuJ_MxZ&c($RDBlHCgvuc%9 zd;wbzmMjn_LUqY0rd!mk04&329^keCj9SieQN~9A7{05PX9ln;nE=@Owg7mN$TepW z!1VVd8A`Vj73#rVKdh0+NG2N}PZ`|{-KclO>E12AfmTS(5%0w)WRRnpnH}*27D3j( zNgZQbMC%!13`Fq|ycEsSGP!yzr59t!kes8_-GR-O!sX{x0B?k8;T#E0xFNk9Nx<4b zuX`i2XL_@ z3tRx60N1*}!Z8X>fy-*iVYH1|~C3m_O3N7w0vI06;Nv=G^wuD$sD zc#!EDX$;6%k;8S`bUZfC{7l!q!% zqL0#w0!d@4E~*a+6-VmkU^)#=)fQnWiR!Gyx?pa)c)+mYt5aFgT+I)_ni1|=x5aHX zfyT546aWc&Hl~!68K(l3*@sSFUih&?swR zz{p~W9;%}y%mqAabs|hQk}&{+^%35!-V#7zuO%NceS~(&*f9-MhKW7Q3B>q9$x>Mp zG(CS_(;{X^LRlpDG{{i?YwDzgRr6EUWoQbth6zU^AhNWNKt-h_RCVhIiLcJk0+GSC zro$x=0QAvhI2%GqYd5f!N%2^lOIjFVbeKdQSx441ci+6e!W2WR%ftz&gN!r*H*~gI zf09D4o(b z?8$B#mo4&BcTUh?qUO}*JCmNG-@pXKBzO_z)N905lx@T%G8ogP=uX?612#fsbfYL) zRcu1ZUO0pV0xi>JMj$r$5Gy*9E3rDsD=b)@0{L>)29jfXi|A30HB%2rp2aq|n8%wYX+7uc(8y=usU|OSnoM z_ko_#0V9Z#BRC$;AiTv`#UTLyIqry5I7|4DgLKUruAGQ=ToyR4jH`x-@aYStoB1o@0D@Pxnp8WXi_ycRBG&bFtnq!T`1eORDqrzh=99cb4v^<>1W89VlPRO$@ z+rCB!rU?!jgRI!%7yC=JhZVT2^F+SmZI9$Tb$}HXIR(Z3$v+5@irJ;Zo4Rx|raVp+ zBR|Y8_7?#Y{XC1-*L3`pMV=(Hu>U7hQ2^K!%V@Cp zNOq^@?+n$Wvvh^*MgBMuibJ`q>1Ac1=-0MdkJiF&2`sxQ25g3Fo57nLai`&&Jnlsq z;qh9g#XL^J+H^v(9SFxm1Lh)Xh^)4Zu8(tla%Ok8z`71cUn`Zu-UhcvI)aa|uaoj- zZ)a|g5P1sw`r9LE-n_lx_DHAS@OHn>#I(0J-X5X4F;#)!cxZzjQ%xGxh8PdQ)&#S~ zys01J7{s>-E9gqeggpCxO~ZL*V(_BU-ArcM;eP zuN%C|vxCsbc*XoIsN`o3vpdJA;HRmdhJGlXrAi<)#OT^qggc;tDj2aDVma$Bp!cf+ zdSBg_v67W=LpjaiqB^+rFpE#Dp!Y@ngg-D$mp6&ywV{VZ91o^{1%@T`+?0u8nRU;`zo9{pRq1%PBE( zUyqALn)esajpF%e@w`7IdtG?IK9%WYc-$5qH-*Q+@W{erIXrsd!J4V^!3FM;e!0uL zY$wHk4L~x!*s7q~f&?y=&O9 zqpQ#IQhzz&USURgbCBm~+jOGIV3Y#$cH_!Jboqp#fyWPavD2crK4QftW|D1>{iexU zA8U(I&wrr!WEeMB@9ML<*7H9!o#ZFRNft?h(6e5@I?%uYRT%fLVMsT#ojMD8k2ZzP zX&}H8G!O%9QUlSUFR&e)S}^0W0w9)=W%&tqL`8S6Vtd9;OQ2a;r8)v(dEf3e(m%2T z(mS%NO$Xs5?_p4tRU{>Hx%#S>rZ|U!a&3Kq%YfJVwvhym zcdN>gTpFK%wnM|RdWXeC!JqZkBk z595Z%IndNVHxqf92aYKXCf{I=Vy2RF44kXvh{?F*^zISfvTceBYD3C!lUZsz9Rz}8 zyC{dhE=^+|jjm>6Ryw&Iv7-z3$fW_x;8W|vK#na1{KgnW_+s%yd?T|j>BD9^=Zr9T zhx{>^I8z7kP74HUfkCO0ywQB=a_wufTloyeQbN>l*9H(w(qId77=k+3(Zpmla0Ipa z2r#pTT8jE(F^{rsaG??CBVa-IL_{jE00z3#Og(BoJw zf6hHTd9-Zn)`Y7qkgGVnSGB)nE=Ajv$&7?tev$E|X)fv4D7UPWHlJgZVZ6fZiR!n) zICP?H>QpDgoHi?(GNtbEkQ&;YtGWQrsy1yX_Lrhy?vtjru^*E5m9t@Tp2#KMWzpg2 zz5C&#;fgGqbo|5xK1nfub_3W(2cP~@uv%C z;~4I6IC^Bi7*&~{*<%*Z!c0>{^F(;qYfd>NJ3|2L z`6ffa=oB?WLxA&TM6RliA%I75QKwU#nnS5hrb0R_o{5yz$%4jKLx3_hWO+brS-KT) zRyC_U>Wy*;NO8M_jZb_+o-Y3%dv60}*LB_Z-H-P*^XB6L7yttdNZxmeD4-0GkOh$x ziJEh1k^(&JFBqw5O$kO7$y^aUUIb4TLF_KGybDF} z;6R?bzX+Zwg7Zc2dJ()@1dk5pH5@L27mDDyA~@I1^UfB*lSS}&5xiUk7mDD)p}dCu zMeqzk3>)Y6AD*A}-FVFRCSC7My4ss`bhxLk!@WrtdXvueCe4lX)HU0ibh0<;cyH3> z-lT=zq=Tb9U)?`jNf&yP&h;kEjrG(u z+naQYD9MI@z0ayf^7`Z_+|<(!uebFYfP6Iz!ScukJf|d}03cVTxb9N!NRmuJ$G!UDs3B z;ohVRy-DYKljhd<)HU0ibh0-I-*SsPbh$Tap*QK^L{Gu}y-84|=yv)%no=_OKFPu%3j{|h$xmdS((LQtq zTOp?~W#}$|_!l*o);L~S1O$rMC0>o;)8bOde-QgGPEW7wckhsZSRM=z#aA!-Kh9wo z7Y60K|ME|O$e|}uk132juD`47@9Joz+6*36aNZZp%)Q(#F`AuHc6(`oQ~T88yAX`k zXj?ZjV_W*yL~21l$}QrUk5C6ajC9997#DOe8qy&g0`NSA1LK-8RtD_sc>^w5sSLcG zu<|*I;)CH%!Bz@3jDQFjUIB)2iQpx8xZ5Zo9$%;9wb5Dud5C_kfLpv8Ni=Ajm*+_z z=LLF~UMGq4bv#W^`nsuTol9?!MEZtkgVHxlMH`;mRrpT0gPyGC-<_QJacP4uAS8@P z_OOoNv?~)AZrh`(!}wXx4#1t;LlH4rL(3))Lh$6(SOMIKvjDlJz}qQ@bV%29o3sNUVv+2dcyl3jbZQz$82~xHV@A{6nOL&E29;$UtgbH%u3$iWu-OHCDM=*$lgF=uFOS-MuF-nmX=}G(lU680zIap)dq1c zEF=yItOq)KYuI`05cRwVHbhT?FVT~`pi&8h%{!Ja<(KV`j7;bX*g#uuvs4Gdd zP=7d+TTfi=RI4SjWL*+;LML36zVx%VQDJ;rRJX%)yQ5F}I^=R9ZFN4?{(Hmz2Qo^| z;q>Qbx)DGB^-Q+D^C!_ru|&nm84&bu`O1 z6(~`eZn7-B=zZXmvM}GsyW??%p;MK7@<{W37O!9kSgTN|ShUdu!H6WDn#Y#TgDV$R0m8;Qb={&W@vP zg@oGiMj$W2J)SFsdNot)DLjiRJ=`N3)WUYrBXjM6@N&;+m`}vVOa=xhk#?zn1+08 zDjF;AG^^QV+S)gxty6NAr~Dd^yU|)H%m#C>96ER~6oxq1fkd0xl9ZG_J=C%tX^m1u zv~b9S&TFFB2iCE-^tJ$tpuC(`zvn?SSLM%D(ref1&?_{_Mv`wV6LBS{RI2D~@(_j3s{A10qKe^QlVViZ&pQ3wE47z;VoG#IdyD?Cx5$`KiUo78G)|)yyH{f8>g!$! zenX17X>DI_=VIxVAHm`d9vRZwQ4sg3OPVT~UZ6p+-HY0~9=swu!G`FE-R{LgWNUD{ zSLYsur2!&^YB8?6r~Pq1lx;QIE(}~Sy<)ueuyQ~xGfLG2!%-eC*Yd5Vg`yB$=4zTEv_<}I5E?7v|b&^5KYekiRP zXoE#30F*)@?U6zOPiU+I!oCPAbD`#J81uA;G-!+-tWdL9XTJ$%)aI)jTzLV zD1~M)1CRlrbJ#J1Wri3S>@-w64utG2p=Osxnd(=Zk?y{tR93HL)1CSds-q)<#L9<| zjCpONnTbec1i)%?!x9sf;%`+Eg{^?9GP7GcykLnKlXc6VDK3HUfGRE>P zWCSB&F%=7P$3$tWVRto;(g*9jr@1ifXPRUoit@AUeW>032j9&>Tr_$zR4PU4#LAa|DZ~3|zPd2Whu_8mg{DW!gxqZRZV`c+2 zB!g-0CniVt**{8h#U%LIolra7eWd8PUBd7bB)96d`hw)7edzJ^qR6t@KrPS3ebmot zO9HQH8&yqAFPm8&gXHPvbvPNx|C2V%a#pT}iMm64J7%RX7J;^~Lt_?Xo#g8qP;O#e zec?-N6#9tn09qs1L9w_vMql{n`ciX!;o=_GpZC4-+ zyf6`U1BMg3mYFNLTCfn{eWai?7^un|*| z1^8Y)g{wxAU5(1fzdkkcm8`Wv@*QA?r}oisGjmzF}QU{U8~tUw8e zV`fs7;+TD4c^s*{0FKp#V_B@gu^KoQI2_A>sLsJL=D=oKdsPX?JaEj~@eXi| z&XsViUdA!Hnc^57TN1}eHyi^c%Qyz|71Nwe3JWTm@B-yD&r2Yk@Wp0Q#wu>|;9pCG z0NSxfa|I$WPVl+dR0$82CPbI{Tjbn{FzFbhz<97EWj0{`ZvdLbmaYC#JnND}ntt7^ z;JW8qP2meKaq~%|J_!3h@F>Ojb|H?f5S4^TVGpM6AjUB&S3{PRoMHlm?g~1f7Cp(kbYIRi{p2d7vKx zta4$Z7{7H?|JyzF_yB;OophJ*gqbYl2%g zl7?6M0My2Otg4ymfbr838PFoK!NmSqFbNU)kvrDZYbQh7YPS!q_B*M2l_7Jl0zo<} z-#@TiRwaiF#(>hNnd~9_YlviBp=!K{_?_qCI;2T%cZi?!?bmq_nU&bIkmVPr7@y?e%#SG zj#@q|9ze6>6=J!q+OvvT~Gv;dNh=>i$b}9jhg|bCV+J5X=nU za&=`5BdgN4cpaDCV(hyZ$nc|fF@el2Bji4Rtj5Xba7sWUpP}W*WEJ4Uq!X?eOvUPX zCj2weJ~N?Bj=05S$1;|+1j4n>+8Ae8EYOaRIF#=(A-Vyr&*mR>U*PIMhfTpADo}G0 z2GwwiPY!WLS)b6LO~Fw)*IJ)|h?|1b`qp|bml0mjnPz>$e!nTWp)<|;gwJjY4zhz1 z=6V30badxveWFXF=US@UqAcm;%0M3Fnp=XQO9quIgCj$El>U-1Kdc0>tBp4;HJ>A) zW=>}7v{s~nk+-p7bh5$4>nyknv9W0_#_)B}u7l0m;=$Fh^6`9FnU2!1ninYdIX(dL z89t>GZs>P3U_)Tt3y;niZj)!xu=75%KA!+L5v2zHqRz86dt19LX3d_$sLmi3U@4m5 za?U=T1j)BpmYtxtAGd}i%v=dc;3~u`sZ+wR>_5BY0lm66c=~M&q#Dp~Fr&6`l))Sj zA!KTvF1of)^Z;S9G%1~aJyXSDX_gRl*eso|$`%a*|dAQ}DXsdv}0Yqs!W; zFTL)IF*BwSewfzys3NeSjaSC2Aa!-HPow}4SLAFR#eNLw9@3s6x*}Xh3(Q6VR&Mb& zkQDF_%DEZjH$!buWI$wLFz+}LOs&+7B^dmW?@sX4~F>)j8fu1&#+-)3x7x~z#FT$payR1gtkoGUM%O`jM;n* z#=|yWfg{}_G9t_|FUqR>)TG(6D%06QB$CY*2-P!NB|;5tqYeFMtFfs2cJs0{TMgI! zrgguWb)P2T1V~-A*|L{N)9y1Q@4HX;u8IY69bd9am(;t zHx4)>X#0nwE9YfQBAx6w7wVJzP<1hQtWq$vvgua{fKa^o%bUa)x9srdW&&@gwS`mvhzL-)iG7F<=3f;AqAiGdz#(N zQ{WneU{f$3ns;Uf(_S&7vgAyNTv@QwAyQ~riwml1uLZi&?qF~D3dk52F_BgU1+F)Z zWfYQM0||y)^Xl!t!^kR6!qL{*jc|Vf*5CW67JhPhPH4yft(s(Z56(Nk7UC_-aolf> znuvk|4*~G;!AcK^HD2Iuf;_S&atKGl?D6npYI!m{Nyho`BX*ld30Xk~hZxuJ7OY@a zO$O%Jlh!m_o91Nl(Bcon@=|`~3(3_b%jeY>71pS*ZO*gTF_y_5=2O?$RgYTEMWDay zBgaXGx}hZT5_22>j%Zj^PM^~rh8V>7>29D6PIKWw17^js%m#W{f_H?NB|$+hD{;zsCxj}@aTc=seK%GzU$C)F>t^IP~H zGFpa__lTGN?C7j-%S$2z`mNFH)Tj6B-s zC0AhHl9R7#&94Z_n_PF?TnAG-*oHS4h}3)!)&RbeXF?c`qJRd9?ZD+_kuWZV=l1!o z0*X{?;tL00+0CZ|C^!UEnCO1S^&?rtxcfmQp%`u_^pn*kaV0S$;PK`{&d@%Sccu`-&8TfN(}(Qcv;)j^iNL!6++sFjA>QdHhhs11>nU z_=3-DxL(%C>!~PG2gFWU%x0*S#Slgyn9E`&9M#}jIYW*OSq%5M2(_{p@(#AtEXKz- z1y5zMr*IWpW4S;K(MocQIhdqF_5wkxtG&qeXebIaB5*jg7tDmAT#XPb(KgVA9>N){ z@LX!w*iE`p+$eTZ9j=`q`BE1-Cv;ZhjtTt;`|wKrLyWWw20cp?BncRE!+I?4|nK3MT2BUY}tl$Qf;;^U|Ym zkvJRDwO=FB(p^iw<7!QslC3*{e0KglF&IzsTo`>3)$UH4xcJ! z#zvIa@x>YC$gtKr(dOQuEYa^sqXSI#Tx(^Bqm)Er2)wKO>*W}2bontqkNoMOFL(9xhgzF%F#?dSD zvn|HRlT{Yi*X4KOm|n_U z9h&j;L}v1dG&Z_^l&;VLIp6}xT?(V@n+Z0qBt}W%@VLc8tw)53KvhqD5JTD1{Gliz};k=k0g9VUExxvrbkb% zbv3bIulOylzwcDD`ABVM8iN|X04VisQ#0Q-bjSmFVWrgg{sD@X9M`0d?u(LuA#8YE zv9{x*W(Ts*5p0oU{uT{BZ-a|+T+LE@22iM4d$7u&TqMOSalCY>&CpYld7adG;c2U- z{@Z9NTw2x?9abtOX{lyA^}xgH(bFIcZ(2OhWo|Bh+YN7412{G)^cqA4L{~tfjfPEV z_SFY|c7kv%pbmLz3_FR7kY~6L@(iZPQ|pU7Sq?)U%!0F=i;xFYXH)Az9`h@hA`dkQ zd9n)Di*V63`51;U@YEj05M4DtT_Xc-2HY&kZkZ9&9J#p|D9?qS*fgx^7oh0UbKwe9 z=Yrv5E@%iAWf`96y(Mdbn$vL+JQ}zr4#+$XC)F9Aj1+A{vhCW|KhURbS%GTXnE&md z1WhrDv(es(DdU2iMt}=i1YNI;3t0Yj%^$Ae0$MQ^Dk-6nYfZmqT2d0D86qSImSk?t z!5!Qx=OB?iC#5bTB<$lZGZhG;HtRG%71lX;gczA$tTS1z9X(D>pN2GT{t+ON{3`4zYN1$Hn=OU}x~@;Py#8Sy) zz0c>&E3K-Bc4>YgrI@)HvBlpATv<5jzKqp&T1Ky2B71~als$;6P`6GjNq(9ZCCQ({ zq9hno8GzDcovNJ&j2I&r7X$U+w185o7B`=N(0_^%8&tG~?f(PbCy2^IR-k5T#q z9%gGQ7Z99N5My+*y=rAH2eMQH@2+7)Vb{rbCnIuF(t3eu+XM(6LM>zgJWt9-tBNnb zfNqxfUe_k7Bq1VUK?!vA3I;{dkc!NvDOZ&eDCHst8wjnCNOC-WFG@jAD&K1C=7@TR z#t{o$?3`MSTog;UX;SXR%`XXHC`PR=;cP&SN|eVPn=So4CXvWA6ASMKmw8edU_a#) z{fR6e>oL!8LK(Pw?i6imSEfGNDqf`~uZk%ew-2}d4XH8~v&sbg%VF^foG2&Q$#pl- z3v{vFb^M;>_cnendsE!6($gPP_#r}2HHE_=+2ddq80u$Cro?dMyOaH|IS(by7CZ@_ z?A`%BYh}GoI~kD`Q|3ibW58CJ9K*g9p}c3}PgT68c*}s1JpowiS8gKh(IEpt<4Ims zlWIwAKN%+Vhzc|p;G89LIb)7;nM(=8Yw>pW;iwDvrNn>sdj*XpMO3&PKKr#8MHqCjk$ z9%_ghR3kH1juIW2yvpU9#l{q4t~rZfrOU-0+;__oUEcn&U7eW%4NXMw8FJZ2pLxDg z5B^BfgtV%`XzjhhZmJlzD%M&R&#JleepbgRzg)=(_nyj?Xk@YmVK=S@$%7jF6{eh} z2C?gH3Z9|PhWjMhe6)6krt*p;ZGYA^nh!!PZ4BrA=i9bnx*pe57A-$49POp# zh>D#}n}8t%j(+f7b1{JYnnRJaWoG8(-{b!nN-O9wp{HU~XUV-4-x}5rr{{zR;YXRz z8vj~gWlQNgBMlH~Be$cgY=QZo=hW1L<#eJ}6=% z-i_T?^k~?`mO9sp@ih8Mdui0KLE6&x9rc%PAif`O(n8#T1k0gmP2zA_PZx6xZi) zFNf!u#P1>pVxM&NXD=vozYBvNo#83Kb~!`{-kCX-fQ$n(9sj0vTsGZLz{6;!sSngp zzp`$n9ogc+SlCC)tq%FP*lYEjvmPB_=S@2RTdmiZ()NdHzwg@5F@WQ@3aSs`v|Uor z*ko<@+id@?>3-VuFjA;Pqj!NJaY}RDz>|k9Ce8`j~G*%{1MN6=mRWl39(Io1l2$*lQs0* z8`c^sM|2K>W4MwNvDQZ{=>oCiPUdf6N$0!P6k5a#NO6gRJoBEME-5g^7L?(>J+?v$ zxNZ+#6MS28eL9DpMPHdk0o?gp+WTl7*v7CyrUFR-Abv6$1TfAbu%u8)2j`Gh(uZ@d z55QneXH>#V&K7A(2s=OC{@o_T#>SKJm<>`r0<3r-7Alwo1c0ZzpgX!4B#|=-7oiqu zf(>96(@F*AW!bf!DXghMEQb?Pynfp}VVQ&z1K4iGg=UJQ<-VXeXYv`C<(jEuxpE6) z&On^`?tEQ7D?J6BZbAft$oV>a6ML04%~2XybY}s+4~ql@W;n56t=2p-gj7A8l!LK+1z)~tb-18Pf8c? z2~7$Se1JQ!n?ZGq7Q4>6B!(+FoYtw`6ti@MlsHXr6R6SCETiQJHG$H0oY%zBx^!An zmC;QHI`6pZR4EK)as~9uy*zYwaQiNwh$>cKQNU|@o%LNyJqqP9p2&z+kbIMa9AvQl z%Yo@O?QCcmpmQs$)2S@-K<96$e|IsM_k}uZoARj02j-TGF)!M_vtuS?R=6b#Ath=; z7$Ez5(Ec8>zgJ%K)##~YBf>Do!R$;rzu;?KGJ#){)uDEVqGHM4c;f>qr?i8N!CqBC z_z+=G!@}oZqvzUV1h`Ike;U3)Se7M9pQ8YdgDt#|@FBnbC%*K>$nMm2EQ>MULAiys zLxK>ZvvPu~yBxl$-3AQBnI_@7Z?g%8*;Nu{geuM&8Mi3ZjnD5J_B3Ie*T z&Nyq8^asBo$=7gKYdaU(IP)RP!umWa?#_MT!2mrtSij7tv=sOdpJ8Q4%cd&-&{b)L z>&X`!PHdsuY6PwfRwutLkC18j6|HpY!OpJuz{!+_t!x4%3GZImof&0lgKvLA1 z7Mrv2QJ&+YS{!Y~M*$KaXxvKu@mS7H;p|}8jIsjgWuxkC6sy8@XlGP6&W}%sQN#ou z1P@tr%%U7T?2I{Ii7oZxItS6BQ3>a1(*hcEnzc#1G3`Mm=NiNj@1uIY&GDv*F@?fP z*C=g56%GpCG;f#VNL{-Kt6gkE+>M?+?YL7kpW;qwM9ZXw+|Y=)KMdasizSB*?X(|F znm_c8nvehXwD}1CCC#vXuy6C_e;^yy!P2l2PMeQ|&4FD=EYc$h57fb4!*9^=-CWcW zWo6{I@a}MRv~NDrY?^6PHT5)gKr_*|sq$ZtHFXILfc7JF@wqzz9-!R7`~rU_E$2bL zY2&JMmGA?BzB{&5Tl^mgKX`%kms0!yAMEs!GnDivO75T+cFOW+BJ?xqDJ#6S=EC}? zgKS5Yo8f~jH{BxB8O5QpLaYupQX#=^ydEHf;$+FAU}6G1RE`tvUmEs@Q~BZOMo+}h z{TBtv;Pgn%_XE$A-Vinuw_w@`+KAvm%x5pLOL%&rS_^<30MA1(w5z9(A=;G&RuP!d z^@Sh@Q4`bmfSmZTrhZK+Hm3+||GwS#t)50@J8KKR1rc(U=`?C#k1dJ=$?kYWXC{4u zV{BJV#H0pK3LR>W5^W0T;`}(*qry9D+^qf5*mpt?&R2LY7(gU0K9`Ew9;HdZ?N$g+d89?#nQb`Rb z{{U|&_0H!W^tq!Dn7u*)`(_3kf#<+4IN#vt$r2vrerw#3b8zn?ieOf*%h1w$@O`Kv z47jjBhZ|LU+Y5FZ$YA&>0H)(NcZ$+ZIK3D%&QfMp=RMgXA{KoAYmixtMU^l}wfcRKDJepUy84BBNbN>Y?ha@8%piWa>%42w;ue?Ei+;${q z5t9iw5DQ3DipXhDB9h{hd8f!=&SqUMKF}{$AeXc^&BY61H_0V88_=i$>C6Toqu9=y z7D#Jr$)-MKqw|y+s)Ev-#=}-nG9jb{BSp84>12z&H5iQ%D+4S^y{L1VRc{KUgTBpj zZX@FgJKmRS+2?A3ZOUpnkd!E=yoD4g5LOk1S8e{Ytt{e}6 z;z6XMf&IHHkjbNQAv$ito3Ou#N}84V%Jx5O_^nih20atIT1yVNccoC#v7KDuQk=G` z$c|sgyTte+(~}7tB=AIld}t5&g+33RQh?<-cg%=kb&p_?SE06eK^u!J$$6AsOVjx! zUCm`OxR>30LLyh&zC7^SzG>fOPqmW)@0CTcgHy?y7-}?(RfnIITb=*j5?IQBjj{Q= zN-*iqL0)Hz8tN9zF#FdG+i}JrSV{|eZrfkT_D7BudkCL*N3$4)Tiajocs%ILZfygE z1=CiD`4qIW-L-KhV@awh^Cj(p9D{YUHj@-6%8<~xsXB>piE($T4D22s#@b0}n9STMCpIEOP zP25Z1Q^}cs#by@@Rg|K)=#RS;RX_@|+ho6`7?W-!fw?F)cAq1l+`oT0eQ8Y-)qHY7 z4e;CFp20Ecot|u3SLw!v$#_?S2n+v~&#oqbNE$ePWfxsFjL zxzbw~POy3))jZg{aA|nh9O`sexN^xwb9Sb)Arb&y($X3ar1=X`MKB- zJ$~SNSY^iOJl^G;TeO;?S)$D_(tX-mf&|rGlpx`f5Z=ge{ep9G{R*KN%X}Vebp_y9 zT!EfWGM!-Jn4^jvdkF~|%V3C~4~?JyJ)7VvKaXcIN6@G=e66 zo?DK3)sv54COXY~7JgSEaM)!#24?&`Q-%CeDjEu~28RfN7pSPj-iDBh1pmLF02ISL zE#64nF%8C8A28(8o?+%}Wh4t}Sb=El5gDR^VP`l}7pT-i{T>Z!;!+T-=~B=X!R#H> zh9Q_e)YrE<5Kzd)Ax6l>df4J!j9CNl6ndOadmh6Aw+_zIxi!yECCBW+BU~9&S870C z5EPl-@St0ol>7nCI5pvm-#jqW$J1>@ECeT+oJLr z+s)5w-5%E}g~Nvq7J4zQX_GURh<>Nbc|s`}KGb;cR?Lrk|FMv}`= z$wgc)ro(!TZ>1cfMk5{FF~(TrJ3QTuA&_oD1tL`Lzi37J;wTUfr=2^MSx2?bMh4r^ z+=LtUZV(SY&Lro42d#0CV7bxN$Vxz=W26&MgqeV%vK4_Yi^gfd$i?zwB?FRdtR%%L zZI!G|tTuW_OY1?Hk6!iaH{3}!l}v~fo2A#7b=1#0>VLm>G_sBcc}Iiq*N$$sj)r+h z!=j_MO8cU2BSqa3;TEy1psq-6b%{4is4G?_Tjr3WY3Pxy_7?9kL7kumqR1xO&4@Or z3wajmQh>L79N9)BgJoY2@}~6KkQZ0L4PD0MR?7q4{W?VaK&;ppdZjhXkDKTvm+tr9 zMBncwI-T!GoYfE7d@n=6zTfA2v(5~C=llDw_w?4NFlR_^B?aHv!iu%($t+GF=tVO^Tn_`Z?Rdi8I4Za zi2#?^(Hgw|Dv^5{FzrjH2Yu4RYC7#pPg0N=PK5PZ-q*b~pAjy1;k&$uy zHV`*GDD##x2PQkZ*eQk4px-EC(%zfVygMViR~*taa@(DeTg4d}u#PTx)N!Zi-W=%> zW>jb7Q9G1yl0=as^Y2n2J#FCpx7rz*{^>;o>r{R|?wL8wR(9ahoatFsCbLqxj#}=F zytu7Z2xsKHK~)H6uWlIQ6r)F3@kx5b=wxc<*) zaTB9OX6#v;+hwq4B=M3q2m zSvm(fCAgYNfxMZBanfe$!Hi4>putGSu}RBi01U%GIwoT&=bF8p2~PWtZ;eOG9cq+k zq0h0ddITQKjXE<)2FE(xToiA-=vYU0@?+g#eh8*BCeUE?^UgHV&ZKq;3CCtSV+tPK z%qvSYB#}aFCbEz%FuV7#SfWu`7&<|FTGJACRLFwKI}F+@(GWVPWvc7Us#{v3fvD>_V{N zc2bFhoHS&JceI`Ju}lI~GxuGR$RQ_5uEta7b5Im_n}+QJwmytjoU_aConHSTt4(3Z88?4{kjt&^^Ufk6~|&c zDaqtK7a_U#hcnTLa3F5wqs{$k2#of1tXSM=ODkO>3B98Y5mzU<#frPq7 zd#m%v*{_&MzVZO`@fKsCRl-Ctg?@70toO1TPQ)OnkEki_;*a~qT`MU`NNVg38bsO z+&-!ZsADx^cI!zNeM{XfK$GJOo-NR7th?%N$+pdF)O=&fFooq8xK}Up{m+S@XN9jQ} zsbG%6l}Xh_r?^FxygK1MrNya)aV4zNh!3OM*D6Nu%#&nX31r?G|7egWm@-7b*xpTD zv@&_a-lchLLX&RET!OV3DIoMj3^h9}_T0iI_z}JYhB95cQHFgv5LFLirjQ24EldZU zOe>1oIIk5FyM39lmxvx&EZ7%QyYkn_Z`kyU5q`RaE6ps~(AFh`j)qe-8gxYZM3wZI zKUS%FY(*!yf}4FkZa&6X@fqs0*2j&HObm0Wmj96HM#GQk(eUO+9EOv`m{C8%h!lBC znA?JsnIgdkRM(1Cv@&WRVMc}f_{h(j;8xUQ6GFa0Nas}YtNjo>-Jh03@K#1Kjg4A% ze-ih+EX8Cz48hGZ1O0+9JKdB}H}-5wV{rdlymNO#n80oH;Q!nd5n$}tqeh~H*=6kQ z#b3jF(IK&ChQ12hjDWc|kJ!-U^C-+6o`~CEB>c4D9)tQ6hG{6Pz^4QiG2_Y$=JK$n z`LNrBX+}3mHdkbH|B1wsT}Z%RE2_`B3aI-D*&Zs-4&jj=$r+viY}0R{UErIRgCcTZ z&&iagAIt1|v)wke>owL!qFy%J1||j4-9qJ@6qmA@B2G+t33D3RX6q>85FcS@E};&) z0;uEY*ufsuNyO%%&%%Jg$2m%lBh7SgbTrQHe9H9B25ne)0plkeX)3HW=R6^?)-g0; z?i_VvDx$Go9D$sK8hi#1mw(#QEEWiBL_nAuH|f;QHVLZo$pOv2CPtXZ4^zh+YqmAj zT$ZLa^isqkD~>Yh38S_uBAn4#a&Ur0L16`k(_V^{3{Kdv2Gb*f=R+SvesGCoHCnwx zFqR5f+O8oiLG)2G(%_>mi!hyDr5zLsLs%`z+CjocG8)MD0^yF(Qymt1s^w+$q;ul# ztle5`Zs2qD?22Z)?`gSkFG^I=Rv{yjjj3+RF*Y`+CB)@R1>*kgzKH8k7Jrl#2C>6O zKjQ!m^mBLM8cBsV_IOR6j+>~PK)BY*_-8Y40gH(HP z1=O;|)4kT@+zqR_Cu^w?gdgHE9}sAK!jf3u>EWr~po*pUbh($1}PM6{As z$QUgwu+6fXXi$=${Tc~AsyF~@8x#>95&;wIl>KLCkT}Q`+Di|Z4OJsl=R_RDWwDBv zxC|`EPt}E2R$5D|$7W&9(?J@m(&zOi8fp3s>TH^t; zAU3beEqqsoq|7RLd{AdE4N1W;d1~2VcTwjsVuYb2e9+^KWARETW0;u-yaCB526Z}5 zur}oohkh=R1j3%M#r@S9Q_qsj3&;q`jn9Lh973qsLS?v$7Yf+A@FoKj{|OyGB@J7} z)eap6cVh+)qFE*rn8pnh6q5GrBp2Lh!Zq9ULWzlhkSTE&1$Olw?$_NU8;4L%-15QW z-u=Yl6fWA-Cmd77RgZEm7OU(doATOTJCr~Y*M&Fl2Nf^s2O2ewIo1<1M~xeI)007D zX4#wD?vjl8_6NrO$kKb<4#xFB8SFAhMfZv9K-E&}w!k_`x#1a1ho{I#ztN27U}wGn zb$03PH|#>uZ=KJQa|1>KP=TX3;M|VSE~YovSUYwbFK}JEa-M05j0sn2(}LFUc4|Y-%JIjJ=@R3hL;iRFF`V7Trjjo$b#}AkP9gmt z)g2By|DvMR;jOB;)3WJ~v&Ik-U@egZ_S8di4UbL`V7&5q$secT39xB)_UC6`#4xh7 zIGRNf=(MCC$)|na2iaY0SNc2`DU1!xoV6?w5*sUqZk*)qQ?MlMc{U)VB zuCs`oNrlq+1oS>Vaz~w!n&ZK{(uykILM{t$v_kfE`_Xv7scbG}GV$YtVeT}!x~Y&1qx(~TSV zr?m)>CP4d*)N5=}1g$}H`ZAx9yqq6f85{Is0inBsvHOC}ZB$Yf*rpuDrm`Z6c(Fd= zg%XJvL1azQfoZG~@CGuCTr|QL4kA#bTsrcPxl_^5UBUMIf*}o4s>X%*aqlT>8e37? zG!rizK=2e>&D;%nRBue?#uT?j>uq(1`rDOp1*T`Zj1+Rg2W&FCs~wClb{5mJLaW)P z(1xCBf7Cs{nr)Y~ylF!;7!BRywH{=vBy?9W#O+6e`MZ_{2g`%Q{@~QYsdRrijJc=g zfpW{WNq9#O*jEtU*mQf66&|r0Ym5YYktkhyLuHk@!Eax0`=fXY5%M!2nsHyOKxeP6 ztksf1$#PxF7hKBwij-HC;()Iaf9wRQ9uJf~moq|zEP}D(?I*J6rsG~>_j5@-+ zh+x!FBnUw{n_?uo$;b>d6(++oaBad=ur5s6GhMke z9h?C>L%96z5I=Z!9p=Ygh!1f|#eN^U7vj<9>xFo-=!N)D+sG>HF0Z=LmMes=P=9gi?B3Ubj;Tz6C2LYbaRjD4Z&n32v#(s!AC(;pX32St--Fr7|ljWm>mXrc)_1 zcuQrlpw)$|bliq+sSG|}OJzoGsmyStOy`!$3{}dkyrnYjN|~`+Dl=Fqv*wn{3{=XD z-%=TvlhU}YzojzGN|_C}R0eC)(sypZX&I>{@FCL?6TqsPuj$#Y|E}RTm!kZ0j?NDi zbpDG4o&TGT&L3ur$>=<5G^O+Bt8|_{yJkMgN@QP~f{Shy^xUFdV4;W$R5PEi87Z}d z*@EcHA8akzpCuTL6m5k@ini7rZG}dPwn8ICTcMHS6wWO{BO~>rppkmT0vg$Q&|m37 zP|GnF+WMfsMxl&u;;va)KmH((+E@q*y1|8>ebB$1MrtVf&@tTD)ZZ>0yOlE4b)qKR z{5#ck!oxbZP^P+05Cq&pnd&;>bbJeCs_R702j09t)pas*(=zEgF^Bxj+F@Vo zC}?kD-{X%z=nsNOq=Afjr-sm`2Yudz5$_I$CCAgRHB=cIhsQsVAeG2 z=1N@$w$S=~5aN6g-d`GoqU&&>;uMyz--l0-c3ye&UiWE>CLS&uhg`hUy137M%D|pz z_qFkrVO2_iPZpiz(G4JcR}1`dpDda#`w&aMPZo2OqPFl}NuMn2bgq_q-z>O{aanjlqE9Ud z^j#JRNuMmb++oedM7B>BSu$D{-bU_|1#51XWw37+Olw>gL^6G9(RtTCG}JfCP?lx5 zZ?p3oU*aXRJg}zMHx=#h z93wmJOZ12cvvJ27J`_<SQVFrs#gL3JW41Ob za*q#-r9&#A?2t+@JERiK4ygpQL#py}2Gt=|c?s%}s=NesNL5~fI;1LZdPr5?^pL8& z=^<5lONUeqT%<*r?+Y4XJ302jB(hT^fRiuE1h-U1r_G{FenMULJ34I^W%3j1vSoDI zEXw33)Md-)v{{tNPpHe5(P^_Nlb=wREu+(BQ6@j3E?Y*Y&7w?xLS43uxaguxenMTg zjJW8cOnyRLwv4#wqD+25UABz4=%P%1LS43uxaguxenMTgjJW8cOnyRLwhZsml*;5M z)V^grk+8)l)XxvTo1_dHXhOkx-_bm{dr`nNMk+D3XGa1pcGzO?kw7Dt?~y?NJra1g z{~igv+y5Stz)Oor;M->4-YM0iTp)@#pHf6C4yQ3vRW6N@s&Z+J zRF$ixM`homvJ%LA52@_0)=k8_yqLxW&Rs8<)XCNPXweDo zJ$cPyA(iAcCYQhm5Ypkq#Obo^V5oSmIh+KZjax0zjwU%*O+q~Vaq{RiiwQQC%;IOY zAm{2+OIgmG`8A)Qyg1`ha zlEjz=feB<*5|af%Dv)7<@)I1^$fg(z@AkJc*1!G--b_UJra7E61QOPDbal+`A0v$X9fdT8d~W=11$WblYj=S zrxjRjI<@5FIb}V04Kfm=wYG|r=l?sM%_qk@e+6knvyiHQ+1lOu5tWL

|^t7<>>^EI6oFrGl!c!*O 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 u|6DA>>=0;if(2147483648=d;d*=2){var e=c*(1+.2/d);e=Math.min(e,b+100663296);e=Math.max(b,e);0>>16);F();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},f:function(b,c,d,e){b=T.C(b);c=T.A(b,c,d);E[e>>2]=c;return 0},a:function(b,c,d,e){var f=A.buffer;a.audioPackets.push({data:f.slice?f.slice(b,b+c):(new Uint8Array(new Uint8Array(f, +b,c))).buffer,timestamp:d,discardPadding:e})},c:function(b,c){function d(e){for(var f="",g=new Uint8Array(A.buffer);0!=g[e];e++)f+=String.fromCharCode(g[e]);return f}b&&(a.videoCodec=d(b));c&&(a.audioCodec=d(c));b=a._ogv_demuxer_media_duration();a.duration=0<=b?b:NaN;a.loadedMetadata=!0},b:function(b,c,d,e,f){var g=A.buffer;a.videoPackets.push({data:g.slice?g.slice(b,b+c):(new Uint8Array(new Uint8Array(g,b,c))).buffer,timestamp:d,keyframeTimestamp:e,isKeyframe:!!f})}}; +(function(){function b(f){a.asm=f.exports;A=a.asm.g;F();G=a.asm.s;I.unshift(a.asm.h);L--;a.monitorRunDependencies&&a.monitorRunDependencies(L);0==L&&(null!==M&&(clearInterval(M),M=null),N&&(f=N,N=null,f()))}function c(f){b(f.instance)}function d(f){return aa().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){y("failed to asynchronously prepare wasm: "+g);x(g)})}var e={a:ba};L++;a.monitorRunDependencies&&a.monitorRunDependencies(L);if(a.instantiateWasm)try{return a.instantiateWasm(e, +b)}catch(f){return y("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return z||"function"!==typeof WebAssembly.instantiateStreaming||O()||P.startsWith("file://")||"function"!==typeof fetch?d(c):fetch(P,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(c,function(g){y("wasm streaming compile failed: "+g);y("falling back to ArrayBuffer instantiation");return d(c)})})})().catch(k);return{}})(); +a.___wasm_call_ctors=function(){return(a.___wasm_call_ctors=a.asm.h).apply(null,arguments)};a._ogv_demuxer_init=function(){return(a._ogv_demuxer_init=a.asm.i).apply(null,arguments)};a._ogv_demuxer_receive_input=function(){return(a._ogv_demuxer_receive_input=a.asm.j).apply(null,arguments)};a._ogv_demuxer_process=function(){return(a._ogv_demuxer_process=a.asm.k).apply(null,arguments)};a._ogv_demuxer_destroy=function(){return(a._ogv_demuxer_destroy=a.asm.l).apply(null,arguments)}; +a._ogv_demuxer_media_length=function(){return(a._ogv_demuxer_media_length=a.asm.m).apply(null,arguments)};a._ogv_demuxer_media_duration=function(){return(a._ogv_demuxer_media_duration=a.asm.n).apply(null,arguments)};a._ogv_demuxer_seekable=function(){return(a._ogv_demuxer_seekable=a.asm.o).apply(null,arguments)};a._ogv_demuxer_keypoint_offset=function(){return(a._ogv_demuxer_keypoint_offset=a.asm.p).apply(null,arguments)}; +a._ogv_demuxer_seek_to_keypoint=function(){return(a._ogv_demuxer_seek_to_keypoint=a.asm.q).apply(null,arguments)};a._ogv_demuxer_flush=function(){return(a._ogv_demuxer_flush=a.asm.r).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.t).apply(null,arguments)};a._free=function(){return(a._free=a.asm.u).apply(null,arguments)};var U;N=function ca(){U||V();U||(N=ca)}; +function V(){function b(){if(!U&&(U=!0,a.calledRun=!0,!B)){S(I);h(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;){var c=a.postRun.shift();J.unshift(c)}S(J)}}if(!(0=d||(W&&a._free(W),X=d,W=a._malloc(X));var e=W;(new Uint8Array(A.buffer,e,d)).set(new Uint8Array(b));a._ogv_demuxer_receive_input(e,d)});c()};a.process=function(b){var c=Z(function(){return a._ogv_demuxer_process()});b(!!c)}; +a.dequeueVideoPacket=function(b){if(a.videoPackets.length){var c=a.videoPackets.shift().data;b(c)}else b(null)};a.dequeueAudioPacket=function(b){if(a.audioPackets.length){var c=a.audioPackets.shift();b(c.data,c.discardPadding)}else b(null)};a.getKeypointOffset=function(b,c){var d=Z(function(){return a._ogv_demuxer_keypoint_offset(1E3*b)});c(d)}; +a.seekToKeypoint=function(b,c){var d=Z(function(){return a._ogv_demuxer_seek_to_keypoint(1E3*b)});d&&(a.audioPackets.splice(0,a.audioPackets.length),a.videoPackets.splice(0,a.videoPackets.length));c(!!d)};a.flush=function(b){Z(function(){a.audioPackets.splice(0,a.audioPackets.length);a.videoPackets.splice(0,a.videoPackets.length);a._ogv_demuxer_flush()});b()};a.close=function(){}; + + + return OGVDemuxerOggW.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = OGVDemuxerOggW; +else if (typeof define === 'function' && define['amd']) + define([], function() { return OGVDemuxerOggW; }); +else if (typeof exports === 'object') + exports["OGVDemuxerOggW"] = OGVDemuxerOggW; diff --git a/ogvjs-1.8.4/ogv-demuxer-ogg-wasm.wasm b/ogvjs-1.8.4/ogv-demuxer-ogg-wasm.wasm new file mode 100755 index 0000000000000000000000000000000000000000..d8cdc068e905b5fca5d9b9936de26d25afb17d8d GIT binary patch literal 41845 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 Q@Yz2=1NJ4+-rn>7581suO#lD@ literal 0 HcmV?d00001 diff --git a/ogvjs-1.8.4/ogv-demuxer-webm-wasm.js b/ogvjs-1.8.4/ogv-demuxer-webm-wasm.js new file mode 100644 index 0000000..80a14b4 --- /dev/null +++ b/ogvjs-1.8.4/ogv-demuxer-webm-wasm.js @@ -0,0 +1,46 @@ + +var OGVDemuxerWebMW = (function() { + var _scriptDir = typeof document !== 'undefined' && document.currentScript ? document.currentScript.src : undefined; + if (typeof __filename !== 'undefined') _scriptDir = _scriptDir || __filename; + return ( +function(OGVDemuxerWebMW) { + OGVDemuxerWebMW = OGVDemuxerWebMW || {}; + + +var a;a||(a=typeof OGVDemuxerWebMW !== 'undefined' ? OGVDemuxerWebMW : {});var h,k;a.ready=new Promise(function(b,c){h=b;k=c});var l={},m;for(m in a)a.hasOwnProperty(m)&&(l[m]=a[m]);var n="object"===typeof window,p="function"===typeof importScripts,q="",r,t,v,w,x; +if("object"===typeof process&&"object"===typeof process.versions&&"string"===typeof process.versions.node)q=p?require("path").dirname(q)+"/":__dirname+"/",r=function(b,c){w||(w=require("fs"));x||(x=require("path"));b=x.normalize(b);return w.readFileSync(b,c?null:"utf8")},v=function(b){b=r(b,!0);b.buffer||(b=new Uint8Array(b));b.buffer||y("Assertion failed: undefined");return b},t=function(b,c,d){w||(w=require("fs"));x||(x=require("path"));b=x.normalize(b);w.readFile(b,function(e,f){e?d(e):c(f.buffer)})}, +1=e);)++d;if(16f?e+=String.fromCharCode(f):(f-=65536,e+=String.fromCharCode(55296|f>>10,56320|f&1023))}}else e+=String.fromCharCode(f)}return e}function J(b){return b?H(K,b,void 0):""}var L,K,M; +function N(){var b=E.buffer;L=b;a.HEAP8=new Int8Array(b);a.HEAP16=new Int16Array(b);a.HEAP32=M=new Int32Array(b);a.HEAPU8=K=new Uint8Array(b);a.HEAPU16=new Uint16Array(b);a.HEAPU32=new Uint32Array(b);a.HEAPF32=new Float32Array(b);a.HEAPF64=new Float64Array(b)}var O,ba=[],ca=[],da=[];function ea(){var b=a.preRun.shift();ba.unshift(b)}var P=0,Q=null,R=null;a.preloadedImages={};a.preloadedAudios={}; +function y(b){if(a.onAbort)a.onAbort(b);z(b);F=!0;b=new WebAssembly.RuntimeError("abort("+b+"). Build with -s ASSERTIONS=1 for more info.");k(b);throw b;}function fa(){return S.startsWith("data:application/octet-stream;base64,")}var S;S="ogv-demuxer-webm-wasm.wasm";if(!fa()){var ha=S;S=a.locateFile?a.locateFile(ha,q):q+ha}function ia(){var b=S;try{if(b==S&&A)return new Uint8Array(A);if(v)return v(b);throw"both async and sync fetching of the wasm failed";}catch(c){y(c)}} +function ja(){if(!A&&(n||p)){if("function"===typeof fetch&&!S.startsWith("file://"))return fetch(S,{credentials:"same-origin"}).then(function(b){if(!b.ok)throw"failed to load wasm binary file at '"+S+"'";return b.arrayBuffer()}).catch(function(){return ia()});if(t)return new Promise(function(b,c){t(S,function(d){b(new Uint8Array(d))},c)})}return Promise.resolve().then(function(){return ia()})} +function T(b){for(;0>>=0;if(2147483648=d;d*=2){var e=c*(1+.2/d);e=Math.min(e,b+100663296);e=Math.max(b,e);0>>16);N();var f=1;break a}catch(g){}f=void 0}if(f)return!0}return!1},b:function(b, +c,d,e){for(var f=0,g=0;g>2],I=M[c+(8*g+4)>>2],B=0;B>2]=f;return 0},c:function(b,c,d,e){var f=E.buffer;a.audioPackets.push({data:f.slice?f.slice(b,b+c):(new Uint8Array(new Uint8Array(f,b,c))).buffer,timestamp:d,discardPadding:e})},j:function(b,c,d,e,f,g,u,I,B,C,D){a.videoFormat={width:b,height:c,chromaWidth:d,chromaHeight:e,cropLeft:I,cropTop:B,cropWidth:g,cropHeight:u,displayWidth:C, +displayHeight:D,fps:f}},h:function(b,c){function d(e){for(var f="",g=new Uint8Array(E.buffer);0!=g[e];e++)f+=String.fromCharCode(g[e]);return f}b&&(a.videoCodec=d(b));c&&(a.audioCodec=d(c));b=a._ogv_demuxer_media_duration();a.duration=0<=b?b:NaN;a.loadedMetadata=!0},i:function(b,c){if(a.onseek)a.onseek(b+4294967296*c)},g:function(b,c,d,e,f){var g=E.buffer;a.videoPackets.push({data:g.slice?g.slice(b,b+c):(new Uint8Array(new Uint8Array(g,b,c))).buffer,timestamp:d,keyframeTimestamp:e,isKeyframe:!!f})}}; +(function(){function b(f){a.asm=f.exports;E=a.asm.k;N();O=a.asm.w;ca.unshift(a.asm.l);P--;a.monitorRunDependencies&&a.monitorRunDependencies(P);0==P&&(null!==Q&&(clearInterval(Q),Q=null),R&&(f=R,R=null,f()))}function c(f){b(f.instance)}function d(f){return ja().then(function(g){return WebAssembly.instantiate(g,e)}).then(f,function(g){z("failed to asynchronously prepare wasm: "+g);y(g)})}var e={a:la};P++;a.monitorRunDependencies&&a.monitorRunDependencies(P);if(a.instantiateWasm)try{return a.instantiateWasm(e, +b)}catch(f){return z("Module.instantiateWasm callback failed with error: "+f),!1}(function(){return A||"function"!==typeof WebAssembly.instantiateStreaming||fa()||S.startsWith("file://")||"function"!==typeof fetch?d(c):fetch(S,{credentials:"same-origin"}).then(function(f){return WebAssembly.instantiateStreaming(f,e).then(c,function(g){z("wasm streaming compile failed: "+g);z("falling back to ArrayBuffer instantiation");return d(c)})})})().catch(k);return{}})(); +a.___wasm_call_ctors=function(){return(a.___wasm_call_ctors=a.asm.l).apply(null,arguments)};a._ogv_demuxer_init=function(){return(a._ogv_demuxer_init=a.asm.m).apply(null,arguments)};a._ogv_demuxer_receive_input=function(){return(a._ogv_demuxer_receive_input=a.asm.n).apply(null,arguments)};a._ogv_demuxer_process=function(){return(a._ogv_demuxer_process=a.asm.o).apply(null,arguments)};a._ogv_demuxer_destroy=function(){return(a._ogv_demuxer_destroy=a.asm.p).apply(null,arguments)}; +a._ogv_demuxer_flush=function(){return(a._ogv_demuxer_flush=a.asm.q).apply(null,arguments)};a._ogv_demuxer_media_length=function(){return(a._ogv_demuxer_media_length=a.asm.r).apply(null,arguments)};a._ogv_demuxer_media_duration=function(){return(a._ogv_demuxer_media_duration=a.asm.s).apply(null,arguments)};a._ogv_demuxer_seekable=function(){return(a._ogv_demuxer_seekable=a.asm.t).apply(null,arguments)}; +a._ogv_demuxer_keypoint_offset=function(){return(a._ogv_demuxer_keypoint_offset=a.asm.u).apply(null,arguments)};a._ogv_demuxer_seek_to_keypoint=function(){return(a._ogv_demuxer_seek_to_keypoint=a.asm.v).apply(null,arguments)};a._malloc=function(){return(a._malloc=a.asm.x).apply(null,arguments)};a._free=function(){return(a._free=a.asm.y).apply(null,arguments)};var U;R=function ma(){U||V();U||(R=ma)}; +function V(){function b(){if(!U&&(U=!0,a.calledRun=!0,!F)){T(ca);h(a);if(a.onRuntimeInitialized)a.onRuntimeInitialized();if(a.postRun)for("function"==typeof a.postRun&&(a.postRun=[a.postRun]);a.postRun.length;){var c=a.postRun.shift();da.unshift(c)}T(da)}}if(!(0=d||(W&&a._free(W),X=d,W=a._malloc(X));var e=W;(new Uint8Array(E.buffer,e,d)).set(new Uint8Array(b));a._ogv_demuxer_receive_input(e,d)});c()};a.process=function(b){var c=Z(function(){return a._ogv_demuxer_process()});b(!!c)}; +a.dequeueVideoPacket=function(b){if(a.videoPackets.length){var c=a.videoPackets.shift().data;b(c)}else b(null)};a.dequeueAudioPacket=function(b){if(a.audioPackets.length){var c=a.audioPackets.shift();b(c.data,c.discardPadding)}else b(null)};a.getKeypointOffset=function(b,c){var d=Z(function(){return a._ogv_demuxer_keypoint_offset(1E3*b)});c(d)}; +a.seekToKeypoint=function(b,c){var d=Z(function(){return a._ogv_demuxer_seek_to_keypoint(1E3*b)});d&&(a.audioPackets.splice(0,a.audioPackets.length),a.videoPackets.splice(0,a.videoPackets.length));c(!!d)};a.flush=function(b){Z(function(){a.audioPackets.splice(0,a.audioPackets.length);a.videoPackets.splice(0,a.videoPackets.length);a._ogv_demuxer_flush()});b()};a.close=function(){}; + + + return OGVDemuxerWebMW.ready +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') + module.exports = OGVDemuxerWebMW; +else if (typeof define === 'function' && define['amd']) + define([], function() { return OGVDemuxerWebMW; }); +else if (typeof exports === 'object') + exports["OGVDemuxerWebMW"] = OGVDemuxerWebMW; diff --git a/ogvjs-1.8.4/ogv-demuxer-webm-wasm.wasm b/ogvjs-1.8.4/ogv-demuxer-webm-wasm.wasm new file mode 100755 index 0000000000000000000000000000000000000000..c9787c4bf50da9437fe6fbc1fa13431045080ce6 GIT binary patch literal 43449 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 e={318:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},848:e=>{window,e.exports=function(e){var t={};function r(i){if(t[i])return t[i].exports;var s=t[i]={i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(e,t){function r(e,t){if(e<1||e!==Math.round(e))throw"Invalid channel count for BufferQueue";this.channels=e,this.bufferSize=t,this.flush()}r.prototype.flush=function(){this._buffers=[],this._pendingBuffer=this.createBuffer(this.bufferSize),this._pendingPos=0},r.prototype.sampleCount=function(){var e=0;return this._buffers.forEach((function(t){e+=t[0].length})),e},r.prototype.createBuffer=function(e){for(var t=[],i=0;i=s)return e;for(var h=[],u=0;u0?d[d.length+t]:e[0]:e[t]},u=0;ui&&(m=Math.SQRT1_2);for(var g=0;g=i&&(v=0);var y=e[v],b=new Float32Array(_);h(y,b,this._resampleLastSampleData?this._resampleLastSampleData[v]:void 0,m),u.push(b)}return this._resampleFractional=p,this._resampleLastSampleData=e,u},n.prototype.bufferData=function(e){if(!this._backend)throw"Invalid state: AudioFeeder cannot bufferData before init";var t=this._resample(e);t=this._tempoChanger.process(t),this._backend.appendBuffer(t)},n.prototype.getPlaybackState=function(){if(this._backend){var e=this._backend.getPlaybackState();return e.outputPlaybackPosition=e.playbackPosition,e.playbackPosition=this._tempoChanger.mapOutputToInputTime(e.outputPlaybackPosition),e}throw"Invalid state: AudioFeeder cannot getPlaybackState before init"},n.prototype.waitUntilReady=function(e){if(!this._backend)throw"Invalid state: AudioFeeder cannot waitUntilReady before init";this._backend.waitUntilReady(e)},n.prototype.start=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot start before init";this._backend.start()},n.prototype.stop=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot stop before init";this._backend.stop()},n.prototype.flush=function(){if(this._resampleFractional=0,this._resampleLastSampleData=void 0,!this._backend)throw"Invalid state: AudioFeeder cannot flush before init";this._tempoChanger.flush(this.durationBuffered),this._backend.flush()},n.prototype.close=function(){this._backend&&(this._backend.close(),this._backend=null)},n.prototype.onstarved=null,n.prototype.onbufferlow=null,n.isSupported=function(){return!!Float32Array&&t.isSupported()},n.initSharedAudioContext=function(){return t.isSupported()?t.initSharedAudioContext():null},e.exports=n}()},function(e,t,i){!function(){var t=window.AudioContext||window.webkitAudioContext,s=i(0),d=i(3);function o(e,t,i){var d=i.audioContext||o.initSharedAudioContext();if(this._context=d,this.output=i.output||d.destination,this.rate=d.sampleRate,this.channels=2,i.bufferSize&&(this.bufferSize=0|i.bufferSize),this.bufferThreshold=2*this.bufferSize,this._bufferQueue=new s(this.channels,this.bufferSize),this._playbackTimeAtBufferTail=d.currentTime,this._queuedTime=0,this._delayedTime=0,this._dropped=0,this._liveBuffer=this._bufferQueue.createBuffer(this.bufferSize),d.createScriptProcessor)this._node=d.createScriptProcessor(this.bufferSize,0,this.channels);else{if(!d.createJavaScriptNode)throw new Error("Bad version of web audio API?");this._node=d.createJavaScriptNode(this.bufferSize,0,this.channels)}}o.prototype.bufferSize=4096,o.prototype.bufferThreshold=8192,o.prototype._volume=1,Object.defineProperty(o.prototype,"volume",{get:function(){return this._volume},set:function(e){this._volume=+e}}),o.prototype._muted=!1,Object.defineProperty(o.prototype,"muted",{get:function(){return this._muted},set:function(e){this._muted=!!e}}),o.prototype._audioProcess=function(e){var t,i,s,h,u;u="number"==typeof e.playbackTime?e.playbackTime:this._context.currentTime+this.bufferSize/this.rate;var c=this._playbackTimeAtBufferTail;if(c0){var t=Math.round(e*this.rate),i=this._liveBuffer?this._liveBuffer[0].length:0;t>i?(this._bufferQueue.prependBuffer(this._liveBuffer),this._bufferQueue.prependBuffer(this._bufferQueue.createBuffer(t-i))):this._bufferQueue.prependBuffer(this._bufferQueue.trimBuffer(this._liveBuffer,i-t,t)),this._playbackTimeAtBufferTail-=e}this._node.onaudioprocess=null,this._node.disconnect()}},o.prototype.flush=function(){this._bufferQueue.flush()},o.prototype.close=function(){this.stop(),this._context=null},o.prototype.onstarved=null,o.prototype.onbufferlow=null,o.isSupported=function(){return!!t},o.sharedAudioContext=null,o.initSharedAudioContext=function(){if(!o.sharedAudioContext&&o.isSupported()){var e,i=new t;if(i.createScriptProcessor)e=i.createScriptProcessor(1024,0,2);else{if(!i.createJavaScriptNode)throw new Error("Bad version of web audio API?");e=i.createJavaScriptNode(1024,0,2)}e.connect(i.destination),e.disconnect(),o.sharedAudioContext=i}return o.sharedAudioContext},e.exports=o}()},function(e,t){e.exports=function(){if(void 0!==window.setImmediate)return window.setImmediate;if(window&&window.postMessage){var e=[];return window.addEventListener("message",(function(t){if(t.source===window){var i=t.data;if("object"==typeof i&&i.nextTickBrowserPingMessage){var s=e.pop();s&&s()}}})),function(t){e.push(t),window.postMessage({nextTickBrowserPingMessage:!0},document.location.toString())}}return function(e){setTimeout(e,0)}}()},function(e,t,i){var s;window,s=function(){return function(e){var t={};function r(i){if(t[i])return t[i].exports;var s=t[i]={i,l:!1,exports:{}};return e[i].call(s.exports,s,s.exports,r),s.l=!0,s.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(i,s,function(t){return e[t]}.bind(null,s));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=1)}([function(e,t){var i={float_array:function(e){return new Float32Array(e)},blit:function(e,t,i,s,d){i.set(e.subarray(t,t+d),s)}};e.exports=i},function(e,t,i){var s,d;s=i(0),d=i(2),e.exports=function(e){var t=(e=e||{}).sampleRate||44100,i=e.wsizeLog||11,h=e.tempo||1,u=(e.numChannels,Math.pow(2,50/1200)-1),c=1<>1),T=s.float_array(b),k=s.float_array(b),P=s.float_array(b),w=s.float_array(b),E=s.float_array(b),x=s.float_array(b),A=1+(b>>1),R=[0,0],O=[],F=[],S=[],C=[];for(y=0;y<2;y++)O.push(s.float_array(A)),F.push(s.float_array(A)),S.push(s.float_array(A)),C.push(s.float_array(b));var B=s.float_array(A),D=s.float_array(A),M=0,V=0,I=[{in_time:0,out_time:0,tempo:h}],L=0,j=0,W=1,X=0,N=0,H=0,z=0,Y={mapOutputToInputTime:function(e){for(var t=I.length-1;e0;)t--;var i=I[t];return i.in_time+i.tempo*(e-i.out_time)},flush:function(e){X=0,R=[0,0],j=0,z=0,H=0;for(var t=0;t<2;t++)for(var i=0;i=0;)I.pop(),s--;I.push({in_time:M,out_time:V,tempo:h})}},getTempo:function(){return h},setTempo:function(e){m=g=f,e>=1?g=Math.round(m/e):m=Math.round(g*e),N=(1/e-1*g/m)*m,W=function(e,t){for(var i=e.length/t|0,s=0,d=0;di&&(i=e[s]);var d=1e-8*i,h=1,c=1;for(t[0]=1,s=2;sd&&e[s]>e[s-1]&&e[s]>=e[s+1]){var f=s+(e[s-1]-e[s+1])/(2*(e[s-1]-2*e[s]+e[s+1]));f-t[h-1]>l?(t[h++]=f,c=s):e[s]>e[c]&&(t[h-1]=f,c=s)}}return h}(y,T),P=F[l],w=S[l];if(0!=e&&0!=k){var E=0;for(H=0;Hm[E]&&E!=p;)++E;var x=E;E>0&&z-m[E-1].1*y[Math.round(z)]){var M=J(t,i,z),V=g[x]+v[x]+U(M,z,g[x],m[x],h)-M;P[H]=M,w[H]=V,B[H]=Math.cos(V),D[H]=Math.sin(V)}else P[H]=J(t,i,z),w[H]=0,B[H]=1,D[H]=0}T[k]=2*c;var I=T[x=0],L=T[x+1],j=B[x],W=D[x];for(b=1;b=I&&b-I>L-b&&(I=T[++x],L=T[x+1],j=B[x],W=D[x]);var X=t[b]*j-i[b]*W,N=t[b]*W+i[b]*j;t[b]=X,i[b]=N}}else for(var H=0;Hd&&(d=Math.abs(2*l.m_re[t]));for(t=0;td&&(d=Math.abs(l.m_re[t+g+e]+l.m_im[t]));for(t=c-g;td&&(d=Math.abs(2*l.m_im[t]));var u=1/Math.floor(1*c/(2*g));for(h*d>u&&(h=u/d),t=0;t1){d=s.float_array(e[0].length);for(var u=1/e.length,l=0;l0){var v=z+H+i,y=[];for(l=0;lP&&(P=z);var w=s.float_array(P);s.blit(p,0,w,0,z);for(var E=0,x=z,A=0,R=0;;){var O=c+m-H;if(E+O>i){s.blit(d,E,_,H,i-E),H+=i-E,E=i;break}O<=0?H-=2*m:(s.blit(d,E,_,H,O),E+=O,H=c-m),R=G(),M+=2*m/t,V+=R/t,(A=x+R-P)<0&&(A=0),s.blit(p,0,w,x,R-A),x+=R}s.blit(p,R-A,p,0,A),z=A;var F=[];for(l=0;l>=1;i.m_revTgt[d]=u}i.twiddleRe=s.float_array(i.m_logN),i.twiddleIm=s.float_array(i.m_logN);for(var l=1,f=0;f>1,c=d>>1,l=d;if(e)for(var f=1/d,_=0;_>=1,c>>=1,l>>=1}for(var O,F,S=i.m_revTgt,C=0;CC&&(F=t[O=S[C]],t[O]=t[C],t[C]=F,F=s[O],s[O]=s[C],s[C]=F)};var p=t>>1;return i.unpack=function(e,s,d,h){e[0]=i.m_re[0],d[0]=i.m_im[0],s[0]=h[0]=0,e[p]=i.m_re[p],d[p]=i.m_im[p],s[p]=h[p]=0;for(var u=1;u{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=class Bisector{constructor(e){this.lower=e.start,this.upper=e.end,this.onprocess=e.process,this.position=0,this.n=0}iterate(){return this.n++,this.position=Math.floor((this.lower+this.upper)/2),this.onprocess(this.lower,this.upper,this.position)}start(){return this.iterate(),this}left(){return this.upper=this.position,this.iterate()}right(){return this.lower=this.position,this.iterate()}};t.default=i},523:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=new class{hasTypedArrays(){return!!window.Uint32Array}hasWebAssembly(){return!!window.WebAssembly}hasWebAudio(){return!(!window.AudioContext&&!window.webkitAudioContext)}hasFlash(){return!1}hasAudio(){return this.hasWebAudio()}isBlacklisted(e){return!1}isSlow(){return!1}isTooSlow(){return!1}supported(e){return"OGVDecoder"===e?this.hasWebAssembly():"OGVPlayer"===e&&(this.supported("OGVDecoder")&&this.hasAudio())}};t.default=i},408:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderAudioProxy extends((0,d.default)({loadedMetadata:!1,audioFormat:null,audioBuffer:null,cpuTime:0})){init(e){this.proxy("init",[],e)}processHeader(e,t){this.proxy("processHeader",[e],t,[e])}processAudio(e,t){this.proxy("processAudio",[e],t,[e])}close(){this.terminate()}}var h=OGVDecoderAudioProxy;t.default=h},319:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(580));class OGVDecoderVideoProxy extends((0,d.default)({loadedMetadata:!1,videoFormat:null,frameBuffer:null,cpuTime:0})){init(e){this.proxy("init",[],e)}processHeader(e,t){this.proxy("processHeader",[e],t,[e])}processFrame(e,t){this.proxy("processFrame",[e],t,[e])}close(){this.terminate()}sync(){this.proxy("sync",[],(()=>{}))}recycleFrame(e){this.proxy("recycleFrame",[e],(()=>{}),[e.y.bytes.buffer,e.u.bytes.buffer,e.v.bytes.buffer])}}var h=OGVDecoderVideoProxy;t.default=h},445:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(539)),h="1.8.4-20210702161914-bd3a07f",u={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"};var c=class OGVLoaderBase{constructor(){this.base=this.defaultBase()}defaultBase(){}wasmSupported(){return d.default.wasmSupported()}scriptForClass(e){return u[e]}urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error("asked for URL for unknown class "+e)}urlForScript(e){if(e){var t=this.base;return void 0===t?t="":t+="/",t+e+"?version="+encodeURIComponent(h)}throw new Error("asked for URL for unknown script "+e)}loadClass(e,t,i){i=i||{};var s=this.getGlobal(),d=this.urlForClass(e),classWrapper=t=>((t=t||{}).locateFile=e=>"data:"===e.slice(0,5)?e:this.urlForScript(e),t.mainScriptUrlOrBlob=this.scriptForClass(e)+"?version="+encodeURIComponent(h),s[e](t));"function"==typeof s[e]?t(classWrapper):this.loadScript(d,(()=>{t(classWrapper)}))}};t.default=c},964:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(408)),h=s(i(319)),u=s(i(445)),c={audio:{proxy:d.default,worker:"ogv-worker-audio.js"},video:{proxy:h.default,worker:"ogv-worker-video.js"}},l={OGVDecoderAudioOpusW:"audio",OGVDecoderAudioVorbisW:"audio",OGVDecoderVideoTheoraW:"video",OGVDecoderVideoVP8W:"video",OGVDecoderVideoVP9W:"video",OGVDecoderVideoVP9SIMDW:"video",OGVDecoderVideoAV1W:"video",OGVDecoderVideoAV1SIMDW:"video"};class OGVLoaderWeb extends u.default{constructor(){super(),this.scriptStatus={},this.scriptCallbacks={}}getGlobal(){return window}defaultBase(){for(var e,t,i=document.querySelectorAll("script"),s=/^(?:|(.*)\/)ogv(?:-support|-es2017)?\.js(?:\?|#|$)/,d=0;d{var i=this.scriptCallbacks[e];delete this.scriptCallbacks[e],this.scriptStatus[e]="done",i.forEach((e=>{e()}))};i.addEventListener("load",done),i.addEventListener("error",done),i.src=e,document.querySelector("head").appendChild(i)}}workerProxy(e,t){var i=c[l[e]];if(!i)throw new Error("Requested worker for class with no proxy: "+e);var s,d=i.proxy,h=i.worker,u=this.urlForScript(this.scriptForClass(e)),_=this.urlForScript(h),p=function construct(t){return new d(s,e,t)};if(_.match(/^https?:|\/\//i)){var m,g,v,y,b,T=!1,k=!1;function completionCheck(){if(1==T&&1==k){var e=v+" "+y+"\nOGVLoader.base = "+JSON.stringify(f.base);try{b=new Blob([e],{type:"application/javascript"})}catch(t){window.BlobBuilder=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,(b=new BlobBuilder).append(e),b=b.getBlob()}s=new Worker(URL.createObjectURL(b)),t((function(e){return Promise.resolve(new p(e))}))}}(m=new XMLHttpRequest).open("GET",u,!0),m.onreadystatechange=function(){4==m.readyState&&200==m.status&&(v=m.responseText,T=!0,completionCheck())},m.send(),(g=new XMLHttpRequest).open("GET",_,!0),g.onreadystatechange=function(){4==g.readyState&&200==g.status&&(y=g.responseText,k=!0,completionCheck())},g.send()}else s=new Worker(_),t((function(e){return Promise.resolve(new p(e))}))}}var f=new OGVLoaderWeb,_=f;t.default=_},759:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(309)),h={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4};class OGVMediaError{constructor(e,t){this.code=e,this.message=t}}(0,d.default)(OGVMediaError,h),(0,d.default)(OGVMediaError.prototype,h);var u=OGVMediaError;t.default=u},278:(e,t)=>{"use strict";function split(e,t,i){var s=e.split(t,i).map((e=>function trim(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")}(e)));if("number"==typeof i)for(;s.length{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d,h=s(i(731)),u=s(i(936)),c=s(i(848)),l=s(i(964)),f=s(i(893)),_=s(i(309)),p=s(i(759)),m=s(i(278)),g=s(i(168)),v=s(i(625)),y=(()=>{if("function"==typeof setImmediate)return setImmediate;var e=new MessageChannel,t=[];return e.port1.onmessage=e=>{t.shift()()},function nextTick(i){t.push(i),e.port2.postMessage({})}})(),b={NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4},T="INITIAL",k="SEEKING_END",P="LOADED",w="PRELOAD",E="READY",x="PLAYING",A="SEEKING",R="ERROR",O="NOT_SEEKING",F="BISECT_TO_TARGET",S="BISECT_TO_KEYPOINT",C="LINEAR_TO_TARGET",B="exact",D="fast";function OGVJSElement(){var e=document.createElement("ogvjs");return Object.setPrototypeOf?Object.setPrototypeOf(e,Object.getPrototypeOf(this)):e.__proto__=this.__proto__,e}d="undefined"==typeof performance||void 0===typeof performance.now?Date.now:performance.now.bind(performance),OGVJSElement.prototype=Object.create(HTMLElement.prototype,{});class OGVPlayer extends OGVJSElement{constructor(e){if(super(),(e=e||{}).base=e.base||l.default.base,this._options=e,this._instanceId="ogvjs"+ ++OGVPlayer.instanceCount,void 0!==e.worker?this._enableWorker=!!e.worker:this._enableWorker=!!window.Worker,!l.default.wasmSupported())throw new Error("WebAssembly not supported");this._enableThreading=!!e.threading,this._enableSIMD=!!e.simd,this._state=T,this._seekState=O,this._detectedType=null,this._canvas=document.createElement("canvas"),this._frameSink=null,e.video&&this._canvas.captureStream?(this._mediaStream=new MediaStream,this._video="object"==typeof e.video?e.video:document.createElement("video"),this._video.playsInline=!0,this._video.srcObject=this._mediaStream):this._video=null,this._videoTrack=null,this._audioTrack=null,this._canvasStream=null,this.className=this._instanceId,(0,_.default)(this,b),this._view=this._video||this._canvas,this._view.style.position="absolute",this._view.style.top="0",this._view.style.left="0",this._view.style.width="100%",this._view.style.height="100%",this._view.style.objectFit="contain",this.appendChild(this._view),this._startTime=d(),this._codec=null,this._audioInfo=null,this._videoInfo=null,this._actionQueue=[],this._audioFeeder=null,this._muted=!1,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._prebufferingAudio=!1,this._initialSeekTime=0,this._currentSrc="",this._streamEnded=!1,this._mediaError=null,this._dataEnded=!1,this._byteLength=0,this._duration=null,this._lastSeenTimestamp=null,this._nextProcessingTimer,this._nextFrameTimer=null,this._loading=!1,this._started=!1,this._paused=!0,this._ended=!1,this._startedPlaybackInDocument=!1,this._stream=void 0,this._framesProcessed=0,this._targetPerFrameTime=1e3/60,this._actualPerFrameTime=0,this._totalFrameTime=0,this._totalFrameCount=0,this._playTime=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._totalJitter=0,this._droppedAudio=0,this._delayedAudio=0,this._lateFrames=0,this._poster="",this._thumbnail=null,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._decodedFrames=[],this._pendingFrames=[],this._lastFrameDecodeTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameDrawingTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastProxyTime=0,this._lastDrawingTime=0,this._lastFrameTimestamp=0,this._currentVideoCpuTime=0,this._lastTimeUpdate=0,this._timeUpdateInterval=250,this._seekTargetTime=0,this._bisectTargetTime=0,this._seekMode=null,this._lastSeekPosition=null,this._seekBisector=null,this._didSeek=null,this._depth=0,this._needProcessing=!1,this._pendingFrame=0,this._pendingAudio=0,this._framePipelineDepth=8,this._frameParallelism=this._enableThreading?Math.min(16,navigator.hardwareConcurrency)||1:0,this._audioPipelineDepth=12,this._videoInfo=null,this._audioInfo=null,this._width=0,this._height=0,this._volume=1,this._playbackRate=1,Object.defineProperties(this,{src:{get:function getSrc(){return this.getAttribute("src")||""},set:function setSrc(e){this.setAttribute("src",e),this._loading=!1,this._prepForLoad("interactive")}},buffered:{get:function getBuffered(){var e;return e=this._stream&&this._byteLength&&this._duration?this._stream.getBufferedRanges().map((e=>e.map((e=>e/this._stream.length*this._duration)))):[[0,0]],new g.default(e)}},seekable:{get:function getSeekable(){return this.duration<1/0&&this._stream&&this._stream.seekable&&this._codec&&this._codec.seekable?new g.default([[0,this._duration]]):new g.default([])}},currentTime:{get:function getCurrentTime(){return this._state==A?this._seekTargetTime:this._codec?this._state!=x||this._paused?this._initialPlaybackOffset:this._getPlaybackTime():this._initialSeekTime},set:function setCurrentTime(e){this._seek(e,B)}},duration:{get:function getDuration(){return this._codec&&this._codec.loadedMetadata?null!==this._duration?this._duration:1/0:NaN}},paused:{get:function getPaused(){return this._paused}},ended:{get:function getEnded(){return this._ended}},seeking:{get:function getSeeking(){return this._state==A}},muted:{get:function getMuted(){return this._muted},set:function setMuted(e){this._muted=e,this._audioFeeder?this._audioFeeder.muted=this._muted:this._started&&!this._muted&&this._codec&&this._codec.hasAudio&&(this._log("unmuting: switching from timer to audio clock"),this._initAudioFeeder(),this._startPlayback(this._audioEndTimestamp)),this._fireEventAsync("volumechange")}},poster:{get:function getPoster(){return this._poster},set:function setPoster(e){if(this._poster=e,!this._started){this._thumbnail&&this.removeChild(this._thumbnail);var t=new Image;t.src=this._poster,t.className="ogvjs-poster",t.style.position="absolute",t.style.top="0",t.style.left="0",t.style.width="100%",t.style.height="100%",t.style.objectFit="contain",t.style.visibility="hidden",t.addEventListener("load",(()=>{this._thumbnail===t&&(OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:t.naturalWidth+"px",height:t.naturalHeight+"px"}),OGVPlayer.updatePositionOnResize(),t.style.visibility="visible")})),this._thumbnail=t,this.appendChild(t)}}},videoWidth:{get:function getVideoWidth(){return this._videoInfo?this._videoInfo.displayWidth:0}},videoHeight:{get:function getVideoHeight(){return this._videoInfo?this._videoInfo.displayHeight:0}},ogvjsVideoFrameRate:{get:function getOgvJsVideoFrameRate(){return this._videoInfo?0==this._videoInfo.fps?this._totalFrameCount/(this._totalFrameTime/1e3):this._videoInfo.fps:0}},ogvjsAudioChannels:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.channels:0}},ogvjsAudioSampleRate:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.rate:0}},width:{get:function getWidth(){return this._width},set:function setWidth(e){this._width=parseInt(e,10),this.style.width=this._width+"px",OGVPlayer.updatePositionOnResize()}},height:{get:function getHeight(){return this._height},set:function setHeight(e){this._height=parseInt(e,10),this.style.height=this._height+"px",OGVPlayer.updatePositionOnResize()}},autoplay:{get:function getAutoplay(){return!1},set:function setAutoplay(e){}},controls:{get:function getControls(){return!1},set:function setControls(e){}},loop:{get:function getLoop(){return!1},set:function setLoop(e){}},crossOrigin:{get:function getCrossOrigin(){return null},set:function setCrossOrigin(e){}},currentSrc:{get:function getCurrentSrc(){return this._currentSrc}},defaultMuted:{get:function getDefaultMuted(){return!1}},defaultPlaybackRate:{get:function getDefaultPlaybackRate(){return 1}},error:{get:function getError(){return this._state===R?this._mediaError?this._mediaError:new p.default("unknown error occurred in media procesing"):null}},preload:{get:function getPreload(){return this.getAttribute("preload")||""},set:function setPreload(e){this.setAttribute("preload",e)}},readyState:{get:function getReadyState(){return this._stream&&this._codec&&this._codec.loadedMetadata?OGVPlayer.HAVE_ENOUGH_DATA:OGVPlayer.HAVE_NOTHING}},networkState:{get:function getNetworkState(){return this._stream?this._stream.waiting?OGVPlayer.NETWORK_LOADING:OGVPlayer.NETWORK_IDLE:this.readyState==OGVPlayer.HAVE_NOTHING?OGVPlayer.NETWORK_EMPTY:OGVPlayer.NETWORK_NO_SOURCE}},playbackRate:{get:function getPlaybackRate(){return this._playbackRate},set:function setPlaybackRate(e){var t=Number(e)||1;this._audioFeeder?this._audioFeeder.tempo=t:this._paused||(this._initialPlaybackOffset=this._getPlaybackTime(),this._initialPlaybackPosition=t*d()/1e3),this._playbackRate=t,this._fireEventAsync("ratechange")}},played:{get:function getPlayed(){return new g.default([[0,this.currentTime]])}},volume:{get:function getVolume(){return this._volume},set:function setVolume(e){this._volume=+e,this._audioFeeder&&(this._audioFeeder.volume=this._volume),this._fireEventAsync("volumechange")}}}),this.onframecallback=null,this.onloadstate=null,this.onprogress=null,this.onsuspend=null,this.onabort=null,this.onemptied=null,this.onstalled=null,this.onloadedmetadata=null,this.onloadeddata=null,this.oncanplay=null,this.oncanplaythrough=null,this.onplaying=null,this.onwaiting=null,this.onseeking=null,this.onseeked=null,this.onended=null,this.ondurationchange=null,this.ontimeupdate=null,this.onplay=null,this.onpause=null,this.onratechange=null,this.onresize=null,this.onvolumechange=null,this.onaudiofeedercreated=null}_time(e){var t=d();e();var i=d()-t;return this._lastFrameDecodeTime+=i,i}_log(e){var t=this._options;if(t.debug){var i=d()-this._startTime;t.debugFilter&&!e.match(t.debugFilter)||console.log("["+Math.round(10*i)/10+"ms] "+e)}}_fireEvent(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEvent "+e);var i,s="function"==typeof Event;for(var d in s?i=new CustomEvent(e):(i=document.createEvent("Event")).initEvent(e,!1,!1),t)t.hasOwnProperty(d)&&(i[d]=t[d]);var h=this.dispatchEvent(i);!s&&"resize"===e&&this.onresize&&h&&this.onresize.call(this,i)}_fireEventAsync(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEventAsync "+e),y((()=>{this._fireEvent(e,t)}))}static initSharedAudioContext(){c.default.initSharedAudioContext()}_initAudioFeeder(){var e=this._options,t={bufferSize:8192};if(e.audioContext&&(t.audioContext=e.audioContext),e.audioDestination&&(t.output=e.audioDestination),e.audioBackendFactory&&(t.backendFactory=e.audioBackendFactory),this._video&&!t.output){t.audioContext||(t.audioContext=c.default.initSharedAudioContext());var i=t.audioContext.createMediaStreamDestination();this._audioTrack=i.stream.getAudioTracks()[0],this._mediaStream.addTrack(this._audioTrack),navigator.userAgent.match(/WebKit/)&&(this._video.src=this._mediaStream),this._video.play(),t.output=i}var s=this._audioFeeder=new c.default(t);s.init(this._audioInfo.channels,this._audioInfo.rate),this.onaudiofeedercreated&&this.onaudiofeedercreated(this._audioFeeder),s.bufferThreshold=1,s.volume=this.volume,s.muted=this.muted,s.tempo=this.playbackRate,s.onbufferlow=()=>{this._log("onbufferlow"),this._stream&&(this._stream.buffering||this._stream.seeking)||this._pendingAudio||this._pingProcessing()},s.onstarved=()=>{this._dataEnded?this._log("onstarved: appear to have reached end of audio"):(this._log("onstarved: halting audio due to starvation"),this._stopPlayback(),this._prebufferingAudio=!0),this._isProcessing()||this._pingProcessing(0)}}_startPlayback(e){if(this._audioFeeder){this._audioFeeder.start();var t=this._audioFeeder.getPlaybackState();this._initialPlaybackPosition=t.playbackPosition}else this._initialPlaybackPosition=this._playbackRate*d()/1e3;void 0!==e&&(this._initialPlaybackOffset=e),this._prebufferingAudio=!1,this._log("continuing at "+this._initialPlaybackPosition+", "+this._initialPlaybackOffset)}_stopPlayback(){this._initialPlaybackOffset=this._getPlaybackTime(),this._log("pausing at "+this._initialPlaybackOffset),this._audioFeeder&&this._audioFeeder.stop()}_getPlaybackTime(e){return this._prebufferingAudio||this._paused?this._initialPlaybackOffset:(this._audioFeeder?(e=e||this._audioFeeder.getPlaybackState()).playbackPosition:this._playbackRate*d()/1e3)-this._initialPlaybackPosition+this._initialPlaybackOffset}_stopVideo(){this._log("STOPPING"),this._state=T,this._seekState=O,this._started=!1,this._ended=!1,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._lastFrameDecodeTime=0,this._prebufferingAudio=!1,this._actionQueue.splice(0,this._actionQueue.length),this._stream&&(this._stream.abort(),this._stream=null,this._streamEnded=!1),this._codec&&(this._codec.close(),this._codec=null,this._pendingFrame=0,this._pendingAudio=0,this._dataEnded=!1),this._videoInfo=null,this._audioInfo=null,this._audioFeeder&&(this._audioFeeder.close(),this._audioFeeder=null),this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._frameSink&&(this._frameSink.clear(),this._frameSink=null),this._decodedFrames&&(this._decodedFrames=[]),this._pendingFrames&&(this._pendingFrames=[]),this._initialSeekTime=0,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._duration=null}_doFrameComplete(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._startedPlaybackInDocument&&!document.body.contains(this)&&y((()=>{this.stop()}));var t=d(),i=t-this._lastFrameTimestamp,s=this._actualPerFrameTime-this._targetPerFrameTime;this._totalJitter+=Math.abs(s),this._playTime+=i;var h={cpuTime:this._lastFrameDecodeTime,drawingTime:this._drawingTime-this._lastFrameDrawingTime,bufferTime:this._bufferTime-this._lastFrameBufferTime,proxyTime:this._proxyTime-this._lastFrameProxyTime,demuxerTime:0,videoTime:0,audioTime:0,clockTime:this._actualPerFrameTime,late:e.dropped,dropped:e.dropped};function n(e){return Math.round(10*e)/10}this._codec&&(h.demuxerTime=this._codec.demuxerCpuTime-this._lastFrameDemuxerCpuTime,h.videoTime+=this._currentVideoCpuTime-this._lastFrameVideoCpuTime,h.audioTime+=this._codec.audioCpuTime-this._lastFrameAudioCpuTime),h.cpuTime+=h.demuxerTime,this._lastFrameDecodeTime=0,this._lastFrameTimestamp=t,this._codec?(this._lastFrameVideoCpuTime=this._currentVideoCpuTime,this._lastFrameAudioCpuTime=this._codec.audioCpuTime,this._lastFrameDemuxerCpuTime=this._codec.demuxerCpuTime):(this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0),this._lastFrameDrawingTime=this._drawingTime,this._lastFrameBufferTime=this._bufferTime,this._lastFrameProxyTime=this._proxyTime,this._log("drew frame "+e.frameEndTimestamp+": clock time "+n(i)+" (jitter "+n(s)+") cpu: "+n(h.cpuTime)+" (mux: "+n(h.demuxerTime)+" buf: "+n(h.bufferTime)+" draw: "+n(h.drawingTime)+" proxy: "+n(h.proxyTime)+") vid: "+n(h.videoTime)+" aud: "+n(h.audioTime)),this._fireEventAsync("framecallback",h),(!this._lastTimeUpdate||t-this._lastTimeUpdate>=this._timeUpdateInterval)&&(this._lastTimeUpdate=t,this._fireEventAsync("timeupdate")),this._codec&&e.yCbCrBuffer&&this._codec.recycleFrame(e.yCbCrBuffer)}_seekStream(e){this._stream.seeking&&this._stream.abort(),this._stream.buffering&&this._stream.abort(),this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._stream.seek(e).then((()=>{this._readBytesAndWait()})).catch((e=>{this._onStreamError(e)}))}_onStreamError(e){"AbortError"===e.name?this._log("i/o promise canceled; ignoring"):(this._log("i/o error: "+e),this._mediaError=new p.default(p.default.MEDIA_ERR_NETWORK,String(e)),this._state=R,this._stopPlayback())}_seek(e,t){if(this._log("requested seek to "+e+", mode "+t),this.readyState==this.HAVE_NOTHING)return this._log("not yet loaded; saving seek position for later"),void(this._initialSeekTime=e);if(this._stream&&!this._stream.seekable)throw new Error("Cannot seek a non-seekable stream");if(this._codec&&!this._codec.seekable)throw new Error("Cannot seek in a non-seekable file");var prepForSeek=i=>{this._stream&&this._stream.buffering&&this._stream.abort(),this._stream&&this._stream.seeking&&this._stream.abort(),this._actionQueue.splice(0,this._actionQueue.length),this._stopPlayback(),this._prebufferingAudio=!1,this._audioFeeder&&this._audioFeeder.flush(),this._state=A,this._seekTargetTime=e,this._seekMode=t,this._codec?this._codec.flush(i):i()};prepForSeek((()=>{this._isProcessing()||this._pingProcessing(0)})),this._actionQueue.push((()=>{prepForSeek((()=>{this._doSeek(e)}))}))}_doSeek(e){this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._state=A,this._seekTargetTime=e,this._lastSeekPosition=-1,this._decodedFrames=[],this._pendingFrames=[],this._pendingFrame=0,this._pendingAudio=0,this._didSeek=!1,this._codec.seekToKeypoint(e,(t=>{if(t)return this._seekState=C,this._fireEventAsync("seeking"),this._didSeek?void 0:void this._pingProcessing();this._codec.getKeypointOffset(e,(e=>{e>0?(this._seekState=C,this._seekStream(e)):(this._seekState=F,this._startBisection(this._seekTargetTime)),this._fireEventAsync("seeking")}))}))}_startBisection(e){var t=Math.max(0,this._stream.length-65536);this._bisectTargetTime=e,this._seekBisector=new f.default({start:0,end:t,process:(e,t,i)=>i!=this._lastSeekPosition&&(this._lastSeekPosition=i,this._codec.flush((()=>{this._seekStream(i)})),!0)}),this._seekBisector.start()}_continueSeekedPlayback(){this._seekState=O,this._state=E,this._frameEndTimestamp=this._codec.frameTimestamp,this._audioEndTimestamp=this._codec.audioTimestamp,this._codec.hasAudio?this._seekTargetTime=this._codec.audioTimestamp:this._seekTargetTime=this._codec.frameTimestamp,this._initialPlaybackOffset=this._seekTargetTime;var finishedSeeking=()=>{this._lastTimeUpdate=this._seekTargetTime,this._fireEventAsync("timeupdate"),this._fireEventAsync("seeked"),this._isProcessing()||this._pingProcessing()};if(this._codec.hasVideo&&this._decodedFrames.length){var e=this._decodedFrames.shift();this._drawFrame(e.yCbCrBuffer),finishedSeeking()}else{if(this._codec.hasVideo&&this._codec.frameReady)return this._codec.decodeFrame((e=>{e&&this._drawFrame(this._codec.frameBuffer),finishedSeeking()})),void this._codec.sync();finishedSeeking()}}_drawFrame(e){this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null),this._frameSink.drawFrame(e),this._video&&(this._canvasStream||(this._canvasStream=this._canvas.captureStream(0),this._videoTrack=this._canvasStream.getVideoTracks()[0],this._mediaStream.addTrack(this._videoTrack),navigator.userAgent.match(/WebKit/)&&(this._video.src=this._mediaStream,this._video.play())),this._videoTrack&&this._videoTrack.requestFrame?this._videoTrack.requestFrame():this._canvasStream&&this._canvasStream.requestFrame&&this._canvasStream.requestFrame())}_doProcessLinearSeeking(){var e;if(e=this._codec.hasVideo?this._targetPerFrameTime/1e3:1/256,this._codec.hasVideo){if(this._pendingFrame)return;if(!this._codec.frameReady)return void this._codec.process((e=>{e?this._pingProcessing():this._streamEnded?(this._log("stream ended during linear seeking on video"),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}));if(this._seekMode===D&&this._codec.keyframeTimestamp==this._codec.frameTimestamp)return void this._continueSeekedPlayback();if(this._codec.frameTimestamp<=this._seekTargetTime){var t=this._codec.frameTimestamp;return this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:t}),this._decodedFrames.splice(0,this._decodedFrames.length),this._codec.decodeFrame((e=>{this._pendingFrame--,this._pendingFrames.shift(),this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:t}),this._pingProcessing()})),void this._codec.sync()}if(!this._codec.hasAudio)return void this._continueSeekedPlayback()}if(this._codec.hasAudio){if(this._pendingAudio)return;return this._codec.audioReady?this._codec.audioTimestamp+e{this._pingProcessing()})):void this._continueSeekedPlayback():void this._codec.process((e=>{e?this._pingProcessing():this._streamEnded?(this._log("stream ended during linear seeking on audio"),this._dataEnded=!0,this._continueSeekedPlayback()):this._readBytesAndWait()}))}}_doProcessBisectionSeek(){var e,t;if(this._codec.hasVideo)t=this._codec.frameTimestamp,e=this._targetPerFrameTime/1e3;else{if(!this._codec.hasAudio)throw new Error("Invalid seek state; no audio or video track available");t=this._codec.audioTimestamp,e=1/256}t<0?this._codec.process((e=>{if(e)this._pingProcessing();else if(this._streamEnded){if(this._log("stream ended during bisection seek"),!this._seekBisector.right())throw this._log("failed going back"),new Error("not sure what to do")}else this._readBytesAndWait()})):t-e/2>this._bisectTargetTime?this._seekBisector.left()||(this._log("close enough (left)"),this._seekTargetTime=t,this._continueSeekedPlayback()):t+e/20?this._targetPerFrameTime=1e3/this._videoInfo.fps:this._targetPerFrameTime=16.667,this._canvas.width=this._videoInfo.displayWidth,this._canvas.height=this._videoInfo.displayHeight,OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:this._videoInfo.displayWidth+"px",height:this._videoInfo.displayHeight+"px"}),OGVPlayer.updatePositionOnResize();var e={};void 0!==this._options.webGL&&(e.webGL=this._options.webGL),this._options.forceWebGL&&(e.webGL="required"),this._frameSink=h.default.attach(this._canvas,e)}_doProcessing(){if(this._didSeek&&(this._didSeek=!1),this._nextProcessingTimer=null,this._isProcessing(),this._depth>0)throw new Error("REENTRANCY FAIL: doProcessing recursing unexpectedly");var e=0;do{if(this._needProcessing=!1,this._depth++,this._doProcessingLoop(),this._depth--,this._needProcessing&&this._isProcessing())throw new Error("REENTRANCY FAIL: waiting on input or codec but asked to keep processing");++e>500&&(this._log("stuck in processing loop; breaking with timer"),this._needProcessing=0,this._pingProcessing(0))}while(this._needProcessing)}_doProcessingLoop(){if(this._actionQueue.length)this._actionQueue.shift()();else if(this._state==T)this._doProcessInitial();else if(this._state==k)this._doProcessSeekingEnd();else if(this._state==P)this._doProcessLoaded();else if(this._state==w)this._doProcessPreload();else if(this._state==E)this._doProcessReady();else if(this._state==A)this._doProcessSeeking();else if(this._state==x)this._doProcessPlay();else{if(this._state!=R)throw new Error("Unexpected OGVPlayer state "+this._state);this._doProcessError()}}_doProcessInitial(){if(this._codec.loadedMetadata){if(!this._codec.hasVideo&&!this._codec.hasAudio)throw new Error("No audio or video found, something is wrong");this._codec.hasAudio&&(this._audioInfo=this._codec.audioFormat),this._codec.hasVideo&&(this._videoInfo=this._codec.videoFormat,this._setupVideo()),isNaN(this._codec.duration)||(this._duration=this._codec.duration),null===this._duration&&this._stream.seekable&&"video/ogg"==this._detectedType?(this._state=k,this._lastSeenTimestamp=-1,this._codec.flush((()=>{this._seekStream(Math.max(0,this._stream.length-131072))}))):(this._state=P,this._pingProcessing())}else this._codec.process((e=>{if(e)this._pingProcessing();else{if(this._streamEnded)throw new Error("end of file before headers found");this._log("reading more cause we are out of data"),this._readBytesAndWait()}}))}_doProcessSeekingEnd(){this._codec.frameReady?(this._log("saw frame with "+this._codec.frameTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.frameTimestamp),this._codec.discardFrame((()=>{this._pingProcessing()}))):this._codec.audioReady?(this._log("saw audio with "+this._codec.audioTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.audioTimestamp),this._codec.discardAudio((()=>{this._pingProcessing()}))):this._codec.process((e=>{e?this._pingProcessing():this._stream.eof?(this._log("seek-duration: we are at the end: "+this._lastSeenTimestamp),this._lastSeenTimestamp>0&&(this._duration=this._lastSeenTimestamp),this._state=P,this._codec.flush((()=>{this._streamEnded=!1,this._dataEnded=!1,this._seekStream(0)}))):this._readBytesAndWait()}))}_doProcessLoaded(){this._state=w,this._fireEventAsync("loadedmetadata"),this._fireEventAsync("durationchange"),this._codec.hasVideo&&this._fireEventAsync("resize"),this._pingProcessing(0)}_doProcessPreload(){!this._codec.frameReady&&this._codec.hasVideo||!this._codec.audioReady&&this._codec.hasAudio?this._codec.process((e=>{e?this._pingProcessing():this._streamEnded?this._ended=!0:this._readBytesAndWait()})):(this._state=E,this._fireEventAsync("loadeddata"),this._pingProcessing())}_doProcessReady(){if(this._log("initial seek to "+this._initialSeekTime),this._initialSeekTime>0){var e=this._initialSeekTime;this._initialSeekTime=0,this._log("initial seek to "+e),this._doSeek(e)}else if(this._paused)this._log("paused while in ready");else{var finishStartPlaying=()=>{this._log("finishStartPlaying"),this._state=x,this._lastFrameTimestamp=d(),this._codec.hasAudio&&this._audioFeeder?this._prebufferingAudio=!0:this._startPlayback(),this._pingProcessing(0),this._fireEventAsync("play"),this._fireEventAsync("playing")};!this._codec.hasAudio||this._audioFeeder||this._muted?finishStartPlaying():(this._initAudioFeeder(),this._audioFeeder.waitUntilReady(finishStartPlaying))}}_doProcessSeeking(){if(this._seekState==O)throw new Error("seeking in invalid state (not seeking?)");if(this._seekState==F)this._doProcessBisectionSeek();else if(this._seekState==S)this._doProcessBisectionSeek();else{if(this._seekState!=C)throw new Error("Invalid seek state "+this._seekState);this._doProcessLinearSeeking()}}_doProcessPlay(){var e=this._codec;if(this._paused)this._log("paused during playback; stopping loop");else if((!e.hasAudio||e.audioReady||this._pendingAudio||this._dataEnded)&&(!e.hasVideo||e.frameReady||this._pendingFrame||this._decodedFrames.length||this._dataEnded)){var t,i,s,d=null,h=0,u=!1,c=0;if(e.hasAudio&&this._audioFeeder?(d=this._audioFeeder.getPlaybackState(),h=this._getPlaybackTime(d),u=this._dataEnded&&0==this._audioFeeder.durationBuffered,this._prebufferingAudio&&(this._audioFeeder.durationBuffered>=2*this._audioFeeder.bufferThreshold&&(!e.hasVideo||this._decodedFrames.length>=this._framePipelineDepth)||this._dataEnded)&&(this._log("prebuffering audio done; buffered to "+this._audioFeeder.durationBuffered),this._startPlayback(h),this._prebufferingAudio=!1),d.dropped!=this._droppedAudio&&this._log("dropped "+(d.dropped-this._droppedAudio)),d.delayed!=this._delayedAudio&&this._log("delayed "+(d.delayed-this._delayedAudio)),this._droppedAudio=d.dropped,this._delayedAudio=d.delayed,(t=this._audioFeeder.durationBuffered<=2*this._audioFeeder.bufferThreshold)&&(this._codec.audioReady?this._pendingAudio>=this._audioPipelineDepth&&(this._log("audio decode disabled: "+this._pendingAudio+" packets in flight"),t=!1):t=!1)):(h=this._getPlaybackTime(),t=this._codec.audioReady&&this._audioEndTimestamp0,s=this._pendingFrame+this._decodedFrames.length=l){for(var f=-1,_=0;_=0)for(;f-- >=0;){this._lateFrames++;var p=this._decodedFrames.shift();this._log("skipping already-decoded late frame at "+p.frameEndTimestamp),c=1e3*(p.frameEndTimestamp-h),this._frameEndTimestamp=p.frameEndTimestamp,this._actualPerFrameTime=this._targetPerFrameTime-c,this._framesProcessed++,p.dropped=!0,this._doFrameComplete(p)}var m=this._codec.nextKeyframeTimestamp,g=m-this._targetPerFrameTime/1e3*(this._framePipelineDepth+this._pendingFrame);if(m>=0&&m!=this._codec.frameTimestamp&&h>=g){this._log("skipping late frame at "+this._decodedFrames[0].frameEndTimestamp+" vs "+h+", expect to see keyframe at "+m);for(var v=0;v{})),this._framesProcessed++,this._doFrameComplete(k)}return void(this._isProcessing()||this._pingProcessing())}}else i&&c<=4||(i=!1)}if(s){this._log("play loop: ready to decode frame; thread depth: "+this._pendingFrame+", have buffered: "+this._decodedFrames.length),0==this._videoInfo.fps&&this._codec.frameTimestamp-this._frameEndTimestamp>0&&(this._targetPerFrameTime=1e3*(this._codec.frameTimestamp-this._frameEndTimestamp)),this._totalFrameTime+=this._targetPerFrameTime,this._totalFrameCount++;var P=this._frameEndTimestamp=this._codec.frameTimestamp;this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:P});var w=this._pendingFrames,E=!1,x=this._time((()=>{this._codec.decodeFrame((e=>{w===this._pendingFrames?(this._log("play loop callback: decoded frame"),this._pendingFrame--,this._pendingFrames.shift(),e?this._decodedFrames.push({yCbCrBuffer:this._codec.frameBuffer,videoCpuTime:this._codec.videoCpuTime,frameEndTimestamp:P}):this._log("Bad video packet or something"),this._codec.process((()=>{this._isProcessing()||this._pingProcessing(E?void 0:0)}))):this._log("play loop callback after flush, discarding")}))}));this._pendingFrame&&(E=!0,this._proxyTime+=x,this._pingProcessing(),this._dataEnded&&this._codec.sync())}else if(t){this._log("play loop: ready for audio; depth: "+this._pendingAudio),this._pendingAudio++;var A=this._codec.audioTimestamp,R=this._time((()=>{this._codec.decodeAudio((e=>{if(this._pendingAudio--,this._log("play loop callback: decoded audio"),this._audioEndTimestamp=A,e){var t=this._codec.audioBuffer;if(t&&(this._bufferTime+=this._time((()=>{this._audioFeeder&&this._audioFeeder.bufferData(t)})),!this._codec.hasVideo)){this._framesProcessed++;var i={frameEndTimestamp:this._audioEndTimestamp};this._doFrameComplete(i)}}this._isProcessing()||this._pingProcessing()}))}));this._pendingAudio&&(this._proxyTime+=R,this._codec.audioReady?this._pingProcessing():this._doProcessPlayDemux())}else if(i){this._log("play loop: ready to draw frame"),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null);var O=this._decodedFrames.shift();this._currentVideoCpuTime=O.videoCpuTime,this._drawingTime+=this._time((()=>{this._drawFrame(O.yCbCrBuffer)})),this._framesProcessed++,this._doFrameComplete(O),this._pingProcessing()}else if(!this._decodedFrames.length||this._nextFrameTimer||this._prebufferingAudio)if(this._dataEnded&&!(this._pendingAudio||this._pendingFrame||this._decodedFrames.length)){this._log("play loop: playback reached end of data "+[this._pendingAudio,this._pendingFrame,this._decodedFrames.length]);var F=0;this._codec.hasAudio&&this._audioFeeder&&(F=1e3*this._audioFeeder.durationBuffered),F>0?(this._log("play loop: ending pending "+F+" ms"),this._pingProcessing(Math.max(0,F))):(this._log("play loop: ENDING NOW: playback time "+this._getPlaybackTime()+"; frameEndTimestamp: "+this._frameEndTimestamp),this._stopPlayback(),this._prebufferingAudio=!1,this._initialPlaybackOffset=Math.max(this._audioEndTimestamp,this._frameEndTimestamp),this._ended=!0,this._paused=!0,this._fireEventAsync("pause"),this._fireEventAsync("ended"))}else this._prebufferingAudio&&(e.hasVideo&&!e.frameReady||e.hasAudio&&!e.audioReady)?(this._log("play loop: prebuffering demuxing"),this._doProcessPlayDemux()):this._log("play loop: waiting on async/timers");else{var S=c;this._log("play loop: setting a timer for drawing "+S),this._nextFrameTimer=setTimeout((()=>{this._nextFrameTimer=null,this._pingProcessing()}),S)}}else this._log("play loop: demuxing"),this._doProcessPlayDemux()}_doProcessPlayDemux(){var e=this._codec.frameReady,t=this._codec.audioReady;this._codec.process((i=>{this._codec.frameReady&&!e||this._codec.audioReady&&!t?(this._log("demuxer has packets"),this._pingProcessing()):i?(this._log("demuxer processing to find more packets"),this._pingProcessing()):(this._log("demuxer ran out of data"),this._streamEnded?(this._log("demuxer reached end of data stream"),this._dataEnded=!0,this._pingProcessing()):(this._log("demuxer loading more data"),this._readBytesAndWait()))}))}_doProcessError(){}_isProcessing(){return this._stream&&(this._stream.buffering||this._stream.seeking)||this._codec&&this._codec.processing}_readBytesAndWait(){if(this._stream.buffering||this._stream.seeking)this._log("readBytesAndWait during i/o");else{this._stream.read(32768).then((e=>{this._log("got input "+[e.byteLength]),e.byteLength&&this._actionQueue.push((()=>{this._codec.receiveInput(e,(()=>{this._pingProcessing()}))})),this._stream.eof&&(this._log("stream is at end!"),this._streamEnded=!0),this._isProcessing()||this._pingProcessing()})).catch((e=>{this._onStreamError(e)}))}}_pingProcessing(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(this._stream&&this._stream.waiting)this._log("waiting on input");else{this._nextProcessingTimer&&(this._log("canceling old processing timer"),clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null);e>-1/256?this._nextProcessingTimer=setTimeout((()=>{this._pingProcessing()}),e):this._depth?this._needProcessing=!0:this._doProcessing()}}_startProcessingVideo(e){if(!this._started&&!this._codec){this._framesProcessed=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._started=!0,this._ended=!1;var t={base:this._options.base,worker:this._enableWorker,threading:this._enableThreading,simd:this._enableSIMD};this._detectedType&&(t.type=this._detectedType),this._codec=new v.default(t),this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastDrawingTime=0,this._lastProxyTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastFrameDrawingTime=0,this._currentVideoCpuTime=0,this._codec.onseek=e=>{this._didSeek=!0,this._stream&&this._seekStream(e)},this._codec.init((()=>{this._codec.receiveInput(e,(()=>{this._readBytesAndWait()}))}))}}_loadCodec(e){this._stream.read(1024).then((t=>{var i=new Uint8Array(t);i.length>4&&i[0]=="O".charCodeAt(0)&&i[1]=="g".charCodeAt(0)&&i[2]=="g".charCodeAt(0)&&i[3]=="S".charCodeAt(0)?this._detectedType="video/ogg":i.length>4&&26==i[0]&&69==i[1]&&223==i[2]&&163==i[3]?this._detectedType="video/webm":this._detectedType="video/ogg",e(t)}))}_prepForLoad(e){this._stopVideo();var doLoad=()=>{this._options.stream?this._stream=this._options.stream:this._stream=new u.default({url:this.src,cacheSize:16777216,progressive:!1}),this._stream.load().then((()=>{this._loading=!1,this._currentSrc=this.src,this._byteLength=this._stream.seekable?this._stream.length:0;var e=this._stream.headers["x-content-duration"];"string"==typeof e&&(this._duration=parseFloat(e)),this._loadCodec((e=>{this._startProcessingVideo(e)}))})).catch((e=>{this._onStreamError(e)}))};this._currentSrc="",this._loading=!0,this._actionQueue.push((()=>{e&&"none"===this.preload?this._loading=!1:doLoad()})),this._pingProcessing(0)}load(){this._prepForLoad()}canPlayType(e){var t=new m.default(e);function checkTypes(e){if(t.codecs){var i=0,s=0;return t.codecs.forEach((t=>{e.indexOf(t)>=0?i++:s++})),0===i||s>0?"":"probably"}return"maybe"}return"ogg"!==t.minor||"audio"!==t.major&&"video"!==t.major&&"application"!==t.major?"webm"!==t.minor||"audio"!==t.major&&"video"!==t.major?"":checkTypes(["vorbis","opus","vp8","vp9"]):checkTypes(["vorbis","opus","theora"])}play(){this._muted||this._options.audioContext||OGVPlayer.initSharedAudioContext(),this._paused&&(this._startedPlaybackInDocument=document.body.contains(this),this._paused=!1,this._state==A||(this._started&&this._codec&&this._codec.loadedMetadata?(this._ended&&this._stream&&this._byteLength?(this._log(".play() starting over after end"),this._seek(0)):this._log(".play() while already started"),this._state=E,this._isProcessing()||this._pingProcessing()):this._loading?this._log(".play() while loading"):(this._log(".play() before started"),this._stream||this.load()))),this._video&&this._video.paused&&this._video.play()}getPlaybackStats(){return{targetPerFrameTime:this._targetPerFrameTime,framesProcessed:this._framesProcessed,videoBytes:this._codec?this._codec.videoBytes:0,audioBytes:this._codec?this._codec.audioBytes:0,playTime:this._playTime,demuxingTime:this._codec?this._codec.demuxerCpuTime-this._lastDemuxerCpuTime:0,videoDecodingTime:this._codec?this._codec.videoCpuTime-this._lastVideoCpuTime:0,audioDecodingTime:this._codec?this._codec.audioCpuTime-this._lastAudioCpuTime:0,bufferTime:this._bufferTime-this._lastBufferTime,drawingTime:this._drawingTime-this._lastDrawingTime,proxyTime:this._proxyTime-this._lastProxyTime,droppedAudio:this._droppedAudio,delayedAudio:this._delayedAudio,jitter:this._totalJitter/this._framesProcessed,lateFrames:this._lateFrames}}resetPlaybackStats(){this._framesProcessed=0,this._playTime=0,this._codec&&(this._lastDemuxerCpuTime=this._codec.demuxerCpuTime,this._lastVideoCpuTime=this._codec.videoCpuTime,this._lastAudioCpuTime=this._codec.audioCpuTime,this._codec.videoBytes=0,this._codec.audioBytes=0),this._lastBufferTime=this._bufferTime,this._lastDrawingTime=this._drawingTime,this._lastProxyTime=this._proxyTime,this._totalJitter=0,this._totalFrameTime=0,this._totalFrameCount=0}getVideoFrameSink(){return this._frameSink}getCanvas(){return this._canvas}getVideo(){return this._video}pause(){this._paused||(this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._stopPlayback(),this._prebufferingAudio=!1,this._paused=!0,this._fireEvent("pause"))}stop(){this._stopVideo(),this._paused=!0}fastSeek(e){this._seek(+e,D)}}if((0,_.default)(OGVPlayer,b),OGVPlayer.instanceCount=0,OGVPlayer.styleManager=new function StyleManager(){var e=document.createElement("style");e.type="text/css",e.textContent="ogvjs { display: inline-block; position: relative; -webkit-user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); ",document.head.appendChild(e);var t=e.sheet;this.appendRule=function(e,i){var s=[];for(var d in i)i.hasOwnProperty(d)&&s.push(d+":"+i[d]);var h=e+"{"+s.join(";")+"}";t.insertRule(h,t.cssRules.length-1)}},OGVPlayer.supportsObjectFit="string"==typeof document.createElement("canvas").style.objectFit,OGVPlayer.supportsObjectFit&&navigator.userAgent.match(/iPhone|iPad|iPod Touch/)&&(OGVPlayer.supportsObjectFit=!1),OGVPlayer.supportsObjectFit&&navigator.userAgent.match(/Edge/)&&(OGVPlayer.supportsObjectFit=!1),OGVPlayer.supportsObjectFit)OGVPlayer.updatePositionOnResize=function(){};else{OGVPlayer.updatePositionOnResize=function(){function fixup(e,t,i){var s=e.offsetParent||e.parentNode,d=t/i;if(d>s.offsetWidth/s.offsetHeight){var h=s.offsetWidth/d,u=(s.offsetHeight-h)/2;e.style.width="100%",e.style.height=h+"px",e.style.marginLeft=0,e.style.marginRight=0,e.style.marginTop=u+"px",e.style.marginBottom=u+"px"}else{var c=s.offsetHeight*d,l=(s.offsetWidth-c)/2;e.style.width=c+"px",e.style.height="100%",e.style.marginLeft=l+"px",e.style.marginRight=l+"px",e.style.marginTop=0,e.style.marginBottom=0}}function queryOver(e,t){var i=document.querySelectorAll(e);Array.prototype.slice.call(i).forEach(t)}queryOver("ogvjs > canvas",(function(e){fixup(e,e.width,e.height)})),queryOver("ogvjs > img",(function(e){fixup(e,e.naturalWidth,e.naturalHeight)}))};var M=function fullResizeVideo(){y(OGVPlayer.updatePositionOnResize)};window.addEventListener("resize",OGVPlayer.updatePositionOnResize),window.addEventListener("orientationchange",OGVPlayer.updatePositionOnResize),document.addEventListener("fullscreenchange",M),document.addEventListener("mozfullscreenchange",M),document.addEventListener("webkitfullscreenchange",M),document.addEventListener("MSFullscreenChange",M)}var V=OGVPlayer;t.default=V},580:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function OGVProxyClass(e){return class{constructor(t,i,s){for(var d in s=s||{},this.worker=t,this.transferables=function(){var e=new ArrayBuffer(1024),i=new Uint8Array(e);try{return t.postMessage({action:"transferTest",bytes:i},[e]),!e.byteLength}catch(e){return!1}}(),e)e.hasOwnProperty(d)&&(this[d]=e[d]);this.processingQueue=0,Object.defineProperty(this,"processing",{get:function get(){return this.processingQueue>0}}),this.messageCount=0,this.pendingCallbacks={},this.worker.addEventListener("message",(e=>{this.handleMessage(e)})),this.proxy("construct",[i,s],(()=>{}))}proxy(e,t,i){var s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(!this.worker)throw'Tried to call "'+e+'" method on closed proxy object';var d="callback-"+ ++this.messageCount+"-"+e;i&&(this.pendingCallbacks[d]=i);var h={action:e,callbackId:d,args:t||[]};this.processingQueue++,this.transferables?this.worker.postMessage(h,s):this.worker.postMessage(h)}terminate(){this.worker&&(this.worker.terminate(),this.worker=null,this.processingQueue=0,this.pendingCallbacks={})}handleMessage(e){if(this.processingQueue--,"callback"===e.data.action){var t=e.data,i=t.callbackId,s=t.args,d=this.pendingCallbacks[i];if(t.props)for(var h in t.props)t.props.hasOwnProperty(h)&&(this[h]=t.props[h]);d&&(delete this.pendingCallbacks[i],d.apply(this,s))}}}};t.default=i},168:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=class OGVTimeRanges{constructor(e){this._ranges=e,this.length=e.length}start(e){if(e<0||e>this.length||e!==(0|e))throw new RangeError("Invalid index");return this._ranges[e][0]}end(e){if(e<0||e>this.length||e!==(0|e))throw new RangeError("Invalid index");return this._ranges[e][1]}};t.default=i},625:(e,t,i)=>{"use strict";var s=i(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=s(i(964));var h=class OGVWrapperCodec{constructor(e){return this.options=e||{},this.demuxer=null,this.videoDecoder=null,this.audioDecoder=null,this.flushIter=0,this.loadedMetadata=!1,this.processing=!1,Object.defineProperties(this,{duration:{get:function get(){return this.loadedMetadata?this.demuxer.duration:NaN}},hasAudio:{get:function get(){return this.loadedMetadata&&!!this.audioDecoder}},audioReady:{get:function get(){return this.hasAudio&&this.demuxer.audioReady}},audioTimestamp:{get:function get(){return this.demuxer.audioTimestamp}},audioFormat:{get:function get(){return this.hasAudio?this.audioDecoder.audioFormat:null}},audioBuffer:{get:function get(){return this.hasAudio?this.audioDecoder.audioBuffer:null}},hasVideo:{get:function get(){return this.loadedMetadata&&!!this.videoDecoder}},frameReady:{get:function get(){return this.hasVideo&&this.demuxer.frameReady}},frameTimestamp:{get:function get(){return this.demuxer.frameTimestamp}},keyframeTimestamp:{get:function get(){return this.demuxer.keyframeTimestamp}},nextKeyframeTimestamp:{get:function get(){return this.demuxer.nextKeyframeTimestamp}},videoFormat:{get:function get(){return this.hasVideo?this.videoDecoder.videoFormat:null}},frameBuffer:{get:function get(){return this.hasVideo?this.videoDecoder.frameBuffer:null}},seekable:{get:function get(){return this.demuxer.seekable}},demuxerCpuTime:{get:function get(){return this.demuxer?this.demuxer.cpuTime:0}},audioCpuTime:{get:function get(){return this.audioDecoder?this.audioDecoder.cpuTime:0}},videoCpuTime:{get:function get(){return this.videoDecoder?this.videoDecoder.cpuTime:0}}}),this.loadedDemuxerMetadata=!1,this.loadedAudioMetadata=!1,this.loadedVideoMetadata=!1,this.loadedAllMetadata=!1,this.onseek=null,this.videoBytes=0,this.audioBytes=0,this}flushSafe(e){var t=this.flushIter;return i=>{this.flushIter<=t&&e(i)}}init(e){var t;this.processing=!0,t="video/webm"===this.options.type||"audio/webm"===this.options.type?"OGVDemuxerWebMW":"OGVDemuxerOggW",d.default.loadClass(t,(t=>{t().then((t=>{this.demuxer=t,t.onseek=e=>{this.onseek&&this.onseek(e)},t.init((()=>{this.processing=!1,e()}))}))}))}close(){this.demuxer&&(this.demuxer.close(),this.demuxer=null),this.videoDecoder&&(this.videoDecoder.close(),this.videoDecoder=null),this.audioDecoder&&(this.audioDecoder.close(),this.audioDecoder=null)}receiveInput(e,t){this.demuxer.receiveInput(e,t)}process(e){if(this.processing)throw new Error("reentrancy fail on OGVWrapperCodec.process");this.processing=!0;var finish=t=>{this.processing=!1,e(t)},doProcessData=()=>{this.demuxer.process(finish)};this.demuxer.loadedMetadata&&!this.loadedDemuxerMetadata?this.loadAudioCodec((()=>{this.loadVideoCodec((()=>{this.loadedDemuxerMetadata=!0,this.loadedAudioMetadata=!this.audioDecoder,this.loadedVideoMetadata=!this.videoDecoder,this.loadedAllMetadata=this.loadedAudioMetadata&&this.loadedVideoMetadata,finish(!0)}))})):this.loadedDemuxerMetadata&&!this.loadedAudioMetadata?this.audioDecoder.loadedMetadata?(this.loadedAudioMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&&this.loadedVideoMetadata,finish(!0)):this.demuxer.audioReady?this.demuxer.dequeueAudioPacket(((e,t)=>{this.audioBytes+=e.byteLength,this.audioDecoder.processHeader(e,(e=>{finish(!0)}))})):doProcessData():this.loadedAudioMetadata&&!this.loadedVideoMetadata?this.videoDecoder.loadedMetadata?(this.loadedVideoMetadata=!0,this.loadedAllMetadata=this.loadedAudioMetadata&&this.loadedVideoMetadata,finish(!0)):this.demuxer.frameReady?(this.processing=!0,this.demuxer.dequeueVideoPacket((e=>{this.videoBytes+=e.byteLength,this.videoDecoder.processHeader(e,(()=>{finish(!0)}))}))):doProcessData():this.loadedVideoMetadata&&!this.loadedMetadata&&this.loadedAllMetadata?(this.loadedMetadata=!0,finish(!0)):!this.loadedMetadata||this.hasAudio&&!this.demuxer.audioReady||this.hasVideo&&!this.demuxer.frameReady?doProcessData():finish(!0)}decodeFrame(e){var t=this.flushSafe(e),i=this.frameTimestamp,s=this.keyframeTimestamp;this.demuxer.dequeueVideoPacket((e=>{this.videoBytes+=e.byteLength,this.videoDecoder.processFrame(e,(e=>{var d=this.videoDecoder.frameBuffer;d&&(d.timestamp=i,d.keyframeTimestamp=s),t(e)}))}))}decodeAudio(e){var t=this.flushSafe(e);this.demuxer.dequeueAudioPacket(((e,i)=>{this.audioBytes+=e.byteLength,this.audioDecoder.processAudio(e,(e=>{if(i){var s=this.audioDecoder.audioBuffer,d=[];for(var h of s){var u=Math.round(i*this.audioFormat.rate/1e9);u>0?d.push(h.subarray(0,h.length-Math.min(u,h.length))):d.push(h.subarray(Math.min(Math.abs(u),h.length),h.length))}this.audioDecoder.audioBuffer=d}return t(e)}))}))}discardFrame(e){this.demuxer.dequeueVideoPacket((t=>{this.videoBytes+=t.byteLength,e()}))}discardAudio(e){this.demuxer.dequeueAudioPacket(((t,i)=>{this.audioBytes+=t.byteLength,e()}))}flush(e){this.flushIter++,this.demuxer.flush(e)}sync(){this.videoDecoder&&this.videoDecoder.sync()}recycleFrame(e){this.videoDecoder&&this.videoDecoder.recycleFrame(e)}getKeypointOffset(e,t){this.demuxer.getKeypointOffset(e,t)}seekToKeypoint(e,t){this.demuxer.seekToKeypoint(e,this.flushSafe(t))}loadAudioCodec(e){if(this.demuxer.audioCodec){var t={vorbis:"OGVDecoderAudioVorbisW",opus:"OGVDecoderAudioOpusW"}[this.demuxer.audioCodec];this.processing=!0,d.default.loadClass(t,(t=>{var i={};this.demuxer.audioFormat&&(i.audioFormat=this.demuxer.audioFormat),t(i).then((t=>{this.audioDecoder=t,t.init((()=>{this.loadedAudioMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker})}else e()}loadVideoCodec(e){if(this.demuxer.videoCodec){var t=!!this.options.simd,i=!!this.options.threading,s={theora:"OGVDecoderVideoTheoraW",vp8:i?"OGVDecoderVideoVP8MTW":"OGVDecoderVideoVP8W",vp9:i?t?"OGVDecoderVideoVP9SIMDMTW":"OGVDecoderVideoVP9MTW":t?"OGVDecoderVideoVP9SIMDW":"OGVDecoderVideoVP9W",av1:i?t?"OGVDecoderVideoAV1SIMDMTW":"OGVDecoderVideoAV1MTW":t?"OGVDecoderVideoAV1SIMDW":"OGVDecoderVideoAV1W"}[this.demuxer.videoCodec];this.processing=!0,d.default.loadClass(s,(t=>{var s={};this.demuxer.videoFormat&&(s.videoFormat=this.demuxer.videoFormat),i&&delete window.ENVIRONMENT_IS_PTHREAD,t(s).then((t=>{this.videoDecoder=t,t.init((()=>{this.loadedVideoMetadata=t.loadedMetadata,this.processing=!1,e()}))}))}),{worker:this.options.worker&&!this.options.threading})}else e()}};t.default=h},539:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=new class WebAssemblyChecker{constructor(){this.tested=!1,this.testResult=void 0}wasmSupported(){if(!this.tested){try{"object"==typeof WebAssembly?this.testResult=function testSafariWebAssemblyBug(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log("Exception while testing WebAssembly",e),this.testResult=!1}this.tested=!0}return this.testResult}};t.default=i},309:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=function extend(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])};t.default=i},431:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i=200&&e.xhr.status<300?(e.length=getXHRLength(e.xhr),e.headers=function getXHRHeaders(e){var t={};return e.getAllResponseHeaders().split(/\r?\n/).forEach((function(e){var i=e.split(/:\s*/,2);i.length>1&&(t[i[0].toLowerCase()]=i[1])})),t}(e.xhr),e.onXHRStart()):(s(),i(new Error("HTTP error "+e.xhr.status)))}},h=function checkError(){s(),i(new Error("network error"))},u=function checkBackendOpen(){s(),t()};s=function oncomplete(){e.xhr.removeEventListener("readystatechange",d),e.xhr.removeEventListener("error",h),e.off("open",u),e._onAbort=null},e.initXHR(),e.xhr.addEventListener("readystatechange",d),e.xhr.addEventListener("error",h),e.on("open",u),e.xhr.send()}))}},{key:"bufferToOffset",value:function bufferToOffset(e){return Promise.reject(new Error("abstract"))}},{key:"abort",value:function abort(){if(this.xhr.abort(),this._onAbort){var e=this._onAbort;this._onAbort=null;var t=new Error("Aborted");t.name="AbortError",e(t)}}},{key:"initXHR",value:function initXHR(){var e=this.url;this.cachever&&(e+="?buggy_cachever="+this.cachever),this.xhr.open("GET",e);var t=null;(this.offset||this.length)&&(t="bytes="+this.offset+"-"),this.length&&(t+=this.offset+this.length-1),null!==t&&this.xhr.setRequestHeader("Range",t)}},{key:"onXHRStart",value:function onXHRStart(){throw new Error("abstract")}}]),Backend}(i(566));e.exports=d},810:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i0&&(this.bytesRead+=e.length,this.emit("buffer",e))}},{key:"onXHRLoad",value:function onXHRLoad(){this.onXHRProgress(),d(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),"onXHRLoad",this).call(this)}}]),BinaryStringBackend}(i(828));h.supported=function(){try{return!!(new XMLHttpRequest).overrideMimeType}catch(e){return!1}},e.exports=h},828:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i=e)i();else{var d=null;t._onAbort=function(e){d(),s(e)};var h=function checkBuffer(){t.offset>=e&&!t.eof&&(d(),i())},u=function checkDone(){d(),i()},c=function checkError(){d(),s(new Error("error streaming"))};d=function oncomplete(){t.buffering=!1,t.off("buffer",h),t.off("done",u),t.off("error",c),t._onAbort=null},t.buffering=!0,t.on("buffer",h),t.on("done",u),t.on("error",c)}}))}},{key:"initXHR",value:function initXHR(){d(DownloadBackend.prototype.__proto__||Object.getPrototypeOf(DownloadBackend.prototype),"initXHR",this).call(this)}},{key:"onXHRStart",value:function onXHRStart(){var e=this;this.xhr.addEventListener("progress",(function(){return e.onXHRProgress()})),this.xhr.addEventListener("error",(function(){return e.onXHRError()})),this.xhr.addEventListener("load",(function(){return e.onXHRLoad()})),this.emit("open")}},{key:"onXHRProgress",value:function onXHRProgress(){throw new Error("abstract")}},{key:"onXHRError",value:function onXHRError(){this.emit("error")}},{key:"onXHRLoad",value:function onXHRLoad(){this.eof=!0,this.emit("done")}}]),DownloadBackend}(i(306));e.exports=h},761:(e,t,i)=>{"use strict";var s=i(855),d=i(810),h=i(431);var u=null;e.exports=function instantiate(e){if(!1===e.progressive)return new h(e);if(u||(u=function autoselect(){return s.supported()?s:d.supported()?d:null}()),!u)throw new Error("No supported backend class");return new u(e)}},855:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i{"use strict";var t=function(){function defineProperties(e,t){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},t=e.buffer,i=void 0===t?void 0:t,s=e.string,d=void 0===s?void 0:s,h=e.start,u=void 0===h?0:h,c=e.end,l=void 0===c?u+(i?i.byteLength:d?d.length:0):c,f=e.prev,_=void 0===f?null:f,p=e.next,m=void 0===p?null:p,g=e.eof,v=void 0!==g&&g,y=e.empty,b=void 0===y?!(i||d):y,T=e.timestamp,k=void 0===T?Date.now():T;_classCallCheck(this,CacheItem),this.start=u,this.end=l,this.prev=_,this.next=m,this.eof=v,this.empty=b,this.timestamp=k,this.buffer=i,this.string=d,Object.defineProperty(this,"length",{get:function get(){return this.end-this.start}})}return t(CacheItem,[{key:"contains",value:function contains(e){return e>=this.start&&(e{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:{},t=e.cacheSize,i=void 0===t?0:t;_classCallCheck(this,CachePool);var s=new d({eof:!0});this.head=s,this.tail=s,this.readOffset=0,this.readCursor=s,this.writeOffset=0,this.writeCursor=s,this.cacheSize=i}return s(CachePool,[{key:"bytesReadable",value:function bytesReadable(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,t=this.readOffset,i=this.readCursor,s=i.last((function(i){return!i.empty&&i.start<=t+e}));return s?Math.min(e,s.end-t):0}},{key:"bytesWritable",value:function bytesWritable(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,t=this.writeOffset,i=this.writeCursor;if(i.eof)return e;var s=i.last((function(i){return i.empty&&i.start<=t+e}));return s?Math.min(e,s.end-t):0}},{key:"seekRead",value:function seekRead(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error("read seek out of range");this.readOffset=e,this.readCursor=t}},{key:"seekWrite",value:function seekWrite(e){var t=this.head.first((function(t){return t.contains(e)}));if(!t)throw new Error("write seek out of range");this.writeOffset=e,this.writeCursor=t}},{key:"readBytes",value:function readBytes(e){for(var t=e.byteLength,i=this.bytesReadable(t),s=this.readOffset,d=s+i,h=s,u=this.readCursor;u&&!u.empty&&!(u.start>=d);u=u.next){var c=Math.min(d,u.end),l=e.subarray(h-s,c-s);u.readBytes(l,h,c),h=c}return this.readOffset=h,this.readCursor=this.readCursor.first((function(e){return e.contains(h)})),i}},{key:"write",value:function write(e){var t=this.bufferItem(e),i=this.writeCursor;if(!i.empty)throw new Error("write cursor not empty");if(!i.contains(t.end)&&i.end!==t.end)throw new Error("write cursor too small");i.startthis.readOffset+this.chunkSize)&&t.push(i));if(e>this.cacheSize){t.sort((function(e,t){return e.timestamp-t.timestamp}));for(var s=0;s{"use strict";e.exports=i(91)},566:e=>{"use strict";var t=function(){function defineProperties(e,t){for(var i=0;i=0&&i.splice(s,1)}},{key:"emit",value:function emit(e,t){(this._e[e]||[]).slice().forEach((function(e){return e(t)}))}}]),TinyEvents}();e.exports=i},936:(e,t,i)=>{"use strict";var s=function(){function defineProperties(e,t){for(var i=0;i=0&&c>=e.length)return void t(null);var l=e._clampToLength(s.writeOffset+s.bytesWritable(d))-s.writeOffset;if(0===l)t(null);else{var f=e._backend=new h({url:e.url,offset:e._cache.writeOffset,length:l,cachever:e._cachever,progressive:e.progressive}),_=null,p=function checkOpen(){f!==e._backend?(_(),i(new Error("invalid state"))):(f.on("buffer",(function(t){f===e._backend&&e._cache.write(t)})),f.on("done",(function(){f===e._backend&&(-1===e.length&&(e.length=e._backend.offset+e._backend.bytesRead),e._backend=null)})),t(f))},m=function checkError(t){f!==e._backend?i(new Error("invalid state")):(e._backend=null,i(t))};_=function oncomplete(){f.off("open",p),f.off("error",m)},f.on("open",p),f.on("error",m),f.on("cachever",(function(){e._cachever++})),f.load()}}}))}},{key:"_readAhead",value:function _readAhead(){var e=this;return new Promise((function(t,i){e._backend||e.eof?t():e._openBackend().then((function(){t()})).catch((function(e){i(e)}))}))}},{key:"seek",value:function seek(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error("invalid state");if(e!==(0|e)||e<0)throw new Error("invalid input");if(t.length>=0&&e>t.length)throw new Error("seek past end of file");if(!t.seekable)throw new Error("seek on non-seekable stream");t._backend&&t.abort(),t._cache.seekRead(e),t._cache.seekWrite(e),t._readAhead().then(i).catch(s)}))}},{key:"read",value:function read(e){var t=this;return this.buffer(e).then((function(e){return t.readSync(e)}))}},{key:"readSync",value:function readSync(e){var t=this.bytesAvailable(e),i=new Uint8Array(t);if(this.readBytes(i)!==t)throw new Error("failed to read expected data");return i.buffer}},{key:"readBytes",value:function readBytes(e){if(!this.loaded||this.buffering||this.seeking)throw new Error("invalid state");if(!(e instanceof Uint8Array))throw new Error("invalid input");var t=this._cache.readBytes(e);return this._readAhead(),t}},{key:"buffer",value:function buffer(e){var t=this;return new Promise((function(i,s){if(!t.loaded||t.buffering||t.seeking)throw new Error("invalid state");if(e!==(0|e)||e<0)throw new Error("invalid input");var d=t._clampToLength(t.offset+e),h=d-t.offset,u=t.bytesAvailable(h);u>=h?i(u):(t.buffering=!0,t._openBackend().then((function(i){return i?i.bufferToOffset(d).then((function(){return t.buffering=!1,t.buffer(e)})):Promise.resolve(u)})).then((function(e){t.buffering=!1,i(e)})).catch((function(e){"AbortError"!==e.name&&(t.buffering=!1),s(e)})))}))}},{key:"bytesAvailable",value:function bytesAvailable(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;return this._cache.bytesReadable(e)}},{key:"abort",value:function abort(){this.loading&&(this.loading=!1),this.buffering&&(this.buffering=!1),this.seeking&&(this.seeking=!1),this._backend&&(this._backend.abort(),this._backend=null)}},{key:"getBufferedRanges",value:function getBufferedRanges(){return this._cache.ranges()}},{key:"_clampToLength",value:function _clampToLength(e){return this.length<0?e:Math.min(this.length,e)}}]),StreamFile}();e.exports=u},826:e=>{e.exports={vertex:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aLumaPosition;\nattribute vec2 aChromaPosition;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vLumaPosition = aLumaPosition;\n vChromaPosition = aChromaPosition;\n}\n",fragment:"// inspired by https://github.com/mbebenita/Broadway/blob/master/Player/canvas.js\n\nprecision lowp float;\n\nuniform sampler2D uTextureY;\nuniform sampler2D uTextureCb;\nuniform sampler2D uTextureCr;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n // Y, Cb, and Cr planes are uploaded as LUMINANCE textures.\n float fY = texture2D(uTextureY, vLumaPosition).x;\n float fCb = texture2D(uTextureCb, vChromaPosition).x;\n float fCr = texture2D(uTextureCr, vChromaPosition).x;\n\n // Premultipy the Y...\n float fYmul = fY * 1.1643828125;\n\n // And convert that to RGB!\n gl_FragColor = vec4(\n fYmul + 1.59602734375 * fCr - 0.87078515625,\n fYmul - 0.39176171875 * fCb - 0.81296875 * fCr + 0.52959375,\n fYmul + 2.017234375 * fCb - 1.081390625,\n 1\n );\n}\n",vertexStripe:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aTexturePosition;\nvarying vec2 vTexturePosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vTexturePosition = aTexturePosition;\n}\n",fragmentStripe:"// extra 'stripe' texture fiddling to work around IE 11's poor performance on gl.LUMINANCE and gl.ALPHA textures\n\nprecision lowp float;\n\nuniform sampler2D uStripe;\nuniform sampler2D uTexture;\nvarying vec2 vTexturePosition;\nvoid main() {\n // Y, Cb, and Cr planes are mapped into a pseudo-RGBA texture\n // so we can upload them without expanding the bytes on IE 11\n // which doesn't allow LUMINANCE or ALPHA textures\n // The stripe textures mark which channel to keep for each pixel.\n // Each texture extraction will contain the relevant value in one\n // channel only.\n\n float fLuminance = dot(\n texture2D(uStripe, vTexturePosition),\n texture2D(uTexture, vTexturePosition)\n );\n\n gl_FragColor = vec4(fLuminance, fLuminance, fLuminance, 1);\n}\n"}},487:e=>{!function(){"use strict";function FrameSink(e,t){throw new Error("abstract")}FrameSink.prototype.drawFrame=function(e){throw new Error("abstract")},FrameSink.prototype.clear=function(){throw new Error("abstract")},e.exports=FrameSink}()},926:(e,t,i)=>{!function(){"use strict";var t=i(487),s=i(627);function SoftwareFrameSink(e){var t=this,i=e.getContext("2d"),d=null,h=null,u=null;return t.drawFrame=function drawFrame(t){var c=t.format;e.width===c.displayWidth&&e.height===c.displayHeight||(e.width=c.displayWidth,e.height=c.displayHeight),null!==d&&d.width==c.width&&d.height==c.height||function initImageData(e,t){for(var s=(d=i.createImageData(e,t)).data,h=e*t*4,u=0;u{!function(){"use strict";var t=i(487),s=i(826);function WebGLFrameSink(e){var t,i,d=this,h=WebGLFrameSink.contextForCanvas(e);if(null===h)throw new Error("WebGL unavailable");function compileShader(e,t){var i=h.createShader(e);if(h.shaderSource(i,t),h.compileShader(i),!h.getShaderParameter(i,h.COMPILE_STATUS)){var s=h.getShaderInfoLog(i);throw h.deleteShader(i),new Error("GL shader compilation for "+e+" failed: "+s)}return i}var u,c,l,f,_,p,m,g,v,y,b=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),T={},k={},P={};function createOrReuseTexture(e){return T[e]||(T[e]=h.createTexture()),T[e]}function uploadTexture(e,t,i,s){var d=createOrReuseTexture(e);if(h.activeTexture(h.TEXTURE0),WebGLFrameSink.stripe){var u=!T[e+"_temp"],c=createOrReuseTexture(e+"_temp");h.bindTexture(h.TEXTURE_2D,c),u?(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t/4,i,0,h.RGBA,h.UNSIGNED_BYTE,s)):h.texSubImage2D(h.TEXTURE_2D,0,0,0,t/4,i,h.RGBA,h.UNSIGNED_BYTE,s);var l=T[e+"_stripe"],f=!l;f&&(l=createOrReuseTexture(e+"_stripe")),h.bindTexture(h.TEXTURE_2D,l),f&&(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,t,1,0,h.RGBA,h.UNSIGNED_BYTE,function buildStripe(e){if(P[e])return P[e];for(var t=e,i=new Uint32Array(t),s=0;s{!function(){"use strict";var t=i(877);e.exports={convertYCbCr:function convertYCbCr(e,i){var s=0|e.format.width,d=0|e.format.height,h=0|t(e.format.width/e.format.chromaWidth),u=0|t(e.format.height/e.format.chromaHeight),c=e.y.bytes,l=e.u.bytes,f=e.v.bytes,_=0|e.y.stride,p=0|e.u.stride,m=0|e.v.stride,g=s<<2,v=0,y=0,b=0,T=0,k=0,P=0,w=0,E=0,x=0,A=0,R=0,O=0,F=0,S=0,C=0,B=0,D=0,M=0;if(1==h&&1==u)for(w=0,E=g,M=0,B=0;B>8,i[w+1]=R-F>>8,i[w+2]=R+S>>8,w+=4,R=298*c[y++]|0,i[w]=R+O>>8,i[w+1]=R-F>>8,i[w+2]=R+S>>8,w+=4,R=298*c[b++]|0,i[E]=R+O>>8,i[E+1]=R-F>>8,i[E+2]=R+S>>8,E+=4,R=298*c[b++]|0,i[E]=R+O>>8,i[E+1]=R-F>>8,i[E+2]=R+S>>8,E+=4;w+=g,E+=g,M++}else for(P=0,B=0;B>u)*p|0,k=M*m|0,C=0;C>h)],O=(409*(A=0|f[k+D])|0)-57088|0,F=(100*x|0)+(208*A|0)-34816|0,S=(516*x|0)-70912|0,R=298*c[v++]|0,i[P]=R+O>>8,i[P+1]=R-F>>8,i[P+2]=R+S>>8,P+=4}}}()},877:e=>{!function(){"use strict";e.exports=function depower(e){for(var t=0,i=e>>1;0!=i;)i>>=1,t++;if(e!==1<{!function(){"use strict";var t=i(487),s=i(926),d=i(895),h={FrameSink:t,SoftwareFrameSink:s,WebGLFrameSink:d,attach:function(e,t){return("webGL"in(t=t||{})?t.webGL:d.isAvailable())?new d(e,t):new s(e,t)}};e.exports=h}()}},t={};function __webpack_require__(i){var s=t[i];if(void 0!==s)return s.exports;var d=t[i]={exports:{}};return e[i](d,d.exports,__webpack_require__),d.exports}var i={};return(()=>{"use strict";var e=i,t=__webpack_require__(318);Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"OGVCompat",{enumerable:!0,get:function get(){return s.default}}),Object.defineProperty(e,"OGVLoader",{enumerable:!0,get:function get(){return d.default}}),Object.defineProperty(e,"OGVMediaError",{enumerable:!0,get:function get(){return h.default}}),Object.defineProperty(e,"OGVMediaType",{enumerable:!0,get:function get(){return u.default}}),Object.defineProperty(e,"OGVPlayer",{enumerable:!0,get:function get(){return c.default}}),Object.defineProperty(e,"OGVTimeRanges",{enumerable:!0,get:function get(){return l.default}}),e.OGVVersion=void 0;var s=t(__webpack_require__(523)),d=t(__webpack_require__(964)),h=t(__webpack_require__(759)),u=t(__webpack_require__(278)),c=t(__webpack_require__(869)),l=t(__webpack_require__(168)),f="1.8.4-20210702161914-bd3a07f";e.OGVVersion=f,"object"==typeof window&&(window.OGVCompat=s.default,window.OGVLoader=d.default,window.OGVMediaError=h.default,window.OGVMediaType=u.default,window.OGVTimeRanges=l.default,window.OGVPlayer=c.default,window.OGVVersion=f)})(),i})()})); \ No newline at end of file diff --git a/ogvjs-1.8.4/ogv-support.js b/ogvjs-1.8.4/ogv-support.js new file mode 100644 index 0000000..b14fb94 --- /dev/null +++ b/ogvjs-1.8.4/ogv-support.js @@ -0,0 +1 @@ +(()=>{var e={575:e=>{e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},913:e=>{function t(e,t){for(var o=0;o{e.exports=function(e){return e&&e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},8:e=>{function t(o){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=t=function(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),t(o)}e.exports=t,e.exports.default=e.exports,e.exports.__esModule=!0},523:(e,t,o)=>{"use strict";var r=o(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=r(o(575)),u=r(o(913)),s=new(function(){function e(){(0,n.default)(this,e)}return(0,u.default)(e,[{key:"hasTypedArrays",value:function(){return!!window.Uint32Array}},{key:"hasWebAssembly",value:function(){return!!window.WebAssembly}},{key:"hasWebAudio",value:function(){return!(!window.AudioContext&&!window.webkitAudioContext)}},{key:"hasFlash",value:function(){return!1}},{key:"hasAudio",value:function(){return this.hasWebAudio()}},{key:"isBlacklisted",value:function(e){return!1}},{key:"isSlow",value:function(){return!1}},{key:"isTooSlow",value:function(){return!1}},{key:"supported",value:function(e){return"OGVDecoder"===e?this.hasWebAssembly():"OGVPlayer"===e&&this.supported("OGVDecoder")&&this.hasAudio()}}]),e}());t.default=s}},t={};function o(r){var n=t[r];if(void 0!==n)return n.exports;var u=t[r]={exports:{}};return e[r](u,u.exports,o),u.exports}(()=>{"use strict";var e=o(318),t=e(o(8)),r=e(o(523));"object"===("undefined"==typeof window?"undefined":(0,t.default)(window))&&(window.OGVCompat=r.default,window.OGVVersion="1.8.4-20210702161914-bd3a07f")})()})(); \ No newline at end of file diff --git a/ogvjs-1.8.4/ogv-version.js b/ogvjs-1.8.4/ogv-version.js new file mode 100644 index 0000000..2b0ba25 --- /dev/null +++ b/ogvjs-1.8.4/ogv-version.js @@ -0,0 +1 @@ +(()=>{var e={318:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},8:e=>{function _typeof(o){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=_typeof=function _typeof(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=_typeof=function _typeof(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),_typeof(o)}e.exports=_typeof,e.exports.default=e.exports,e.exports.__esModule=!0}},o={};function __webpack_require__(t){var r=o[t];if(void 0!==r)return r.exports;var p=o[t]={exports:{}};return e[t](p,p.exports,__webpack_require__),p.exports}(()=>{"use strict";var e=__webpack_require__(318)(__webpack_require__(8)),o="1.8.4-20210702161914-bd3a07f";"object"===("undefined"==typeof window?"undefined":(0,e.default)(window))&&(window.OGVVersion=o)})()})(); \ No newline at end of file diff --git a/ogvjs-1.8.4/ogv-worker-audio.js b/ogvjs-1.8.4/ogv-worker-audio.js new file mode 100644 index 0000000..7b5131e --- /dev/null +++ b/ogvjs-1.8.4/ogv-worker-audio.js @@ -0,0 +1 @@ +(()=>{var e={506:e=>{e.exports=function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},e.exports.default=e.exports,e.exports.__esModule=!0},575:e=>{e.exports=function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},913:e=>{function _defineProperties(e,t){for(var r=0;r{function _getPrototypeOf(t){return e.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.default=e.exports,e.exports.__esModule=!0,_getPrototypeOf(t)}e.exports=_getPrototypeOf,e.exports.default=e.exports,e.exports.__esModule=!0},205:(e,t,r)=>{var o=r(489);e.exports=function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)},e.exports.default=e.exports,e.exports.__esModule=!0},318:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},585:(e,t,r)=>{var o=r(8).default,s=r(506);e.exports=function _possibleConstructorReturn(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?s(e):t},e.exports.default=e.exports,e.exports.__esModule=!0},489:e=>{function _setPrototypeOf(t,r){return e.exports=_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(e,t){return e.__proto__=t,e},e.exports.default=e.exports,e.exports.__esModule=!0,_setPrototypeOf(t,r)}e.exports=_setPrototypeOf,e.exports.default=e.exports,e.exports.__esModule=!0},8:e=>{function _typeof(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=_typeof=function _typeof(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=_typeof=function _typeof(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),_typeof(t)}e.exports=_typeof,e.exports.default=e.exports,e.exports.__esModule=!0},445:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(539)),i="1.8.4-20210702161914-bd3a07f",u={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"},d=function(){function OGVLoaderBase(){(0,s.default)(this,OGVLoaderBase),this.base=this.defaultBase()}return(0,n.default)(OGVLoaderBase,[{key:"defaultBase",value:function defaultBase(){}},{key:"wasmSupported",value:function wasmSupported(){return a.default.wasmSupported()}},{key:"scriptForClass",value:function scriptForClass(e){return u[e]}},{key:"urlForClass",value:function urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error("asked for URL for unknown class "+e)}},{key:"urlForScript",value:function urlForScript(e){if(e){var t=this.base;return void 0===t?t="":t+="/",t+e+"?version="+encodeURIComponent(i)}throw new Error("asked for URL for unknown script "+e)}},{key:"loadClass",value:function loadClass(e,t,r){var o=this;r=r||{};var s=this.getGlobal(),n=this.urlForClass(e),a=function classWrapper(t){return(t=t||{}).locateFile=function(e){return"data:"===e.slice(0,5)?e:o.urlForScript(e)},t.mainScriptUrlOrBlob=o.scriptForClass(e)+"?version="+encodeURIComponent(i),s[e](t)};"function"==typeof s[e]?t(a):this.loadScript(n,(function(){t(a)}))}}]),OGVLoaderBase}();t.default=d},713:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(205)),i=o(r(585)),u=o(r(754));function _createSuper(e){var t=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var r,o=(0,u.default)(e);if(t){var s=(0,u.default)(this).constructor;r=Reflect.construct(o,arguments,s)}else r=o.apply(this,arguments);return(0,i.default)(this,r)}}var d=new(function(e){(0,a.default)(OGVLoaderWorker,e);var t=_createSuper(OGVLoaderWorker);function OGVLoaderWorker(){return(0,s.default)(this,OGVLoaderWorker),t.apply(this,arguments)}return(0,n.default)(OGVLoaderWorker,[{key:"loadScript",value:function loadScript(e,t){importScripts(e),t()}},{key:"getGlobal",value:function getGlobal(){return self}}]),OGVLoaderWorker}(o(r(445)).default));t.default=d},607:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=new(o(r(172)).default)(["loadedMetadata","audioFormat","audioBuffer","cpuTime"],{init:function init(e,t){this.target.init(t)},processHeader:function processHeader(e,t){this.target.processHeader(e[0],(function(e){t([e])}))},processAudio:function processAudio(e,t){this.target.processAudio(e[0],(function(e){t([e])}))}});t.default=s},172:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913)),i=o(r(713));r.g.OGVLoader=i.default;var u=function(){function OGVWorkerSupport(e,t){var r=this;(0,n.default)(this,OGVWorkerSupport),this.propList=e,this.handlers=t,this.transferables=function(){var e=new ArrayBuffer(1024),t=new Uint8Array(e);try{return postMessage({action:"transferTest",bytes:t},[e]),!e.byteLength}catch(e){return!1}}(),this.target=null,this.sentProps={},this.pendingEvents=[],this.handlers.construct=function(e,t){var o=e[0],s=e[1];i.default.loadClass(o,(function(e){e(s).then((function(e){for(r.target=e,t();r.pendingEvents.length;)r.handleEvent(r.pendingEvents.shift())}))}))},addEventListener("message",(function(e){r.workerOnMessage(e)}))}return(0,a.default)(OGVWorkerSupport,[{key:"handleEvent",value:function handleEvent(e){var t=this;this.handlers[e.action].call(this,e.args,(function(r){r=r||[];var o={},s=[];t.propList.forEach((function(e){var r=t.target[e];if(t.sentProps[e]!==r)if(t.sentProps[e]=r,"duration"==e&&isNaN(r)&&isNaN(t.sentProps[e]));else if("audioBuffer"==e){if(o[e]=r,r)for(var n=0;n{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913));var i=new(function(){function WebAssemblyChecker(){(0,n.default)(this,WebAssemblyChecker),this.tested=!1,this.testResult=void 0}return(0,a.default)(WebAssemblyChecker,[{key:"wasmSupported",value:function wasmSupported(){if(!this.tested){try{"object"===("undefined"==typeof WebAssembly?"undefined":(0,s.default)(WebAssembly))?this.testResult=function testSafariWebAssemblyBug(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log("Exception while testing WebAssembly",e),this.testResult=!1}this.tested=!0}return this.testResult}}]),WebAssemblyChecker}());t.default=i}},t={};function __webpack_require__(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,__webpack_require__),s.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";__webpack_require__(318)(__webpack_require__(607))})()})(); \ No newline at end of file diff --git a/ogvjs-1.8.4/ogv-worker-video.js b/ogvjs-1.8.4/ogv-worker-video.js new file mode 100644 index 0000000..38ac1bd --- /dev/null +++ b/ogvjs-1.8.4/ogv-worker-video.js @@ -0,0 +1 @@ +(()=>{var e={506:e=>{e.exports=function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e},e.exports.default=e.exports,e.exports.__esModule=!0},575:e=>{e.exports=function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},e.exports.default=e.exports,e.exports.__esModule=!0},913:e=>{function _defineProperties(e,t){for(var r=0;r{function _getPrototypeOf(t){return e.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(e){return e.__proto__||Object.getPrototypeOf(e)},e.exports.default=e.exports,e.exports.__esModule=!0,_getPrototypeOf(t)}e.exports=_getPrototypeOf,e.exports.default=e.exports,e.exports.__esModule=!0},205:(e,t,r)=>{var o=r(489);e.exports=function _inherits(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)},e.exports.default=e.exports,e.exports.__esModule=!0},318:e=>{e.exports=function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}},e.exports.default=e.exports,e.exports.__esModule=!0},585:(e,t,r)=>{var o=r(8).default,s=r(506);e.exports=function _possibleConstructorReturn(e,t){return!t||"object"!==o(t)&&"function"!=typeof t?s(e):t},e.exports.default=e.exports,e.exports.__esModule=!0},489:e=>{function _setPrototypeOf(t,r){return e.exports=_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(e,t){return e.__proto__=t,e},e.exports.default=e.exports,e.exports.__esModule=!0,_setPrototypeOf(t,r)}e.exports=_setPrototypeOf,e.exports.default=e.exports,e.exports.__esModule=!0},8:e=>{function _typeof(t){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(e.exports=_typeof=function _typeof(e){return typeof e},e.exports.default=e.exports,e.exports.__esModule=!0):(e.exports=_typeof=function _typeof(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e.exports.default=e.exports,e.exports.__esModule=!0),_typeof(t)}e.exports=_typeof,e.exports.default=e.exports,e.exports.__esModule=!0},445:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(539)),i="1.8.4-20210702161914-bd3a07f",u={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"},c=function(){function OGVLoaderBase(){(0,s.default)(this,OGVLoaderBase),this.base=this.defaultBase()}return(0,n.default)(OGVLoaderBase,[{key:"defaultBase",value:function defaultBase(){}},{key:"wasmSupported",value:function wasmSupported(){return a.default.wasmSupported()}},{key:"scriptForClass",value:function scriptForClass(e){return u[e]}},{key:"urlForClass",value:function urlForClass(e){var t=this.scriptForClass(e);if(t)return this.urlForScript(t);throw new Error("asked for URL for unknown class "+e)}},{key:"urlForScript",value:function urlForScript(e){if(e){var t=this.base;return void 0===t?t="":t+="/",t+e+"?version="+encodeURIComponent(i)}throw new Error("asked for URL for unknown script "+e)}},{key:"loadClass",value:function loadClass(e,t,r){var o=this;r=r||{};var s=this.getGlobal(),n=this.urlForClass(e),a=function classWrapper(t){return(t=t||{}).locateFile=function(e){return"data:"===e.slice(0,5)?e:o.urlForScript(e)},t.mainScriptUrlOrBlob=o.scriptForClass(e)+"?version="+encodeURIComponent(i),s[e](t)};"function"==typeof s[e]?t(a):this.loadScript(n,(function(){t(a)}))}}]),OGVLoaderBase}();t.default=c},713:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(575)),n=o(r(913)),a=o(r(205)),i=o(r(585)),u=o(r(754));function _createSuper(e){var t=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function _createSuperInternal(){var r,o=(0,u.default)(e);if(t){var s=(0,u.default)(this).constructor;r=Reflect.construct(o,arguments,s)}else r=o.apply(this,arguments);return(0,i.default)(this,r)}}var c=new(function(e){(0,a.default)(OGVLoaderWorker,e);var t=_createSuper(OGVLoaderWorker);function OGVLoaderWorker(){return(0,s.default)(this,OGVLoaderWorker),t.apply(this,arguments)}return(0,n.default)(OGVLoaderWorker,[{key:"loadScript",value:function loadScript(e,t){importScripts(e),t()}},{key:"getGlobal",value:function getGlobal(){return self}}]),OGVLoaderWorker}(o(r(445)).default));t.default=c},172:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913)),i=o(r(713));r.g.OGVLoader=i.default;var u=function(){function OGVWorkerSupport(e,t){var r=this;(0,n.default)(this,OGVWorkerSupport),this.propList=e,this.handlers=t,this.transferables=function(){var e=new ArrayBuffer(1024),t=new Uint8Array(e);try{return postMessage({action:"transferTest",bytes:t},[e]),!e.byteLength}catch(e){return!1}}(),this.target=null,this.sentProps={},this.pendingEvents=[],this.handlers.construct=function(e,t){var o=e[0],s=e[1];i.default.loadClass(o,(function(e){e(s).then((function(e){for(r.target=e,t();r.pendingEvents.length;)r.handleEvent(r.pendingEvents.shift())}))}))},addEventListener("message",(function(e){r.workerOnMessage(e)}))}return(0,a.default)(OGVWorkerSupport,[{key:"handleEvent",value:function handleEvent(e){var t=this;this.handlers[e.action].call(this,e.args,(function(r){r=r||[];var o={},s=[];t.propList.forEach((function(e){var r=t.target[e];if(t.sentProps[e]!==r)if(t.sentProps[e]=r,"duration"==e&&isNaN(r)&&isNaN(t.sentProps[e]));else if("audioBuffer"==e){if(o[e]=r,r)for(var n=0;n{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=new(o(r(172)).default)(["loadedMetadata","videoFormat","frameBuffer","cpuTime"],{init:function init(e,t){this.target.init(t)},processHeader:function processHeader(e,t){this.target.processHeader(e[0],(function(e){t([e])}))},processFrame:function processFrame(e,t){this.target.processFrame(e[0],(function(e){t([e])}))},sync:function sync(e,t){this.target.sync(),t()},recycleFrame:function recycleFrame(e,t){this.target.recycleFrame(e[0]),t()}});t.default=s},539:(e,t,r)=>{"use strict";var o=r(318);Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var s=o(r(8)),n=o(r(575)),a=o(r(913));var i=new(function(){function WebAssemblyChecker(){(0,n.default)(this,WebAssemblyChecker),this.tested=!1,this.testResult=void 0}return(0,a.default)(WebAssemblyChecker,[{key:"wasmSupported",value:function wasmSupported(){if(!this.tested){try{"object"===("undefined"==typeof WebAssembly?"undefined":(0,s.default)(WebAssembly))?this.testResult=function testSafariWebAssemblyBug(){var e=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),t=new WebAssembly.Module(e);return 0!==new WebAssembly.Instance(t,{}).exports.test(4)}():this.testResult=!1}catch(e){console.log("Exception while testing WebAssembly",e),this.testResult=!1}this.tested=!0}return this.testResult}}]),WebAssemblyChecker}());t.default=i}},t={};function __webpack_require__(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,__webpack_require__),s.exports}__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),(()=>{"use strict";__webpack_require__(318)(__webpack_require__(443))})()})(); \ No newline at end of file diff --git a/ogvjs-1.8.4/ogv.js b/ogvjs-1.8.4/ogv.js new file mode 100644 index 0000000..c19213f --- /dev/null +++ b/ogvjs-1.8.4/ogv.js @@ -0,0 +1,2 @@ +/*! For license information please see ogv.js.LICENSE.txt */ +!function webpackUniversalModuleDefinition(t,i){"object"==typeof exports&&"object"==typeof module?module.exports=i():"function"==typeof define&&define.amd?define([],i):"object"==typeof exports?exports.ogvjs=i():t.ogvjs=i()}(globalThis,(function(){return(()=>{var t={506:t=>{t.exports=function _assertThisInitialized(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0},575:t=>{t.exports=function _classCallCheck(t,i){if(!(t instanceof i))throw new TypeError("Cannot call a class as a function")},t.exports.default=t.exports,t.exports.__esModule=!0},913:t=>{function _defineProperties(t,i){for(var u=0;u{var d=u(331);function _get(i,u,c){return"undefined"!=typeof Reflect&&Reflect.get?(t.exports=_get=Reflect.get,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=_get=function _get(t,i,u){var c=d(t,i);if(c){var h=Object.getOwnPropertyDescriptor(c,i);return h.get?h.get.call(u):h.value}},t.exports.default=t.exports,t.exports.__esModule=!0),_get(i,u,c||i)}t.exports=_get,t.exports.default=t.exports,t.exports.__esModule=!0},754:t=>{function _getPrototypeOf(i){return t.exports=_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(t){return t.__proto__||Object.getPrototypeOf(t)},t.exports.default=t.exports,t.exports.__esModule=!0,_getPrototypeOf(i)}t.exports=_getPrototypeOf,t.exports.default=t.exports,t.exports.__esModule=!0},205:(t,i,u)=>{var d=u(489);t.exports=function _inherits(t,i){if("function"!=typeof i&&null!==i)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(i&&i.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),i&&d(t,i)},t.exports.default=t.exports,t.exports.__esModule=!0},318:t=>{t.exports=function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}},t.exports.default=t.exports,t.exports.__esModule=!0},585:(t,i,u)=>{var d=u(8).default,c=u(506);t.exports=function _possibleConstructorReturn(t,i){return!i||"object"!==d(i)&&"function"!=typeof i?c(t):i},t.exports.default=t.exports,t.exports.__esModule=!0},489:t=>{function _setPrototypeOf(i,u){return t.exports=_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(t,i){return t.__proto__=i,t},t.exports.default=t.exports,t.exports.__esModule=!0,_setPrototypeOf(i,u)}t.exports=_setPrototypeOf,t.exports.default=t.exports,t.exports.__esModule=!0},331:(t,i,u)=>{var d=u(754);t.exports=function _superPropBase(t,i){for(;!Object.prototype.hasOwnProperty.call(t,i)&&null!==(t=d(t)););return t},t.exports.default=t.exports,t.exports.__esModule=!0},8:t=>{function _typeof(i){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?(t.exports=_typeof=function _typeof(t){return typeof t},t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=_typeof=function _typeof(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t.exports.default=t.exports,t.exports.__esModule=!0),_typeof(i)}t.exports=_typeof,t.exports.default=t.exports,t.exports.__esModule=!0},848:t=>{window,t.exports=function(t){var i={};function r(u){if(i[u])return i[u].exports;var d=i[u]={i:u,l:!1,exports:{}};return t[u].call(d.exports,d,d.exports,r),d.l=!0,d.exports}return r.m=t,r.c=i,r.d=function(t,i,u){r.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:u})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,i){if(1&i&&(t=r(t)),8&i)return t;if(4&i&&"object"==typeof t&&t&&t.__esModule)return t;var u=Object.create(null);if(r.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:t}),2&i&&"string"!=typeof t)for(var d in t)r.d(u,d,function(i){return t[i]}.bind(null,d));return u},r.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(i,"a",i),i},r.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},r.p="",r(r.s=1)}([function(t,i){function r(t,i){if(t<1||t!==Math.round(t))throw"Invalid channel count for BufferQueue";this.channels=t,this.bufferSize=i,this.flush()}r.prototype.flush=function(){this._buffers=[],this._pendingBuffer=this.createBuffer(this.bufferSize),this._pendingPos=0},r.prototype.sampleCount=function(){var t=0;return this._buffers.forEach((function(i){t+=i[0].length})),t},r.prototype.createBuffer=function(t){for(var i=[],u=0;u=d)return t;for(var h=[],l=0;l0?c[c.length+i]:t[0]:t[i]},l=0;lu&&(y=Math.SQRT1_2);for(var b=0;b=u&&(T=0);var k=t[T],P=new Float32Array(g);h(k,P,this._resampleLastSampleData?this._resampleLastSampleData[T]:void 0,y),l.push(P)}return this._resampleFractional=v,this._resampleLastSampleData=t,l},n.prototype.bufferData=function(t){if(!this._backend)throw"Invalid state: AudioFeeder cannot bufferData before init";var i=this._resample(t);i=this._tempoChanger.process(i),this._backend.appendBuffer(i)},n.prototype.getPlaybackState=function(){if(this._backend){var t=this._backend.getPlaybackState();return t.outputPlaybackPosition=t.playbackPosition,t.playbackPosition=this._tempoChanger.mapOutputToInputTime(t.outputPlaybackPosition),t}throw"Invalid state: AudioFeeder cannot getPlaybackState before init"},n.prototype.waitUntilReady=function(t){if(!this._backend)throw"Invalid state: AudioFeeder cannot waitUntilReady before init";this._backend.waitUntilReady(t)},n.prototype.start=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot start before init";this._backend.start()},n.prototype.stop=function(){if(!this._backend)throw"Invalid state: AudioFeeder cannot stop before init";this._backend.stop()},n.prototype.flush=function(){if(this._resampleFractional=0,this._resampleLastSampleData=void 0,!this._backend)throw"Invalid state: AudioFeeder cannot flush before init";this._tempoChanger.flush(this.durationBuffered),this._backend.flush()},n.prototype.close=function(){this._backend&&(this._backend.close(),this._backend=null)},n.prototype.onstarved=null,n.prototype.onbufferlow=null,n.isSupported=function(){return!!Float32Array&&i.isSupported()},n.initSharedAudioContext=function(){return i.isSupported()?i.initSharedAudioContext():null},t.exports=n}()},function(t,i,u){!function(){var i=window.AudioContext||window.webkitAudioContext,d=u(0),c=u(3);function o(t,i,u){var c=u.audioContext||o.initSharedAudioContext();if(this._context=c,this.output=u.output||c.destination,this.rate=c.sampleRate,this.channels=2,u.bufferSize&&(this.bufferSize=0|u.bufferSize),this.bufferThreshold=2*this.bufferSize,this._bufferQueue=new d(this.channels,this.bufferSize),this._playbackTimeAtBufferTail=c.currentTime,this._queuedTime=0,this._delayedTime=0,this._dropped=0,this._liveBuffer=this._bufferQueue.createBuffer(this.bufferSize),c.createScriptProcessor)this._node=c.createScriptProcessor(this.bufferSize,0,this.channels);else{if(!c.createJavaScriptNode)throw new Error("Bad version of web audio API?");this._node=c.createJavaScriptNode(this.bufferSize,0,this.channels)}}o.prototype.bufferSize=4096,o.prototype.bufferThreshold=8192,o.prototype._volume=1,Object.defineProperty(o.prototype,"volume",{get:function(){return this._volume},set:function(t){this._volume=+t}}),o.prototype._muted=!1,Object.defineProperty(o.prototype,"muted",{get:function(){return this._muted},set:function(t){this._muted=!!t}}),o.prototype._audioProcess=function(t){var i,u,d,h,l;l="number"==typeof t.playbackTime?t.playbackTime:this._context.currentTime+this.bufferSize/this.rate;var _=this._playbackTimeAtBufferTail;if(_0){var i=Math.round(t*this.rate),u=this._liveBuffer?this._liveBuffer[0].length:0;i>u?(this._bufferQueue.prependBuffer(this._liveBuffer),this._bufferQueue.prependBuffer(this._bufferQueue.createBuffer(i-u))):this._bufferQueue.prependBuffer(this._bufferQueue.trimBuffer(this._liveBuffer,u-i,i)),this._playbackTimeAtBufferTail-=t}this._node.onaudioprocess=null,this._node.disconnect()}},o.prototype.flush=function(){this._bufferQueue.flush()},o.prototype.close=function(){this.stop(),this._context=null},o.prototype.onstarved=null,o.prototype.onbufferlow=null,o.isSupported=function(){return!!i},o.sharedAudioContext=null,o.initSharedAudioContext=function(){if(!o.sharedAudioContext&&o.isSupported()){var t,u=new i;if(u.createScriptProcessor)t=u.createScriptProcessor(1024,0,2);else{if(!u.createJavaScriptNode)throw new Error("Bad version of web audio API?");t=u.createJavaScriptNode(1024,0,2)}t.connect(u.destination),t.disconnect(),o.sharedAudioContext=u}return o.sharedAudioContext},t.exports=o}()},function(t,i){t.exports=function(){if(void 0!==window.setImmediate)return window.setImmediate;if(window&&window.postMessage){var t=[];return window.addEventListener("message",(function(i){if(i.source===window){var u=i.data;if("object"==typeof u&&u.nextTickBrowserPingMessage){var d=t.pop();d&&d()}}})),function(i){t.push(i),window.postMessage({nextTickBrowserPingMessage:!0},document.location.toString())}}return function(t){setTimeout(t,0)}}()},function(t,i,u){var d;window,d=function(){return function(t){var i={};function r(u){if(i[u])return i[u].exports;var d=i[u]={i:u,l:!1,exports:{}};return t[u].call(d.exports,d,d.exports,r),d.l=!0,d.exports}return r.m=t,r.c=i,r.d=function(t,i,u){r.o(t,i)||Object.defineProperty(t,i,{enumerable:!0,get:u})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,i){if(1&i&&(t=r(t)),8&i)return t;if(4&i&&"object"==typeof t&&t&&t.__esModule)return t;var u=Object.create(null);if(r.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:t}),2&i&&"string"!=typeof t)for(var d in t)r.d(u,d,function(i){return t[i]}.bind(null,d));return u},r.n=function(t){var i=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(i,"a",i),i},r.o=function(t,i){return Object.prototype.hasOwnProperty.call(t,i)},r.p="",r(r.s=1)}([function(t,i){var u={float_array:function(t){return new Float32Array(t)},blit:function(t,i,u,d,c){u.set(t.subarray(i,i+c),d)}};t.exports=u},function(t,i,u){var d,c;d=u(0),c=u(2),t.exports=function(t){var i=(t=t||{}).sampleRate||44100,u=t.wsizeLog||11,h=t.tempo||1,l=(t.numChannels,Math.pow(2,50/1200)-1),_=1<>1),w=d.float_array(P),E=d.float_array(P),x=d.float_array(P),A=d.float_array(P),R=d.float_array(P),O=d.float_array(P),S=1+(P>>1),C=[0,0],B=[],D=[],M=[],V=[];for(k=0;k<2;k++)B.push(d.float_array(S)),D.push(d.float_array(S)),M.push(d.float_array(S)),V.push(d.float_array(P));var I=d.float_array(S),L=d.float_array(S),j=0,W=0,X=[{in_time:0,out_time:0,tempo:h}],N=0,H=0,z=1,Y=0,Q=0,K=0,$=0,Z={mapOutputToInputTime:function(t){for(var i=X.length-1;t0;)i--;var u=X[i];return u.in_time+u.tempo*(t-u.out_time)},flush:function(t){Y=0,C=[0,0],H=0,$=0,K=0;for(var i=0;i<2;i++)for(var u=0;u=0;)X.pop(),d--;X.push({in_time:j,out_time:W,tempo:h})}},getTempo:function(){return h},setTempo:function(t){y=b=m,t>=1?b=Math.round(y/t):y=Math.round(b*t),Q=(1/t-1*b/y)*y,z=function(t,i){for(var u=t.length/i|0,d=0,c=0;cu&&(u=t[d]);var c=1e-8*u,h=1,_=1;for(i[0]=1,d=2;dc&&t[d]>t[d-1]&&t[d]>=t[d+1]){var m=d+(t[d-1]-t[d+1])/(2*(t[d-1]-2*t[d]+t[d+1]));m-i[h-1]>p?(i[h++]=m,_=d):t[d]>t[_]&&(i[h-1]=m,_=d)}}return h}(k,w),x=D[p],A=M[p];if(0!=t&&0!=E){var R=0;for(K=0;Ky[R]&&R!=v;)++R;var O=R;R>0&&$-y[R-1].1*k[Math.round($)]){var j=J(i,u,$),W=b[O]+T[O]+U(j,$,b[O],y[O],h)-j;x[K]=j,A[K]=W,I[K]=Math.cos(W),L[K]=Math.sin(W)}else x[K]=J(i,u,$),A[K]=0,I[K]=1,L[K]=0}w[E]=2*_;var X=w[O=0],N=w[O+1],H=I[O],z=L[O];for(P=1;P=X&&P-X>N-P&&(X=w[++O],N=w[O+1],H=I[O],z=L[O]);var Y=i[P]*H-u[P]*z,Q=i[P]*z+u[P]*H;i[P]=Y,u[P]=Q}}else for(var K=0;Kc&&(c=Math.abs(2*p.m_re[i]));for(i=0;i<_-b;i++)Math.abs(p.m_re[i+b+t]+p.m_im[i])>c&&(c=Math.abs(p.m_re[i+b+t]+p.m_im[i]));for(i=_-b;i<_;i++)Math.abs(2*p.m_im[i])>c&&(c=Math.abs(2*p.m_im[i]));var l=1/Math.floor(1*_/(2*b));for(h*c>l&&(h=l/c),i=0;i<_;i++)v[i]+=h*p.m_re[i],v[i+b+t]+=h*p.m_im[i];return N+=2,H=2*b+t};return Z.process=function(t){var u=t[0].length,c=t[0];if(t.length>1){c=d.float_array(t[0].length);for(var l=1/t.length,p=0;p0){var T=$+K+u,k=[];for(p=0;px&&(x=$);var A=d.float_array(x);d.blit(v,0,A,0,$);for(var R=0,O=$,S=0,C=0;;){var B=_+y-K;if(R+B>u){d.blit(c,R,g,K,u-R),K+=u-R,R=u;break}B<=0?K-=2*y:(d.blit(c,R,g,K,B),R+=B,K=_-y),C=G(),j+=2*y/i,W+=C/i,(S=O+C-x)<0&&(S=0),d.blit(v,0,A,O,C-S),O+=C}d.blit(v,C-S,v,0,S),$=S;var D=[];for(p=0;p>=1;u.m_revTgt[c]=l}u.twiddleRe=d.float_array(u.m_logN),u.twiddleIm=d.float_array(u.m_logN);for(var p=1,m=0;m>1,_=c>>1,p=c;if(t)for(var m=1/c,g=0;g>=1,_>>=1,p>>=1}for(var B,D,M=u.m_revTgt,V=0;VV&&(D=i[B=M[V]],i[B]=i[V],i[V]=D,D=d[B],d[B]=d[V],d[V]=D)};var v=i>>1;return u.unpack=function(t,d,c,h){t[0]=u.m_re[0],c[0]=u.m_im[0],d[0]=h[0]=0,t[v]=u.m_re[v],c[v]=u.m_im[v],d[v]=h[v]=0;for(var l=1;l{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=function(){function Bisector(t){(0,c.default)(this,Bisector),this.lower=t.start,this.upper=t.end,this.onprocess=t.process,this.position=0,this.n=0}return(0,h.default)(Bisector,[{key:"iterate",value:function iterate(){return this.n++,this.position=Math.floor((this.lower+this.upper)/2),this.onprocess(this.lower,this.upper,this.position)}},{key:"start",value:function start(){return this.iterate(),this}},{key:"left",value:function left(){return this.upper=this.position,this.iterate()}},{key:"right",value:function right(){return this.lower=this.position,this.iterate()}}]),Bisector}();i.default=l},523:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=new(function(){function _class(){(0,c.default)(this,_class)}return(0,h.default)(_class,[{key:"hasTypedArrays",value:function hasTypedArrays(){return!!window.Uint32Array}},{key:"hasWebAssembly",value:function hasWebAssembly(){return!!window.WebAssembly}},{key:"hasWebAudio",value:function hasWebAudio(){return!(!window.AudioContext&&!window.webkitAudioContext)}},{key:"hasFlash",value:function hasFlash(){return!1}},{key:"hasAudio",value:function hasAudio(){return this.hasWebAudio()}},{key:"isBlacklisted",value:function isBlacklisted(t){return!1}},{key:"isSlow",value:function isSlow(){return!1}},{key:"isTooSlow",value:function isTooSlow(){return!1}},{key:"supported",value:function supported(t){return"OGVDecoder"===t?this.hasWebAssembly():"OGVPlayer"===t&&(this.supported("OGVDecoder")&&this.hasAudio())}}]),_class}());i.default=l},408:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=d(u(205)),_=d(u(585)),p=d(u(754));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,p.default)(t);if(i){var c=(0,p.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,_.default)(this,u)}}var m=function(t){(0,l.default)(OGVDecoderAudioProxy,t);var i=_createSuper(OGVDecoderAudioProxy);function OGVDecoderAudioProxy(){return(0,c.default)(this,OGVDecoderAudioProxy),i.apply(this,arguments)}return(0,h.default)(OGVDecoderAudioProxy,[{key:"init",value:function init(t){this.proxy("init",[],t)}},{key:"processHeader",value:function processHeader(t,i){this.proxy("processHeader",[t],i,[t])}},{key:"processAudio",value:function processAudio(t,i){this.proxy("processAudio",[t],i,[t])}},{key:"close",value:function close(){this.terminate()}}]),OGVDecoderAudioProxy}((0,d(u(580)).default)({loadedMetadata:!1,audioFormat:null,audioBuffer:null,cpuTime:0}));i.default=m},319:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=d(u(205)),_=d(u(585)),p=d(u(754));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,p.default)(t);if(i){var c=(0,p.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,_.default)(this,u)}}var m=function(t){(0,l.default)(OGVDecoderVideoProxy,t);var i=_createSuper(OGVDecoderVideoProxy);function OGVDecoderVideoProxy(){return(0,c.default)(this,OGVDecoderVideoProxy),i.apply(this,arguments)}return(0,h.default)(OGVDecoderVideoProxy,[{key:"init",value:function init(t){this.proxy("init",[],t)}},{key:"processHeader",value:function processHeader(t,i){this.proxy("processHeader",[t],i,[t])}},{key:"processFrame",value:function processFrame(t,i){this.proxy("processFrame",[t],i,[t])}},{key:"close",value:function close(){this.terminate()}},{key:"sync",value:function sync(){this.proxy("sync",[],(function(){}))}},{key:"recycleFrame",value:function recycleFrame(t){this.proxy("recycleFrame",[t],(function(){}),[t.y.bytes.buffer,t.u.bytes.buffer,t.v.bytes.buffer])}}]),OGVDecoderVideoProxy}((0,d(u(580)).default)({loadedMetadata:!1,videoFormat:null,frameBuffer:null,cpuTime:0}));i.default=m},445:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=d(u(539)),_="1.8.4-20210702161914-bd3a07f",p={OGVDemuxerOggW:"ogv-demuxer-ogg-wasm.js",OGVDemuxerWebMW:"ogv-demuxer-webm-wasm.js",OGVDecoderAudioOpusW:"ogv-decoder-audio-opus-wasm.js",OGVDecoderAudioVorbisW:"ogv-decoder-audio-vorbis-wasm.js",OGVDecoderVideoTheoraW:"ogv-decoder-video-theora-wasm.js",OGVDecoderVideoVP8W:"ogv-decoder-video-vp8-wasm.js",OGVDecoderVideoVP8MTW:"ogv-decoder-video-vp8-mt-wasm.js",OGVDecoderVideoVP9W:"ogv-decoder-video-vp9-wasm.js",OGVDecoderVideoVP9SIMDW:"ogv-decoder-video-vp9-simd-wasm.js",OGVDecoderVideoVP9MTW:"ogv-decoder-video-vp9-mt-wasm.js",OGVDecoderVideoVP9SIMDMTW:"ogv-decoder-video-vp9-simd-mt-wasm.js",OGVDecoderVideoAV1W:"ogv-decoder-video-av1-wasm.js",OGVDecoderVideoAV1SIMDW:"ogv-decoder-video-av1-simd-wasm.js",OGVDecoderVideoAV1MTW:"ogv-decoder-video-av1-mt-wasm.js",OGVDecoderVideoAV1SIMDMTW:"ogv-decoder-video-av1-simd-mt-wasm.js"},m=function(){function OGVLoaderBase(){(0,c.default)(this,OGVLoaderBase),this.base=this.defaultBase()}return(0,h.default)(OGVLoaderBase,[{key:"defaultBase",value:function defaultBase(){}},{key:"wasmSupported",value:function wasmSupported(){return l.default.wasmSupported()}},{key:"scriptForClass",value:function scriptForClass(t){return p[t]}},{key:"urlForClass",value:function urlForClass(t){var i=this.scriptForClass(t);if(i)return this.urlForScript(i);throw new Error("asked for URL for unknown class "+t)}},{key:"urlForScript",value:function urlForScript(t){if(t){var i=this.base;return void 0===i?i="":i+="/",i+t+"?version="+encodeURIComponent(_)}throw new Error("asked for URL for unknown script "+t)}},{key:"loadClass",value:function loadClass(t,i,u){var d=this;u=u||{};var c=this.getGlobal(),h=this.urlForClass(t),l=function classWrapper(i){return(i=i||{}).locateFile=function(t){return"data:"===t.slice(0,5)?t:d.urlForScript(t)},i.mainScriptUrlOrBlob=d.scriptForClass(t)+"?version="+encodeURIComponent(_),c[t](i)};"function"==typeof c[t]?i(l):this.loadScript(h,(function(){i(l)}))}}]),OGVLoaderBase}();i.default=m},964:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=d(u(525)),_=d(u(205)),p=d(u(585)),m=d(u(754)),g=d(u(408)),v=d(u(319)),y=d(u(445));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,m.default)(t);if(i){var c=(0,m.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,p.default)(this,u)}}var b={audio:{proxy:g.default,worker:"ogv-worker-audio.js"},video:{proxy:v.default,worker:"ogv-worker-video.js"}},T={OGVDecoderAudioOpusW:"audio",OGVDecoderAudioVorbisW:"audio",OGVDecoderVideoTheoraW:"video",OGVDecoderVideoVP8W:"video",OGVDecoderVideoVP9W:"video",OGVDecoderVideoVP9SIMDW:"video",OGVDecoderVideoAV1W:"video",OGVDecoderVideoAV1SIMDW:"video"},k=new(function(t){(0,_.default)(OGVLoaderWeb,t);var i=_createSuper(OGVLoaderWeb);function OGVLoaderWeb(){var t;return(0,c.default)(this,OGVLoaderWeb),(t=i.call(this)).scriptStatus={},t.scriptCallbacks={},t}return(0,h.default)(OGVLoaderWeb,[{key:"getGlobal",value:function getGlobal(){return window}},{key:"defaultBase",value:function defaultBase(){for(var t,i,u=document.querySelectorAll("script"),d=/^(?:|(.*)\/)ogv(?:-support|-es2017)?\.js(?:\?|#|$)/,c=0;c{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(309)),l={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4},_=function OGVMediaError(t,i){(0,c.default)(this,OGVMediaError),this.code=t,this.message=i};(0,h.default)(_,l),(0,h.default)(_.prototype,l);var p=_;i.default=p},278:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575));function split(t,i,u){var d=t.split(i,u).map((function(t){return function trim(t){return t.replace(/^\s+/,"").replace(/\s+$/,"")}(t)}));if("number"==typeof u)for(;d.length{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=d(u(506)),_=d(u(205)),p=d(u(585)),m=d(u(754)),g=d(u(8)),v=d(u(731)),y=d(u(936)),b=d(u(848)),T=d(u(964)),k=d(u(893)),P=d(u(309)),w=d(u(759)),E=d(u(278)),x=d(u(168)),A=d(u(625));function _createSuper(t){var i=function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function _createSuperInternal(){var u,d=(0,m.default)(t);if(i){var c=(0,m.default)(this).constructor;u=Reflect.construct(d,arguments,c)}else u=d.apply(this,arguments);return(0,p.default)(this,u)}}var R,O=function(){if("function"==typeof setImmediate)return setImmediate;var t=new MessageChannel,i=[];return t.port1.onmessage=function(t){i.shift()()},function nextTick(u){i.push(u),t.port2.postMessage({})}}(),S={NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4},C="INITIAL",B="SEEKING_END",D="LOADED",M="PRELOAD",V="READY",I="PLAYING",L="SEEKING",j="ERROR",W="NOT_SEEKING",X="BISECT_TO_TARGET",N="BISECT_TO_KEYPOINT",H="LINEAR_TO_TARGET",z="exact",Y="fast";function OGVJSElement(){var t=document.createElement("ogvjs");return Object.setPrototypeOf?Object.setPrototypeOf(t,Object.getPrototypeOf(this)):t.__proto__=this.__proto__,t}R="undefined"==typeof performance||void 0===(0,g.default)(performance.now)?Date.now:performance.now.bind(performance),OGVJSElement.prototype=Object.create(HTMLElement.prototype,{});var Q=function(t){(0,_.default)(OGVPlayer,t);var i=_createSuper(OGVPlayer);function OGVPlayer(t){var u;if((0,c.default)(this,OGVPlayer),u=i.call(this),(t=t||{}).base=t.base||T.default.base,u._options=t,u._instanceId="ogvjs"+ ++OGVPlayer.instanceCount,void 0!==t.worker?u._enableWorker=!!t.worker:u._enableWorker=!!window.Worker,!T.default.wasmSupported())throw new Error("WebAssembly not supported");return u._enableThreading=!!t.threading,u._enableSIMD=!!t.simd,u._state=C,u._seekState=W,u._detectedType=null,u._canvas=document.createElement("canvas"),u._frameSink=null,t.video&&u._canvas.captureStream?(u._mediaStream=new MediaStream,u._video="object"===(0,g.default)(t.video)?t.video:document.createElement("video"),u._video.playsInline=!0,u._video.srcObject=u._mediaStream):u._video=null,u._videoTrack=null,u._audioTrack=null,u._canvasStream=null,u.className=u._instanceId,(0,P.default)((0,l.default)(u),S),u._view=u._video||u._canvas,u._view.style.position="absolute",u._view.style.top="0",u._view.style.left="0",u._view.style.width="100%",u._view.style.height="100%",u._view.style.objectFit="contain",u.appendChild(u._view),u._startTime=R(),u._codec=null,u._audioInfo=null,u._videoInfo=null,u._actionQueue=[],u._audioFeeder=null,u._muted=!1,u._initialPlaybackPosition=0,u._initialPlaybackOffset=0,u._prebufferingAudio=!1,u._initialSeekTime=0,u._currentSrc="",u._streamEnded=!1,u._mediaError=null,u._dataEnded=!1,u._byteLength=0,u._duration=null,u._lastSeenTimestamp=null,u._nextProcessingTimer,u._nextFrameTimer=null,u._loading=!1,u._started=!1,u._paused=!0,u._ended=!1,u._startedPlaybackInDocument=!1,u._stream=void 0,u._framesProcessed=0,u._targetPerFrameTime=1e3/60,u._actualPerFrameTime=0,u._totalFrameTime=0,u._totalFrameCount=0,u._playTime=0,u._bufferTime=0,u._drawingTime=0,u._proxyTime=0,u._totalJitter=0,u._droppedAudio=0,u._delayedAudio=0,u._lateFrames=0,u._poster="",u._thumbnail=null,u._frameEndTimestamp=0,u._audioEndTimestamp=0,u._decodedFrames=[],u._pendingFrames=[],u._lastFrameDecodeTime=0,u._lastFrameVideoCpuTime=0,u._lastFrameAudioCpuTime=0,u._lastFrameDemuxerCpuTime=0,u._lastFrameDrawingTime=0,u._lastFrameBufferTime=0,u._lastFrameProxyTime=0,u._lastVideoCpuTime=0,u._lastAudioCpuTime=0,u._lastDemuxerCpuTime=0,u._lastBufferTime=0,u._lastProxyTime=0,u._lastDrawingTime=0,u._lastFrameTimestamp=0,u._currentVideoCpuTime=0,u._lastTimeUpdate=0,u._timeUpdateInterval=250,u._seekTargetTime=0,u._bisectTargetTime=0,u._seekMode=null,u._lastSeekPosition=null,u._seekBisector=null,u._didSeek=null,u._depth=0,u._needProcessing=!1,u._pendingFrame=0,u._pendingAudio=0,u._framePipelineDepth=8,u._frameParallelism=u._enableThreading?Math.min(16,navigator.hardwareConcurrency)||1:0,u._audioPipelineDepth=12,u._videoInfo=null,u._audioInfo=null,u._width=0,u._height=0,u._volume=1,u._playbackRate=1,Object.defineProperties((0,l.default)(u),{src:{get:function getSrc(){return this.getAttribute("src")||""},set:function setSrc(t){this.setAttribute("src",t),this._loading=!1,this._prepForLoad("interactive")}},buffered:{get:function getBuffered(){var t,i=this;return t=this._stream&&this._byteLength&&this._duration?this._stream.getBufferedRanges().map((function(t){return t.map((function(t){return t/i._stream.length*i._duration}))})):[[0,0]],new x.default(t)}},seekable:{get:function getSeekable(){return this.duration<1/0&&this._stream&&this._stream.seekable&&this._codec&&this._codec.seekable?new x.default([[0,this._duration]]):new x.default([])}},currentTime:{get:function getCurrentTime(){return this._state==L?this._seekTargetTime:this._codec?this._state!=I||this._paused?this._initialPlaybackOffset:this._getPlaybackTime():this._initialSeekTime},set:function setCurrentTime(t){this._seek(t,z)}},duration:{get:function getDuration(){return this._codec&&this._codec.loadedMetadata?null!==this._duration?this._duration:1/0:NaN}},paused:{get:function getPaused(){return this._paused}},ended:{get:function getEnded(){return this._ended}},seeking:{get:function getSeeking(){return this._state==L}},muted:{get:function getMuted(){return this._muted},set:function setMuted(t){this._muted=t,this._audioFeeder?this._audioFeeder.muted=this._muted:this._started&&!this._muted&&this._codec&&this._codec.hasAudio&&(this._log("unmuting: switching from timer to audio clock"),this._initAudioFeeder(),this._startPlayback(this._audioEndTimestamp)),this._fireEventAsync("volumechange")}},poster:{get:function getPoster(){return this._poster},set:function setPoster(t){var i=this;if(this._poster=t,!this._started){this._thumbnail&&this.removeChild(this._thumbnail);var u=new Image;u.src=this._poster,u.className="ogvjs-poster",u.style.position="absolute",u.style.top="0",u.style.left="0",u.style.width="100%",u.style.height="100%",u.style.objectFit="contain",u.style.visibility="hidden",u.addEventListener("load",(function(){i._thumbnail===u&&(OGVPlayer.styleManager.appendRule("."+i._instanceId,{width:u.naturalWidth+"px",height:u.naturalHeight+"px"}),OGVPlayer.updatePositionOnResize(),u.style.visibility="visible")})),this._thumbnail=u,this.appendChild(u)}}},videoWidth:{get:function getVideoWidth(){return this._videoInfo?this._videoInfo.displayWidth:0}},videoHeight:{get:function getVideoHeight(){return this._videoInfo?this._videoInfo.displayHeight:0}},ogvjsVideoFrameRate:{get:function getOgvJsVideoFrameRate(){return this._videoInfo?0==this._videoInfo.fps?this._totalFrameCount/(this._totalFrameTime/1e3):this._videoInfo.fps:0}},ogvjsAudioChannels:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.channels:0}},ogvjsAudioSampleRate:{get:function getOgvJsAudioChannels(){return this._audioInfo?this._audioInfo.rate:0}},width:{get:function getWidth(){return this._width},set:function setWidth(t){this._width=parseInt(t,10),this.style.width=this._width+"px",OGVPlayer.updatePositionOnResize()}},height:{get:function getHeight(){return this._height},set:function setHeight(t){this._height=parseInt(t,10),this.style.height=this._height+"px",OGVPlayer.updatePositionOnResize()}},autoplay:{get:function getAutoplay(){return!1},set:function setAutoplay(t){}},controls:{get:function getControls(){return!1},set:function setControls(t){}},loop:{get:function getLoop(){return!1},set:function setLoop(t){}},crossOrigin:{get:function getCrossOrigin(){return null},set:function setCrossOrigin(t){}},currentSrc:{get:function getCurrentSrc(){return this._currentSrc}},defaultMuted:{get:function getDefaultMuted(){return!1}},defaultPlaybackRate:{get:function getDefaultPlaybackRate(){return 1}},error:{get:function getError(){return this._state===j?this._mediaError?this._mediaError:new w.default("unknown error occurred in media procesing"):null}},preload:{get:function getPreload(){return this.getAttribute("preload")||""},set:function setPreload(t){this.setAttribute("preload",t)}},readyState:{get:function getReadyState(){return this._stream&&this._codec&&this._codec.loadedMetadata?OGVPlayer.HAVE_ENOUGH_DATA:OGVPlayer.HAVE_NOTHING}},networkState:{get:function getNetworkState(){return this._stream?this._stream.waiting?OGVPlayer.NETWORK_LOADING:OGVPlayer.NETWORK_IDLE:this.readyState==OGVPlayer.HAVE_NOTHING?OGVPlayer.NETWORK_EMPTY:OGVPlayer.NETWORK_NO_SOURCE}},playbackRate:{get:function getPlaybackRate(){return this._playbackRate},set:function setPlaybackRate(t){var i=Number(t)||1;this._audioFeeder?this._audioFeeder.tempo=i:this._paused||(this._initialPlaybackOffset=this._getPlaybackTime(),this._initialPlaybackPosition=i*R()/1e3),this._playbackRate=i,this._fireEventAsync("ratechange")}},played:{get:function getPlayed(){return new x.default([[0,this.currentTime]])}},volume:{get:function getVolume(){return this._volume},set:function setVolume(t){this._volume=+t,this._audioFeeder&&(this._audioFeeder.volume=this._volume),this._fireEventAsync("volumechange")}}}),u.onframecallback=null,u.onloadstate=null,u.onprogress=null,u.onsuspend=null,u.onabort=null,u.onemptied=null,u.onstalled=null,u.onloadedmetadata=null,u.onloadeddata=null,u.oncanplay=null,u.oncanplaythrough=null,u.onplaying=null,u.onwaiting=null,u.onseeking=null,u.onseeked=null,u.onended=null,u.ondurationchange=null,u.ontimeupdate=null,u.onplay=null,u.onpause=null,u.onratechange=null,u.onresize=null,u.onvolumechange=null,u.onaudiofeedercreated=null,u}return(0,h.default)(OGVPlayer,[{key:"_time",value:function _time(t){var i=R();t();var u=R()-i;return this._lastFrameDecodeTime+=u,u}},{key:"_log",value:function _log(t){var i=this._options;if(i.debug){var u=R()-this._startTime;i.debugFilter&&!t.match(i.debugFilter)||console.log("["+Math.round(10*u)/10+"ms] "+t)}}},{key:"_fireEvent",value:function _fireEvent(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEvent "+t);var u,d="function"==typeof Event;for(var c in d?u=new CustomEvent(t):(u=document.createEvent("Event")).initEvent(t,!1,!1),i)i.hasOwnProperty(c)&&(u[c]=i[c]);var h=this.dispatchEvent(u);!d&&"resize"===t&&this.onresize&&h&&this.onresize.call(this,u)}},{key:"_fireEventAsync",value:function _fireEventAsync(t){var i=this,u=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._log("fireEventAsync "+t),O((function(){i._fireEvent(t,u)}))}},{key:"_initAudioFeeder",value:function _initAudioFeeder(){var t=this,i=this._options,u={bufferSize:8192};if(i.audioContext&&(u.audioContext=i.audioContext),i.audioDestination&&(u.output=i.audioDestination),i.audioBackendFactory&&(u.backendFactory=i.audioBackendFactory),this._video&&!u.output){u.audioContext||(u.audioContext=b.default.initSharedAudioContext());var d=u.audioContext.createMediaStreamDestination();this._audioTrack=d.stream.getAudioTracks()[0],this._mediaStream.addTrack(this._audioTrack),navigator.userAgent.match(/WebKit/)&&(this._video.src=this._mediaStream),this._video.play(),u.output=d}var c=this._audioFeeder=new b.default(u);c.init(this._audioInfo.channels,this._audioInfo.rate),this.onaudiofeedercreated&&this.onaudiofeedercreated(this._audioFeeder),c.bufferThreshold=1,c.volume=this.volume,c.muted=this.muted,c.tempo=this.playbackRate,c.onbufferlow=function(){t._log("onbufferlow"),t._stream&&(t._stream.buffering||t._stream.seeking)||t._pendingAudio||t._pingProcessing()},c.onstarved=function(){t._dataEnded?t._log("onstarved: appear to have reached end of audio"):(t._log("onstarved: halting audio due to starvation"),t._stopPlayback(),t._prebufferingAudio=!0),t._isProcessing()||t._pingProcessing(0)}}},{key:"_startPlayback",value:function _startPlayback(t){if(this._audioFeeder){this._audioFeeder.start();var i=this._audioFeeder.getPlaybackState();this._initialPlaybackPosition=i.playbackPosition}else this._initialPlaybackPosition=this._playbackRate*R()/1e3;void 0!==t&&(this._initialPlaybackOffset=t),this._prebufferingAudio=!1,this._log("continuing at "+this._initialPlaybackPosition+", "+this._initialPlaybackOffset)}},{key:"_stopPlayback",value:function _stopPlayback(){this._initialPlaybackOffset=this._getPlaybackTime(),this._log("pausing at "+this._initialPlaybackOffset),this._audioFeeder&&this._audioFeeder.stop()}},{key:"_getPlaybackTime",value:function _getPlaybackTime(t){return this._prebufferingAudio||this._paused?this._initialPlaybackOffset:(this._audioFeeder?(t=t||this._audioFeeder.getPlaybackState()).playbackPosition:this._playbackRate*R()/1e3)-this._initialPlaybackPosition+this._initialPlaybackOffset}},{key:"_stopVideo",value:function _stopVideo(){this._log("STOPPING"),this._state=C,this._seekState=W,this._started=!1,this._ended=!1,this._frameEndTimestamp=0,this._audioEndTimestamp=0,this._lastFrameDecodeTime=0,this._prebufferingAudio=!1,this._actionQueue.splice(0,this._actionQueue.length),this._stream&&(this._stream.abort(),this._stream=null,this._streamEnded=!1),this._codec&&(this._codec.close(),this._codec=null,this._pendingFrame=0,this._pendingAudio=0,this._dataEnded=!1),this._videoInfo=null,this._audioInfo=null,this._audioFeeder&&(this._audioFeeder.close(),this._audioFeeder=null),this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._frameSink&&(this._frameSink.clear(),this._frameSink=null),this._decodedFrames&&(this._decodedFrames=[]),this._pendingFrames&&(this._pendingFrames=[]),this._initialSeekTime=0,this._initialPlaybackPosition=0,this._initialPlaybackOffset=0,this._duration=null}},{key:"_doFrameComplete",value:function _doFrameComplete(){var t=this,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._startedPlaybackInDocument&&!document.body.contains(this)&&O((function(){t.stop()}));var u=R(),d=u-this._lastFrameTimestamp,c=this._actualPerFrameTime-this._targetPerFrameTime;this._totalJitter+=Math.abs(c),this._playTime+=d;var h={cpuTime:this._lastFrameDecodeTime,drawingTime:this._drawingTime-this._lastFrameDrawingTime,bufferTime:this._bufferTime-this._lastFrameBufferTime,proxyTime:this._proxyTime-this._lastFrameProxyTime,demuxerTime:0,videoTime:0,audioTime:0,clockTime:this._actualPerFrameTime,late:i.dropped,dropped:i.dropped};function n(t){return Math.round(10*t)/10}this._codec&&(h.demuxerTime=this._codec.demuxerCpuTime-this._lastFrameDemuxerCpuTime,h.videoTime+=this._currentVideoCpuTime-this._lastFrameVideoCpuTime,h.audioTime+=this._codec.audioCpuTime-this._lastFrameAudioCpuTime),h.cpuTime+=h.demuxerTime,this._lastFrameDecodeTime=0,this._lastFrameTimestamp=u,this._codec?(this._lastFrameVideoCpuTime=this._currentVideoCpuTime,this._lastFrameAudioCpuTime=this._codec.audioCpuTime,this._lastFrameDemuxerCpuTime=this._codec.demuxerCpuTime):(this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0),this._lastFrameDrawingTime=this._drawingTime,this._lastFrameBufferTime=this._bufferTime,this._lastFrameProxyTime=this._proxyTime,this._log("drew frame "+i.frameEndTimestamp+": clock time "+n(d)+" (jitter "+n(c)+") cpu: "+n(h.cpuTime)+" (mux: "+n(h.demuxerTime)+" buf: "+n(h.bufferTime)+" draw: "+n(h.drawingTime)+" proxy: "+n(h.proxyTime)+") vid: "+n(h.videoTime)+" aud: "+n(h.audioTime)),this._fireEventAsync("framecallback",h),(!this._lastTimeUpdate||u-this._lastTimeUpdate>=this._timeUpdateInterval)&&(this._lastTimeUpdate=u,this._fireEventAsync("timeupdate")),this._codec&&i.yCbCrBuffer&&this._codec.recycleFrame(i.yCbCrBuffer)}},{key:"_seekStream",value:function _seekStream(t){var i=this;this._stream.seeking&&this._stream.abort(),this._stream.buffering&&this._stream.abort(),this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._stream.seek(t).then((function(){i._readBytesAndWait()})).catch((function(t){i._onStreamError(t)}))}},{key:"_onStreamError",value:function _onStreamError(t){"AbortError"===t.name?this._log("i/o promise canceled; ignoring"):(this._log("i/o error: "+t),this._mediaError=new w.default(w.default.MEDIA_ERR_NETWORK,String(t)),this._state=j,this._stopPlayback())}},{key:"_seek",value:function _seek(t,i){var u=this;if(this._log("requested seek to "+t+", mode "+i),this.readyState==this.HAVE_NOTHING)return this._log("not yet loaded; saving seek position for later"),void(this._initialSeekTime=t);if(this._stream&&!this._stream.seekable)throw new Error("Cannot seek a non-seekable stream");if(this._codec&&!this._codec.seekable)throw new Error("Cannot seek in a non-seekable file");var d=function prepForSeek(d){u._stream&&u._stream.buffering&&u._stream.abort(),u._stream&&u._stream.seeking&&u._stream.abort(),u._actionQueue.splice(0,u._actionQueue.length),u._stopPlayback(),u._prebufferingAudio=!1,u._audioFeeder&&u._audioFeeder.flush(),u._state=L,u._seekTargetTime=t,u._seekMode=i,u._codec?u._codec.flush(d):d()};d((function(){u._isProcessing()||u._pingProcessing(0)})),this._actionQueue.push((function(){d((function(){u._doSeek(t)}))}))}},{key:"_doSeek",value:function _doSeek(t){var i=this;this._streamEnded=!1,this._dataEnded=!1,this._ended=!1,this._state=L,this._seekTargetTime=t,this._lastSeekPosition=-1,this._decodedFrames=[],this._pendingFrames=[],this._pendingFrame=0,this._pendingAudio=0,this._didSeek=!1,this._codec.seekToKeypoint(t,(function(u){if(u)return i._seekState=H,i._fireEventAsync("seeking"),i._didSeek?void 0:void i._pingProcessing();i._codec.getKeypointOffset(t,(function(t){t>0?(i._seekState=H,i._seekStream(t)):(i._seekState=X,i._startBisection(i._seekTargetTime)),i._fireEventAsync("seeking")}))}))}},{key:"_startBisection",value:function _startBisection(t){var i=this,u=Math.max(0,this._stream.length-65536);this._bisectTargetTime=t,this._seekBisector=new k.default({start:0,end:u,process:function process(t,u,d){return d!=i._lastSeekPosition&&(i._lastSeekPosition=d,i._codec.flush((function(){i._seekStream(d)})),!0)}}),this._seekBisector.start()}},{key:"_continueSeekedPlayback",value:function _continueSeekedPlayback(){var t=this;this._seekState=W,this._state=V,this._frameEndTimestamp=this._codec.frameTimestamp,this._audioEndTimestamp=this._codec.audioTimestamp,this._codec.hasAudio?this._seekTargetTime=this._codec.audioTimestamp:this._seekTargetTime=this._codec.frameTimestamp,this._initialPlaybackOffset=this._seekTargetTime;var i=function finishedSeeking(){t._lastTimeUpdate=t._seekTargetTime,t._fireEventAsync("timeupdate"),t._fireEventAsync("seeked"),t._isProcessing()||t._pingProcessing()};if(this._codec.hasVideo&&this._decodedFrames.length){var u=this._decodedFrames.shift();this._drawFrame(u.yCbCrBuffer),i()}else{if(this._codec.hasVideo&&this._codec.frameReady)return this._codec.decodeFrame((function(u){u&&t._drawFrame(t._codec.frameBuffer),i()})),void this._codec.sync();i()}}},{key:"_drawFrame",value:function _drawFrame(t){this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null),this._frameSink.drawFrame(t),this._video&&(this._canvasStream||(this._canvasStream=this._canvas.captureStream(0),this._videoTrack=this._canvasStream.getVideoTracks()[0],this._mediaStream.addTrack(this._videoTrack),navigator.userAgent.match(/WebKit/)&&(this._video.src=this._mediaStream,this._video.play())),this._videoTrack&&this._videoTrack.requestFrame?this._videoTrack.requestFrame():this._canvasStream&&this._canvasStream.requestFrame&&this._canvasStream.requestFrame())}},{key:"_doProcessLinearSeeking",value:function _doProcessLinearSeeking(){var t,i=this;if(t=this._codec.hasVideo?this._targetPerFrameTime/1e3:1/256,this._codec.hasVideo){if(this._pendingFrame)return;if(!this._codec.frameReady)return void this._codec.process((function(t){t?i._pingProcessing():i._streamEnded?(i._log("stream ended during linear seeking on video"),i._dataEnded=!0,i._continueSeekedPlayback()):i._readBytesAndWait()}));if(this._seekMode===Y&&this._codec.keyframeTimestamp==this._codec.frameTimestamp)return void this._continueSeekedPlayback();if(this._codec.frameTimestamp<=this._seekTargetTime){var u=this._codec.frameTimestamp;return this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:u}),this._decodedFrames.splice(0,this._decodedFrames.length),this._codec.decodeFrame((function(t){i._pendingFrame--,i._pendingFrames.shift(),i._decodedFrames.push({yCbCrBuffer:i._codec.frameBuffer,videoCpuTime:i._codec.videoCpuTime,frameEndTimestamp:u}),i._pingProcessing()})),void this._codec.sync()}if(!this._codec.hasAudio)return void this._continueSeekedPlayback()}if(this._codec.hasAudio){if(this._pendingAudio)return;return this._codec.audioReady?this._codec.audioTimestamp+tthis._bisectTargetTime?this._seekBisector.left()||(this._log("close enough (left)"),this._seekTargetTime=i,this._continueSeekedPlayback()):i+t/20?this._targetPerFrameTime=1e3/this._videoInfo.fps:this._targetPerFrameTime=16.667,this._canvas.width=this._videoInfo.displayWidth,this._canvas.height=this._videoInfo.displayHeight,OGVPlayer.styleManager.appendRule("."+this._instanceId,{width:this._videoInfo.displayWidth+"px",height:this._videoInfo.displayHeight+"px"}),OGVPlayer.updatePositionOnResize();var t={};void 0!==this._options.webGL&&(t.webGL=this._options.webGL),this._options.forceWebGL&&(t.webGL="required"),this._frameSink=v.default.attach(this._canvas,t)}},{key:"_doProcessing",value:function _doProcessing(){if(this._didSeek&&(this._didSeek=!1),this._nextProcessingTimer=null,this._isProcessing(),this._depth>0)throw new Error("REENTRANCY FAIL: doProcessing recursing unexpectedly");var t=0;do{if(this._needProcessing=!1,this._depth++,this._doProcessingLoop(),this._depth--,this._needProcessing&&this._isProcessing())throw new Error("REENTRANCY FAIL: waiting on input or codec but asked to keep processing");++t>500&&(this._log("stuck in processing loop; breaking with timer"),this._needProcessing=0,this._pingProcessing(0))}while(this._needProcessing)}},{key:"_doProcessingLoop",value:function _doProcessingLoop(){if(this._actionQueue.length)this._actionQueue.shift()();else if(this._state==C)this._doProcessInitial();else if(this._state==B)this._doProcessSeekingEnd();else if(this._state==D)this._doProcessLoaded();else if(this._state==M)this._doProcessPreload();else if(this._state==V)this._doProcessReady();else if(this._state==L)this._doProcessSeeking();else if(this._state==I)this._doProcessPlay();else{if(this._state!=j)throw new Error("Unexpected OGVPlayer state "+this._state);this._doProcessError()}}},{key:"_doProcessInitial",value:function _doProcessInitial(){var t=this;if(this._codec.loadedMetadata){if(!this._codec.hasVideo&&!this._codec.hasAudio)throw new Error("No audio or video found, something is wrong");this._codec.hasAudio&&(this._audioInfo=this._codec.audioFormat),this._codec.hasVideo&&(this._videoInfo=this._codec.videoFormat,this._setupVideo()),isNaN(this._codec.duration)||(this._duration=this._codec.duration),null===this._duration&&this._stream.seekable&&"video/ogg"==this._detectedType?(this._state=B,this._lastSeenTimestamp=-1,this._codec.flush((function(){t._seekStream(Math.max(0,t._stream.length-131072))}))):(this._state=D,this._pingProcessing())}else this._codec.process((function(i){if(i)t._pingProcessing();else{if(t._streamEnded)throw new Error("end of file before headers found");t._log("reading more cause we are out of data"),t._readBytesAndWait()}}))}},{key:"_doProcessSeekingEnd",value:function _doProcessSeekingEnd(){var t=this;this._codec.frameReady?(this._log("saw frame with "+this._codec.frameTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.frameTimestamp),this._codec.discardFrame((function(){t._pingProcessing()}))):this._codec.audioReady?(this._log("saw audio with "+this._codec.audioTimestamp),this._lastSeenTimestamp=Math.max(this._lastSeenTimestamp,this._codec.audioTimestamp),this._codec.discardAudio((function(){t._pingProcessing()}))):this._codec.process((function(i){i?t._pingProcessing():t._stream.eof?(t._log("seek-duration: we are at the end: "+t._lastSeenTimestamp),t._lastSeenTimestamp>0&&(t._duration=t._lastSeenTimestamp),t._state=D,t._codec.flush((function(){t._streamEnded=!1,t._dataEnded=!1,t._seekStream(0)}))):t._readBytesAndWait()}))}},{key:"_doProcessLoaded",value:function _doProcessLoaded(){this._state=M,this._fireEventAsync("loadedmetadata"),this._fireEventAsync("durationchange"),this._codec.hasVideo&&this._fireEventAsync("resize"),this._pingProcessing(0)}},{key:"_doProcessPreload",value:function _doProcessPreload(){var t=this;!this._codec.frameReady&&this._codec.hasVideo||!this._codec.audioReady&&this._codec.hasAudio?this._codec.process((function(i){i?t._pingProcessing():t._streamEnded?t._ended=!0:t._readBytesAndWait()})):(this._state=V,this._fireEventAsync("loadeddata"),this._pingProcessing())}},{key:"_doProcessReady",value:function _doProcessReady(){var t=this;if(this._log("initial seek to "+this._initialSeekTime),this._initialSeekTime>0){var i=this._initialSeekTime;this._initialSeekTime=0,this._log("initial seek to "+i),this._doSeek(i)}else if(this._paused)this._log("paused while in ready");else{var u=function finishStartPlaying(){t._log("finishStartPlaying"),t._state=I,t._lastFrameTimestamp=R(),t._codec.hasAudio&&t._audioFeeder?t._prebufferingAudio=!0:t._startPlayback(),t._pingProcessing(0),t._fireEventAsync("play"),t._fireEventAsync("playing")};!this._codec.hasAudio||this._audioFeeder||this._muted?u():(this._initAudioFeeder(),this._audioFeeder.waitUntilReady(u))}}},{key:"_doProcessSeeking",value:function _doProcessSeeking(){if(this._seekState==W)throw new Error("seeking in invalid state (not seeking?)");if(this._seekState==X)this._doProcessBisectionSeek();else if(this._seekState==N)this._doProcessBisectionSeek();else{if(this._seekState!=H)throw new Error("Invalid seek state "+this._seekState);this._doProcessLinearSeeking()}}},{key:"_doProcessPlay",value:function _doProcessPlay(){var t=this,i=this._codec;if(this._paused)this._log("paused during playback; stopping loop");else if((!i.hasAudio||i.audioReady||this._pendingAudio||this._dataEnded)&&(!i.hasVideo||i.frameReady||this._pendingFrame||this._decodedFrames.length||this._dataEnded)){var u,d,c,h=null,l=0,_=!1,p=0;if(i.hasAudio&&this._audioFeeder?(h=this._audioFeeder.getPlaybackState(),l=this._getPlaybackTime(h),_=this._dataEnded&&0==this._audioFeeder.durationBuffered,this._prebufferingAudio&&(this._audioFeeder.durationBuffered>=2*this._audioFeeder.bufferThreshold&&(!i.hasVideo||this._decodedFrames.length>=this._framePipelineDepth)||this._dataEnded)&&(this._log("prebuffering audio done; buffered to "+this._audioFeeder.durationBuffered),this._startPlayback(l),this._prebufferingAudio=!1),h.dropped!=this._droppedAudio&&this._log("dropped "+(h.dropped-this._droppedAudio)),h.delayed!=this._delayedAudio&&this._log("delayed "+(h.delayed-this._delayedAudio)),this._droppedAudio=h.dropped,this._delayedAudio=h.delayed,(u=this._audioFeeder.durationBuffered<=2*this._audioFeeder.bufferThreshold)&&(this._codec.audioReady?this._pendingAudio>=this._audioPipelineDepth&&(this._log("audio decode disabled: "+this._pendingAudio+" packets in flight"),u=!1):u=!1)):(l=this._getPlaybackTime(),u=this._codec.audioReady&&this._audioEndTimestamp0,c=this._pendingFrame+this._decodedFrames.length=m){for(var g=-1,v=0;v=0)for(;g-- >=0;){this._lateFrames++;var y=this._decodedFrames.shift();this._log("skipping already-decoded late frame at "+y.frameEndTimestamp),p=1e3*(y.frameEndTimestamp-l),this._frameEndTimestamp=y.frameEndTimestamp,this._actualPerFrameTime=this._targetPerFrameTime-p,this._framesProcessed++,y.dropped=!0,this._doFrameComplete(y)}var b=this._codec.nextKeyframeTimestamp,T=b-this._targetPerFrameTime/1e3*(this._framePipelineDepth+this._pendingFrame);if(b>=0&&b!=this._codec.frameTimestamp&&l>=T){this._log("skipping late frame at "+this._decodedFrames[0].frameEndTimestamp+" vs "+l+", expect to see keyframe at "+b);for(var k=0;k0&&(this._targetPerFrameTime=1e3*(this._codec.frameTimestamp-this._frameEndTimestamp)),this._totalFrameTime+=this._targetPerFrameTime,this._totalFrameCount++;var A=this._frameEndTimestamp=this._codec.frameTimestamp;this._pendingFrame++,this._pendingFrames.push({frameEndTimestamp:A});var R=this._pendingFrames,O=!1,S=this._time((function(){t._codec.decodeFrame((function(i){R===t._pendingFrames?(t._log("play loop callback: decoded frame"),t._pendingFrame--,t._pendingFrames.shift(),i?t._decodedFrames.push({yCbCrBuffer:t._codec.frameBuffer,videoCpuTime:t._codec.videoCpuTime,frameEndTimestamp:A}):t._log("Bad video packet or something"),t._codec.process((function(){t._isProcessing()||t._pingProcessing(O?void 0:0)}))):t._log("play loop callback after flush, discarding")}))}));this._pendingFrame&&(O=!0,this._proxyTime+=S,this._pingProcessing(),this._dataEnded&&this._codec.sync())}else if(u){this._log("play loop: ready for audio; depth: "+this._pendingAudio),this._pendingAudio++;var C=this._codec.audioTimestamp,B=this._time((function(){t._codec.decodeAudio((function(i){if(t._pendingAudio--,t._log("play loop callback: decoded audio"),t._audioEndTimestamp=C,i){var u=t._codec.audioBuffer;if(u&&(t._bufferTime+=t._time((function(){t._audioFeeder&&t._audioFeeder.bufferData(u)})),!t._codec.hasVideo)){t._framesProcessed++;var d={frameEndTimestamp:t._audioEndTimestamp};t._doFrameComplete(d)}}t._isProcessing()||t._pingProcessing()}))}));this._pendingAudio&&(this._proxyTime+=B,this._codec.audioReady?this._pingProcessing():this._doProcessPlayDemux())}else if(d){this._log("play loop: ready to draw frame"),this._nextFrameTimer&&(clearTimeout(this._nextFrameTimer),this._nextFrameTimer=null),this._thumbnail&&(this.removeChild(this._thumbnail),this._thumbnail=null);var D=this._decodedFrames.shift();this._currentVideoCpuTime=D.videoCpuTime,this._drawingTime+=this._time((function(){t._drawFrame(D.yCbCrBuffer)})),this._framesProcessed++,this._doFrameComplete(D),this._pingProcessing()}else if(!this._decodedFrames.length||this._nextFrameTimer||this._prebufferingAudio)if(this._dataEnded&&!(this._pendingAudio||this._pendingFrame||this._decodedFrames.length)){this._log("play loop: playback reached end of data "+[this._pendingAudio,this._pendingFrame,this._decodedFrames.length]);var M=0;this._codec.hasAudio&&this._audioFeeder&&(M=1e3*this._audioFeeder.durationBuffered),M>0?(this._log("play loop: ending pending "+M+" ms"),this._pingProcessing(Math.max(0,M))):(this._log("play loop: ENDING NOW: playback time "+this._getPlaybackTime()+"; frameEndTimestamp: "+this._frameEndTimestamp),this._stopPlayback(),this._prebufferingAudio=!1,this._initialPlaybackOffset=Math.max(this._audioEndTimestamp,this._frameEndTimestamp),this._ended=!0,this._paused=!0,this._fireEventAsync("pause"),this._fireEventAsync("ended"))}else this._prebufferingAudio&&(i.hasVideo&&!i.frameReady||i.hasAudio&&!i.audioReady)?(this._log("play loop: prebuffering demuxing"),this._doProcessPlayDemux()):this._log("play loop: waiting on async/timers");else{var V=p;this._log("play loop: setting a timer for drawing "+V),this._nextFrameTimer=setTimeout((function(){t._nextFrameTimer=null,t._pingProcessing()}),V)}}else this._log("play loop: demuxing"),this._doProcessPlayDemux()}},{key:"_doProcessPlayDemux",value:function _doProcessPlayDemux(){var t=this,i=this._codec.frameReady,u=this._codec.audioReady;this._codec.process((function(d){t._codec.frameReady&&!i||t._codec.audioReady&&!u?(t._log("demuxer has packets"),t._pingProcessing()):d?(t._log("demuxer processing to find more packets"),t._pingProcessing()):(t._log("demuxer ran out of data"),t._streamEnded?(t._log("demuxer reached end of data stream"),t._dataEnded=!0,t._pingProcessing()):(t._log("demuxer loading more data"),t._readBytesAndWait()))}))}},{key:"_doProcessError",value:function _doProcessError(){}},{key:"_isProcessing",value:function _isProcessing(){return this._stream&&(this._stream.buffering||this._stream.seeking)||this._codec&&this._codec.processing}},{key:"_readBytesAndWait",value:function _readBytesAndWait(){var t=this;if(this._stream.buffering||this._stream.seeking)this._log("readBytesAndWait during i/o");else{this._stream.read(32768).then((function(i){t._log("got input "+[i.byteLength]),i.byteLength&&t._actionQueue.push((function(){t._codec.receiveInput(i,(function(){t._pingProcessing()}))})),t._stream.eof&&(t._log("stream is at end!"),t._streamEnded=!0),t._isProcessing()||t._pingProcessing()})).catch((function(i){t._onStreamError(i)}))}}},{key:"_pingProcessing",value:function _pingProcessing(){var t=this,i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(this._stream&&this._stream.waiting)this._log("waiting on input");else{this._nextProcessingTimer&&(this._log("canceling old processing timer"),clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null);var u=-1/256;i>u?this._nextProcessingTimer=setTimeout((function(){t._pingProcessing()}),i):this._depth?this._needProcessing=!0:this._doProcessing()}}},{key:"_startProcessingVideo",value:function _startProcessingVideo(t){var i=this;if(!this._started&&!this._codec){this._framesProcessed=0,this._bufferTime=0,this._drawingTime=0,this._proxyTime=0,this._started=!0,this._ended=!1;var u={base:this._options.base,worker:this._enableWorker,threading:this._enableThreading,simd:this._enableSIMD};this._detectedType&&(u.type=this._detectedType),this._codec=new A.default(u),this._lastVideoCpuTime=0,this._lastAudioCpuTime=0,this._lastDemuxerCpuTime=0,this._lastBufferTime=0,this._lastDrawingTime=0,this._lastProxyTime=0,this._lastFrameVideoCpuTime=0,this._lastFrameAudioCpuTime=0,this._lastFrameDemuxerCpuTime=0,this._lastFrameBufferTime=0,this._lastFrameProxyTime=0,this._lastFrameDrawingTime=0,this._currentVideoCpuTime=0,this._codec.onseek=function(t){i._didSeek=!0,i._stream&&i._seekStream(t)},this._codec.init((function(){i._codec.receiveInput(t,(function(){i._readBytesAndWait()}))}))}}},{key:"_loadCodec",value:function _loadCodec(t){var i=this;this._stream.read(1024).then((function(u){var d=new Uint8Array(u);d.length>4&&d[0]=="O".charCodeAt(0)&&d[1]=="g".charCodeAt(0)&&d[2]=="g".charCodeAt(0)&&d[3]=="S".charCodeAt(0)?i._detectedType="video/ogg":d.length>4&&26==d[0]&&69==d[1]&&223==d[2]&&163==d[3]?i._detectedType="video/webm":i._detectedType="video/ogg",t(u)}))}},{key:"_prepForLoad",value:function _prepForLoad(t){var i=this;this._stopVideo();this._currentSrc="",this._loading=!0,this._actionQueue.push((function(){t&&"none"===i.preload?i._loading=!1:function doLoad(){i._options.stream?i._stream=i._options.stream:i._stream=new y.default({url:i.src,cacheSize:16777216,progressive:!1}),i._stream.load().then((function(){i._loading=!1,i._currentSrc=i.src,i._byteLength=i._stream.seekable?i._stream.length:0;var t=i._stream.headers["x-content-duration"];"string"==typeof t&&(i._duration=parseFloat(t)),i._loadCodec((function(t){i._startProcessingVideo(t)}))})).catch((function(t){i._onStreamError(t)}))}()})),this._pingProcessing(0)}},{key:"load",value:function load(){this._prepForLoad()}},{key:"canPlayType",value:function canPlayType(t){var i=new E.default(t);function checkTypes(t){if(i.codecs){var u=0,d=0;return i.codecs.forEach((function(i){t.indexOf(i)>=0?u++:d++})),0===u||d>0?"":"probably"}return"maybe"}return"ogg"!==i.minor||"audio"!==i.major&&"video"!==i.major&&"application"!==i.major?"webm"!==i.minor||"audio"!==i.major&&"video"!==i.major?"":checkTypes(["vorbis","opus","vp8","vp9"]):checkTypes(["vorbis","opus","theora"])}},{key:"play",value:function play(){this._muted||this._options.audioContext||OGVPlayer.initSharedAudioContext(),this._paused&&(this._startedPlaybackInDocument=document.body.contains(this),this._paused=!1,this._state==L||(this._started&&this._codec&&this._codec.loadedMetadata?(this._ended&&this._stream&&this._byteLength?(this._log(".play() starting over after end"),this._seek(0)):this._log(".play() while already started"),this._state=V,this._isProcessing()||this._pingProcessing()):this._loading?this._log(".play() while loading"):(this._log(".play() before started"),this._stream||this.load()))),this._video&&this._video.paused&&this._video.play()}},{key:"getPlaybackStats",value:function getPlaybackStats(){return{targetPerFrameTime:this._targetPerFrameTime,framesProcessed:this._framesProcessed,videoBytes:this._codec?this._codec.videoBytes:0,audioBytes:this._codec?this._codec.audioBytes:0,playTime:this._playTime,demuxingTime:this._codec?this._codec.demuxerCpuTime-this._lastDemuxerCpuTime:0,videoDecodingTime:this._codec?this._codec.videoCpuTime-this._lastVideoCpuTime:0,audioDecodingTime:this._codec?this._codec.audioCpuTime-this._lastAudioCpuTime:0,bufferTime:this._bufferTime-this._lastBufferTime,drawingTime:this._drawingTime-this._lastDrawingTime,proxyTime:this._proxyTime-this._lastProxyTime,droppedAudio:this._droppedAudio,delayedAudio:this._delayedAudio,jitter:this._totalJitter/this._framesProcessed,lateFrames:this._lateFrames}}},{key:"resetPlaybackStats",value:function resetPlaybackStats(){this._framesProcessed=0,this._playTime=0,this._codec&&(this._lastDemuxerCpuTime=this._codec.demuxerCpuTime,this._lastVideoCpuTime=this._codec.videoCpuTime,this._lastAudioCpuTime=this._codec.audioCpuTime,this._codec.videoBytes=0,this._codec.audioBytes=0),this._lastBufferTime=this._bufferTime,this._lastDrawingTime=this._drawingTime,this._lastProxyTime=this._proxyTime,this._totalJitter=0,this._totalFrameTime=0,this._totalFrameCount=0}},{key:"getVideoFrameSink",value:function getVideoFrameSink(){return this._frameSink}},{key:"getCanvas",value:function getCanvas(){return this._canvas}},{key:"getVideo",value:function getVideo(){return this._video}},{key:"pause",value:function pause(){this._paused||(this._nextProcessingTimer&&(clearTimeout(this._nextProcessingTimer),this._nextProcessingTimer=null),this._stopPlayback(),this._prebufferingAudio=!1,this._paused=!0,this._fireEvent("pause"))}},{key:"stop",value:function stop(){this._stopVideo(),this._paused=!0}},{key:"fastSeek",value:function fastSeek(t){this._seek(+t,Y)}}],[{key:"initSharedAudioContext",value:function initSharedAudioContext(){b.default.initSharedAudioContext()}}]),OGVPlayer}(OGVJSElement);if((0,P.default)(Q,S),Q.instanceCount=0,Q.styleManager=new function StyleManager(){var t=document.createElement("style");t.type="text/css",t.textContent="ogvjs { display: inline-block; position: relative; -webkit-user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); ",document.head.appendChild(t);var i=t.sheet;this.appendRule=function(t,u){var d=[];for(var c in u)u.hasOwnProperty(c)&&d.push(c+":"+u[c]);var h=t+"{"+d.join(";")+"}";i.insertRule(h,i.cssRules.length-1)}},Q.supportsObjectFit="string"==typeof document.createElement("canvas").style.objectFit,Q.supportsObjectFit&&navigator.userAgent.match(/iPhone|iPad|iPod Touch/)&&(Q.supportsObjectFit=!1),Q.supportsObjectFit&&navigator.userAgent.match(/Edge/)&&(Q.supportsObjectFit=!1),Q.supportsObjectFit)Q.updatePositionOnResize=function(){};else{Q.updatePositionOnResize=function(){function fixup(t,i,u){var d=t.offsetParent||t.parentNode,c=i/u;if(c>d.offsetWidth/d.offsetHeight){var h=d.offsetWidth/c,l=(d.offsetHeight-h)/2;t.style.width="100%",t.style.height=h+"px",t.style.marginLeft=0,t.style.marginRight=0,t.style.marginTop=l+"px",t.style.marginBottom=l+"px"}else{var _=d.offsetHeight*c,p=(d.offsetWidth-_)/2;t.style.width=_+"px",t.style.height="100%",t.style.marginLeft=p+"px",t.style.marginRight=p+"px",t.style.marginTop=0,t.style.marginBottom=0}}function queryOver(t,i){var u=document.querySelectorAll(t);Array.prototype.slice.call(u).forEach(i)}queryOver("ogvjs > canvas",(function(t){fixup(t,t.width,t.height)})),queryOver("ogvjs > img",(function(t){fixup(t,t.naturalWidth,t.naturalHeight)}))};var K=function fullResizeVideo(){O(Q.updatePositionOnResize)};window.addEventListener("resize",Q.updatePositionOnResize),window.addEventListener("orientationchange",Q.updatePositionOnResize),document.addEventListener("fullscreenchange",K),document.addEventListener("mozfullscreenchange",K),document.addEventListener("webkitfullscreenchange",K),document.addEventListener("MSFullscreenChange",K)}var $=Q;i.default=$},580:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913));var l=function OGVProxyClass(t){return function(){function _class(i,u,d){var h=this;for(var l in(0,c.default)(this,_class),d=d||{},this.worker=i,this.transferables=function(){var t=new ArrayBuffer(1024),u=new Uint8Array(t);try{return i.postMessage({action:"transferTest",bytes:u},[t]),!t.byteLength}catch(t){return!1}}(),t)t.hasOwnProperty(l)&&(this[l]=t[l]);this.processingQueue=0,Object.defineProperty(this,"processing",{get:function get(){return this.processingQueue>0}}),this.messageCount=0,this.pendingCallbacks={},this.worker.addEventListener("message",(function(t){h.handleMessage(t)})),this.proxy("construct",[u,d],(function(){}))}return(0,h.default)(_class,[{key:"proxy",value:function proxy(t,i,u){var d=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[];if(!this.worker)throw'Tried to call "'+t+'" method on closed proxy object';var c="callback-"+ ++this.messageCount+"-"+t;u&&(this.pendingCallbacks[c]=u);var h={action:t,callbackId:c,args:i||[]};this.processingQueue++,this.transferables?this.worker.postMessage(h,d):this.worker.postMessage(h)}},{key:"terminate",value:function terminate(){this.worker&&(this.worker.terminate(),this.worker=null,this.processingQueue=0,this.pendingCallbacks={})}},{key:"handleMessage",value:function handleMessage(t){if(this.processingQueue--,"callback"===t.data.action){var i=t.data,u=i.callbackId,d=i.args,c=this.pendingCallbacks[u];if(i.props)for(var h in i.props)i.props.hasOwnProperty(h)&&(this[h]=i.props[h]);c&&(delete this.pendingCallbacks[u],c.apply(this,d))}}}]),_class}()};i.default=l},168:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=function(){function OGVTimeRanges(t){(0,c.default)(this,OGVTimeRanges),this._ranges=t,this.length=t.length}return(0,h.default)(OGVTimeRanges,[{key:"start",value:function start(t){if(t<0||t>this.length||t!==(0|t))throw new RangeError("Invalid index");return this._ranges[t][0]}},{key:"end",value:function end(t){if(t<0||t>this.length||t!==(0|t))throw new RangeError("Invalid index");return this._ranges[t][1]}}]),OGVTimeRanges}();i.default=l},625:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(575)),h=d(u(913)),l=d(u(964));function _createForOfIteratorHelper(t,i){var u="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!u){if(Array.isArray(t)||(u=function _unsupportedIterableToArray(t,i){if(!t)return;if("string"==typeof t)return _arrayLikeToArray(t,i);var u=Object.prototype.toString.call(t).slice(8,-1);"Object"===u&&t.constructor&&(u=t.constructor.name);if("Map"===u||"Set"===u)return Array.from(t);if("Arguments"===u||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(u))return _arrayLikeToArray(t,i)}(t))||i&&t&&"number"==typeof t.length){u&&(t=u);var d=0,c=function F(){};return{s:c,n:function n(){return d>=t.length?{done:!0}:{done:!1,value:t[d++]}},e:function e(t){throw t},f:c}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var h,l=!0,_=!1;return{s:function s(){u=u.call(t)},n:function n(){var t=u.next();return l=t.done,t},e:function e(t){_=!0,h=t},f:function f(){try{l||null==u.return||u.return()}finally{if(_)throw h}}}}function _arrayLikeToArray(t,i){(null==i||i>t.length)&&(i=t.length);for(var u=0,d=new Array(i);u0?h.push(_.subarray(0,_.length-Math.min(p,_.length))):h.push(_.subarray(Math.min(Math.abs(p),_.length),_.length))}}catch(t){l.e(t)}finally{l.f()}i.audioDecoder.audioBuffer=h}return u(t)}))}))}},{key:"discardFrame",value:function discardFrame(t){var i=this;this.demuxer.dequeueVideoPacket((function(u){i.videoBytes+=u.byteLength,t()}))}},{key:"discardAudio",value:function discardAudio(t){var i=this;this.demuxer.dequeueAudioPacket((function(u,d){i.audioBytes+=u.byteLength,t()}))}},{key:"flush",value:function flush(t){this.flushIter++,this.demuxer.flush(t)}},{key:"sync",value:function sync(){this.videoDecoder&&this.videoDecoder.sync()}},{key:"recycleFrame",value:function recycleFrame(t){this.videoDecoder&&this.videoDecoder.recycleFrame(t)}},{key:"getKeypointOffset",value:function getKeypointOffset(t,i){this.demuxer.getKeypointOffset(t,i)}},{key:"seekToKeypoint",value:function seekToKeypoint(t,i){this.demuxer.seekToKeypoint(t,this.flushSafe(i))}},{key:"loadAudioCodec",value:function loadAudioCodec(t){var i=this;if(this.demuxer.audioCodec){var u={vorbis:"OGVDecoderAudioVorbisW",opus:"OGVDecoderAudioOpusW"}[this.demuxer.audioCodec];this.processing=!0,l.default.loadClass(u,(function(u){var d={};i.demuxer.audioFormat&&(d.audioFormat=i.demuxer.audioFormat),u(d).then((function(u){i.audioDecoder=u,u.init((function(){i.loadedAudioMetadata=u.loadedMetadata,i.processing=!1,t()}))}))}),{worker:this.options.worker})}else t()}},{key:"loadVideoCodec",value:function loadVideoCodec(t){var i=this;if(this.demuxer.videoCodec){var u=!!this.options.simd,d=!!this.options.threading,c={theora:"OGVDecoderVideoTheoraW",vp8:d?"OGVDecoderVideoVP8MTW":"OGVDecoderVideoVP8W",vp9:d?u?"OGVDecoderVideoVP9SIMDMTW":"OGVDecoderVideoVP9MTW":u?"OGVDecoderVideoVP9SIMDW":"OGVDecoderVideoVP9W",av1:d?u?"OGVDecoderVideoAV1SIMDMTW":"OGVDecoderVideoAV1MTW":u?"OGVDecoderVideoAV1SIMDW":"OGVDecoderVideoAV1W"}[this.demuxer.videoCodec];this.processing=!0,l.default.loadClass(c,(function(u){var c={};i.demuxer.videoFormat&&(c.videoFormat=i.demuxer.videoFormat),d&&delete window.ENVIRONMENT_IS_PTHREAD,u(c).then((function(u){i.videoDecoder=u,u.init((function(){i.loadedVideoMetadata=u.loadedMetadata,i.processing=!1,t()}))}))}),{worker:this.options.worker&&!this.options.threading})}else t()}}]),OGVWrapperCodec}();i.default=_},539:(t,i,u)=>{"use strict";var d=u(318);Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var c=d(u(8)),h=d(u(575)),l=d(u(913));var _=new(function(){function WebAssemblyChecker(){(0,h.default)(this,WebAssemblyChecker),this.tested=!1,this.testResult=void 0}return(0,l.default)(WebAssemblyChecker,[{key:"wasmSupported",value:function wasmSupported(){if(!this.tested){try{"object"===("undefined"==typeof WebAssembly?"undefined":(0,c.default)(WebAssembly))?this.testResult=function testSafariWebAssemblyBug(){var t=new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,127,1,127,3,2,1,0,5,3,1,0,1,7,8,1,4,116,101,115,116,0,0,10,16,1,14,0,32,0,65,1,54,2,0,32,0,40,2,0,11]),i=new WebAssembly.Module(t);return 0!==new WebAssembly.Instance(i,{}).exports.test(4)}():this.testResult=!1}catch(t){console.log("Exception while testing WebAssembly",t),this.testResult=!1}this.tested=!0}return this.testResult}}]),WebAssemblyChecker}());i.default=_},309:(t,i)=>{"use strict";Object.defineProperty(i,"__esModule",{value:!0}),i.default=void 0;var u=function extend(t,i){for(var u in i)i.hasOwnProperty(u)&&(t[u]=i[u])};i.default=u},431:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u=200&&t.xhr.status<300?(t.length=getXHRLength(t.xhr),t.headers=function getXHRHeaders(t){var i={};return t.getAllResponseHeaders().split(/\r?\n/).forEach((function(t){var u=t.split(/:\s*/,2);u.length>1&&(i[u[0].toLowerCase()]=u[1])})),i}(t.xhr),t.onXHRStart()):(d(),u(new Error("HTTP error "+t.xhr.status)))}},h=function checkError(){d(),u(new Error("network error"))},l=function checkBackendOpen(){d(),i()};d=function oncomplete(){t.xhr.removeEventListener("readystatechange",c),t.xhr.removeEventListener("error",h),t.off("open",l),t._onAbort=null},t.initXHR(),t.xhr.addEventListener("readystatechange",c),t.xhr.addEventListener("error",h),t.on("open",l),t.xhr.send()}))}},{key:"bufferToOffset",value:function bufferToOffset(t){return Promise.reject(new Error("abstract"))}},{key:"abort",value:function abort(){if(this.xhr.abort(),this._onAbort){var t=this._onAbort;this._onAbort=null;var i=new Error("Aborted");i.name="AbortError",t(i)}}},{key:"initXHR",value:function initXHR(){var t=this.url;this.cachever&&(t+="?buggy_cachever="+this.cachever),this.xhr.open("GET",t);var i=null;(this.offset||this.length)&&(i="bytes="+this.offset+"-"),this.length&&(i+=this.offset+this.length-1),null!==i&&this.xhr.setRequestHeader("Range",i)}},{key:"onXHRStart",value:function onXHRStart(){throw new Error("abstract")}}]),Backend}(u(566));t.exports=c},810:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u0&&(this.bytesRead+=t.length,this.emit("buffer",t))}},{key:"onXHRLoad",value:function onXHRLoad(){this.onXHRProgress(),c(BinaryStringBackend.prototype.__proto__||Object.getPrototypeOf(BinaryStringBackend.prototype),"onXHRLoad",this).call(this)}}]),BinaryStringBackend}(u(828));h.supported=function(){try{return!!(new XMLHttpRequest).overrideMimeType}catch(t){return!1}},t.exports=h},828:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u=t)u();else{var c=null;i._onAbort=function(t){c(),d(t)};var h=function checkBuffer(){i.offset>=t&&!i.eof&&(c(),u())},l=function checkDone(){c(),u()},_=function checkError(){c(),d(new Error("error streaming"))};c=function oncomplete(){i.buffering=!1,i.off("buffer",h),i.off("done",l),i.off("error",_),i._onAbort=null},i.buffering=!0,i.on("buffer",h),i.on("done",l),i.on("error",_)}}))}},{key:"initXHR",value:function initXHR(){c(DownloadBackend.prototype.__proto__||Object.getPrototypeOf(DownloadBackend.prototype),"initXHR",this).call(this)}},{key:"onXHRStart",value:function onXHRStart(){var t=this;this.xhr.addEventListener("progress",(function(){return t.onXHRProgress()})),this.xhr.addEventListener("error",(function(){return t.onXHRError()})),this.xhr.addEventListener("load",(function(){return t.onXHRLoad()})),this.emit("open")}},{key:"onXHRProgress",value:function onXHRProgress(){throw new Error("abstract")}},{key:"onXHRError",value:function onXHRError(){this.emit("error")}},{key:"onXHRLoad",value:function onXHRLoad(){this.eof=!0,this.emit("done")}}]),DownloadBackend}(u(306));t.exports=h},761:(t,i,u)=>{"use strict";var d=u(855),c=u(810),h=u(431);var l=null;t.exports=function instantiate(t){if(!1===t.progressive)return new h(t);if(l||(l=function autoselect(){return d.supported()?d:c.supported()?c:null}()),!l)throw new Error("No supported backend class");return new l(t)}},855:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u{"use strict";var i=function(){function defineProperties(t,i){for(var u=0;u0&&void 0!==arguments[0]?arguments[0]:{},i=t.buffer,u=void 0===i?void 0:i,d=t.string,c=void 0===d?void 0:d,h=t.start,l=void 0===h?0:h,_=t.end,p=void 0===_?l+(u?u.byteLength:c?c.length:0):_,m=t.prev,g=void 0===m?null:m,v=t.next,y=void 0===v?null:v,b=t.eof,T=void 0!==b&&b,k=t.empty,P=void 0===k?!(u||c):k,w=t.timestamp,E=void 0===w?Date.now():w;_classCallCheck(this,CacheItem),this.start=l,this.end=p,this.prev=g,this.next=y,this.eof=T,this.empty=P,this.timestamp=E,this.buffer=u,this.string=c,Object.defineProperty(this,"length",{get:function get(){return this.end-this.start}})}return i(CacheItem,[{key:"contains",value:function contains(t){return t>=this.start&&(t{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u0&&void 0!==arguments[0]?arguments[0]:{},i=t.cacheSize,u=void 0===i?0:i;_classCallCheck(this,CachePool);var d=new c({eof:!0});this.head=d,this.tail=d,this.readOffset=0,this.readCursor=d,this.writeOffset=0,this.writeCursor=d,this.cacheSize=u}return d(CachePool,[{key:"bytesReadable",value:function bytesReadable(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,i=this.readOffset,u=this.readCursor,d=u.last((function(u){return!u.empty&&u.start<=i+t}));return d?Math.min(t,d.end-i):0}},{key:"bytesWritable",value:function bytesWritable(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0,i=this.writeOffset,u=this.writeCursor;if(u.eof)return t;var d=u.last((function(u){return u.empty&&u.start<=i+t}));return d?Math.min(t,d.end-i):0}},{key:"seekRead",value:function seekRead(t){var i=this.head.first((function(i){return i.contains(t)}));if(!i)throw new Error("read seek out of range");this.readOffset=t,this.readCursor=i}},{key:"seekWrite",value:function seekWrite(t){var i=this.head.first((function(i){return i.contains(t)}));if(!i)throw new Error("write seek out of range");this.writeOffset=t,this.writeCursor=i}},{key:"readBytes",value:function readBytes(t){for(var i=t.byteLength,u=this.bytesReadable(i),d=this.readOffset,c=d+u,h=d,l=this.readCursor;l&&!l.empty&&!(l.start>=c);l=l.next){var _=Math.min(c,l.end),p=t.subarray(h-d,_-d);l.readBytes(p,h,_),h=_}return this.readOffset=h,this.readCursor=this.readCursor.first((function(t){return t.contains(h)})),u}},{key:"write",value:function write(t){var i=this.bufferItem(t),u=this.writeCursor;if(!u.empty)throw new Error("write cursor not empty");if(!u.contains(i.end)&&u.end!==i.end)throw new Error("write cursor too small");u.startthis.readOffset+this.chunkSize)&&i.push(u));if(t>this.cacheSize){i.sort((function(t,i){return t.timestamp-i.timestamp}));for(var d=0;d{"use strict";t.exports=u(91)},566:t=>{"use strict";var i=function(){function defineProperties(t,i){for(var u=0;u=0&&u.splice(d,1)}},{key:"emit",value:function emit(t,i){(this._e[t]||[]).slice().forEach((function(t){return t(i)}))}}]),TinyEvents}();t.exports=u},936:(t,i,u)=>{"use strict";var d=function(){function defineProperties(t,i){for(var u=0;u=0&&_>=t.length)return void i(null);var p=t._clampToLength(d.writeOffset+d.bytesWritable(c))-d.writeOffset;if(0===p)i(null);else{var m=t._backend=new h({url:t.url,offset:t._cache.writeOffset,length:p,cachever:t._cachever,progressive:t.progressive}),g=null,v=function checkOpen(){m!==t._backend?(g(),u(new Error("invalid state"))):(m.on("buffer",(function(i){m===t._backend&&t._cache.write(i)})),m.on("done",(function(){m===t._backend&&(-1===t.length&&(t.length=t._backend.offset+t._backend.bytesRead),t._backend=null)})),i(m))},y=function checkError(i){m!==t._backend?u(new Error("invalid state")):(t._backend=null,u(i))};g=function oncomplete(){m.off("open",v),m.off("error",y)},m.on("open",v),m.on("error",y),m.on("cachever",(function(){t._cachever++})),m.load()}}}))}},{key:"_readAhead",value:function _readAhead(){var t=this;return new Promise((function(i,u){t._backend||t.eof?i():t._openBackend().then((function(){i()})).catch((function(t){u(t)}))}))}},{key:"seek",value:function seek(t){var i=this;return new Promise((function(u,d){if(!i.loaded||i.buffering||i.seeking)throw new Error("invalid state");if(t!==(0|t)||t<0)throw new Error("invalid input");if(i.length>=0&&t>i.length)throw new Error("seek past end of file");if(!i.seekable)throw new Error("seek on non-seekable stream");i._backend&&i.abort(),i._cache.seekRead(t),i._cache.seekWrite(t),i._readAhead().then(u).catch(d)}))}},{key:"read",value:function read(t){var i=this;return this.buffer(t).then((function(t){return i.readSync(t)}))}},{key:"readSync",value:function readSync(t){var i=this.bytesAvailable(t),u=new Uint8Array(i);if(this.readBytes(u)!==i)throw new Error("failed to read expected data");return u.buffer}},{key:"readBytes",value:function readBytes(t){if(!this.loaded||this.buffering||this.seeking)throw new Error("invalid state");if(!(t instanceof Uint8Array))throw new Error("invalid input");var i=this._cache.readBytes(t);return this._readAhead(),i}},{key:"buffer",value:function buffer(t){var i=this;return new Promise((function(u,d){if(!i.loaded||i.buffering||i.seeking)throw new Error("invalid state");if(t!==(0|t)||t<0)throw new Error("invalid input");var c=i._clampToLength(i.offset+t),h=c-i.offset,l=i.bytesAvailable(h);l>=h?u(l):(i.buffering=!0,i._openBackend().then((function(u){return u?u.bufferToOffset(c).then((function(){return i.buffering=!1,i.buffer(t)})):Promise.resolve(l)})).then((function(t){i.buffering=!1,u(t)})).catch((function(t){"AbortError"!==t.name&&(i.buffering=!1),d(t)})))}))}},{key:"bytesAvailable",value:function bytesAvailable(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;return this._cache.bytesReadable(t)}},{key:"abort",value:function abort(){this.loading&&(this.loading=!1),this.buffering&&(this.buffering=!1),this.seeking&&(this.seeking=!1),this._backend&&(this._backend.abort(),this._backend=null)}},{key:"getBufferedRanges",value:function getBufferedRanges(){return this._cache.ranges()}},{key:"_clampToLength",value:function _clampToLength(t){return this.length<0?t:Math.min(this.length,t)}}]),StreamFile}();t.exports=l},826:t=>{t.exports={vertex:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aLumaPosition;\nattribute vec2 aChromaPosition;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vLumaPosition = aLumaPosition;\n vChromaPosition = aChromaPosition;\n}\n",fragment:"// inspired by https://github.com/mbebenita/Broadway/blob/master/Player/canvas.js\n\nprecision lowp float;\n\nuniform sampler2D uTextureY;\nuniform sampler2D uTextureCb;\nuniform sampler2D uTextureCr;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n // Y, Cb, and Cr planes are uploaded as LUMINANCE textures.\n float fY = texture2D(uTextureY, vLumaPosition).x;\n float fCb = texture2D(uTextureCb, vChromaPosition).x;\n float fCr = texture2D(uTextureCr, vChromaPosition).x;\n\n // Premultipy the Y...\n float fYmul = fY * 1.1643828125;\n\n // And convert that to RGB!\n gl_FragColor = vec4(\n fYmul + 1.59602734375 * fCr - 0.87078515625,\n fYmul - 0.39176171875 * fCb - 0.81296875 * fCr + 0.52959375,\n fYmul + 2.017234375 * fCb - 1.081390625,\n 1\n );\n}\n",vertexStripe:"precision lowp float;\n\nattribute vec2 aPosition;\nattribute vec2 aTexturePosition;\nvarying vec2 vTexturePosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vTexturePosition = aTexturePosition;\n}\n",fragmentStripe:"// extra 'stripe' texture fiddling to work around IE 11's poor performance on gl.LUMINANCE and gl.ALPHA textures\n\nprecision lowp float;\n\nuniform sampler2D uStripe;\nuniform sampler2D uTexture;\nvarying vec2 vTexturePosition;\nvoid main() {\n // Y, Cb, and Cr planes are mapped into a pseudo-RGBA texture\n // so we can upload them without expanding the bytes on IE 11\n // which doesn't allow LUMINANCE or ALPHA textures\n // The stripe textures mark which channel to keep for each pixel.\n // Each texture extraction will contain the relevant value in one\n // channel only.\n\n float fLuminance = dot(\n texture2D(uStripe, vTexturePosition),\n texture2D(uTexture, vTexturePosition)\n );\n\n gl_FragColor = vec4(fLuminance, fLuminance, fLuminance, 1);\n}\n"}},487:t=>{!function(){"use strict";function FrameSink(t,i){throw new Error("abstract")}FrameSink.prototype.drawFrame=function(t){throw new Error("abstract")},FrameSink.prototype.clear=function(){throw new Error("abstract")},t.exports=FrameSink}()},926:(t,i,u)=>{!function(){"use strict";var i=u(487),d=u(627);function SoftwareFrameSink(t){var i=this,u=t.getContext("2d"),c=null,h=null,l=null;return i.drawFrame=function drawFrame(i){var _=i.format;t.width===_.displayWidth&&t.height===_.displayHeight||(t.width=_.displayWidth,t.height=_.displayHeight),null!==c&&c.width==_.width&&c.height==_.height||function initImageData(t,i){for(var d=(c=u.createImageData(t,i)).data,h=t*i*4,l=0;l{!function(){"use strict";var i=u(487),d=u(826);function WebGLFrameSink(t){var i,u,c=this,h=WebGLFrameSink.contextForCanvas(t);if(null===h)throw new Error("WebGL unavailable");function compileShader(t,i){var u=h.createShader(t);if(h.shaderSource(u,i),h.compileShader(u),!h.getShaderParameter(u,h.COMPILE_STATUS)){var d=h.getShaderInfoLog(u);throw h.deleteShader(u),new Error("GL shader compilation for "+t+" failed: "+d)}return u}var l,_,p,m,g,v,y,b,T,k,P=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]),w={},E={},x={};function createOrReuseTexture(t){return w[t]||(w[t]=h.createTexture()),w[t]}function uploadTexture(t,i,u,d){var c=createOrReuseTexture(t);if(h.activeTexture(h.TEXTURE0),WebGLFrameSink.stripe){var l=!w[t+"_temp"],_=createOrReuseTexture(t+"_temp");h.bindTexture(h.TEXTURE_2D,_),l?(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,i/4,u,0,h.RGBA,h.UNSIGNED_BYTE,d)):h.texSubImage2D(h.TEXTURE_2D,0,0,0,i/4,u,h.RGBA,h.UNSIGNED_BYTE,d);var p=w[t+"_stripe"],m=!p;m&&(p=createOrReuseTexture(t+"_stripe")),h.bindTexture(h.TEXTURE_2D,p),m&&(h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_S,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_WRAP_T,h.CLAMP_TO_EDGE),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(h.TEXTURE_2D,h.TEXTURE_MAG_FILTER,h.NEAREST),h.texImage2D(h.TEXTURE_2D,0,h.RGBA,i,1,0,h.RGBA,h.UNSIGNED_BYTE,function buildStripe(t){if(x[t])return x[t];for(var i=t,u=new Uint32Array(i),d=0;d{!function(){"use strict";var i=u(877);t.exports={convertYCbCr:function convertYCbCr(t,u){var d=0|t.format.width,c=0|t.format.height,h=0|i(t.format.width/t.format.chromaWidth),l=0|i(t.format.height/t.format.chromaHeight),_=t.y.bytes,p=t.u.bytes,m=t.v.bytes,g=0|t.y.stride,v=0|t.u.stride,y=0|t.v.stride,b=d<<2,T=0,k=0,P=0,w=0,E=0,x=0,A=0,R=0,O=0,S=0,C=0,B=0,D=0,M=0,V=0,I=0,L=0,j=0;if(1==h&&1==l)for(A=0,R=b,j=0,I=0;I>8,u[A+1]=C-D>>8,u[A+2]=C+M>>8,A+=4,C=298*_[k++]|0,u[A]=C+B>>8,u[A+1]=C-D>>8,u[A+2]=C+M>>8,A+=4,C=298*_[P++]|0,u[R]=C+B>>8,u[R+1]=C-D>>8,u[R+2]=C+M>>8,R+=4,C=298*_[P++]|0,u[R]=C+B>>8,u[R+1]=C-D>>8,u[R+2]=C+M>>8,R+=4;A+=b,R+=b,j++}else for(x=0,I=0;I>l)*v|0,E=j*y|0,V=0;V>h)],B=(409*(S=0|m[E+L])|0)-57088|0,D=(100*O|0)+(208*S|0)-34816|0,M=(516*O|0)-70912|0,C=298*_[T++]|0,u[x]=C+B>>8,u[x+1]=C-D>>8,u[x+2]=C+M>>8,x+=4}}}()},877:t=>{!function(){"use strict";t.exports=function depower(t){for(var i=0,u=t>>1;0!=u;)u>>=1,i++;if(t!==1<{!function(){"use strict";var i=u(487),d=u(926),c=u(895),h={FrameSink:i,SoftwareFrameSink:d,WebGLFrameSink:c,attach:function(t,i){return("webGL"in(i=i||{})?i.webGL:c.isAvailable())?new c(t,i):new d(t,i)}};t.exports=h}()}},i={};function __webpack_require__(u){var d=i[u];if(void 0!==d)return d.exports;var c=i[u]={exports:{}};return t[u](c,c.exports,__webpack_require__),c.exports}var u={};return(()=>{"use strict";var t=u,i=__webpack_require__(318);Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"OGVCompat",{enumerable:!0,get:function get(){return c.default}}),Object.defineProperty(t,"OGVLoader",{enumerable:!0,get:function get(){return h.default}}),Object.defineProperty(t,"OGVMediaError",{enumerable:!0,get:function get(){return l.default}}),Object.defineProperty(t,"OGVMediaType",{enumerable:!0,get:function get(){return _.default}}),Object.defineProperty(t,"OGVPlayer",{enumerable:!0,get:function get(){return p.default}}),Object.defineProperty(t,"OGVTimeRanges",{enumerable:!0,get:function get(){return m.default}}),t.OGVVersion=void 0;var d=i(__webpack_require__(8)),c=i(__webpack_require__(523)),h=i(__webpack_require__(964)),l=i(__webpack_require__(759)),_=i(__webpack_require__(278)),p=i(__webpack_require__(869)),m=i(__webpack_require__(168)),g="1.8.4-20210702161914-bd3a07f";t.OGVVersion=g,"object"===("undefined"==typeof window?"undefined":(0,d.default)(window))&&(window.OGVCompat=c.default,window.OGVLoader=h.default,window.OGVMediaError=l.default,window.OGVMediaType=_.default,window.OGVTimeRanges=m.default,window.OGVPlayer=p.default,window.OGVVersion=g)})(),u})()})); \ No newline at end of file diff --git a/only-h264.m3u8 b/only-h264.m3u8 new file mode 100644 index 0000000..6d2f3d7 --- /dev/null +++ b/only-h264.m3u8 @@ -0,0 +1,4 @@ +#EXTM3U + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="avc1.42e00a" +h264-in-mp4.m3u8 diff --git a/only-jpeg-mov.m3u8 b/only-jpeg-mov.m3u8 new file mode 100644 index 0000000..9313a0a --- /dev/null +++ b/only-jpeg-mov.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="jpeg,mp4a.40",AUDIO="a1" +jpeg-in-mov.m3u8 diff --git a/only-jpeg.m3u8 b/only-jpeg.m3u8 new file mode 100644 index 0000000..924101f --- /dev/null +++ b/only-jpeg.m3u8 @@ -0,0 +1,6 @@ +#EXTM3U + +#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="a1",NAME="English",LANGUAGE="en-US",AUTOSELECT=YES,DEFAULT=YES,CHANNELS="2",URI="audio-aac.m3u8" + +#EXT-X-STREAM-INF:BANDWIDTH=4785000,RESOLUTION=1920x1080,FRAME-RATE=29.970,CODECS="mp4v.6c,mp4a.40",AUDIO="a1" +jpeg-in-mp4.m3u8 diff --git a/only.html b/only.html new file mode 100644 index 0000000..d9d0f79 --- /dev/null +++ b/only.html @@ -0,0 +1,54 @@ + + + + + HLS WebM test with codec + + +

HLS WebM test with codec

+

The video will try to load an HLS containing a VP9-in-MP4 variant, with AAC audio, with no fallback:

+ +

+ + +

Similar with VP8 + AAC

+ + +

H.263 in MP4

+ + +

H.263 in mov

+ + +

H.263 in 3gp

+ + +

Similar with JPEG

+ + + + \ No newline at end of file diff --git a/opus.html b/opus.html new file mode 100644 index 0000000..3d93d1f --- /dev/null +++ b/opus.html @@ -0,0 +1,29 @@ + + + + + HLS WebM test with codec + + +

HLS WebM test with codec

+

The video will try to load an HLS containing VP9-in-MP4 and fallback variants, with Opus audio:

+ +

+ + + + \ No newline at end of file diff --git a/sync-up.sh b/sync-up.sh new file mode 100644 index 0000000..6d9dd04 --- /dev/null +++ b/sync-up.sh @@ -0,0 +1 @@ +rsync -avp ./ brionv.com:misc/hls-test/ diff --git a/test.html b/test.html new file mode 100644 index 0000000..318461f --- /dev/null +++ b/test.html @@ -0,0 +1,101 @@ + + + + + HLS WebM test + + +

HLS WebM test

+ +

Checking HLS support...

+

Checking MSE support...

+

Checking flat WebM VP8 / Vorbis support...

+

Checking flat WebM generic support...

+

Checking WebAssembly support...

+ +

This video will try to load an HLS containing VP9-in-MP4, VP8-in-MP4, and H.264:

+ + +

HLS with AAC audio and VP9, VP8, and H.264 video:

+ + +

HLS with AAC audio and VP9/VP8 video only:

+ + +

HLS with AAC audio and VP8 video only:

+ + +

Same, with a flat WebM fallback source:

+ + +

Only a flat WebM source (no codec specified):

+ + +

Only a flat WebM source, VP8 / Vorbis:

+ + +

All non-VPX MP4 formats

+ + + + + \ No newline at end of file diff --git a/thoughts.md b/thoughts.md new file mode 100644 index 0000000..ad58d87 --- /dev/null +++ b/thoughts.md @@ -0,0 +1,49 @@ +"All-open" mode uses only open formats, forces Safari on iPhone and older desktops to use ogv.js fallback: +* DASH manifest + * WebM VP9 video segments + * WebM Opus audio segments + * WebM Vorbis audio segments (for Safari) +* WebM VP8/Vorbis flat file fallback + + +"Open-forward" mode avoids ISO not-quite-open formats except in compatibility fallbacks. Multi-res capability for all modern desktops, but not iPhone or iPad which will load a single flat file natively. + +* DASH manifest + * WebM VP9 video segments + * WebM Opus audio segments + * WebM Vorbis audio segments (for Safari) +* WebM VP8/Vorbis flat file fallback (old Firefox/Chrome or JS off) +* MP4 H.264/MP3 flat file fallback (for iOS and single-URL linking) + + +"HLS-forward" mode has full multi-res capability on newer iPhones and iPads, AND all modern desktops, but requires making multiple H.264 and MP3 files and using MP4 container. + +* HLS manifest + * MP4 VP9 video segments + * MP4 H.264 video segments (for Safari) + * MP4 Opus audio segments + * MP4 MP3 audio segments (for Safari) +* WebM VP8/Vorbis flat file fallback +* MP4 H.264/MP3 flat file fallback (for single-URL linking) + +* Chrome/Firefox: use MSE to handle HLS +* Desktop Safari: use MSE to handle HLS +* iPhone/iPad: use native HLS +* old Firefox/Chrome: use WebM VP8 fallback +* old IE/Edge/Safari: use MP4 H.264 fallback + + +"Split-ticket" mode works fully on VP9-supporting iPhones, iPads, and Macs but falls back to ogv.js for older ones, while modern desktops all get the multi-res magic. Requires using MP4 container and MP3 audio, which are not patented but the standards docs are paywalled. Note that desktop Safari with JS off won't see working video. + +* HLS manifest + * MP4 VP9 video segments + * MP4 Opus audio segments + * MP4 MP3 audio segments (for Safari) +* WebM VP8/Vorbis flat file fallback + +* Chrome/Firefox: use MSE to handle HLS +* Desktop Safari w/ hw VP9: use MSE to handle HLS +* Desktop Safari w/o hw VP9: HLS errors out; fall back to ogv.js +* iPhone/iPad w/ hw VP9: use native HLS +* iPhone/iPad w/o hw VP9: HLS errors out; fall back to ogv.js +* old Firefox/Chrome: use WebM VP8 fallback diff --git a/timestamp-id3.php b/timestamp-id3.php new file mode 100644 index 0000000..814b136 --- /dev/null +++ b/timestamp-id3.php @@ -0,0 +1,141 @@ +127 bytes may need to adjust + $frame = pack( + 'a4Nna*', + $frame_type, + $frame_length, + $frame_flags, + $frame_data + ); + + $tag_type = 'ID3'; + $tag_version = 0x0400; + $tag_flags = 0; + $tag_length = strlen( $frame ); // if >127 bytes may need to adjust + $tag = pack( + 'a3nCNa*', + $tag_type, + $tag_version, + $tag_flags, + $tag_length, + $frame + ); + + $hex = hexdump($tag); + print "$filename $pts $hex\n"; + + $data = file_get_contents( $filename ); + if ( substr( $data, 0, 3 ) == 'ID3' ) { + echo "SKIPPING already has ID3\n"; + } else { + echo "ADDING ID3\n"; + file_put_contents( $filename, "$tag$data" ); + } +} + +$playlist = "caminandes-llamigos.webm.audio.mp3.m3u8"; +$lines = file( $playlist, FILE_IGNORE_NEW_LINES + FILE_SKIP_EMPTY_LINES ); + +$pts = 0.0; +$duration = 0.0; +foreach ( $lines as $line ) { + + /* + #EXTM3U + #EXT-X-VERSION:3 + #EXT-X-MEDIA-SEQUENCE:0 + #EXT-X-ALLOW-CACHE:YES + #EXT-X-TARGETDURATION:11 + #EXTINF:10.005397, + caminandes-llamigos.webm.audio.mp3.0000.mp3 + #EXTINF:10.004898, + caminandes-llamigos.webm.audio.mp3.0001.mp3 + ... + */ + $matches = null; + if ( preg_match( '/^#EXTINF:\s*(\d+(?:\.\d+)?),/', $line, $matches ) ) { + $duration = floatval( $matches[1] ); + continue; + } else if (preg_match( '/^#/', $line ) ) { + continue; + } + $filename = $line; + process_mp3( $filename, $pts ); + $pts += $duration; + $duration = 0; +} diff --git a/transcode-segment.php b/transcode-segment.php new file mode 100644 index 0000000..d081f86 --- /dev/null +++ b/transcode-segment.php @@ -0,0 +1,309 @@ + [ + 'container' => 'mp4', + 'options' => [ + '-acodec', 'aac', + '-ar', 44100, + '-ac', 2, + '-b:a', '112k', + ], + ], + 'opus' => [ + 'container' => 'mp4', + 'options' => [ + '-acodec', 'libopus', + '-ar', 48000, + '-ac', 2, + '-b:a', '96k', + ], + ], + 'mp3' => [ + 'container' => 'mp3', + 'options' => [ + '-acodec', 'libmp3lame', + '-ar', 44100, + '-ac', 2, + '-b:a', '128k', + ], + ], + ]; +} + +class Video { + // Normalize input frame rates to the next up of these. + // Lets us ensure that keyframes are places where they belong. + public const RATES = [ + 15, 24, 25, 30, 48, 50, 60 + ]; + + public const FORMATS = [ + 'vp9' => [ + 'container' => 'mp4', + 'options' => [ + 'common' => [ + '-vcodec', 'libvpx-vp9', + '-row-mt', '1', + ], + 'fast' => [ + '-quality', 'realtime', + '-cpu-used', '5', + ], + 'pass1' => [ + '-quality', 'good', + '-cpu-used', '2', + '-pass', '1', + ], + 'pass2' => [ + '-quality', 'good', + '-cpu-used', '1', + '-pass', '2', + ] + ], + 'resolutions' => [ + '240p' => [ + 'width' => 426, + 'height' => 240, + 'bitrate' => '150k', + ], + '360p' => [ + 'width' => 640, + 'height' => 360, + 'bitrate' => '250k', + ], + '480p' => [ + 'width' => 854, + 'height' => 480, + 'bitrate' => '750k', + ], + '720p' => [ + 'width' => 1280, + 'height' => 720, + 'bitrate' => '2500k', + ], + '1080p' => [ + 'width' => 1920, + 'height' => 1080, + 'bitrate' => '5000k', + ], + '1440p' => [ + 'width' => 2560, + 'height' => 1440, + 'bitrate' => '9000k', + ], + '2160p' => [ + 'width' => 3840, + 'height' => 2160, + 'bitrate' => '12500k', + ], + ], + ], + ]; +} + +class Fraction { + public $numerator = 0; + public $denominator = 0; + + public function __construct( $num, $denom ) { + $this->numerator = $num; + $this->denominator = $denom; + } + + public function toFloat() { + return $this->numerator / $this->denominator; + } + + public function toString() { + return "$this->numerator/$this->denominator"; + } + + public static function fromString( $frac ) { + list ( $num, $denom ) = array_map( 'intval', explode( '/', $frac, 2 ) ); + return new Fraction( $num, $denom ); + } +} + +class SourceFile { + public $filename = ''; + public $duration = 0.0; + + public $video = false; + public $width = 0; + public $height = 0; + public $fps = null; + + public $audio = false; + public $sampleRate = 0; + public $channels = 0; + + public function __construct( $filename ) { + $this->filename = $filename; + + $data = ffprobe( $filename ); + + $this->duration = $data->format->duration; + foreach ( $data->streams as $stream ) { + if ( $stream->codec_type == 'video' && !$this->video ) { + $this->video = true; + $this->width = $stream->width; + $this->height = $stream->height; + $this->fps = Fraction::fromString( $stream->r_frame_rate ); + } + if ( $stream->codec_type === 'audio' && !$this->audio ) { + $this->audio = true; + $this->sampleRate = $stream->sample_rate; + $this->channels = $stream->channels; + } + } + } +} + +class Transcoder { + private $source = null; + private $fps = 0; + private $gop = 0; + + public const SEGMENT_DURATION = 10; + + public function __construct( SourceFile $source ) { + $this->source = $source; + + // Normalize input fps to an even standard + $infps = $this->source->fps->toFloat(); + $this->fps = Video::RATES[0]; + foreach ( Video::RATES as $rate ) { + if ( $rate >= $infps ) { + $this->fps = $rate; + break; + } + } + + // Each self-contained group of pictures starts with a keyframe. + $this->gop = $this->fps * self::SEGMENT_DURATION; + } + + private function ffmpeg( $options, $outfile, $container ) { + $segmentOptions = []; + if ( $container == 'mp4' ) { + $segmentOptions[] = '-segment_format_options'; + $segmentOptions[] = 'movflags=+frag_keyframe+empty_moov'; + } + if ( $container == 'mp3' ) { + $segmentOptions[] = '-segment_format_options'; + $segmentOptions[] = 'id3v2_version=0:write_xing=0:write_id3v1=0'; + } + $ffmpegOptions = array_merge( [ + '-hide_banner', + '-i', + $this->source->filename, + '-f', 'segment', + '-segment_time', '10', + '-segment_list', "$outfile.m3u8", + ], + $segmentOptions, + $options, + [ + '-y', "$outfile.%04d.$container" + ] ); + + $output = run( 'ffmpeg', $ffmpegOptions ); + } + + public function video( $codec, $resolution, $mode ) { + if ( !$this->source->video ) { + throw new Error('no video'); + } + + $format = Video::FORMATS[$codec]; + $res = $format['resolutions'][$resolution]; + + $options = array_merge( + [ + '-pix_fmt', 'yuv420p', + '-r', $this->fps, + ], + $format['options']['common'], + $format['options'][$mode], + [ + '-vf', "scale=" . implode( ':', [ $res['width'], $res['height'] ] ), + '-b:v', $res['bitrate'], + '-g', $this->gop, + '-keyint_min', $this->gop, // may not be generic enough + '-an', + ] + ); + + $this->ffmpeg( + $options, + "{$this->source->filename}.{$resolution}.{$codec}.{$mode}", + $format['container'] + ); + } + + public function audio( $codec ) { + if ( !$this->source->audio ) { + throw new Error('no audio'); + } + + $format = Audio::FORMATS[$codec]; + $options = array_merge( + $format['options'], + [ + '-vn', + ] + ); + + $this->ffmpeg( + $options, + "{$this->source->filename}.audio.{$codec}", + $format['container'] + ); + } + +} + + +$infiles = [ + 'caminandes-llamigos.webm', +]; + +foreach ( $infiles as $filename ) { + $source = new SourceFile( $filename ); + $codec = new Transcoder( $source ); + //$codec->audio('opus'); + $codec->audio('mp3'); + /* + $codec->audio('aac'); + foreach ( Video::FORMATS['vp9']['resolutions'] as $res => $format ) { + + if ( $format['width'] <= $source->width && $format['height'] <= $source->height ) { + $codec->video('vp9', $res, 'fast'); + $codec->video('vp9', $res, 'pass1'); + $codec->video('vp9', $res, 'pass2'); + } + } + */ +} diff --git a/transcode.php b/transcode.php new file mode 100644 index 0000000..01713e1 --- /dev/null +++ b/transcode.php @@ -0,0 +1,312 @@ + [ + 'options' => [ + '-acodec', 'aac', + '-ar', 44100, + '-ac', 2, + '-b:a', '112k', + ], + ], + 'opus' => [ + 'options' => [ + '-acodec', 'libopus', + '-ar', 48000, + '-ac', 2, + '-b:a', '96k', + ], + ], + 'mp3' => [ + 'options' => [ + '-acodec', 'libmp3lame', + '-ar', 44100, + '-ac', 2, + '-b:a', '128k', + ], + ], + 'alac' => [ + 'options' => [ + '-acodec', 'alac', + '-ar', 11025, + '-ac', 2, + ], + ], + 'vorbis' => [ + 'options' => [ + '-acodec', 'libvorbis', + '-ar', 44100, + '-ac', 2, + '-b:a', '112k', + ], + ], + ]; +} + +class Video { + // Normalize input frame rates to the next up of these. + // Lets us ensure that keyframes are places where they belong. + public const RATES = [ + 15, 24, 25, 30, 48, 50, 60 + ]; + + public const FORMATS = [ + 'vp9' => [ + 'options' => [ + 'common' => [ + '-vcodec', 'libvpx-vp9', + '-row-mt', '1', + ], + 'fast' => [ + '-quality', 'realtime', + '-cpu-used', '5', + ], + 'pass1' => [ + '-quality', 'good', + '-cpu-used', '2', + '-pass', '1', + ], + 'pass2' => [ + '-quality', 'good', + '-cpu-used', '1', + '-pass', '2', + ] + ], + 'resolutions' => [ + '240p' => [ + 'width' => 426, + 'height' => 240, + 'bitrate' => '150k', + ], + '360p' => [ + 'width' => 640, + 'height' => 360, + 'bitrate' => '250k', + ], + '480p' => [ + 'width' => 854, + 'height' => 480, + 'bitrate' => '750k', + ], + '720p' => [ + 'width' => 1280, + 'height' => 720, + 'bitrate' => '2500k', + ], + '1080p' => [ + 'width' => 1920, + 'height' => 1080, + 'bitrate' => '5000k', + ], + '1440p' => [ + 'width' => 2560, + 'height' => 1440, + 'bitrate' => '9000k', + ], + '2160p' => [ + 'width' => 3840, + 'height' => 2160, + 'bitrate' => '12500k', + ], + ], + ], + ]; +} + +class Fraction { + public $numerator = 0; + public $denominator = 0; + + public function __construct( $num, $denom ) { + $this->numerator = $num; + $this->denominator = $denom; + } + + public function toFloat() { + return $this->numerator / $this->denominator; + } + + public function toString() { + return "$this->numerator/$this->denominator"; + } + + public static function fromString( $frac ) { + list ( $num, $denom ) = array_map( 'intval', explode( '/', $frac, 2 ) ); + return new Fraction( $num, $denom ); + } +} + +class SourceFile { + public $filename = ''; + public $duration = 0.0; + + public $video = false; + public $width = 0; + public $height = 0; + public $fps = null; + + public $audio = false; + public $sampleRate = 0; + public $channels = 0; + + public function __construct( $filename ) { + $this->filename = $filename; + + $data = ffprobe( $filename ); + + $this->duration = $data->format->duration; + foreach ( $data->streams as $stream ) { + if ( $stream->codec_type == 'video' && !$this->video ) { + $this->video = true; + $this->width = $stream->width; + $this->height = $stream->height; + $this->fps = Fraction::fromString( $stream->r_frame_rate ); + } + if ( $stream->codec_type === 'audio' && !$this->audio ) { + $this->audio = true; + $this->sampleRate = $stream->sample_rate; + $this->channels = $stream->channels; + } + } + } +} + +class Transcoder { + private $source = null; + private $fps = 0; + private $gop = 0; + + public const SEGMENT_DURATION = 10; + + public function __construct( SourceFile $source ) { + $this->source = $source; + + // Normalize input fps to an even standard + $infps = $this->source->fps->toFloat(); + $this->fps = Video::RATES[0]; + foreach ( Video::RATES as $rate ) { + if ( $rate >= $infps ) { + $this->fps = $rate; + break; + } + } + + // Each self-contained group of pictures starts with a keyframe. + $this->gop = $this->fps * self::SEGMENT_DURATION; + } + + private function ffmpeg( $options, $outfile, $container ) { + if ( $mode === 'pass1' ) { + $filename = '/dev/null'; + $playlist = '/dev/null'; + } else { + $filename = "$outfile.%04d.$container"; + $playlist = "$outfile.$container.m3u8"; + } + $ffmpegOptions = array_merge( [ + '-hide_banner', + '-i', + $this->source->filename, + '-f', 'hls', + '-hls_segment_type', 'fmp4', + '-hls_time', '10', + '-hls_playlist_type', 'vod', + '-hls_segment_filename', $filename, + ], $options, [ + '-y', $playlist + ] ); + + $output = run( 'ffmpeg', $ffmpegOptions ); + } + + public function video( $codec, $resolution, $mode ) { + if ( !$this->source->video ) { + throw new Error('no video'); + } + + $res = Video::FORMATS[$codec]['resolutions'][$resolution]; + + $options = array_merge( + [ + '-pix_fmt', 'yuv420p', + '-r', $this->fps, + ], + Video::FORMATS[$codec]['options']['common'], + Video::FORMATS[$codec]['options'][$mode], + [ + '-vf', "scale=" . implode( ':', [ $res['width'], $res['height'] ] ), + '-b:v', $res['bitrate'], + '-g', $this->gop, + '-keyint_min', $this->gop, // may not be generic enough + '-an', + ] + ); + + $outfile = "{$this->source->filename}.{$resolution}.{$codec}.{$mode}"; + $this->ffmpeg( $options, $outfile, "mp4" ); + } + + public function audio( $codec ) { + if ( !$this->source->audio ) { + throw new Error('no audio'); + } + + $format = Audio::FORMATS[$codec]; + $options = array_merge( + $format['options'], + [ + '-vn', + ] + ); + + $outfile = "{$this->source->filename}.audio.{$codec}"; + $this->ffmpeg( $options, $outfile, "mp4" ); + } + +} + + +$infiles = [ + 'caminandes-llamigos.webm', +]; + +foreach ( $infiles as $filename ) { + $source = new SourceFile( $filename ); + $codec = new Transcoder( $source ); + //$codec->audio('opus'); + $codec->audio('mp3'); + //$codec->audio('aac'); + //$codec->audio('alac'); + //$codec->audio('vorbis'); + /* + foreach ( Video::FORMATS['vp9']['resolutions'] as $res => $format ) { + + if ( $format['width'] <= $source->width && $format['height'] <= $source->height ) { + $codec->video('vp9', $res, 'fast'); + $codec->video('vp9', $res, 'pass1'); + $codec->video('vp9', $res, 'pass2'); + } + } + */ +} diff --git a/video-js/alt/video-js-cdn.css b/video-js/alt/video-js-cdn.css new file mode 100644 index 0000000..1a470fe --- /dev/null +++ b/video-js/alt/video-js-cdn.css @@ -0,0 +1,1754 @@ +@charset "UTF-8"; +.vjs-modal-dialog .vjs-modal-dialog-content, .video-js .vjs-modal-dialog, .vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before { + text-align: center; +} + +@font-face { + font-family: VideoJS; + src: url(data:application/font-woff;charset=utf-8;base64,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) format("woff"); + font-weight: normal; + font-style: normal; +} +.vjs-icon-play, .video-js .vjs-play-control .vjs-icon-placeholder, .video-js .vjs-big-play-button .vjs-icon-placeholder:before { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-play:before, .video-js .vjs-play-control .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before { + content: "\f101"; +} + +.vjs-icon-play-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-play-circle:before { + content: "\f102"; +} + +.vjs-icon-pause, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-pause:before, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before { + content: "\f103"; +} + +.vjs-icon-volume-mute, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-mute:before, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before { + content: "\f104"; +} + +.vjs-icon-volume-low, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-low:before, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before { + content: "\f105"; +} + +.vjs-icon-volume-mid, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-mid:before, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before { + content: "\f106"; +} + +.vjs-icon-volume-high, .video-js .vjs-mute-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-high:before, .video-js .vjs-mute-control .vjs-icon-placeholder:before { + content: "\f107"; +} + +.vjs-icon-fullscreen-enter, .video-js .vjs-fullscreen-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-fullscreen-enter:before, .video-js .vjs-fullscreen-control .vjs-icon-placeholder:before { + content: "\f108"; +} + +.vjs-icon-fullscreen-exit, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-fullscreen-exit:before, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before { + content: "\f109"; +} + +.vjs-icon-square { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-square:before { + content: "\f10a"; +} + +.vjs-icon-spinner { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-spinner:before { + content: "\f10b"; +} + +.vjs-icon-subtitles, .video-js .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js .vjs-subtitles-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-subtitles:before, .video-js .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js .vjs-subtitles-button .vjs-icon-placeholder:before { + content: "\f10c"; +} + +.vjs-icon-captions, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js .vjs-captions-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-captions:before, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js .vjs-captions-button .vjs-icon-placeholder:before { + content: "\f10d"; +} + +.vjs-icon-chapters, .video-js .vjs-chapters-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-chapters:before, .video-js .vjs-chapters-button .vjs-icon-placeholder:before { + content: "\f10e"; +} + +.vjs-icon-share { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-share:before { + content: "\f10f"; +} + +.vjs-icon-cog { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-cog:before { + content: "\f110"; +} + +.vjs-icon-circle, .vjs-seek-to-live-control .vjs-icon-placeholder, .video-js .vjs-volume-level, .video-js .vjs-play-progress { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle:before, .vjs-seek-to-live-control .vjs-icon-placeholder:before, .video-js .vjs-volume-level:before, .video-js .vjs-play-progress:before { + content: "\f111"; +} + +.vjs-icon-circle-outline { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle-outline:before { + content: "\f112"; +} + +.vjs-icon-circle-inner-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle-inner-circle:before { + content: "\f113"; +} + +.vjs-icon-hd { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-hd:before { + content: "\f114"; +} + +.vjs-icon-cancel, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-cancel:before, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before { + content: "\f115"; +} + +.vjs-icon-replay, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-replay:before, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before { + content: "\f116"; +} + +.vjs-icon-facebook { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-facebook:before { + content: "\f117"; +} + +.vjs-icon-gplus { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-gplus:before { + content: "\f118"; +} + +.vjs-icon-linkedin { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-linkedin:before { + content: "\f119"; +} + +.vjs-icon-twitter { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-twitter:before { + content: "\f11a"; +} + +.vjs-icon-tumblr { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-tumblr:before { + content: "\f11b"; +} + +.vjs-icon-pinterest { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-pinterest:before { + content: "\f11c"; +} + +.vjs-icon-audio-description, .video-js .vjs-descriptions-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-audio-description:before, .video-js .vjs-descriptions-button .vjs-icon-placeholder:before { + content: "\f11d"; +} + +.vjs-icon-audio, .video-js .vjs-audio-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-audio:before, .video-js .vjs-audio-button .vjs-icon-placeholder:before { + content: "\f11e"; +} + +.vjs-icon-next-item { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-next-item:before { + content: "\f11f"; +} + +.vjs-icon-previous-item { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-previous-item:before { + content: "\f120"; +} + +.vjs-icon-picture-in-picture-enter, .video-js .vjs-picture-in-picture-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-picture-in-picture-enter:before, .video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before { + content: "\f121"; +} + +.vjs-icon-picture-in-picture-exit, .video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-picture-in-picture-exit:before, .video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before { + content: "\f122"; +} + +.video-js { + display: block; + vertical-align: top; + box-sizing: border-box; + color: #fff; + background-color: #000; + position: relative; + padding: 0; + font-size: 10px; + line-height: 1; + font-weight: normal; + font-style: normal; + font-family: Arial, Helvetica, sans-serif; + word-break: initial; +} +.video-js:-moz-full-screen { + position: absolute; +} +.video-js:-webkit-full-screen { + width: 100% !important; + height: 100% !important; +} + +.video-js[tabindex="-1"] { + outline: none; +} + +.video-js *, +.video-js *:before, +.video-js *:after { + box-sizing: inherit; +} + +.video-js ul { + font-family: inherit; + font-size: inherit; + line-height: inherit; + list-style-position: outside; + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 0; +} + +.video-js.vjs-fluid, +.video-js.vjs-16-9, +.video-js.vjs-4-3, +.video-js.vjs-9-16, +.video-js.vjs-1-1 { + width: 100%; + max-width: 100%; + height: 0; +} + +.video-js.vjs-16-9 { + padding-top: 56.25%; +} + +.video-js.vjs-4-3 { + padding-top: 75%; +} + +.video-js.vjs-9-16 { + padding-top: 177.7777777778%; +} + +.video-js.vjs-1-1 { + padding-top: 100%; +} + +.video-js.vjs-fill { + width: 100%; + height: 100%; +} + +.video-js .vjs-tech { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +body.vjs-full-window { + padding: 0; + margin: 0; + height: 100%; +} + +.vjs-full-window .video-js.vjs-fullscreen { + position: fixed; + overflow: hidden; + z-index: 1000; + left: 0; + top: 0; + bottom: 0; + right: 0; +} + +.video-js.vjs-fullscreen:not(.vjs-ios-native-fs) { + width: 100% !important; + height: 100% !important; + padding-top: 0 !important; +} + +.video-js.vjs-fullscreen.vjs-user-inactive { + cursor: none; +} + +.vjs-hidden { + display: none !important; +} + +.vjs-disabled { + opacity: 0.5; + cursor: default; +} + +.video-js .vjs-offscreen { + height: 1px; + left: -9999px; + position: absolute; + top: 0; + width: 1px; +} + +.vjs-lock-showing { + display: block !important; + opacity: 1 !important; + visibility: visible !important; +} + +.vjs-no-js { + padding: 20px; + color: #fff; + background-color: #000; + font-size: 18px; + font-family: Arial, Helvetica, sans-serif; + text-align: center; + width: 300px; + height: 150px; + margin: 0px auto; +} + +.vjs-no-js a, +.vjs-no-js a:visited { + color: #66A8CC; +} + +.video-js .vjs-big-play-button { + font-size: 3em; + line-height: 1.5em; + height: 1.63332em; + width: 3em; + display: block; + position: absolute; + top: 10px; + left: 10px; + padding: 0; + cursor: pointer; + opacity: 1; + border: 0.06666em solid #fff; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + border-radius: 0.3em; + transition: all 0.4s; +} +.vjs-big-play-centered .vjs-big-play-button { + top: 50%; + left: 50%; + margin-top: -0.81666em; + margin-left: -1.5em; +} + +.video-js:hover .vjs-big-play-button, +.video-js .vjs-big-play-button:focus { + border-color: #fff; + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); + transition: all 0s; +} + +.vjs-controls-disabled .vjs-big-play-button, +.vjs-has-started .vjs-big-play-button, +.vjs-using-native-controls .vjs-big-play-button, +.vjs-error .vjs-big-play-button { + display: none; +} + +.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button { + display: block; +} + +.video-js button { + background: none; + border: none; + color: inherit; + display: inline-block; + font-size: inherit; + line-height: inherit; + text-transform: none; + text-decoration: none; + transition: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.vjs-control .vjs-button { + width: 100%; + height: 100%; +} + +.video-js .vjs-control.vjs-close-button { + cursor: pointer; + height: 3em; + position: absolute; + right: 0; + top: 0.5em; + z-index: 2; +} +.video-js .vjs-modal-dialog { + background: rgba(0, 0, 0, 0.8); + background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); + overflow: auto; +} + +.video-js .vjs-modal-dialog > * { + box-sizing: border-box; +} + +.vjs-modal-dialog .vjs-modal-dialog-content { + font-size: 1.2em; + line-height: 1.5; + padding: 20px 24px; + z-index: 1; +} + +.vjs-menu-button { + cursor: pointer; +} + +.vjs-menu-button.vjs-disabled { + cursor: default; +} + +.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu { + display: none; +} + +.vjs-menu .vjs-menu-content { + display: block; + padding: 0; + margin: 0; + font-family: Arial, Helvetica, sans-serif; + overflow: auto; +} + +.vjs-menu .vjs-menu-content > * { + box-sizing: border-box; +} + +.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu { + display: none; +} + +.vjs-menu li { + list-style: none; + margin: 0; + padding: 0.2em 0; + line-height: 1.4em; + font-size: 1.2em; + text-align: center; + text-transform: lowercase; +} + +.vjs-menu li.vjs-menu-item:focus, +.vjs-menu li.vjs-menu-item:hover, +.js-focus-visible .vjs-menu li.vjs-menu-item:hover { + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); +} + +.vjs-menu li.vjs-selected, +.vjs-menu li.vjs-selected:focus, +.vjs-menu li.vjs-selected:hover, +.js-focus-visible .vjs-menu li.vjs-selected:hover { + background-color: #fff; + color: #2B333F; +} + +.video-js .vjs-menu *:not(.vjs-selected):focus:not(:focus-visible), +.js-focus-visible .vjs-menu *:not(.vjs-selected):focus:not(.focus-visible) { + background: none; +} + +.vjs-menu li.vjs-menu-title { + text-align: center; + text-transform: uppercase; + font-size: 1em; + line-height: 2em; + padding: 0; + margin: 0 0 0.3em 0; + font-weight: bold; + cursor: default; +} + +.vjs-menu-button-popup .vjs-menu { + display: none; + position: absolute; + bottom: 0; + width: 10em; + left: -3em; + height: 0em; + margin-bottom: 1.5em; + border-top-color: rgba(43, 51, 63, 0.7); +} + +.vjs-menu-button-popup .vjs-menu .vjs-menu-content { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + position: absolute; + width: 100%; + bottom: 1.5em; + max-height: 15em; +} + +.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content, +.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 5em; +} + +.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 10em; +} + +.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 14em; +} + +.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content, +.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content, +.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 25em; +} + +.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu, +.vjs-menu-button-popup .vjs-menu.vjs-lock-showing { + display: block; +} + +.video-js .vjs-menu-button-inline { + transition: all 0.4s; + overflow: hidden; +} + +.video-js .vjs-menu-button-inline:before { + width: 2.222222222em; +} + +.video-js .vjs-menu-button-inline:hover, +.video-js .vjs-menu-button-inline:focus, +.video-js .vjs-menu-button-inline.vjs-slider-active, +.video-js.vjs-no-flex .vjs-menu-button-inline { + width: 12em; +} + +.vjs-menu-button-inline .vjs-menu { + opacity: 0; + height: 100%; + width: auto; + position: absolute; + left: 4em; + top: 0; + padding: 0; + margin: 0; + transition: all 0.4s; +} + +.vjs-menu-button-inline:hover .vjs-menu, +.vjs-menu-button-inline:focus .vjs-menu, +.vjs-menu-button-inline.vjs-slider-active .vjs-menu { + display: block; + opacity: 1; +} + +.vjs-no-flex .vjs-menu-button-inline .vjs-menu { + display: block; + opacity: 1; + position: relative; + width: auto; +} + +.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu, +.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu, +.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu { + width: auto; +} + +.vjs-menu-button-inline .vjs-menu-content { + width: auto; + height: 100%; + margin: 0; + overflow: hidden; +} + +.video-js .vjs-control-bar { + display: none; + width: 100%; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 3em; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); +} + +.vjs-has-started .vjs-control-bar { + display: flex; + visibility: visible; + opacity: 1; + transition: visibility 0.1s, opacity 0.1s; +} + +.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { + visibility: visible; + opacity: 0; + pointer-events: none; + transition: visibility 1s, opacity 1s; +} + +.vjs-controls-disabled .vjs-control-bar, +.vjs-using-native-controls .vjs-control-bar, +.vjs-error .vjs-control-bar { + display: none !important; +} + +.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { + opacity: 1; + visibility: visible; +} + +.vjs-has-started.vjs-no-flex .vjs-control-bar { + display: table; +} + +.video-js .vjs-control { + position: relative; + text-align: center; + margin: 0; + padding: 0; + height: 100%; + width: 4em; + flex: none; +} + +.vjs-button > .vjs-icon-placeholder:before { + font-size: 1.8em; + line-height: 1.67; +} + +.vjs-button > .vjs-icon-placeholder { + display: block; +} + +.video-js .vjs-control:focus:before, +.video-js .vjs-control:hover:before, +.video-js .vjs-control:focus { + text-shadow: 0em 0em 1em white; +} + +.video-js .vjs-control-text { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +.vjs-no-flex .vjs-control { + display: table-cell; + vertical-align: middle; +} + +.video-js .vjs-custom-control-spacer { + display: none; +} + +.video-js .vjs-progress-control { + cursor: pointer; + flex: auto; + display: flex; + align-items: center; + min-width: 4em; + touch-action: none; +} + +.video-js .vjs-progress-control.disabled { + cursor: default; +} + +.vjs-live .vjs-progress-control { + display: none; +} + +.vjs-liveui .vjs-progress-control { + display: flex; + align-items: center; +} + +.vjs-no-flex .vjs-progress-control { + width: auto; +} + +.video-js .vjs-progress-holder { + flex: auto; + transition: all 0.2s; + height: 0.3em; +} + +.video-js .vjs-progress-control .vjs-progress-holder { + margin: 0 10px; +} + +.video-js .vjs-progress-control:hover .vjs-progress-holder { + font-size: 1.6666666667em; +} + +.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled { + font-size: 1em; +} + +.video-js .vjs-progress-holder .vjs-play-progress, +.video-js .vjs-progress-holder .vjs-load-progress, +.video-js .vjs-progress-holder .vjs-load-progress div { + position: absolute; + display: block; + height: 100%; + margin: 0; + padding: 0; + width: 0; +} + +.video-js .vjs-play-progress { + background-color: #fff; +} +.video-js .vjs-play-progress:before { + font-size: 0.9em; + position: absolute; + right: -0.5em; + top: -0.3333333333em; + z-index: 1; +} + +.video-js .vjs-load-progress { + background: rgba(115, 133, 159, 0.5); +} + +.video-js .vjs-load-progress div { + background: rgba(115, 133, 159, 0.75); +} + +.video-js .vjs-time-tooltip { + background-color: #fff; + background-color: rgba(255, 255, 255, 0.8); + border-radius: 0.3em; + color: #000; + float: right; + font-family: Arial, Helvetica, sans-serif; + font-size: 1em; + padding: 6px 8px 8px 8px; + pointer-events: none; + position: absolute; + top: -3.4em; + visibility: hidden; + z-index: 1; +} + +.video-js .vjs-progress-holder:focus .vjs-time-tooltip { + display: none; +} + +.video-js .vjs-progress-control:hover .vjs-time-tooltip, +.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip { + display: block; + font-size: 0.6em; + visibility: visible; +} + +.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip { + font-size: 1em; +} + +.video-js .vjs-progress-control .vjs-mouse-display { + display: none; + position: absolute; + width: 1px; + height: 100%; + background-color: #000; + z-index: 1; +} + +.vjs-no-flex .vjs-progress-control .vjs-mouse-display { + z-index: 0; +} + +.video-js .vjs-progress-control:hover .vjs-mouse-display { + display: block; +} + +.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display { + visibility: hidden; + opacity: 0; + transition: visibility 1s, opacity 1s; +} + +.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display { + display: none; +} + +.vjs-mouse-display .vjs-time-tooltip { + color: #fff; + background-color: #000; + background-color: rgba(0, 0, 0, 0.8); +} + +.video-js .vjs-slider { + position: relative; + cursor: pointer; + padding: 0; + margin: 0 0.45em 0 0.45em; + /* iOS Safari */ + -webkit-touch-callout: none; + /* Safari */ + -webkit-user-select: none; + /* Konqueror HTML */ + /* Firefox */ + -moz-user-select: none; + /* Internet Explorer/Edge */ + -ms-user-select: none; + /* Non-prefixed version, currently supported by Chrome and Opera */ + user-select: none; + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); +} + +.video-js .vjs-slider.disabled { + cursor: default; +} + +.video-js .vjs-slider:focus { + text-shadow: 0em 0em 1em white; + box-shadow: 0 0 1em #fff; +} + +.video-js .vjs-mute-control { + cursor: pointer; + flex: none; +} +.video-js .vjs-volume-control { + cursor: pointer; + margin-right: 1em; + display: flex; +} + +.video-js .vjs-volume-control.vjs-volume-horizontal { + width: 5em; +} + +.video-js .vjs-volume-panel .vjs-volume-control { + visibility: visible; + opacity: 0; + width: 1px; + height: 1px; + margin-left: -1px; +} + +.video-js .vjs-volume-panel { + transition: width 1s; +} +.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control, .video-js .vjs-volume-panel:active .vjs-volume-control, .video-js .vjs-volume-panel:focus .vjs-volume-control, .video-js .vjs-volume-panel .vjs-volume-control:active, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active { + visibility: visible; + opacity: 1; + position: relative; + transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s; +} +.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal { + width: 5em; + height: 3em; + margin-right: 0; +} +.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical { + left: -3.5em; + transition: left 0s; +} +.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active { + width: 10em; + transition: width 0.1s; +} +.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only { + width: 4em; +} + +.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical { + height: 8em; + width: 3em; + left: -3000em; + transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s; +} + +.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal { + transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s; +} + +.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal { + width: 5em; + height: 3em; + visibility: visible; + opacity: 1; + position: relative; + transition: none; +} + +.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical, +.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical { + position: absolute; + bottom: 3em; + left: 0.5em; +} + +.video-js .vjs-volume-panel { + display: flex; +} + +.video-js .vjs-volume-bar { + margin: 1.35em 0.45em; +} + +.vjs-volume-bar.vjs-slider-horizontal { + width: 5em; + height: 0.3em; +} + +.vjs-volume-bar.vjs-slider-vertical { + width: 0.3em; + height: 5em; + margin: 1.35em auto; +} + +.video-js .vjs-volume-level { + position: absolute; + bottom: 0; + left: 0; + background-color: #fff; +} +.video-js .vjs-volume-level:before { + position: absolute; + font-size: 0.9em; + z-index: 1; +} + +.vjs-slider-vertical .vjs-volume-level { + width: 0.3em; +} +.vjs-slider-vertical .vjs-volume-level:before { + top: -0.5em; + left: -0.3em; + z-index: 1; +} + +.vjs-slider-horizontal .vjs-volume-level { + height: 0.3em; +} +.vjs-slider-horizontal .vjs-volume-level:before { + top: -0.3em; + right: -0.5em; +} + +.video-js .vjs-volume-panel.vjs-volume-panel-vertical { + width: 4em; +} + +.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level { + height: 100%; +} + +.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level { + width: 100%; +} + +.video-js .vjs-volume-vertical { + width: 3em; + height: 8em; + bottom: 8em; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); +} + +.video-js .vjs-volume-horizontal .vjs-menu { + left: -2em; +} + +.video-js .vjs-volume-tooltip { + background-color: #fff; + background-color: rgba(255, 255, 255, 0.8); + border-radius: 0.3em; + color: #000; + float: right; + font-family: Arial, Helvetica, sans-serif; + font-size: 1em; + padding: 6px 8px 8px 8px; + pointer-events: none; + position: absolute; + top: -3.4em; + visibility: hidden; + z-index: 1; +} + +.video-js .vjs-volume-control:hover .vjs-volume-tooltip, +.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip { + display: block; + font-size: 1em; + visibility: visible; +} + +.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip, +.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip { + left: 1em; + top: -12px; +} + +.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip { + font-size: 1em; +} + +.video-js .vjs-volume-control .vjs-mouse-display { + display: none; + position: absolute; + width: 100%; + height: 1px; + background-color: #000; + z-index: 1; +} + +.video-js .vjs-volume-horizontal .vjs-mouse-display { + width: 1px; + height: 100%; +} + +.vjs-no-flex .vjs-volume-control .vjs-mouse-display { + z-index: 0; +} + +.video-js .vjs-volume-control:hover .vjs-mouse-display { + display: block; +} + +.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display { + visibility: hidden; + opacity: 0; + transition: visibility 1s, opacity 1s; +} + +.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-control .vjs-mouse-display { + display: none; +} + +.vjs-mouse-display .vjs-volume-tooltip { + color: #fff; + background-color: #000; + background-color: rgba(0, 0, 0, 0.8); +} + +.vjs-poster { + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; + background-color: #000000; + cursor: pointer; + margin: 0; + padding: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; +} + +.vjs-has-started .vjs-poster { + display: none; +} + +.vjs-audio.vjs-has-started .vjs-poster { + display: block; +} + +.vjs-using-native-controls .vjs-poster { + display: none; +} + +.video-js .vjs-live-control { + display: flex; + align-items: flex-start; + flex: auto; + font-size: 1em; + line-height: 3em; +} + +.vjs-no-flex .vjs-live-control { + display: table-cell; + width: auto; + text-align: left; +} + +.video-js:not(.vjs-live) .vjs-live-control, +.video-js.vjs-liveui .vjs-live-control { + display: none; +} + +.video-js .vjs-seek-to-live-control { + align-items: center; + cursor: pointer; + flex: none; + display: inline-flex; + height: 100%; + padding-left: 0.5em; + padding-right: 0.5em; + font-size: 1em; + line-height: 3em; + width: auto; + min-width: 4em; +} + +.vjs-no-flex .vjs-seek-to-live-control { + display: table-cell; + width: auto; + text-align: left; +} + +.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control, +.video-js:not(.vjs-live) .vjs-seek-to-live-control { + display: none; +} + +.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge { + cursor: auto; +} + +.vjs-seek-to-live-control .vjs-icon-placeholder { + margin-right: 0.5em; + color: #888; +} + +.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder { + color: red; +} + +.video-js .vjs-time-control { + flex: none; + font-size: 1em; + line-height: 3em; + min-width: 2em; + width: auto; + padding-left: 1em; + padding-right: 1em; +} + +.vjs-live .vjs-time-control { + display: none; +} + +.video-js .vjs-current-time, +.vjs-no-flex .vjs-current-time { + display: none; +} + +.video-js .vjs-duration, +.vjs-no-flex .vjs-duration { + display: none; +} + +.vjs-time-divider { + display: none; + line-height: 3em; +} + +.vjs-live .vjs-time-divider { + display: none; +} + +.video-js .vjs-play-control { + cursor: pointer; +} + +.video-js .vjs-play-control .vjs-icon-placeholder { + flex: none; +} + +.vjs-text-track-display { + position: absolute; + bottom: 3em; + left: 0; + right: 0; + top: 0; + pointer-events: none; +} + +.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display { + bottom: 1em; +} + +.video-js .vjs-text-track { + font-size: 1.4em; + text-align: center; + margin-bottom: 0.1em; +} + +.vjs-subtitles { + color: #fff; +} + +.vjs-captions { + color: #fc6; +} + +.vjs-tt-cue { + display: block; +} + +video::-webkit-media-text-track-display { + transform: translateY(-3em); +} + +.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display { + transform: translateY(-1.5em); +} + +.video-js .vjs-picture-in-picture-control { + cursor: pointer; + flex: none; +} +.video-js .vjs-fullscreen-control { + cursor: pointer; + flex: none; +} +.vjs-playback-rate > .vjs-menu-button, +.vjs-playback-rate .vjs-playback-rate-value { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vjs-playback-rate .vjs-playback-rate-value { + pointer-events: none; + font-size: 1.5em; + line-height: 2; + text-align: center; +} + +.vjs-playback-rate .vjs-menu { + width: 4em; + left: 0em; +} + +.vjs-error .vjs-error-display .vjs-modal-dialog-content { + font-size: 1.4em; + text-align: center; +} + +.vjs-error .vjs-error-display:before { + color: #fff; + content: "X"; + font-family: Arial, Helvetica, sans-serif; + font-size: 4em; + left: 0; + line-height: 1; + margin-top: -0.5em; + position: absolute; + text-shadow: 0.05em 0.05em 0.1em #000; + text-align: center; + top: 50%; + vertical-align: middle; + width: 100%; +} + +.vjs-loading-spinner { + display: none; + position: absolute; + top: 50%; + left: 50%; + margin: -25px 0 0 -25px; + opacity: 0.85; + text-align: left; + border: 6px solid rgba(43, 51, 63, 0.7); + box-sizing: border-box; + background-clip: padding-box; + width: 50px; + height: 50px; + border-radius: 25px; + visibility: hidden; +} + +.vjs-seeking .vjs-loading-spinner, +.vjs-waiting .vjs-loading-spinner { + display: block; + -webkit-animation: vjs-spinner-show 0s linear 0.3s forwards; + animation: vjs-spinner-show 0s linear 0.3s forwards; +} + +.vjs-loading-spinner:before, +.vjs-loading-spinner:after { + content: ""; + position: absolute; + margin: -6px; + box-sizing: inherit; + width: inherit; + height: inherit; + border-radius: inherit; + opacity: 1; + border: inherit; + border-color: transparent; + border-top-color: white; +} + +.vjs-seeking .vjs-loading-spinner:before, +.vjs-seeking .vjs-loading-spinner:after, +.vjs-waiting .vjs-loading-spinner:before, +.vjs-waiting .vjs-loading-spinner:after { + -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; + animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; +} + +.vjs-seeking .vjs-loading-spinner:before, +.vjs-waiting .vjs-loading-spinner:before { + border-top-color: white; +} + +.vjs-seeking .vjs-loading-spinner:after, +.vjs-waiting .vjs-loading-spinner:after { + border-top-color: white; + -webkit-animation-delay: 0.44s; + animation-delay: 0.44s; +} + +@keyframes vjs-spinner-show { + to { + visibility: visible; + } +} +@-webkit-keyframes vjs-spinner-show { + to { + visibility: visible; + } +} +@keyframes vjs-spinner-spin { + 100% { + transform: rotate(360deg); + } +} +@-webkit-keyframes vjs-spinner-spin { + 100% { + -webkit-transform: rotate(360deg); + } +} +@keyframes vjs-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} +@-webkit-keyframes vjs-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} +.vjs-chapters-button .vjs-menu ul { + width: 24em; +} + +.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder { + vertical-align: middle; + display: inline-block; + margin-bottom: -0.1em; +} + +.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before { + font-family: VideoJS; + content: ""; + font-size: 1.5em; + line-height: inherit; +} + +.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder { + vertical-align: middle; + display: inline-block; + margin-bottom: -0.1em; +} + +.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before { + font-family: VideoJS; + content: " "; + font-size: 1.5em; + line-height: inherit; +} + +.video-js.vjs-layout-small .vjs-current-time, +.video-js.vjs-layout-small .vjs-time-divider, +.video-js.vjs-layout-small .vjs-duration, +.video-js.vjs-layout-small .vjs-remaining-time, +.video-js.vjs-layout-small .vjs-playback-rate, +.video-js.vjs-layout-small .vjs-chapters-button, +.video-js.vjs-layout-small .vjs-descriptions-button, +.video-js.vjs-layout-small .vjs-captions-button, +.video-js.vjs-layout-small .vjs-subtitles-button, +.video-js.vjs-layout-small .vjs-audio-button, +.video-js.vjs-layout-small .vjs-volume-control, .video-js.vjs-layout-x-small .vjs-current-time, +.video-js.vjs-layout-x-small .vjs-time-divider, +.video-js.vjs-layout-x-small .vjs-duration, +.video-js.vjs-layout-x-small .vjs-remaining-time, +.video-js.vjs-layout-x-small .vjs-playback-rate, +.video-js.vjs-layout-x-small .vjs-chapters-button, +.video-js.vjs-layout-x-small .vjs-descriptions-button, +.video-js.vjs-layout-x-small .vjs-captions-button, +.video-js.vjs-layout-x-small .vjs-subtitles-button, +.video-js.vjs-layout-x-small .vjs-audio-button, +.video-js.vjs-layout-x-small .vjs-volume-control, .video-js.vjs-layout-tiny .vjs-current-time, +.video-js.vjs-layout-tiny .vjs-time-divider, +.video-js.vjs-layout-tiny .vjs-duration, +.video-js.vjs-layout-tiny .vjs-remaining-time, +.video-js.vjs-layout-tiny .vjs-playback-rate, +.video-js.vjs-layout-tiny .vjs-chapters-button, +.video-js.vjs-layout-tiny .vjs-descriptions-button, +.video-js.vjs-layout-tiny .vjs-captions-button, +.video-js.vjs-layout-tiny .vjs-subtitles-button, +.video-js.vjs-layout-tiny .vjs-audio-button, +.video-js.vjs-layout-tiny .vjs-volume-control { + display: none !important; +} +.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, +.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, +.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, +.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, +.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover, +.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active, +.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active { + width: auto; + width: initial; +} +.video-js.vjs-layout-x-small:not(.vjs-liveui) .vjs-subs-caps-button, .video-js.vjs-layout-x-small:not(.vjs-live) .vjs-subs-caps-button, .video-js.vjs-layout-tiny .vjs-subs-caps-button { + display: none; +} +.video-js.vjs-layout-x-small.vjs-liveui .vjs-custom-control-spacer, .video-js.vjs-layout-tiny .vjs-custom-control-spacer { + flex: auto; + display: block; +} +.video-js.vjs-layout-x-small.vjs-liveui.vjs-no-flex .vjs-custom-control-spacer, .video-js.vjs-layout-tiny.vjs-no-flex .vjs-custom-control-spacer { + width: auto; +} +.video-js.vjs-layout-x-small.vjs-liveui .vjs-progress-control, .video-js.vjs-layout-tiny .vjs-progress-control { + display: none; +} + +.vjs-modal-dialog.vjs-text-track-settings { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.75); + color: #fff; + height: 70%; +} + +.vjs-text-track-settings .vjs-modal-dialog-content { + display: table; +} + +.vjs-text-track-settings .vjs-track-settings-colors, +.vjs-text-track-settings .vjs-track-settings-font, +.vjs-text-track-settings .vjs-track-settings-controls { + display: table-cell; +} + +.vjs-text-track-settings .vjs-track-settings-controls { + text-align: right; + vertical-align: bottom; +} + +@supports (display: grid) { + .vjs-text-track-settings .vjs-modal-dialog-content { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + padding: 20px 24px 0px 24px; + } + + .vjs-track-settings-controls .vjs-default-button { + margin-bottom: 20px; + } + + .vjs-text-track-settings .vjs-track-settings-controls { + grid-column: 1/-1; + } + + .vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content, +.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content, +.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content { + grid-template-columns: 1fr; + } +} +.vjs-track-setting > select { + margin-right: 1em; + margin-bottom: 0.5em; +} + +.vjs-text-track-settings fieldset { + margin: 5px; + padding: 3px; + border: none; +} + +.vjs-text-track-settings fieldset span { + display: inline-block; +} + +.vjs-text-track-settings fieldset span > select { + max-width: 7.3em; +} + +.vjs-text-track-settings legend { + color: #fff; + margin: 0 0 5px 0; +} + +.vjs-text-track-settings .vjs-label { + position: absolute; + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); + display: block; + margin: 0 0 5px 0; + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} + +.vjs-track-settings-controls button:focus, +.vjs-track-settings-controls button:active { + outline-style: solid; + outline-width: medium; + background-image: linear-gradient(0deg, #fff 88%, #73859f 100%); +} + +.vjs-track-settings-controls button:hover { + color: rgba(43, 51, 63, 0.75); +} + +.vjs-track-settings-controls button { + background-color: #fff; + background-image: linear-gradient(-180deg, #fff 88%, #73859f 100%); + color: #2B333F; + cursor: pointer; + border-radius: 2px; +} + +.vjs-track-settings-controls .vjs-default-button { + margin-right: 1em; +} + +@media print { + .video-js > *:not(.vjs-tech):not(.vjs-poster) { + visibility: hidden; + } +} +.vjs-resize-manager { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; + z-index: -1000; +} + +.js-focus-visible .video-js *:focus:not(.focus-visible) { + outline: none; +} + +.video-js *:focus:not(:focus-visible) { + outline: none; +} diff --git a/video-js/alt/video-js-cdn.min.css b/video-js/alt/video-js-cdn.min.css new file mode 100644 index 0000000..804629a --- /dev/null +++ b/video-js/alt/video-js-cdn.min.css @@ -0,0 +1 @@ +@charset "UTF-8";.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-modal-dialog,.vjs-button>.vjs-icon-placeholder:before,.vjs-modal-dialog .vjs-modal-dialog-content{position:absolute;top:0;left:0;width:100%;height:100%}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.vjs-button>.vjs-icon-placeholder:before{text-align:center}@font-face{font-family:VideoJS;src:url(data:application/font-woff;charset=utf-8;base64,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) format("woff");font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder,.vjs-icon-play{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-big-play-button .vjs-icon-placeholder:before,.video-js .vjs-play-control .vjs-icon-placeholder:before,.vjs-icon-play:before{content:"\f101"}.vjs-icon-play-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-play-circle:before{content:"\f102"}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder,.vjs-icon-pause{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before,.vjs-icon-pause:before{content:"\f103"}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder,.vjs-icon-volume-mute{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before,.vjs-icon-volume-mute:before{content:"\f104"}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder,.vjs-icon-volume-low{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before,.vjs-icon-volume-low:before{content:"\f105"}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder,.vjs-icon-volume-mid{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before,.vjs-icon-volume-mid:before{content:"\f106"}.video-js .vjs-mute-control .vjs-icon-placeholder,.vjs-icon-volume-high{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-mute-control .vjs-icon-placeholder:before,.vjs-icon-volume-high:before{content:"\f107"}.video-js .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-enter:before{content:"\f108"}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder,.vjs-icon-fullscreen-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before,.vjs-icon-fullscreen-exit:before{content:"\f109"}.vjs-icon-square{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-square:before{content:"\f10a"}.vjs-icon-spinner{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-spinner:before{content:"\f10b"}.video-js .vjs-subs-caps-button .vjs-icon-placeholder,.video-js .vjs-subtitles-button .vjs-icon-placeholder,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-subtitles{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js .vjs-subtitles-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-subtitles:before{content:"\f10c"}.video-js .vjs-captions-button .vjs-icon-placeholder,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder,.vjs-icon-captions{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-captions-button .vjs-icon-placeholder:before,.video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before,.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before,.vjs-icon-captions:before{content:"\f10d"}.video-js .vjs-chapters-button .vjs-icon-placeholder,.vjs-icon-chapters{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-chapters-button .vjs-icon-placeholder:before,.vjs-icon-chapters:before{content:"\f10e"}.vjs-icon-share{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-share:before{content:"\f10f"}.vjs-icon-cog{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-cog:before{content:"\f110"}.video-js .vjs-play-progress,.video-js .vjs-volume-level,.vjs-icon-circle,.vjs-seek-to-live-control .vjs-icon-placeholder{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-progress:before,.video-js .vjs-volume-level:before,.vjs-icon-circle:before,.vjs-seek-to-live-control .vjs-icon-placeholder:before{content:"\f111"}.vjs-icon-circle-outline{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-outline:before{content:"\f112"}.vjs-icon-circle-inner-circle{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-circle-inner-circle:before{content:"\f113"}.vjs-icon-hd{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-hd:before{content:"\f114"}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder,.vjs-icon-cancel{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before,.vjs-icon-cancel:before{content:"\f115"}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder,.vjs-icon-replay{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before,.vjs-icon-replay:before{content:"\f116"}.vjs-icon-facebook{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-facebook:before{content:"\f117"}.vjs-icon-gplus{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-gplus:before{content:"\f118"}.vjs-icon-linkedin{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-linkedin:before{content:"\f119"}.vjs-icon-twitter{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-twitter:before{content:"\f11a"}.vjs-icon-tumblr{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-tumblr:before{content:"\f11b"}.vjs-icon-pinterest{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-pinterest:before{content:"\f11c"}.video-js .vjs-descriptions-button .vjs-icon-placeholder,.vjs-icon-audio-description{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-descriptions-button .vjs-icon-placeholder:before,.vjs-icon-audio-description:before{content:"\f11d"}.video-js .vjs-audio-button .vjs-icon-placeholder,.vjs-icon-audio{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-audio-button .vjs-icon-placeholder:before,.vjs-icon-audio:before{content:"\f11e"}.vjs-icon-next-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-next-item:before{content:"\f11f"}.vjs-icon-previous-item{font-family:VideoJS;font-weight:400;font-style:normal}.vjs-icon-previous-item:before{content:"\f120"}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-enter{font-family:VideoJS;font-weight:400;font-style:normal}.video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-enter:before{content:"\f121"}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder,.vjs-icon-picture-in-picture-exit{font-family:VideoJS;font-weight:400;font-style:normal}.video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before,.vjs-icon-picture-in-picture-exit:before{content:"\f122"}.video-js{display:block;vertical-align:top;box-sizing:border-box;color:#fff;background-color:#000;position:relative;padding:0;font-size:10px;line-height:1;font-weight:400;font-style:normal;font-family:Arial,Helvetica,sans-serif;word-break:initial}.video-js:-moz-full-screen{position:absolute}.video-js:-webkit-full-screen{width:100%!important;height:100%!important}.video-js[tabindex="-1"]{outline:0}.video-js *,.video-js :after,.video-js :before{box-sizing:inherit}.video-js ul{font-family:inherit;font-size:inherit;line-height:inherit;list-style-position:outside;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.video-js.vjs-1-1,.video-js.vjs-16-9,.video-js.vjs-4-3,.video-js.vjs-9-16,.video-js.vjs-fluid{width:100%;max-width:100%;height:0}.video-js.vjs-16-9{padding-top:56.25%}.video-js.vjs-4-3{padding-top:75%}.video-js.vjs-9-16{padding-top:177.7777777778%}.video-js.vjs-1-1{padding-top:100%}.video-js.vjs-fill{width:100%;height:100%}.video-js .vjs-tech{position:absolute;top:0;left:0;width:100%;height:100%}body.vjs-full-window{padding:0;margin:0;height:100%}.vjs-full-window .video-js.vjs-fullscreen{position:fixed;overflow:hidden;z-index:1000;left:0;top:0;bottom:0;right:0}.video-js.vjs-fullscreen:not(.vjs-ios-native-fs){width:100%!important;height:100%!important;padding-top:0!important}.video-js.vjs-fullscreen.vjs-user-inactive{cursor:none}.vjs-hidden{display:none!important}.vjs-disabled{opacity:.5;cursor:default}.video-js .vjs-offscreen{height:1px;left:-9999px;position:absolute;top:0;width:1px}.vjs-lock-showing{display:block!important;opacity:1!important;visibility:visible!important}.vjs-no-js{padding:20px;color:#fff;background-color:#000;font-size:18px;font-family:Arial,Helvetica,sans-serif;text-align:center;width:300px;height:150px;margin:0 auto}.vjs-no-js a,.vjs-no-js a:visited{color:#66a8cc}.video-js .vjs-big-play-button{font-size:3em;line-height:1.5em;height:1.63332em;width:3em;display:block;position:absolute;top:10px;left:10px;padding:0;cursor:pointer;opacity:1;border:.06666em solid #fff;background-color:#2b333f;background-color:rgba(43,51,63,.7);border-radius:.3em;transition:all .4s}.vjs-big-play-centered .vjs-big-play-button{top:50%;left:50%;margin-top:-.81666em;margin-left:-1.5em}.video-js .vjs-big-play-button:focus,.video-js:hover .vjs-big-play-button{border-color:#fff;background-color:#73859f;background-color:rgba(115,133,159,.5);transition:all 0s}.vjs-controls-disabled .vjs-big-play-button,.vjs-error .vjs-big-play-button,.vjs-has-started .vjs-big-play-button,.vjs-using-native-controls .vjs-big-play-button{display:none}.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button{display:block}.video-js button{background:0 0;border:none;color:inherit;display:inline-block;font-size:inherit;line-height:inherit;text-transform:none;text-decoration:none;transition:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.vjs-control .vjs-button{width:100%;height:100%}.video-js .vjs-control.vjs-close-button{cursor:pointer;height:3em;position:absolute;right:0;top:.5em;z-index:2}.video-js .vjs-modal-dialog{background:rgba(0,0,0,.8);background:linear-gradient(180deg,rgba(0,0,0,.8),rgba(255,255,255,0));overflow:auto}.video-js .vjs-modal-dialog>*{box-sizing:border-box}.vjs-modal-dialog .vjs-modal-dialog-content{font-size:1.2em;line-height:1.5;padding:20px 24px;z-index:1}.vjs-menu-button{cursor:pointer}.vjs-menu-button.vjs-disabled{cursor:default}.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu{display:none}.vjs-menu .vjs-menu-content{display:block;padding:0;margin:0;font-family:Arial,Helvetica,sans-serif;overflow:auto}.vjs-menu .vjs-menu-content>*{box-sizing:border-box}.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu{display:none}.vjs-menu li{list-style:none;margin:0;padding:.2em 0;line-height:1.4em;font-size:1.2em;text-align:center;text-transform:lowercase}.js-focus-visible .vjs-menu li.vjs-menu-item:hover,.vjs-menu li.vjs-menu-item:focus,.vjs-menu li.vjs-menu-item:hover{background-color:#73859f;background-color:rgba(115,133,159,.5)}.js-focus-visible .vjs-menu li.vjs-selected:hover,.vjs-menu li.vjs-selected,.vjs-menu li.vjs-selected:focus,.vjs-menu li.vjs-selected:hover{background-color:#fff;color:#2b333f}.js-focus-visible .vjs-menu :not(.vjs-selected):focus:not(.focus-visible),.video-js .vjs-menu :not(.vjs-selected):focus:not(:focus-visible){background:0 0}.vjs-menu li.vjs-menu-title{text-align:center;text-transform:uppercase;font-size:1em;line-height:2em;padding:0;margin:0 0 .3em 0;font-weight:700;cursor:default}.vjs-menu-button-popup .vjs-menu{display:none;position:absolute;bottom:0;width:10em;left:-3em;height:0;margin-bottom:1.5em;border-top-color:rgba(43,51,63,.7)}.vjs-menu-button-popup .vjs-menu .vjs-menu-content{background-color:#2b333f;background-color:rgba(43,51,63,.7);position:absolute;width:100%;bottom:1.5em;max-height:15em}.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:5em}.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:10em}.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:14em}.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content,.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content{max-height:25em}.vjs-menu-button-popup .vjs-menu.vjs-lock-showing,.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu{display:block}.video-js .vjs-menu-button-inline{transition:all .4s;overflow:hidden}.video-js .vjs-menu-button-inline:before{width:2.222222222em}.video-js .vjs-menu-button-inline.vjs-slider-active,.video-js .vjs-menu-button-inline:focus,.video-js .vjs-menu-button-inline:hover,.video-js.vjs-no-flex .vjs-menu-button-inline{width:12em}.vjs-menu-button-inline .vjs-menu{opacity:0;height:100%;width:auto;position:absolute;left:4em;top:0;padding:0;margin:0;transition:all .4s}.vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-menu-button-inline:focus .vjs-menu,.vjs-menu-button-inline:hover .vjs-menu{display:block;opacity:1}.vjs-no-flex .vjs-menu-button-inline .vjs-menu{display:block;opacity:1;position:relative;width:auto}.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu,.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu{width:auto}.vjs-menu-button-inline .vjs-menu-content{width:auto;height:100%;margin:0;overflow:hidden}.video-js .vjs-control-bar{display:none;width:100%;position:absolute;bottom:0;left:0;right:0;height:3em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.vjs-has-started .vjs-control-bar{display:flex;visibility:visible;opacity:1;transition:visibility .1s,opacity .1s}.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{visibility:visible;opacity:0;pointer-events:none;transition:visibility 1s,opacity 1s}.vjs-controls-disabled .vjs-control-bar,.vjs-error .vjs-control-bar,.vjs-using-native-controls .vjs-control-bar{display:none!important}.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar{opacity:1;visibility:visible}.vjs-has-started.vjs-no-flex .vjs-control-bar{display:table}.video-js .vjs-control{position:relative;text-align:center;margin:0;padding:0;height:100%;width:4em;flex:none}.vjs-button>.vjs-icon-placeholder:before{font-size:1.8em;line-height:1.67}.vjs-button>.vjs-icon-placeholder{display:block}.video-js .vjs-control:focus,.video-js .vjs-control:focus:before,.video-js .vjs-control:hover:before{text-shadow:0 0 1em #fff}.video-js .vjs-control-text{border:0;clip:rect(0 0 0 0);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.vjs-no-flex .vjs-control{display:table-cell;vertical-align:middle}.video-js .vjs-custom-control-spacer{display:none}.video-js .vjs-progress-control{cursor:pointer;flex:auto;display:flex;align-items:center;min-width:4em;touch-action:none}.video-js .vjs-progress-control.disabled{cursor:default}.vjs-live .vjs-progress-control{display:none}.vjs-liveui .vjs-progress-control{display:flex;align-items:center}.vjs-no-flex .vjs-progress-control{width:auto}.video-js .vjs-progress-holder{flex:auto;transition:all .2s;height:.3em}.video-js .vjs-progress-control .vjs-progress-holder{margin:0 10px}.video-js .vjs-progress-control:hover .vjs-progress-holder{font-size:1.6666666667em}.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled{font-size:1em}.video-js .vjs-progress-holder .vjs-load-progress,.video-js .vjs-progress-holder .vjs-load-progress div,.video-js .vjs-progress-holder .vjs-play-progress{position:absolute;display:block;height:100%;margin:0;padding:0;width:0}.video-js .vjs-play-progress{background-color:#fff}.video-js .vjs-play-progress:before{font-size:.9em;position:absolute;right:-.5em;top:-.3333333333em;z-index:1}.video-js .vjs-load-progress{background:rgba(115,133,159,.5)}.video-js .vjs-load-progress div{background:rgba(115,133,159,.75)}.video-js .vjs-time-tooltip{background-color:#fff;background-color:rgba(255,255,255,.8);border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-progress-holder:focus .vjs-time-tooltip{display:none}.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip,.video-js .vjs-progress-control:hover .vjs-time-tooltip{display:block;font-size:.6em;visibility:visible}.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip{font-size:1em}.video-js .vjs-progress-control .vjs-mouse-display{display:none;position:absolute;width:1px;height:100%;background-color:#000;z-index:1}.vjs-no-flex .vjs-progress-control .vjs-mouse-display{z-index:0}.video-js .vjs-progress-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-time-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.video-js .vjs-slider{position:relative;cursor:pointer;padding:0;margin:0 .45em 0 .45em;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#73859f;background-color:rgba(115,133,159,.5)}.video-js .vjs-slider.disabled{cursor:default}.video-js .vjs-slider:focus{text-shadow:0 0 1em #fff;box-shadow:0 0 1em #fff}.video-js .vjs-mute-control{cursor:pointer;flex:none}.video-js .vjs-volume-control{cursor:pointer;margin-right:1em;display:flex}.video-js .vjs-volume-control.vjs-volume-horizontal{width:5em}.video-js .vjs-volume-panel .vjs-volume-control{visibility:visible;opacity:0;width:1px;height:1px;margin-left:-1px}.video-js .vjs-volume-panel{transition:width 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active,.video-js .vjs-volume-panel .vjs-volume-control:active,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control,.video-js .vjs-volume-panel:active .vjs-volume-control,.video-js .vjs-volume-panel:focus .vjs-volume-control{visibility:visible;opacity:1;position:relative;transition:visibility .1s,opacity .1s,height .1s,width .1s,left 0s,top 0s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;margin-right:0}.video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical,.video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-mute-control~.vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical,.video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical{left:-3.5em;transition:left 0s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active{width:10em;transition:width .1s}.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only{width:4em}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{height:8em;width:3em;left:-3000em;transition:visibility 1s,opacity 1s,height 1s 1s,width 1s 1s,left 1s 1s,top 1s 1s}.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{transition:visibility 1s,opacity 1s,height 1s 1s,width 1s,left 1s 1s,top 1s 1s}.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal{width:5em;height:3em;visibility:visible;opacity:1;position:relative;transition:none}.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical,.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical{position:absolute;bottom:3em;left:.5em}.video-js .vjs-volume-panel{display:flex}.video-js .vjs-volume-bar{margin:1.35em .45em}.vjs-volume-bar.vjs-slider-horizontal{width:5em;height:.3em}.vjs-volume-bar.vjs-slider-vertical{width:.3em;height:5em;margin:1.35em auto}.video-js .vjs-volume-level{position:absolute;bottom:0;left:0;background-color:#fff}.video-js .vjs-volume-level:before{position:absolute;font-size:.9em;z-index:1}.vjs-slider-vertical .vjs-volume-level{width:.3em}.vjs-slider-vertical .vjs-volume-level:before{top:-.5em;left:-.3em;z-index:1}.vjs-slider-horizontal .vjs-volume-level{height:.3em}.vjs-slider-horizontal .vjs-volume-level:before{top:-.3em;right:-.5em}.video-js .vjs-volume-panel.vjs-volume-panel-vertical{width:4em}.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level{height:100%}.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level{width:100%}.video-js .vjs-volume-vertical{width:3em;height:8em;bottom:8em;background-color:#2b333f;background-color:rgba(43,51,63,.7)}.video-js .vjs-volume-horizontal .vjs-menu{left:-2em}.video-js .vjs-volume-tooltip{background-color:#fff;background-color:rgba(255,255,255,.8);border-radius:.3em;color:#000;float:right;font-family:Arial,Helvetica,sans-serif;font-size:1em;padding:6px 8px 8px 8px;pointer-events:none;position:absolute;top:-3.4em;visibility:hidden;z-index:1}.video-js .vjs-volume-control:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-control:hover .vjs-volume-tooltip{display:block;font-size:1em;visibility:visible}.video-js .vjs-volume-vertical:hover .vjs-progress-holder:focus .vjs-volume-tooltip,.video-js .vjs-volume-vertical:hover .vjs-volume-tooltip{left:1em;top:-12px}.video-js .vjs-volume-control.disabled:hover .vjs-volume-tooltip{font-size:1em}.video-js .vjs-volume-control .vjs-mouse-display{display:none;position:absolute;width:100%;height:1px;background-color:#000;z-index:1}.video-js .vjs-volume-horizontal .vjs-mouse-display{width:1px;height:100%}.vjs-no-flex .vjs-volume-control .vjs-mouse-display{z-index:0}.video-js .vjs-volume-control:hover .vjs-mouse-display{display:block}.video-js.vjs-user-inactive .vjs-volume-control .vjs-mouse-display{visibility:hidden;opacity:0;transition:visibility 1s,opacity 1s}.video-js.vjs-user-inactive.vjs-no-flex .vjs-volume-control .vjs-mouse-display{display:none}.vjs-mouse-display .vjs-volume-tooltip{color:#fff;background-color:#000;background-color:rgba(0,0,0,.8)}.vjs-poster{display:inline-block;vertical-align:middle;background-repeat:no-repeat;background-position:50% 50%;background-size:contain;background-color:#000;cursor:pointer;margin:0;padding:0;position:absolute;top:0;right:0;bottom:0;left:0;height:100%}.vjs-has-started .vjs-poster{display:none}.vjs-audio.vjs-has-started .vjs-poster{display:block}.vjs-using-native-controls .vjs-poster{display:none}.video-js .vjs-live-control{display:flex;align-items:flex-start;flex:auto;font-size:1em;line-height:3em}.vjs-no-flex .vjs-live-control{display:table-cell;width:auto;text-align:left}.video-js.vjs-liveui .vjs-live-control,.video-js:not(.vjs-live) .vjs-live-control{display:none}.video-js .vjs-seek-to-live-control{align-items:center;cursor:pointer;flex:none;display:inline-flex;height:100%;padding-left:.5em;padding-right:.5em;font-size:1em;line-height:3em;width:auto;min-width:4em}.vjs-no-flex .vjs-seek-to-live-control{display:table-cell;width:auto;text-align:left}.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control,.video-js:not(.vjs-live) .vjs-seek-to-live-control{display:none}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge{cursor:auto}.vjs-seek-to-live-control .vjs-icon-placeholder{margin-right:.5em;color:#888}.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder{color:red}.video-js .vjs-time-control{flex:none;font-size:1em;line-height:3em;min-width:2em;width:auto;padding-left:1em;padding-right:1em}.vjs-live .vjs-time-control{display:none}.video-js .vjs-current-time,.vjs-no-flex .vjs-current-time{display:none}.video-js .vjs-duration,.vjs-no-flex .vjs-duration{display:none}.vjs-time-divider{display:none;line-height:3em}.vjs-live .vjs-time-divider{display:none}.video-js .vjs-play-control{cursor:pointer}.video-js .vjs-play-control .vjs-icon-placeholder{flex:none}.vjs-text-track-display{position:absolute;bottom:3em;left:0;right:0;top:0;pointer-events:none}.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display{bottom:1em}.video-js .vjs-text-track{font-size:1.4em;text-align:center;margin-bottom:.1em}.vjs-subtitles{color:#fff}.vjs-captions{color:#fc6}.vjs-tt-cue{display:block}video::-webkit-media-text-track-display{transform:translateY(-3em)}.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display{transform:translateY(-1.5em)}.video-js .vjs-picture-in-picture-control{cursor:pointer;flex:none}.video-js .vjs-fullscreen-control{cursor:pointer;flex:none}.vjs-playback-rate .vjs-playback-rate-value,.vjs-playback-rate>.vjs-menu-button{position:absolute;top:0;left:0;width:100%;height:100%}.vjs-playback-rate .vjs-playback-rate-value{pointer-events:none;font-size:1.5em;line-height:2;text-align:center}.vjs-playback-rate .vjs-menu{width:4em;left:0}.vjs-error .vjs-error-display .vjs-modal-dialog-content{font-size:1.4em;text-align:center}.vjs-error .vjs-error-display:before{color:#fff;content:"X";font-family:Arial,Helvetica,sans-serif;font-size:4em;left:0;line-height:1;margin-top:-.5em;position:absolute;text-shadow:.05em .05em .1em #000;text-align:center;top:50%;vertical-align:middle;width:100%}.vjs-loading-spinner{display:none;position:absolute;top:50%;left:50%;margin:-25px 0 0 -25px;opacity:.85;text-align:left;border:6px solid rgba(43,51,63,.7);box-sizing:border-box;background-clip:padding-box;width:50px;height:50px;border-radius:25px;visibility:hidden}.vjs-seeking .vjs-loading-spinner,.vjs-waiting .vjs-loading-spinner{display:block;-webkit-animation:vjs-spinner-show 0s linear .3s forwards;animation:vjs-spinner-show 0s linear .3s forwards}.vjs-loading-spinner:after,.vjs-loading-spinner:before{content:"";position:absolute;margin:-6px;box-sizing:inherit;width:inherit;height:inherit;border-radius:inherit;opacity:1;border:inherit;border-color:transparent;border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:before{-webkit-animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite;animation:vjs-spinner-spin 1.1s cubic-bezier(.6,.2,0,.8) infinite,vjs-spinner-fade 1.1s linear infinite}.vjs-seeking .vjs-loading-spinner:before,.vjs-waiting .vjs-loading-spinner:before{border-top-color:#fff}.vjs-seeking .vjs-loading-spinner:after,.vjs-waiting .vjs-loading-spinner:after{border-top-color:#fff;-webkit-animation-delay:.44s;animation-delay:.44s}@keyframes vjs-spinner-show{to{visibility:visible}}@-webkit-keyframes vjs-spinner-show{to{visibility:visible}}@keyframes vjs-spinner-spin{100%{transform:rotate(360deg)}}@-webkit-keyframes vjs-spinner-spin{100%{-webkit-transform:rotate(360deg)}}@keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}@-webkit-keyframes vjs-spinner-fade{0%{border-top-color:#73859f}20%{border-top-color:#73859f}35%{border-top-color:#fff}60%{border-top-color:#73859f}100%{border-top-color:#73859f}}.vjs-chapters-button .vjs-menu ul{width:24em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-subs-caps-button+.vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:"";font-size:1.5em;line-height:inherit}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder{vertical-align:middle;display:inline-block;margin-bottom:-.1em}.video-js .vjs-audio-button+.vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before{font-family:VideoJS;content:" ";font-size:1.5em;line-height:inherit}.video-js.vjs-layout-small .vjs-audio-button,.video-js.vjs-layout-small .vjs-captions-button,.video-js.vjs-layout-small .vjs-chapters-button,.video-js.vjs-layout-small .vjs-current-time,.video-js.vjs-layout-small .vjs-descriptions-button,.video-js.vjs-layout-small .vjs-duration,.video-js.vjs-layout-small .vjs-playback-rate,.video-js.vjs-layout-small .vjs-remaining-time,.video-js.vjs-layout-small .vjs-subtitles-button,.video-js.vjs-layout-small .vjs-time-divider,.video-js.vjs-layout-small .vjs-volume-control,.video-js.vjs-layout-tiny .vjs-audio-button,.video-js.vjs-layout-tiny .vjs-captions-button,.video-js.vjs-layout-tiny .vjs-chapters-button,.video-js.vjs-layout-tiny .vjs-current-time,.video-js.vjs-layout-tiny .vjs-descriptions-button,.video-js.vjs-layout-tiny .vjs-duration,.video-js.vjs-layout-tiny .vjs-playback-rate,.video-js.vjs-layout-tiny .vjs-remaining-time,.video-js.vjs-layout-tiny .vjs-subtitles-button,.video-js.vjs-layout-tiny .vjs-time-divider,.video-js.vjs-layout-tiny .vjs-volume-control,.video-js.vjs-layout-x-small .vjs-audio-button,.video-js.vjs-layout-x-small .vjs-captions-button,.video-js.vjs-layout-x-small .vjs-chapters-button,.video-js.vjs-layout-x-small .vjs-current-time,.video-js.vjs-layout-x-small .vjs-descriptions-button,.video-js.vjs-layout-x-small .vjs-duration,.video-js.vjs-layout-x-small .vjs-playback-rate,.video-js.vjs-layout-x-small .vjs-remaining-time,.video-js.vjs-layout-x-small .vjs-subtitles-button,.video-js.vjs-layout-x-small .vjs-time-divider,.video-js.vjs-layout-x-small .vjs-volume-control{display:none!important}.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active,.video-js.vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover{width:auto;width:initial}.video-js.vjs-layout-tiny .vjs-subs-caps-button,.video-js.vjs-layout-x-small:not(.vjs-live) .vjs-subs-caps-button,.video-js.vjs-layout-x-small:not(.vjs-liveui) .vjs-subs-caps-button{display:none}.video-js.vjs-layout-tiny .vjs-custom-control-spacer,.video-js.vjs-layout-x-small.vjs-liveui .vjs-custom-control-spacer{flex:auto;display:block}.video-js.vjs-layout-tiny.vjs-no-flex .vjs-custom-control-spacer,.video-js.vjs-layout-x-small.vjs-liveui.vjs-no-flex .vjs-custom-control-spacer{width:auto}.video-js.vjs-layout-tiny .vjs-progress-control,.video-js.vjs-layout-x-small.vjs-liveui .vjs-progress-control{display:none}.vjs-modal-dialog.vjs-text-track-settings{background-color:#2b333f;background-color:rgba(43,51,63,.75);color:#fff;height:70%}.vjs-text-track-settings .vjs-modal-dialog-content{display:table}.vjs-text-track-settings .vjs-track-settings-colors,.vjs-text-track-settings .vjs-track-settings-controls,.vjs-text-track-settings .vjs-track-settings-font{display:table-cell}.vjs-text-track-settings .vjs-track-settings-controls{text-align:right;vertical-align:bottom}@supports (display:grid){.vjs-text-track-settings .vjs-modal-dialog-content{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr;padding:20px 24px 0 24px}.vjs-track-settings-controls .vjs-default-button{margin-bottom:20px}.vjs-text-track-settings .vjs-track-settings-controls{grid-column:1/-1}.vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content,.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content{grid-template-columns:1fr}}.vjs-track-setting>select{margin-right:1em;margin-bottom:.5em}.vjs-text-track-settings fieldset{margin:5px;padding:3px;border:none}.vjs-text-track-settings fieldset span{display:inline-block}.vjs-text-track-settings fieldset span>select{max-width:7.3em}.vjs-text-track-settings legend{color:#fff;margin:0 0 5px 0}.vjs-text-track-settings .vjs-label{position:absolute;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px);display:block;margin:0 0 5px 0;padding:0;border:0;height:1px;width:1px;overflow:hidden}.vjs-track-settings-controls button:active,.vjs-track-settings-controls button:focus{outline-style:solid;outline-width:medium;background-image:linear-gradient(0deg,#fff 88%,#73859f 100%)}.vjs-track-settings-controls button:hover{color:rgba(43,51,63,.75)}.vjs-track-settings-controls button{background-color:#fff;background-image:linear-gradient(-180deg,#fff 88%,#73859f 100%);color:#2b333f;cursor:pointer;border-radius:2px}.vjs-track-settings-controls .vjs-default-button{margin-right:1em}@media print{.video-js>:not(.vjs-tech):not(.vjs-poster){visibility:hidden}}.vjs-resize-manager{position:absolute;top:0;left:0;width:100%;height:100%;border:none;z-index:-1000}.js-focus-visible .video-js :focus:not(.focus-visible){outline:0}.video-js :focus:not(:focus-visible){outline:0} \ No newline at end of file diff --git a/video-js/alt/video.core.js b/video-js/alt/video.core.js new file mode 100644 index 0000000..3d6a66f --- /dev/null +++ b/video-js/alt/video.core.js @@ -0,0 +1,30774 @@ +/** + * @license + * Video.js 7.15.4 + * Copyright Brightcove, Inc. + * Available under Apache License Version 2.0 + * + * + * Includes vtt.js + * Available under Apache License Version 2.0 + * + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.videojs = factory()); +}(this, (function () { 'use strict'; + + var version = "7.15.4"; + + var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + 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; + + /** + * An Object that contains lifecycle hooks as keys which point to an array + * of functions that are run when a lifecycle is triggered + * + * @private + */ + var hooks_ = {}; + /** + * Get a list of hooks for a specific lifecycle + * + * @param {string} type + * the lifecyle to get hooks from + * + * @param {Function|Function[]} [fn] + * Optionally add a hook (or hooks) to the lifecycle that your are getting. + * + * @return {Array} + * an array of hooks, or an empty array if there are none. + */ + + var hooks = function hooks(type, fn) { + hooks_[type] = hooks_[type] || []; + + if (fn) { + hooks_[type] = hooks_[type].concat(fn); + } + + return hooks_[type]; + }; + /** + * Add a function hook to a specific videojs lifecycle. + * + * @param {string} type + * the lifecycle to hook the function to. + * + * @param {Function|Function[]} + * The function or array of functions to attach. + */ + + + var hook = function hook(type, fn) { + hooks(type, fn); + }; + /** + * Remove a hook from a specific videojs lifecycle. + * + * @param {string} type + * the lifecycle that the function hooked to + * + * @param {Function} fn + * The hooked function to remove + * + * @return {boolean} + * The function that was removed or undef + */ + + + var removeHook = function removeHook(type, fn) { + var index = hooks(type).indexOf(fn); + + if (index <= -1) { + return false; + } + + hooks_[type] = hooks_[type].slice(); + hooks_[type].splice(index, 1); + return true; + }; + /** + * Add a function hook that will only run once to a specific videojs lifecycle. + * + * @param {string} type + * the lifecycle to hook the function to. + * + * @param {Function|Function[]} + * The function or array of functions to attach. + */ + + + var hookOnce = function hookOnce(type, fn) { + hooks(type, [].concat(fn).map(function (original) { + var wrapper = function wrapper() { + removeHook(type, wrapper); + return original.apply(void 0, arguments); + }; + + return wrapper; + })); + }; + + var minDoc = {}; + + var topLevel = typeof commonjsGlobal !== 'undefined' ? commonjsGlobal : typeof window !== 'undefined' ? window : {}; + var doccy; + + if (typeof document !== 'undefined') { + doccy = document; + } else { + doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4']; + + if (!doccy) { + doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc; + } + } + + var document_1 = doccy; + + /** + * @file fullscreen-api.js + * @module fullscreen-api + * @private + */ + /** + * Store the browser-specific methods for the fullscreen API. + * + * @type {Object} + * @see [Specification]{@link https://fullscreen.spec.whatwg.org} + * @see [Map Approach From Screenfull.js]{@link https://github.com/sindresorhus/screenfull.js} + */ + + var FullscreenApi = { + prefixed: true + }; // browser API methods + + var apiMap = [['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror', 'fullscreen'], // WebKit + ['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror', '-webkit-full-screen'], // Mozilla + ['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror', '-moz-full-screen'], // Microsoft + ['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError', '-ms-fullscreen']]; + var specApi = apiMap[0]; + var browserApi; // determine the supported set of functions + + for (var i = 0; i < apiMap.length; i++) { + // check for exitFullscreen function + if (apiMap[i][1] in document_1) { + browserApi = apiMap[i]; + break; + } + } // map the browser API names to the spec API names + + + if (browserApi) { + for (var _i = 0; _i < browserApi.length; _i++) { + FullscreenApi[specApi[_i]] = browserApi[_i]; + } + + FullscreenApi.prefixed = browserApi[0] !== specApi[0]; + } + + /** + * @file create-logger.js + * @module create-logger + */ + + var history = []; + /** + * Log messages to the console and history based on the type of message + * + * @private + * @param {string} type + * The name of the console method to use. + * + * @param {Array} args + * The arguments to be passed to the matching console method. + */ + + var LogByTypeFactory = function LogByTypeFactory(name, log) { + return function (type, level, args) { + var lvl = log.levels[level]; + var lvlRegExp = new RegExp("^(" + lvl + ")$"); + + if (type !== 'log') { + // Add the type to the front of the message when it's not "log". + args.unshift(type.toUpperCase() + ':'); + } // Add console prefix after adding to history. + + + args.unshift(name + ':'); // Add a clone of the args at this point to history. + + if (history) { + history.push([].concat(args)); // only store 1000 history entries + + var splice = history.length - 1000; + history.splice(0, splice > 0 ? splice : 0); + } // If there's no console then don't try to output messages, but they will + // still be stored in history. + + + if (!window_1.console) { + return; + } // Was setting these once outside of this function, but containing them + // in the function makes it easier to test cases where console doesn't exist + // when the module is executed. + + + var fn = window_1.console[type]; + + if (!fn && type === 'debug') { + // Certain browsers don't have support for console.debug. For those, we + // should default to the closest comparable log. + fn = window_1.console.info || window_1.console.log; + } // Bail out if there's no console or if this type is not allowed by the + // current logging level. + + + if (!fn || !lvl || !lvlRegExp.test(type)) { + return; + } + + fn[Array.isArray(args) ? 'apply' : 'call'](window_1.console, args); + }; + }; + + function createLogger$1(name) { + // This is the private tracking variable for logging level. + var level = 'info'; // the curried logByType bound to the specific log and history + + var logByType; + /** + * Logs plain debug messages. Similar to `console.log`. + * + * Due to [limitations](https://github.com/jsdoc3/jsdoc/issues/955#issuecomment-313829149) + * of our JSDoc template, we cannot properly document this as both a function + * and a namespace, so its function signature is documented here. + * + * #### Arguments + * ##### *args + * Mixed[] + * + * Any combination of values that could be passed to `console.log()`. + * + * #### Return Value + * + * `undefined` + * + * @namespace + * @param {Mixed[]} args + * One or more messages or objects that should be logged. + */ + + var log = function log() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + logByType('log', level, args); + }; // This is the logByType helper that the logging methods below use + + + logByType = LogByTypeFactory(name, log); + /** + * Create a new sublogger which chains the old name to the new name. + * + * For example, doing `videojs.log.createLogger('player')` and then using that logger will log the following: + * ```js + * mylogger('foo'); + * // > VIDEOJS: player: foo + * ``` + * + * @param {string} name + * The name to add call the new logger + * @return {Object} + */ + + log.createLogger = function (subname) { + return createLogger$1(name + ': ' + subname); + }; + /** + * Enumeration of available logging levels, where the keys are the level names + * and the values are `|`-separated strings containing logging methods allowed + * in that logging level. These strings are used to create a regular expression + * matching the function name being called. + * + * Levels provided by Video.js are: + * + * - `off`: Matches no calls. Any value that can be cast to `false` will have + * this effect. The most restrictive. + * - `all`: Matches only Video.js-provided functions (`debug`, `log`, + * `log.warn`, and `log.error`). + * - `debug`: Matches `log.debug`, `log`, `log.warn`, and `log.error` calls. + * - `info` (default): Matches `log`, `log.warn`, and `log.error` calls. + * - `warn`: Matches `log.warn` and `log.error` calls. + * - `error`: Matches only `log.error` calls. + * + * @type {Object} + */ + + + log.levels = { + all: 'debug|log|warn|error', + off: '', + debug: 'debug|log|warn|error', + info: 'log|warn|error', + warn: 'warn|error', + error: 'error', + DEFAULT: level + }; + /** + * Get or set the current logging level. + * + * If a string matching a key from {@link module:log.levels} is provided, acts + * as a setter. + * + * @param {string} [lvl] + * Pass a valid level to set a new logging level. + * + * @return {string} + * The current logging level. + */ + + log.level = function (lvl) { + if (typeof lvl === 'string') { + if (!log.levels.hasOwnProperty(lvl)) { + throw new Error("\"" + lvl + "\" in not a valid log level"); + } + + level = lvl; + } + + return level; + }; + /** + * Returns an array containing everything that has been logged to the history. + * + * This array is a shallow clone of the internal history record. However, its + * contents are _not_ cloned; so, mutating objects inside this array will + * mutate them in history. + * + * @return {Array} + */ + + + log.history = function () { + return history ? [].concat(history) : []; + }; + /** + * Allows you to filter the history by the given logger name + * + * @param {string} fname + * The name to filter by + * + * @return {Array} + * The filtered list to return + */ + + + log.history.filter = function (fname) { + return (history || []).filter(function (historyItem) { + // if the first item in each historyItem includes `fname`, then it's a match + return new RegExp(".*" + fname + ".*").test(historyItem[0]); + }); + }; + /** + * Clears the internal history tracking, but does not prevent further history + * tracking. + */ + + + log.history.clear = function () { + if (history) { + history.length = 0; + } + }; + /** + * Disable history tracking if it is currently enabled. + */ + + + log.history.disable = function () { + if (history !== null) { + history.length = 0; + history = null; + } + }; + /** + * Enable history tracking if it is currently disabled. + */ + + + log.history.enable = function () { + if (history === null) { + history = []; + } + }; + /** + * Logs error messages. Similar to `console.error`. + * + * @param {Mixed[]} args + * One or more messages or objects that should be logged as an error + */ + + + log.error = function () { + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + return logByType('error', level, args); + }; + /** + * Logs warning messages. Similar to `console.warn`. + * + * @param {Mixed[]} args + * One or more messages or objects that should be logged as a warning. + */ + + + log.warn = function () { + for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + args[_key3] = arguments[_key3]; + } + + return logByType('warn', level, args); + }; + /** + * Logs debug messages. Similar to `console.debug`, but may also act as a comparable + * log if `console.debug` is not available + * + * @param {Mixed[]} args + * One or more messages or objects that should be logged as debug. + */ + + + log.debug = function () { + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + return logByType('debug', level, args); + }; + + return log; + } + + /** + * @file log.js + * @module log + */ + var log = createLogger$1('VIDEOJS'); + var createLogger = log.createLogger; + + var _extends_1 = createCommonjsModule(function (module) { + function _extends() { + module.exports = _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); + } + + module.exports = _extends; + }); + + /** + * @file obj.js + * @module obj + */ + + /** + * @callback obj:EachCallback + * + * @param {Mixed} value + * The current key for the object that is being iterated over. + * + * @param {string} key + * The current key-value for object that is being iterated over + */ + + /** + * @callback obj:ReduceCallback + * + * @param {Mixed} accum + * The value that is accumulating over the reduce loop. + * + * @param {Mixed} value + * The current key for the object that is being iterated over. + * + * @param {string} key + * The current key-value for object that is being iterated over + * + * @return {Mixed} + * The new accumulated value. + */ + var toString$1 = Object.prototype.toString; + /** + * Get the keys of an Object + * + * @param {Object} + * The Object to get the keys from + * + * @return {string[]} + * An array of the keys from the object. Returns an empty array if the + * object passed in was invalid or had no keys. + * + * @private + */ + + var keys = function keys(object) { + return isObject(object) ? Object.keys(object) : []; + }; + /** + * Array-like iteration for objects. + * + * @param {Object} object + * The object to iterate over + * + * @param {obj:EachCallback} fn + * The callback function which is called for each key in the object. + */ + + + function each(object, fn) { + keys(object).forEach(function (key) { + return fn(object[key], key); + }); + } + /** + * Array-like reduce for objects. + * + * @param {Object} object + * The Object that you want to reduce. + * + * @param {Function} fn + * A callback function which is called for each key in the object. It + * receives the accumulated value and the per-iteration value and key + * as arguments. + * + * @param {Mixed} [initial = 0] + * Starting value + * + * @return {Mixed} + * The final accumulated value. + */ + + function reduce(object, fn, initial) { + if (initial === void 0) { + initial = 0; + } + + return keys(object).reduce(function (accum, key) { + return fn(accum, object[key], key); + }, initial); + } + /** + * Object.assign-style object shallow merge/extend. + * + * @param {Object} target + * @param {Object} ...sources + * @return {Object} + */ + + function assign(target) { + for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + sources[_key - 1] = arguments[_key]; + } + + if (Object.assign) { + return _extends_1.apply(void 0, [target].concat(sources)); + } + + sources.forEach(function (source) { + if (!source) { + return; + } + + each(source, function (value, key) { + target[key] = value; + }); + }); + return target; + } + /** + * Returns whether a value is an object of any kind - including DOM nodes, + * arrays, regular expressions, etc. Not functions, though. + * + * This avoids the gotcha where using `typeof` on a `null` value + * results in `'object'`. + * + * @param {Object} value + * @return {boolean} + */ + + function isObject(value) { + return !!value && typeof value === 'object'; + } + /** + * Returns whether an object appears to be a "plain" object - that is, a + * direct instance of `Object`. + * + * @param {Object} value + * @return {boolean} + */ + + function isPlain(value) { + return isObject(value) && toString$1.call(value) === '[object Object]' && value.constructor === Object; + } + + /** + * @file computed-style.js + * @module computed-style + */ + /** + * A safe getComputedStyle. + * + * This is needed because in Firefox, if the player is loaded in an iframe with + * `display:none`, then `getComputedStyle` returns `null`, so, we do a + * null-check to make sure that the player doesn't break in these cases. + * + * @function + * @param {Element} el + * The element you want the computed style of + * + * @param {string} prop + * The property name you want + * + * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + */ + + function computedStyle(el, prop) { + if (!el || !prop) { + return ''; + } + + if (typeof window_1.getComputedStyle === 'function') { + var computedStyleValue; + + try { + computedStyleValue = window_1.getComputedStyle(el); + } catch (e) { + return ''; + } + + return computedStyleValue ? computedStyleValue.getPropertyValue(prop) || computedStyleValue[prop] : ''; + } + + return ''; + } + + /** + * @file browser.js + * @module browser + */ + var USER_AGENT = window_1.navigator && window_1.navigator.userAgent || ''; + var webkitVersionMap = /AppleWebKit\/([\d.]+)/i.exec(USER_AGENT); + var appleWebkitVersion = webkitVersionMap ? parseFloat(webkitVersionMap.pop()) : null; + /** + * Whether or not this device is an iPod. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_IPOD = /iPod/i.test(USER_AGENT); + /** + * The detected iOS version - or `null`. + * + * @static + * @const + * @type {string|null} + */ + + var IOS_VERSION = function () { + var match = USER_AGENT.match(/OS (\d+)_/i); + + if (match && match[1]) { + return match[1]; + } + + return null; + }(); + /** + * Whether or not this is an Android device. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_ANDROID = /Android/i.test(USER_AGENT); + /** + * The detected Android version - or `null`. + * + * @static + * @const + * @type {number|string|null} + */ + + var ANDROID_VERSION = function () { + // This matches Android Major.Minor.Patch versions + // ANDROID_VERSION is Major.Minor as a Number, if Minor isn't available, then only Major is returned + var match = USER_AGENT.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); + + if (!match) { + return null; + } + + var major = match[1] && parseFloat(match[1]); + var minor = match[2] && parseFloat(match[2]); + + if (major && minor) { + return parseFloat(match[1] + '.' + match[2]); + } else if (major) { + return major; + } + + return null; + }(); + /** + * Whether or not this is a native Android browser. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_NATIVE_ANDROID = IS_ANDROID && ANDROID_VERSION < 5 && appleWebkitVersion < 537; + /** + * Whether or not this is Mozilla Firefox. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_FIREFOX = /Firefox/i.test(USER_AGENT); + /** + * Whether or not this is Microsoft Edge. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_EDGE = /Edg/i.test(USER_AGENT); + /** + * Whether or not this is Google Chrome. + * + * This will also be `true` for Chrome on iOS, which will have different support + * as it is actually Safari under the hood. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_CHROME = !IS_EDGE && (/Chrome/i.test(USER_AGENT) || /CriOS/i.test(USER_AGENT)); + /** + * The detected Google Chrome version - or `null`. + * + * @static + * @const + * @type {number|null} + */ + + var CHROME_VERSION = function () { + var match = USER_AGENT.match(/(Chrome|CriOS)\/(\d+)/); + + if (match && match[2]) { + return parseFloat(match[2]); + } + + return null; + }(); + /** + * The detected Internet Explorer version - or `null`. + * + * @static + * @const + * @type {number|null} + */ + + var IE_VERSION = function () { + var result = /MSIE\s(\d+)\.\d/.exec(USER_AGENT); + var version = result && parseFloat(result[1]); + + if (!version && /Trident\/7.0/i.test(USER_AGENT) && /rv:11.0/.test(USER_AGENT)) { + // IE 11 has a different user agent string than other IE versions + version = 11.0; + } + + return version; + }(); + /** + * Whether or not this is desktop Safari. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_SAFARI = /Safari/i.test(USER_AGENT) && !IS_CHROME && !IS_ANDROID && !IS_EDGE; + /** + * Whether or not this is a Windows machine. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_WINDOWS = /Windows/i.test(USER_AGENT); + /** + * Whether or not this device is touch-enabled. + * + * @static + * @const + * @type {Boolean} + */ + + var TOUCH_ENABLED = Boolean(isReal() && ('ontouchstart' in window_1 || window_1.navigator.maxTouchPoints || window_1.DocumentTouch && window_1.document instanceof window_1.DocumentTouch)); + /** + * Whether or not this device is an iPad. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_IPAD = /iPad/i.test(USER_AGENT) || IS_SAFARI && TOUCH_ENABLED && !/iPhone/i.test(USER_AGENT); + /** + * Whether or not this device is an iPhone. + * + * @static + * @const + * @type {Boolean} + */ + // The Facebook app's UIWebView identifies as both an iPhone and iPad, so + // to identify iPhones, we need to exclude iPads. + // http://artsy.github.io/blog/2012/10/18/the-perils-of-ios-user-agent-sniffing/ + + var IS_IPHONE = /iPhone/i.test(USER_AGENT) && !IS_IPAD; + /** + * Whether or not this is an iOS device. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD; + /** + * Whether or not this is any flavor of Safari - including iOS. + * + * @static + * @const + * @type {Boolean} + */ + + var IS_ANY_SAFARI = (IS_SAFARI || IS_IOS) && !IS_CHROME; + + var browser = /*#__PURE__*/Object.freeze({ + __proto__: null, + IS_IPOD: IS_IPOD, + IOS_VERSION: IOS_VERSION, + IS_ANDROID: IS_ANDROID, + ANDROID_VERSION: ANDROID_VERSION, + IS_NATIVE_ANDROID: IS_NATIVE_ANDROID, + IS_FIREFOX: IS_FIREFOX, + IS_EDGE: IS_EDGE, + IS_CHROME: IS_CHROME, + CHROME_VERSION: CHROME_VERSION, + IE_VERSION: IE_VERSION, + IS_SAFARI: IS_SAFARI, + IS_WINDOWS: IS_WINDOWS, + TOUCH_ENABLED: TOUCH_ENABLED, + IS_IPAD: IS_IPAD, + IS_IPHONE: IS_IPHONE, + IS_IOS: IS_IOS, + IS_ANY_SAFARI: IS_ANY_SAFARI + }); + + /** + * @file dom.js + * @module dom + */ + /** + * Detect if a value is a string with any non-whitespace characters. + * + * @private + * @param {string} str + * The string to check + * + * @return {boolean} + * Will be `true` if the string is non-blank, `false` otherwise. + * + */ + + function isNonBlankString(str) { + // we use str.trim as it will trim any whitespace characters + // from the front or back of non-whitespace characters. aka + // Any string that contains non-whitespace characters will + // still contain them after `trim` but whitespace only strings + // will have a length of 0, failing this check. + return typeof str === 'string' && Boolean(str.trim()); + } + /** + * Throws an error if the passed string has whitespace. This is used by + * class methods to be relatively consistent with the classList API. + * + * @private + * @param {string} str + * The string to check for whitespace. + * + * @throws {Error} + * Throws an error if there is whitespace in the string. + */ + + + function throwIfWhitespace(str) { + // str.indexOf instead of regex because str.indexOf is faster performance wise. + if (str.indexOf(' ') >= 0) { + throw new Error('class has illegal whitespace characters'); + } + } + /** + * Produce a regular expression for matching a className within an elements className. + * + * @private + * @param {string} className + * The className to generate the RegExp for. + * + * @return {RegExp} + * The RegExp that will check for a specific `className` in an elements + * className. + */ + + + function classRegExp(className) { + return new RegExp('(^|\\s)' + className + '($|\\s)'); + } + /** + * Whether the current DOM interface appears to be real (i.e. not simulated). + * + * @return {boolean} + * Will be `true` if the DOM appears to be real, `false` otherwise. + */ + + + function isReal() { + // Both document and window will never be undefined thanks to `global`. + return document_1 === window_1.document; + } + /** + * Determines, via duck typing, whether or not a value is a DOM element. + * + * @param {Mixed} value + * The value to check. + * + * @return {boolean} + * Will be `true` if the value is a DOM element, `false` otherwise. + */ + + function isEl(value) { + return isObject(value) && value.nodeType === 1; + } + /** + * Determines if the current DOM is embedded in an iframe. + * + * @return {boolean} + * Will be `true` if the DOM is embedded in an iframe, `false` + * otherwise. + */ + + function isInFrame() { + // We need a try/catch here because Safari will throw errors when attempting + // to get either `parent` or `self` + try { + return window_1.parent !== window_1.self; + } catch (x) { + return true; + } + } + /** + * Creates functions to query the DOM using a given method. + * + * @private + * @param {string} method + * The method to create the query with. + * + * @return {Function} + * The query method + */ + + function createQuerier(method) { + return function (selector, context) { + if (!isNonBlankString(selector)) { + return document_1[method](null); + } + + if (isNonBlankString(context)) { + context = document_1.querySelector(context); + } + + var ctx = isEl(context) ? context : document_1; + return ctx[method] && ctx[method](selector); + }; + } + /** + * Creates an element and applies properties, attributes, and inserts content. + * + * @param {string} [tagName='div'] + * Name of tag to be created. + * + * @param {Object} [properties={}] + * Element properties to be applied. + * + * @param {Object} [attributes={}] + * Element attributes to be applied. + * + * @param {module:dom~ContentDescriptor} content + * A content descriptor object. + * + * @return {Element} + * The element that was created. + */ + + + function createEl(tagName, properties, attributes, content) { + if (tagName === void 0) { + tagName = 'div'; + } + + if (properties === void 0) { + properties = {}; + } + + if (attributes === void 0) { + attributes = {}; + } + + var el = document_1.createElement(tagName); + Object.getOwnPropertyNames(properties).forEach(function (propName) { + var val = properties[propName]; // See #2176 + // We originally were accepting both properties and attributes in the + // same object, but that doesn't work so well. + + if (propName.indexOf('aria-') !== -1 || propName === 'role' || propName === 'type') { + log.warn('Setting attributes in the second argument of createEl()\n' + 'has been deprecated. Use the third argument instead.\n' + ("createEl(type, properties, attributes). Attempting to set " + propName + " to " + val + ".")); + el.setAttribute(propName, val); // Handle textContent since it's not supported everywhere and we have a + // method for it. + } else if (propName === 'textContent') { + textContent(el, val); + } else if (el[propName] !== val || propName === 'tabIndex') { + el[propName] = val; + } + }); + Object.getOwnPropertyNames(attributes).forEach(function (attrName) { + el.setAttribute(attrName, attributes[attrName]); + }); + + if (content) { + appendContent(el, content); + } + + return el; + } + /** + * Injects text into an element, replacing any existing contents entirely. + * + * @param {Element} el + * The element to add text content into + * + * @param {string} text + * The text content to add. + * + * @return {Element} + * The element with added text content. + */ + + function textContent(el, text) { + if (typeof el.textContent === 'undefined') { + el.innerText = text; + } else { + el.textContent = text; + } + + return el; + } + /** + * Insert an element as the first child node of another + * + * @param {Element} child + * Element to insert + * + * @param {Element} parent + * Element to insert child into + */ + + function prependTo(child, parent) { + if (parent.firstChild) { + parent.insertBefore(child, parent.firstChild); + } else { + parent.appendChild(child); + } + } + /** + * Check if an element has a class name. + * + * @param {Element} element + * Element to check + * + * @param {string} classToCheck + * Class name to check for + * + * @return {boolean} + * Will be `true` if the element has a class, `false` otherwise. + * + * @throws {Error} + * Throws an error if `classToCheck` has white space. + */ + + function hasClass(element, classToCheck) { + throwIfWhitespace(classToCheck); + + if (element.classList) { + return element.classList.contains(classToCheck); + } + + return classRegExp(classToCheck).test(element.className); + } + /** + * Add a class name to an element. + * + * @param {Element} element + * Element to add class name to. + * + * @param {string} classToAdd + * Class name to add. + * + * @return {Element} + * The DOM element with the added class name. + */ + + function addClass(element, classToAdd) { + if (element.classList) { + element.classList.add(classToAdd); // Don't need to `throwIfWhitespace` here because `hasElClass` will do it + // in the case of classList not being supported. + } else if (!hasClass(element, classToAdd)) { + element.className = (element.className + ' ' + classToAdd).trim(); + } + + return element; + } + /** + * Remove a class name from an element. + * + * @param {Element} element + * Element to remove a class name from. + * + * @param {string} classToRemove + * Class name to remove + * + * @return {Element} + * The DOM element with class name removed. + */ + + function removeClass(element, classToRemove) { + // Protect in case the player gets disposed + if (!element) { + log.warn("removeClass was called with an element that doesn't exist"); + return null; + } + + if (element.classList) { + element.classList.remove(classToRemove); + } else { + throwIfWhitespace(classToRemove); + element.className = element.className.split(/\s+/).filter(function (c) { + return c !== classToRemove; + }).join(' '); + } + + return element; + } + /** + * The callback definition for toggleClass. + * + * @callback module:dom~PredicateCallback + * @param {Element} element + * The DOM element of the Component. + * + * @param {string} classToToggle + * The `className` that wants to be toggled + * + * @return {boolean|undefined} + * If `true` is returned, the `classToToggle` will be added to the + * `element`. If `false`, the `classToToggle` will be removed from + * the `element`. If `undefined`, the callback will be ignored. + */ + + /** + * Adds or removes a class name to/from an element depending on an optional + * condition or the presence/absence of the class name. + * + * @param {Element} element + * The element to toggle a class name on. + * + * @param {string} classToToggle + * The class that should be toggled. + * + * @param {boolean|module:dom~PredicateCallback} [predicate] + * See the return value for {@link module:dom~PredicateCallback} + * + * @return {Element} + * The element with a class that has been toggled. + */ + + function toggleClass(element, classToToggle, predicate) { + // This CANNOT use `classList` internally because IE11 does not support the + // second parameter to the `classList.toggle()` method! Which is fine because + // `classList` will be used by the add/remove functions. + var has = hasClass(element, classToToggle); + + if (typeof predicate === 'function') { + predicate = predicate(element, classToToggle); + } + + if (typeof predicate !== 'boolean') { + predicate = !has; + } // If the necessary class operation matches the current state of the + // element, no action is required. + + + if (predicate === has) { + return; + } + + if (predicate) { + addClass(element, classToToggle); + } else { + removeClass(element, classToToggle); + } + + return element; + } + /** + * Apply attributes to an HTML element. + * + * @param {Element} el + * Element to add attributes to. + * + * @param {Object} [attributes] + * Attributes to be applied. + */ + + function setAttributes(el, attributes) { + Object.getOwnPropertyNames(attributes).forEach(function (attrName) { + var attrValue = attributes[attrName]; + + if (attrValue === null || typeof attrValue === 'undefined' || attrValue === false) { + el.removeAttribute(attrName); + } else { + el.setAttribute(attrName, attrValue === true ? '' : attrValue); + } + }); + } + /** + * Get an element's attribute values, as defined on the HTML tag. + * + * Attributes are not the same as properties. They're defined on the tag + * or with setAttribute. + * + * @param {Element} tag + * Element from which to get tag attributes. + * + * @return {Object} + * All attributes of the element. Boolean attributes will be `true` or + * `false`, others will be strings. + */ + + function getAttributes(tag) { + var obj = {}; // known boolean attributes + // we can check for matching boolean properties, but not all browsers + // and not all tags know about these attributes, so, we still want to check them manually + + var knownBooleans = ',' + 'autoplay,controls,playsinline,loop,muted,default,defaultMuted' + ','; + + if (tag && tag.attributes && tag.attributes.length > 0) { + var attrs = tag.attributes; + + for (var i = attrs.length - 1; i >= 0; i--) { + var attrName = attrs[i].name; + var attrVal = attrs[i].value; // check for known booleans + // the matching element property will return a value for typeof + + if (typeof tag[attrName] === 'boolean' || knownBooleans.indexOf(',' + attrName + ',') !== -1) { + // the value of an included boolean attribute is typically an empty + // string ('') which would equal false if we just check for a false value. + // we also don't want support bad code like autoplay='false' + attrVal = attrVal !== null ? true : false; + } + + obj[attrName] = attrVal; + } + } + + return obj; + } + /** + * Get the value of an element's attribute. + * + * @param {Element} el + * A DOM element. + * + * @param {string} attribute + * Attribute to get the value of. + * + * @return {string} + * The value of the attribute. + */ + + function getAttribute(el, attribute) { + return el.getAttribute(attribute); + } + /** + * Set the value of an element's attribute. + * + * @param {Element} el + * A DOM element. + * + * @param {string} attribute + * Attribute to set. + * + * @param {string} value + * Value to set the attribute to. + */ + + function setAttribute(el, attribute, value) { + el.setAttribute(attribute, value); + } + /** + * Remove an element's attribute. + * + * @param {Element} el + * A DOM element. + * + * @param {string} attribute + * Attribute to remove. + */ + + function removeAttribute(el, attribute) { + el.removeAttribute(attribute); + } + /** + * Attempt to block the ability to select text. + */ + + function blockTextSelection() { + document_1.body.focus(); + + document_1.onselectstart = function () { + return false; + }; + } + /** + * Turn off text selection blocking. + */ + + function unblockTextSelection() { + document_1.onselectstart = function () { + return true; + }; + } + /** + * Identical to the native `getBoundingClientRect` function, but ensures that + * the method is supported at all (it is in all browsers we claim to support) + * and that the element is in the DOM before continuing. + * + * This wrapper function also shims properties which are not provided by some + * older browsers (namely, IE8). + * + * Additionally, some browsers do not support adding properties to a + * `ClientRect`/`DOMRect` object; so, we shallow-copy it with the standard + * properties (except `x` and `y` which are not widely supported). This helps + * avoid implementations where keys are non-enumerable. + * + * @param {Element} el + * Element whose `ClientRect` we want to calculate. + * + * @return {Object|undefined} + * Always returns a plain object - or `undefined` if it cannot. + */ + + function getBoundingClientRect(el) { + if (el && el.getBoundingClientRect && el.parentNode) { + var rect = el.getBoundingClientRect(); + var result = {}; + ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(function (k) { + if (rect[k] !== undefined) { + result[k] = rect[k]; + } + }); + + if (!result.height) { + result.height = parseFloat(computedStyle(el, 'height')); + } + + if (!result.width) { + result.width = parseFloat(computedStyle(el, 'width')); + } + + return result; + } + } + /** + * Represents the position of a DOM element on the page. + * + * @typedef {Object} module:dom~Position + * + * @property {number} left + * Pixels to the left. + * + * @property {number} top + * Pixels from the top. + */ + + /** + * Get the position of an element in the DOM. + * + * Uses `getBoundingClientRect` technique from John Resig. + * + * @see http://ejohn.org/blog/getboundingclientrect-is-awesome/ + * + * @param {Element} el + * Element from which to get offset. + * + * @return {module:dom~Position} + * The position of the element that was passed in. + */ + + function findPosition(el) { + if (!el || el && !el.offsetParent) { + return { + left: 0, + top: 0, + width: 0, + height: 0 + }; + } + + var width = el.offsetWidth; + var height = el.offsetHeight; + var left = 0; + var top = 0; + + while (el.offsetParent && el !== document_1[FullscreenApi.fullscreenElement]) { + left += el.offsetLeft; + top += el.offsetTop; + el = el.offsetParent; + } + + return { + left: left, + top: top, + width: width, + height: height + }; + } + /** + * Represents x and y coordinates for a DOM element or mouse pointer. + * + * @typedef {Object} module:dom~Coordinates + * + * @property {number} x + * x coordinate in pixels + * + * @property {number} y + * y coordinate in pixels + */ + + /** + * Get the pointer position within an element. + * + * The base on the coordinates are the bottom left of the element. + * + * @param {Element} el + * Element on which to get the pointer position on. + * + * @param {EventTarget~Event} event + * Event object. + * + * @return {module:dom~Coordinates} + * A coordinates object corresponding to the mouse position. + * + */ + + function getPointerPosition(el, event) { + var translated = { + x: 0, + y: 0 + }; + + if (IS_IOS) { + var item = el; + + while (item && item.nodeName.toLowerCase() !== 'html') { + var transform = computedStyle(item, 'transform'); + + if (/^matrix/.test(transform)) { + var values = transform.slice(7, -1).split(/,\s/).map(Number); + translated.x += values[4]; + translated.y += values[5]; + } else if (/^matrix3d/.test(transform)) { + var _values = transform.slice(9, -1).split(/,\s/).map(Number); + + translated.x += _values[12]; + translated.y += _values[13]; + } + + item = item.parentNode; + } + } + + var position = {}; + var boxTarget = findPosition(event.target); + var box = findPosition(el); + var boxW = box.width; + var boxH = box.height; + var offsetY = event.offsetY - (box.top - boxTarget.top); + var offsetX = event.offsetX - (box.left - boxTarget.left); + + if (event.changedTouches) { + offsetX = event.changedTouches[0].pageX - box.left; + offsetY = event.changedTouches[0].pageY + box.top; + + if (IS_IOS) { + offsetX -= translated.x; + offsetY -= translated.y; + } + } + + position.y = 1 - Math.max(0, Math.min(1, offsetY / boxH)); + position.x = Math.max(0, Math.min(1, offsetX / boxW)); + return position; + } + /** + * Determines, via duck typing, whether or not a value is a text node. + * + * @param {Mixed} value + * Check if this value is a text node. + * + * @return {boolean} + * Will be `true` if the value is a text node, `false` otherwise. + */ + + function isTextNode(value) { + return isObject(value) && value.nodeType === 3; + } + /** + * Empties the contents of an element. + * + * @param {Element} el + * The element to empty children from + * + * @return {Element} + * The element with no children + */ + + function emptyEl(el) { + while (el.firstChild) { + el.removeChild(el.firstChild); + } + + return el; + } + /** + * This is a mixed value that describes content to be injected into the DOM + * via some method. It can be of the following types: + * + * Type | Description + * -----------|------------- + * `string` | The value will be normalized into a text node. + * `Element` | The value will be accepted as-is. + * `TextNode` | The value will be accepted as-is. + * `Array` | A one-dimensional array of strings, elements, text nodes, or functions. These functions should return a string, element, or text node (any other return value, like an array, will be ignored). + * `Function` | A function, which is expected to return a string, element, text node, or array - any of the other possible values described above. This means that a content descriptor could be a function that returns an array of functions, but those second-level functions must return strings, elements, or text nodes. + * + * @typedef {string|Element|TextNode|Array|Function} module:dom~ContentDescriptor + */ + + /** + * Normalizes content for eventual insertion into the DOM. + * + * This allows a wide range of content definition methods, but helps protect + * from falling into the trap of simply writing to `innerHTML`, which could + * be an XSS concern. + * + * The content for an element can be passed in multiple types and + * combinations, whose behavior is as follows: + * + * @param {module:dom~ContentDescriptor} content + * A content descriptor value. + * + * @return {Array} + * All of the content that was passed in, normalized to an array of + * elements or text nodes. + */ + + function normalizeContent(content) { + // First, invoke content if it is a function. If it produces an array, + // that needs to happen before normalization. + if (typeof content === 'function') { + content = content(); + } // Next up, normalize to an array, so one or many items can be normalized, + // filtered, and returned. + + + return (Array.isArray(content) ? content : [content]).map(function (value) { + // First, invoke value if it is a function to produce a new value, + // which will be subsequently normalized to a Node of some kind. + if (typeof value === 'function') { + value = value(); + } + + if (isEl(value) || isTextNode(value)) { + return value; + } + + if (typeof value === 'string' && /\S/.test(value)) { + return document_1.createTextNode(value); + } + }).filter(function (value) { + return value; + }); + } + /** + * Normalizes and appends content to an element. + * + * @param {Element} el + * Element to append normalized content to. + * + * @param {module:dom~ContentDescriptor} content + * A content descriptor value. + * + * @return {Element} + * The element with appended normalized content. + */ + + function appendContent(el, content) { + normalizeContent(content).forEach(function (node) { + return el.appendChild(node); + }); + return el; + } + /** + * Normalizes and inserts content into an element; this is identical to + * `appendContent()`, except it empties the element first. + * + * @param {Element} el + * Element to insert normalized content into. + * + * @param {module:dom~ContentDescriptor} content + * A content descriptor value. + * + * @return {Element} + * The element with inserted normalized content. + */ + + function insertContent(el, content) { + return appendContent(emptyEl(el), content); + } + /** + * Check if an event was a single left click. + * + * @param {EventTarget~Event} event + * Event object. + * + * @return {boolean} + * Will be `true` if a single left click, `false` otherwise. + */ + + function isSingleLeftClick(event) { + // Note: if you create something draggable, be sure to + // call it on both `mousedown` and `mousemove` event, + // otherwise `mousedown` should be enough for a button + if (event.button === undefined && event.buttons === undefined) { + // Why do we need `buttons` ? + // Because, middle mouse sometimes have this: + // e.button === 0 and e.buttons === 4 + // Furthermore, we want to prevent combination click, something like + // HOLD middlemouse then left click, that would be + // e.button === 0, e.buttons === 5 + // just `button` is not gonna work + // Alright, then what this block does ? + // this is for chrome `simulate mobile devices` + // I want to support this as well + return true; + } + + if (event.button === 0 && event.buttons === undefined) { + // Touch screen, sometimes on some specific device, `buttons` + // doesn't have anything (safari on ios, blackberry...) + return true; + } // `mouseup` event on a single left click has + // `button` and `buttons` equal to 0 + + + if (event.type === 'mouseup' && event.button === 0 && event.buttons === 0) { + return true; + } + + if (event.button !== 0 || event.buttons !== 1) { + // This is the reason we have those if else block above + // if any special case we can catch and let it slide + // we do it above, when get to here, this definitely + // is-not-left-click + return false; + } + + return true; + } + /** + * Finds a single DOM element matching `selector` within the optional + * `context` of another DOM element (defaulting to `document`). + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelector`. + * + * @param {Element|String} [context=document] + * A DOM element within which to query. Can also be a selector + * string in which case the first matching element will be used + * as context. If missing (or no element matches selector), falls + * back to `document`. + * + * @return {Element|null} + * The element that was found or null. + */ + + var $ = createQuerier('querySelector'); + /** + * Finds a all DOM elements matching `selector` within the optional + * `context` of another DOM element (defaulting to `document`). + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelectorAll`. + * + * @param {Element|String} [context=document] + * A DOM element within which to query. Can also be a selector + * string in which case the first matching element will be used + * as context. If missing (or no element matches selector), falls + * back to `document`. + * + * @return {NodeList} + * A element list of elements that were found. Will be empty if none + * were found. + * + */ + + var $$ = createQuerier('querySelectorAll'); + + var Dom = /*#__PURE__*/Object.freeze({ + __proto__: null, + isReal: isReal, + isEl: isEl, + isInFrame: isInFrame, + createEl: createEl, + textContent: textContent, + prependTo: prependTo, + hasClass: hasClass, + addClass: addClass, + removeClass: removeClass, + toggleClass: toggleClass, + setAttributes: setAttributes, + getAttributes: getAttributes, + getAttribute: getAttribute, + setAttribute: setAttribute, + removeAttribute: removeAttribute, + blockTextSelection: blockTextSelection, + unblockTextSelection: unblockTextSelection, + getBoundingClientRect: getBoundingClientRect, + findPosition: findPosition, + getPointerPosition: getPointerPosition, + isTextNode: isTextNode, + emptyEl: emptyEl, + normalizeContent: normalizeContent, + appendContent: appendContent, + insertContent: insertContent, + isSingleLeftClick: isSingleLeftClick, + $: $, + $$: $$ + }); + + /** + * @file setup.js - Functions for setting up a player without + * user interaction based on the data-setup `attribute` of the video tag. + * + * @module setup + */ + var _windowLoaded = false; + var videojs$1; + /** + * Set up any tags that have a data-setup `attribute` when the player is started. + */ + + var autoSetup = function autoSetup() { + if (videojs$1.options.autoSetup === false) { + return; + } + + var vids = Array.prototype.slice.call(document_1.getElementsByTagName('video')); + var audios = Array.prototype.slice.call(document_1.getElementsByTagName('audio')); + var divs = Array.prototype.slice.call(document_1.getElementsByTagName('video-js')); + var mediaEls = vids.concat(audios, divs); // Check if any media elements exist + + if (mediaEls && mediaEls.length > 0) { + for (var i = 0, e = mediaEls.length; i < e; i++) { + var mediaEl = mediaEls[i]; // Check if element exists, has getAttribute func. + + if (mediaEl && mediaEl.getAttribute) { + // Make sure this player hasn't already been set up. + if (mediaEl.player === undefined) { + var options = mediaEl.getAttribute('data-setup'); // Check if data-setup attr exists. + // We only auto-setup if they've added the data-setup attr. + + if (options !== null) { + // Create new video.js instance. + videojs$1(mediaEl); + } + } // If getAttribute isn't defined, we need to wait for the DOM. + + } else { + autoSetupTimeout(1); + break; + } + } // No videos were found, so keep looping unless page is finished loading. + + } else if (!_windowLoaded) { + autoSetupTimeout(1); + } + }; + /** + * Wait until the page is loaded before running autoSetup. This will be called in + * autoSetup if `hasLoaded` returns false. + * + * @param {number} wait + * How long to wait in ms + * + * @param {module:videojs} [vjs] + * The videojs library function + */ + + + function autoSetupTimeout(wait, vjs) { + // Protect against breakage in non-browser environments + if (!isReal()) { + return; + } + + if (vjs) { + videojs$1 = vjs; + } + + window_1.setTimeout(autoSetup, wait); + } + /** + * Used to set the internal tracking of window loaded state to true. + * + * @private + */ + + + function setWindowLoaded() { + _windowLoaded = true; + window_1.removeEventListener('load', setWindowLoaded); + } + + if (isReal()) { + if (document_1.readyState === 'complete') { + setWindowLoaded(); + } else { + /** + * Listen for the load event on window, and set _windowLoaded to true. + * + * We use a standard event listener here to avoid incrementing the GUID + * before any players are created. + * + * @listens load + */ + window_1.addEventListener('load', setWindowLoaded); + } + } + + /** + * @file stylesheet.js + * @module stylesheet + */ + /** + * Create a DOM syle element given a className for it. + * + * @param {string} className + * The className to add to the created style element. + * + * @return {Element} + * The element that was created. + */ + + var createStyleElement = function createStyleElement(className) { + var style = document_1.createElement('style'); + style.className = className; + return style; + }; + /** + * Add text to a DOM element. + * + * @param {Element} el + * The Element to add text content to. + * + * @param {string} content + * The text to add to the element. + */ + + var setTextContent = function setTextContent(el, content) { + if (el.styleSheet) { + el.styleSheet.cssText = content; + } else { + el.textContent = content; + } + }; + + /** + * @file guid.js + * @module guid + */ + // Default value for GUIDs. This allows us to reset the GUID counter in tests. + // + // The initial GUID is 3 because some users have come to rely on the first + // default player ID ending up as `vjs_video_3`. + // + // See: https://github.com/videojs/video.js/pull/6216 + var _initialGuid = 3; + /** + * Unique ID for an element or function + * + * @type {Number} + */ + + var _guid = _initialGuid; + /** + * Get a unique auto-incrementing ID by number that has not been returned before. + * + * @return {number} + * A new unique ID. + */ + + function newGUID() { + return _guid++; + } + + /** + * @file dom-data.js + * @module dom-data + */ + var FakeWeakMap; + + if (!window_1.WeakMap) { + FakeWeakMap = /*#__PURE__*/function () { + function FakeWeakMap() { + this.vdata = 'vdata' + Math.floor(window_1.performance && window_1.performance.now() || Date.now()); + this.data = {}; + } + + var _proto = FakeWeakMap.prototype; + + _proto.set = function set(key, value) { + var access = key[this.vdata] || newGUID(); + + if (!key[this.vdata]) { + key[this.vdata] = access; + } + + this.data[access] = value; + return this; + }; + + _proto.get = function get(key) { + var access = key[this.vdata]; // we have data, return it + + if (access) { + return this.data[access]; + } // we don't have data, return nothing. + // return undefined explicitly as that's the contract for this method + + + log('We have no data for this element', key); + return undefined; + }; + + _proto.has = function has(key) { + var access = key[this.vdata]; + return access in this.data; + }; + + _proto["delete"] = function _delete(key) { + var access = key[this.vdata]; + + if (access) { + delete this.data[access]; + delete key[this.vdata]; + } + }; + + return FakeWeakMap; + }(); + } + /** + * Element Data Store. + * + * Allows for binding data to an element without putting it directly on the + * element. Ex. Event listeners are stored here. + * (also from jsninja.com, slightly modified and updated for closure compiler) + * + * @type {Object} + * @private + */ + + + var DomData = window_1.WeakMap ? new WeakMap() : new FakeWeakMap(); + + /** + * @file events.js. An Event System (John Resig - Secrets of a JS Ninja http://jsninja.com/) + * (Original book version wasn't completely usable, so fixed some things and made Closure Compiler compatible) + * This should work very similarly to jQuery's events, however it's based off the book version which isn't as + * robust as jquery's, so there's probably some differences. + * + * @file events.js + * @module events + */ + /** + * Clean up the listener cache and dispatchers + * + * @param {Element|Object} elem + * Element to clean up + * + * @param {string} type + * Type of event to clean up + */ + + function _cleanUpEvents(elem, type) { + if (!DomData.has(elem)) { + return; + } + + var data = DomData.get(elem); // Remove the events of a particular type if there are none left + + if (data.handlers[type].length === 0) { + delete data.handlers[type]; // data.handlers[type] = null; + // Setting to null was causing an error with data.handlers + // Remove the meta-handler from the element + + if (elem.removeEventListener) { + elem.removeEventListener(type, data.dispatcher, false); + } else if (elem.detachEvent) { + elem.detachEvent('on' + type, data.dispatcher); + } + } // Remove the events object if there are no types left + + + if (Object.getOwnPropertyNames(data.handlers).length <= 0) { + delete data.handlers; + delete data.dispatcher; + delete data.disabled; + } // Finally remove the element data if there is no data left + + + if (Object.getOwnPropertyNames(data).length === 0) { + DomData["delete"](elem); + } + } + /** + * Loops through an array of event types and calls the requested method for each type. + * + * @param {Function} fn + * The event method we want to use. + * + * @param {Element|Object} elem + * Element or object to bind listeners to + * + * @param {string} type + * Type of event to bind to. + * + * @param {EventTarget~EventListener} callback + * Event listener. + */ + + + function _handleMultipleEvents(fn, elem, types, callback) { + types.forEach(function (type) { + // Call the event method for each one of the types + fn(elem, type, callback); + }); + } + /** + * Fix a native event to have standard property values + * + * @param {Object} event + * Event object to fix. + * + * @return {Object} + * Fixed event object. + */ + + + function fixEvent(event) { + if (event.fixed_) { + return event; + } + + function returnTrue() { + return true; + } + + function returnFalse() { + return false; + } // Test if fixing up is needed + // Used to check if !event.stopPropagation instead of isPropagationStopped + // But native events return true for stopPropagation, but don't have + // other expected methods like isPropagationStopped. Seems to be a problem + // with the Javascript Ninja code. So we're just overriding all events now. + + + if (!event || !event.isPropagationStopped || !event.isImmediatePropagationStopped) { + var old = event || window_1.event; + event = {}; // Clone the old object so that we can modify the values event = {}; + // IE8 Doesn't like when you mess with native event properties + // Firefox returns false for event.hasOwnProperty('type') and other props + // which makes copying more difficult. + // TODO: Probably best to create a whitelist of event props + + for (var key in old) { + // Safari 6.0.3 warns you if you try to copy deprecated layerX/Y + // Chrome warns you if you try to copy deprecated keyboardEvent.keyLocation + // and webkitMovementX/Y + if (key !== 'layerX' && key !== 'layerY' && key !== 'keyLocation' && key !== 'webkitMovementX' && key !== 'webkitMovementY') { + // Chrome 32+ warns if you try to copy deprecated returnValue, but + // we still want to if preventDefault isn't supported (IE8). + if (!(key === 'returnValue' && old.preventDefault)) { + event[key] = old[key]; + } + } + } // The event occurred on this element + + + if (!event.target) { + event.target = event.srcElement || document_1; + } // Handle which other element the event is related to + + + if (!event.relatedTarget) { + event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; + } // Stop the default browser action + + + event.preventDefault = function () { + if (old.preventDefault) { + old.preventDefault(); + } + + event.returnValue = false; + old.returnValue = false; + event.defaultPrevented = true; + }; + + event.defaultPrevented = false; // Stop the event from bubbling + + event.stopPropagation = function () { + if (old.stopPropagation) { + old.stopPropagation(); + } + + event.cancelBubble = true; + old.cancelBubble = true; + event.isPropagationStopped = returnTrue; + }; + + event.isPropagationStopped = returnFalse; // Stop the event from bubbling and executing other handlers + + event.stopImmediatePropagation = function () { + if (old.stopImmediatePropagation) { + old.stopImmediatePropagation(); + } + + event.isImmediatePropagationStopped = returnTrue; + event.stopPropagation(); + }; + + event.isImmediatePropagationStopped = returnFalse; // Handle mouse position + + if (event.clientX !== null && event.clientX !== undefined) { + var doc = document_1.documentElement; + var body = document_1.body; + event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); + event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); + } // Handle key presses + + + event.which = event.charCode || event.keyCode; // Fix button for mouse clicks: + // 0 == left; 1 == middle; 2 == right + + if (event.button !== null && event.button !== undefined) { + // The following is disabled because it does not pass videojs-standard + // and... yikes. + + /* eslint-disable */ + event.button = event.button & 1 ? 0 : event.button & 4 ? 1 : event.button & 2 ? 2 : 0; + /* eslint-enable */ + } + } + + event.fixed_ = true; // Returns fixed-up instance + + return event; + } + /** + * Whether passive event listeners are supported + */ + + var _supportsPassive; + + var supportsPassive = function supportsPassive() { + if (typeof _supportsPassive !== 'boolean') { + _supportsPassive = false; + + try { + var opts = Object.defineProperty({}, 'passive', { + get: function get() { + _supportsPassive = true; + } + }); + window_1.addEventListener('test', null, opts); + window_1.removeEventListener('test', null, opts); + } catch (e) {// disregard + } + } + + return _supportsPassive; + }; + /** + * Touch events Chrome expects to be passive + */ + + + var passiveEvents = ['touchstart', 'touchmove']; + /** + * Add an event listener to element + * It stores the handler function in a separate cache object + * and adds a generic handler to the element's event, + * along with a unique id (guid) to the element. + * + * @param {Element|Object} elem + * Element or object to bind listeners to + * + * @param {string|string[]} type + * Type of event to bind to. + * + * @param {EventTarget~EventListener} fn + * Event listener. + */ + + function on(elem, type, fn) { + if (Array.isArray(type)) { + return _handleMultipleEvents(on, elem, type, fn); + } + + if (!DomData.has(elem)) { + DomData.set(elem, {}); + } + + var data = DomData.get(elem); // We need a place to store all our handler data + + if (!data.handlers) { + data.handlers = {}; + } + + if (!data.handlers[type]) { + data.handlers[type] = []; + } + + if (!fn.guid) { + fn.guid = newGUID(); + } + + data.handlers[type].push(fn); + + if (!data.dispatcher) { + data.disabled = false; + + data.dispatcher = function (event, hash) { + if (data.disabled) { + return; + } + + event = fixEvent(event); + var handlers = data.handlers[event.type]; + + if (handlers) { + // Copy handlers so if handlers are added/removed during the process it doesn't throw everything off. + var handlersCopy = handlers.slice(0); + + for (var m = 0, n = handlersCopy.length; m < n; m++) { + if (event.isImmediatePropagationStopped()) { + break; + } else { + try { + handlersCopy[m].call(elem, event, hash); + } catch (e) { + log.error(e); + } + } + } + } + }; + } + + if (data.handlers[type].length === 1) { + if (elem.addEventListener) { + var options = false; + + if (supportsPassive() && passiveEvents.indexOf(type) > -1) { + options = { + passive: true + }; + } + + elem.addEventListener(type, data.dispatcher, options); + } else if (elem.attachEvent) { + elem.attachEvent('on' + type, data.dispatcher); + } + } + } + /** + * Removes event listeners from an element + * + * @param {Element|Object} elem + * Object to remove listeners from. + * + * @param {string|string[]} [type] + * Type of listener to remove. Don't include to remove all events from element. + * + * @param {EventTarget~EventListener} [fn] + * Specific listener to remove. Don't include to remove listeners for an event + * type. + */ + + function off(elem, type, fn) { + // Don't want to add a cache object through getElData if not needed + if (!DomData.has(elem)) { + return; + } + + var data = DomData.get(elem); // If no events exist, nothing to unbind + + if (!data.handlers) { + return; + } + + if (Array.isArray(type)) { + return _handleMultipleEvents(off, elem, type, fn); + } // Utility function + + + var removeType = function removeType(el, t) { + data.handlers[t] = []; + + _cleanUpEvents(el, t); + }; // Are we removing all bound events? + + + if (type === undefined) { + for (var t in data.handlers) { + if (Object.prototype.hasOwnProperty.call(data.handlers || {}, t)) { + removeType(elem, t); + } + } + + return; + } + + var handlers = data.handlers[type]; // If no handlers exist, nothing to unbind + + if (!handlers) { + return; + } // If no listener was provided, remove all listeners for type + + + if (!fn) { + removeType(elem, type); + return; + } // We're only removing a single handler + + + if (fn.guid) { + for (var n = 0; n < handlers.length; n++) { + if (handlers[n].guid === fn.guid) { + handlers.splice(n--, 1); + } + } + } + + _cleanUpEvents(elem, type); + } + /** + * Trigger an event for an element + * + * @param {Element|Object} elem + * Element to trigger an event on + * + * @param {EventTarget~Event|string} event + * A string (the type) or an event object with a type attribute + * + * @param {Object} [hash] + * data hash to pass along with the event + * + * @return {boolean|undefined} + * Returns the opposite of `defaultPrevented` if default was + * prevented. Otherwise, returns `undefined` + */ + + function trigger(elem, event, hash) { + // Fetches element data and a reference to the parent (for bubbling). + // Don't want to add a data object to cache for every parent, + // so checking hasElData first. + var elemData = DomData.has(elem) ? DomData.get(elem) : {}; + var parent = elem.parentNode || elem.ownerDocument; // type = event.type || event, + // handler; + // If an event name was passed as a string, creates an event out of it + + if (typeof event === 'string') { + event = { + type: event, + target: elem + }; + } else if (!event.target) { + event.target = elem; + } // Normalizes the event properties. + + + event = fixEvent(event); // If the passed element has a dispatcher, executes the established handlers. + + if (elemData.dispatcher) { + elemData.dispatcher.call(elem, event, hash); + } // Unless explicitly stopped or the event does not bubble (e.g. media events) + // recursively calls this function to bubble the event up the DOM. + + + if (parent && !event.isPropagationStopped() && event.bubbles === true) { + trigger.call(null, parent, event, hash); // If at the top of the DOM, triggers the default action unless disabled. + } else if (!parent && !event.defaultPrevented && event.target && event.target[event.type]) { + if (!DomData.has(event.target)) { + DomData.set(event.target, {}); + } + + var targetData = DomData.get(event.target); // Checks if the target has a default action for this event. + + if (event.target[event.type]) { + // Temporarily disables event dispatching on the target as we have already executed the handler. + targetData.disabled = true; // Executes the default action. + + if (typeof event.target[event.type] === 'function') { + event.target[event.type](); + } // Re-enables event dispatching. + + + targetData.disabled = false; + } + } // Inform the triggerer if the default was prevented by returning false + + + return !event.defaultPrevented; + } + /** + * Trigger a listener only once for an event. + * + * @param {Element|Object} elem + * Element or object to bind to. + * + * @param {string|string[]} type + * Name/type of event + * + * @param {Event~EventListener} fn + * Event listener function + */ + + function one(elem, type, fn) { + if (Array.isArray(type)) { + return _handleMultipleEvents(one, elem, type, fn); + } + + var func = function func() { + off(elem, type, func); + fn.apply(this, arguments); + }; // copy the guid to the new function so it can removed using the original function's ID + + + func.guid = fn.guid = fn.guid || newGUID(); + on(elem, type, func); + } + /** + * Trigger a listener only once and then turn if off for all + * configured events + * + * @param {Element|Object} elem + * Element or object to bind to. + * + * @param {string|string[]} type + * Name/type of event + * + * @param {Event~EventListener} fn + * Event listener function + */ + + function any(elem, type, fn) { + var func = function func() { + off(elem, type, func); + fn.apply(this, arguments); + }; // copy the guid to the new function so it can removed using the original function's ID + + + func.guid = fn.guid = fn.guid || newGUID(); // multiple ons, but one off for everything + + on(elem, type, func); + } + + var Events = /*#__PURE__*/Object.freeze({ + __proto__: null, + fixEvent: fixEvent, + on: on, + off: off, + trigger: trigger, + one: one, + any: any + }); + + /** + * @file fn.js + * @module fn + */ + var UPDATE_REFRESH_INTERVAL = 30; + /** + * Bind (a.k.a proxy or context). A simple method for changing the context of + * a function. + * + * It also stores a unique id on the function so it can be easily removed from + * events. + * + * @function + * @param {Mixed} context + * The object to bind as scope. + * + * @param {Function} fn + * The function to be bound to a scope. + * + * @param {number} [uid] + * An optional unique ID for the function to be set + * + * @return {Function} + * The new function that will be bound into the context given + */ + + var bind = function bind(context, fn, uid) { + // Make sure the function has a unique ID + if (!fn.guid) { + fn.guid = newGUID(); + } // Create the new function that changes the context + + + var bound = fn.bind(context); // Allow for the ability to individualize this function + // Needed in the case where multiple objects might share the same prototype + // IF both items add an event listener with the same function, then you try to remove just one + // it will remove both because they both have the same guid. + // when using this, you need to use the bind method when you remove the listener as well. + // currently used in text tracks + + bound.guid = uid ? uid + '_' + fn.guid : fn.guid; + return bound; + }; + /** + * Wraps the given function, `fn`, with a new function that only invokes `fn` + * at most once per every `wait` milliseconds. + * + * @function + * @param {Function} fn + * The function to be throttled. + * + * @param {number} wait + * The number of milliseconds by which to throttle. + * + * @return {Function} + */ + + var throttle = function throttle(fn, wait) { + var last = window_1.performance.now(); + + var throttled = function throttled() { + var now = window_1.performance.now(); + + if (now - last >= wait) { + fn.apply(void 0, arguments); + last = now; + } + }; + + return throttled; + }; + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. + * + * Inspired by lodash and underscore implementations. + * + * @function + * @param {Function} func + * The function to wrap with debounce behavior. + * + * @param {number} wait + * The number of milliseconds to wait after the last invocation. + * + * @param {boolean} [immediate] + * Whether or not to invoke the function immediately upon creation. + * + * @param {Object} [context=window] + * The "context" in which the debounced function should debounce. For + * example, if this function should be tied to a Video.js player, + * the player can be passed here. Alternatively, defaults to the + * global `window` object. + * + * @return {Function} + * A debounced function. + */ + + var debounce = function debounce(func, wait, immediate, context) { + if (context === void 0) { + context = window_1; + } + + var timeout; + + var cancel = function cancel() { + context.clearTimeout(timeout); + timeout = null; + }; + /* eslint-disable consistent-this */ + + + var debounced = function debounced() { + var self = this; + var args = arguments; + + var _later = function later() { + timeout = null; + _later = null; + + if (!immediate) { + func.apply(self, args); + } + }; + + if (!timeout && immediate) { + func.apply(self, args); + } + + context.clearTimeout(timeout); + timeout = context.setTimeout(_later, wait); + }; + /* eslint-enable consistent-this */ + + + debounced.cancel = cancel; + return debounced; + }; + + /** + * @file src/js/event-target.js + */ + /** + * `EventTarget` is a class that can have the same API as the DOM `EventTarget`. It + * adds shorthand functions that wrap around lengthy functions. For example: + * the `on` function is a wrapper around `addEventListener`. + * + * @see [EventTarget Spec]{@link https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-EventTarget} + * @class EventTarget + */ + + var EventTarget = function EventTarget() {}; + /** + * A Custom DOM event. + * + * @typedef {Object} EventTarget~Event + * @see [Properties]{@link https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent} + */ + + /** + * All event listeners should follow the following format. + * + * @callback EventTarget~EventListener + * @this {EventTarget} + * + * @param {EventTarget~Event} event + * the event that triggered this function + * + * @param {Object} [hash] + * hash of data sent during the event + */ + + /** + * An object containing event names as keys and booleans as values. + * + * > NOTE: If an event name is set to a true value here {@link EventTarget#trigger} + * will have extra functionality. See that function for more information. + * + * @property EventTarget.prototype.allowedEvents_ + * @private + */ + + + EventTarget.prototype.allowedEvents_ = {}; + /** + * Adds an `event listener` to an instance of an `EventTarget`. An `event listener` is a + * function that will get called when an event with a certain name gets triggered. + * + * @param {string|string[]} type + * An event name or an array of event names. + * + * @param {EventTarget~EventListener} fn + * The function to call with `EventTarget`s + */ + + EventTarget.prototype.on = function (type, fn) { + // Remove the addEventListener alias before calling Events.on + // so we don't get into an infinite type loop + var ael = this.addEventListener; + + this.addEventListener = function () {}; + + on(this, type, fn); + this.addEventListener = ael; + }; + /** + * An alias of {@link EventTarget#on}. Allows `EventTarget` to mimic + * the standard DOM API. + * + * @function + * @see {@link EventTarget#on} + */ + + + EventTarget.prototype.addEventListener = EventTarget.prototype.on; + /** + * Removes an `event listener` for a specific event from an instance of `EventTarget`. + * This makes it so that the `event listener` will no longer get called when the + * named event happens. + * + * @param {string|string[]} type + * An event name or an array of event names. + * + * @param {EventTarget~EventListener} fn + * The function to remove. + */ + + EventTarget.prototype.off = function (type, fn) { + off(this, type, fn); + }; + /** + * An alias of {@link EventTarget#off}. Allows `EventTarget` to mimic + * the standard DOM API. + * + * @function + * @see {@link EventTarget#off} + */ + + + EventTarget.prototype.removeEventListener = EventTarget.prototype.off; + /** + * This function will add an `event listener` that gets triggered only once. After the + * first trigger it will get removed. This is like adding an `event listener` + * with {@link EventTarget#on} that calls {@link EventTarget#off} on itself. + * + * @param {string|string[]} type + * An event name or an array of event names. + * + * @param {EventTarget~EventListener} fn + * The function to be called once for each event name. + */ + + EventTarget.prototype.one = function (type, fn) { + // Remove the addEventListener aliasing Events.on + // so we don't get into an infinite type loop + var ael = this.addEventListener; + + this.addEventListener = function () {}; + + one(this, type, fn); + this.addEventListener = ael; + }; + + EventTarget.prototype.any = function (type, fn) { + // Remove the addEventListener aliasing Events.on + // so we don't get into an infinite type loop + var ael = this.addEventListener; + + this.addEventListener = function () {}; + + any(this, type, fn); + this.addEventListener = ael; + }; + /** + * This function causes an event to happen. This will then cause any `event listeners` + * that are waiting for that event, to get called. If there are no `event listeners` + * for an event then nothing will happen. + * + * If the name of the `Event` that is being triggered is in `EventTarget.allowedEvents_`. + * Trigger will also call the `on` + `uppercaseEventName` function. + * + * Example: + * 'click' is in `EventTarget.allowedEvents_`, so, trigger will attempt to call + * `onClick` if it exists. + * + * @param {string|EventTarget~Event|Object} event + * The name of the event, an `Event`, or an object with a key of type set to + * an event name. + */ + + + EventTarget.prototype.trigger = function (event) { + var type = event.type || event; // deprecation + // In a future version we should default target to `this` + // similar to how we default the target to `elem` in + // `Events.trigger`. Right now the default `target` will be + // `document` due to the `Event.fixEvent` call. + + if (typeof event === 'string') { + event = { + type: type + }; + } + + event = fixEvent(event); + + if (this.allowedEvents_[type] && this['on' + type]) { + this['on' + type](event); + } + + trigger(this, event); + }; + /** + * An alias of {@link EventTarget#trigger}. Allows `EventTarget` to mimic + * the standard DOM API. + * + * @function + * @see {@link EventTarget#trigger} + */ + + + EventTarget.prototype.dispatchEvent = EventTarget.prototype.trigger; + var EVENT_MAP; + + EventTarget.prototype.queueTrigger = function (event) { + var _this = this; + + // only set up EVENT_MAP if it'll be used + if (!EVENT_MAP) { + EVENT_MAP = new Map(); + } + + var type = event.type || event; + var map = EVENT_MAP.get(this); + + if (!map) { + map = new Map(); + EVENT_MAP.set(this, map); + } + + var oldTimeout = map.get(type); + map["delete"](type); + window_1.clearTimeout(oldTimeout); + var timeout = window_1.setTimeout(function () { + // if we cleared out all timeouts for the current target, delete its map + if (map.size === 0) { + map = null; + EVENT_MAP["delete"](_this); + } + + _this.trigger(event); + }, 0); + map.set(type, timeout); + }; + + /** + * @file mixins/evented.js + * @module evented + */ + + var objName = function objName(obj) { + if (typeof obj.name === 'function') { + return obj.name(); + } + + if (typeof obj.name === 'string') { + return obj.name; + } + + if (obj.name_) { + return obj.name_; + } + + if (obj.constructor && obj.constructor.name) { + return obj.constructor.name; + } + + return typeof obj; + }; + /** + * Returns whether or not an object has had the evented mixin applied. + * + * @param {Object} object + * An object to test. + * + * @return {boolean} + * Whether or not the object appears to be evented. + */ + + + var isEvented = function isEvented(object) { + return object instanceof EventTarget || !!object.eventBusEl_ && ['on', 'one', 'off', 'trigger'].every(function (k) { + return typeof object[k] === 'function'; + }); + }; + /** + * Adds a callback to run after the evented mixin applied. + * + * @param {Object} object + * An object to Add + * @param {Function} callback + * The callback to run. + */ + + + var addEventedCallback = function addEventedCallback(target, callback) { + if (isEvented(target)) { + callback(); + } else { + if (!target.eventedCallbacks) { + target.eventedCallbacks = []; + } + + target.eventedCallbacks.push(callback); + } + }; + /** + * Whether a value is a valid event type - non-empty string or array. + * + * @private + * @param {string|Array} type + * The type value to test. + * + * @return {boolean} + * Whether or not the type is a valid event type. + */ + + + var isValidEventType = function isValidEventType(type) { + return (// The regex here verifies that the `type` contains at least one non- + // whitespace character. + typeof type === 'string' && /\S/.test(type) || Array.isArray(type) && !!type.length + ); + }; + /** + * Validates a value to determine if it is a valid event target. Throws if not. + * + * @private + * @throws {Error} + * If the target does not appear to be a valid event target. + * + * @param {Object} target + * The object to test. + * + * @param {Object} obj + * The evented object we are validating for + * + * @param {string} fnName + * The name of the evented mixin function that called this. + */ + + + var validateTarget = function validateTarget(target, obj, fnName) { + if (!target || !target.nodeName && !isEvented(target)) { + throw new Error("Invalid target for " + objName(obj) + "#" + fnName + "; must be a DOM node or evented object."); + } + }; + /** + * Validates a value to determine if it is a valid event target. Throws if not. + * + * @private + * @throws {Error} + * If the type does not appear to be a valid event type. + * + * @param {string|Array} type + * The type to test. + * + * @param {Object} obj + * The evented object we are validating for + * + * @param {string} fnName + * The name of the evented mixin function that called this. + */ + + + var validateEventType = function validateEventType(type, obj, fnName) { + if (!isValidEventType(type)) { + throw new Error("Invalid event type for " + objName(obj) + "#" + fnName + "; must be a non-empty string or array."); + } + }; + /** + * Validates a value to determine if it is a valid listener. Throws if not. + * + * @private + * @throws {Error} + * If the listener is not a function. + * + * @param {Function} listener + * The listener to test. + * + * @param {Object} obj + * The evented object we are validating for + * + * @param {string} fnName + * The name of the evented mixin function that called this. + */ + + + var validateListener = function validateListener(listener, obj, fnName) { + if (typeof listener !== 'function') { + throw new Error("Invalid listener for " + objName(obj) + "#" + fnName + "; must be a function."); + } + }; + /** + * Takes an array of arguments given to `on()` or `one()`, validates them, and + * normalizes them into an object. + * + * @private + * @param {Object} self + * The evented object on which `on()` or `one()` was called. This + * object will be bound as the `this` value for the listener. + * + * @param {Array} args + * An array of arguments passed to `on()` or `one()`. + * + * @param {string} fnName + * The name of the evented mixin function that called this. + * + * @return {Object} + * An object containing useful values for `on()` or `one()` calls. + */ + + + var normalizeListenArgs = function normalizeListenArgs(self, args, fnName) { + // If the number of arguments is less than 3, the target is always the + // evented object itself. + var isTargetingSelf = args.length < 3 || args[0] === self || args[0] === self.eventBusEl_; + var target; + var type; + var listener; + + if (isTargetingSelf) { + target = self.eventBusEl_; // Deal with cases where we got 3 arguments, but we are still listening to + // the evented object itself. + + if (args.length >= 3) { + args.shift(); + } + + type = args[0]; + listener = args[1]; + } else { + target = args[0]; + type = args[1]; + listener = args[2]; + } + + validateTarget(target, self, fnName); + validateEventType(type, self, fnName); + validateListener(listener, self, fnName); + listener = bind(self, listener); + return { + isTargetingSelf: isTargetingSelf, + target: target, + type: type, + listener: listener + }; + }; + /** + * Adds the listener to the event type(s) on the target, normalizing for + * the type of target. + * + * @private + * @param {Element|Object} target + * A DOM node or evented object. + * + * @param {string} method + * The event binding method to use ("on" or "one"). + * + * @param {string|Array} type + * One or more event type(s). + * + * @param {Function} listener + * A listener function. + */ + + + var listen = function listen(target, method, type, listener) { + validateTarget(target, target, method); + + if (target.nodeName) { + Events[method](target, type, listener); + } else { + target[method](type, listener); + } + }; + /** + * Contains methods that provide event capabilities to an object which is passed + * to {@link module:evented|evented}. + * + * @mixin EventedMixin + */ + + + var EventedMixin = { + /** + * Add a listener to an event (or events) on this object or another evented + * object. + * + * @param {string|Array|Element|Object} targetOrType + * If this is a string or array, it represents the event type(s) + * that will trigger the listener. + * + * Another evented object can be passed here instead, which will + * cause the listener to listen for events on _that_ object. + * + * In either case, the listener's `this` value will be bound to + * this object. + * + * @param {string|Array|Function} typeOrListener + * If the first argument was a string or array, this should be the + * listener function. Otherwise, this is a string or array of event + * type(s). + * + * @param {Function} [listener] + * If the first argument was another evented object, this will be + * the listener function. + */ + on: function on() { + var _this = this; + + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var _normalizeListenArgs = normalizeListenArgs(this, args, 'on'), + isTargetingSelf = _normalizeListenArgs.isTargetingSelf, + target = _normalizeListenArgs.target, + type = _normalizeListenArgs.type, + listener = _normalizeListenArgs.listener; + + listen(target, 'on', type, listener); // If this object is listening to another evented object. + + if (!isTargetingSelf) { + // If this object is disposed, remove the listener. + var removeListenerOnDispose = function removeListenerOnDispose() { + return _this.off(target, type, listener); + }; // Use the same function ID as the listener so we can remove it later it + // using the ID of the original listener. + + + removeListenerOnDispose.guid = listener.guid; // Add a listener to the target's dispose event as well. This ensures + // that if the target is disposed BEFORE this object, we remove the + // removal listener that was just added. Otherwise, we create a memory leak. + + var removeRemoverOnTargetDispose = function removeRemoverOnTargetDispose() { + return _this.off('dispose', removeListenerOnDispose); + }; // Use the same function ID as the listener so we can remove it later + // it using the ID of the original listener. + + + removeRemoverOnTargetDispose.guid = listener.guid; + listen(this, 'on', 'dispose', removeListenerOnDispose); + listen(target, 'on', 'dispose', removeRemoverOnTargetDispose); + } + }, + + /** + * Add a listener to an event (or events) on this object or another evented + * object. The listener will be called once per event and then removed. + * + * @param {string|Array|Element|Object} targetOrType + * If this is a string or array, it represents the event type(s) + * that will trigger the listener. + * + * Another evented object can be passed here instead, which will + * cause the listener to listen for events on _that_ object. + * + * In either case, the listener's `this` value will be bound to + * this object. + * + * @param {string|Array|Function} typeOrListener + * If the first argument was a string or array, this should be the + * listener function. Otherwise, this is a string or array of event + * type(s). + * + * @param {Function} [listener] + * If the first argument was another evented object, this will be + * the listener function. + */ + one: function one() { + var _this2 = this; + + for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + var _normalizeListenArgs2 = normalizeListenArgs(this, args, 'one'), + isTargetingSelf = _normalizeListenArgs2.isTargetingSelf, + target = _normalizeListenArgs2.target, + type = _normalizeListenArgs2.type, + listener = _normalizeListenArgs2.listener; // Targeting this evented object. + + + if (isTargetingSelf) { + listen(target, 'one', type, listener); // Targeting another evented object. + } else { + // TODO: This wrapper is incorrect! It should only + // remove the wrapper for the event type that called it. + // Instead all listners are removed on the first trigger! + // see https://github.com/videojs/video.js/issues/5962 + var wrapper = function wrapper() { + _this2.off(target, type, wrapper); + + for (var _len3 = arguments.length, largs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + largs[_key3] = arguments[_key3]; + } + + listener.apply(null, largs); + }; // Use the same function ID as the listener so we can remove it later + // it using the ID of the original listener. + + + wrapper.guid = listener.guid; + listen(target, 'one', type, wrapper); + } + }, + + /** + * Add a listener to an event (or events) on this object or another evented + * object. The listener will only be called once for the first event that is triggered + * then removed. + * + * @param {string|Array|Element|Object} targetOrType + * If this is a string or array, it represents the event type(s) + * that will trigger the listener. + * + * Another evented object can be passed here instead, which will + * cause the listener to listen for events on _that_ object. + * + * In either case, the listener's `this` value will be bound to + * this object. + * + * @param {string|Array|Function} typeOrListener + * If the first argument was a string or array, this should be the + * listener function. Otherwise, this is a string or array of event + * type(s). + * + * @param {Function} [listener] + * If the first argument was another evented object, this will be + * the listener function. + */ + any: function any() { + var _this3 = this; + + for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + args[_key4] = arguments[_key4]; + } + + var _normalizeListenArgs3 = normalizeListenArgs(this, args, 'any'), + isTargetingSelf = _normalizeListenArgs3.isTargetingSelf, + target = _normalizeListenArgs3.target, + type = _normalizeListenArgs3.type, + listener = _normalizeListenArgs3.listener; // Targeting this evented object. + + + if (isTargetingSelf) { + listen(target, 'any', type, listener); // Targeting another evented object. + } else { + var wrapper = function wrapper() { + _this3.off(target, type, wrapper); + + for (var _len5 = arguments.length, largs = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + largs[_key5] = arguments[_key5]; + } + + listener.apply(null, largs); + }; // Use the same function ID as the listener so we can remove it later + // it using the ID of the original listener. + + + wrapper.guid = listener.guid; + listen(target, 'any', type, wrapper); + } + }, + + /** + * Removes listener(s) from event(s) on an evented object. + * + * @param {string|Array|Element|Object} [targetOrType] + * If this is a string or array, it represents the event type(s). + * + * Another evented object can be passed here instead, in which case + * ALL 3 arguments are _required_. + * + * @param {string|Array|Function} [typeOrListener] + * If the first argument was a string or array, this may be the + * listener function. Otherwise, this is a string or array of event + * type(s). + * + * @param {Function} [listener] + * If the first argument was another evented object, this will be + * the listener function; otherwise, _all_ listeners bound to the + * event type(s) will be removed. + */ + off: function off$1(targetOrType, typeOrListener, listener) { + // Targeting this evented object. + if (!targetOrType || isValidEventType(targetOrType)) { + off(this.eventBusEl_, targetOrType, typeOrListener); // Targeting another evented object. + } else { + var target = targetOrType; + var type = typeOrListener; // Fail fast and in a meaningful way! + + validateTarget(target, this, 'off'); + validateEventType(type, this, 'off'); + validateListener(listener, this, 'off'); // Ensure there's at least a guid, even if the function hasn't been used + + listener = bind(this, listener); // Remove the dispose listener on this evented object, which was given + // the same guid as the event listener in on(). + + this.off('dispose', listener); + + if (target.nodeName) { + off(target, type, listener); + off(target, 'dispose', listener); + } else if (isEvented(target)) { + target.off(type, listener); + target.off('dispose', listener); + } + } + }, + + /** + * Fire an event on this evented object, causing its listeners to be called. + * + * @param {string|Object} event + * An event type or an object with a type property. + * + * @param {Object} [hash] + * An additional object to pass along to listeners. + * + * @return {boolean} + * Whether or not the default behavior was prevented. + */ + trigger: function trigger$1(event, hash) { + validateTarget(this.eventBusEl_, this, 'trigger'); + var type = event && typeof event !== 'string' ? event.type : event; + + if (!isValidEventType(type)) { + var error = "Invalid event type for " + objName(this) + "#trigger; " + 'must be a non-empty string or object with a type key that has a non-empty value.'; + + if (event) { + (this.log || log).error(error); + } else { + throw new Error(error); + } + } + + return trigger(this.eventBusEl_, event, hash); + } + }; + /** + * Applies {@link module:evented~EventedMixin|EventedMixin} to a target object. + * + * @param {Object} target + * The object to which to add event methods. + * + * @param {Object} [options={}] + * Options for customizing the mixin behavior. + * + * @param {string} [options.eventBusKey] + * By default, adds a `eventBusEl_` DOM element to the target object, + * which is used as an event bus. If the target object already has a + * DOM element that should be used, pass its key here. + * + * @return {Object} + * The target object. + */ + + function evented(target, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + eventBusKey = _options.eventBusKey; // Set or create the eventBusEl_. + + if (eventBusKey) { + if (!target[eventBusKey].nodeName) { + throw new Error("The eventBusKey \"" + eventBusKey + "\" does not refer to an element."); + } + + target.eventBusEl_ = target[eventBusKey]; + } else { + target.eventBusEl_ = createEl('span', { + className: 'vjs-event-bus' + }); + } + + assign(target, EventedMixin); + + if (target.eventedCallbacks) { + target.eventedCallbacks.forEach(function (callback) { + callback(); + }); + } // When any evented object is disposed, it removes all its listeners. + + + target.on('dispose', function () { + target.off(); + [target, target.el_, target.eventBusEl_].forEach(function (val) { + if (val && DomData.has(val)) { + DomData["delete"](val); + } + }); + window_1.setTimeout(function () { + target.eventBusEl_ = null; + }, 0); + }); + return target; + } + + /** + * @file mixins/stateful.js + * @module stateful + */ + /** + * Contains methods that provide statefulness to an object which is passed + * to {@link module:stateful}. + * + * @mixin StatefulMixin + */ + + var StatefulMixin = { + /** + * A hash containing arbitrary keys and values representing the state of + * the object. + * + * @type {Object} + */ + state: {}, + + /** + * Set the state of an object by mutating its + * {@link module:stateful~StatefulMixin.state|state} object in place. + * + * @fires module:stateful~StatefulMixin#statechanged + * @param {Object|Function} stateUpdates + * A new set of properties to shallow-merge into the plugin state. + * Can be a plain object or a function returning a plain object. + * + * @return {Object|undefined} + * An object containing changes that occurred. If no changes + * occurred, returns `undefined`. + */ + setState: function setState(stateUpdates) { + var _this = this; + + // Support providing the `stateUpdates` state as a function. + if (typeof stateUpdates === 'function') { + stateUpdates = stateUpdates(); + } + + var changes; + each(stateUpdates, function (value, key) { + // Record the change if the value is different from what's in the + // current state. + if (_this.state[key] !== value) { + changes = changes || {}; + changes[key] = { + from: _this.state[key], + to: value + }; + } + + _this.state[key] = value; + }); // Only trigger "statechange" if there were changes AND we have a trigger + // function. This allows us to not require that the target object be an + // evented object. + + if (changes && isEvented(this)) { + /** + * An event triggered on an object that is both + * {@link module:stateful|stateful} and {@link module:evented|evented} + * indicating that its state has changed. + * + * @event module:stateful~StatefulMixin#statechanged + * @type {Object} + * @property {Object} changes + * A hash containing the properties that were changed and + * the values they were changed `from` and `to`. + */ + this.trigger({ + changes: changes, + type: 'statechanged' + }); + } + + return changes; + } + }; + /** + * Applies {@link module:stateful~StatefulMixin|StatefulMixin} to a target + * object. + * + * If the target object is {@link module:evented|evented} and has a + * `handleStateChanged` method, that method will be automatically bound to the + * `statechanged` event on itself. + * + * @param {Object} target + * The object to be made stateful. + * + * @param {Object} [defaultState] + * A default set of properties to populate the newly-stateful object's + * `state` property. + * + * @return {Object} + * Returns the `target`. + */ + + function stateful(target, defaultState) { + assign(target, StatefulMixin); // This happens after the mixing-in because we need to replace the `state` + // added in that step. + + target.state = assign({}, target.state, defaultState); // Auto-bind the `handleStateChanged` method of the target object if it exists. + + if (typeof target.handleStateChanged === 'function' && isEvented(target)) { + target.on('statechanged', target.handleStateChanged); + } + + return target; + } + + /** + * @file string-cases.js + * @module to-lower-case + */ + + /** + * Lowercase the first letter of a string. + * + * @param {string} string + * String to be lowercased + * + * @return {string} + * The string with a lowercased first letter + */ + var toLowerCase = function toLowerCase(string) { + if (typeof string !== 'string') { + return string; + } + + return string.replace(/./, function (w) { + return w.toLowerCase(); + }); + }; + /** + * Uppercase the first letter of a string. + * + * @param {string} string + * String to be uppercased + * + * @return {string} + * The string with an uppercased first letter + */ + + var toTitleCase = function toTitleCase(string) { + if (typeof string !== 'string') { + return string; + } + + return string.replace(/./, function (w) { + return w.toUpperCase(); + }); + }; + /** + * Compares the TitleCase versions of the two strings for equality. + * + * @param {string} str1 + * The first string to compare + * + * @param {string} str2 + * The second string to compare + * + * @return {boolean} + * Whether the TitleCase versions of the strings are equal + */ + + var titleCaseEquals = function titleCaseEquals(str1, str2) { + return toTitleCase(str1) === toTitleCase(str2); + }; + + /** + * @file merge-options.js + * @module merge-options + */ + /** + * Merge two objects recursively. + * + * Performs a deep merge like + * {@link https://lodash.com/docs/4.17.10#merge|lodash.merge}, but only merges + * plain objects (not arrays, elements, or anything else). + * + * Non-plain object values will be copied directly from the right-most + * argument. + * + * @static + * @param {Object[]} sources + * One or more objects to merge into a new object. + * + * @return {Object} + * A new object that is the merged result of all sources. + */ + + function mergeOptions() { + var result = {}; + + for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + sources.forEach(function (source) { + if (!source) { + return; + } + + each(source, function (value, key) { + if (!isPlain(value)) { + result[key] = value; + return; + } + + if (!isPlain(result[key])) { + result[key] = {}; + } + + result[key] = mergeOptions(result[key], value); + }); + }); + return result; + } + + var MapSham = /*#__PURE__*/function () { + function MapSham() { + this.map_ = {}; + } + + var _proto = MapSham.prototype; + + _proto.has = function has(key) { + return key in this.map_; + }; + + _proto["delete"] = function _delete(key) { + var has = this.has(key); + delete this.map_[key]; + return has; + }; + + _proto.set = function set(key, value) { + this.map_[key] = value; + return this; + }; + + _proto.forEach = function forEach(callback, thisArg) { + for (var key in this.map_) { + callback.call(thisArg, this.map_[key], key, this); + } + }; + + return MapSham; + }(); + + var Map$1 = window_1.Map ? window_1.Map : MapSham; + + var SetSham = /*#__PURE__*/function () { + function SetSham() { + this.set_ = {}; + } + + var _proto = SetSham.prototype; + + _proto.has = function has(key) { + return key in this.set_; + }; + + _proto["delete"] = function _delete(key) { + var has = this.has(key); + delete this.set_[key]; + return has; + }; + + _proto.add = function add(key) { + this.set_[key] = 1; + return this; + }; + + _proto.forEach = function forEach(callback, thisArg) { + for (var key in this.set_) { + callback.call(thisArg, key, key, this); + } + }; + + return SetSham; + }(); + + var Set = window_1.Set ? window_1.Set : SetSham; + + /** + * Player Component - Base class for all UI objects + * + * @file component.js + */ + /** + * Base class for all UI Components. + * Components are UI objects which represent both a javascript object and an element + * in the DOM. They can be children of other components, and can have + * children themselves. + * + * Components can also use methods from {@link EventTarget} + */ + + var Component = /*#__PURE__*/function () { + /** + * A callback that is called when a component is ready. Does not have any + * paramters and any callback value will be ignored. + * + * @callback Component~ReadyCallback + * @this Component + */ + + /** + * Creates an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Object[]} [options.children] + * An array of children objects to intialize this component with. Children objects have + * a name property that will be used if more than one component of the same type needs to be + * added. + * + * @param {Component~ReadyCallback} [ready] + * Function that gets called when the `Component` is ready. + */ + function Component(player, options, ready) { + // The component might be the player itself and we can't pass `this` to super + if (!player && this.play) { + this.player_ = player = this; // eslint-disable-line + } else { + this.player_ = player; + } + + this.isDisposed_ = false; // Hold the reference to the parent component via `addChild` method + + this.parentComponent_ = null; // Make a copy of prototype.options_ to protect against overriding defaults + + this.options_ = mergeOptions({}, this.options_); // Updated options with supplied options + + options = this.options_ = mergeOptions(this.options_, options); // Get ID from options or options element if one is supplied + + this.id_ = options.id || options.el && options.el.id; // If there was no ID from the options, generate one + + if (!this.id_) { + // Don't require the player ID function in the case of mock players + var id = player && player.id && player.id() || 'no_player'; + this.id_ = id + "_component_" + newGUID(); + } + + this.name_ = options.name || null; // Create element if one wasn't provided in options + + if (options.el) { + this.el_ = options.el; + } else if (options.createEl !== false) { + this.el_ = this.createEl(); + } // if evented is anything except false, we want to mixin in evented + + + if (options.evented !== false) { + // Make this an evented object and use `el_`, if available, as its event bus + evented(this, { + eventBusKey: this.el_ ? 'el_' : null + }); + this.handleLanguagechange = this.handleLanguagechange.bind(this); + this.on(this.player_, 'languagechange', this.handleLanguagechange); + } + + stateful(this, this.constructor.defaultState); + this.children_ = []; + this.childIndex_ = {}; + this.childNameIndex_ = {}; + this.setTimeoutIds_ = new Set(); + this.setIntervalIds_ = new Set(); + this.rafIds_ = new Set(); + this.namedRafs_ = new Map$1(); + this.clearingTimersOnDispose_ = false; // Add any child components in options + + if (options.initChildren !== false) { + this.initChildren(); + } // Don't want to trigger ready here or it will go before init is actually + // finished for all children that run this constructor + + + this.ready(ready); + + if (options.reportTouchActivity !== false) { + this.enableTouchActivity(); + } + } + /** + * Dispose of the `Component` and all child components. + * + * @fires Component#dispose + */ + + + var _proto = Component.prototype; + + _proto.dispose = function dispose() { + // Bail out if the component has already been disposed. + if (this.isDisposed_) { + return; + } + + if (this.readyQueue_) { + this.readyQueue_.length = 0; + } + /** + * Triggered when a `Component` is disposed. + * + * @event Component#dispose + * @type {EventTarget~Event} + * + * @property {boolean} [bubbles=false] + * set to false so that the dispose event does not + * bubble up + */ + + + this.trigger({ + type: 'dispose', + bubbles: false + }); + this.isDisposed_ = true; // Dispose all children. + + if (this.children_) { + for (var i = this.children_.length - 1; i >= 0; i--) { + if (this.children_[i].dispose) { + this.children_[i].dispose(); + } + } + } // Delete child references + + + this.children_ = null; + this.childIndex_ = null; + this.childNameIndex_ = null; + this.parentComponent_ = null; + + if (this.el_) { + // Remove element from DOM + if (this.el_.parentNode) { + this.el_.parentNode.removeChild(this.el_); + } + + this.el_ = null; + } // remove reference to the player after disposing of the element + + + this.player_ = null; + } + /** + * Determine whether or not this component has been disposed. + * + * @return {boolean} + * If the component has been disposed, will be `true`. Otherwise, `false`. + */ + ; + + _proto.isDisposed = function isDisposed() { + return Boolean(this.isDisposed_); + } + /** + * Return the {@link Player} that the `Component` has attached to. + * + * @return {Player} + * The player that this `Component` has attached to. + */ + ; + + _proto.player = function player() { + return this.player_; + } + /** + * Deep merge of options objects with new options. + * > Note: When both `obj` and `options` contain properties whose values are objects. + * The two properties get merged using {@link module:mergeOptions} + * + * @param {Object} obj + * The object that contains new options. + * + * @return {Object} + * A new object of `this.options_` and `obj` merged together. + */ + ; + + _proto.options = function options(obj) { + if (!obj) { + return this.options_; + } + + this.options_ = mergeOptions(this.options_, obj); + return this.options_; + } + /** + * Get the `Component`s DOM element + * + * @return {Element} + * The DOM element for this `Component`. + */ + ; + + _proto.el = function el() { + return this.el_; + } + /** + * Create the `Component`s DOM element. + * + * @param {string} [tagName] + * Element's DOM node type. e.g. 'div' + * + * @param {Object} [properties] + * An object of properties that should be set. + * + * @param {Object} [attributes] + * An object of attributes that should be set. + * + * @return {Element} + * The element that gets created. + */ + ; + + _proto.createEl = function createEl$1(tagName, properties, attributes) { + return createEl(tagName, properties, attributes); + } + /** + * Localize a string given the string in english. + * + * If tokens are provided, it'll try and run a simple token replacement on the provided string. + * The tokens it looks for look like `{1}` with the index being 1-indexed into the tokens array. + * + * If a `defaultValue` is provided, it'll use that over `string`, + * if a value isn't found in provided language files. + * This is useful if you want to have a descriptive key for token replacement + * but have a succinct localized string and not require `en.json` to be included. + * + * Currently, it is used for the progress bar timing. + * ```js + * { + * "progress bar timing: currentTime={1} duration={2}": "{1} of {2}" + * } + * ``` + * It is then used like so: + * ```js + * this.localize('progress bar timing: currentTime={1} duration{2}', + * [this.player_.currentTime(), this.player_.duration()], + * '{1} of {2}'); + * ``` + * + * Which outputs something like: `01:23 of 24:56`. + * + * + * @param {string} string + * The string to localize and the key to lookup in the language files. + * @param {string[]} [tokens] + * If the current item has token replacements, provide the tokens here. + * @param {string} [defaultValue] + * Defaults to `string`. Can be a default value to use for token replacement + * if the lookup key is needed to be separate. + * + * @return {string} + * The localized string or if no localization exists the english string. + */ + ; + + _proto.localize = function localize(string, tokens, defaultValue) { + if (defaultValue === void 0) { + defaultValue = string; + } + + var code = this.player_.language && this.player_.language(); + var languages = this.player_.languages && this.player_.languages(); + var language = languages && languages[code]; + var primaryCode = code && code.split('-')[0]; + var primaryLang = languages && languages[primaryCode]; + var localizedString = defaultValue; + + if (language && language[string]) { + localizedString = language[string]; + } else if (primaryLang && primaryLang[string]) { + localizedString = primaryLang[string]; + } + + if (tokens) { + localizedString = localizedString.replace(/\{(\d+)\}/g, function (match, index) { + var value = tokens[index - 1]; + var ret = value; + + if (typeof value === 'undefined') { + ret = match; + } + + return ret; + }); + } + + return localizedString; + } + /** + * Handles language change for the player in components. Should be overriden by sub-components. + * + * @abstract + */ + ; + + _proto.handleLanguagechange = function handleLanguagechange() {} + /** + * Return the `Component`s DOM element. This is where children get inserted. + * This will usually be the the same as the element returned in {@link Component#el}. + * + * @return {Element} + * The content element for this `Component`. + */ + ; + + _proto.contentEl = function contentEl() { + return this.contentEl_ || this.el_; + } + /** + * Get this `Component`s ID + * + * @return {string} + * The id of this `Component` + */ + ; + + _proto.id = function id() { + return this.id_; + } + /** + * Get the `Component`s name. The name gets used to reference the `Component` + * and is set during registration. + * + * @return {string} + * The name of this `Component`. + */ + ; + + _proto.name = function name() { + return this.name_; + } + /** + * Get an array of all child components + * + * @return {Array} + * The children + */ + ; + + _proto.children = function children() { + return this.children_; + } + /** + * Returns the child `Component` with the given `id`. + * + * @param {string} id + * The id of the child `Component` to get. + * + * @return {Component|undefined} + * The child `Component` with the given `id` or undefined. + */ + ; + + _proto.getChildById = function getChildById(id) { + return this.childIndex_[id]; + } + /** + * Returns the child `Component` with the given `name`. + * + * @param {string} name + * The name of the child `Component` to get. + * + * @return {Component|undefined} + * The child `Component` with the given `name` or undefined. + */ + ; + + _proto.getChild = function getChild(name) { + if (!name) { + return; + } + + return this.childNameIndex_[name]; + } + /** + * Returns the descendant `Component` following the givent + * descendant `names`. For instance ['foo', 'bar', 'baz'] would + * try to get 'foo' on the current component, 'bar' on the 'foo' + * component and 'baz' on the 'bar' component and return undefined + * if any of those don't exist. + * + * @param {...string[]|...string} names + * The name of the child `Component` to get. + * + * @return {Component|undefined} + * The descendant `Component` following the given descendant + * `names` or undefined. + */ + ; + + _proto.getDescendant = function getDescendant() { + for (var _len = arguments.length, names = new Array(_len), _key = 0; _key < _len; _key++) { + names[_key] = arguments[_key]; + } + + // flatten array argument into the main array + names = names.reduce(function (acc, n) { + return acc.concat(n); + }, []); + var currentChild = this; + + for (var i = 0; i < names.length; i++) { + currentChild = currentChild.getChild(names[i]); + + if (!currentChild || !currentChild.getChild) { + return; + } + } + + return currentChild; + } + /** + * Add a child `Component` inside the current `Component`. + * + * + * @param {string|Component} child + * The name or instance of a child to add. + * + * @param {Object} [options={}] + * The key/value store of options that will get passed to children of + * the child. + * + * @param {number} [index=this.children_.length] + * The index to attempt to add a child into. + * + * @return {Component} + * The `Component` that gets added as a child. When using a string the + * `Component` will get created by this process. + */ + ; + + _proto.addChild = function addChild(child, options, index) { + if (options === void 0) { + options = {}; + } + + if (index === void 0) { + index = this.children_.length; + } + + var component; + var componentName; // If child is a string, create component with options + + if (typeof child === 'string') { + componentName = toTitleCase(child); + var componentClassName = options.componentClass || componentName; // Set name through options + + options.name = componentName; // Create a new object & element for this controls set + // If there's no .player_, this is a player + + var ComponentClass = Component.getComponent(componentClassName); + + if (!ComponentClass) { + throw new Error("Component " + componentClassName + " does not exist"); + } // data stored directly on the videojs object may be + // misidentified as a component to retain + // backwards-compatibility with 4.x. check to make sure the + // component class can be instantiated. + + + if (typeof ComponentClass !== 'function') { + return null; + } + + component = new ComponentClass(this.player_ || this, options); // child is a component instance + } else { + component = child; + } + + if (component.parentComponent_) { + component.parentComponent_.removeChild(component); + } + + this.children_.splice(index, 0, component); + component.parentComponent_ = this; + + if (typeof component.id === 'function') { + this.childIndex_[component.id()] = component; + } // If a name wasn't used to create the component, check if we can use the + // name function of the component + + + componentName = componentName || component.name && toTitleCase(component.name()); + + if (componentName) { + this.childNameIndex_[componentName] = component; + this.childNameIndex_[toLowerCase(componentName)] = component; + } // Add the UI object's element to the container div (box) + // Having an element is not required + + + if (typeof component.el === 'function' && component.el()) { + // If inserting before a component, insert before that component's element + var refNode = null; + + if (this.children_[index + 1]) { + // Most children are components, but the video tech is an HTML element + if (this.children_[index + 1].el_) { + refNode = this.children_[index + 1].el_; + } else if (isEl(this.children_[index + 1])) { + refNode = this.children_[index + 1]; + } + } + + this.contentEl().insertBefore(component.el(), refNode); + } // Return so it can stored on parent object if desired. + + + return component; + } + /** + * Remove a child `Component` from this `Component`s list of children. Also removes + * the child `Component`s element from this `Component`s element. + * + * @param {Component} component + * The child `Component` to remove. + */ + ; + + _proto.removeChild = function removeChild(component) { + if (typeof component === 'string') { + component = this.getChild(component); + } + + if (!component || !this.children_) { + return; + } + + var childFound = false; + + for (var i = this.children_.length - 1; i >= 0; i--) { + if (this.children_[i] === component) { + childFound = true; + this.children_.splice(i, 1); + break; + } + } + + if (!childFound) { + return; + } + + component.parentComponent_ = null; + this.childIndex_[component.id()] = null; + this.childNameIndex_[toTitleCase(component.name())] = null; + this.childNameIndex_[toLowerCase(component.name())] = null; + var compEl = component.el(); + + if (compEl && compEl.parentNode === this.contentEl()) { + this.contentEl().removeChild(component.el()); + } + } + /** + * Add and initialize default child `Component`s based upon options. + */ + ; + + _proto.initChildren = function initChildren() { + var _this = this; + + var children = this.options_.children; + + if (children) { + // `this` is `parent` + var parentOptions = this.options_; + + var handleAdd = function handleAdd(child) { + var name = child.name; + var opts = child.opts; // Allow options for children to be set at the parent options + // e.g. videojs(id, { controlBar: false }); + // instead of videojs(id, { children: { controlBar: false }); + + if (parentOptions[name] !== undefined) { + opts = parentOptions[name]; + } // Allow for disabling default components + // e.g. options['children']['posterImage'] = false + + + if (opts === false) { + return; + } // Allow options to be passed as a simple boolean if no configuration + // is necessary. + + + if (opts === true) { + opts = {}; + } // We also want to pass the original player options + // to each component as well so they don't need to + // reach back into the player for options later. + + + opts.playerOptions = _this.options_.playerOptions; // Create and add the child component. + // Add a direct reference to the child by name on the parent instance. + // If two of the same component are used, different names should be supplied + // for each + + var newChild = _this.addChild(name, opts); + + if (newChild) { + _this[name] = newChild; + } + }; // Allow for an array of children details to passed in the options + + + var workingChildren; + var Tech = Component.getComponent('Tech'); + + if (Array.isArray(children)) { + workingChildren = children; + } else { + workingChildren = Object.keys(children); + } + + workingChildren // children that are in this.options_ but also in workingChildren would + // give us extra children we do not want. So, we want to filter them out. + .concat(Object.keys(this.options_).filter(function (child) { + return !workingChildren.some(function (wchild) { + if (typeof wchild === 'string') { + return child === wchild; + } + + return child === wchild.name; + }); + })).map(function (child) { + var name; + var opts; + + if (typeof child === 'string') { + name = child; + opts = children[name] || _this.options_[name] || {}; + } else { + name = child.name; + opts = child; + } + + return { + name: name, + opts: opts + }; + }).filter(function (child) { + // we have to make sure that child.name isn't in the techOrder since + // techs are registerd as Components but can't aren't compatible + // See https://github.com/videojs/video.js/issues/2772 + var c = Component.getComponent(child.opts.componentClass || toTitleCase(child.name)); + return c && !Tech.isTech(c); + }).forEach(handleAdd); + } + } + /** + * Builds the default DOM class name. Should be overriden by sub-components. + * + * @return {string} + * The DOM class name for this object. + * + * @abstract + */ + ; + + _proto.buildCSSClass = function buildCSSClass() { + // Child classes can include a function that does: + // return 'CLASS NAME' + this._super(); + return ''; + } + /** + * Bind a listener to the component's ready state. + * Different from event listeners in that if the ready event has already happened + * it will trigger the function immediately. + * + * @return {Component} + * Returns itself; method can be chained. + */ + ; + + _proto.ready = function ready(fn, sync) { + if (sync === void 0) { + sync = false; + } + + if (!fn) { + return; + } + + if (!this.isReady_) { + this.readyQueue_ = this.readyQueue_ || []; + this.readyQueue_.push(fn); + return; + } + + if (sync) { + fn.call(this); + } else { + // Call the function asynchronously by default for consistency + this.setTimeout(fn, 1); + } + } + /** + * Trigger all the ready listeners for this `Component`. + * + * @fires Component#ready + */ + ; + + _proto.triggerReady = function triggerReady() { + this.isReady_ = true; // Ensure ready is triggered asynchronously + + this.setTimeout(function () { + var readyQueue = this.readyQueue_; // Reset Ready Queue + + this.readyQueue_ = []; + + if (readyQueue && readyQueue.length > 0) { + readyQueue.forEach(function (fn) { + fn.call(this); + }, this); + } // Allow for using event listeners also + + /** + * Triggered when a `Component` is ready. + * + * @event Component#ready + * @type {EventTarget~Event} + */ + + + this.trigger('ready'); + }, 1); + } + /** + * Find a single DOM element matching a `selector`. This can be within the `Component`s + * `contentEl()` or another custom context. + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelector`. + * + * @param {Element|string} [context=this.contentEl()] + * A DOM element within which to query. Can also be a selector string in + * which case the first matching element will get used as context. If + * missing `this.contentEl()` gets used. If `this.contentEl()` returns + * nothing it falls back to `document`. + * + * @return {Element|null} + * the dom element that was found, or null + * + * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors) + */ + ; + + _proto.$ = function $$1(selector, context) { + return $(selector, context || this.contentEl()); + } + /** + * Finds all DOM element matching a `selector`. This can be within the `Component`s + * `contentEl()` or another custom context. + * + * @param {string} selector + * A valid CSS selector, which will be passed to `querySelectorAll`. + * + * @param {Element|string} [context=this.contentEl()] + * A DOM element within which to query. Can also be a selector string in + * which case the first matching element will get used as context. If + * missing `this.contentEl()` gets used. If `this.contentEl()` returns + * nothing it falls back to `document`. + * + * @return {NodeList} + * a list of dom elements that were found + * + * @see [Information on CSS Selectors](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Getting_Started/Selectors) + */ + ; + + _proto.$$ = function $$$1(selector, context) { + return $$(selector, context || this.contentEl()); + } + /** + * Check if a component's element has a CSS class name. + * + * @param {string} classToCheck + * CSS class name to check. + * + * @return {boolean} + * - True if the `Component` has the class. + * - False if the `Component` does not have the class` + */ + ; + + _proto.hasClass = function hasClass$1(classToCheck) { + return hasClass(this.el_, classToCheck); + } + /** + * Add a CSS class name to the `Component`s element. + * + * @param {string} classToAdd + * CSS class name to add + */ + ; + + _proto.addClass = function addClass$1(classToAdd) { + addClass(this.el_, classToAdd); + } + /** + * Remove a CSS class name from the `Component`s element. + * + * @param {string} classToRemove + * CSS class name to remove + */ + ; + + _proto.removeClass = function removeClass$1(classToRemove) { + removeClass(this.el_, classToRemove); + } + /** + * Add or remove a CSS class name from the component's element. + * - `classToToggle` gets added when {@link Component#hasClass} would return false. + * - `classToToggle` gets removed when {@link Component#hasClass} would return true. + * + * @param {string} classToToggle + * The class to add or remove based on (@link Component#hasClass} + * + * @param {boolean|Dom~predicate} [predicate] + * An {@link Dom~predicate} function or a boolean + */ + ; + + _proto.toggleClass = function toggleClass$1(classToToggle, predicate) { + toggleClass(this.el_, classToToggle, predicate); + } + /** + * Show the `Component`s element if it is hidden by removing the + * 'vjs-hidden' class name from it. + */ + ; + + _proto.show = function show() { + this.removeClass('vjs-hidden'); + } + /** + * Hide the `Component`s element if it is currently showing by adding the + * 'vjs-hidden` class name to it. + */ + ; + + _proto.hide = function hide() { + this.addClass('vjs-hidden'); + } + /** + * Lock a `Component`s element in its visible state by adding the 'vjs-lock-showing' + * class name to it. Used during fadeIn/fadeOut. + * + * @private + */ + ; + + _proto.lockShowing = function lockShowing() { + this.addClass('vjs-lock-showing'); + } + /** + * Unlock a `Component`s element from its visible state by removing the 'vjs-lock-showing' + * class name from it. Used during fadeIn/fadeOut. + * + * @private + */ + ; + + _proto.unlockShowing = function unlockShowing() { + this.removeClass('vjs-lock-showing'); + } + /** + * Get the value of an attribute on the `Component`s element. + * + * @param {string} attribute + * Name of the attribute to get the value from. + * + * @return {string|null} + * - The value of the attribute that was asked for. + * - Can be an empty string on some browsers if the attribute does not exist + * or has no value + * - Most browsers will return null if the attibute does not exist or has + * no value. + * + * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttribute} + */ + ; + + _proto.getAttribute = function getAttribute$1(attribute) { + return getAttribute(this.el_, attribute); + } + /** + * Set the value of an attribute on the `Component`'s element + * + * @param {string} attribute + * Name of the attribute to set. + * + * @param {string} value + * Value to set the attribute to. + * + * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/setAttribute} + */ + ; + + _proto.setAttribute = function setAttribute$1(attribute, value) { + setAttribute(this.el_, attribute, value); + } + /** + * Remove an attribute from the `Component`s element. + * + * @param {string} attribute + * Name of the attribute to remove. + * + * @see [DOM API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Element/removeAttribute} + */ + ; + + _proto.removeAttribute = function removeAttribute$1(attribute) { + removeAttribute(this.el_, attribute); + } + /** + * Get or set the width of the component based upon the CSS styles. + * See {@link Component#dimension} for more detailed information. + * + * @param {number|string} [num] + * The width that you want to set postfixed with '%', 'px' or nothing. + * + * @param {boolean} [skipListeners] + * Skip the componentresize event trigger + * + * @return {number|string} + * The width when getting, zero if there is no width. Can be a string + * postpixed with '%' or 'px'. + */ + ; + + _proto.width = function width(num, skipListeners) { + return this.dimension('width', num, skipListeners); + } + /** + * Get or set the height of the component based upon the CSS styles. + * See {@link Component#dimension} for more detailed information. + * + * @param {number|string} [num] + * The height that you want to set postfixed with '%', 'px' or nothing. + * + * @param {boolean} [skipListeners] + * Skip the componentresize event trigger + * + * @return {number|string} + * The width when getting, zero if there is no width. Can be a string + * postpixed with '%' or 'px'. + */ + ; + + _proto.height = function height(num, skipListeners) { + return this.dimension('height', num, skipListeners); + } + /** + * Set both the width and height of the `Component` element at the same time. + * + * @param {number|string} width + * Width to set the `Component`s element to. + * + * @param {number|string} height + * Height to set the `Component`s element to. + */ + ; + + _proto.dimensions = function dimensions(width, height) { + // Skip componentresize listeners on width for optimization + this.width(width, true); + this.height(height); + } + /** + * Get or set width or height of the `Component` element. This is the shared code + * for the {@link Component#width} and {@link Component#height}. + * + * Things to know: + * - If the width or height in an number this will return the number postfixed with 'px'. + * - If the width/height is a percent this will return the percent postfixed with '%' + * - Hidden elements have a width of 0 with `window.getComputedStyle`. This function + * defaults to the `Component`s `style.width` and falls back to `window.getComputedStyle`. + * See [this]{@link http://www.foliotek.com/devblog/getting-the-width-of-a-hidden-element-with-jquery-using-width/} + * for more information + * - If you want the computed style of the component, use {@link Component#currentWidth} + * and {@link {Component#currentHeight} + * + * @fires Component#componentresize + * + * @param {string} widthOrHeight + 8 'width' or 'height' + * + * @param {number|string} [num] + 8 New dimension + * + * @param {boolean} [skipListeners] + * Skip componentresize event trigger + * + * @return {number} + * The dimension when getting or 0 if unset + */ + ; + + _proto.dimension = function dimension(widthOrHeight, num, skipListeners) { + if (num !== undefined) { + // Set to zero if null or literally NaN (NaN !== NaN) + if (num === null || num !== num) { + num = 0; + } // Check if using css width/height (% or px) and adjust + + + if (('' + num).indexOf('%') !== -1 || ('' + num).indexOf('px') !== -1) { + this.el_.style[widthOrHeight] = num; + } else if (num === 'auto') { + this.el_.style[widthOrHeight] = ''; + } else { + this.el_.style[widthOrHeight] = num + 'px'; + } // skipListeners allows us to avoid triggering the resize event when setting both width and height + + + if (!skipListeners) { + /** + * Triggered when a component is resized. + * + * @event Component#componentresize + * @type {EventTarget~Event} + */ + this.trigger('componentresize'); + } + + return; + } // Not setting a value, so getting it + // Make sure element exists + + + if (!this.el_) { + return 0; + } // Get dimension value from style + + + var val = this.el_.style[widthOrHeight]; + var pxIndex = val.indexOf('px'); + + if (pxIndex !== -1) { + // Return the pixel value with no 'px' + return parseInt(val.slice(0, pxIndex), 10); + } // No px so using % or no style was set, so falling back to offsetWidth/height + // If component has display:none, offset will return 0 + // TODO: handle display:none and no dimension style using px + + + return parseInt(this.el_['offset' + toTitleCase(widthOrHeight)], 10); + } + /** + * Get the computed width or the height of the component's element. + * + * Uses `window.getComputedStyle`. + * + * @param {string} widthOrHeight + * A string containing 'width' or 'height'. Whichever one you want to get. + * + * @return {number} + * The dimension that gets asked for or 0 if nothing was set + * for that dimension. + */ + ; + + _proto.currentDimension = function currentDimension(widthOrHeight) { + var computedWidthOrHeight = 0; + + if (widthOrHeight !== 'width' && widthOrHeight !== 'height') { + throw new Error('currentDimension only accepts width or height value'); + } + + computedWidthOrHeight = computedStyle(this.el_, widthOrHeight); // remove 'px' from variable and parse as integer + + computedWidthOrHeight = parseFloat(computedWidthOrHeight); // if the computed value is still 0, it's possible that the browser is lying + // and we want to check the offset values. + // This code also runs wherever getComputedStyle doesn't exist. + + if (computedWidthOrHeight === 0 || isNaN(computedWidthOrHeight)) { + var rule = "offset" + toTitleCase(widthOrHeight); + computedWidthOrHeight = this.el_[rule]; + } + + return computedWidthOrHeight; + } + /** + * An object that contains width and height values of the `Component`s + * computed style. Uses `window.getComputedStyle`. + * + * @typedef {Object} Component~DimensionObject + * + * @property {number} width + * The width of the `Component`s computed style. + * + * @property {number} height + * The height of the `Component`s computed style. + */ + + /** + * Get an object that contains computed width and height values of the + * component's element. + * + * Uses `window.getComputedStyle`. + * + * @return {Component~DimensionObject} + * The computed dimensions of the component's element. + */ + ; + + _proto.currentDimensions = function currentDimensions() { + return { + width: this.currentDimension('width'), + height: this.currentDimension('height') + }; + } + /** + * Get the computed width of the component's element. + * + * Uses `window.getComputedStyle`. + * + * @return {number} + * The computed width of the component's element. + */ + ; + + _proto.currentWidth = function currentWidth() { + return this.currentDimension('width'); + } + /** + * Get the computed height of the component's element. + * + * Uses `window.getComputedStyle`. + * + * @return {number} + * The computed height of the component's element. + */ + ; + + _proto.currentHeight = function currentHeight() { + return this.currentDimension('height'); + } + /** + * Set the focus to this component + */ + ; + + _proto.focus = function focus() { + this.el_.focus(); + } + /** + * Remove the focus from this component + */ + ; + + _proto.blur = function blur() { + this.el_.blur(); + } + /** + * When this Component receives a `keydown` event which it does not process, + * it passes the event to the Player for handling. + * + * @param {EventTarget~Event} event + * The `keydown` event that caused this function to be called. + */ + ; + + _proto.handleKeyDown = function handleKeyDown(event) { + if (this.player_) { + // We only stop propagation here because we want unhandled events to fall + // back to the browser. + event.stopPropagation(); + this.player_.handleKeyDown(event); + } + } + /** + * Many components used to have a `handleKeyPress` method, which was poorly + * named because it listened to a `keydown` event. This method name now + * delegates to `handleKeyDown`. This means anyone calling `handleKeyPress` + * will not see their method calls stop working. + * + * @param {EventTarget~Event} event + * The event that caused this function to be called. + */ + ; + + _proto.handleKeyPress = function handleKeyPress(event) { + this.handleKeyDown(event); + } + /** + * Emit a 'tap' events when touch event support gets detected. This gets used to + * support toggling the controls through a tap on the video. They get enabled + * because every sub-component would have extra overhead otherwise. + * + * @private + * @fires Component#tap + * @listens Component#touchstart + * @listens Component#touchmove + * @listens Component#touchleave + * @listens Component#touchcancel + * @listens Component#touchend + */ + ; + + _proto.emitTapEvents = function emitTapEvents() { + // Track the start time so we can determine how long the touch lasted + var touchStart = 0; + var firstTouch = null; // Maximum movement allowed during a touch event to still be considered a tap + // Other popular libs use anywhere from 2 (hammer.js) to 15, + // so 10 seems like a nice, round number. + + var tapMovementThreshold = 10; // The maximum length a touch can be while still being considered a tap + + var touchTimeThreshold = 200; + var couldBeTap; + this.on('touchstart', function (event) { + // If more than one finger, don't consider treating this as a click + if (event.touches.length === 1) { + // Copy pageX/pageY from the object + firstTouch = { + pageX: event.touches[0].pageX, + pageY: event.touches[0].pageY + }; // Record start time so we can detect a tap vs. "touch and hold" + + touchStart = window_1.performance.now(); // Reset couldBeTap tracking + + couldBeTap = true; + } + }); + this.on('touchmove', function (event) { + // If more than one finger, don't consider treating this as a click + if (event.touches.length > 1) { + couldBeTap = false; + } else if (firstTouch) { + // Some devices will throw touchmoves for all but the slightest of taps. + // So, if we moved only a small distance, this could still be a tap + var xdiff = event.touches[0].pageX - firstTouch.pageX; + var ydiff = event.touches[0].pageY - firstTouch.pageY; + var touchDistance = Math.sqrt(xdiff * xdiff + ydiff * ydiff); + + if (touchDistance > tapMovementThreshold) { + couldBeTap = false; + } + } + }); + + var noTap = function noTap() { + couldBeTap = false; + }; // TODO: Listen to the original target. http://youtu.be/DujfpXOKUp8?t=13m8s + + + this.on('touchleave', noTap); + this.on('touchcancel', noTap); // When the touch ends, measure how long it took and trigger the appropriate + // event + + this.on('touchend', function (event) { + firstTouch = null; // Proceed only if the touchmove/leave/cancel event didn't happen + + if (couldBeTap === true) { + // Measure how long the touch lasted + var touchTime = window_1.performance.now() - touchStart; // Make sure the touch was less than the threshold to be considered a tap + + if (touchTime < touchTimeThreshold) { + // Don't let browser turn this into a click + event.preventDefault(); + /** + * Triggered when a `Component` is tapped. + * + * @event Component#tap + * @type {EventTarget~Event} + */ + + this.trigger('tap'); // It may be good to copy the touchend event object and change the + // type to tap, if the other event properties aren't exact after + // Events.fixEvent runs (e.g. event.target) + } + } + }); + } + /** + * This function reports user activity whenever touch events happen. This can get + * turned off by any sub-components that wants touch events to act another way. + * + * Report user touch activity when touch events occur. User activity gets used to + * determine when controls should show/hide. It is simple when it comes to mouse + * events, because any mouse event should show the controls. So we capture mouse + * events that bubble up to the player and report activity when that happens. + * With touch events it isn't as easy as `touchstart` and `touchend` toggle player + * controls. So touch events can't help us at the player level either. + * + * User activity gets checked asynchronously. So what could happen is a tap event + * on the video turns the controls off. Then the `touchend` event bubbles up to + * the player. Which, if it reported user activity, would turn the controls right + * back on. We also don't want to completely block touch events from bubbling up. + * Furthermore a `touchmove` event and anything other than a tap, should not turn + * controls back on. + * + * @listens Component#touchstart + * @listens Component#touchmove + * @listens Component#touchend + * @listens Component#touchcancel + */ + ; + + _proto.enableTouchActivity = function enableTouchActivity() { + // Don't continue if the root player doesn't support reporting user activity + if (!this.player() || !this.player().reportUserActivity) { + return; + } // listener for reporting that the user is active + + + var report = bind(this.player(), this.player().reportUserActivity); + var touchHolding; + this.on('touchstart', function () { + report(); // For as long as the they are touching the device or have their mouse down, + // we consider them active even if they're not moving their finger or mouse. + // So we want to continue to update that they are active + + this.clearInterval(touchHolding); // report at the same interval as activityCheck + + touchHolding = this.setInterval(report, 250); + }); + + var touchEnd = function touchEnd(event) { + report(); // stop the interval that maintains activity if the touch is holding + + this.clearInterval(touchHolding); + }; + + this.on('touchmove', report); + this.on('touchend', touchEnd); + this.on('touchcancel', touchEnd); + } + /** + * A callback that has no parameters and is bound into `Component`s context. + * + * @callback Component~GenericCallback + * @this Component + */ + + /** + * Creates a function that runs after an `x` millisecond timeout. This function is a + * wrapper around `window.setTimeout`. There are a few reasons to use this one + * instead though: + * 1. It gets cleared via {@link Component#clearTimeout} when + * {@link Component#dispose} gets called. + * 2. The function callback will gets turned into a {@link Component~GenericCallback} + * + * > Note: You can't use `window.clearTimeout` on the id returned by this function. This + * will cause its dispose listener not to get cleaned up! Please use + * {@link Component#clearTimeout} or {@link Component#dispose} instead. + * + * @param {Component~GenericCallback} fn + * The function that will be run after `timeout`. + * + * @param {number} timeout + * Timeout in milliseconds to delay before executing the specified function. + * + * @return {number} + * Returns a timeout ID that gets used to identify the timeout. It can also + * get used in {@link Component#clearTimeout} to clear the timeout that + * was set. + * + * @listens Component#dispose + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout} + */ + ; + + _proto.setTimeout = function setTimeout(fn, timeout) { + var _this2 = this; + + // declare as variables so they are properly available in timeout function + // eslint-disable-next-line + var timeoutId; + fn = bind(this, fn); + this.clearTimersOnDispose_(); + timeoutId = window_1.setTimeout(function () { + if (_this2.setTimeoutIds_.has(timeoutId)) { + _this2.setTimeoutIds_["delete"](timeoutId); + } + + fn(); + }, timeout); + this.setTimeoutIds_.add(timeoutId); + return timeoutId; + } + /** + * Clears a timeout that gets created via `window.setTimeout` or + * {@link Component#setTimeout}. If you set a timeout via {@link Component#setTimeout} + * use this function instead of `window.clearTimout`. If you don't your dispose + * listener will not get cleaned up until {@link Component#dispose}! + * + * @param {number} timeoutId + * The id of the timeout to clear. The return value of + * {@link Component#setTimeout} or `window.setTimeout`. + * + * @return {number} + * Returns the timeout id that was cleared. + * + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearTimeout} + */ + ; + + _proto.clearTimeout = function clearTimeout(timeoutId) { + if (this.setTimeoutIds_.has(timeoutId)) { + this.setTimeoutIds_["delete"](timeoutId); + window_1.clearTimeout(timeoutId); + } + + return timeoutId; + } + /** + * Creates a function that gets run every `x` milliseconds. This function is a wrapper + * around `window.setInterval`. There are a few reasons to use this one instead though. + * 1. It gets cleared via {@link Component#clearInterval} when + * {@link Component#dispose} gets called. + * 2. The function callback will be a {@link Component~GenericCallback} + * + * @param {Component~GenericCallback} fn + * The function to run every `x` seconds. + * + * @param {number} interval + * Execute the specified function every `x` milliseconds. + * + * @return {number} + * Returns an id that can be used to identify the interval. It can also be be used in + * {@link Component#clearInterval} to clear the interval. + * + * @listens Component#dispose + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setInterval} + */ + ; + + _proto.setInterval = function setInterval(fn, interval) { + fn = bind(this, fn); + this.clearTimersOnDispose_(); + var intervalId = window_1.setInterval(fn, interval); + this.setIntervalIds_.add(intervalId); + return intervalId; + } + /** + * Clears an interval that gets created via `window.setInterval` or + * {@link Component#setInterval}. If you set an inteval via {@link Component#setInterval} + * use this function instead of `window.clearInterval`. If you don't your dispose + * listener will not get cleaned up until {@link Component#dispose}! + * + * @param {number} intervalId + * The id of the interval to clear. The return value of + * {@link Component#setInterval} or `window.setInterval`. + * + * @return {number} + * Returns the interval id that was cleared. + * + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/clearInterval} + */ + ; + + _proto.clearInterval = function clearInterval(intervalId) { + if (this.setIntervalIds_.has(intervalId)) { + this.setIntervalIds_["delete"](intervalId); + window_1.clearInterval(intervalId); + } + + return intervalId; + } + /** + * Queues up a callback to be passed to requestAnimationFrame (rAF), but + * with a few extra bonuses: + * + * - Supports browsers that do not support rAF by falling back to + * {@link Component#setTimeout}. + * + * - The callback is turned into a {@link Component~GenericCallback} (i.e. + * bound to the component). + * + * - Automatic cancellation of the rAF callback is handled if the component + * is disposed before it is called. + * + * @param {Component~GenericCallback} fn + * A function that will be bound to this component and executed just + * before the browser's next repaint. + * + * @return {number} + * Returns an rAF ID that gets used to identify the timeout. It can + * also be used in {@link Component#cancelAnimationFrame} to cancel + * the animation frame callback. + * + * @listens Component#dispose + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame} + */ + ; + + _proto.requestAnimationFrame = function requestAnimationFrame(fn) { + var _this3 = this; + + // Fall back to using a timer. + if (!this.supportsRaf_) { + return this.setTimeout(fn, 1000 / 60); + } + + this.clearTimersOnDispose_(); // declare as variables so they are properly available in rAF function + // eslint-disable-next-line + + var id; + fn = bind(this, fn); + id = window_1.requestAnimationFrame(function () { + if (_this3.rafIds_.has(id)) { + _this3.rafIds_["delete"](id); + } + + fn(); + }); + this.rafIds_.add(id); + return id; + } + /** + * Request an animation frame, but only one named animation + * frame will be queued. Another will never be added until + * the previous one finishes. + * + * @param {string} name + * The name to give this requestAnimationFrame + * + * @param {Component~GenericCallback} fn + * A function that will be bound to this component and executed just + * before the browser's next repaint. + */ + ; + + _proto.requestNamedAnimationFrame = function requestNamedAnimationFrame(name, fn) { + var _this4 = this; + + if (this.namedRafs_.has(name)) { + return; + } + + this.clearTimersOnDispose_(); + fn = bind(this, fn); + var id = this.requestAnimationFrame(function () { + fn(); + + if (_this4.namedRafs_.has(name)) { + _this4.namedRafs_["delete"](name); + } + }); + this.namedRafs_.set(name, id); + return name; + } + /** + * Cancels a current named animation frame if it exists. + * + * @param {string} name + * The name of the requestAnimationFrame to cancel. + */ + ; + + _proto.cancelNamedAnimationFrame = function cancelNamedAnimationFrame(name) { + if (!this.namedRafs_.has(name)) { + return; + } + + this.cancelAnimationFrame(this.namedRafs_.get(name)); + this.namedRafs_["delete"](name); + } + /** + * Cancels a queued callback passed to {@link Component#requestAnimationFrame} + * (rAF). + * + * If you queue an rAF callback via {@link Component#requestAnimationFrame}, + * use this function instead of `window.cancelAnimationFrame`. If you don't, + * your dispose listener will not get cleaned up until {@link Component#dispose}! + * + * @param {number} id + * The rAF ID to clear. The return value of {@link Component#requestAnimationFrame}. + * + * @return {number} + * Returns the rAF ID that was cleared. + * + * @see [Similar to]{@link https://developer.mozilla.org/en-US/docs/Web/API/window/cancelAnimationFrame} + */ + ; + + _proto.cancelAnimationFrame = function cancelAnimationFrame(id) { + // Fall back to using a timer. + if (!this.supportsRaf_) { + return this.clearTimeout(id); + } + + if (this.rafIds_.has(id)) { + this.rafIds_["delete"](id); + window_1.cancelAnimationFrame(id); + } + + return id; + } + /** + * A function to setup `requestAnimationFrame`, `setTimeout`, + * and `setInterval`, clearing on dispose. + * + * > Previously each timer added and removed dispose listeners on it's own. + * For better performance it was decided to batch them all, and use `Set`s + * to track outstanding timer ids. + * + * @private + */ + ; + + _proto.clearTimersOnDispose_ = function clearTimersOnDispose_() { + var _this5 = this; + + if (this.clearingTimersOnDispose_) { + return; + } + + this.clearingTimersOnDispose_ = true; + this.one('dispose', function () { + [['namedRafs_', 'cancelNamedAnimationFrame'], ['rafIds_', 'cancelAnimationFrame'], ['setTimeoutIds_', 'clearTimeout'], ['setIntervalIds_', 'clearInterval']].forEach(function (_ref) { + var idName = _ref[0], + cancelName = _ref[1]; + + // for a `Set` key will actually be the value again + // so forEach((val, val) =>` but for maps we want to use + // the key. + _this5[idName].forEach(function (val, key) { + return _this5[cancelName](key); + }); + }); + _this5.clearingTimersOnDispose_ = false; + }); + } + /** + * Register a `Component` with `videojs` given the name and the component. + * + * > NOTE: {@link Tech}s should not be registered as a `Component`. {@link Tech}s + * should be registered using {@link Tech.registerTech} or + * {@link videojs:videojs.registerTech}. + * + * > NOTE: This function can also be seen on videojs as + * {@link videojs:videojs.registerComponent}. + * + * @param {string} name + * The name of the `Component` to register. + * + * @param {Component} ComponentToRegister + * The `Component` class to register. + * + * @return {Component} + * The `Component` that was registered. + */ + ; + + Component.registerComponent = function registerComponent(name, ComponentToRegister) { + if (typeof name !== 'string' || !name) { + throw new Error("Illegal component name, \"" + name + "\"; must be a non-empty string."); + } + + var Tech = Component.getComponent('Tech'); // We need to make sure this check is only done if Tech has been registered. + + var isTech = Tech && Tech.isTech(ComponentToRegister); + var isComp = Component === ComponentToRegister || Component.prototype.isPrototypeOf(ComponentToRegister.prototype); + + if (isTech || !isComp) { + var reason; + + if (isTech) { + reason = 'techs must be registered using Tech.registerTech()'; + } else { + reason = 'must be a Component subclass'; + } + + throw new Error("Illegal component, \"" + name + "\"; " + reason + "."); + } + + name = toTitleCase(name); + + if (!Component.components_) { + Component.components_ = {}; + } + + var Player = Component.getComponent('Player'); + + if (name === 'Player' && Player && Player.players) { + var players = Player.players; + var playerNames = Object.keys(players); // If we have players that were disposed, then their name will still be + // in Players.players. So, we must loop through and verify that the value + // for each item is not null. This allows registration of the Player component + // after all players have been disposed or before any were created. + + if (players && playerNames.length > 0 && playerNames.map(function (pname) { + return players[pname]; + }).every(Boolean)) { + throw new Error('Can not register Player component after player has been created.'); + } + } + + Component.components_[name] = ComponentToRegister; + Component.components_[toLowerCase(name)] = ComponentToRegister; + return ComponentToRegister; + } + /** + * Get a `Component` based on the name it was registered with. + * + * @param {string} name + * The Name of the component to get. + * + * @return {Component} + * The `Component` that got registered under the given name. + * + * @deprecated In `videojs` 6 this will not return `Component`s that were not + * registered using {@link Component.registerComponent}. Currently we + * check the global `videojs` object for a `Component` name and + * return that if it exists. + */ + ; + + Component.getComponent = function getComponent(name) { + if (!name || !Component.components_) { + return; + } + + return Component.components_[name]; + }; + + return Component; + }(); + /** + * Whether or not this component supports `requestAnimationFrame`. + * + * This is exposed primarily for testing purposes. + * + * @private + * @type {Boolean} + */ + + + Component.prototype.supportsRaf_ = typeof window_1.requestAnimationFrame === 'function' && typeof window_1.cancelAnimationFrame === 'function'; + Component.registerComponent('Component', Component); + + function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; + } + + var assertThisInitialized = _assertThisInitialized; + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + var inheritsLoose = _inheritsLoose; + + /** + * @file time-ranges.js + * @module time-ranges + */ + /** + * Returns the time for the specified index at the start or end + * of a TimeRange object. + * + * @typedef {Function} TimeRangeIndex + * + * @param {number} [index=0] + * The range number to return the time for. + * + * @return {number} + * The time offset at the specified index. + * + * @deprecated The index argument must be provided. + * In the future, leaving it out will throw an error. + */ + + /** + * An object that contains ranges of time. + * + * @typedef {Object} TimeRange + * + * @property {number} length + * The number of time ranges represented by this object. + * + * @property {module:time-ranges~TimeRangeIndex} start + * Returns the time offset at which a specified time range begins. + * + * @property {module:time-ranges~TimeRangeIndex} end + * Returns the time offset at which a specified time range ends. + * + * @see https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges + */ + + /** + * Check if any of the time ranges are over the maximum index. + * + * @private + * @param {string} fnName + * The function name to use for logging + * + * @param {number} index + * The index to check + * + * @param {number} maxIndex + * The maximum possible index + * + * @throws {Error} if the timeRanges provided are over the maxIndex + */ + + function rangeCheck(fnName, index, maxIndex) { + if (typeof index !== 'number' || index < 0 || index > maxIndex) { + throw new Error("Failed to execute '" + fnName + "' on 'TimeRanges': The index provided (" + index + ") is non-numeric or out of bounds (0-" + maxIndex + ")."); + } + } + /** + * Get the time for the specified index at the start or end + * of a TimeRange object. + * + * @private + * @param {string} fnName + * The function name to use for logging + * + * @param {string} valueIndex + * The property that should be used to get the time. should be + * 'start' or 'end' + * + * @param {Array} ranges + * An array of time ranges + * + * @param {Array} [rangeIndex=0] + * The index to start the search at + * + * @return {number} + * The time that offset at the specified index. + * + * @deprecated rangeIndex must be set to a value, in the future this will throw an error. + * @throws {Error} if rangeIndex is more than the length of ranges + */ + + + function getRange(fnName, valueIndex, ranges, rangeIndex) { + rangeCheck(fnName, rangeIndex, ranges.length - 1); + return ranges[rangeIndex][valueIndex]; + } + /** + * Create a time range object given ranges of time. + * + * @private + * @param {Array} [ranges] + * An array of time ranges. + */ + + + function createTimeRangesObj(ranges) { + var timeRangesObj; + + if (ranges === undefined || ranges.length === 0) { + timeRangesObj = { + length: 0, + start: function start() { + throw new Error('This TimeRanges object is empty'); + }, + end: function end() { + throw new Error('This TimeRanges object is empty'); + } + }; + } else { + timeRangesObj = { + length: ranges.length, + start: getRange.bind(null, 'start', 0, ranges), + end: getRange.bind(null, 'end', 1, ranges) + }; + } + + if (window_1.Symbol && window_1.Symbol.iterator) { + timeRangesObj[window_1.Symbol.iterator] = function () { + return (ranges || []).values(); + }; + } + + return timeRangesObj; + } + /** + * Create a `TimeRange` object which mimics an + * {@link https://developer.mozilla.org/en-US/docs/Web/API/TimeRanges|HTML5 TimeRanges instance}. + * + * @param {number|Array[]} start + * The start of a single range (a number) or an array of ranges (an + * array of arrays of two numbers each). + * + * @param {number} end + * The end of a single range. Cannot be used with the array form of + * the `start` argument. + */ + + + function createTimeRanges(start, end) { + if (Array.isArray(start)) { + return createTimeRangesObj(start); + } else if (start === undefined || end === undefined) { + return createTimeRangesObj(); + } + + return createTimeRangesObj([[start, end]]); + } + + /** + * @file buffer.js + * @module buffer + */ + /** + * Compute the percentage of the media that has been buffered. + * + * @param {TimeRange} buffered + * The current `TimeRange` object representing buffered time ranges + * + * @param {number} duration + * Total duration of the media + * + * @return {number} + * Percent buffered of the total duration in decimal form. + */ + + function bufferedPercent(buffered, duration) { + var bufferedDuration = 0; + var start; + var end; + + if (!duration) { + return 0; + } + + if (!buffered || !buffered.length) { + buffered = createTimeRanges(0, 0); + } + + for (var i = 0; i < buffered.length; i++) { + start = buffered.start(i); + end = buffered.end(i); // buffered end can be bigger than duration by a very small fraction + + if (end > duration) { + end = duration; + } + + bufferedDuration += end - start; + } + + return bufferedDuration / duration; + } + + /** + * @file media-error.js + */ + /** + * A Custom `MediaError` class which mimics the standard HTML5 `MediaError` class. + * + * @param {number|string|Object|MediaError} value + * This can be of multiple types: + * - number: should be a standard error code + * - string: an error message (the code will be 0) + * - Object: arbitrary properties + * - `MediaError` (native): used to populate a video.js `MediaError` object + * - `MediaError` (video.js): will return itself if it's already a + * video.js `MediaError` object. + * + * @see [MediaError Spec]{@link https://dev.w3.org/html5/spec-author-view/video.html#mediaerror} + * @see [Encrypted MediaError Spec]{@link https://www.w3.org/TR/2013/WD-encrypted-media-20130510/#error-codes} + * + * @class MediaError + */ + + function MediaError(value) { + // Allow redundant calls to this constructor to avoid having `instanceof` + // checks peppered around the code. + if (value instanceof MediaError) { + return value; + } + + if (typeof value === 'number') { + this.code = value; + } else if (typeof value === 'string') { + // default code is zero, so this is a custom error + this.message = value; + } else if (isObject(value)) { + // We assign the `code` property manually because native `MediaError` objects + // do not expose it as an own/enumerable property of the object. + if (typeof value.code === 'number') { + this.code = value.code; + } + + assign(this, value); + } + + if (!this.message) { + this.message = MediaError.defaultMessages[this.code] || ''; + } + } + /** + * The error code that refers two one of the defined `MediaError` types + * + * @type {Number} + */ + + + MediaError.prototype.code = 0; + /** + * An optional message that to show with the error. Message is not part of the HTML5 + * video spec but allows for more informative custom errors. + * + * @type {String} + */ + + MediaError.prototype.message = ''; + /** + * An optional status code that can be set by plugins to allow even more detail about + * the error. For example a plugin might provide a specific HTTP status code and an + * error message for that code. Then when the plugin gets that error this class will + * know how to display an error message for it. This allows a custom message to show + * up on the `Player` error overlay. + * + * @type {Array} + */ + + MediaError.prototype.status = null; + /** + * Errors indexed by the W3C standard. The order **CANNOT CHANGE**! See the + * specification listed under {@link MediaError} for more information. + * + * @enum {array} + * @readonly + * @property {string} 0 - MEDIA_ERR_CUSTOM + * @property {string} 1 - MEDIA_ERR_ABORTED + * @property {string} 2 - MEDIA_ERR_NETWORK + * @property {string} 3 - MEDIA_ERR_DECODE + * @property {string} 4 - MEDIA_ERR_SRC_NOT_SUPPORTED + * @property {string} 5 - MEDIA_ERR_ENCRYPTED + */ + + MediaError.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED']; + /** + * The default `MediaError` messages based on the {@link MediaError.errorTypes}. + * + * @type {Array} + * @constant + */ + + MediaError.defaultMessages = { + 1: 'You aborted the media playback', + 2: 'A network error caused the media download to fail part-way.', + 3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.', + 4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.', + 5: 'The media is encrypted and we do not have the keys to decrypt it.' + }; // Add types as properties on MediaError + // e.g. MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED = 4; + + for (var errNum = 0; errNum < MediaError.errorTypes.length; errNum++) { + MediaError[MediaError.errorTypes[errNum]] = errNum; // values should be accessible on both the class and instance + + MediaError.prototype[MediaError.errorTypes[errNum]] = errNum; + } // jsdocs for instance/static members added above + + var tuple = SafeParseTuple; + + function SafeParseTuple(obj, reviver) { + var json; + var error = null; + + try { + json = JSON.parse(obj, reviver); + } catch (err) { + error = err; + } + + return [error, json]; + } + + /** + * Returns whether an object is `Promise`-like (i.e. has a `then` method). + * + * @param {Object} value + * An object that may or may not be `Promise`-like. + * + * @return {boolean} + * Whether or not the object is `Promise`-like. + */ + function isPromise(value) { + return value !== undefined && value !== null && typeof value.then === 'function'; + } + /** + * Silence a Promise-like object. + * + * This is useful for avoiding non-harmful, but potentially confusing "uncaught + * play promise" rejection error messages. + * + * @param {Object} value + * An object that may or may not be `Promise`-like. + */ + + function silencePromise(value) { + if (isPromise(value)) { + value.then(null, function (e) {}); + } + } + + /** + * @file text-track-list-converter.js Utilities for capturing text track state and + * re-creating tracks based on a capture. + * + * @module text-track-list-converter + */ + + /** + * Examine a single {@link TextTrack} and return a JSON-compatible javascript object that + * represents the {@link TextTrack}'s state. + * + * @param {TextTrack} track + * The text track to query. + * + * @return {Object} + * A serializable javascript representation of the TextTrack. + * @private + */ + var trackToJson_ = function trackToJson_(track) { + var ret = ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(function (acc, prop, i) { + if (track[prop]) { + acc[prop] = track[prop]; + } + + return acc; + }, { + cues: track.cues && Array.prototype.map.call(track.cues, function (cue) { + return { + startTime: cue.startTime, + endTime: cue.endTime, + text: cue.text, + id: cue.id + }; + }) + }); + return ret; + }; + /** + * Examine a {@link Tech} and return a JSON-compatible javascript array that represents the + * state of all {@link TextTrack}s currently configured. The return array is compatible with + * {@link text-track-list-converter:jsonToTextTracks}. + * + * @param {Tech} tech + * The tech object to query + * + * @return {Array} + * A serializable javascript representation of the {@link Tech}s + * {@link TextTrackList}. + */ + + + var textTracksToJson = function textTracksToJson(tech) { + var trackEls = tech.$$('track'); + var trackObjs = Array.prototype.map.call(trackEls, function (t) { + return t.track; + }); + var tracks = Array.prototype.map.call(trackEls, function (trackEl) { + var json = trackToJson_(trackEl.track); + + if (trackEl.src) { + json.src = trackEl.src; + } + + return json; + }); + return tracks.concat(Array.prototype.filter.call(tech.textTracks(), function (track) { + return trackObjs.indexOf(track) === -1; + }).map(trackToJson_)); + }; + /** + * Create a set of remote {@link TextTrack}s on a {@link Tech} based on an array of javascript + * object {@link TextTrack} representations. + * + * @param {Array} json + * An array of `TextTrack` representation objects, like those that would be + * produced by `textTracksToJson`. + * + * @param {Tech} tech + * The `Tech` to create the `TextTrack`s on. + */ + + + var jsonToTextTracks = function jsonToTextTracks(json, tech) { + json.forEach(function (track) { + var addedTrack = tech.addRemoteTextTrack(track).track; + + if (!track.src && track.cues) { + track.cues.forEach(function (cue) { + return addedTrack.addCue(cue); + }); + } + }); + return tech.textTracks(); + }; + + var textTrackConverter = { + textTracksToJson: textTracksToJson, + jsonToTextTracks: jsonToTextTracks, + trackToJson_: trackToJson_ + }; + + var keycode = createCommonjsModule(function (module, exports) { + // Source: http://jsfiddle.net/vWx8V/ + // http://stackoverflow.com/questions/5603195/full-list-of-javascript-keycodes + + /** + * Conenience method returns corresponding value for given keyName or keyCode. + * + * @param {Mixed} keyCode {Number} or keyName {String} + * @return {Mixed} + * @api public + */ + function keyCode(searchInput) { + // Keyboard Events + if (searchInput && 'object' === typeof searchInput) { + var hasKeyCode = searchInput.which || searchInput.keyCode || searchInput.charCode; + if (hasKeyCode) searchInput = hasKeyCode; + } // Numbers + + + if ('number' === typeof searchInput) return names[searchInput]; // Everything else (cast to string) + + var search = String(searchInput); // check codes + + var foundNamedKey = codes[search.toLowerCase()]; + if (foundNamedKey) return foundNamedKey; // check aliases + + var foundNamedKey = aliases[search.toLowerCase()]; + if (foundNamedKey) return foundNamedKey; // weird character? + + if (search.length === 1) return search.charCodeAt(0); + return undefined; + } + /** + * Compares a keyboard event with a given keyCode or keyName. + * + * @param {Event} event Keyboard event that should be tested + * @param {Mixed} keyCode {Number} or keyName {String} + * @return {Boolean} + * @api public + */ + + + keyCode.isEventKey = function isEventKey(event, nameOrCode) { + if (event && 'object' === typeof event) { + var keyCode = event.which || event.keyCode || event.charCode; + + if (keyCode === null || keyCode === undefined) { + return false; + } + + if (typeof nameOrCode === 'string') { + // check codes + var foundNamedKey = codes[nameOrCode.toLowerCase()]; + + if (foundNamedKey) { + return foundNamedKey === keyCode; + } // check aliases + + + var foundNamedKey = aliases[nameOrCode.toLowerCase()]; + + if (foundNamedKey) { + return foundNamedKey === keyCode; + } + } else if (typeof nameOrCode === 'number') { + return nameOrCode === keyCode; + } + + return false; + } + }; + + exports = module.exports = keyCode; + /** + * Get by name + * + * exports.code['enter'] // => 13 + */ + + var codes = exports.code = exports.codes = { + 'backspace': 8, + 'tab': 9, + 'enter': 13, + 'shift': 16, + 'ctrl': 17, + 'alt': 18, + 'pause/break': 19, + 'caps lock': 20, + 'esc': 27, + 'space': 32, + 'page up': 33, + 'page down': 34, + 'end': 35, + 'home': 36, + 'left': 37, + 'up': 38, + 'right': 39, + 'down': 40, + 'insert': 45, + 'delete': 46, + 'command': 91, + 'left command': 91, + 'right command': 93, + 'numpad *': 106, + 'numpad +': 107, + 'numpad -': 109, + 'numpad .': 110, + 'numpad /': 111, + 'num lock': 144, + 'scroll lock': 145, + 'my computer': 182, + 'my calculator': 183, + ';': 186, + '=': 187, + ',': 188, + '-': 189, + '.': 190, + '/': 191, + '`': 192, + '[': 219, + '\\': 220, + ']': 221, + "'": 222 + }; // Helper aliases + + var aliases = exports.aliases = { + 'windows': 91, + '⇧': 16, + '⌥': 18, + '⌃': 17, + '⌘': 91, + 'ctl': 17, + 'control': 17, + 'option': 18, + 'pause': 19, + 'break': 19, + 'caps': 20, + 'return': 13, + 'escape': 27, + 'spc': 32, + 'spacebar': 32, + 'pgup': 33, + 'pgdn': 34, + 'ins': 45, + 'del': 46, + 'cmd': 91 + }; + /*! + * Programatically add the following + */ + // lower case chars + + for (i = 97; i < 123; i++) { + codes[String.fromCharCode(i)] = i - 32; + } // numbers + + + for (var i = 48; i < 58; i++) { + codes[i - 48] = i; + } // function keys + + + for (i = 1; i < 13; i++) { + codes['f' + i] = i + 111; + } // numpad keys + + + for (i = 0; i < 10; i++) { + codes['numpad ' + i] = i + 96; + } + /** + * Get by code + * + * exports.name[13] // => 'Enter' + */ + + + var names = exports.names = exports.title = {}; // title for backward compat + // Create reverse mapping + + for (i in codes) { + names[codes[i]] = i; + } // Add aliases + + + for (var alias in aliases) { + codes[alias] = aliases[alias]; + } + }); + keycode.code; + keycode.codes; + keycode.aliases; + keycode.names; + keycode.title; + + var MODAL_CLASS_NAME = 'vjs-modal-dialog'; + /** + * The `ModalDialog` displays over the video and its controls, which blocks + * interaction with the player until it is closed. + * + * Modal dialogs include a "Close" button and will close when that button + * is activated - or when ESC is pressed anywhere. + * + * @extends Component + */ + + var ModalDialog = /*#__PURE__*/function (_Component) { + inheritsLoose(ModalDialog, _Component); + + /** + * Create an instance of this class. + * + * @param {Player} player + * The `Player` that this class should be attached to. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Mixed} [options.content=undefined] + * Provide customized content for this modal. + * + * @param {string} [options.description] + * A text description for the modal, primarily for accessibility. + * + * @param {boolean} [options.fillAlways=false] + * Normally, modals are automatically filled only the first time + * they open. This tells the modal to refresh its content + * every time it opens. + * + * @param {string} [options.label] + * A text label for the modal, primarily for accessibility. + * + * @param {boolean} [options.pauseOnOpen=true] + * If `true`, playback will will be paused if playing when + * the modal opens, and resumed when it closes. + * + * @param {boolean} [options.temporary=true] + * If `true`, the modal can only be opened once; it will be + * disposed as soon as it's closed. + * + * @param {boolean} [options.uncloseable=false] + * If `true`, the user will not be able to close the modal + * through the UI in the normal ways. Programmatic closing is + * still possible. + */ + function ModalDialog(player, options) { + var _this; + + _this = _Component.call(this, player, options) || this; + + _this.handleKeyDown_ = function (e) { + return _this.handleKeyDown(e); + }; + + _this.close_ = function (e) { + return _this.close(e); + }; + + _this.opened_ = _this.hasBeenOpened_ = _this.hasBeenFilled_ = false; + + _this.closeable(!_this.options_.uncloseable); + + _this.content(_this.options_.content); // Make sure the contentEl is defined AFTER any children are initialized + // because we only want the contents of the modal in the contentEl + // (not the UI elements like the close button). + + + _this.contentEl_ = createEl('div', { + className: MODAL_CLASS_NAME + "-content" + }, { + role: 'document' + }); + _this.descEl_ = createEl('p', { + className: MODAL_CLASS_NAME + "-description vjs-control-text", + id: _this.el().getAttribute('aria-describedby') + }); + textContent(_this.descEl_, _this.description()); + + _this.el_.appendChild(_this.descEl_); + + _this.el_.appendChild(_this.contentEl_); + + return _this; + } + /** + * Create the `ModalDialog`'s DOM element + * + * @return {Element} + * The DOM element that gets created. + */ + + + var _proto = ModalDialog.prototype; + + _proto.createEl = function createEl() { + return _Component.prototype.createEl.call(this, 'div', { + className: this.buildCSSClass(), + tabIndex: -1 + }, { + 'aria-describedby': this.id() + "_description", + 'aria-hidden': 'true', + 'aria-label': this.label(), + 'role': 'dialog' + }); + }; + + _proto.dispose = function dispose() { + this.contentEl_ = null; + this.descEl_ = null; + this.previouslyActiveEl_ = null; + + _Component.prototype.dispose.call(this); + } + /** + * Builds the default DOM `className`. + * + * @return {string} + * The DOM `className` for this object. + */ + ; + + _proto.buildCSSClass = function buildCSSClass() { + return MODAL_CLASS_NAME + " vjs-hidden " + _Component.prototype.buildCSSClass.call(this); + } + /** + * Returns the label string for this modal. Primarily used for accessibility. + * + * @return {string} + * the localized or raw label of this modal. + */ + ; + + _proto.label = function label() { + return this.localize(this.options_.label || 'Modal Window'); + } + /** + * Returns the description string for this modal. Primarily used for + * accessibility. + * + * @return {string} + * The localized or raw description of this modal. + */ + ; + + _proto.description = function description() { + var desc = this.options_.description || this.localize('This is a modal window.'); // Append a universal closeability message if the modal is closeable. + + if (this.closeable()) { + desc += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.'); + } + + return desc; + } + /** + * Opens the modal. + * + * @fires ModalDialog#beforemodalopen + * @fires ModalDialog#modalopen + */ + ; + + _proto.open = function open() { + if (!this.opened_) { + var player = this.player(); + /** + * Fired just before a `ModalDialog` is opened. + * + * @event ModalDialog#beforemodalopen + * @type {EventTarget~Event} + */ + + this.trigger('beforemodalopen'); + this.opened_ = true; // Fill content if the modal has never opened before and + // never been filled. + + if (this.options_.fillAlways || !this.hasBeenOpened_ && !this.hasBeenFilled_) { + this.fill(); + } // If the player was playing, pause it and take note of its previously + // playing state. + + + this.wasPlaying_ = !player.paused(); + + if (this.options_.pauseOnOpen && this.wasPlaying_) { + player.pause(); + } + + this.on('keydown', this.handleKeyDown_); // Hide controls and note if they were enabled. + + this.hadControls_ = player.controls(); + player.controls(false); + this.show(); + this.conditionalFocus_(); + this.el().setAttribute('aria-hidden', 'false'); + /** + * Fired just after a `ModalDialog` is opened. + * + * @event ModalDialog#modalopen + * @type {EventTarget~Event} + */ + + this.trigger('modalopen'); + this.hasBeenOpened_ = true; + } + } + /** + * If the `ModalDialog` is currently open or closed. + * + * @param {boolean} [value] + * If given, it will open (`true`) or close (`false`) the modal. + * + * @return {boolean} + * the current open state of the modaldialog + */ + ; + + _proto.opened = function opened(value) { + if (typeof value === 'boolean') { + this[value ? 'open' : 'close'](); + } + + return this.opened_; + } + /** + * Closes the modal, does nothing if the `ModalDialog` is + * not open. + * + * @fires ModalDialog#beforemodalclose + * @fires ModalDialog#modalclose + */ + ; + + _proto.close = function close() { + if (!this.opened_) { + return; + } + + var player = this.player(); + /** + * Fired just before a `ModalDialog` is closed. + * + * @event ModalDialog#beforemodalclose + * @type {EventTarget~Event} + */ + + this.trigger('beforemodalclose'); + this.opened_ = false; + + if (this.wasPlaying_ && this.options_.pauseOnOpen) { + player.play(); + } + + this.off('keydown', this.handleKeyDown_); + + if (this.hadControls_) { + player.controls(true); + } + + this.hide(); + this.el().setAttribute('aria-hidden', 'true'); + /** + * Fired just after a `ModalDialog` is closed. + * + * @event ModalDialog#modalclose + * @type {EventTarget~Event} + */ + + this.trigger('modalclose'); + this.conditionalBlur_(); + + if (this.options_.temporary) { + this.dispose(); + } + } + /** + * Check to see if the `ModalDialog` is closeable via the UI. + * + * @param {boolean} [value] + * If given as a boolean, it will set the `closeable` option. + * + * @return {boolean} + * Returns the final value of the closable option. + */ + ; + + _proto.closeable = function closeable(value) { + if (typeof value === 'boolean') { + var closeable = this.closeable_ = !!value; + var close = this.getChild('closeButton'); // If this is being made closeable and has no close button, add one. + + if (closeable && !close) { + // The close button should be a child of the modal - not its + // content element, so temporarily change the content element. + var temp = this.contentEl_; + this.contentEl_ = this.el_; + close = this.addChild('closeButton', { + controlText: 'Close Modal Dialog' + }); + this.contentEl_ = temp; + this.on(close, 'close', this.close_); + } // If this is being made uncloseable and has a close button, remove it. + + + if (!closeable && close) { + this.off(close, 'close', this.close_); + this.removeChild(close); + close.dispose(); + } + } + + return this.closeable_; + } + /** + * Fill the modal's content element with the modal's "content" option. + * The content element will be emptied before this change takes place. + */ + ; + + _proto.fill = function fill() { + this.fillWith(this.content()); + } + /** + * Fill the modal's content element with arbitrary content. + * The content element will be emptied before this change takes place. + * + * @fires ModalDialog#beforemodalfill + * @fires ModalDialog#modalfill + * + * @param {Mixed} [content] + * The same rules apply to this as apply to the `content` option. + */ + ; + + _proto.fillWith = function fillWith(content) { + var contentEl = this.contentEl(); + var parentEl = contentEl.parentNode; + var nextSiblingEl = contentEl.nextSibling; + /** + * Fired just before a `ModalDialog` is filled with content. + * + * @event ModalDialog#beforemodalfill + * @type {EventTarget~Event} + */ + + this.trigger('beforemodalfill'); + this.hasBeenFilled_ = true; // Detach the content element from the DOM before performing + // manipulation to avoid modifying the live DOM multiple times. + + parentEl.removeChild(contentEl); + this.empty(); + insertContent(contentEl, content); + /** + * Fired just after a `ModalDialog` is filled with content. + * + * @event ModalDialog#modalfill + * @type {EventTarget~Event} + */ + + this.trigger('modalfill'); // Re-inject the re-filled content element. + + if (nextSiblingEl) { + parentEl.insertBefore(contentEl, nextSiblingEl); + } else { + parentEl.appendChild(contentEl); + } // make sure that the close button is last in the dialog DOM + + + var closeButton = this.getChild('closeButton'); + + if (closeButton) { + parentEl.appendChild(closeButton.el_); + } + } + /** + * Empties the content element. This happens anytime the modal is filled. + * + * @fires ModalDialog#beforemodalempty + * @fires ModalDialog#modalempty + */ + ; + + _proto.empty = function empty() { + /** + * Fired just before a `ModalDialog` is emptied. + * + * @event ModalDialog#beforemodalempty + * @type {EventTarget~Event} + */ + this.trigger('beforemodalempty'); + emptyEl(this.contentEl()); + /** + * Fired just after a `ModalDialog` is emptied. + * + * @event ModalDialog#modalempty + * @type {EventTarget~Event} + */ + + this.trigger('modalempty'); + } + /** + * Gets or sets the modal content, which gets normalized before being + * rendered into the DOM. + * + * This does not update the DOM or fill the modal, but it is called during + * that process. + * + * @param {Mixed} [value] + * If defined, sets the internal content value to be used on the + * next call(s) to `fill`. This value is normalized before being + * inserted. To "clear" the internal content value, pass `null`. + * + * @return {Mixed} + * The current content of the modal dialog + */ + ; + + _proto.content = function content(value) { + if (typeof value !== 'undefined') { + this.content_ = value; + } + + return this.content_; + } + /** + * conditionally focus the modal dialog if focus was previously on the player. + * + * @private + */ + ; + + _proto.conditionalFocus_ = function conditionalFocus_() { + var activeEl = document_1.activeElement; + var playerEl = this.player_.el_; + this.previouslyActiveEl_ = null; + + if (playerEl.contains(activeEl) || playerEl === activeEl) { + this.previouslyActiveEl_ = activeEl; + this.focus(); + } + } + /** + * conditionally blur the element and refocus the last focused element + * + * @private + */ + ; + + _proto.conditionalBlur_ = function conditionalBlur_() { + if (this.previouslyActiveEl_) { + this.previouslyActiveEl_.focus(); + this.previouslyActiveEl_ = null; + } + } + /** + * Keydown handler. Attached when modal is focused. + * + * @listens keydown + */ + ; + + _proto.handleKeyDown = function handleKeyDown(event) { + // Do not allow keydowns to reach out of the modal dialog. + event.stopPropagation(); + + if (keycode.isEventKey(event, 'Escape') && this.closeable()) { + event.preventDefault(); + this.close(); + return; + } // exit early if it isn't a tab key + + + if (!keycode.isEventKey(event, 'Tab')) { + return; + } + + var focusableEls = this.focusableEls_(); + var activeEl = this.el_.querySelector(':focus'); + var focusIndex; + + for (var i = 0; i < focusableEls.length; i++) { + if (activeEl === focusableEls[i]) { + focusIndex = i; + break; + } + } + + if (document_1.activeElement === this.el_) { + focusIndex = 0; + } + + if (event.shiftKey && focusIndex === 0) { + focusableEls[focusableEls.length - 1].focus(); + event.preventDefault(); + } else if (!event.shiftKey && focusIndex === focusableEls.length - 1) { + focusableEls[0].focus(); + event.preventDefault(); + } + } + /** + * get all focusable elements + * + * @private + */ + ; + + _proto.focusableEls_ = function focusableEls_() { + var allChildren = this.el_.querySelectorAll('*'); + return Array.prototype.filter.call(allChildren, function (child) { + return (child instanceof window_1.HTMLAnchorElement || child instanceof window_1.HTMLAreaElement) && child.hasAttribute('href') || (child instanceof window_1.HTMLInputElement || child instanceof window_1.HTMLSelectElement || child instanceof window_1.HTMLTextAreaElement || child instanceof window_1.HTMLButtonElement) && !child.hasAttribute('disabled') || child instanceof window_1.HTMLIFrameElement || child instanceof window_1.HTMLObjectElement || child instanceof window_1.HTMLEmbedElement || child.hasAttribute('tabindex') && child.getAttribute('tabindex') !== -1 || child.hasAttribute('contenteditable'); + }); + }; + + return ModalDialog; + }(Component); + /** + * Default options for `ModalDialog` default options. + * + * @type {Object} + * @private + */ + + + ModalDialog.prototype.options_ = { + pauseOnOpen: true, + temporary: true + }; + Component.registerComponent('ModalDialog', ModalDialog); + + /** + * Common functionaliy between {@link TextTrackList}, {@link AudioTrackList}, and + * {@link VideoTrackList} + * + * @extends EventTarget + */ + + var TrackList = /*#__PURE__*/function (_EventTarget) { + inheritsLoose(TrackList, _EventTarget); + + /** + * Create an instance of this class + * + * @param {Track[]} tracks + * A list of tracks to initialize the list with. + * + * @abstract + */ + function TrackList(tracks) { + var _this; + + if (tracks === void 0) { + tracks = []; + } + + _this = _EventTarget.call(this) || this; + _this.tracks_ = []; + /** + * @memberof TrackList + * @member {number} length + * The current number of `Track`s in the this Trackist. + * @instance + */ + + Object.defineProperty(assertThisInitialized(_this), 'length', { + get: function get() { + return this.tracks_.length; + } + }); + + for (var i = 0; i < tracks.length; i++) { + _this.addTrack(tracks[i]); + } + + return _this; + } + /** + * Add a {@link Track} to the `TrackList` + * + * @param {Track} track + * The audio, video, or text track to add to the list. + * + * @fires TrackList#addtrack + */ + + + var _proto = TrackList.prototype; + + _proto.addTrack = function addTrack(track) { + var _this2 = this; + + var index = this.tracks_.length; + + if (!('' + index in this)) { + Object.defineProperty(this, index, { + get: function get() { + return this.tracks_[index]; + } + }); + } // Do not add duplicate tracks + + + if (this.tracks_.indexOf(track) === -1) { + this.tracks_.push(track); + /** + * Triggered when a track is added to a track list. + * + * @event TrackList#addtrack + * @type {EventTarget~Event} + * @property {Track} track + * A reference to track that was added. + */ + + this.trigger({ + track: track, + type: 'addtrack', + target: this + }); + } + /** + * Triggered when a track label is changed. + * + * @event TrackList#addtrack + * @type {EventTarget~Event} + * @property {Track} track + * A reference to track that was added. + */ + + + track.labelchange_ = function () { + _this2.trigger({ + track: track, + type: 'labelchange', + target: _this2 + }); + }; + + if (isEvented(track)) { + track.addEventListener('labelchange', track.labelchange_); + } + } + /** + * Remove a {@link Track} from the `TrackList` + * + * @param {Track} rtrack + * The audio, video, or text track to remove from the list. + * + * @fires TrackList#removetrack + */ + ; + + _proto.removeTrack = function removeTrack(rtrack) { + var track; + + for (var i = 0, l = this.length; i < l; i++) { + if (this[i] === rtrack) { + track = this[i]; + + if (track.off) { + track.off(); + } + + this.tracks_.splice(i, 1); + break; + } + } + + if (!track) { + return; + } + /** + * Triggered when a track is removed from track list. + * + * @event TrackList#removetrack + * @type {EventTarget~Event} + * @property {Track} track + * A reference to track that was removed. + */ + + + this.trigger({ + track: track, + type: 'removetrack', + target: this + }); + } + /** + * Get a Track from the TrackList by a tracks id + * + * @param {string} id - the id of the track to get + * @method getTrackById + * @return {Track} + * @private + */ + ; + + _proto.getTrackById = function getTrackById(id) { + var result = null; + + for (var i = 0, l = this.length; i < l; i++) { + var track = this[i]; + + if (track.id === id) { + result = track; + break; + } + } + + return result; + }; + + return TrackList; + }(EventTarget); + /** + * Triggered when a different track is selected/enabled. + * + * @event TrackList#change + * @type {EventTarget~Event} + */ + + /** + * Events that can be called with on + eventName. See {@link EventHandler}. + * + * @property {Object} TrackList#allowedEvents_ + * @private + */ + + + TrackList.prototype.allowedEvents_ = { + change: 'change', + addtrack: 'addtrack', + removetrack: 'removetrack', + labelchange: 'labelchange' + }; // emulate attribute EventHandler support to allow for feature detection + + for (var event in TrackList.prototype.allowedEvents_) { + TrackList.prototype['on' + event] = null; + } + + /** + * Anywhere we call this function we diverge from the spec + * as we only support one enabled audiotrack at a time + * + * @param {AudioTrackList} list + * list to work on + * + * @param {AudioTrack} track + * The track to skip + * + * @private + */ + + var disableOthers$1 = function disableOthers(list, track) { + for (var i = 0; i < list.length; i++) { + if (!Object.keys(list[i]).length || track.id === list[i].id) { + continue; + } // another audio track is enabled, disable it + + + list[i].enabled = false; + } + }; + /** + * The current list of {@link AudioTrack} for a media file. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotracklist} + * @extends TrackList + */ + + + var AudioTrackList = /*#__PURE__*/function (_TrackList) { + inheritsLoose(AudioTrackList, _TrackList); + + /** + * Create an instance of this class. + * + * @param {AudioTrack[]} [tracks=[]] + * A list of `AudioTrack` to instantiate the list with. + */ + function AudioTrackList(tracks) { + var _this; + + if (tracks === void 0) { + tracks = []; + } + + // make sure only 1 track is enabled + // sorted from last index to first index + for (var i = tracks.length - 1; i >= 0; i--) { + if (tracks[i].enabled) { + disableOthers$1(tracks, tracks[i]); + break; + } + } + + _this = _TrackList.call(this, tracks) || this; + _this.changing_ = false; + return _this; + } + /** + * Add an {@link AudioTrack} to the `AudioTrackList`. + * + * @param {AudioTrack} track + * The AudioTrack to add to the list + * + * @fires TrackList#addtrack + */ + + + var _proto = AudioTrackList.prototype; + + _proto.addTrack = function addTrack(track) { + var _this2 = this; + + if (track.enabled) { + disableOthers$1(this, track); + } + + _TrackList.prototype.addTrack.call(this, track); // native tracks don't have this + + + if (!track.addEventListener) { + return; + } + + track.enabledChange_ = function () { + // when we are disabling other tracks (since we don't support + // more than one track at a time) we will set changing_ + // to true so that we don't trigger additional change events + if (_this2.changing_) { + return; + } + + _this2.changing_ = true; + disableOthers$1(_this2, track); + _this2.changing_ = false; + + _this2.trigger('change'); + }; + /** + * @listens AudioTrack#enabledchange + * @fires TrackList#change + */ + + + track.addEventListener('enabledchange', track.enabledChange_); + }; + + _proto.removeTrack = function removeTrack(rtrack) { + _TrackList.prototype.removeTrack.call(this, rtrack); + + if (rtrack.removeEventListener && rtrack.enabledChange_) { + rtrack.removeEventListener('enabledchange', rtrack.enabledChange_); + rtrack.enabledChange_ = null; + } + }; + + return AudioTrackList; + }(TrackList); + + /** + * Un-select all other {@link VideoTrack}s that are selected. + * + * @param {VideoTrackList} list + * list to work on + * + * @param {VideoTrack} track + * The track to skip + * + * @private + */ + + var disableOthers = function disableOthers(list, track) { + for (var i = 0; i < list.length; i++) { + if (!Object.keys(list[i]).length || track.id === list[i].id) { + continue; + } // another video track is enabled, disable it + + + list[i].selected = false; + } + }; + /** + * The current list of {@link VideoTrack} for a video. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotracklist} + * @extends TrackList + */ + + + var VideoTrackList = /*#__PURE__*/function (_TrackList) { + inheritsLoose(VideoTrackList, _TrackList); + + /** + * Create an instance of this class. + * + * @param {VideoTrack[]} [tracks=[]] + * A list of `VideoTrack` to instantiate the list with. + */ + function VideoTrackList(tracks) { + var _this; + + if (tracks === void 0) { + tracks = []; + } + + // make sure only 1 track is enabled + // sorted from last index to first index + for (var i = tracks.length - 1; i >= 0; i--) { + if (tracks[i].selected) { + disableOthers(tracks, tracks[i]); + break; + } + } + + _this = _TrackList.call(this, tracks) || this; + _this.changing_ = false; + /** + * @member {number} VideoTrackList#selectedIndex + * The current index of the selected {@link VideoTrack`}. + */ + + Object.defineProperty(assertThisInitialized(_this), 'selectedIndex', { + get: function get() { + for (var _i = 0; _i < this.length; _i++) { + if (this[_i].selected) { + return _i; + } + } + + return -1; + }, + set: function set() {} + }); + return _this; + } + /** + * Add a {@link VideoTrack} to the `VideoTrackList`. + * + * @param {VideoTrack} track + * The VideoTrack to add to the list + * + * @fires TrackList#addtrack + */ + + + var _proto = VideoTrackList.prototype; + + _proto.addTrack = function addTrack(track) { + var _this2 = this; + + if (track.selected) { + disableOthers(this, track); + } + + _TrackList.prototype.addTrack.call(this, track); // native tracks don't have this + + + if (!track.addEventListener) { + return; + } + + track.selectedChange_ = function () { + if (_this2.changing_) { + return; + } + + _this2.changing_ = true; + disableOthers(_this2, track); + _this2.changing_ = false; + + _this2.trigger('change'); + }; + /** + * @listens VideoTrack#selectedchange + * @fires TrackList#change + */ + + + track.addEventListener('selectedchange', track.selectedChange_); + }; + + _proto.removeTrack = function removeTrack(rtrack) { + _TrackList.prototype.removeTrack.call(this, rtrack); + + if (rtrack.removeEventListener && rtrack.selectedChange_) { + rtrack.removeEventListener('selectedchange', rtrack.selectedChange_); + rtrack.selectedChange_ = null; + } + }; + + return VideoTrackList; + }(TrackList); + + /** + * The current list of {@link TextTrack} for a media file. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttracklist} + * @extends TrackList + */ + + var TextTrackList = /*#__PURE__*/function (_TrackList) { + inheritsLoose(TextTrackList, _TrackList); + + function TextTrackList() { + return _TrackList.apply(this, arguments) || this; + } + + var _proto = TextTrackList.prototype; + + /** + * Add a {@link TextTrack} to the `TextTrackList` + * + * @param {TextTrack} track + * The text track to add to the list. + * + * @fires TrackList#addtrack + */ + _proto.addTrack = function addTrack(track) { + var _this = this; + + _TrackList.prototype.addTrack.call(this, track); + + if (!this.queueChange_) { + this.queueChange_ = function () { + return _this.queueTrigger('change'); + }; + } + + if (!this.triggerSelectedlanguagechange) { + this.triggerSelectedlanguagechange_ = function () { + return _this.trigger('selectedlanguagechange'); + }; + } + /** + * @listens TextTrack#modechange + * @fires TrackList#change + */ + + + track.addEventListener('modechange', this.queueChange_); + var nonLanguageTextTrackKind = ['metadata', 'chapters']; + + if (nonLanguageTextTrackKind.indexOf(track.kind) === -1) { + track.addEventListener('modechange', this.triggerSelectedlanguagechange_); + } + }; + + _proto.removeTrack = function removeTrack(rtrack) { + _TrackList.prototype.removeTrack.call(this, rtrack); // manually remove the event handlers we added + + + if (rtrack.removeEventListener) { + if (this.queueChange_) { + rtrack.removeEventListener('modechange', this.queueChange_); + } + + if (this.selectedlanguagechange_) { + rtrack.removeEventListener('modechange', this.triggerSelectedlanguagechange_); + } + } + }; + + return TextTrackList; + }(TrackList); + + /** + * @file html-track-element-list.js + */ + + /** + * The current list of {@link HtmlTrackElement}s. + */ + var HtmlTrackElementList = /*#__PURE__*/function () { + /** + * Create an instance of this class. + * + * @param {HtmlTrackElement[]} [tracks=[]] + * A list of `HtmlTrackElement` to instantiate the list with. + */ + function HtmlTrackElementList(trackElements) { + if (trackElements === void 0) { + trackElements = []; + } + + this.trackElements_ = []; + /** + * @memberof HtmlTrackElementList + * @member {number} length + * The current number of `Track`s in the this Trackist. + * @instance + */ + + Object.defineProperty(this, 'length', { + get: function get() { + return this.trackElements_.length; + } + }); + + for (var i = 0, length = trackElements.length; i < length; i++) { + this.addTrackElement_(trackElements[i]); + } + } + /** + * Add an {@link HtmlTrackElement} to the `HtmlTrackElementList` + * + * @param {HtmlTrackElement} trackElement + * The track element to add to the list. + * + * @private + */ + + + var _proto = HtmlTrackElementList.prototype; + + _proto.addTrackElement_ = function addTrackElement_(trackElement) { + var index = this.trackElements_.length; + + if (!('' + index in this)) { + Object.defineProperty(this, index, { + get: function get() { + return this.trackElements_[index]; + } + }); + } // Do not add duplicate elements + + + if (this.trackElements_.indexOf(trackElement) === -1) { + this.trackElements_.push(trackElement); + } + } + /** + * Get an {@link HtmlTrackElement} from the `HtmlTrackElementList` given an + * {@link TextTrack}. + * + * @param {TextTrack} track + * The track associated with a track element. + * + * @return {HtmlTrackElement|undefined} + * The track element that was found or undefined. + * + * @private + */ + ; + + _proto.getTrackElementByTrack_ = function getTrackElementByTrack_(track) { + var trackElement_; + + for (var i = 0, length = this.trackElements_.length; i < length; i++) { + if (track === this.trackElements_[i].track) { + trackElement_ = this.trackElements_[i]; + break; + } + } + + return trackElement_; + } + /** + * Remove a {@link HtmlTrackElement} from the `HtmlTrackElementList` + * + * @param {HtmlTrackElement} trackElement + * The track element to remove from the list. + * + * @private + */ + ; + + _proto.removeTrackElement_ = function removeTrackElement_(trackElement) { + for (var i = 0, length = this.trackElements_.length; i < length; i++) { + if (trackElement === this.trackElements_[i]) { + if (this.trackElements_[i].track && typeof this.trackElements_[i].track.off === 'function') { + this.trackElements_[i].track.off(); + } + + if (typeof this.trackElements_[i].off === 'function') { + this.trackElements_[i].off(); + } + + this.trackElements_.splice(i, 1); + break; + } + } + }; + + return HtmlTrackElementList; + }(); + + /** + * @file text-track-cue-list.js + */ + + /** + * @typedef {Object} TextTrackCueList~TextTrackCue + * + * @property {string} id + * The unique id for this text track cue + * + * @property {number} startTime + * The start time for this text track cue + * + * @property {number} endTime + * The end time for this text track cue + * + * @property {boolean} pauseOnExit + * Pause when the end time is reached if true. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcue} + */ + + /** + * A List of TextTrackCues. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackcuelist} + */ + var TextTrackCueList = /*#__PURE__*/function () { + /** + * Create an instance of this class.. + * + * @param {Array} cues + * A list of cues to be initialized with + */ + function TextTrackCueList(cues) { + TextTrackCueList.prototype.setCues_.call(this, cues); + /** + * @memberof TextTrackCueList + * @member {number} length + * The current number of `TextTrackCue`s in the TextTrackCueList. + * @instance + */ + + Object.defineProperty(this, 'length', { + get: function get() { + return this.length_; + } + }); + } + /** + * A setter for cues in this list. Creates getters + * an an index for the cues. + * + * @param {Array} cues + * An array of cues to set + * + * @private + */ + + + var _proto = TextTrackCueList.prototype; + + _proto.setCues_ = function setCues_(cues) { + var oldLength = this.length || 0; + var i = 0; + var l = cues.length; + this.cues_ = cues; + this.length_ = cues.length; + + var defineProp = function defineProp(index) { + if (!('' + index in this)) { + Object.defineProperty(this, '' + index, { + get: function get() { + return this.cues_[index]; + } + }); + } + }; + + if (oldLength < l) { + i = oldLength; + + for (; i < l; i++) { + defineProp.call(this, i); + } + } + } + /** + * Get a `TextTrackCue` that is currently in the `TextTrackCueList` by id. + * + * @param {string} id + * The id of the cue that should be searched for. + * + * @return {TextTrackCueList~TextTrackCue|null} + * A single cue or null if none was found. + */ + ; + + _proto.getCueById = function getCueById(id) { + var result = null; + + for (var i = 0, l = this.length; i < l; i++) { + var cue = this[i]; + + if (cue.id === id) { + result = cue; + break; + } + } + + return result; + }; + + return TextTrackCueList; + }(); + + /** + * @file track-kinds.js + */ + + /** + * All possible `VideoTrackKind`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-videotrack-kind + * @typedef VideoTrack~Kind + * @enum + */ + var VideoTrackKind = { + alternative: 'alternative', + captions: 'captions', + main: 'main', + sign: 'sign', + subtitles: 'subtitles', + commentary: 'commentary' + }; + /** + * All possible `AudioTrackKind`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-audiotrack-kind + * @typedef AudioTrack~Kind + * @enum + */ + + var AudioTrackKind = { + 'alternative': 'alternative', + 'descriptions': 'descriptions', + 'main': 'main', + 'main-desc': 'main-desc', + 'translation': 'translation', + 'commentary': 'commentary' + }; + /** + * All possible `TextTrackKind`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#dom-texttrack-kind + * @typedef TextTrack~Kind + * @enum + */ + + var TextTrackKind = { + subtitles: 'subtitles', + captions: 'captions', + descriptions: 'descriptions', + chapters: 'chapters', + metadata: 'metadata' + }; + /** + * All possible `TextTrackMode`s + * + * @see https://html.spec.whatwg.org/multipage/embedded-content.html#texttrackmode + * @typedef TextTrack~Mode + * @enum + */ + + var TextTrackMode = { + disabled: 'disabled', + hidden: 'hidden', + showing: 'showing' + }; + + /** + * A Track class that contains all of the common functionality for {@link AudioTrack}, + * {@link VideoTrack}, and {@link TextTrack}. + * + * > Note: This class should not be used directly + * + * @see {@link https://html.spec.whatwg.org/multipage/embedded-content.html} + * @extends EventTarget + * @abstract + */ + + var Track = /*#__PURE__*/function (_EventTarget) { + inheritsLoose(Track, _EventTarget); + + /** + * Create an instance of this class. + * + * @param {Object} [options={}] + * Object of option names and values + * + * @param {string} [options.kind=''] + * A valid kind for the track type you are creating. + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this AudioTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @abstract + */ + function Track(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + _this = _EventTarget.call(this) || this; + var trackProps = { + id: options.id || 'vjs_track_' + newGUID(), + kind: options.kind || '', + language: options.language || '' + }; + var label = options.label || ''; + /** + * @memberof Track + * @member {string} id + * The id of this track. Cannot be changed after creation. + * @instance + * + * @readonly + */ + + /** + * @memberof Track + * @member {string} kind + * The kind of track that this is. Cannot be changed after creation. + * @instance + * + * @readonly + */ + + /** + * @memberof Track + * @member {string} language + * The two letter language code for this track. Cannot be changed after + * creation. + * @instance + * + * @readonly + */ + + var _loop = function _loop(key) { + Object.defineProperty(assertThisInitialized(_this), key, { + get: function get() { + return trackProps[key]; + }, + set: function set() {} + }); + }; + + for (var key in trackProps) { + _loop(key); + } + /** + * @memberof Track + * @member {string} label + * The label of this track. Cannot be changed after creation. + * @instance + * + * @fires Track#labelchange + */ + + + Object.defineProperty(assertThisInitialized(_this), 'label', { + get: function get() { + return label; + }, + set: function set(newLabel) { + if (newLabel !== label) { + label = newLabel; + /** + * An event that fires when label changes on this track. + * + * > Note: This is not part of the spec! + * + * @event Track#labelchange + * @type {EventTarget~Event} + */ + + this.trigger('labelchange'); + } + } + }); + return _this; + } + + return Track; + }(EventTarget); + + /** + * @file url.js + * @module url + */ + /** + * @typedef {Object} url:URLObject + * + * @property {string} protocol + * The protocol of the url that was parsed. + * + * @property {string} hostname + * The hostname of the url that was parsed. + * + * @property {string} port + * The port of the url that was parsed. + * + * @property {string} pathname + * The pathname of the url that was parsed. + * + * @property {string} search + * The search query of the url that was parsed. + * + * @property {string} hash + * The hash of the url that was parsed. + * + * @property {string} host + * The host of the url that was parsed. + */ + + /** + * Resolve and parse the elements of a URL. + * + * @function + * @param {String} url + * The url to parse + * + * @return {url:URLObject} + * An object of url details + */ + + var parseUrl = function parseUrl(url) { + // This entire method can be replace with URL once we are able to drop IE11 + var props = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host']; // add the url to an anchor and let the browser parse the URL + + var a = document_1.createElement('a'); + a.href = url; // Copy the specific URL properties to a new object + // This is also needed for IE because the anchor loses its + // properties when it's removed from the dom + + var details = {}; + + for (var i = 0; i < props.length; i++) { + details[props[i]] = a[props[i]]; + } // IE adds the port to the host property unlike everyone else. If + // a port identifier is added for standard ports, strip it. + + + if (details.protocol === 'http:') { + details.host = details.host.replace(/:80$/, ''); + } + + if (details.protocol === 'https:') { + details.host = details.host.replace(/:443$/, ''); + } + + if (!details.protocol) { + details.protocol = window_1.location.protocol; + } + /* istanbul ignore if */ + + + if (!details.host) { + details.host = window_1.location.host; + } + + return details; + }; + /** + * Get absolute version of relative URL. Used to tell Flash the correct URL. + * + * @function + * @param {string} url + * URL to make absolute + * + * @return {string} + * Absolute URL + * + * @see http://stackoverflow.com/questions/470832/getting-an-absolute-url-from-a-relative-one-ie6-issue + */ + + var getAbsoluteURL = function getAbsoluteURL(url) { + // Check if absolute URL + if (!url.match(/^https?:\/\//)) { + // Convert to absolute URL. Flash hosted off-site needs an absolute URL. + // add the url to an anchor and let the browser parse the URL + var a = document_1.createElement('a'); + a.href = url; + url = a.href; + } + + return url; + }; + /** + * Returns the extension of the passed file name. It will return an empty string + * if passed an invalid path. + * + * @function + * @param {string} path + * The fileName path like '/path/to/file.mp4' + * + * @return {string} + * The extension in lower case or an empty string if no + * extension could be found. + */ + + var getFileExtension = function getFileExtension(path) { + if (typeof path === 'string') { + var splitPathRe = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/; + var pathParts = splitPathRe.exec(path); + + if (pathParts) { + return pathParts.pop().toLowerCase(); + } + } + + return ''; + }; + /** + * Returns whether the url passed is a cross domain request or not. + * + * @function + * @param {string} url + * The url to check. + * + * @param {Object} [winLoc] + * the domain to check the url against, defaults to window.location + * + * @param {string} [winLoc.protocol] + * The window location protocol defaults to window.location.protocol + * + * @param {string} [winLoc.host] + * The window location host defaults to window.location.host + * + * @return {boolean} + * Whether it is a cross domain request or not. + */ + + var isCrossOrigin = function isCrossOrigin(url, winLoc) { + if (winLoc === void 0) { + winLoc = window_1.location; + } + + var urlInfo = parseUrl(url); // IE8 protocol relative urls will return ':' for protocol + + var srcProtocol = urlInfo.protocol === ':' ? winLoc.protocol : urlInfo.protocol; // Check if url is for another domain/origin + // IE8 doesn't know location.origin, so we won't rely on it here + + var crossOrigin = srcProtocol + urlInfo.host !== winLoc.protocol + winLoc.host; + return crossOrigin; + }; + + var Url = /*#__PURE__*/Object.freeze({ + __proto__: null, + parseUrl: parseUrl, + getAbsoluteURL: getAbsoluteURL, + getFileExtension: getFileExtension, + isCrossOrigin: isCrossOrigin + }); + + var isFunction_1 = isFunction; + var toString = Object.prototype.toString; + + function isFunction(fn) { + if (!fn) { + return false; + } + + var string = toString.call(fn); + return string === '[object Function]' || typeof fn === 'function' && string !== '[object RegExp]' || typeof window !== 'undefined' && ( // IE8 and below + fn === window.setTimeout || fn === window.alert || fn === window.confirm || fn === window.prompt); + } + + var httpResponseHandler = function httpResponseHandler(callback, decodeResponseBody) { + if (decodeResponseBody === void 0) { + decodeResponseBody = false; + } + + return function (err, response, responseBody) { + // if the XHR failed, return that error + if (err) { + callback(err); + return; + } // if the HTTP status code is 4xx or 5xx, the request also failed + + + if (response.statusCode >= 400 && response.statusCode <= 599) { + var cause = responseBody; + + if (decodeResponseBody) { + if (window_1.TextDecoder) { + var charset = getCharset(response.headers && response.headers['content-type']); + + try { + cause = new TextDecoder(charset).decode(responseBody); + } catch (e) {} + } else { + cause = String.fromCharCode.apply(null, new Uint8Array(responseBody)); + } + } + + callback({ + cause: cause + }); + return; + } // otherwise, request succeeded + + + callback(null, responseBody); + }; + }; + + function getCharset(contentTypeHeader) { + if (contentTypeHeader === void 0) { + contentTypeHeader = ''; + } + + return contentTypeHeader.toLowerCase().split(';').reduce(function (charset, contentType) { + var _contentType$split = contentType.split('='), + type = _contentType$split[0], + value = _contentType$split[1]; + + if (type.trim() === 'charset') { + return value.trim(); + } + + return charset; + }, 'utf-8'); + } + + var httpHandler = httpResponseHandler; + + createXHR.httpHandler = httpHandler; + /** + * @license + * slighly modified parse-headers 2.0.2 + * Copyright (c) 2014 David Björklund + * Available under the MIT license + * + */ + + var parseHeaders = function parseHeaders(headers) { + var result = {}; + + if (!headers) { + return result; + } + + headers.trim().split('\n').forEach(function (row) { + var index = row.indexOf(':'); + var key = row.slice(0, index).trim().toLowerCase(); + var value = row.slice(index + 1).trim(); + + if (typeof result[key] === 'undefined') { + result[key] = value; + } else if (Array.isArray(result[key])) { + result[key].push(value); + } else { + result[key] = [result[key], value]; + } + }); + return result; + }; + + var lib = createXHR; // Allow use of default import syntax in TypeScript + + var default_1 = createXHR; + createXHR.XMLHttpRequest = window_1.XMLHttpRequest || noop; + createXHR.XDomainRequest = "withCredentials" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window_1.XDomainRequest; + forEachArray(["get", "put", "post", "patch", "head", "delete"], function (method) { + createXHR[method === "delete" ? "del" : method] = function (uri, options, callback) { + options = initParams(uri, options, callback); + options.method = method.toUpperCase(); + return _createXHR(options); + }; + }); + + function forEachArray(array, iterator) { + for (var i = 0; i < array.length; i++) { + iterator(array[i]); + } + } + + function isEmpty(obj) { + for (var i in obj) { + if (obj.hasOwnProperty(i)) return false; + } + + return true; + } + + function initParams(uri, options, callback) { + var params = uri; + + if (isFunction_1(options)) { + callback = options; + + if (typeof uri === "string") { + params = { + uri: uri + }; + } + } else { + params = _extends_1({}, options, { + uri: uri + }); + } + + params.callback = callback; + return params; + } + + function createXHR(uri, options, callback) { + options = initParams(uri, options, callback); + return _createXHR(options); + } + + function _createXHR(options) { + if (typeof options.callback === "undefined") { + throw new Error("callback argument missing"); + } + + var called = false; + + var callback = function cbOnce(err, response, body) { + if (!called) { + called = true; + options.callback(err, response, body); + } + }; + + function readystatechange() { + if (xhr.readyState === 4) { + setTimeout(loadFunc, 0); + } + } + + function getBody() { + // Chrome with requestType=blob throws errors arround when even testing access to responseText + var body = undefined; + + if (xhr.response) { + body = xhr.response; + } else { + body = xhr.responseText || getXml(xhr); + } + + if (isJson) { + try { + body = JSON.parse(body); + } catch (e) {} + } + + return body; + } + + function errorFunc(evt) { + clearTimeout(timeoutTimer); + + if (!(evt instanceof Error)) { + evt = new Error("" + (evt || "Unknown XMLHttpRequest Error")); + } + + evt.statusCode = 0; + return callback(evt, failureResponse); + } // will load the data & process the response in a special response object + + + function loadFunc() { + if (aborted) return; + var status; + clearTimeout(timeoutTimer); + + if (options.useXDR && xhr.status === undefined) { + //IE8 CORS GET successful response doesn't have a status field, but body is fine + status = 200; + } else { + status = xhr.status === 1223 ? 204 : xhr.status; + } + + var response = failureResponse; + var err = null; + + if (status !== 0) { + response = { + body: getBody(), + statusCode: status, + method: method, + headers: {}, + url: uri, + rawRequest: xhr + }; + + if (xhr.getAllResponseHeaders) { + //remember xhr can in fact be XDR for CORS in IE + response.headers = parseHeaders(xhr.getAllResponseHeaders()); + } + } else { + err = new Error("Internal XMLHttpRequest Error"); + } + + return callback(err, response, response.body); + } + + var xhr = options.xhr || null; + + if (!xhr) { + if (options.cors || options.useXDR) { + xhr = new createXHR.XDomainRequest(); + } else { + xhr = new createXHR.XMLHttpRequest(); + } + } + + var key; + var aborted; + var uri = xhr.url = options.uri || options.url; + var method = xhr.method = options.method || "GET"; + var body = options.body || options.data; + var headers = xhr.headers = options.headers || {}; + var sync = !!options.sync; + var isJson = false; + var timeoutTimer; + var failureResponse = { + body: undefined, + headers: {}, + statusCode: 0, + method: method, + url: uri, + rawRequest: xhr + }; + + if ("json" in options && options.json !== false) { + isJson = true; + headers["accept"] || headers["Accept"] || (headers["Accept"] = "application/json"); //Don't override existing accept header declared by user + + if (method !== "GET" && method !== "HEAD") { + headers["content-type"] || headers["Content-Type"] || (headers["Content-Type"] = "application/json"); //Don't override existing accept header declared by user + + body = JSON.stringify(options.json === true ? body : options.json); + } + } + + xhr.onreadystatechange = readystatechange; + xhr.onload = loadFunc; + xhr.onerror = errorFunc; // IE9 must have onprogress be set to a unique function. + + xhr.onprogress = function () {// IE must die + }; + + xhr.onabort = function () { + aborted = true; + }; + + xhr.ontimeout = errorFunc; + xhr.open(method, uri, !sync, options.username, options.password); //has to be after open + + if (!sync) { + xhr.withCredentials = !!options.withCredentials; + } // Cannot set timeout with sync request + // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly + // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent + + + if (!sync && options.timeout > 0) { + timeoutTimer = setTimeout(function () { + if (aborted) return; + aborted = true; //IE9 may still call readystatechange + + xhr.abort("timeout"); + var e = new Error("XMLHttpRequest timeout"); + e.code = "ETIMEDOUT"; + errorFunc(e); + }, options.timeout); + } + + if (xhr.setRequestHeader) { + for (key in headers) { + if (headers.hasOwnProperty(key)) { + xhr.setRequestHeader(key, headers[key]); + } + } + } else if (options.headers && !isEmpty(options.headers)) { + throw new Error("Headers cannot be set on an XDomainRequest object"); + } + + if ("responseType" in options) { + xhr.responseType = options.responseType; + } + + if ("beforeSend" in options && typeof options.beforeSend === "function") { + options.beforeSend(xhr); + } // Microsoft Edge browser sends "undefined" when send is called with undefined value. + // XMLHttpRequest spec says to pass null as body to indicate no body + // See https://github.com/naugtur/xhr/issues/100. + + + xhr.send(body || null); + return xhr; + } + + function getXml(xhr) { + // xhr.responseXML will throw Exception "InvalidStateError" or "DOMException" + // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML. + try { + if (xhr.responseType === "document") { + return xhr.responseXML; + } + + var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === "parsererror"; + + if (xhr.responseType === "" && !firefoxBugTakenEffect) { + return xhr.responseXML; + } + } catch (e) {} + + return null; + } + + function noop() {} + lib["default"] = default_1; + + /** + * Takes a webvtt file contents and parses it into cues + * + * @param {string} srcContent + * webVTT file contents + * + * @param {TextTrack} track + * TextTrack to add cues to. Cues come from the srcContent. + * + * @private + */ + + var parseCues = function parseCues(srcContent, track) { + var parser = new window_1.WebVTT.Parser(window_1, window_1.vttjs, window_1.WebVTT.StringDecoder()); + var errors = []; + + parser.oncue = function (cue) { + track.addCue(cue); + }; + + parser.onparsingerror = function (error) { + errors.push(error); + }; + + parser.onflush = function () { + track.trigger({ + type: 'loadeddata', + target: track + }); + }; + + parser.parse(srcContent); + + if (errors.length > 0) { + if (window_1.console && window_1.console.groupCollapsed) { + window_1.console.groupCollapsed("Text Track parsing errors for " + track.src); + } + + errors.forEach(function (error) { + return log.error(error); + }); + + if (window_1.console && window_1.console.groupEnd) { + window_1.console.groupEnd(); + } + } + + parser.flush(); + }; + /** + * Load a `TextTrack` from a specified url. + * + * @param {string} src + * Url to load track from. + * + * @param {TextTrack} track + * Track to add cues to. Comes from the content at the end of `url`. + * + * @private + */ + + + var loadTrack = function loadTrack(src, track) { + var opts = { + uri: src + }; + var crossOrigin = isCrossOrigin(src); + + if (crossOrigin) { + opts.cors = crossOrigin; + } + + var withCredentials = track.tech_.crossOrigin() === 'use-credentials'; + + if (withCredentials) { + opts.withCredentials = withCredentials; + } + + lib(opts, bind(this, function (err, response, responseBody) { + if (err) { + return log.error(err, response); + } + + track.loaded_ = true; // Make sure that vttjs has loaded, otherwise, wait till it finished loading + // NOTE: this is only used for the alt/video.novtt.js build + + if (typeof window_1.WebVTT !== 'function') { + if (track.tech_) { + // to prevent use before define eslint error, we define loadHandler + // as a let here + track.tech_.any(['vttjsloaded', 'vttjserror'], function (event) { + if (event.type === 'vttjserror') { + log.error("vttjs failed to load, stopping trying to process " + track.src); + return; + } + + return parseCues(responseBody, track); + }); + } + } else { + parseCues(responseBody, track); + } + })); + }; + /** + * A representation of a single `TextTrack`. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#texttrack} + * @extends Track + */ + + + var TextTrack = /*#__PURE__*/function (_Track) { + inheritsLoose(TextTrack, _Track); + + /** + * Create an instance of this class. + * + * @param {Object} options={} + * Object of option names and values + * + * @param {Tech} options.tech + * A reference to the tech that owns this TextTrack. + * + * @param {TextTrack~Kind} [options.kind='subtitles'] + * A valid text track kind. + * + * @param {TextTrack~Mode} [options.mode='disabled'] + * A valid text track mode. + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this TextTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {string} [options.srclang=''] + * A valid two character language code. An alternative, but deprioritized + * version of `options.language` + * + * @param {string} [options.src] + * A url to TextTrack cues. + * + * @param {boolean} [options.default] + * If this track should default to on or off. + */ + function TextTrack(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + if (!options.tech) { + throw new Error('A tech was not provided.'); + } + + var settings = mergeOptions(options, { + kind: TextTrackKind[options.kind] || 'subtitles', + language: options.language || options.srclang || '' + }); + var mode = TextTrackMode[settings.mode] || 'disabled'; + var default_ = settings["default"]; + + if (settings.kind === 'metadata' || settings.kind === 'chapters') { + mode = 'hidden'; + } + + _this = _Track.call(this, settings) || this; + _this.tech_ = settings.tech; + _this.cues_ = []; + _this.activeCues_ = []; + _this.preload_ = _this.tech_.preloadTextTracks !== false; + var cues = new TextTrackCueList(_this.cues_); + var activeCues = new TextTrackCueList(_this.activeCues_); + var changed = false; + var timeupdateHandler = bind(assertThisInitialized(_this), function () { + if (!this.tech_.isReady_ || this.tech_.isDisposed()) { + return; + } // Accessing this.activeCues for the side-effects of updating itself + // due to its nature as a getter function. Do not remove or cues will + // stop updating! + // Use the setter to prevent deletion from uglify (pure_getters rule) + + + this.activeCues = this.activeCues; + + if (changed) { + this.trigger('cuechange'); + changed = false; + } + }); + + var disposeHandler = function disposeHandler() { + _this.tech_.off('timeupdate', timeupdateHandler); + }; + + _this.tech_.one('dispose', disposeHandler); + + if (mode !== 'disabled') { + _this.tech_.on('timeupdate', timeupdateHandler); + } + + Object.defineProperties(assertThisInitialized(_this), { + /** + * @memberof TextTrack + * @member {boolean} default + * If this track was set to be on or off by default. Cannot be changed after + * creation. + * @instance + * + * @readonly + */ + "default": { + get: function get() { + return default_; + }, + set: function set() {} + }, + + /** + * @memberof TextTrack + * @member {string} mode + * Set the mode of this TextTrack to a valid {@link TextTrack~Mode}. Will + * not be set if setting to an invalid mode. + * @instance + * + * @fires TextTrack#modechange + */ + mode: { + get: function get() { + return mode; + }, + set: function set(newMode) { + if (!TextTrackMode[newMode]) { + return; + } + + if (mode === newMode) { + return; + } + + mode = newMode; + + if (!this.preload_ && mode !== 'disabled' && this.cues.length === 0) { + // On-demand load. + loadTrack(this.src, this); + } + + this.tech_.off('timeupdate', timeupdateHandler); + + if (mode !== 'disabled') { + this.tech_.on('timeupdate', timeupdateHandler); + } + /** + * An event that fires when mode changes on this track. This allows + * the TextTrackList that holds this track to act accordingly. + * + * > Note: This is not part of the spec! + * + * @event TextTrack#modechange + * @type {EventTarget~Event} + */ + + + this.trigger('modechange'); + } + }, + + /** + * @memberof TextTrack + * @member {TextTrackCueList} cues + * The text track cue list for this TextTrack. + * @instance + */ + cues: { + get: function get() { + if (!this.loaded_) { + return null; + } + + return cues; + }, + set: function set() {} + }, + + /** + * @memberof TextTrack + * @member {TextTrackCueList} activeCues + * The list text track cues that are currently active for this TextTrack. + * @instance + */ + activeCues: { + get: function get() { + if (!this.loaded_) { + return null; + } // nothing to do + + + if (this.cues.length === 0) { + return activeCues; + } + + var ct = this.tech_.currentTime(); + var active = []; + + for (var i = 0, l = this.cues.length; i < l; i++) { + var cue = this.cues[i]; + + if (cue.startTime <= ct && cue.endTime >= ct) { + active.push(cue); + } else if (cue.startTime === cue.endTime && cue.startTime <= ct && cue.startTime + 0.5 >= ct) { + active.push(cue); + } + } + + changed = false; + + if (active.length !== this.activeCues_.length) { + changed = true; + } else { + for (var _i = 0; _i < active.length; _i++) { + if (this.activeCues_.indexOf(active[_i]) === -1) { + changed = true; + } + } + } + + this.activeCues_ = active; + activeCues.setCues_(this.activeCues_); + return activeCues; + }, + // /!\ Keep this setter empty (see the timeupdate handler above) + set: function set() {} + } + }); + + if (settings.src) { + _this.src = settings.src; + + if (!_this.preload_) { + // Tracks will load on-demand. + // Act like we're loaded for other purposes. + _this.loaded_ = true; + } + + if (_this.preload_ || settings.kind !== 'subtitles' && settings.kind !== 'captions') { + loadTrack(_this.src, assertThisInitialized(_this)); + } + } else { + _this.loaded_ = true; + } + + return _this; + } + /** + * Add a cue to the internal list of cues. + * + * @param {TextTrack~Cue} cue + * The cue to add to our internal list + */ + + + var _proto = TextTrack.prototype; + + _proto.addCue = function addCue(originalCue) { + var cue = originalCue; + + if (window_1.vttjs && !(originalCue instanceof window_1.vttjs.VTTCue)) { + cue = new window_1.vttjs.VTTCue(originalCue.startTime, originalCue.endTime, originalCue.text); + + for (var prop in originalCue) { + if (!(prop in cue)) { + cue[prop] = originalCue[prop]; + } + } // make sure that `id` is copied over + + + cue.id = originalCue.id; + cue.originalCue_ = originalCue; + } + + var tracks = this.tech_.textTracks(); + + for (var i = 0; i < tracks.length; i++) { + if (tracks[i] !== this) { + tracks[i].removeCue(cue); + } + } + + this.cues_.push(cue); + this.cues.setCues_(this.cues_); + } + /** + * Remove a cue from our internal list + * + * @param {TextTrack~Cue} removeCue + * The cue to remove from our internal list + */ + ; + + _proto.removeCue = function removeCue(_removeCue) { + var i = this.cues_.length; + + while (i--) { + var cue = this.cues_[i]; + + if (cue === _removeCue || cue.originalCue_ && cue.originalCue_ === _removeCue) { + this.cues_.splice(i, 1); + this.cues.setCues_(this.cues_); + break; + } + } + }; + + return TextTrack; + }(Track); + /** + * cuechange - One or more cues in the track have become active or stopped being active. + */ + + + TextTrack.prototype.allowedEvents_ = { + cuechange: 'cuechange' + }; + + /** + * A representation of a single `AudioTrack`. If it is part of an {@link AudioTrackList} + * only one `AudioTrack` in the list will be enabled at a time. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#audiotrack} + * @extends Track + */ + + var AudioTrack = /*#__PURE__*/function (_Track) { + inheritsLoose(AudioTrack, _Track); + + /** + * Create an instance of this class. + * + * @param {Object} [options={}] + * Object of option names and values + * + * @param {AudioTrack~Kind} [options.kind=''] + * A valid audio track kind + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this AudioTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {boolean} [options.enabled] + * If this track is the one that is currently playing. If this track is part of + * an {@link AudioTrackList}, only one {@link AudioTrack} will be enabled. + */ + function AudioTrack(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + var settings = mergeOptions(options, { + kind: AudioTrackKind[options.kind] || '' + }); + _this = _Track.call(this, settings) || this; + var enabled = false; + /** + * @memberof AudioTrack + * @member {boolean} enabled + * If this `AudioTrack` is enabled or not. When setting this will + * fire {@link AudioTrack#enabledchange} if the state of enabled is changed. + * @instance + * + * @fires VideoTrack#selectedchange + */ + + Object.defineProperty(assertThisInitialized(_this), 'enabled', { + get: function get() { + return enabled; + }, + set: function set(newEnabled) { + // an invalid or unchanged value + if (typeof newEnabled !== 'boolean' || newEnabled === enabled) { + return; + } + + enabled = newEnabled; + /** + * An event that fires when enabled changes on this track. This allows + * the AudioTrackList that holds this track to act accordingly. + * + * > Note: This is not part of the spec! Native tracks will do + * this internally without an event. + * + * @event AudioTrack#enabledchange + * @type {EventTarget~Event} + */ + + this.trigger('enabledchange'); + } + }); // if the user sets this track to selected then + // set selected to that true value otherwise + // we keep it false + + if (settings.enabled) { + _this.enabled = settings.enabled; + } + + _this.loaded_ = true; + return _this; + } + + return AudioTrack; + }(Track); + + /** + * A representation of a single `VideoTrack`. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#videotrack} + * @extends Track + */ + + var VideoTrack = /*#__PURE__*/function (_Track) { + inheritsLoose(VideoTrack, _Track); + + /** + * Create an instance of this class. + * + * @param {Object} [options={}] + * Object of option names and values + * + * @param {string} [options.kind=''] + * A valid {@link VideoTrack~Kind} + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this AudioTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {boolean} [options.selected] + * If this track is the one that is currently playing. + */ + function VideoTrack(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + var settings = mergeOptions(options, { + kind: VideoTrackKind[options.kind] || '' + }); + _this = _Track.call(this, settings) || this; + var selected = false; + /** + * @memberof VideoTrack + * @member {boolean} selected + * If this `VideoTrack` is selected or not. When setting this will + * fire {@link VideoTrack#selectedchange} if the state of selected changed. + * @instance + * + * @fires VideoTrack#selectedchange + */ + + Object.defineProperty(assertThisInitialized(_this), 'selected', { + get: function get() { + return selected; + }, + set: function set(newSelected) { + // an invalid or unchanged value + if (typeof newSelected !== 'boolean' || newSelected === selected) { + return; + } + + selected = newSelected; + /** + * An event that fires when selected changes on this track. This allows + * the VideoTrackList that holds this track to act accordingly. + * + * > Note: This is not part of the spec! Native tracks will do + * this internally without an event. + * + * @event VideoTrack#selectedchange + * @type {EventTarget~Event} + */ + + this.trigger('selectedchange'); + } + }); // if the user sets this track to selected then + // set selected to that true value otherwise + // we keep it false + + if (settings.selected) { + _this.selected = settings.selected; + } + + return _this; + } + + return VideoTrack; + }(Track); + + /** + * @memberof HTMLTrackElement + * @typedef {HTMLTrackElement~ReadyState} + * @enum {number} + */ + + var NONE = 0; + var LOADING = 1; + var LOADED = 2; + var ERROR = 3; + /** + * A single track represented in the DOM. + * + * @see [Spec]{@link https://html.spec.whatwg.org/multipage/embedded-content.html#htmltrackelement} + * @extends EventTarget + */ + + var HTMLTrackElement = /*#__PURE__*/function (_EventTarget) { + inheritsLoose(HTMLTrackElement, _EventTarget); + + /** + * Create an instance of this class. + * + * @param {Object} options={} + * Object of option names and values + * + * @param {Tech} options.tech + * A reference to the tech that owns this HTMLTrackElement. + * + * @param {TextTrack~Kind} [options.kind='subtitles'] + * A valid text track kind. + * + * @param {TextTrack~Mode} [options.mode='disabled'] + * A valid text track mode. + * + * @param {string} [options.id='vjs_track_' + Guid.newGUID()] + * A unique id for this TextTrack. + * + * @param {string} [options.label=''] + * The menu label for this track. + * + * @param {string} [options.language=''] + * A valid two character language code. + * + * @param {string} [options.srclang=''] + * A valid two character language code. An alternative, but deprioritized + * vesion of `options.language` + * + * @param {string} [options.src] + * A url to TextTrack cues. + * + * @param {boolean} [options.default] + * If this track should default to on or off. + */ + function HTMLTrackElement(options) { + var _this; + + if (options === void 0) { + options = {}; + } + + _this = _EventTarget.call(this) || this; + var readyState; + var track = new TextTrack(options); + _this.kind = track.kind; + _this.src = track.src; + _this.srclang = track.language; + _this.label = track.label; + _this["default"] = track["default"]; + Object.defineProperties(assertThisInitialized(_this), { + /** + * @memberof HTMLTrackElement + * @member {HTMLTrackElement~ReadyState} readyState + * The current ready state of the track element. + * @instance + */ + readyState: { + get: function get() { + return readyState; + } + }, + + /** + * @memberof HTMLTrackElement + * @member {TextTrack} track + * The underlying TextTrack object. + * @instance + * + */ + track: { + get: function get() { + return track; + } + } + }); + readyState = NONE; + /** + * @listens TextTrack#loadeddata + * @fires HTMLTrackElement#load + */ + + track.addEventListener('loadeddata', function () { + readyState = LOADED; + + _this.trigger({ + type: 'load', + target: assertThisInitialized(_this) + }); + }); + return _this; + } + + return HTMLTrackElement; + }(EventTarget); + + HTMLTrackElement.prototype.allowedEvents_ = { + load: 'load' + }; + HTMLTrackElement.NONE = NONE; + HTMLTrackElement.LOADING = LOADING; + HTMLTrackElement.LOADED = LOADED; + HTMLTrackElement.ERROR = ERROR; + + /* + * This file contains all track properties that are used in + * player.js, tech.js, html5.js and possibly other techs in the future. + */ + + var NORMAL = { + audio: { + ListClass: AudioTrackList, + TrackClass: AudioTrack, + capitalName: 'Audio' + }, + video: { + ListClass: VideoTrackList, + TrackClass: VideoTrack, + capitalName: 'Video' + }, + text: { + ListClass: TextTrackList, + TrackClass: TextTrack, + capitalName: 'Text' + } + }; + Object.keys(NORMAL).forEach(function (type) { + NORMAL[type].getterName = type + "Tracks"; + NORMAL[type].privateName = type + "Tracks_"; + }); + var REMOTE = { + remoteText: { + ListClass: TextTrackList, + TrackClass: TextTrack, + capitalName: 'RemoteText', + getterName: 'remoteTextTracks', + privateName: 'remoteTextTracks_' + }, + remoteTextEl: { + ListClass: HtmlTrackElementList, + TrackClass: HTMLTrackElement, + capitalName: 'RemoteTextTrackEls', + getterName: 'remoteTextTrackEls', + privateName: 'remoteTextTrackEls_' + } + }; + + var ALL = _extends_1({}, NORMAL, REMOTE); + + REMOTE.names = Object.keys(REMOTE); + NORMAL.names = Object.keys(NORMAL); + ALL.names = [].concat(REMOTE.names).concat(NORMAL.names); + + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ + + /* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ + + var _objCreate = Object.create || function () { + function F() {} + + return function (o) { + if (arguments.length !== 1) { + throw new Error('Object.create shim only accepts one parameter.'); + } + + F.prototype = o; + return new F(); + }; + }(); // Creates a new ParserError object from an errorData object. The errorData + // object should have default code and message properties. The default message + // property can be overriden by passing in a message parameter. + // See ParsingError.Errors below for acceptable errors. + + + function ParsingError(errorData, message) { + this.name = "ParsingError"; + this.code = errorData.code; + this.message = message || errorData.message; + } + + ParsingError.prototype = _objCreate(Error.prototype); + ParsingError.prototype.constructor = ParsingError; // ParsingError metadata for acceptable ParsingErrors. + + ParsingError.Errors = { + BadSignature: { + code: 0, + message: "Malformed WebVTT signature." + }, + BadTimeStamp: { + code: 1, + message: "Malformed time stamp." + } + }; // Try to parse input as a time stamp. + + function parseTimeStamp(input) { + function computeSeconds(h, m, s, f) { + return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000; + } + + var m = input.match(/^(\d+):(\d{1,2})(:\d{1,2})?\.(\d{3})/); + + if (!m) { + return null; + } + + if (m[3]) { + // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds] + return computeSeconds(m[1], m[2], m[3].replace(":", ""), m[4]); + } else if (m[1] > 59) { + // Timestamp takes the form of [hours]:[minutes].[milliseconds] + // First position is hours as it's over 59. + return computeSeconds(m[1], m[2], 0, m[4]); + } else { + // Timestamp takes the form of [minutes]:[seconds].[milliseconds] + return computeSeconds(0, m[1], m[2], m[4]); + } + } // A settings object holds key/value pairs and will ignore anything but the first + // assignment to a specific key. + + + function Settings() { + this.values = _objCreate(null); + } + + Settings.prototype = { + // Only accept the first assignment to any key. + set: function set(k, v) { + if (!this.get(k) && v !== "") { + this.values[k] = v; + } + }, + // Return the value for a key, or a default value. + // If 'defaultKey' is passed then 'dflt' is assumed to be an object with + // a number of possible default values as properties where 'defaultKey' is + // the key of the property that will be chosen; otherwise it's assumed to be + // a single value. + get: function get(k, dflt, defaultKey) { + if (defaultKey) { + return this.has(k) ? this.values[k] : dflt[defaultKey]; + } + + return this.has(k) ? this.values[k] : dflt; + }, + // Check whether we have a value for a key. + has: function has(k) { + return k in this.values; + }, + // Accept a setting if its one of the given alternatives. + alt: function alt(k, v, a) { + for (var n = 0; n < a.length; ++n) { + if (v === a[n]) { + this.set(k, v); + break; + } + } + }, + // Accept a setting if its a valid (signed) integer. + integer: function integer(k, v) { + if (/^-?\d+$/.test(v)) { + // integer + this.set(k, parseInt(v, 10)); + } + }, + // Accept a setting if its a valid percentage. + percent: function percent(k, v) { + + if (v.match(/^([\d]{1,3})(\.[\d]*)?%$/)) { + v = parseFloat(v); + + if (v >= 0 && v <= 100) { + this.set(k, v); + return true; + } + } + + return false; + } + }; // Helper function to parse input into groups separated by 'groupDelim', and + // interprete each group as a key/value pair separated by 'keyValueDelim'. + + function parseOptions(input, callback, keyValueDelim, groupDelim) { + var groups = groupDelim ? input.split(groupDelim) : [input]; + + for (var i in groups) { + if (typeof groups[i] !== "string") { + continue; + } + + var kv = groups[i].split(keyValueDelim); + + if (kv.length !== 2) { + continue; + } + + var k = kv[0]; + var v = kv[1]; + callback(k, v); + } + } + + function parseCue(input, cue, regionList) { + // Remember the original input if we need to throw an error. + var oInput = input; // 4.1 WebVTT timestamp + + function consumeTimeStamp() { + var ts = parseTimeStamp(input); + + if (ts === null) { + throw new ParsingError(ParsingError.Errors.BadTimeStamp, "Malformed timestamp: " + oInput); + } // Remove time stamp from input. + + + input = input.replace(/^[^\sa-zA-Z-]+/, ""); + return ts; + } // 4.4.2 WebVTT cue settings + + + function consumeCueSettings(input, cue) { + var settings = new Settings(); + parseOptions(input, function (k, v) { + switch (k) { + case "region": + // Find the last region we parsed with the same region id. + for (var i = regionList.length - 1; i >= 0; i--) { + if (regionList[i].id === v) { + settings.set(k, regionList[i].region); + break; + } + } + + break; + + case "vertical": + settings.alt(k, v, ["rl", "lr"]); + break; + + case "line": + var vals = v.split(","), + vals0 = vals[0]; + settings.integer(k, vals0); + settings.percent(k, vals0) ? settings.set("snapToLines", false) : null; + settings.alt(k, vals0, ["auto"]); + + if (vals.length === 2) { + settings.alt("lineAlign", vals[1], ["start", "center", "end"]); + } + + break; + + case "position": + vals = v.split(","); + settings.percent(k, vals[0]); + + if (vals.length === 2) { + settings.alt("positionAlign", vals[1], ["start", "center", "end"]); + } + + break; + + case "size": + settings.percent(k, v); + break; + + case "align": + settings.alt(k, v, ["start", "center", "end", "left", "right"]); + break; + } + }, /:/, /\s/); // Apply default values for any missing fields. + + cue.region = settings.get("region", null); + cue.vertical = settings.get("vertical", ""); + + try { + cue.line = settings.get("line", "auto"); + } catch (e) {} + + cue.lineAlign = settings.get("lineAlign", "start"); + cue.snapToLines = settings.get("snapToLines", true); + cue.size = settings.get("size", 100); // Safari still uses the old middle value and won't accept center + + try { + cue.align = settings.get("align", "center"); + } catch (e) { + cue.align = settings.get("align", "middle"); + } + + try { + cue.position = settings.get("position", "auto"); + } catch (e) { + cue.position = settings.get("position", { + start: 0, + left: 0, + center: 50, + middle: 50, + end: 100, + right: 100 + }, cue.align); + } + + cue.positionAlign = settings.get("positionAlign", { + start: "start", + left: "start", + center: "center", + middle: "center", + end: "end", + right: "end" + }, cue.align); + } + + function skipWhitespace() { + input = input.replace(/^\s+/, ""); + } // 4.1 WebVTT cue timings. + + + skipWhitespace(); + cue.startTime = consumeTimeStamp(); // (1) collect cue start time + + skipWhitespace(); + + if (input.substr(0, 3) !== "-->") { + // (3) next characters must match "-->" + throw new ParsingError(ParsingError.Errors.BadTimeStamp, "Malformed time stamp (time stamps must be separated by '-->'): " + oInput); + } + + input = input.substr(3); + skipWhitespace(); + cue.endTime = consumeTimeStamp(); // (5) collect cue end time + // 4.1 WebVTT cue settings list. + + skipWhitespace(); + consumeCueSettings(input, cue); + } // When evaluating this file as part of a Webpack bundle for server + // side rendering, `document` is an empty object. + + + var TEXTAREA_ELEMENT = document_1.createElement && document_1.createElement("textarea"); + var TAG_NAME = { + c: "span", + i: "i", + b: "b", + u: "u", + ruby: "ruby", + rt: "rt", + v: "span", + lang: "span" + }; // 5.1 default text color + // 5.2 default text background color is equivalent to text color with bg_ prefix + + var DEFAULT_COLOR_CLASS = { + white: 'rgba(255,255,255,1)', + lime: 'rgba(0,255,0,1)', + cyan: 'rgba(0,255,255,1)', + red: 'rgba(255,0,0,1)', + yellow: 'rgba(255,255,0,1)', + magenta: 'rgba(255,0,255,1)', + blue: 'rgba(0,0,255,1)', + black: 'rgba(0,0,0,1)' + }; + var TAG_ANNOTATION = { + v: "title", + lang: "lang" + }; + var NEEDS_PARENT = { + rt: "ruby" + }; // Parse content into a document fragment. + + function parseContent(window, input) { + function nextToken() { + // Check for end-of-string. + if (!input) { + return null; + } // Consume 'n' characters from the input. + + + function consume(result) { + input = input.substr(result.length); + return result; + } + + var m = input.match(/^([^<]*)(<[^>]*>?)?/); // If there is some text before the next tag, return it, otherwise return + // the tag. + + return consume(m[1] ? m[1] : m[2]); + } + + function unescape(s) { + TEXTAREA_ELEMENT.innerHTML = s; + s = TEXTAREA_ELEMENT.textContent; + TEXTAREA_ELEMENT.textContent = ""; + return s; + } + + function shouldAdd(current, element) { + return !NEEDS_PARENT[element.localName] || NEEDS_PARENT[element.localName] === current.localName; + } // Create an element for this tag. + + + function createElement(type, annotation) { + var tagName = TAG_NAME[type]; + + if (!tagName) { + return null; + } + + var element = window.document.createElement(tagName); + var name = TAG_ANNOTATION[type]; + + if (name && annotation) { + element[name] = annotation.trim(); + } + + return element; + } + + var rootDiv = window.document.createElement("div"), + current = rootDiv, + t, + tagStack = []; + + while ((t = nextToken()) !== null) { + if (t[0] === '<') { + if (t[1] === "/") { + // If the closing tag matches, move back up to the parent node. + if (tagStack.length && tagStack[tagStack.length - 1] === t.substr(2).replace(">", "")) { + tagStack.pop(); + current = current.parentNode; + } // Otherwise just ignore the end tag. + + + continue; + } + + var ts = parseTimeStamp(t.substr(1, t.length - 2)); + var node; + + if (ts) { + // Timestamps are lead nodes as well. + node = window.document.createProcessingInstruction("timestamp", ts); + current.appendChild(node); + continue; + } + + var m = t.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/); // If we can't parse the tag, skip to the next tag. + + if (!m) { + continue; + } // Try to construct an element, and ignore the tag if we couldn't. + + + node = createElement(m[1], m[3]); + + if (!node) { + continue; + } // Determine if the tag should be added based on the context of where it + // is placed in the cuetext. + + + if (!shouldAdd(current, node)) { + continue; + } // Set the class list (as a list of classes, separated by space). + + + if (m[2]) { + var classes = m[2].split('.'); + classes.forEach(function (cl) { + var bgColor = /^bg_/.test(cl); // slice out `bg_` if it's a background color + + var colorName = bgColor ? cl.slice(3) : cl; + + if (DEFAULT_COLOR_CLASS.hasOwnProperty(colorName)) { + var propName = bgColor ? 'background-color' : 'color'; + var propValue = DEFAULT_COLOR_CLASS[colorName]; + node.style[propName] = propValue; + } + }); + node.className = classes.join(' '); + } // Append the node to the current node, and enter the scope of the new + // node. + + + tagStack.push(m[1]); + current.appendChild(node); + current = node; + continue; + } // Text nodes are leaf nodes. + + + current.appendChild(window.document.createTextNode(unescape(t))); + } + + return rootDiv; + } // This is a list of all the Unicode characters that have a strong + // right-to-left category. What this means is that these characters are + // written right-to-left for sure. It was generated by pulling all the strong + // right-to-left characters out of the Unicode data table. That table can + // found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt + + + var strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6], [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d], [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6], [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5], [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815], [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858], [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f], [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c], [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1], [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc], [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808], [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855], [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f], [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13], [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58], [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72], [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f], [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32], [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42], [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f], [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59], [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62], [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77], [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b], [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]]; + + function isStrongRTLChar(charCode) { + for (var i = 0; i < strongRTLRanges.length; i++) { + var currentRange = strongRTLRanges[i]; + + if (charCode >= currentRange[0] && charCode <= currentRange[1]) { + return true; + } + } + + return false; + } + + function determineBidi(cueDiv) { + var nodeStack = [], + text = "", + charCode; + + if (!cueDiv || !cueDiv.childNodes) { + return "ltr"; + } + + function pushNodes(nodeStack, node) { + for (var i = node.childNodes.length - 1; i >= 0; i--) { + nodeStack.push(node.childNodes[i]); + } + } + + function nextTextNode(nodeStack) { + if (!nodeStack || !nodeStack.length) { + return null; + } + + var node = nodeStack.pop(), + text = node.textContent || node.innerText; + + if (text) { + // TODO: This should match all unicode type B characters (paragraph + // separator characters). See issue #115. + var m = text.match(/^.*(\n|\r)/); + + if (m) { + nodeStack.length = 0; + return m[0]; + } + + return text; + } + + if (node.tagName === "ruby") { + return nextTextNode(nodeStack); + } + + if (node.childNodes) { + pushNodes(nodeStack, node); + return nextTextNode(nodeStack); + } + } + + pushNodes(nodeStack, cueDiv); + + while (text = nextTextNode(nodeStack)) { + for (var i = 0; i < text.length; i++) { + charCode = text.charCodeAt(i); + + if (isStrongRTLChar(charCode)) { + return "rtl"; + } + } + } + + return "ltr"; + } + + function computeLinePos(cue) { + if (typeof cue.line === "number" && (cue.snapToLines || cue.line >= 0 && cue.line <= 100)) { + return cue.line; + } + + if (!cue.track || !cue.track.textTrackList || !cue.track.textTrackList.mediaElement) { + return -1; + } + + var track = cue.track, + trackList = track.textTrackList, + count = 0; + + for (var i = 0; i < trackList.length && trackList[i] !== track; i++) { + if (trackList[i].mode === "showing") { + count++; + } + } + + return ++count * -1; + } + + function StyleBox() {} // Apply styles to a div. If there is no div passed then it defaults to the + // div on 'this'. + + + StyleBox.prototype.applyStyles = function (styles, div) { + div = div || this.div; + + for (var prop in styles) { + if (styles.hasOwnProperty(prop)) { + div.style[prop] = styles[prop]; + } + } + }; + + StyleBox.prototype.formatStyle = function (val, unit) { + return val === 0 ? 0 : val + unit; + }; // Constructs the computed display state of the cue (a div). Places the div + // into the overlay which should be a block level element (usually a div). + + + function CueStyleBox(window, cue, styleOptions) { + StyleBox.call(this); + this.cue = cue; // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will + // have inline positioning and will function as the cue background box. + + this.cueDiv = parseContent(window, cue.text); + var styles = { + color: "rgba(255, 255, 255, 1)", + backgroundColor: "rgba(0, 0, 0, 0.8)", + position: "relative", + left: 0, + right: 0, + top: 0, + bottom: 0, + display: "inline", + writingMode: cue.vertical === "" ? "horizontal-tb" : cue.vertical === "lr" ? "vertical-lr" : "vertical-rl", + unicodeBidi: "plaintext" + }; + this.applyStyles(styles, this.cueDiv); // Create an absolutely positioned div that will be used to position the cue + // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS + // mirrors of them except middle instead of center on Safari. + + this.div = window.document.createElement("div"); + styles = { + direction: determineBidi(this.cueDiv), + writingMode: cue.vertical === "" ? "horizontal-tb" : cue.vertical === "lr" ? "vertical-lr" : "vertical-rl", + unicodeBidi: "plaintext", + textAlign: cue.align === "middle" ? "center" : cue.align, + font: styleOptions.font, + whiteSpace: "pre-line", + position: "absolute" + }; + this.applyStyles(styles); + this.div.appendChild(this.cueDiv); // Calculate the distance from the reference edge of the viewport to the text + // position of the cue box. The reference edge will be resolved later when + // the box orientation styles are applied. + + var textPos = 0; + + switch (cue.positionAlign) { + case "start": + textPos = cue.position; + break; + + case "center": + textPos = cue.position - cue.size / 2; + break; + + case "end": + textPos = cue.position - cue.size; + break; + } // Horizontal box orientation; textPos is the distance from the left edge of the + // area to the left edge of the box and cue.size is the distance extending to + // the right from there. + + + if (cue.vertical === "") { + this.applyStyles({ + left: this.formatStyle(textPos, "%"), + width: this.formatStyle(cue.size, "%") + }); // Vertical box orientation; textPos is the distance from the top edge of the + // area to the top edge of the box and cue.size is the height extending + // downwards from there. + } else { + this.applyStyles({ + top: this.formatStyle(textPos, "%"), + height: this.formatStyle(cue.size, "%") + }); + } + + this.move = function (box) { + this.applyStyles({ + top: this.formatStyle(box.top, "px"), + bottom: this.formatStyle(box.bottom, "px"), + left: this.formatStyle(box.left, "px"), + right: this.formatStyle(box.right, "px"), + height: this.formatStyle(box.height, "px"), + width: this.formatStyle(box.width, "px") + }); + }; + } + + CueStyleBox.prototype = _objCreate(StyleBox.prototype); + CueStyleBox.prototype.constructor = CueStyleBox; // Represents the co-ordinates of an Element in a way that we can easily + // compute things with such as if it overlaps or intersects with another Element. + // Can initialize it with either a StyleBox or another BoxPosition. + + function BoxPosition(obj) { + // Either a BoxPosition was passed in and we need to copy it, or a StyleBox + // was passed in and we need to copy the results of 'getBoundingClientRect' + // as the object returned is readonly. All co-ordinate values are in reference + // to the viewport origin (top left). + var lh, height, width, top; + + if (obj.div) { + height = obj.div.offsetHeight; + width = obj.div.offsetWidth; + top = obj.div.offsetTop; + var rects = (rects = obj.div.childNodes) && (rects = rects[0]) && rects.getClientRects && rects.getClientRects(); + obj = obj.div.getBoundingClientRect(); // In certain cases the outter div will be slightly larger then the sum of + // the inner div's lines. This could be due to bold text, etc, on some platforms. + // In this case we should get the average line height and use that. This will + // result in the desired behaviour. + + lh = rects ? Math.max(rects[0] && rects[0].height || 0, obj.height / rects.length) : 0; + } + + this.left = obj.left; + this.right = obj.right; + this.top = obj.top || top; + this.height = obj.height || height; + this.bottom = obj.bottom || top + (obj.height || height); + this.width = obj.width || width; + this.lineHeight = lh !== undefined ? lh : obj.lineHeight; + } // Move the box along a particular axis. Optionally pass in an amount to move + // the box. If no amount is passed then the default is the line height of the + // box. + + + BoxPosition.prototype.move = function (axis, toMove) { + toMove = toMove !== undefined ? toMove : this.lineHeight; + + switch (axis) { + case "+x": + this.left += toMove; + this.right += toMove; + break; + + case "-x": + this.left -= toMove; + this.right -= toMove; + break; + + case "+y": + this.top += toMove; + this.bottom += toMove; + break; + + case "-y": + this.top -= toMove; + this.bottom -= toMove; + break; + } + }; // Check if this box overlaps another box, b2. + + + BoxPosition.prototype.overlaps = function (b2) { + return this.left < b2.right && this.right > b2.left && this.top < b2.bottom && this.bottom > b2.top; + }; // Check if this box overlaps any other boxes in boxes. + + + BoxPosition.prototype.overlapsAny = function (boxes) { + for (var i = 0; i < boxes.length; i++) { + if (this.overlaps(boxes[i])) { + return true; + } + } + + return false; + }; // Check if this box is within another box. + + + BoxPosition.prototype.within = function (container) { + return this.top >= container.top && this.bottom <= container.bottom && this.left >= container.left && this.right <= container.right; + }; // Check if this box is entirely within the container or it is overlapping + // on the edge opposite of the axis direction passed. For example, if "+x" is + // passed and the box is overlapping on the left edge of the container, then + // return true. + + + BoxPosition.prototype.overlapsOppositeAxis = function (container, axis) { + switch (axis) { + case "+x": + return this.left < container.left; + + case "-x": + return this.right > container.right; + + case "+y": + return this.top < container.top; + + case "-y": + return this.bottom > container.bottom; + } + }; // Find the percentage of the area that this box is overlapping with another + // box. + + + BoxPosition.prototype.intersectPercentage = function (b2) { + var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)), + y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)), + intersectArea = x * y; + return intersectArea / (this.height * this.width); + }; // Convert the positions from this box to CSS compatible positions using + // the reference container's positions. This has to be done because this + // box's positions are in reference to the viewport origin, whereas, CSS + // values are in referecne to their respective edges. + + + BoxPosition.prototype.toCSSCompatValues = function (reference) { + return { + top: this.top - reference.top, + bottom: reference.bottom - this.bottom, + left: this.left - reference.left, + right: reference.right - this.right, + height: this.height, + width: this.width + }; + }; // Get an object that represents the box's position without anything extra. + // Can pass a StyleBox, HTMLElement, or another BoxPositon. + + + BoxPosition.getSimpleBoxPosition = function (obj) { + var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0; + var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0; + var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0; + obj = obj.div ? obj.div.getBoundingClientRect() : obj.tagName ? obj.getBoundingClientRect() : obj; + var ret = { + left: obj.left, + right: obj.right, + top: obj.top || top, + height: obj.height || height, + bottom: obj.bottom || top + (obj.height || height), + width: obj.width || width + }; + return ret; + }; // Move a StyleBox to its specified, or next best, position. The containerBox + // is the box that contains the StyleBox, such as a div. boxPositions are + // a list of other boxes that the styleBox can't overlap with. + + + function moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) { + // Find the best position for a cue box, b, on the video. The axis parameter + // is a list of axis, the order of which, it will move the box along. For example: + // Passing ["+x", "-x"] will move the box first along the x axis in the positive + // direction. If it doesn't find a good position for it there it will then move + // it along the x axis in the negative direction. + function findBestPosition(b, axis) { + var bestPosition, + specifiedPosition = new BoxPosition(b), + percentage = 1; // Highest possible so the first thing we get is better. + + for (var i = 0; i < axis.length; i++) { + while (b.overlapsOppositeAxis(containerBox, axis[i]) || b.within(containerBox) && b.overlapsAny(boxPositions)) { + b.move(axis[i]); + } // We found a spot where we aren't overlapping anything. This is our + // best position. + + + if (b.within(containerBox)) { + return b; + } + + var p = b.intersectPercentage(containerBox); // If we're outside the container box less then we were on our last try + // then remember this position as the best position. + + if (percentage > p) { + bestPosition = new BoxPosition(b); + percentage = p; + } // Reset the box position to the specified position. + + + b = new BoxPosition(specifiedPosition); + } + + return bestPosition || specifiedPosition; + } + + var boxPosition = new BoxPosition(styleBox), + cue = styleBox.cue, + linePos = computeLinePos(cue), + axis = []; // If we have a line number to align the cue to. + + if (cue.snapToLines) { + var size; + + switch (cue.vertical) { + case "": + axis = ["+y", "-y"]; + size = "height"; + break; + + case "rl": + axis = ["+x", "-x"]; + size = "width"; + break; + + case "lr": + axis = ["-x", "+x"]; + size = "width"; + break; + } + + var step = boxPosition.lineHeight, + position = step * Math.round(linePos), + maxPosition = containerBox[size] + step, + initialAxis = axis[0]; // If the specified intial position is greater then the max position then + // clamp the box to the amount of steps it would take for the box to + // reach the max position. + + if (Math.abs(position) > maxPosition) { + position = position < 0 ? -1 : 1; + position *= Math.ceil(maxPosition / step) * step; + } // If computed line position returns negative then line numbers are + // relative to the bottom of the video instead of the top. Therefore, we + // need to increase our initial position by the length or width of the + // video, depending on the writing direction, and reverse our axis directions. + + + if (linePos < 0) { + position += cue.vertical === "" ? containerBox.height : containerBox.width; + axis = axis.reverse(); + } // Move the box to the specified position. This may not be its best + // position. + + + boxPosition.move(initialAxis, position); + } else { + // If we have a percentage line value for the cue. + var calculatedPercentage = boxPosition.lineHeight / containerBox.height * 100; + + switch (cue.lineAlign) { + case "center": + linePos -= calculatedPercentage / 2; + break; + + case "end": + linePos -= calculatedPercentage; + break; + } // Apply initial line position to the cue box. + + + switch (cue.vertical) { + case "": + styleBox.applyStyles({ + top: styleBox.formatStyle(linePos, "%") + }); + break; + + case "rl": + styleBox.applyStyles({ + left: styleBox.formatStyle(linePos, "%") + }); + break; + + case "lr": + styleBox.applyStyles({ + right: styleBox.formatStyle(linePos, "%") + }); + break; + } + + axis = ["+y", "-x", "+x", "-y"]; // Get the box position again after we've applied the specified positioning + // to it. + + boxPosition = new BoxPosition(styleBox); + } + + var bestPosition = findBestPosition(boxPosition, axis); + styleBox.move(bestPosition.toCSSCompatValues(containerBox)); + } + + function WebVTT$1() {// Nothing + } // Helper to allow strings to be decoded instead of the default binary utf8 data. + + + WebVTT$1.StringDecoder = function () { + return { + decode: function decode(data) { + if (!data) { + return ""; + } + + if (typeof data !== "string") { + throw new Error("Error - expected string data."); + } + + return decodeURIComponent(encodeURIComponent(data)); + } + }; + }; + + WebVTT$1.convertCueToDOMTree = function (window, cuetext) { + if (!window || !cuetext) { + return null; + } + + return parseContent(window, cuetext); + }; + + var FONT_SIZE_PERCENT = 0.05; + var FONT_STYLE = "sans-serif"; + var CUE_BACKGROUND_PADDING = "1.5%"; // Runs the processing model over the cues and regions passed to it. + // @param overlay A block level element (usually a div) that the computed cues + // and regions will be placed into. + + WebVTT$1.processCues = function (window, cues, overlay) { + if (!window || !cues || !overlay) { + return null; + } // Remove all previous children. + + + while (overlay.firstChild) { + overlay.removeChild(overlay.firstChild); + } + + var paddedOverlay = window.document.createElement("div"); + paddedOverlay.style.position = "absolute"; + paddedOverlay.style.left = "0"; + paddedOverlay.style.right = "0"; + paddedOverlay.style.top = "0"; + paddedOverlay.style.bottom = "0"; + paddedOverlay.style.margin = CUE_BACKGROUND_PADDING; + overlay.appendChild(paddedOverlay); // Determine if we need to compute the display states of the cues. This could + // be the case if a cue's state has been changed since the last computation or + // if it has not been computed yet. + + function shouldCompute(cues) { + for (var i = 0; i < cues.length; i++) { + if (cues[i].hasBeenReset || !cues[i].displayState) { + return true; + } + } + + return false; + } // We don't need to recompute the cues' display states. Just reuse them. + + + if (!shouldCompute(cues)) { + for (var i = 0; i < cues.length; i++) { + paddedOverlay.appendChild(cues[i].displayState); + } + + return; + } + + var boxPositions = [], + containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay), + fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100; + var styleOptions = { + font: fontSize + "px " + FONT_STYLE + }; + + (function () { + var styleBox, cue; + + for (var i = 0; i < cues.length; i++) { + cue = cues[i]; // Compute the intial position and styles of the cue div. + + styleBox = new CueStyleBox(window, cue, styleOptions); + paddedOverlay.appendChild(styleBox.div); // Move the cue div to it's correct line position. + + moveBoxToLinePosition(window, styleBox, containerBox, boxPositions); // Remember the computed div so that we don't have to recompute it later + // if we don't have too. + + cue.displayState = styleBox.div; + boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox)); + } + })(); + }; + + WebVTT$1.Parser = function (window, vttjs, decoder) { + if (!decoder) { + decoder = vttjs; + vttjs = {}; + } + + if (!vttjs) { + vttjs = {}; + } + + this.window = window; + this.vttjs = vttjs; + this.state = "INITIAL"; + this.buffer = ""; + this.decoder = decoder || new TextDecoder("utf8"); + this.regionList = []; + }; + + WebVTT$1.Parser.prototype = { + // If the error is a ParsingError then report it to the consumer if + // possible. If it's not a ParsingError then throw it like normal. + reportOrThrowError: function reportOrThrowError(e) { + if (e instanceof ParsingError) { + this.onparsingerror && this.onparsingerror(e); + } else { + throw e; + } + }, + parse: function parse(data) { + var self = this; // If there is no data then we won't decode it, but will just try to parse + // whatever is in buffer already. This may occur in circumstances, for + // example when flush() is called. + + if (data) { + // Try to decode the data that we received. + self.buffer += self.decoder.decode(data, { + stream: true + }); + } + + function collectNextLine() { + var buffer = self.buffer; + var pos = 0; + + while (pos < buffer.length && buffer[pos] !== '\r' && buffer[pos] !== '\n') { + ++pos; + } + + var line = buffer.substr(0, pos); // Advance the buffer early in case we fail below. + + if (buffer[pos] === '\r') { + ++pos; + } + + if (buffer[pos] === '\n') { + ++pos; + } + + self.buffer = buffer.substr(pos); + return line; + } // 3.4 WebVTT region and WebVTT region settings syntax + + + function parseRegion(input) { + var settings = new Settings(); + parseOptions(input, function (k, v) { + switch (k) { + case "id": + settings.set(k, v); + break; + + case "width": + settings.percent(k, v); + break; + + case "lines": + settings.integer(k, v); + break; + + case "regionanchor": + case "viewportanchor": + var xy = v.split(','); + + if (xy.length !== 2) { + break; + } // We have to make sure both x and y parse, so use a temporary + // settings object here. + + + var anchor = new Settings(); + anchor.percent("x", xy[0]); + anchor.percent("y", xy[1]); + + if (!anchor.has("x") || !anchor.has("y")) { + break; + } + + settings.set(k + "X", anchor.get("x")); + settings.set(k + "Y", anchor.get("y")); + break; + + case "scroll": + settings.alt(k, v, ["up"]); + break; + } + }, /=/, /\s/); // Create the region, using default values for any values that were not + // specified. + + if (settings.has("id")) { + var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)(); + region.width = settings.get("width", 100); + region.lines = settings.get("lines", 3); + region.regionAnchorX = settings.get("regionanchorX", 0); + region.regionAnchorY = settings.get("regionanchorY", 100); + region.viewportAnchorX = settings.get("viewportanchorX", 0); + region.viewportAnchorY = settings.get("viewportanchorY", 100); + region.scroll = settings.get("scroll", ""); // Register the region. + + self.onregion && self.onregion(region); // Remember the VTTRegion for later in case we parse any VTTCues that + // reference it. + + self.regionList.push({ + id: settings.get("id"), + region: region + }); + } + } // draft-pantos-http-live-streaming-20 + // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5 + // 3.5 WebVTT + + + function parseTimestampMap(input) { + var settings = new Settings(); + parseOptions(input, function (k, v) { + switch (k) { + case "MPEGT": + settings.integer(k + 'S', v); + break; + + case "LOCA": + settings.set(k + 'L', parseTimeStamp(v)); + break; + } + }, /[^\d]:/, /,/); + self.ontimestampmap && self.ontimestampmap({ + "MPEGTS": settings.get("MPEGTS"), + "LOCAL": settings.get("LOCAL") + }); + } // 3.2 WebVTT metadata header syntax + + + function parseHeader(input) { + if (input.match(/X-TIMESTAMP-MAP/)) { + // This line contains HLS X-TIMESTAMP-MAP metadata + parseOptions(input, function (k, v) { + switch (k) { + case "X-TIMESTAMP-MAP": + parseTimestampMap(v); + break; + } + }, /=/); + } else { + parseOptions(input, function (k, v) { + switch (k) { + case "Region": + // 3.3 WebVTT region metadata header syntax + parseRegion(v); + break; + } + }, /:/); + } + } // 5.1 WebVTT file parsing. + + + try { + var line; + + if (self.state === "INITIAL") { + // We can't start parsing until we have the first line. + if (!/\r\n|\n/.test(self.buffer)) { + return this; + } + + line = collectNextLine(); + var m = line.match(/^WEBVTT([ \t].*)?$/); + + if (!m || !m[0]) { + throw new ParsingError(ParsingError.Errors.BadSignature); + } + + self.state = "HEADER"; + } + + var alreadyCollectedLine = false; + + while (self.buffer) { + // We can't parse a line until we have the full line. + if (!/\r\n|\n/.test(self.buffer)) { + return this; + } + + if (!alreadyCollectedLine) { + line = collectNextLine(); + } else { + alreadyCollectedLine = false; + } + + switch (self.state) { + case "HEADER": + // 13-18 - Allow a header (metadata) under the WEBVTT line. + if (/:/.test(line)) { + parseHeader(line); + } else if (!line) { + // An empty line terminates the header and starts the body (cues). + self.state = "ID"; + } + + continue; + + case "NOTE": + // Ignore NOTE blocks. + if (!line) { + self.state = "ID"; + } + + continue; + + case "ID": + // Check for the start of NOTE blocks. + if (/^NOTE($|[ \t])/.test(line)) { + self.state = "NOTE"; + break; + } // 19-29 - Allow any number of line terminators, then initialize new cue values. + + + if (!line) { + continue; + } + + self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, ""); // Safari still uses the old middle value and won't accept center + + try { + self.cue.align = "center"; + } catch (e) { + self.cue.align = "middle"; + } + + self.state = "CUE"; // 30-39 - Check if self line contains an optional identifier or timing data. + + if (line.indexOf("-->") === -1) { + self.cue.id = line; + continue; + } + + // Process line as start of a cue. + + /*falls through*/ + + case "CUE": + // 40 - Collect cue timings and settings. + try { + parseCue(line, self.cue, self.regionList); + } catch (e) { + self.reportOrThrowError(e); // In case of an error ignore rest of the cue. + + self.cue = null; + self.state = "BADCUE"; + continue; + } + + self.state = "CUETEXT"; + continue; + + case "CUETEXT": + var hasSubstring = line.indexOf("-->") !== -1; // 34 - If we have an empty line then report the cue. + // 35 - If we have the special substring '-->' then report the cue, + // but do not collect the line as we need to process the current + // one as a new cue. + + if (!line || hasSubstring && (alreadyCollectedLine = true)) { + // We are done parsing self cue. + self.oncue && self.oncue(self.cue); + self.cue = null; + self.state = "ID"; + continue; + } + + if (self.cue.text) { + self.cue.text += "\n"; + } + + self.cue.text += line.replace(/\u2028/g, '\n').replace(/u2029/g, '\n'); + continue; + + case "BADCUE": + // BADCUE + // 54-62 - Collect and discard the remaining cue. + if (!line) { + self.state = "ID"; + } + + continue; + } + } + } catch (e) { + self.reportOrThrowError(e); // If we are currently parsing a cue, report what we have. + + if (self.state === "CUETEXT" && self.cue && self.oncue) { + self.oncue(self.cue); + } + + self.cue = null; // Enter BADWEBVTT state if header was not parsed correctly otherwise + // another exception occurred so enter BADCUE state. + + self.state = self.state === "INITIAL" ? "BADWEBVTT" : "BADCUE"; + } + + return this; + }, + flush: function flush() { + var self = this; + + try { + // Finish decoding the stream. + self.buffer += self.decoder.decode(); // Synthesize the end of the current cue or region. + + if (self.cue || self.state === "HEADER") { + self.buffer += "\n\n"; + self.parse(); + } // If we've flushed, parsed, and we're still on the INITIAL state then + // that means we don't have enough of the stream to parse the first + // line. + + + if (self.state === "INITIAL") { + throw new ParsingError(ParsingError.Errors.BadSignature); + } + } catch (e) { + self.reportOrThrowError(e); + } + + self.onflush && self.onflush(); + return this; + } + }; + var vtt = WebVTT$1; + + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var autoKeyword = "auto"; + var directionSetting = { + "": 1, + "lr": 1, + "rl": 1 + }; + var alignSetting = { + "start": 1, + "center": 1, + "end": 1, + "left": 1, + "right": 1, + "auto": 1, + "line-left": 1, + "line-right": 1 + }; + + function findDirectionSetting(value) { + if (typeof value !== "string") { + return false; + } + + var dir = directionSetting[value.toLowerCase()]; + return dir ? value.toLowerCase() : false; + } + + function findAlignSetting(value) { + if (typeof value !== "string") { + return false; + } + + var align = alignSetting[value.toLowerCase()]; + return align ? value.toLowerCase() : false; + } + + function VTTCue(startTime, endTime, text) { + /** + * Shim implementation specific properties. These properties are not in + * the spec. + */ + // Lets us know when the VTTCue's data has changed in such a way that we need + // to recompute its display state. This lets us compute its display state + // lazily. + this.hasBeenReset = false; + /** + * VTTCue and TextTrackCue properties + * http://dev.w3.org/html5/webvtt/#vttcue-interface + */ + + var _id = ""; + var _pauseOnExit = false; + var _startTime = startTime; + var _endTime = endTime; + var _text = text; + var _region = null; + var _vertical = ""; + var _snapToLines = true; + var _line = "auto"; + var _lineAlign = "start"; + var _position = "auto"; + var _positionAlign = "auto"; + var _size = 100; + var _align = "center"; + Object.defineProperties(this, { + "id": { + enumerable: true, + get: function get() { + return _id; + }, + set: function set(value) { + _id = "" + value; + } + }, + "pauseOnExit": { + enumerable: true, + get: function get() { + return _pauseOnExit; + }, + set: function set(value) { + _pauseOnExit = !!value; + } + }, + "startTime": { + enumerable: true, + get: function get() { + return _startTime; + }, + set: function set(value) { + if (typeof value !== "number") { + throw new TypeError("Start time must be set to a number."); + } + + _startTime = value; + this.hasBeenReset = true; + } + }, + "endTime": { + enumerable: true, + get: function get() { + return _endTime; + }, + set: function set(value) { + if (typeof value !== "number") { + throw new TypeError("End time must be set to a number."); + } + + _endTime = value; + this.hasBeenReset = true; + } + }, + "text": { + enumerable: true, + get: function get() { + return _text; + }, + set: function set(value) { + _text = "" + value; + this.hasBeenReset = true; + } + }, + "region": { + enumerable: true, + get: function get() { + return _region; + }, + set: function set(value) { + _region = value; + this.hasBeenReset = true; + } + }, + "vertical": { + enumerable: true, + get: function get() { + return _vertical; + }, + set: function set(value) { + var setting = findDirectionSetting(value); // Have to check for false because the setting an be an empty string. + + if (setting === false) { + throw new SyntaxError("Vertical: an invalid or illegal direction string was specified."); + } + + _vertical = setting; + this.hasBeenReset = true; + } + }, + "snapToLines": { + enumerable: true, + get: function get() { + return _snapToLines; + }, + set: function set(value) { + _snapToLines = !!value; + this.hasBeenReset = true; + } + }, + "line": { + enumerable: true, + get: function get() { + return _line; + }, + set: function set(value) { + if (typeof value !== "number" && value !== autoKeyword) { + throw new SyntaxError("Line: an invalid number or illegal string was specified."); + } + + _line = value; + this.hasBeenReset = true; + } + }, + "lineAlign": { + enumerable: true, + get: function get() { + return _lineAlign; + }, + set: function set(value) { + var setting = findAlignSetting(value); + + if (!setting) { + console.warn("lineAlign: an invalid or illegal string was specified."); + } else { + _lineAlign = setting; + this.hasBeenReset = true; + } + } + }, + "position": { + enumerable: true, + get: function get() { + return _position; + }, + set: function set(value) { + if (value < 0 || value > 100) { + throw new Error("Position must be between 0 and 100."); + } + + _position = value; + this.hasBeenReset = true; + } + }, + "positionAlign": { + enumerable: true, + get: function get() { + return _positionAlign; + }, + set: function set(value) { + var setting = findAlignSetting(value); + + if (!setting) { + console.warn("positionAlign: an invalid or illegal string was specified."); + } else { + _positionAlign = setting; + this.hasBeenReset = true; + } + } + }, + "size": { + enumerable: true, + get: function get() { + return _size; + }, + set: function set(value) { + if (value < 0 || value > 100) { + throw new Error("Size must be between 0 and 100."); + } + + _size = value; + this.hasBeenReset = true; + } + }, + "align": { + enumerable: true, + get: function get() { + return _align; + }, + set: function set(value) { + var setting = findAlignSetting(value); + + if (!setting) { + throw new SyntaxError("align: an invalid or illegal alignment string was specified."); + } + + _align = setting; + this.hasBeenReset = true; + } + } + }); + /** + * Other spec defined properties + */ + // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state + + this.displayState = undefined; + } + /** + * VTTCue methods + */ + + + VTTCue.prototype.getCueAsHTML = function () { + // Assume WebVTT.convertCueToDOMTree is on the global. + return WebVTT.convertCueToDOMTree(window, this.text); + }; + + var vttcue = VTTCue; + + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + var scrollSetting = { + "": true, + "up": true + }; + + function findScrollSetting(value) { + if (typeof value !== "string") { + return false; + } + + var scroll = scrollSetting[value.toLowerCase()]; + return scroll ? value.toLowerCase() : false; + } + + function isValidPercentValue(value) { + return typeof value === "number" && value >= 0 && value <= 100; + } // VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface + + + function VTTRegion() { + var _width = 100; + var _lines = 3; + var _regionAnchorX = 0; + var _regionAnchorY = 100; + var _viewportAnchorX = 0; + var _viewportAnchorY = 100; + var _scroll = ""; + Object.defineProperties(this, { + "width": { + enumerable: true, + get: function get() { + return _width; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("Width must be between 0 and 100."); + } + + _width = value; + } + }, + "lines": { + enumerable: true, + get: function get() { + return _lines; + }, + set: function set(value) { + if (typeof value !== "number") { + throw new TypeError("Lines must be set to a number."); + } + + _lines = value; + } + }, + "regionAnchorY": { + enumerable: true, + get: function get() { + return _regionAnchorY; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("RegionAnchorX must be between 0 and 100."); + } + + _regionAnchorY = value; + } + }, + "regionAnchorX": { + enumerable: true, + get: function get() { + return _regionAnchorX; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("RegionAnchorY must be between 0 and 100."); + } + + _regionAnchorX = value; + } + }, + "viewportAnchorY": { + enumerable: true, + get: function get() { + return _viewportAnchorY; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("ViewportAnchorY must be between 0 and 100."); + } + + _viewportAnchorY = value; + } + }, + "viewportAnchorX": { + enumerable: true, + get: function get() { + return _viewportAnchorX; + }, + set: function set(value) { + if (!isValidPercentValue(value)) { + throw new Error("ViewportAnchorX must be between 0 and 100."); + } + + _viewportAnchorX = value; + } + }, + "scroll": { + enumerable: true, + get: function get() { + return _scroll; + }, + set: function set(value) { + var setting = findScrollSetting(value); // Have to check for false as an empty string is a legal value. + + if (setting === false) { + console.warn("Scroll: an invalid or illegal string was specified."); + } else { + _scroll = setting; + } + } + } + }); + } + + var vttregion = VTTRegion; + + var browserIndex = createCommonjsModule(function (module) { + /** + * Copyright 2013 vtt.js Contributors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + // Default exports for Node. Export the extended versions of VTTCue and + // VTTRegion in Node since we likely want the capability to convert back and + // forth between JSON. If we don't then it's not that big of a deal since we're + // off browser. + var vttjs = module.exports = { + WebVTT: vtt, + VTTCue: vttcue, + VTTRegion: vttregion + }; + window_1.vttjs = vttjs; + window_1.WebVTT = vttjs.WebVTT; + var cueShim = vttjs.VTTCue; + var regionShim = vttjs.VTTRegion; + var nativeVTTCue = window_1.VTTCue; + var nativeVTTRegion = window_1.VTTRegion; + + vttjs.shim = function () { + window_1.VTTCue = cueShim; + window_1.VTTRegion = regionShim; + }; + + vttjs.restore = function () { + window_1.VTTCue = nativeVTTCue; + window_1.VTTRegion = nativeVTTRegion; + }; + + if (!window_1.VTTCue) { + vttjs.shim(); + } + }); + browserIndex.WebVTT; + browserIndex.VTTCue; + browserIndex.VTTRegion; + + /** + * An Object containing a structure like: `{src: 'url', type: 'mimetype'}` or string + * that just contains the src url alone. + * * `var SourceObject = {src: 'http://ex.com/video.mp4', type: 'video/mp4'};` + * `var SourceString = 'http://example.com/some-video.mp4';` + * + * @typedef {Object|string} Tech~SourceObject + * + * @property {string} src + * The url to the source + * + * @property {string} type + * The mime type of the source + */ + + /** + * A function used by {@link Tech} to create a new {@link TextTrack}. + * + * @private + * + * @param {Tech} self + * An instance of the Tech class. + * + * @param {string} kind + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata) + * + * @param {string} [label] + * Label to identify the text track + * + * @param {string} [language] + * Two letter language abbreviation + * + * @param {Object} [options={}] + * An object with additional text track options + * + * @return {TextTrack} + * The text track that was created. + */ + + function createTrackHelper(self, kind, label, language, options) { + if (options === void 0) { + options = {}; + } + + var tracks = self.textTracks(); + options.kind = kind; + + if (label) { + options.label = label; + } + + if (language) { + options.language = language; + } + + options.tech = self; + var track = new ALL.text.TrackClass(options); + tracks.addTrack(track); + return track; + } + /** + * This is the base class for media playback technology controllers, such as + * {@link HTML5} + * + * @extends Component + */ + + + var Tech = /*#__PURE__*/function (_Component) { + inheritsLoose(Tech, _Component); + + /** + * Create an instance of this Tech. + * + * @param {Object} [options] + * The key/value store of player options. + * + * @param {Component~ReadyCallback} ready + * Callback function to call when the `HTML5` Tech is ready. + */ + function Tech(options, ready) { + var _this; + + if (options === void 0) { + options = {}; + } + + if (ready === void 0) { + ready = function ready() {}; + } + + // we don't want the tech to report user activity automatically. + // This is done manually in addControlsListeners + options.reportTouchActivity = false; + _this = _Component.call(this, null, options, ready) || this; + + _this.onDurationChange_ = function (e) { + return _this.onDurationChange(e); + }; + + _this.trackProgress_ = function (e) { + return _this.trackProgress(e); + }; + + _this.trackCurrentTime_ = function (e) { + return _this.trackCurrentTime(e); + }; + + _this.stopTrackingCurrentTime_ = function (e) { + return _this.stopTrackingCurrentTime(e); + }; + + _this.disposeSourceHandler_ = function (e) { + return _this.disposeSourceHandler(e); + }; // keep track of whether the current source has played at all to + // implement a very limited played() + + + _this.hasStarted_ = false; + + _this.on('playing', function () { + this.hasStarted_ = true; + }); + + _this.on('loadstart', function () { + this.hasStarted_ = false; + }); + + ALL.names.forEach(function (name) { + var props = ALL[name]; + + if (options && options[props.getterName]) { + _this[props.privateName] = options[props.getterName]; + } + }); // Manually track progress in cases where the browser/tech doesn't report it. + + if (!_this.featuresProgressEvents) { + _this.manualProgressOn(); + } // Manually track timeupdates in cases where the browser/tech doesn't report it. + + + if (!_this.featuresTimeupdateEvents) { + _this.manualTimeUpdatesOn(); + } + + ['Text', 'Audio', 'Video'].forEach(function (track) { + if (options["native" + track + "Tracks"] === false) { + _this["featuresNative" + track + "Tracks"] = false; + } + }); + + if (options.nativeCaptions === false || options.nativeTextTracks === false) { + _this.featuresNativeTextTracks = false; + } else if (options.nativeCaptions === true || options.nativeTextTracks === true) { + _this.featuresNativeTextTracks = true; + } + + if (!_this.featuresNativeTextTracks) { + _this.emulateTextTracks(); + } + + _this.preloadTextTracks = options.preloadTextTracks !== false; + _this.autoRemoteTextTracks_ = new ALL.text.ListClass(); + + _this.initTrackListeners(); // Turn on component tap events only if not using native controls + + + if (!options.nativeControlsForTouch) { + _this.emitTapEvents(); + } + + if (_this.constructor) { + _this.name_ = _this.constructor.name || 'Unknown Tech'; + } + + return _this; + } + /** + * A special function to trigger source set in a way that will allow player + * to re-trigger if the player or tech are not ready yet. + * + * @fires Tech#sourceset + * @param {string} src The source string at the time of the source changing. + */ + + + var _proto = Tech.prototype; + + _proto.triggerSourceset = function triggerSourceset(src) { + var _this2 = this; + + if (!this.isReady_) { + // on initial ready we have to trigger source set + // 1ms after ready so that player can watch for it. + this.one('ready', function () { + return _this2.setTimeout(function () { + return _this2.triggerSourceset(src); + }, 1); + }); + } + /** + * Fired when the source is set on the tech causing the media element + * to reload. + * + * @see {@link Player#event:sourceset} + * @event Tech#sourceset + * @type {EventTarget~Event} + */ + + + this.trigger({ + src: src, + type: 'sourceset' + }); + } + /* Fallbacks for unsupported event types + ================================================================================ */ + + /** + * Polyfill the `progress` event for browsers that don't support it natively. + * + * @see {@link Tech#trackProgress} + */ + ; + + _proto.manualProgressOn = function manualProgressOn() { + this.on('durationchange', this.onDurationChange_); + this.manualProgress = true; // Trigger progress watching when a source begins loading + + this.one('ready', this.trackProgress_); + } + /** + * Turn off the polyfill for `progress` events that was created in + * {@link Tech#manualProgressOn} + */ + ; + + _proto.manualProgressOff = function manualProgressOff() { + this.manualProgress = false; + this.stopTrackingProgress(); + this.off('durationchange', this.onDurationChange_); + } + /** + * This is used to trigger a `progress` event when the buffered percent changes. It + * sets an interval function that will be called every 500 milliseconds to check if the + * buffer end percent has changed. + * + * > This function is called by {@link Tech#manualProgressOn} + * + * @param {EventTarget~Event} event + * The `ready` event that caused this to run. + * + * @listens Tech#ready + * @fires Tech#progress + */ + ; + + _proto.trackProgress = function trackProgress(event) { + this.stopTrackingProgress(); + this.progressInterval = this.setInterval(bind(this, function () { + // Don't trigger unless buffered amount is greater than last time + var numBufferedPercent = this.bufferedPercent(); + + if (this.bufferedPercent_ !== numBufferedPercent) { + /** + * See {@link Player#progress} + * + * @event Tech#progress + * @type {EventTarget~Event} + */ + this.trigger('progress'); + } + + this.bufferedPercent_ = numBufferedPercent; + + if (numBufferedPercent === 1) { + this.stopTrackingProgress(); + } + }), 500); + } + /** + * Update our internal duration on a `durationchange` event by calling + * {@link Tech#duration}. + * + * @param {EventTarget~Event} event + * The `durationchange` event that caused this to run. + * + * @listens Tech#durationchange + */ + ; + + _proto.onDurationChange = function onDurationChange(event) { + this.duration_ = this.duration(); + } + /** + * Get and create a `TimeRange` object for buffering. + * + * @return {TimeRange} + * The time range object that was created. + */ + ; + + _proto.buffered = function buffered() { + return createTimeRanges(0, 0); + } + /** + * Get the percentage of the current video that is currently buffered. + * + * @return {number} + * A number from 0 to 1 that represents the decimal percentage of the + * video that is buffered. + * + */ + ; + + _proto.bufferedPercent = function bufferedPercent$1() { + return bufferedPercent(this.buffered(), this.duration_); + } + /** + * Turn off the polyfill for `progress` events that was created in + * {@link Tech#manualProgressOn} + * Stop manually tracking progress events by clearing the interval that was set in + * {@link Tech#trackProgress}. + */ + ; + + _proto.stopTrackingProgress = function stopTrackingProgress() { + this.clearInterval(this.progressInterval); + } + /** + * Polyfill the `timeupdate` event for browsers that don't support it. + * + * @see {@link Tech#trackCurrentTime} + */ + ; + + _proto.manualTimeUpdatesOn = function manualTimeUpdatesOn() { + this.manualTimeUpdates = true; + this.on('play', this.trackCurrentTime_); + this.on('pause', this.stopTrackingCurrentTime_); + } + /** + * Turn off the polyfill for `timeupdate` events that was created in + * {@link Tech#manualTimeUpdatesOn} + */ + ; + + _proto.manualTimeUpdatesOff = function manualTimeUpdatesOff() { + this.manualTimeUpdates = false; + this.stopTrackingCurrentTime(); + this.off('play', this.trackCurrentTime_); + this.off('pause', this.stopTrackingCurrentTime_); + } + /** + * Sets up an interval function to track current time and trigger `timeupdate` every + * 250 milliseconds. + * + * @listens Tech#play + * @triggers Tech#timeupdate + */ + ; + + _proto.trackCurrentTime = function trackCurrentTime() { + if (this.currentTimeInterval) { + this.stopTrackingCurrentTime(); + } + + this.currentTimeInterval = this.setInterval(function () { + /** + * Triggered at an interval of 250ms to indicated that time is passing in the video. + * + * @event Tech#timeupdate + * @type {EventTarget~Event} + */ + this.trigger({ + type: 'timeupdate', + target: this, + manuallyTriggered: true + }); // 42 = 24 fps // 250 is what Webkit uses // FF uses 15 + }, 250); + } + /** + * Stop the interval function created in {@link Tech#trackCurrentTime} so that the + * `timeupdate` event is no longer triggered. + * + * @listens {Tech#pause} + */ + ; + + _proto.stopTrackingCurrentTime = function stopTrackingCurrentTime() { + this.clearInterval(this.currentTimeInterval); // #1002 - if the video ends right before the next timeupdate would happen, + // the progress bar won't make it all the way to the end + + this.trigger({ + type: 'timeupdate', + target: this, + manuallyTriggered: true + }); + } + /** + * Turn off all event polyfills, clear the `Tech`s {@link AudioTrackList}, + * {@link VideoTrackList}, and {@link TextTrackList}, and dispose of this Tech. + * + * @fires Component#dispose + */ + ; + + _proto.dispose = function dispose() { + // clear out all tracks because we can't reuse them between techs + this.clearTracks(NORMAL.names); // Turn off any manual progress or timeupdate tracking + + if (this.manualProgress) { + this.manualProgressOff(); + } + + if (this.manualTimeUpdates) { + this.manualTimeUpdatesOff(); + } + + _Component.prototype.dispose.call(this); + } + /** + * Clear out a single `TrackList` or an array of `TrackLists` given their names. + * + * > Note: Techs without source handlers should call this between sources for `video` + * & `audio` tracks. You don't want to use them between tracks! + * + * @param {string[]|string} types + * TrackList names to clear, valid names are `video`, `audio`, and + * `text`. + */ + ; + + _proto.clearTracks = function clearTracks(types) { + var _this3 = this; + + types = [].concat(types); // clear out all tracks because we can't reuse them between techs + + types.forEach(function (type) { + var list = _this3[type + "Tracks"]() || []; + var i = list.length; + + while (i--) { + var track = list[i]; + + if (type === 'text') { + _this3.removeRemoteTextTrack(track); + } + + list.removeTrack(track); + } + }); + } + /** + * Remove any TextTracks added via addRemoteTextTrack that are + * flagged for automatic garbage collection + */ + ; + + _proto.cleanupAutoTextTracks = function cleanupAutoTextTracks() { + var list = this.autoRemoteTextTracks_ || []; + var i = list.length; + + while (i--) { + var track = list[i]; + this.removeRemoteTextTrack(track); + } + } + /** + * Reset the tech, which will removes all sources and reset the internal readyState. + * + * @abstract + */ + ; + + _proto.reset = function reset() {} + /** + * Get the value of `crossOrigin` from the tech. + * + * @abstract + * + * @see {Html5#crossOrigin} + */ + ; + + _proto.crossOrigin = function crossOrigin() {} + /** + * Set the value of `crossOrigin` on the tech. + * + * @abstract + * + * @param {string} crossOrigin the crossOrigin value + * @see {Html5#setCrossOrigin} + */ + ; + + _proto.setCrossOrigin = function setCrossOrigin() {} + /** + * Get or set an error on the Tech. + * + * @param {MediaError} [err] + * Error to set on the Tech + * + * @return {MediaError|null} + * The current error object on the tech, or null if there isn't one. + */ + ; + + _proto.error = function error(err) { + if (err !== undefined) { + this.error_ = new MediaError(err); + this.trigger('error'); + } + + return this.error_; + } + /** + * Returns the `TimeRange`s that have been played through for the current source. + * + * > NOTE: This implementation is incomplete. It does not track the played `TimeRange`. + * It only checks whether the source has played at all or not. + * + * @return {TimeRange} + * - A single time range if this video has played + * - An empty set of ranges if not. + */ + ; + + _proto.played = function played() { + if (this.hasStarted_) { + return createTimeRanges(0, 0); + } + + return createTimeRanges(); + } + /** + * Start playback + * + * @abstract + * + * @see {Html5#play} + */ + ; + + _proto.play = function play() {} + /** + * Set whether we are scrubbing or not + * + * @abstract + * + * @see {Html5#setScrubbing} + */ + ; + + _proto.setScrubbing = function setScrubbing() {} + /** + * Get whether we are scrubbing or not + * + * @abstract + * + * @see {Html5#scrubbing} + */ + ; + + _proto.scrubbing = function scrubbing() {} + /** + * Causes a manual time update to occur if {@link Tech#manualTimeUpdatesOn} was + * previously called. + * + * @fires Tech#timeupdate + */ + ; + + _proto.setCurrentTime = function setCurrentTime() { + // improve the accuracy of manual timeupdates + if (this.manualTimeUpdates) { + /** + * A manual `timeupdate` event. + * + * @event Tech#timeupdate + * @type {EventTarget~Event} + */ + this.trigger({ + type: 'timeupdate', + target: this, + manuallyTriggered: true + }); + } + } + /** + * Turn on listeners for {@link VideoTrackList}, {@link {AudioTrackList}, and + * {@link TextTrackList} events. + * + * This adds {@link EventTarget~EventListeners} for `addtrack`, and `removetrack`. + * + * @fires Tech#audiotrackchange + * @fires Tech#videotrackchange + * @fires Tech#texttrackchange + */ + ; + + _proto.initTrackListeners = function initTrackListeners() { + var _this4 = this; + + /** + * Triggered when tracks are added or removed on the Tech {@link AudioTrackList} + * + * @event Tech#audiotrackchange + * @type {EventTarget~Event} + */ + + /** + * Triggered when tracks are added or removed on the Tech {@link VideoTrackList} + * + * @event Tech#videotrackchange + * @type {EventTarget~Event} + */ + + /** + * Triggered when tracks are added or removed on the Tech {@link TextTrackList} + * + * @event Tech#texttrackchange + * @type {EventTarget~Event} + */ + NORMAL.names.forEach(function (name) { + var props = NORMAL[name]; + + var trackListChanges = function trackListChanges() { + _this4.trigger(name + "trackchange"); + }; + + var tracks = _this4[props.getterName](); + + tracks.addEventListener('removetrack', trackListChanges); + tracks.addEventListener('addtrack', trackListChanges); + + _this4.on('dispose', function () { + tracks.removeEventListener('removetrack', trackListChanges); + tracks.removeEventListener('addtrack', trackListChanges); + }); + }); + } + /** + * Emulate TextTracks using vtt.js if necessary + * + * @fires Tech#vttjsloaded + * @fires Tech#vttjserror + */ + ; + + _proto.addWebVttScript_ = function addWebVttScript_() { + var _this5 = this; + + if (window_1.WebVTT) { + return; + } // Initially, Tech.el_ is a child of a dummy-div wait until the Component system + // signals that the Tech is ready at which point Tech.el_ is part of the DOM + // before inserting the WebVTT script + + + if (document_1.body.contains(this.el())) { + // load via require if available and vtt.js script location was not passed in + // as an option. novtt builds will turn the above require call into an empty object + // which will cause this if check to always fail. + if (!this.options_['vtt.js'] && isPlain(browserIndex) && Object.keys(browserIndex).length > 0) { + this.trigger('vttjsloaded'); + return; + } // load vtt.js via the script location option or the cdn of no location was + // passed in + + + var script = document_1.createElement('script'); + script.src = this.options_['vtt.js'] || 'https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js'; + + script.onload = function () { + /** + * Fired when vtt.js is loaded. + * + * @event Tech#vttjsloaded + * @type {EventTarget~Event} + */ + _this5.trigger('vttjsloaded'); + }; + + script.onerror = function () { + /** + * Fired when vtt.js was not loaded due to an error + * + * @event Tech#vttjsloaded + * @type {EventTarget~Event} + */ + _this5.trigger('vttjserror'); + }; + + this.on('dispose', function () { + script.onload = null; + script.onerror = null; + }); // but have not loaded yet and we set it to true before the inject so that + // we don't overwrite the injected window.WebVTT if it loads right away + + window_1.WebVTT = true; + this.el().parentNode.appendChild(script); + } else { + this.ready(this.addWebVttScript_); + } + } + /** + * Emulate texttracks + * + */ + ; + + _proto.emulateTextTracks = function emulateTextTracks() { + var _this6 = this; + + var tracks = this.textTracks(); + var remoteTracks = this.remoteTextTracks(); + + var handleAddTrack = function handleAddTrack(e) { + return tracks.addTrack(e.track); + }; + + var handleRemoveTrack = function handleRemoveTrack(e) { + return tracks.removeTrack(e.track); + }; + + remoteTracks.on('addtrack', handleAddTrack); + remoteTracks.on('removetrack', handleRemoveTrack); + this.addWebVttScript_(); + + var updateDisplay = function updateDisplay() { + return _this6.trigger('texttrackchange'); + }; + + var textTracksChanges = function textTracksChanges() { + updateDisplay(); + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + track.removeEventListener('cuechange', updateDisplay); + + if (track.mode === 'showing') { + track.addEventListener('cuechange', updateDisplay); + } + } + }; + + textTracksChanges(); + tracks.addEventListener('change', textTracksChanges); + tracks.addEventListener('addtrack', textTracksChanges); + tracks.addEventListener('removetrack', textTracksChanges); + this.on('dispose', function () { + remoteTracks.off('addtrack', handleAddTrack); + remoteTracks.off('removetrack', handleRemoveTrack); + tracks.removeEventListener('change', textTracksChanges); + tracks.removeEventListener('addtrack', textTracksChanges); + tracks.removeEventListener('removetrack', textTracksChanges); + + for (var i = 0; i < tracks.length; i++) { + var track = tracks[i]; + track.removeEventListener('cuechange', updateDisplay); + } + }); + } + /** + * Create and returns a remote {@link TextTrack} object. + * + * @param {string} kind + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata) + * + * @param {string} [label] + * Label to identify the text track + * + * @param {string} [language] + * Two letter language abbreviation + * + * @return {TextTrack} + * The TextTrack that gets created. + */ + ; + + _proto.addTextTrack = function addTextTrack(kind, label, language) { + if (!kind) { + throw new Error('TextTrack kind is required but was not provided'); + } + + return createTrackHelper(this, kind, label, language); + } + /** + * Create an emulated TextTrack for use by addRemoteTextTrack + * + * This is intended to be overridden by classes that inherit from + * Tech in order to create native or custom TextTracks. + * + * @param {Object} options + * The object should contain the options to initialize the TextTrack with. + * + * @param {string} [options.kind] + * `TextTrack` kind (subtitles, captions, descriptions, chapters, or metadata). + * + * @param {string} [options.label]. + * Label to identify the text track + * + * @param {string} [options.language] + * Two letter language abbreviation. + * + * @return {HTMLTrackElement} + * The track element that gets created. + */ + ; + + _proto.createRemoteTextTrack = function createRemoteTextTrack(options) { + var track = mergeOptions(options, { + tech: this + }); + return new REMOTE.remoteTextEl.TrackClass(track); + } + /** + * Creates a remote text track object and returns an html track element. + * + * > Note: This can be an emulated {@link HTMLTrackElement} or a native one. + * + * @param {Object} options + * See {@link Tech#createRemoteTextTrack} for more detailed properties. + * + * @param {boolean} [manualCleanup=true] + * - When false: the TextTrack will be automatically removed from the video + * element whenever the source changes + * - When True: The TextTrack will have to be cleaned up manually + * + * @return {HTMLTrackElement} + * An Html Track Element. + * + * @deprecated The default functionality for this function will be equivalent + * to "manualCleanup=false" in the future. The manualCleanup parameter will + * also be removed. + */ + ; + + _proto.addRemoteTextTrack = function addRemoteTextTrack(options, manualCleanup) { + var _this7 = this; + + if (options === void 0) { + options = {}; + } + + var htmlTrackElement = this.createRemoteTextTrack(options); + + if (manualCleanup !== true && manualCleanup !== false) { + // deprecation warning + log.warn('Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js'); + manualCleanup = true; + } // store HTMLTrackElement and TextTrack to remote list + + + this.remoteTextTrackEls().addTrackElement_(htmlTrackElement); + this.remoteTextTracks().addTrack(htmlTrackElement.track); + + if (manualCleanup !== true) { + // create the TextTrackList if it doesn't exist + this.ready(function () { + return _this7.autoRemoteTextTracks_.addTrack(htmlTrackElement.track); + }); + } + + return htmlTrackElement; + } + /** + * Remove a remote text track from the remote `TextTrackList`. + * + * @param {TextTrack} track + * `TextTrack` to remove from the `TextTrackList` + */ + ; + + _proto.removeRemoteTextTrack = function removeRemoteTextTrack(track) { + var trackElement = this.remoteTextTrackEls().getTrackElementByTrack_(track); // remove HTMLTrackElement and TextTrack from remote list + + this.remoteTextTrackEls().removeTrackElement_(trackElement); + this.remoteTextTracks().removeTrack(track); + this.autoRemoteTextTracks_.removeTrack(track); + } + /** + * Gets available media playback quality metrics as specified by the W3C's Media + * Playback Quality API. + * + * @see [Spec]{@link https://wicg.github.io/media-playback-quality} + * + * @return {Object} + * An object with supported media playback quality metrics + * + * @abstract + */ + ; + + _proto.getVideoPlaybackQuality = function getVideoPlaybackQuality() { + return {}; + } + /** + * Attempt to create a floating video window always on top of other windows + * so that users may continue consuming media while they interact with other + * content sites, or applications on their device. + * + * @see [Spec]{@link https://wicg.github.io/picture-in-picture} + * + * @return {Promise|undefined} + * A promise with a Picture-in-Picture window if the browser supports + * Promises (or one was passed in as an option). It returns undefined + * otherwise. + * + * @abstract + */ + ; + + _proto.requestPictureInPicture = function requestPictureInPicture() { + var PromiseClass = this.options_.Promise || window_1.Promise; + + if (PromiseClass) { + return PromiseClass.reject(); + } + } + /** + * A method to check for the value of the 'disablePictureInPicture'