aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--demo/dist/demo.js4
-rw-r--r--demo/dist/demo.js.map2
-rw-r--r--demo/dist/demo.min.js2
-rw-r--r--demo/dist/demo.min.js.map2
-rw-r--r--demo/src/js/demo.js4
-rw-r--r--dist/plyr.js30
-rw-r--r--dist/plyr.js.map2
-rw-r--r--dist/plyr.min.js2
-rw-r--r--dist/plyr.min.js.map2
-rw-r--r--dist/plyr.polyfilled.js2679
-rw-r--r--dist/plyr.polyfilled.js.map2
-rw-r--r--dist/plyr.polyfilled.min.js2
-rw-r--r--dist/plyr.polyfilled.min.js.map2
-rw-r--r--package.json6
-rw-r--r--readme.md2
-rw-r--r--src/js/controls.js53
16 files changed, 1768 insertions, 1028 deletions
diff --git a/demo/dist/demo.js b/demo/dist/demo.js
index 6044fdb0..97c934f0 100644
--- a/demo/dist/demo.js
+++ b/demo/dist/demo.js
@@ -41,7 +41,7 @@ document.addEventListener('DOMContentLoaded', function () {
var player = new Plyr('#player', {
debug: true,
title: 'View From A Blue Moon',
- // iconUrl: '../dist/plyr.svg',
+ iconUrl: '../dist/plyr.svg',
keyboard: {
global: true
},
@@ -231,7 +231,7 @@ if (window.location.host === 'plyr.io') {
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
- })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
+ })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
window.ga('create', 'UA-40881672-11', 'auto');
window.ga('send', 'pageview');
}
diff --git a/demo/dist/demo.js.map b/demo/dist/demo.js.map
index 91ce14ef..b447a70b 100644
--- a/demo/dist/demo.js.map
+++ b/demo/dist/demo.js.map
@@ -1 +1 @@
-{"version":3,"sources":["demo/src/js/demo.js"],"names":["document","addEventListener","window","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n // iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
+{"version":3,"sources":["demo/src/js/demo.js"],"names":["document","addEventListener","window","shr","setup","tabClassName","target","classList","remove","event","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","setAttribute","removeAttribute","getAttribute","replaceState","host","i","s","o","g","r","a","m","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"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","file":"demo.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
diff --git a/demo/dist/demo.min.js b/demo/dist/demo.min.js
index 5e342750..112a6146 100644
--- a/demo/dist/demo.min.js
+++ b/demo/dist/demo.min.js
@@ -1,2 +1,2 @@
-!function(){"use strict";var e,t,o,i,r,a;document.addEventListener("DOMContentLoaded",function(){window.shr&&window.shr.setup({count:{classname:"button__count"}});document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0}});window.player=e;var t=document.querySelectorAll("[data-source]"),o={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},i=window.location.hash.replace("#",""),r=window.history&&window.history.pushState;function a(e,t,o){e&&e.classList[o?"add":"remove"](t)}function n(r,n){if(r in o&&(n||r!==i)&&(i.length||r!==o.video)){switch(r){case o.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case o.audio:e.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case o.youtube:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case o.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}i=r,Array.from(t).forEach(function(e){return a(e.parentElement,"active",!1)}),a(document.querySelector('[data-source="'+r+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+r).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");n(t),r&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&n(e.state.type)}),r){var s=!i.length;s&&(i=o.video),i in o&&window.history.replaceState({type:i},"",s?"":"#"+i),i!==o.video&&n(i,!0)}}),"plyr.io"===window.location.host&&(e=window,t=document,o="script",i="ga",e.GoogleAnalyticsObject=i,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,r=t.createElement(o),a=t.getElementsByTagName(o)[0],r.async=1,r.src="//www.google-analytics.com/analytics.js",a.parentNode.insertBefore(r,a),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
+!function(){"use strict";var e,t,o,i,r,a;document.addEventListener("DOMContentLoaded",function(){window.shr&&window.shr.setup({count:{classname:"button__count"}});document.addEventListener("focusout",function(e){e.target.classList.remove("tab-focus")}),document.addEventListener("keydown",function(e){9===e.keyCode&&setTimeout(function(){document.activeElement.classList.add("tab-focus")},0)});var e=new Plyr("#player",{debug:!0,title:"View From A Blue Moon",iconUrl:"../dist/plyr.svg",keyboard:{global:!0},tooltips:{controls:!0},captions:{active:!0},keys:{google:"AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c"},ads:{enabled:!0}});window.player=e;var t=document.querySelectorAll("[data-source]"),o={video:"video",audio:"audio",youtube:"youtube",vimeo:"vimeo"},i=window.location.hash.replace("#",""),r=window.history&&window.history.pushState;function a(e,t,o){e&&e.classList[o?"add":"remove"](t)}function n(r,n){if(r in o&&(n||r!==i)&&(i.length||r!==o.video)){switch(r){case o.video:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4",type:"video/mp4"}],poster:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg",tracks:[{kind:"captions",label:"English",srclang:"en",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt",default:!0},{kind:"captions",label:"French",srclang:"fr",src:"https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt"}]};break;case o.audio:e.source={type:"audio",title:"Kishi Bashi – “It All Began With A Burst”",sources:[{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3",type:"audio/mp3"},{src:"https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg",type:"audio/ogg"}]};break;case o.youtube:e.source={type:"video",title:"View From A Blue Moon",sources:[{src:"https://youtube.com/watch?v=bTqVqk7FSmY",provider:"youtube"}]};break;case o.vimeo:e.source={type:"video",sources:[{src:"https://vimeo.com/76979871",provider:"vimeo"}]}}i=r,Array.from(t).forEach(function(e){return a(e.parentElement,"active",!1)}),a(document.querySelector('[data-source="'+r+'"]'),"active",!0),Array.from(document.querySelectorAll(".plyr__cite")).forEach(function(e){e.setAttribute("hidden","")}),document.querySelector(".plyr__cite--"+r).removeAttribute("hidden")}}if(Array.from(t).forEach(function(e){e.addEventListener("click",function(){var t=e.getAttribute("data-source");n(t),r&&window.history.pushState({type:t},"","#"+t)})}),window.addEventListener("popstate",function(e){e.state&&"type"in e.state&&n(e.state.type)}),r){var s=!i.length;s&&(i=o.video),i in o&&window.history.replaceState({type:i},"",s?"":"#"+i),i!==o.video&&n(i,!0)}}),"plyr.io"===window.location.host&&(e=window,t=document,o="script",i="ga",e.GoogleAnalyticsObject=i,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,r=t.createElement(o),a=t.getElementsByTagName(o)[0],r.async=1,r.src="https://www.google-analytics.com/analytics.js",a.parentNode.insertBefore(r,a),window.ga("create","UA-40881672-11","auto"),window.ga("send","pageview"))}();
//# sourceMappingURL=demo.min.js.map
diff --git a/demo/dist/demo.min.js.map b/demo/dist/demo.min.js.map
index 0dd5a179..524632d3 100644
--- a/demo/dist/demo.min.js.map
+++ b/demo/dist/demo.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["demo/src/js/demo.js"],"names":["i","s","o","r","a","m","document","addEventListener","window","shr","setup","event","target","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","cite","setAttribute","removeAttribute","getAttribute","replaceState","host","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"6BAmOcA,EAAGC,EAAGC,EAAMC,EAAGC,EAAGC,EA7NhCC,SAASC,iBAAiB,mBAAoB,WACtCC,OAAOC,YACAA,IAAIC,wBAEQ,4BASdH,iBAAiB,WAAY,SAAAI,KAC5BC,OAAOC,UAAUC,OAJN,wBAQZP,iBAAiB,UAAW,SAAAI,GACX,IAAlBA,EAAMI,oBAMC,oBACEC,cAAcH,UAAUI,IAhBpB,cAiBd,SAIDC,EAAS,IAAIC,KAAK,kBACb,QACA,0CAGK,uBAGE,qBAGF,gBAGA,yDAGC,YAKVD,OAASA,MAGVE,EAAUd,SAASe,iBAAiB,iBACpCC,SACK,cACA,gBACE,gBACF,SAEPC,EAAcf,OAAOgB,SAASC,KAAKC,QAAQ,IAAK,IAC9CC,EAAiBnB,OAAOoB,SAAWpB,OAAOoB,QAAQC,mBAG/CC,EAAYC,EAASC,EAAWC,GACjCF,KACQlB,UAAUoB,EAAQ,MAAQ,UAAUD,YAK3CE,EAAUC,EAAMC,MAEfD,KAAQb,IAAYc,GAAQD,IAASZ,KAAkBA,EAAYc,QAAUF,IAASb,EAAMgB,eAI1FH,QACCb,EAAMgB,QACAC,aACG,cACC,sCAEE,4EACC,qBAEF,qFAGM,iBACC,kBACE,SACJ,mFACI,SAGH,iBACC,iBACE,SACJ,wFAOhBjB,EAAMkB,QACAD,aACG,cACC,4EAGM,mFACC,kBAGD,mFACC,0BAOjBjB,EAAMmB,UACAF,aACG,cACC,sCAEE,mDACK,wBAMjBjB,EAAMoB,QACAH,aACG,sBAEG,sCACK,aAWZJ,QAGRQ,KAAKvB,GAASwB,QAAQ,SAAAC,UAAUf,EAAYe,EAAOC,cAAe,UAAU,OAGtExC,SAASyC,cAAT,iBAAwCZ,EAAxC,MAAmD,UAAU,SAGnEQ,KAAKrC,SAASe,iBAAiB,gBAAgBuB,QAAQ,SAAAI,KACpDC,aAAa,SAAU,eAEvBF,cAAT,gBAAuCZ,GAAQe,gBAAgB,oBAI7DP,KAAKvB,GAASwB,QAAQ,SAAAC,KACjBtC,iBAAiB,QAAS,eACvB4B,EAAOU,EAAOM,aAAa,iBAEvBhB,GAENR,UACOC,QAAQC,WAAYM,KAAAA,GAAQ,GAAnC,IAA2CA,cAMhD5B,iBAAiB,WAAY,SAAAI,GAC5BA,EAAMsB,OAAS,SAAUtB,EAAMsB,SACrBtB,EAAMsB,MAAME,QAK1BR,EAAgB,KACVW,GAASf,EAAYc,OAGvBC,MACchB,EAAMgB,OAIpBf,KAAeD,UACRM,QAAQwB,mBAED7B,GAEV,GACAe,EAAQ,GAAR,IAAiBf,GAKrBA,IAAgBD,EAAMgB,SACZf,GAAa,MAQN,YAAzBf,OAAOgB,SAAS6B,OACNrD,EAaPQ,OAbUP,EAaFK,SAbKJ,EAaK,SAbCC,EAaoD,OAZpEmD,sBAAwBnD,IAC1B,GACIH,EAAA,IACA,YACKA,EAAA,GAAKuD,EAAIvD,EAAA,GAAKuD,OAASC,KAAKC,cAErC,GAAKC,EAAI,EAAI,IAAIC,OACb1D,EAAE2D,cAAc1D,KAChBD,EAAE4D,qBAAqB3D,GAAG,KAC5B4D,MAAQ,IACRC,IAEyB,4CADzBC,WAAWC,aAAa7D,EAAGC,UAE1B6D,GAAG,SAAU,iBAAkB,eAC/BA,GAAG,OAAQ","file":"demo.min.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n // iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
+{"version":3,"sources":["demo/src/js/demo.js"],"names":["i","s","o","r","a","m","document","addEventListener","window","shr","setup","event","target","classList","remove","keyCode","activeElement","add","player","Plyr","buttons","querySelectorAll","types","currentType","location","hash","replace","historySupport","history","pushState","toggleClass","element","className","state","newSource","type","init","length","video","source","audio","youtube","vimeo","from","forEach","button","parentElement","querySelector","cite","setAttribute","removeAttribute","getAttribute","replaceState","host","GoogleAnalyticsObject","q","push","arguments","l","Date","createElement","getElementsByTagName","async","src","parentNode","insertBefore","ga"],"mappings":"6BAmOcA,EAAGC,EAAGC,EAAMC,EAAGC,EAAGC,EA7NhCC,SAASC,iBAAiB,mBAAoB,WACtCC,OAAOC,YACAA,IAAIC,wBAEQ,4BASdH,iBAAiB,WAAY,SAAAI,KAC5BC,OAAOC,UAAUC,OAJN,wBAQZP,iBAAiB,UAAW,SAAAI,GACX,IAAlBA,EAAMI,oBAMC,oBACEC,cAAcH,UAAUI,IAhBpB,cAiBd,SAIDC,EAAS,IAAIC,KAAK,kBACb,QACA,gCACE,qCAEG,uBAGE,qBAGF,gBAGA,yDAGC,YAKVD,OAASA,MAGVE,EAAUd,SAASe,iBAAiB,iBACpCC,SACK,cACA,gBACE,gBACF,SAEPC,EAAcf,OAAOgB,SAASC,KAAKC,QAAQ,IAAK,IAC9CC,EAAiBnB,OAAOoB,SAAWpB,OAAOoB,QAAQC,mBAG/CC,EAAYC,EAASC,EAAWC,GACjCF,KACQlB,UAAUoB,EAAQ,MAAQ,UAAUD,YAK3CE,EAAUC,EAAMC,MAEfD,KAAQb,IAAYc,GAAQD,IAASZ,KAAkBA,EAAYc,QAAUF,IAASb,EAAMgB,eAI1FH,QACCb,EAAMgB,QACAC,aACG,cACC,sCAEE,4EACC,qBAEF,qFAGM,iBACC,kBACE,SACJ,mFACI,SAGH,iBACC,iBACE,SACJ,wFAOhBjB,EAAMkB,QACAD,aACG,cACC,4EAGM,mFACC,kBAGD,mFACC,0BAOjBjB,EAAMmB,UACAF,aACG,cACC,sCAEE,mDACK,wBAMjBjB,EAAMoB,QACAH,aACG,sBAEG,sCACK,aAWZJ,QAGRQ,KAAKvB,GAASwB,QAAQ,SAAAC,UAAUf,EAAYe,EAAOC,cAAe,UAAU,OAGtExC,SAASyC,cAAT,iBAAwCZ,EAAxC,MAAmD,UAAU,SAGnEQ,KAAKrC,SAASe,iBAAiB,gBAAgBuB,QAAQ,SAAAI,KACpDC,aAAa,SAAU,eAEvBF,cAAT,gBAAuCZ,GAAQe,gBAAgB,oBAI7DP,KAAKvB,GAASwB,QAAQ,SAAAC,KACjBtC,iBAAiB,QAAS,eACvB4B,EAAOU,EAAOM,aAAa,iBAEvBhB,GAENR,UACOC,QAAQC,WAAYM,KAAAA,GAAQ,GAAnC,IAA2CA,cAMhD5B,iBAAiB,WAAY,SAAAI,GAC5BA,EAAMsB,OAAS,SAAUtB,EAAMsB,SACrBtB,EAAMsB,MAAME,QAK1BR,EAAgB,KACVW,GAASf,EAAYc,OAGvBC,MACchB,EAAMgB,OAIpBf,KAAeD,UACRM,QAAQwB,mBAED7B,GAEV,GACAe,EAAQ,GAAR,IAAiBf,GAKrBA,IAAgBD,EAAMgB,SACZf,GAAa,MAQN,YAAzBf,OAAOgB,SAAS6B,OACNrD,EAaPQ,OAbUP,EAaFK,SAbKJ,EAaK,SAbCC,EAa0D,OAZ1EmD,sBAAwBnD,IAC1B,GACIH,EAAA,IACA,YACKA,EAAA,GAAKuD,EAAIvD,EAAA,GAAKuD,OAASC,KAAKC,cAErC,GAAKC,EAAI,EAAI,IAAIC,OACb1D,EAAE2D,cAAc1D,KAChBD,EAAE4D,qBAAqB3D,GAAG,KAC5B4D,MAAQ,IACRC,IAEyB,kDADzBC,WAAWC,aAAa7D,EAAGC,UAE1B6D,GAAG,SAAU,iBAAkB,eAC/BA,GAAG,OAAQ","file":"demo.min.js","sourcesContent":["// ==========================================================================\n// Plyr.io demo\n// This code is purely for the https://plyr.io website\n// Please see readme.md in the root or github.com/sampotts/plyr\n// ==========================================================================\n\ndocument.addEventListener('DOMContentLoaded', () => {\n if (window.shr) {\n window.shr.setup({\n count: {\n classname: 'button__count',\n },\n });\n }\n\n // Setup tab focus\n const tabClassName = 'tab-focus';\n\n // Remove class on blur\n document.addEventListener('focusout', event => {\n event.target.classList.remove(tabClassName);\n });\n\n // Add classname to tabbed elements\n document.addEventListener('keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n document.activeElement.classList.add(tabClassName);\n }, 0);\n });\n\n // Setup the player\n const player = new Plyr('#player', {\n debug: true,\n title: 'View From A Blue Moon',\n iconUrl: '../dist/plyr.svg',\n keyboard: {\n global: true,\n },\n tooltips: {\n controls: true,\n },\n captions: {\n active: true,\n },\n keys: {\n google: 'AIzaSyDrNwtN3nLH_8rjCmu5Wq3ZCm4MNAVdc0c',\n },\n ads: {\n enabled: true,\n },\n });\n\n // Expose for tinkering in the console\n window.player = player;\n\n // Setup type toggle\n const buttons = document.querySelectorAll('[data-source]');\n const types = {\n video: 'video',\n audio: 'audio',\n youtube: 'youtube',\n vimeo: 'vimeo',\n };\n let currentType = window.location.hash.replace('#', '');\n const historySupport = window.history && window.history.pushState;\n\n // Toggle class on an element\n function toggleClass(element, className, state) {\n if (element) {\n element.classList[state ? 'add' : 'remove'](className);\n }\n }\n\n // Set a new source\n function newSource(type, init) {\n // Bail if new type isn't known, it's the current type, or current type is empty (video is default) and new type is video\n if (!(type in types) || (!init && type === currentType) || (!currentType.length && type === types.video)) {\n return;\n }\n\n switch (type) {\n case types.video:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4',\n type: 'video/mp4',\n }],\n poster: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg',\n tracks: [\n {\n kind: 'captions',\n label: 'English',\n srclang: 'en',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n default: true,\n },\n {\n kind: 'captions',\n label: 'French',\n srclang: 'fr',\n src: 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt',\n },\n ],\n };\n\n break;\n\n case types.audio:\n player.source = {\n type: 'audio',\n title: 'Kishi Bashi – “It All Began With A Burst”',\n sources: [\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.mp3',\n type: 'audio/mp3',\n },\n {\n src: 'https://cdn.plyr.io/static/demo/Kishi_Bashi_-_It_All_Began_With_a_Burst.ogg',\n type: 'audio/ogg',\n },\n ],\n };\n\n break;\n\n case types.youtube:\n player.source = {\n type: 'video',\n title: 'View From A Blue Moon',\n sources: [{\n src: 'https://youtube.com/watch?v=bTqVqk7FSmY',\n provider: 'youtube',\n }],\n };\n\n break;\n\n case types.vimeo:\n player.source = {\n type: 'video',\n sources: [{\n src: 'https://vimeo.com/76979871',\n provider: 'vimeo',\n }],\n };\n\n break;\n\n default:\n break;\n }\n\n // Set the current type for next time\n currentType = type;\n\n // Remove active classes\n Array.from(buttons).forEach(button => toggleClass(button.parentElement, 'active', false));\n\n // Set active on parent\n toggleClass(document.querySelector(`[data-source=\"${type}\"]`), 'active', true);\n\n // Show cite\n Array.from(document.querySelectorAll('.plyr__cite')).forEach(cite => {\n cite.setAttribute('hidden', '');\n });\n document.querySelector(`.plyr__cite--${type}`).removeAttribute('hidden');\n }\n\n // Bind to each button\n Array.from(buttons).forEach(button => {\n button.addEventListener('click', () => {\n const type = button.getAttribute('data-source');\n\n newSource(type);\n\n if (historySupport) {\n window.history.pushState({ type }, '', `#${type}`);\n }\n });\n });\n\n // List for backwards/forwards\n window.addEventListener('popstate', event => {\n if (event.state && 'type' in event.state) {\n newSource(event.state.type);\n }\n });\n\n // On load\n if (historySupport) {\n const video = !currentType.length;\n\n // If there's no current type set, assume video\n if (video) {\n currentType = types.video;\n }\n\n // Replace current history state\n if (currentType in types) {\n window.history.replaceState(\n {\n type: currentType,\n },\n '',\n video ? '' : `#${currentType}`,\n );\n }\n\n // If it's not video, load the source\n if (currentType !== types.video) {\n newSource(currentType, true);\n }\n }\n});\n\n// Google analytics\n// For demo site (https://plyr.io) only\n/* eslint-disable */\nif (window.location.host === 'plyr.io') {\n (function(i, s, o, g, r, a, m) {\n i.GoogleAnalyticsObject = r;\n i[r] =\n i[r] ||\n function() {\n (i[r].q = i[r].q || []).push(arguments);\n };\n i[r].l = 1 * new Date();\n a = s.createElement(o);\n m = s.getElementsByTagName(o)[0];\n a.async = 1;\n a.src = g;\n m.parentNode.insertBefore(a, m);\n })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');\n window.ga('create', 'UA-40881672-11', 'auto');\n window.ga('send', 'pageview');\n}\n/* eslint-enable */\n"]} \ No newline at end of file
diff --git a/demo/src/js/demo.js b/demo/src/js/demo.js
index 65b94bff..035f8f6d 100644
--- a/demo/src/js/demo.js
+++ b/demo/src/js/demo.js
@@ -38,7 +38,7 @@ document.addEventListener('DOMContentLoaded', () => {
const player = new Plyr('#player', {
debug: true,
title: 'View From A Blue Moon',
- // iconUrl: '../dist/plyr.svg',
+ iconUrl: '../dist/plyr.svg',
keyboard: {
global: true,
},
@@ -238,7 +238,7 @@ if (window.location.host === 'plyr.io') {
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
- })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
+ })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
window.ga('create', 'UA-40881672-11', 'auto');
window.ga('send', 'pageview');
}
diff --git a/dist/plyr.js b/dist/plyr.js
index 0bc5929b..71aa50d4 100644
--- a/dist/plyr.js
+++ b/dist/plyr.js
@@ -77,7 +77,7 @@ var defaults = {
// Sprite (for icons)
loadSprite: true,
iconPrefix: 'plyr',
- iconUrl: 'https://cdn.plyr.io/3.0.0-beta.16/plyr.svg',
+ iconUrl: 'https://cdn.plyr.io/3.0.0-beta.17/plyr.svg',
// Blank video (used to prevent errors on source change)
blankVideo: 'https://cdn.plyr.io/static/blank.mp4',
@@ -1484,7 +1484,6 @@ var utils = {
// Plyr support checks
// ==========================================================================
-// Check for feature support
var support = {
// Basic support
audio: 'canPlayType' in document.createElement('audio'),
@@ -2002,7 +2001,6 @@ var Storage = function () {
/* global google */
-// Build the default tag URL
var getTagUrl = function getTagUrl() {
var params = {
AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',
@@ -2663,7 +2661,6 @@ var Ads = function () {
// Plyr Event Listeners
// ==========================================================================
-// Sniff out the browser
var browser$2 = utils.getBrowser();
var listeners = {
@@ -3972,6 +3969,11 @@ var controls = {
setQualityMenu: function setQualityMenu(options) {
var _this = this;
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.quality)) {
+ return;
+ }
+
var type = 'quality';
var list = this.elements.settings.panes.quality.querySelector('ul');
@@ -4133,7 +4135,11 @@ var controls = {
// Set the looping options
/* setLoopMenu() {
- const options = ['start', 'end', 'all', 'reset'];
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.loop)) {
+ return;
+ }
+ const options = ['start', 'end', 'all', 'reset'];
const list = this.elements.settings.panes.loop.querySelector('ul');
// Show the pane and tab
utils.toggleHidden(this.elements.settings.tabs.loop, false);
@@ -4233,6 +4239,11 @@ var controls = {
setSpeedMenu: function setSpeedMenu() {
var _this3 = this;
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.speed)) {
+ return;
+ }
+
var type = 'speed';
// Set the default speeds
@@ -5730,7 +5741,6 @@ var vimeo = {
// Plyr Media
// ==========================================================================
-// Sniff out the browser
var browser$3 = utils.getBrowser();
var media = {
@@ -5970,17 +5980,11 @@ var source = {
// ==========================================================================
// Plyr
-// plyr.js v3.0.0-beta.16
+// plyr.js v3.0.0-beta.17
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
-// Private properties
-// TODO: Use a WeakMap for private globals
-// const globals = new WeakMap();
-
-// Plyr instance
-
var Plyr = function () {
function Plyr(target, options) {
var _this = this;
diff --git a/dist/plyr.js.map b/dist/plyr.js.map
index 75cce347..f10c2a24 100644
--- a/dist/plyr.js.map
+++ b/dist/plyr.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","call","event","err","src","first","getElementsByTagName","parentNode","insertBefore","id","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisement","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","setTimeout","getKeyCode","which","handleKey","code","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.16/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.16\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["providers","types","defaults","window","navigator","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","call","event","err","src","first","getElementsByTagName","parentNode","insertBefore","id","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisement","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","setTimeout","getKeyCode","which","handleKey","code","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","min","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.17/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type],\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type],\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.17\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.min.js b/dist/plyr.min.js
index f2a291dd..ce2397d2 100644
--- a/dist/plyr.min.js
+++ b/dist/plyr.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e,t={html5:"html5",youtube:"youtube",vimeo:"vimeo"},i={audio:"audio",video:"video"},n={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.16/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},s=(function(){function e(e){this.value=e}function t(t){var i,n;function s(i,n){try{var o=t[i](n),l=o.value;l instanceof e?Promise.resolve(l.value).then(function(e){s("next",e)},function(e){s("throw",e)}):a(o.done?"return":"normal",o.value)}catch(e){a("throw",e)}}function a(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?s(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(a,o){var l={key:e,arg:t,resolve:a,reject:o,next:null};n?n=n.next=l:(i=n=l,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),a=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},l=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var o,l=e[Symbol.iterator]();!(n=(o=l.next()).done)&&(i.push(o.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e,t,i){var n=document.querySelector('script[src="'+e+'"]');if(null!==n)return n.callbacks=n.callbacks||[],void n.callbacks.push(t);var s=document.createElement("script");s.callbacks=s.callbacks||[],s.callbacks.push(t),s.errors=s.errors||[],s.errors.push(i),r.is.function(t)&&s.addEventListener("load",function(e){s.callbacks.forEach(function(t){return t.call(null,e)}),s.callbacks=null},!1),s.addEventListener("error",function(e){s.errors.forEach(function(t){return t.call(null,e)}),s.errors=null},!1),s.src=e;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(s,a)},loadSprite:function(e,t){if(r.is.string(e)){var i=r.is.string(t);if(!i||!document.querySelectorAll("#"+t).length){var n=document.createElement("div");if(r.toggleHidden(n,!0),i&&n.setAttribute("id",t),c.storage){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var a=JSON.parse(s);return void o.call(n,a.content)}}r.fetch(e).then(function(e){r.is.empty(e)||(c.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),o.call(n,e))}).catch(function(){})}}function o(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return r.is.object(t)&&r.setAttributes(n,t),r.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(r.createElement(e,i,n))},removeElement:function(e){r.is.element(e)&&r.is.element(e.parentNode)&&(r.is.nodeList(e)||r.is.array(e)?Array.from(e).forEach(r.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return r.is.element(t)&&r.is.element(t.parentNode)&&r.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){r.is.element(e)&&!r.is.empty(t)&&Object.keys(t).forEach(function(i){e.setAttribute(i,t[i])})},getAttributesFromSelector:function(e,t){if(!r.is.string(e)||r.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),o=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":r.is.object(n)&&r.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[o]=l}}),i},toggleClass:function(e,t,i){if(r.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return r.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){r.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=r.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:r.getElements.call(this,this.config.selectors.buttons.play),pause:r.getElement.call(this,this.config.selectors.buttons.pause),restart:r.getElement.call(this,this.config.selectors.buttons.restart),rewind:r.getElement.call(this,this.config.selectors.buttons.rewind),forward:r.getElement.call(this,this.config.selectors.buttons.forward),mute:r.getElement.call(this,this.config.selectors.buttons.mute),pip:r.getElement.call(this,this.config.selectors.buttons.pip),airplay:r.getElement.call(this,this.config.selectors.buttons.airplay),settings:r.getElement.call(this,this.config.selectors.buttons.settings),captions:r.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:r.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=r.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:r.getElement.call(this,this.config.selectors.inputs.seek),volume:r.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:r.getElement.call(this,this.config.selectors.display.buffer),duration:r.getElement.call(this,this.config.selectors.display.duration),currentTime:r.getElement.call(this,this.config.selectors.display.currentTime)},r.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(r.is.element(e)){var i=r.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=r.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?r.on(this.elements.container,"keydown",a,!1):r.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i,n,s,a){if(!r.is.empty(e)&&!r.is.empty(t)&&r.is.function(i))if(r.is.nodeList(e)||r.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&r.toggleListener.call(null,e,t,i,n,s,a)});else{var o=t.split(" "),l=!!r.is.boolean(a)&&a;c.passiveListeners&&(l={passive:!r.is.boolean(s)||s,capture:!!r.is.boolean(a)&&a}),o.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e,t,i,n,s){r.toggleListener(e,t,i,!0,n,s)},off:function(e,t,i,n,s){r.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e,t,i,n){if(r.is.element(e)&&r.is.string(t)){var s=new CustomEvent(t,{bubbles:!!r.is.boolean(i)&&i,detail:Object.assign({},n,{plyr:r.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(r.is.array(e)||r.is.nodeList(e))Array.from(e).forEach(function(e){return r.toggleState(e,t)});else if(r.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=r.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!r.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),o=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(o)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return r.is.object(s)?(Object.keys(s).forEach(function(t){r.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),r.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),r.extend.apply(r,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?t.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?t.vimeo:null},parseYouTubeId:function(e){if(r.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(r.is.empty(e))return null;if(r.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=l(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return r.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!r.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){r.toggleHidden(e,!0),e.offsetHeight,r.toggleHidden(e,!1)},0)}},c={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=r.getBrowser(),o=a.isIPhone&&i&&c.inline;switch(t+":"+e){case"html5:video":s=(n=c.video)&&c.rangeInput&&(!a.isIPhone||o);break;case"html5:audio":s=(n=c.audio)&&c.rangeInput;break;case"youtube:video":n=!0,s=c.rangeInput&&(!a.isIPhone||o);break;case"vimeo:video":n=!0,s=c.rangeInput&&!a.isIPhone;break;default:s=(n=c.audio&&c.video)&&c.rangeInput}return{api:n,ui:s}},pip:!r.getBrowser().isIPhone&&r.is.function(r.createElement("video").webkitSetPresentationMode),airplay:r.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!r.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(e=document.createElement("input"),e.type="range","range"===e.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==r.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},u=function(){},d=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];s(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return a(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):u}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):u}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):u}}]),e}(),h=r.getBrowser();function p(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;r.is.element(e)&&r.toggleState(e,this.active),r.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),h.isIos||r.trapFocus.call(this.player,this.target,this.active)}}function m(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",r.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),p.call(this)}var g=function(){function e(t){var i=this;s(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},r.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){p.call(i)}),r.on(this.player.elements.container,"dblclick",function(){i.toggle()}),r.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return a(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),r.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?r.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():m.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?r.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():m.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!r.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:r.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return h.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(r.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return r.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!r.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),f=function(){function e(t){s(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return a(e,[{key:"get",value:function(t){var i=window.localStorage.getItem(this.key);if(!e.supported||r.is.empty(i))return null;var n=JSON.parse(i);return r.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&r.is.object(t)){var i=this.get();r.is.empty(i)&&(i={}),r.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),y=function(){function e(t){var i=this;s(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=r.is.url(t.config.ads.tag),this.enabled&&(r.is.object(window.google)?this.ready():r.loadScript(t.config.urls.googleIMA.api,function(){i.ready()},function(){i.blocked=!0,i.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return a(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=r.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+r.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=r.formatTime(e.manager.getRemainingTime()),i=e.player.config.i18n.advertisement+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var i=t.player.elements.progress;if(i){var n=100/t.player.duration*e,s=r.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){r.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),s("loaded"),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),s("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),s("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),s("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:s("started");break;case google.ima.AdEvent.Type.MIDPOINT:s("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:s("complete");break;case google.ima.AdEvent.Type.IMPRESSION:s("impression");break;case google.ima.AdEvent.Type.CLICK:s("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){r.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){r.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){r.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){r.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),v=r.getBrowser(),b={global:function(){var e=this,t=null,i=function(i){var n=function(e){return e.keyCode?e.keyCode:e.which}(i),s="keydown"===i.type,a=s&&n===t;if(!(i.altKey||i.ctrlKey||i.metaKey||i.shiftKey)&&r.is.number(n)){if(s){var o=r.getFocusElement();if(r.is.element(o)&&r.matches(o,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(i.preventDefault(),i.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(e.currentTime=e.duration/10*(n-48));break;case 32:case 75:a||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:a||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:a||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===n&&e.fullscreen.toggle(),t=n}else t=null}};this.config.keyboard.global?r.on(window,"keydown keyup",i,!1):this.config.keyboard.focused&&r.on(this.elements.container,"keydown keyup",i,!1),r.on(this.elements.container,"focusout",function(t){r.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),r.on(this.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){r.toggleClass(r.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&r.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(r.on(this.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e,t)}),r.on(this.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e,t)}),r.on(this.media,"loadeddata",function(){r.toggleHidden(e.elements.volume,!e.hasAudio),r.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),r.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),r.on(this.media,"progress playing",function(t){return k.updateProgress.call(e,t)}),r.on(this.media,"volumechange",function(t){return k.updateVolume.call(e,t)}),r.on(this.media,"playing play pause ended",function(t){return k.checkPlaying.call(e,t)}),r.on(this.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=r.getElement.call(this,"."+this.config.classNames.video);if(!r.is.element(t))return;r.on(t,"click",function(){e.config.hideControls&&c.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&r.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),r.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),r.on(this.media,"ratechange",function(){w.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),r.on(this.media,"qualitychange",function(){w.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),r.on(this.media,"languagechange",function(){w.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),r.on(this.media,"captionsenabled captionsdisabled",function(){w.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),r.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.media.error),r.dispatchEvent.call(e,e.elements.container,t.type,!0,i)})},controls:function(){var e=this,t=v.isIE?"change":"input",i=function(t,i,n){var s=e.config.listeners[i];r.is.function(s)&&s.call(e,t),!t.defaultPrevented&&r.is.function(n)&&n.call(e,t)};r.on(this.elements.buttons.play,"click",function(t){return i(t,"play",function(){e.togglePlay()})}),r.on(this.elements.buttons.restart,"click",function(t){return i(t,"restart",function(){e.restart()})}),r.on(this.elements.buttons.rewind,"click",function(t){return i(t,"rewind",function(){e.rewind()})}),r.on(this.elements.buttons.forward,"click",function(t){return i(t,"forward",function(){e.forward()})}),r.on(this.elements.buttons.mute,"click",function(t){return i(t,"mute",function(){e.muted=!e.muted})}),r.on(this.elements.buttons.captions,"click",function(t){return i(t,"captions",function(){e.toggleCaptions()})}),r.on(this.elements.buttons.fullscreen,"click",function(t){return i(t,"fullscreen",function(){e.fullscreen.toggle()})}),r.on(this.elements.buttons.pip,"click",function(t){return i(t,"pip",function(){e.pip="toggle"})}),r.on(this.elements.buttons.airplay,"click",function(t){return i(t,"airplay",function(){e.airplay()})}),r.on(this.elements.buttons.settings,"click",function(t){w.toggleMenu.call(e,t)}),r.on(document.documentElement,"click",function(t){w.toggleMenu.call(e,t)}),r.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),r.matches(t.target,e.config.selectors.inputs.language)?i(t,"language",function(){e.language=t.target.value}):r.matches(t.target,e.config.selectors.inputs.quality)?i(t,"quality",function(){e.quality=t.target.value}):r.matches(t.target,e.config.selectors.inputs.speed)?i(t,"speed",function(){e.speed=parseFloat(t.target.value)}):w.showTab.call(e,t)}),r.on(this.elements.inputs.seek,t,function(t){return i(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!r.is.element(this.elements.display.duration)&&r.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,k.timeUpdate.call(e))}),r.on(this.elements.inputs.volume,t,function(t){return i(t,"volume",function(){e.volume=t.target.value})}),v.isWebkit&&r.on(r.getElements.call(this,'input[type="range"]'),"input",function(t){w.updateRangeFill.call(e,t.target)}),r.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return w.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(r.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),r.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),r.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),r.on(this.elements.inputs.volume,"wheel",function(t){return i(t,"volume",function(){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.decreaseVolume(.02),n=-1):(e.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.increaseVolume(.02),n=1):(e.decreaseVolume(.02),n=-1)),(1===n&&e.media.volume<1||-1===n&&e.media.volume>0)&&t.preventDefault()})},!1)}},k={addStyleHook:function(){r.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),r.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(b.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);r.is.element(this.elements.controls)||(w.inject.call(this),b.controls.call(this)),r.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),T.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){r.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(r.is.string(this.config.title)&&!r.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),r.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=r.getElement.call(this,"iframe");if(!r.is.element(t))return;var i=r.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",i))}},checkPlaying:function(){r.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),r.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){r.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(r.toggleClass(this.elements.container,this.config.classNames.loading,!1),r.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){r.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(r.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),r.is.element(this.elements.buttons.mute)&&r.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;r.is.element(e)&&(e.value=t,w.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=r.is.number(t)?t:0,n=r.is.element(e)?e:this.elements.display.buffer;if(r.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];r.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){var t=this;if(this.supported.ui&&r.is.event(e)){var i,n=0;if(e)switch(e.type){case"timeupdate":case"seeking":n=r.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":n=(i=t.media.buffered)&&i.length?r.getPercentage(i.end(0),t.duration):r.is.number(i)?100*i:0,k.setProgress.call(this,this.elements.display.buffer,n)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(r.is.element(e)&&r.is.number(t)){var n=r.getHours(this.duration)>0;e.textContent=r.formatTime(t,n,i)}},timeUpdate:function(e){var t=!r.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=r.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),w.updateSeekTooltip.call(this)}}},E=r.getBrowser(),w={updateRangeFill:function(e){if(E.isWebkit){var t=r.is.event(e)?e.target:e;r.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||E.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=w.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");r.setAttributes(s,r.extend(t,{role:"presentation"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),o=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",o):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),s.appendChild(a),s},createLabel:function(e,t){var i=this.config.i18n[e],n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,r.createElement("span",n,i)},createBadge:function(e){if(r.is.empty(e))return null;var t=r.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(r.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=r.createElement("button"),n=Object.assign({},t),s=e,a=!1,o=void 0,l=void 0,c=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,s){case"play":a=!0,o="play",c="pause",l="play",u="pause";break;case"mute":a=!0,o="mute",c="unmute",l="volume",u="muted";break;case"captions":a=!0,o="enableCaptions",c="disableCaptions",l="captions-off",u="captions-on";break;case"fullscreen":a=!0,o="enterFullscreen",c="exitFullscreen",l="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",o="play",l="play";break;default:o=s,l=s}return a?(i.appendChild(w.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(w.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(w.createLabel.call(this,c,{class:"label--pressed"})),i.appendChild(w.createLabel.call(this,o,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=this.config.i18n[o]):(i.appendChild(w.createIcon.call(this,l)),i.appendChild(w.createLabel.call(this,o))),r.extend(n,r.getAttributesFromSelector(this.config.selectors.buttons[s],n)),r.setAttributes(i,n),"play"===s?(r.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=r.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),n=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=n,w.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=r.createElement("progress",r.extend(r.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){i.appendChild(r.createElement("span",null,"0"));var n="";switch(e){case"played":n=this.config.i18n.played;break;case"buffer":n=this.config.i18n.buffered}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=r.createElement("div",{class:"plyr__time"});return t.appendChild(r.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(r.createElement("span",r.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],o=r.createElement("li"),l=r.createElement("label",{class:this.config.classNames.control}),c=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),u=r.createElement("span",{"aria-hidden":!0});l.appendChild(c),l.appendChild(u),l.insertAdjacentHTML("beforeend",n),r.is.element(s)&&l.appendChild(s),o.appendChild(l),t.appendChild(o)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&r.is.element(this.elements.inputs.seek)&&r.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,i=this.elements.inputs.seek.getBoundingClientRect(),n=this.config.classNames.tooltip+"--visible";if(r.is.event(e))t=100/i.width*(e.pageX-i.left);else{if(!r.hasClass(this.elements.display.seekTooltip,n))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",r.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&r.toggleClass(this.elements.display.seekTooltip,n,"mouseenter"===e.type)}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];r.toggleHidden(i,!t),r.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this,i=this.elements.settings.panes.quality.querySelector("ul");r.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var n=!r.is.empty(this.options.quality)&&this.isYouTube;if(w.toggleTab.call(this,"quality",n),n){r.emptyElement(i);this.options.quality.forEach(function(e){return w.createMenuItem.call(t,e,i,"quality",w.getLabel.call(t,"quality",e),function(e){var i="";switch(e){case"hd2160":i="4K";break;case"hd1440":i="WQHD";break;case"hd1080":case"hd720":i="HD"}return i.length?w.createBadge.call(t,i):null}(e))}),w.updateSetting.call(this,"quality",i)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return w.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var i=this.elements.settings.panes[e],n=null,s=t;switch(e){case"captions":n=this.captions.active?this.captions.language:"";break;default:if(n=this[e],r.is.empty(n)&&(n=this.config[e].default),!this.options[e].includes(n))return void this.debug.warn("Unsupported value of '"+n+"' for "+e);if(!this.config[e].options.includes(n))return void this.debug.warn("Disabled value of '"+n+"' for "+e)}(r.is.element(s)||(s=i&&i.querySelector("ul")),r.is.empty(n))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=w.getLabel.call(this,e,n));var a=s&&s.querySelector('input[value="'+n+'"]');r.is.element(a)&&(a.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!c.textTracks||!T.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=T.getCurrentTrack.call(this);if(r.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=T.getTracks.call(this).length;if(w.toggleTab.call(this,"captions",i),r.emptyElement(t),i){var n=T.getTracks.call(this).map(function(e){return{language:e.language,label:r.is.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"",label:this.config.i18n.none}),n.forEach(function(i){w.createMenuItem.call(e,i.language,t,"language",i.label||i.language,w.createBadge.call(e,i.language.toUpperCase()),i.language.toLowerCase()===e.captions.language.toLowerCase())}),w.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;r.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!r.is.empty(this.options.speed);if(w.toggleTab.call(this,"speed",t),t){var i=this.elements.settings.panes.speed.querySelector("ul");r.toggleHidden(this.elements.settings.tabs.speed,!1),r.toggleHidden(this.elements.settings.panes.speed,!1),r.emptyElement(i),this.options.speed.forEach(function(t){return w.createMenuItem.call(e,t,i,"speed",w.getLabel.call(e,"speed",t))}),w.updateSetting.call(this,"speed",i)}},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings,n=r.is.boolean(e)?e:r.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(r.is.event(e)){var s=r.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}r.is.element(i)&&i.setAttribute("aria-expanded",n),r.is.element(t)&&(t.setAttribute("aria-hidden",!n),r.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return r.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(r.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),o=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),c.transitions&&!c.reducedMotion){o.style.width=a.scrollWidth+"px",o.style.height=a.scrollHeight+"px";var l=w.getTabSize.call(this,s);r.on(o,r.transitionEndEvent,function e(t){t.target===o&&["width","height"].includes(t.propertyName)&&(o.style.width="",o.style.height="",r.off(o,r.transitionEndEvent,e))}),o.style.width=l.width+"px",o.style.height=l.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(r.is.empty(this.config.controls))return null;var i=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(w.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(w.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(w.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(w.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.progress)),s=w.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(w.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=r.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(w.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(w.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(w.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=r.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},u=w.createRange.call(this,"volume",r.extend(l,{id:"plyr-volume-"+e.id}));o.appendChild(u.label),o.appendChild(u.input),this.elements.volume=o,i.appendChild(o)}if(this.config.controls.includes("captions")&&i.appendChild(w.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!r.is.empty(this.config.settings)){var d=r.createElement("div",{class:"plyr__menu"});d.appendChild(w.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var h=r.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),p=r.createElement("div"),m=r.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=r.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=r.createElement("li",{role:"tab",hidden:""}),s=r.createElement("button",r.extend(r.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),t.config.i18n[i]),a=r.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),p.appendChild(m),this.config.settings.forEach(function(i){var n=r.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=r.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[i]);n.appendChild(s);var a=r.createElement("ul");n.appendChild(a),p.appendChild(n),t.elements.settings.panes[i]=n}),h.appendChild(p),d.appendChild(h),i.appendChild(d),this.elements.settings.form=h,this.elements.settings.menu=d}return this.config.controls.includes("pip")&&c.pip&&i.appendChild(w.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&c.airplay&&i.appendChild(w.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(w.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(w.createButton.call(this,"play-large")),this.elements.controls=i,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&w.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=w.getIconUrl.call(this);t.absolute&&r.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=r.is.string(this.config.controls)||r.is.element(this.config.controls)?this.config.controls:r.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):w.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:w.getLanguage.call(this)});var n=void 0;if(r.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),r.is.element(n)||(n=this.elements.container),r.is.element(i)?n.appendChild(i):n.insertAdjacentHTML("beforeend",i),r.is.element(this.elements.controls)||r.findElements.call(this),window.navigator.userAgent.includes("Edge")&&r.repaint(n),this.config.tooltips.controls){var s=r.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){r.toggleClass(t,e.config.classNames.hidden,!1),r.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},T={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(r.is.empty(e)||(this.captions.language=e),r.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!r.is.boolean(this.captions.active)){var t=this.storage.get("captions");r.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!c.textTracks)r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&w.setCaptionsMenu.call(this);else{r.is.element(this.elements.captions)||(this.elements.captions=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.captions)),r.insertAfter(this.elements.captions,this.elements.wrapper)),r.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!r.is.empty(T.getTracks.call(this)));var i=T.getTracks.call(this);if(!r.is.empty(i)){if(r.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=r.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&r.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){r.removeElement(e)})})}T.setLanguage.call(this),T.show.call(this),r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&w.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){T.getTracks.call(this).forEach(function(t){r.on(t,"cuechange",function(t){return T.setCue.call(e,t)}),t.mode="hidden"});var t=T.getCurrentTrack.call(this);r.is.track(t)&&Array.from(t.activeCues||[]).length&&T.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return r.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return T.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=r.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===T.getCurrentTrack.call(this)&&(r.is.cue(n)?T.setText.call(this,n.getCueAsHTML()):T.setText.call(this,null),r.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(r.is.element(this.elements.captions)){var t=r.createElement("span");r.emptyElement(this.elements.captions);var i=r.is.nullOrUndefined(e)?"":e;r.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(r.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");r.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(r.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),r.toggleState(this.elements.buttons.captions,!0))}}},A={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),A.setAspectRatio.call(this),r.is.object(window.YT)&&r.is.function(window.YT.Player)?A.ready.call(this):(r.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){A.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(r.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(r.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(r.is.string(n)&&!r.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";r.fetch(s).then(function(e){r.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(r.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");r.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=r.parseYouTubeId(i),s=r.generateId(e.provider),a=r.createElement("div",{id:s});e.media=r.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!r.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,r.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var i=t.target;e.media.quality=i.getPlaybackQuality(),r.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),r.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;A.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.media.seeking=!0,r.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return i.getPlaybackQuality()},set:function(t){r.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),i.setPlaybackQuality(t)}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),r.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=r.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),r.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),r.dispatchEvent.call(e,e.media,"timeupdate"),r.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&r.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),r.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):r.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&r.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&r.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,r.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){r.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),r.dispatchEvent.call(e,e.media,"durationchange")),w.setQualityMenu.call(e,i.getAvailableQualityLevels());break;case 2:e.media.paused=!0,r.dispatchEvent.call(e,e.media,"pause")}r.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},C={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),C.setAspectRatio.call(this),r.is.object(window.Vimeo)?C.ready.call(this):r.loadScript(this.config.urls.vimeo.api,function(){C.ready.call(e)})},setAspectRatio:function(e){var t=r.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1],n=(200-i)/4;this.elements.wrapper.style.paddingBottom=i+"%",this.media.style.transform="translateY(-"+n+"%)"},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},n=r.buildUrlParams(i),s=t.media.getAttribute("src");r.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=r.parseVimeoId(s),o=r.createElement("iframe"),l="https://player.vimeo.com/video/"+a+"?"+n;o.setAttribute("src",l),o.setAttribute("allowfullscreen",""),o.setAttribute("allowtransparency",""),o.setAttribute("allow","autoplay");var c=r.createElement("div");c.appendChild(o),t.media=r.replaceElement(c,t.media),t.embed=new window.Vimeo.Player(o),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var i=t.media.paused;t.media.seeking=!0,r.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,r.dispatchEvent.call(t,t.media,"ratechange")})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,r.dispatchEvent.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var i=!!r.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){p=i,r.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=r.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=r.getAspectRatio(t[0],t[1]);C.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,r.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,T.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=r.stripHTML(e.cues[0].text)),T.setText.call(t,i)}),t.embed.on("loaded",function(){r.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&r.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,r.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,r.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&r.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,r.dispatchEvent.call(t,t.media,"seeked"),r.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,r.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},S=r.getBrowser(),N={setup:function(){if(this.media)if(r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),r.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(r.toggleClass(this.elements.container,this.config.classNames.pip.supported,c.pip&&this.isHTML5&&this.isVideo),r.toggleClass(this.elements.container,this.config.classNames.airplay.supported,c.airplay&&this.isHTML5),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),r.toggleClass(this.elements.container,this.config.classNames.isIos,S.isIos),r.toggleClass(this.elements.container,this.config.classNames.isTouch,c.touch)),this.isVideo&&(this.elements.wrapper=r.createElement("div",{class:this.config.classNames.video}),r.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":A.setup.call(this);break;case"vimeo":C.setup.call(this)}else this.isHTML5&&k.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(r.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},P={insertElements:function(e,t){var i=this;r.is.string(t)?r.insertElement(e,this.media,{src:t}):r.is.array(t)&&t.forEach(function(t){r.insertElement(e,i.media,t)})},change:function(e){var i=this;r.is.object(e)&&"sources"in e&&e.sources.length?(N.cancelRequests.call(this),this.destroy.call(this,function(){switch(r.removeElement(i.media),i.media=null,r.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=e.type,i.provider=r.is.empty(e.sources[0].provider)?t.html5:e.sources[0].provider,i.supported=c.check(i.type,i.provider,i.config.inline),i.provider+":"+i.type){case"html5:video":i.media=r.createElement("video");break;case"html5:audio":i.media=r.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=r.createElement("div",{src:e.sources[0].src})}i.elements.container.appendChild(i.media),r.is.boolean(e.autoplay)&&(i.config.autoplay=e.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in e&&i.media.setAttribute("poster",e.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.inline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&P.insertElements.call(i,"source",e.sources),i.config.title=e.title,N.setup.call(i),i.isHTML5&&("tracks"in e&&P.insertElements.call(i,"track",e.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(a,o){var l=this;if(s(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=a,r.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||r.is.nodeList(this.media)||r.is.array(this.media))&&(this.media=this.media[0]),this.config=r.extend({},n,o,function(){try{return JSON.parse(l.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new d(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",c),!r.is.nullOrUndefined(this.media)&&r.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(c.check().api){this.elements.original=this.media.cloneNode(!0);var u=this.media.tagName.toLowerCase(),h=null,p=null,m=null;switch(u){case"div":if(h=this.media.querySelector("iframe"),r.is.element(h)){if(p=h.getAttribute("src"),this.provider=r.getProviderByUrl(p),this.elements.container=this.media,this.media=h,this.elements.container.className="",m=r.getUrlParams(p),!r.is.empty(m)){var v=["1","true"];v.includes(m.autoplay)&&(this.config.autoplay=!0),v.includes(m.playsinline)&&(this.config.inline=!0),v.includes(m.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(r.is.empty(this.provider)||!Object.keys(t).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=i.video;break;case"video":case"audio":this.type=u,this.provider=t.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=c.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new f(this),this.media.plyr=this,r.is.element(this.elements.container)||(this.elements.container=r.createElement("div"),r.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),b.global.call(this),k.addStyleHook.call(this),N.setup.call(this),this.config.debug&&r.on(this.elements.container,this.config.events.join(" "),function(e){l.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.fullscreen=new g(this),this.ads=new y(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return a(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(r.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(r.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(r.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(r.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(r.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&r.is.element(this.elements.buttons.captions)){var t=r.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,r.toggleState(this.elements.buttons.captions,this.captions.active),r.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),r.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){c.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(r.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(r.is.boolean(e)||(r.is.event(e)?(s="enterfullscreen"===e.type,n=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(i=2e3),"focusin"===e.type&&(i=3e3,r.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):n=r.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),n||this.paused||this.loading){if(r.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&r.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;c.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(r.hasClass(t.elements.container,t.config.classNames.hideControls)||r.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),r.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(r.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!r.is.empty(t.config.settings)&&w.toggleMenu.call(t,!1)))},i))}}},{key:"on",value:function(e,t){r.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){r.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(r.removeElement(t.elements.buttons.play),r.removeElement(t.elements.captions),r.removeElement(t.elements.controls),r.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),r.is.function(e)&&e()):(r.replaceElement(t.elements.original,t.elements.container),r.dispatchEvent.call(t,t.elements.original,"destroyed",!0),r.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}},{key:"supports",value:function(e){return c.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===t.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===t.youtube}},{key:"isVimeo",get:function(){return this.provider===t.vimeo}},{key:"isVideo",get:function(){return this.type===i.video}},{key:"isAudio",get:function(){return this.type===i.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;r.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;r.is.string(t)&&(t=Number(t)),r.is.number(t)||(t=this.storage.get("volume")),r.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;r.is.boolean(t)||(t=this.storage.get("muted")),r.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;r.is.number(e)&&(t=e),r.is.number(t)||(t=this.storage.get("speed")),r.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;r.is.string(e)&&(t=e),r.is.string(t)||(t=this.storage.get("quality")),r.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=r.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){P.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?r.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=r.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(r.is.string(e)&&(this.toggleCaptions(!r.is.empty(e)),!r.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,T.setText.call(this,null),T.setLanguage.call(this),r.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(c.pip){var n=r.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return c.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return c.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return r.loadSprite(e,t)}}]),e}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e,t={html5:"html5",youtube:"youtube",vimeo:"vimeo"},i={audio:"audio",video:"video"},n={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.17/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},s=(function(){function e(e){this.value=e}function t(t){var i,n;function s(i,n){try{var o=t[i](n),l=o.value;l instanceof e?Promise.resolve(l.value).then(function(e){s("next",e)},function(e){s("throw",e)}):a(o.done?"return":"normal",o.value)}catch(e){a("throw",e)}}function a(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?s(i.key,i.arg):n=null}this._invoke=function(e,t){return new Promise(function(a,o){var l={key:e,arg:t,resolve:a,reject:o,next:null};n?n=n.next=l:(i=n=l,s(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),a=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}(),o=function(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e},l=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var i=[],n=!0,s=!1,a=void 0;try{for(var o,l=e[Symbol.iterator]();!(n=(o=l.next()).done)&&(i.push(o.value),!t||i.length!==t);n=!0);}catch(e){s=!0,a=e}finally{try{!n&&l.return&&l.return()}finally{if(s)throw a}}return i}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(i,n){try{var s=new XMLHttpRequest;if(!("withCredentials"in s))return;s.addEventListener("load",function(){if("text"===t)try{i(JSON.parse(s.responseText))}catch(e){i(s.responseText)}else i(s.response)}),s.addEventListener("error",function(){throw new Error(s.statusText)}),s.open("GET",e,!0),s.responseType=t,s.send()}catch(e){n(e)}})},loadScript:function(e,t,i){var n=document.querySelector('script[src="'+e+'"]');if(null!==n)return n.callbacks=n.callbacks||[],void n.callbacks.push(t);var s=document.createElement("script");s.callbacks=s.callbacks||[],s.callbacks.push(t),s.errors=s.errors||[],s.errors.push(i),r.is.function(t)&&s.addEventListener("load",function(e){s.callbacks.forEach(function(t){return t.call(null,e)}),s.callbacks=null},!1),s.addEventListener("error",function(e){s.errors.forEach(function(t){return t.call(null,e)}),s.errors=null},!1),s.src=e;var a=document.getElementsByTagName("script")[0];a.parentNode.insertBefore(s,a)},loadSprite:function(e,t){if(r.is.string(e)){var i=r.is.string(t);if(!i||!document.querySelectorAll("#"+t).length){var n=document.createElement("div");if(r.toggleHidden(n,!0),i&&n.setAttribute("id",t),c.storage){var s=window.localStorage.getItem("cache-"+t);if(null!==s){var a=JSON.parse(s);return void o.call(n,a.content)}}r.fetch(e).then(function(e){r.is.empty(e)||(c.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),o.call(n,e))}).catch(function(){})}}function o(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var i=e.length?e:[e];Array.from(i).reverse().forEach(function(e,i){var n=i>0?t.cloneNode(!0):t,s=e.parentNode,a=e.nextSibling;n.appendChild(e),a?s.insertBefore(n,a):s.appendChild(n)})},createElement:function(e,t,i){var n=document.createElement(e);return r.is.object(t)&&r.setAttributes(n,t),r.is.string(i)&&(n.textContent=i),n},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,i,n){t.appendChild(r.createElement(e,i,n))},removeElement:function(e){r.is.element(e)&&r.is.element(e.parentNode)&&(r.is.nodeList(e)||r.is.array(e)?Array.from(e).forEach(r.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return r.is.element(t)&&r.is.element(t.parentNode)&&r.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){r.is.element(e)&&!r.is.empty(t)&&Object.keys(t).forEach(function(i){e.setAttribute(i,t[i])})},getAttributesFromSelector:function(e,t){if(!r.is.string(e)||r.is.empty(e))return{};var i={},n=t;return e.split(",").forEach(function(e){var t=e.trim(),s=t.replace(".",""),a=t.replace(/[[\]]/g,"").split("="),o=a[0],l=a.length>1?a[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":r.is.object(n)&&r.is.string(n.class)&&(n.class+=" "+s),i.class=s;break;case"#":i.id=t.replace("#","");break;case"[":i[o]=l}}),i},toggleClass:function(e,t,i){if(r.is.element(e)){var n=e.classList.contains(t);return e.classList[i?"add":"remove"](t),i&&!n||!i&&n}return null},hasClass:function(e,t){return r.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){r.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var i={Element:Element};var n=i.matches||i.webkitMatchesSelector||i.mozMatchesSelector||i.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return n.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=r.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:r.getElements.call(this,this.config.selectors.buttons.play),pause:r.getElement.call(this,this.config.selectors.buttons.pause),restart:r.getElement.call(this,this.config.selectors.buttons.restart),rewind:r.getElement.call(this,this.config.selectors.buttons.rewind),forward:r.getElement.call(this,this.config.selectors.buttons.forward),mute:r.getElement.call(this,this.config.selectors.buttons.mute),pip:r.getElement.call(this,this.config.selectors.buttons.pip),airplay:r.getElement.call(this,this.config.selectors.buttons.airplay),settings:r.getElement.call(this,this.config.selectors.buttons.settings),captions:r.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:r.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=r.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:r.getElement.call(this,this.config.selectors.inputs.seek),volume:r.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:r.getElement.call(this,this.config.selectors.display.buffer),duration:r.getElement.call(this,this.config.selectors.display.duration),currentTime:r.getElement.call(this,this.config.selectors.display.currentTime)},r.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(r.is.element(e)){var i=r.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),n=i[0],s=i[i.length-1],a=function(e){if("Tab"===e.key&&9===e.keyCode){var t=r.getFocusElement();t!==s||e.shiftKey?t===n&&e.shiftKey&&(s.focus(),e.preventDefault()):(n.focus(),e.preventDefault())}};t?r.on(this.elements.container,"keydown",a,!1):r.off(this.elements.container,"keydown",a,!1)}},toggleListener:function(e,t,i,n,s,a){if(!r.is.empty(e)&&!r.is.empty(t)&&r.is.function(i))if(r.is.nodeList(e)||r.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&r.toggleListener.call(null,e,t,i,n,s,a)});else{var o=t.split(" "),l=!!r.is.boolean(a)&&a;c.passiveListeners&&(l={passive:!r.is.boolean(s)||s,capture:!!r.is.boolean(a)&&a}),o.forEach(function(t){e[n?"addEventListener":"removeEventListener"](t,i,l)})}},on:function(e,t,i,n,s){r.toggleListener(e,t,i,!0,n,s)},off:function(e,t,i,n,s){r.toggleListener(e,t,i,!1,n,s)},dispatchEvent:function(e,t,i,n){if(r.is.element(e)&&r.is.string(t)){var s=new CustomEvent(t,{bubbles:!!r.is.boolean(i)&&i,detail:Object.assign({},n,{plyr:r.is.plyr(this)?this:null})});e.dispatchEvent(s)}},toggleState:function(e,t){if(r.is.array(e)||r.is.nodeList(e))Array.from(e).forEach(function(e){return r.toggleState(e,t)});else if(r.is.element(e)){var i="true"===e.getAttribute("aria-pressed"),n=r.is.boolean(t)?t:!i;e.setAttribute("aria-pressed",n)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!r.is.number(e))return this.formatTime(null,t,i);var n=function(e){return("0"+e).slice(-2)},s=this.getHours(e),a=this.getMinutes(e),o=this.getSeconds(e);return t||s>0?s+=":":s="",(i?"-":"")+s+n(a)+":"+n(o)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];if(!i.length)return e;var s=i.shift();return r.is.object(s)?(Object.keys(s).forEach(function(t){r.is.object(s[t])?(Object.keys(e).includes(t)||Object.assign(e,o({},t,{})),r.extend(e[t],s[t])):Object.assign(e,o({},t,s[t]))}),r.extend.apply(r,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,i=Array(e.length);t<e.length;t++)i[t]=e[t];return i}return Array.from(e)}(i)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?t.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?t.vimeo:null},parseYouTubeId:function(e){if(r.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(r.is.empty(e))return null;if(r.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var i=t.split("="),n=l(i,2),s=n[0],a=n[1];return Object.assign(e,o({},s,decodeURIComponent(a)))},{})},buildUrlParams:function(e){return r.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),i=document.createElement("div");return t.appendChild(i),i.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var i=function e(t,i){return 0===i?t:e(i,t%i)}(e,t);return e/i+":"+t/i},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},i=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!r.is.string(i)&&t[i]},repaint:function(e){setTimeout(function(){r.toggleHidden(e,!0),e.offsetHeight,r.toggleHidden(e,!1)},0)}},c={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,i){var n=!1,s=!1,a=r.getBrowser(),o=a.isIPhone&&i&&c.inline;switch(t+":"+e){case"html5:video":s=(n=c.video)&&c.rangeInput&&(!a.isIPhone||o);break;case"html5:audio":s=(n=c.audio)&&c.rangeInput;break;case"youtube:video":n=!0,s=c.rangeInput&&(!a.isIPhone||o);break;case"vimeo:video":n=!0,s=c.rangeInput&&!a.isIPhone;break;default:s=(n=c.audio&&c.video)&&c.rangeInput}return{api:n,ui:s}},pip:!r.getBrowser().isIPhone&&r.is.function(r.createElement("video").webkitSetPresentationMode),airplay:r.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!r.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(e=document.createElement("input"),e.type="range","range"===e.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==r.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},u=function(){},d=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];s(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return a(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):u}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):u}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):u}}]),e}(),h=r.getBrowser();function p(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;r.is.element(e)&&r.toggleState(e,this.active),r.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),h.isIos||r.trapFocus.call(this.player,this.target,this.active)}}function m(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",r.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),p.call(this)}var g=function(){function e(t){var i=this;s(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},r.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){p.call(i)}),r.on(this.player.elements.container,"dblclick",function(){i.toggle()}),r.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return a(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),r.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?r.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():m.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(h.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?r.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():m.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!r.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:r.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return h.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(r.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return r.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!r.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),f=function(){function e(t){s(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return a(e,[{key:"get",value:function(t){var i=window.localStorage.getItem(this.key);if(!e.supported||r.is.empty(i))return null;var n=JSON.parse(i);return r.is.string(t)&&t.length?n[t]:n}},{key:"set",value:function(t){if(e.supported&&this.enabled&&r.is.object(t)){var i=this.get();r.is.empty(i)&&(i={}),r.extend(i,t),window.localStorage.setItem(this.key,JSON.stringify(i))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),y=function(){function e(t){var i=this;s(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=r.is.url(t.config.ads.tag),this.enabled&&(r.is.object(window.google)?this.ready():r.loadScript(t.config.urls.googleIMA.api,function(){i.ready()},function(){i.blocked=!0,i.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return a(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=r.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var i=new google.ima.AdsRequest;i.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+r.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),i.linearAdSlotWidth=t.offsetWidth,i.linearAdSlotHeight=t.offsetHeight,i.nonLinearAdSlotWidth=t.offsetWidth,i.nonLinearAdSlotHeight=t.offsetHeight,i.forceNonLinearFullSlot=!1,this.loader.requestAds(i),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=r.formatTime(e.manager.getRemainingTime()),i=e.player.config.i18n.advertisement+" - "+t;e.elements.container.setAttribute("data-badge-text",i)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,i=new google.ima.AdsRenderingSettings;i.restoreCustomPlaybackStateOnAdBreakComplete=!0,i.enablePreloading=!0,this.manager=e.getAdsManager(this.player,i),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var i=t.player.elements.progress;if(i){var n=100/t.player.duration*e,s=r.createElement("span",{class:t.player.config.classNames.cues});s.style.left=n.toString()+"%",i.appendChild(s)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,i=this.player.elements.container,n=e.getAd(),s=function(e){r.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),s("loaded"),this.pollCountdown(!0),n.isLinear()||(n.width=i.offsetWidth,n.height=i.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),s("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),s("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),s("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:s("started");break;case google.ima.AdEvent.Type.MIDPOINT:s("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:s("complete");break;case google.ima.AdEvent.Type.IMPRESSION:s("impression");break;case google.ima.AdEvent.Type.CLICK:s("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,i=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return i=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(n,s){i<n&&n<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(s,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){r.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){r.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){r.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var i=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){i.cancel(),i.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){r.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),v=r.getBrowser(),b={global:function(){var e=this,t=null,i=function(i){var n=function(e){return e.keyCode?e.keyCode:e.which}(i),s="keydown"===i.type,a=s&&n===t;if(!(i.altKey||i.ctrlKey||i.metaKey||i.shiftKey)&&r.is.number(n)){if(s){var o=r.getFocusElement();if(r.is.element(o)&&r.matches(o,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(n)&&(i.preventDefault(),i.stopPropagation()),n){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:a||(e.currentTime=e.duration/10*(n-48));break;case 32:case 75:a||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:a||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:a||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===n&&e.fullscreen.toggle(),t=n}else t=null}};this.config.keyboard.global?r.on(window,"keydown keyup",i,!1):this.config.keyboard.focused&&r.on(this.elements.container,"keydown keyup",i,!1),r.on(this.elements.container,"focusout",function(t){r.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),r.on(this.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){r.toggleClass(r.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&r.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(r.on(this.media,"timeupdate seeking",function(t){return k.timeUpdate.call(e,t)}),r.on(this.media,"durationchange loadedmetadata",function(t){return k.durationUpdate.call(e,t)}),r.on(this.media,"loadeddata",function(){r.toggleHidden(e.elements.volume,!e.hasAudio),r.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),r.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),r.on(this.media,"progress playing",function(t){return k.updateProgress.call(e,t)}),r.on(this.media,"volumechange",function(t){return k.updateVolume.call(e,t)}),r.on(this.media,"playing play pause ended",function(t){return k.checkPlaying.call(e,t)}),r.on(this.media,"waiting canplay seeked playing",function(t){return k.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=r.getElement.call(this,"."+this.config.classNames.video);if(!r.is.element(t))return;r.on(t,"click",function(){e.config.hideControls&&c.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&r.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),r.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),r.on(this.media,"ratechange",function(){w.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),r.on(this.media,"qualitychange",function(){w.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),r.on(this.media,"languagechange",function(){w.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),r.on(this.media,"captionsenabled captionsdisabled",function(){w.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),r.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var i={};"error"===t.type&&(i=e.media.error),r.dispatchEvent.call(e,e.elements.container,t.type,!0,i)})},controls:function(){var e=this,t=v.isIE?"change":"input",i=function(t,i,n){var s=e.config.listeners[i];r.is.function(s)&&s.call(e,t),!t.defaultPrevented&&r.is.function(n)&&n.call(e,t)};r.on(this.elements.buttons.play,"click",function(t){return i(t,"play",function(){e.togglePlay()})}),r.on(this.elements.buttons.restart,"click",function(t){return i(t,"restart",function(){e.restart()})}),r.on(this.elements.buttons.rewind,"click",function(t){return i(t,"rewind",function(){e.rewind()})}),r.on(this.elements.buttons.forward,"click",function(t){return i(t,"forward",function(){e.forward()})}),r.on(this.elements.buttons.mute,"click",function(t){return i(t,"mute",function(){e.muted=!e.muted})}),r.on(this.elements.buttons.captions,"click",function(t){return i(t,"captions",function(){e.toggleCaptions()})}),r.on(this.elements.buttons.fullscreen,"click",function(t){return i(t,"fullscreen",function(){e.fullscreen.toggle()})}),r.on(this.elements.buttons.pip,"click",function(t){return i(t,"pip",function(){e.pip="toggle"})}),r.on(this.elements.buttons.airplay,"click",function(t){return i(t,"airplay",function(){e.airplay()})}),r.on(this.elements.buttons.settings,"click",function(t){w.toggleMenu.call(e,t)}),r.on(document.documentElement,"click",function(t){w.toggleMenu.call(e,t)}),r.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),r.matches(t.target,e.config.selectors.inputs.language)?i(t,"language",function(){e.language=t.target.value}):r.matches(t.target,e.config.selectors.inputs.quality)?i(t,"quality",function(){e.quality=t.target.value}):r.matches(t.target,e.config.selectors.inputs.speed)?i(t,"speed",function(){e.speed=parseFloat(t.target.value)}):w.showTab.call(e,t)}),r.on(this.elements.inputs.seek,t,function(t){return i(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!r.is.element(this.elements.display.duration)&&r.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,k.timeUpdate.call(e))}),r.on(this.elements.inputs.volume,t,function(t){return i(t,"volume",function(){e.volume=t.target.value})}),v.isWebkit&&r.on(r.getElements.call(this,'input[type="range"]'),"input",function(t){w.updateRangeFill.call(e,t.target)}),r.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return w.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(r.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),r.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),r.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),r.on(this.elements.inputs.volume,"wheel",function(t){return i(t,"volume",function(){var i=t.webkitDirectionInvertedFromDevice,n=0;(t.deltaY<0||t.deltaX>0)&&(i?(e.decreaseVolume(.02),n=-1):(e.increaseVolume(.02),n=1)),(t.deltaY>0||t.deltaX<0)&&(i?(e.increaseVolume(.02),n=1):(e.decreaseVolume(.02),n=-1)),(1===n&&e.media.volume<1||-1===n&&e.media.volume>0)&&t.preventDefault()})},!1)}},k={addStyleHook:function(){r.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),r.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(b.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void k.toggleNativeControls.call(this,!0);r.is.element(this.elements.controls)||(w.inject.call(this),b.controls.call(this)),r.is.element(this.elements.controls)&&(k.toggleNativeControls.call(this),T.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],k.timeUpdate.call(this),k.checkPlaying.call(this),this.ready=!0,setTimeout(function(){r.dispatchEvent.call(e,e.media,"ready")},0),k.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(r.is.string(this.config.title)&&!r.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),r.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=r.getElement.call(this,"iframe");if(!r.is.element(t))return;var i=r.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",i))}},checkPlaying:function(){r.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),r.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){r.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(r.toggleClass(this.elements.container,this.config.classNames.loading,!1),r.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){r.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(r.is.element(this.elements.inputs.volume)&&k.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),r.is.element(this.elements.buttons.mute)&&r.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;r.is.element(e)&&(e.value=t,w.updateRangeFill.call(this,e))},setProgress:function(e,t){var i=r.is.number(t)?t:0,n=r.is.element(e)?e:this.elements.display.buffer;if(r.is.element(n)){n.value=i;var s=n.getElementsByTagName("span")[0];r.is.element(s)&&(s.childNodes[0].nodeValue=i)}},updateProgress:function(e){var t=this;if(this.supported.ui&&r.is.event(e)){var i,n=0;if(e)switch(e.type){case"timeupdate":case"seeking":n=r.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&k.setRange.call(this,this.elements.inputs.seek,n);break;case"playing":case"progress":n=(i=t.media.buffered)&&i.length?r.getPercentage(i.end(0),t.duration):r.is.number(i)?100*i:0,k.setProgress.call(this,this.elements.display.buffer,n)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(r.is.element(e)&&r.is.number(t)){var n=r.getHours(this.duration)>0;e.textContent=r.formatTime(t,n,i)}},timeUpdate:function(e){var t=!r.is.element(this.elements.display.duration)&&this.config.invertTime;k.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||k.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=r.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&k.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&k.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),w.updateSeekTooltip.call(this)}}},E=r.getBrowser(),w={updateRangeFill:function(e){if(E.isWebkit){var t=r.is.event(e)?e.target:e;r.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||E.isIE&&!window.svg4everybody}},createIcon:function(e,t){var i=w.getIconUrl.call(this),n=(i.absolute?"":i.url)+"#"+this.config.iconPrefix,s=document.createElementNS("http://www.w3.org/2000/svg","svg");r.setAttributes(s,r.extend(t,{role:"presentation"}));var a=document.createElementNS("http://www.w3.org/2000/svg","use"),o=n+"-"+e;return"href"in a?a.setAttributeNS("http://www.w3.org/1999/xlink","href",o):a.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",o),s.appendChild(a),s},createLabel:function(e,t){var i=this.config.i18n[e],n=Object.assign({},t);switch(e){case"pip":i="PIP";break;case"airplay":i="AirPlay"}return"class"in n?n.class+=" "+this.config.classNames.hidden:n.class=this.config.classNames.hidden,r.createElement("span",n,i)},createBadge:function(e){if(r.is.empty(e))return null;var t=r.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(r.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var i=r.createElement("button"),n=Object.assign({},t),s=e,a=!1,o=void 0,l=void 0,c=void 0,u=void 0;switch("type"in n||(n.type="button"),"class"in n?n.class.includes(this.config.classNames.control)&&(n.class+=" "+this.config.classNames.control):n.class=this.config.classNames.control,s){case"play":a=!0,o="play",c="pause",l="play",u="pause";break;case"mute":a=!0,o="mute",c="unmute",l="volume",u="muted";break;case"captions":a=!0,o="enableCaptions",c="disableCaptions",l="captions-off",u="captions-on";break;case"fullscreen":a=!0,o="enterFullscreen",c="exitFullscreen",l="enter-fullscreen",u="exit-fullscreen";break;case"play-large":n.class+=" "+this.config.classNames.control+"--overlaid",s="play",o="play",l="play";break;default:o=s,l=s}return a?(i.appendChild(w.createIcon.call(this,u,{class:"icon--pressed"})),i.appendChild(w.createIcon.call(this,l,{class:"icon--not-pressed"})),i.appendChild(w.createLabel.call(this,c,{class:"label--pressed"})),i.appendChild(w.createLabel.call(this,o,{class:"label--not-pressed"})),n["aria-pressed"]=!1,n["aria-label"]=this.config.i18n[o]):(i.appendChild(w.createIcon.call(this,l)),i.appendChild(w.createLabel.call(this,o))),r.extend(n,r.getAttributesFromSelector(this.config.selectors.buttons[s],n)),r.setAttributes(i,n),"play"===s?(r.is.array(this.elements.buttons[s])||(this.elements.buttons[s]=[]),this.elements.buttons[s].push(i)):this.elements.buttons[s]=i,i},createRange:function(e,t){var i=r.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),n=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=n,w.updateRangeFill.call(this,n),{label:i,input:n}},createProgress:function(e,t){var i=r.createElement("progress",r.extend(r.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){i.appendChild(r.createElement("span",null,"0"));var n="";switch(e){case"played":n=this.config.i18n.played;break;case"buffer":n=this.config.i18n.buffered}i.textContent="% "+n.toLowerCase()}return this.elements.display[e]=i,i},createTime:function(e){var t=r.createElement("div",{class:"plyr__time"});return t.appendChild(r.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(r.createElement("span",r.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,i,n){var s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,a=arguments.length>5&&void 0!==arguments[5]&&arguments[5],o=r.createElement("li"),l=r.createElement("label",{class:this.config.classNames.control}),c=r.createElement("input",r.extend(r.getAttributesFromSelector(this.config.selectors.inputs[i]),{type:"radio",name:"plyr-"+i,value:e,checked:a,class:"plyr__sr-only"})),u=r.createElement("span",{"aria-hidden":!0});l.appendChild(c),l.appendChild(u),l.insertAdjacentHTML("beforeend",n),r.is.element(s)&&l.appendChild(s),o.appendChild(l),t.appendChild(o)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&r.is.element(this.elements.inputs.seek)&&r.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,i=this.elements.inputs.seek.getBoundingClientRect(),n=this.config.classNames.tooltip+"--visible";if(r.is.event(e))t=100/i.width*(e.pageX-i.left);else{if(!r.hasClass(this.elements.display.seekTooltip,n))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),k.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",r.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&r.toggleClass(this.elements.display.seekTooltip,n,"mouseenter"===e.type)}},toggleTab:function(e,t){var i=this.elements.settings.tabs[e],n=this.elements.settings.panes[e];r.toggleHidden(i,!t),r.toggleHidden(n,!t)},setQualityMenu:function(e){var t=this;if(r.is.element(this.elements.settings.panes.quality)){var i=this.elements.settings.panes.quality.querySelector("ul");r.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var n=!r.is.empty(this.options.quality)&&this.isYouTube;if(w.toggleTab.call(this,"quality",n),n){r.emptyElement(i);this.options.quality.forEach(function(e){return w.createMenuItem.call(t,e,i,"quality",w.getLabel.call(t,"quality",e),function(e){var i="";switch(e){case"hd2160":i="4K";break;case"hd1440":i="WQHD";break;case"hd1080":case"hd720":i="HD"}return i.length?w.createBadge.call(t,i):null}(e))}),w.updateSetting.call(this,"quality",i)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return w.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var i=this.elements.settings.panes[e],n=null,s=t;switch(e){case"captions":n=this.captions.active?this.captions.language:"";break;default:if(n=this[e],r.is.empty(n)&&(n=this.config[e].default),!this.options[e].includes(n))return void this.debug.warn("Unsupported value of '"+n+"' for "+e);if(!this.config[e].options.includes(n))return void this.debug.warn("Disabled value of '"+n+"' for "+e)}(r.is.element(s)||(s=i&&i.querySelector("ul")),r.is.empty(n))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=w.getLabel.call(this,e,n));var a=s&&s.querySelector('input[value="'+n+'"]');r.is.element(a)&&(a.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!c.textTracks||!T.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=T.getCurrentTrack.call(this);if(r.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),i=T.getTracks.call(this).length;if(w.toggleTab.call(this,"captions",i),r.emptyElement(t),i){var n=T.getTracks.call(this).map(function(e){return{language:e.language,label:r.is.empty(e.label)?e.language.toUpperCase():e.label}});n.unshift({language:"",label:this.config.i18n.none}),n.forEach(function(i){w.createMenuItem.call(e,i.language,t,"language",i.label||i.language,w.createBadge.call(e,i.language.toUpperCase()),i.language.toLowerCase()===e.captions.language.toLowerCase())}),w.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;if(r.is.element(this.elements.settings.panes.speed)){r.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!r.is.empty(this.options.speed);if(w.toggleTab.call(this,"speed",t),t){var i=this.elements.settings.panes.speed.querySelector("ul");r.toggleHidden(this.elements.settings.tabs.speed,!1),r.toggleHidden(this.elements.settings.panes.speed,!1),r.emptyElement(i),this.options.speed.forEach(function(t){return w.createMenuItem.call(e,t,i,"speed",w.getLabel.call(e,"speed",t))}),w.updateSetting.call(this,"speed",i)}}},toggleMenu:function(e){var t=this.elements.settings.form,i=this.elements.buttons.settings,n=r.is.boolean(e)?e:r.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(r.is.event(e)){var s=r.is.element(t)&&t.contains(e.target),a=e.target===this.elements.buttons.settings;if(s||!s&&!a&&n)return;a&&e.stopPropagation()}r.is.element(i)&&i.setAttribute("aria-expanded",n),r.is.element(t)&&(t.setAttribute("aria-hidden",!n),r.toggleClass(this.elements.container,this.config.classNames.menu.open,n),n?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var i=t.scrollWidth,n=t.scrollHeight;return r.removeElement(t),{width:i,height:n}},showTab:function(e){var t=this.elements.settings.menu,i=e.target,n="false"===i.getAttribute("aria-expanded"),s=document.getElementById(i.getAttribute("aria-controls"));if(r.is.element(s)&&"tabpanel"===s.getAttribute("role")){var a=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),o=a.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+a.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),c.transitions&&!c.reducedMotion){o.style.width=a.scrollWidth+"px",o.style.height=a.scrollHeight+"px";var l=w.getTabSize.call(this,s);r.on(o,r.transitionEndEvent,function e(t){t.target===o&&["width","height"].includes(t.propertyName)&&(o.style.width="",o.style.height="",r.off(o,r.transitionEndEvent,e))}),o.style.width=l.width+"px",o.style.height=l.height+"px"}a.setAttribute("aria-hidden",!0),a.setAttribute("tabindex",-1),s.setAttribute("aria-hidden",!n),i.setAttribute("aria-expanded",n),s.removeAttribute("tabindex"),s.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(r.is.empty(this.config.controls))return null;var i=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&i.appendChild(w.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&i.appendChild(w.createButton.call(this,"rewind")),this.config.controls.includes("play")&&i.appendChild(w.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&i.appendChild(w.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var n=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.progress)),s=w.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(n.appendChild(s.label),n.appendChild(s.input),n.appendChild(w.createProgress.call(this,"buffer")),this.config.tooltips.seek){var a=r.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");n.appendChild(a),this.elements.display.seekTooltip=a}this.elements.progress=n,i.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&i.appendChild(w.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&i.appendChild(w.createTime.call(this,"duration")),this.config.controls.includes("mute")&&i.appendChild(w.createButton.call(this,"mute")),this.config.controls.includes("volume")){var o=r.createElement("div",{class:"plyr__volume"}),l={max:1,step:.05,value:this.config.volume},u=w.createRange.call(this,"volume",r.extend(l,{id:"plyr-volume-"+e.id}));o.appendChild(u.label),o.appendChild(u.input),this.elements.volume=o,i.appendChild(o)}if(this.config.controls.includes("captions")&&i.appendChild(w.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!r.is.empty(this.config.settings)){var d=r.createElement("div",{class:"plyr__menu"});d.appendChild(w.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var h=r.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),p=r.createElement("div"),m=r.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),g=r.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(i){var n=r.createElement("li",{role:"tab",hidden:""}),s=r.createElement("button",r.extend(r.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+i+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+i,"aria-expanded":!1}),t.config.i18n[i]),a=r.createElement("span",{class:t.config.classNames.menu.value});a.innerHTML=e[i],s.appendChild(a),n.appendChild(s),g.appendChild(n),t.elements.settings.tabs[i]=n}),m.appendChild(g),p.appendChild(m),this.config.settings.forEach(function(i){var n=r.createElement("div",{id:"plyr-settings-"+e.id+"-"+i,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+i+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),s=r.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[i]);n.appendChild(s);var a=r.createElement("ul");n.appendChild(a),p.appendChild(n),t.elements.settings.panes[i]=n}),h.appendChild(p),d.appendChild(h),i.appendChild(d),this.elements.settings.form=h,this.elements.settings.menu=d}return this.config.controls.includes("pip")&&c.pip&&i.appendChild(w.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&c.airplay&&i.appendChild(w.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&i.appendChild(w.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(w.createButton.call(this,"play-large")),this.elements.controls=i,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&w.setSpeedMenu.call(this),i},inject:function(){var e=this;if(this.config.loadSprite){var t=w.getIconUrl.call(this);t.absolute&&r.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var i=null;this.elements.controls=null,i=r.is.string(this.config.controls)||r.is.element(this.config.controls)?this.config.controls:r.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):w.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:w.getLanguage.call(this)});var n=void 0;if(r.is.string(this.config.selectors.controls.container)&&(n=document.querySelector(this.config.selectors.controls.container)),r.is.element(n)||(n=this.elements.container),r.is.element(i)?n.appendChild(i):n.insertAdjacentHTML("beforeend",i),r.is.element(this.elements.controls)||r.findElements.call(this),window.navigator.userAgent.includes("Edge")&&r.repaint(n),this.config.tooltips.controls){var s=r.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(s).forEach(function(t){r.toggleClass(t,e.config.classNames.hidden,!1),r.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},T={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(r.is.empty(e)||(this.captions.language=e),r.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!r.is.boolean(this.captions.active)){var t=this.storage.get("captions");r.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!c.textTracks)r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&w.setCaptionsMenu.call(this);else{r.is.element(this.elements.captions)||(this.elements.captions=r.createElement("div",r.getAttributesFromSelector(this.config.selectors.captions)),r.insertAfter(this.elements.captions,this.elements.wrapper)),r.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!r.is.empty(T.getTracks.call(this)));var i=T.getTracks.call(this);if(!r.is.empty(i)){if(r.getBrowser().isIE&&window.URL){var n=this.media.querySelectorAll("track");Array.from(n).forEach(function(e){var t=e.getAttribute("src"),i=r.parseUrl(t);i.hostname!==window.location.href.hostname&&["http:","https:"].includes(i.protocol)&&r.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){r.removeElement(e)})})}T.setLanguage.call(this),T.show.call(this),r.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&w.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){T.getTracks.call(this).forEach(function(t){r.on(t,"cuechange",function(t){return T.setCue.call(e,t)}),t.mode="hidden"});var t=T.getCurrentTrack.call(this);r.is.track(t)&&Array.from(t.activeCues||[]).length&&T.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return r.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return T.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=r.is.event(e)?e.target:e,i=t.activeCues,n=i.length&&i[0];t===T.getCurrentTrack.call(this)&&(r.is.cue(n)?T.setText.call(this,n.getCueAsHTML()):T.setText.call(this,null),r.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(r.is.element(this.elements.captions)){var t=r.createElement("span");r.emptyElement(this.elements.captions);var i=r.is.nullOrUndefined(e)?"":e;r.is.string(i)?t.textContent=i.trim():t.appendChild(i),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(r.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");r.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(r.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),r.toggleState(this.elements.buttons.captions,!0))}}},A={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),A.setAspectRatio.call(this),r.is.object(window.YT)&&r.is.function(window.YT.Player)?A.ready.call(this):(r.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){A.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(r.is.function(this.embed.getVideoData)){var i=this.embed.getVideoData().title;if(r.is.empty(i))return this.config.title=i,void k.setTitle.call(this)}var n=this.config.keys.google;if(r.is.string(n)&&!r.is.empty(n)){var s="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+n+"&fields=items(snippet(title))&part=snippet";r.fetch(s).then(function(e){r.is.object(e)&&(t.config.title=e.items[0].snippet.title,k.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(r.is.empty(t)||!t.startsWith("youtube-")){var i=e.media.getAttribute("src");r.is.empty(i)&&(i=e.media.getAttribute(this.config.attributes.embed.id));var n=r.parseYouTubeId(i),s=r.generateId(e.provider),a=r.createElement("div",{id:s});e.media=r.replaceElement(a,e.media),e.embed=new window.YT.Player(s,{videoId:n,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!r.is.object(e.media.error)){var i={code:t.data};switch(t.data){case 2:i.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:i.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:i.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:i.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:i.message="An unknown error occured"}e.media.error=i,r.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var i=t.target;e.media.quality=i.getPlaybackQuality(),r.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var i=t.target;e.media.playbackRate=i.getPlaybackRate(),r.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var i=t.target;A.getTitle.call(e,n),e.media.play=function(){i.playVideo()},e.media.pause=function(){i.pauseVideo()},e.media.stop=function(){i.stopVideo()},e.media.duration=i.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(i.getCurrentTime())},set:function(t){e.media.seeking=!0,r.dispatchEvent.call(e,e.media,"seeking"),i.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return i.getPlaybackRate()},set:function(e){i.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return i.getPlaybackQuality()},set:function(t){r.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),i.setPlaybackQuality(t)}});var s=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return s},set:function(t){s=t,i.setVolume(100*s),r.dispatchEvent.call(e,e.media,"volumechange")}});var a=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return a},set:function(t){var n=r.is.boolean(t)?t:a;a=n,i[n?"mute":"unMute"](),r.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return i.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=i.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),r.dispatchEvent.call(e,e.media,"timeupdate"),r.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=i.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&r.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),r.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return k.build.call(e)},50)},onStateChange:function(t){var i=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(i.stopVideo(),i.playVideo()):r.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&r.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&r.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,r.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){r.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==i.getDuration()&&(e.media.duration=i.getDuration(),r.dispatchEvent.call(e,e.media,"durationchange")),w.setQualityMenu.call(e,i.getAvailableQualityLevels());break;case 2:e.media.paused=!0,r.dispatchEvent.call(e,e.media,"pause")}r.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},C={setup:function(){var e=this;r.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),C.setAspectRatio.call(this),r.is.object(window.Vimeo)?C.ready.call(this):r.loadScript(this.config.urls.vimeo.api,function(){C.ready.call(e)})},setAspectRatio:function(e){var t=r.is.string(e)?e.split(":"):this.config.ratio.split(":"),i=100/t[0]*t[1],n=(200-i)/4;this.elements.wrapper.style.paddingBottom=i+"%",this.media.style.transform="translateY(-"+n+"%)"},ready:function(){var e=this,t=this,i={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},n=r.buildUrlParams(i),s=t.media.getAttribute("src");r.is.empty(s)&&(s=t.media.getAttribute(this.config.attributes.embed.id));var a=r.parseVimeoId(s),o=r.createElement("iframe"),l="https://player.vimeo.com/video/"+a+"?"+n;o.setAttribute("src",l),o.setAttribute("allowfullscreen",""),o.setAttribute("allowtransparency",""),o.setAttribute("allow","autoplay");var c=r.createElement("div");c.appendChild(o),t.media=r.replaceElement(c,t.media),t.embed=new window.Vimeo.Player(o),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var u=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return u},set:function(e){var i=t.media.paused;t.media.seeking=!0,r.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),i&&t.pause()}});var d=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return d},set:function(e){t.embed.setPlaybackRate(e).then(function(){d=e,r.dispatchEvent.call(t,t.media,"ratechange")})}});var h=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return h},set:function(e){t.embed.setVolume(e).then(function(){h=e,r.dispatchEvent.call(t,t.media,"volumechange")})}});var p=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return p},set:function(e){var i=!!r.is.boolean(e)&&e;t.embed.setVolume(i?0:t.config.volume).then(function(){p=i,r.dispatchEvent.call(t,t.media,"volumechange")})}});var m=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return m},set:function(e){var i=r.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(i).then(function(){m=i})}});var g=void 0;t.embed.getVideoUrl().then(function(e){g=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return g}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var i=r.getAspectRatio(t[0],t[1]);C.setAspectRatio.call(e,i)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(i){t.config.title=i,k.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){u=e,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,r.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,T.setup.call(t)}),t.embed.on("cuechange",function(e){var i=null;e.cues.length&&(i=r.stripHTML(e.cues[0].text)),T.setText.call(t,i)}),t.embed.on("loaded",function(){r.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&r.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,r.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,u=e.seconds,r.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,r.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&r.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,r.dispatchEvent.call(t,t.media,"seeked"),r.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,r.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,r.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return k.build.call(t)},0)}},S=r.getBrowser(),N={setup:function(){if(this.media)if(r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),r.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&r.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(r.toggleClass(this.elements.container,this.config.classNames.pip.supported,c.pip&&this.isHTML5&&this.isVideo),r.toggleClass(this.elements.container,this.config.classNames.airplay.supported,c.airplay&&this.isHTML5),r.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),r.toggleClass(this.elements.container,this.config.classNames.isIos,S.isIos),r.toggleClass(this.elements.container,this.config.classNames.isTouch,c.touch)),this.isVideo&&(this.elements.wrapper=r.createElement("div",{class:this.config.classNames.video}),r.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":A.setup.call(this);break;case"vimeo":C.setup.call(this)}else this.isHTML5&&k.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(r.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},P={insertElements:function(e,t){var i=this;r.is.string(t)?r.insertElement(e,this.media,{src:t}):r.is.array(t)&&t.forEach(function(t){r.insertElement(e,i.media,t)})},change:function(e){var i=this;r.is.object(e)&&"sources"in e&&e.sources.length?(N.cancelRequests.call(this),this.destroy.call(this,function(){switch(r.removeElement(i.media),i.media=null,r.is.element(i.elements.container)&&i.elements.container.removeAttribute("class"),i.type=e.type,i.provider=r.is.empty(e.sources[0].provider)?t.html5:e.sources[0].provider,i.supported=c.check(i.type,i.provider,i.config.inline),i.provider+":"+i.type){case"html5:video":i.media=r.createElement("video");break;case"html5:audio":i.media=r.createElement("audio");break;case"youtube:video":case"vimeo:video":i.media=r.createElement("div",{src:e.sources[0].src})}i.elements.container.appendChild(i.media),r.is.boolean(e.autoplay)&&(i.config.autoplay=e.autoplay),i.isHTML5&&(i.config.crossorigin&&i.media.setAttribute("crossorigin",""),i.config.autoplay&&i.media.setAttribute("autoplay",""),"poster"in e&&i.media.setAttribute("poster",e.poster),i.config.loop.active&&i.media.setAttribute("loop",""),i.config.muted&&i.media.setAttribute("muted",""),i.config.inline&&i.media.setAttribute("playsinline","")),k.addStyleHook.call(i),i.isHTML5&&P.insertElements.call(i,"source",e.sources),i.config.title=e.title,N.setup.call(i),i.isHTML5&&("tracks"in e&&P.insertElements.call(i,"track",e.tracks),i.media.load()),(i.isHTML5||i.isEmbed&&!i.supported.ui)&&k.build.call(i),i.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(a,o){var l=this;if(s(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=a,r.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||r.is.nodeList(this.media)||r.is.array(this.media))&&(this.media=this.media[0]),this.config=r.extend({},n,o,function(){try{return JSON.parse(l.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new d(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",c),!r.is.nullOrUndefined(this.media)&&r.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(c.check().api){this.elements.original=this.media.cloneNode(!0);var u=this.media.tagName.toLowerCase(),h=null,p=null,m=null;switch(u){case"div":if(h=this.media.querySelector("iframe"),r.is.element(h)){if(p=h.getAttribute("src"),this.provider=r.getProviderByUrl(p),this.elements.container=this.media,this.media=h,this.elements.container.className="",m=r.getUrlParams(p),!r.is.empty(m)){var v=["1","true"];v.includes(m.autoplay)&&(this.config.autoplay=!0),v.includes(m.playsinline)&&(this.config.inline=!0),v.includes(m.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(r.is.empty(this.provider)||!Object.keys(t).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=i.video;break;case"video":case"audio":this.type=u,this.provider=t.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=c.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new f(this),this.media.plyr=this,r.is.element(this.elements.container)||(this.elements.container=r.createElement("div"),r.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),b.global.call(this),k.addStyleHook.call(this),N.setup.call(this),this.config.debug&&r.on(this.elements.container,this.config.events.join(" "),function(e){l.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&k.build.call(this),this.fullscreen=new g(this),this.ads=new y(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return a(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(r.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(r.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(r.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(r.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(r.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&r.is.element(this.elements.buttons.captions)){var t=r.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,r.toggleState(this.elements.buttons.captions,this.captions.active),r.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),r.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){c.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(r.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var i=0,n=e,s=!1;if(r.is.boolean(e)||(r.is.event(e)?(s="enterfullscreen"===e.type,n=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(i=2e3),"focusin"===e.type&&(i=3e3,r.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):n=r.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),n||this.paused||this.loading){if(r.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&r.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;c.touch&&(i=3e3)}n&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||s)&&(r.hasClass(t.elements.container,t.config.classNames.hideControls)||r.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),r.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(r.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!r.is.empty(t.config.settings)&&w.toggleMenu.call(t,!1)))},i))}}},{key:"on",value:function(e,t){r.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){r.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=function(){document.body.style.overflow="",t.embed=null,i?(Object.keys(t.elements).length&&(r.removeElement(t.elements.buttons.play),r.removeElement(t.elements.captions),r.removeElement(t.elements.controls),r.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),r.is.function(e)&&e()):(r.replaceElement(t.elements.original,t.elements.container),r.dispatchEvent.call(t,t.elements.original,"destroyed",!0),r.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":k.toggleNativeControls.call(this,!0),n();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),n();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(n),setTimeout(n,200)}}},{key:"supports",value:function(e){return c.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===t.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===t.youtube}},{key:"isVimeo",get:function(){return this.provider===t.vimeo}},{key:"isVideo",get:function(){return this.type===i.video}},{key:"isAudio",get:function(){return this.type===i.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;r.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;r.is.string(t)&&(t=Number(t)),r.is.number(t)||(t=this.storage.get("volume")),r.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;r.is.boolean(t)||(t=this.storage.get("muted")),r.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;r.is.number(e)&&(t=e),r.is.number(t)||(t=this.storage.get("speed")),r.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;r.is.string(e)&&(t=e),r.is.string(t)||(t=this.storage.get("quality")),r.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=r.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){P.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?r.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=r.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(r.is.string(e)&&(this.toggleCaptions(!r.is.empty(e)),!r.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,T.setText.call(this,null),T.setLanguage.call(this),r.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",i="inline";if(c.pip){var n=r.is.boolean(e)?e:this.pip===i;this.media.webkitSetPresentationMode(n?t:i)}},get:function(){return c.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,i){return c.check(e,t,i)}},{key:"loadSprite",value:function(e,t){return r.loadSprite(e,t)}}]),e}()});
//# sourceMappingURL=plyr.min.js.map
diff --git a/dist/plyr.min.js.map b/dist/plyr.min.js.map
index ccf70895..27338d1a 100644
--- a/dist/plyr.min.js.map
+++ b/dist/plyr.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["range","providers","types","defaults","window","navigator","language","split","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","undefined","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","event","forEach","cb","call","err","src","first","getElementsByTagName","parentNode","insertBefore","id","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","result","empty","setItem","stringify","catch","updateSprite","innerHTML","body","childNodes","prefix","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","value","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","youtube","vimeo","match","RegExp","$2","parser","href","search","startsWith","parseUrl","indexOf","reduce","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","find","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","exit","enter","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","Ads","ads","initialized","blocked","tag","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","setInterval","_this4","getRemainingTime","label","i18n","advertisement","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","_this8","init","start","adError","_this9","destroy","setTimeout","handleKey","code","which","getKeyCode","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IC2IcA,ED3IDC,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SERLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,wDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kC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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.16/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.16\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["range","providers","types","defaults","window","navigator","language","split","utils","input","this","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","document","documentMode","documentElement","style","userAgent","platform","url","responseType","arguments","undefined","Promise","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","event","forEach","cb","call","err","src","first","getElementsByTagName","parentNode","insertBefore","id","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","data","content","fetch","then","result","empty","setItem","stringify","catch","updateSprite","innerHTML","body","childNodes","prefix","Math","floor","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","s","selector","trim","className","replace","parts","value","charAt","class","toggle","contains","classList","removeAttribute","prototype","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","includes","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","buffer","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","CustomEvent","assign","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","source","shift","defineProperty","extend","apply","concat","toConsumableArray","youtube","vimeo","match","RegExp","$2","parser","href","search","startsWith","parseUrl","indexOf","reduce","params","hash","_hash$split2","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","w","h","find","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","exit","enter","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","Ads","ads","initialized","blocked","tag","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","setInterval","_this4","getRemainingTime","label","i18n","advertisement","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","left","toString","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","_this8","init","start","adError","_this9","destroy","setTimeout","handleKey","code","which","getKeyCode","repeat","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","global","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","create","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","wrap","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","step","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"uLAIA,IC2IcA,ED3IDC,SACF,gBACE,gBACF,SAGEC,SACF,cACA,SERLC,YAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,wDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEC,OAAOC,UAAUC,SAASC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kC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","file":"plyr.min.js","sourcesContent":["// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.17/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type],\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type],\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.17\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.js b/dist/plyr.polyfilled.js
index 6e2fe80a..c5673fa2 100644
--- a/dist/plyr.polyfilled.js
+++ b/dist/plyr.polyfilled.js
@@ -23,20 +23,52 @@ var global = module.exports = typeof window != 'undefined' && window.Math == Mat
if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef
});
+
+
+var _global$2 = Object.freeze({
+ default: _global,
+ __moduleExports: _global
+});
+
var _core = createCommonjsModule(function (module) {
var core = module.exports = { version: '2.5.3' };
if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef
});
+var _core_1 = _core.version;
+
+
+var _core$2 = Object.freeze({
+ default: _core,
+ __moduleExports: _core,
+ version: _core_1
+});
+
var _isObject = function (it) {
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
+
+
+var _isObject$2 = Object.freeze({
+ default: _isObject,
+ __moduleExports: _isObject
+});
+
+var isObject = ( _isObject$2 && _isObject ) || _isObject$2;
+
var _anObject = function (it) {
- if (!_isObject(it)) throw TypeError(it + ' is not an object!');
+ if (!isObject(it)) throw TypeError(it + ' is not an object!');
return it;
};
+
+
+var _anObject$2 = Object.freeze({
+ default: _anObject,
+ __moduleExports: _anObject
+});
+
var _fails = function (exec) {
try {
return !!exec();
@@ -45,42 +77,86 @@ var _fails = function (exec) {
}
};
-// Thank's IE8 for his funny defineProperty
-var _descriptors = !_fails(function () {
+
+
+var _fails$2 = Object.freeze({
+ default: _fails,
+ __moduleExports: _fails
+});
+
+var require$$0 = ( _fails$2 && _fails ) || _fails$2;
+
+var _descriptors = !require$$0(function () {
return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
});
-var document$1 = _global.document;
+
+
+var _descriptors$2 = Object.freeze({
+ default: _descriptors,
+ __moduleExports: _descriptors
+});
+
+var global$1 = ( _global$2 && _global ) || _global$2;
+
+var document$1 = global$1.document;
// typeof document.createElement is 'object' in old IE
-var is = _isObject(document$1) && _isObject(document$1.createElement);
+var is = isObject(document$1) && isObject(document$1.createElement);
var _domCreate = function (it) {
return is ? document$1.createElement(it) : {};
};
-var _ie8DomDefine = !_descriptors && !_fails(function () {
- return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;
+
+
+var _domCreate$2 = Object.freeze({
+ default: _domCreate,
+ __moduleExports: _domCreate
});
-// 7.1.1 ToPrimitive(input [, PreferredType])
+var require$$0$1 = ( _descriptors$2 && _descriptors ) || _descriptors$2;
+
+var cel = ( _domCreate$2 && _domCreate ) || _domCreate$2;
+
+var _ie8DomDefine = !require$$0$1 && !require$$0(function () {
+ return Object.defineProperty(cel('div'), 'a', { get: function () { return 7; } }).a != 7;
+});
+
+
+
+var _ie8DomDefine$2 = Object.freeze({
+ default: _ie8DomDefine,
+ __moduleExports: _ie8DomDefine
+});
-// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-// and the second argument - flag - preferred type is a string
var _toPrimitive = function (it, S) {
- if (!_isObject(it)) return it;
+ if (!isObject(it)) return it;
var fn, val;
- if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
- if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;
- if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;
+ if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
+ if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
throw TypeError("Can't convert object to primitive value");
};
+
+
+var _toPrimitive$2 = Object.freeze({
+ default: _toPrimitive,
+ __moduleExports: _toPrimitive
+});
+
+var anObject = ( _anObject$2 && _anObject ) || _anObject$2;
+
+var IE8_DOM_DEFINE = ( _ie8DomDefine$2 && _ie8DomDefine ) || _ie8DomDefine$2;
+
+var toPrimitive = ( _toPrimitive$2 && _toPrimitive ) || _toPrimitive$2;
+
var dP = Object.defineProperty;
-var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {
- _anObject(O);
- P = _toPrimitive(P, true);
- _anObject(Attributes);
- if (_ie8DomDefine) try {
+var f = require$$0$1 ? Object.defineProperty : function defineProperty(O, P, Attributes) {
+ anObject(O);
+ P = toPrimitive(P, true);
+ anObject(Attributes);
+ if (IE8_DOM_DEFINE) try {
return dP(O, P, Attributes);
} catch (e) { /* empty */ }
if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
@@ -92,6 +168,14 @@ var _objectDp = {
f: f
};
+
+
+var _objectDp$2 = Object.freeze({
+ default: _objectDp,
+ __moduleExports: _objectDp,
+ f: f
+});
+
var _propertyDesc = function (bitmap, value) {
return {
enumerable: !(bitmap & 1),
@@ -101,48 +185,88 @@ var _propertyDesc = function (bitmap, value) {
};
};
-var _hide = _descriptors ? function (object, key, value) {
- return _objectDp.f(object, key, _propertyDesc(1, value));
+
+
+var _propertyDesc$2 = Object.freeze({
+ default: _propertyDesc,
+ __moduleExports: _propertyDesc
+});
+
+var $defineProperty = ( _objectDp$2 && _objectDp ) || _objectDp$2;
+
+var createDesc = ( _propertyDesc$2 && _propertyDesc ) || _propertyDesc$2;
+
+var _hide = require$$0$1 ? function (object, key, value) {
+ return $defineProperty.f(object, key, createDesc(1, value));
} : function (object, key, value) {
object[key] = value;
return object;
};
+
+
+var _hide$2 = Object.freeze({
+ default: _hide,
+ __moduleExports: _hide
+});
+
var hasOwnProperty = {}.hasOwnProperty;
var _has = function (it, key) {
return hasOwnProperty.call(it, key);
};
+
+
+var _has$2 = Object.freeze({
+ default: _has,
+ __moduleExports: _has
+});
+
var id = 0;
var px = Math.random();
var _uid = function (key) {
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
+
+
+var _uid$2 = Object.freeze({
+ default: _uid,
+ __moduleExports: _uid
+});
+
+var hide = ( _hide$2 && _hide ) || _hide$2;
+
+var has = ( _has$2 && _has ) || _has$2;
+
+var uid = ( _uid$2 && _uid ) || _uid$2;
+
+var core = ( _core$2 && _core ) || _core$2;
+
var _redefine = createCommonjsModule(function (module) {
-var SRC = _uid('src');
+var SRC = uid('src');
var TO_STRING = 'toString';
var $toString = Function[TO_STRING];
var TPL = ('' + $toString).split(TO_STRING);
-_core.inspectSource = function (it) {
+core.inspectSource = function (it) {
return $toString.call(it);
};
(module.exports = function (O, key, val, safe) {
var isFunction = typeof val == 'function';
- if (isFunction) _has(val, 'name') || _hide(val, 'name', key);
+ if (isFunction) has(val, 'name') || hide(val, 'name', key);
if (O[key] === val) return;
- if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
- if (O === _global) {
+ if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
+ if (O === global$1) {
O[key] = val;
} else if (!safe) {
delete O[key];
- _hide(O, key, val);
+ hide(O, key, val);
} else if (O[key]) {
O[key] = val;
} else {
- _hide(O, key, val);
+ hide(O, key, val);
}
// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
})(Function.prototype, TO_STRING, function toString() {
@@ -150,15 +274,29 @@ _core.inspectSource = function (it) {
});
});
+
+
+var _redefine$2 = Object.freeze({
+ default: _redefine,
+ __moduleExports: _redefine
+});
+
var _aFunction = function (it) {
if (typeof it != 'function') throw TypeError(it + ' is not a function!');
return it;
};
-// optional / simple context binding
+
+
+var _aFunction$2 = Object.freeze({
+ default: _aFunction,
+ __moduleExports: _aFunction
+});
+
+var aFunction = ( _aFunction$2 && _aFunction ) || _aFunction$2;
var _ctx = function (fn, that, length) {
- _aFunction(fn);
+ aFunction(fn);
if (that === undefined) return fn;
switch (length) {
case 1: return function (a) {
@@ -176,6 +314,17 @@ var _ctx = function (fn, that, length) {
};
};
+
+
+var _ctx$2 = Object.freeze({
+ default: _ctx,
+ __moduleExports: _ctx
+});
+
+var redefine = ( _redefine$2 && _redefine ) || _redefine$2;
+
+var ctx = ( _ctx$2 && _ctx ) || _ctx$2;
+
var PROTOTYPE = 'prototype';
var $export = function (type, name, source) {
@@ -184,8 +333,8 @@ var $export = function (type, name, source) {
var IS_STATIC = type & $export.S;
var IS_PROTO = type & $export.P;
var IS_BIND = type & $export.B;
- var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];
- var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});
+ var target = IS_GLOBAL ? global$1 : IS_STATIC ? global$1[name] || (global$1[name] = {}) : (global$1[name] || {})[PROTOTYPE];
+ var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
var key, own, out, exp;
if (IS_GLOBAL) source = name;
@@ -195,15 +344,15 @@ var $export = function (type, name, source) {
// export native or passed
out = (own ? target : source)[key];
// bind timers to global for call from export context
- exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;
+ exp = IS_BIND && own ? ctx(out, global$1) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
// extend global
- if (target) _redefine(target, key, out, type & $export.U);
+ if (target) redefine(target, key, out, type & $export.U);
// export
- if (exports[key] != out) _hide(exports, key, exp);
+ if (exports[key] != out) hide(exports, key, exp);
if (IS_PROTO && expProto[key] != out) expProto[key] = out;
}
};
-_global.core = _core;
+global$1.core = core;
// type bitmap
$export.F = 1; // forced
$export.G = 2; // global
@@ -215,9 +364,16 @@ $export.U = 64; // safe
$export.R = 128; // real proto method for `library`
var _export = $export;
-var TYPED = _uid('typed_array');
-var VIEW$1 = _uid('view');
-var ABV = !!(_global.ArrayBuffer && _global.DataView);
+
+
+var _export$2 = Object.freeze({
+ default: _export,
+ __moduleExports: _export
+});
+
+var TYPED = uid('typed_array');
+var VIEW$1 = uid('view');
+var ABV = !!(global$1.ArrayBuffer && global$1.DataView);
var CONSTR = ABV;
var i = 0;
var l = 9;
@@ -228,9 +384,9 @@ var TypedArrayConstructors = (
).split(',');
while (i < l) {
- if (Typed = _global[TypedArrayConstructors[i++]]) {
- _hide(Typed.prototype, TYPED, true);
- _hide(Typed.prototype, VIEW$1, true);
+ if (Typed = global$1[TypedArrayConstructors[i++]]) {
+ hide(Typed.prototype, TYPED, true);
+ hide(Typed.prototype, VIEW$1, true);
} else CONSTR = false;
}
@@ -241,19 +397,55 @@ var _typed = {
VIEW: VIEW$1
};
+var _typed_1 = _typed.ABV;
+var _typed_2 = _typed.CONSTR;
+var _typed_3 = _typed.TYPED;
+var _typed_4 = _typed.VIEW;
+
+
+var _typed$2 = Object.freeze({
+ default: _typed,
+ __moduleExports: _typed,
+ ABV: _typed_1,
+ CONSTR: _typed_2,
+ TYPED: _typed_3,
+ VIEW: _typed_4
+});
+
var _library = false;
+
+
+var _library$2 = Object.freeze({
+ default: _library,
+ __moduleExports: _library
+});
+
var _redefineAll = function (target, src, safe) {
- for (var key in src) _redefine(target, key, src[key], safe);
+ for (var key in src) redefine(target, key, src[key], safe);
return target;
};
+
+
+var _redefineAll$2 = Object.freeze({
+ default: _redefineAll,
+ __moduleExports: _redefineAll
+});
+
var _anInstance = function (it, Constructor, name, forbiddenField) {
if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
throw TypeError(name + ': incorrect invocation!');
} return it;
};
+
+
+var _anInstance$2 = Object.freeze({
+ default: _anInstance,
+ __moduleExports: _anInstance
+});
+
// 7.1.4 ToInteger
var ceil = Math.ceil;
var floor = Math.floor;
@@ -261,67 +453,121 @@ var _toInteger = function (it) {
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
-// 7.1.15 ToLength
+
+
+var _toInteger$2 = Object.freeze({
+ default: _toInteger,
+ __moduleExports: _toInteger
+});
+
+var toInteger = ( _toInteger$2 && _toInteger ) || _toInteger$2;
var min = Math.min;
var _toLength = function (it) {
- return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+ return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};
-// https://tc39.github.io/ecma262/#sec-toindex
+var _toLength$2 = Object.freeze({
+ default: _toLength,
+ __moduleExports: _toLength
+});
+
+var toLength = ( _toLength$2 && _toLength ) || _toLength$2;
+
var _toIndex = function (it) {
if (it === undefined) return 0;
- var number = _toInteger(it);
- var length = _toLength(number);
+ var number = toInteger(it);
+ var length = toLength(number);
if (number !== length) throw RangeError('Wrong length!');
return length;
};
+
+
+var _toIndex$2 = Object.freeze({
+ default: _toIndex,
+ __moduleExports: _toIndex
+});
+
var toString = {}.toString;
var _cof = function (it) {
return toString.call(it).slice(8, -1);
};
-// fallback for non-array-like ES3 and non-enumerable old V8 strings
-// eslint-disable-next-line no-prototype-builtins
+
+var _cof$2 = Object.freeze({
+ default: _cof,
+ __moduleExports: _cof
+});
+
+var cof = ( _cof$2 && _cof ) || _cof$2;
+
var _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
- return _cof(it) == 'String' ? it.split('') : Object(it);
+ return cof(it) == 'String' ? it.split('') : Object(it);
};
+
+
+var _iobject$2 = Object.freeze({
+ default: _iobject,
+ __moduleExports: _iobject
+});
+
// 7.2.1 RequireObjectCoercible(argument)
var _defined = function (it) {
if (it == undefined) throw TypeError("Can't call method on " + it);
return it;
};
-// to indexed object, toObject with fallback for non-array-like ES3 strings
+var _defined$2 = Object.freeze({
+ default: _defined,
+ __moduleExports: _defined
+});
+
+var IObject = ( _iobject$2 && _iobject ) || _iobject$2;
+
+var defined = ( _defined$2 && _defined ) || _defined$2;
+
var _toIobject = function (it) {
- return _iobject(_defined(it));
+ return IObject(defined(it));
};
+
+
+var _toIobject$2 = Object.freeze({
+ default: _toIobject,
+ __moduleExports: _toIobject
+});
+
var max = Math.max;
var min$1 = Math.min;
var _toAbsoluteIndex = function (index, length) {
- index = _toInteger(index);
+ index = toInteger(index);
return index < 0 ? max(index + length, 0) : min$1(index, length);
};
-// false -> Array#indexOf
-// true -> Array#includes
+var _toAbsoluteIndex$2 = Object.freeze({
+ default: _toAbsoluteIndex,
+ __moduleExports: _toAbsoluteIndex
+});
+
+var toIObject = ( _toIobject$2 && _toIobject ) || _toIobject$2;
+
+var toAbsoluteIndex = ( _toAbsoluteIndex$2 && _toAbsoluteIndex ) || _toAbsoluteIndex$2;
var _arrayIncludes = function (IS_INCLUDES) {
return function ($this, el, fromIndex) {
- var O = _toIobject($this);
- var length = _toLength(O.length);
- var index = _toAbsoluteIndex(fromIndex, length);
+ var O = toIObject($this);
+ var length = toLength(O.length);
+ var index = toAbsoluteIndex(fromIndex, length);
var value;
// Array#includes uses SameValueZero equality algorithm
// eslint-disable-next-line no-self-compare
@@ -336,95 +582,191 @@ var _arrayIncludes = function (IS_INCLUDES) {
};
};
+
+
+var _arrayIncludes$2 = Object.freeze({
+ default: _arrayIncludes,
+ __moduleExports: _arrayIncludes
+});
+
var SHARED = '__core-js_shared__';
-var store = _global[SHARED] || (_global[SHARED] = {});
+var store = global$1[SHARED] || (global$1[SHARED] = {});
var _shared = function (key) {
return store[key] || (store[key] = {});
};
-var shared = _shared('keys');
+
+
+var _shared$2 = Object.freeze({
+ default: _shared,
+ __moduleExports: _shared
+});
+
+var shared$1 = ( _shared$2 && _shared ) || _shared$2;
+
+var shared = shared$1('keys');
var _sharedKey = function (key) {
- return shared[key] || (shared[key] = _uid(key));
+ return shared[key] || (shared[key] = uid(key));
};
-var arrayIndexOf = _arrayIncludes(false);
-var IE_PROTO = _sharedKey('IE_PROTO');
+
+
+var _sharedKey$2 = Object.freeze({
+ default: _sharedKey,
+ __moduleExports: _sharedKey
+});
+
+var require$$0$2 = ( _arrayIncludes$2 && _arrayIncludes ) || _arrayIncludes$2;
+
+var require$$0$3 = ( _sharedKey$2 && _sharedKey ) || _sharedKey$2;
+
+var arrayIndexOf = require$$0$2(false);
+var IE_PROTO = require$$0$3('IE_PROTO');
var _objectKeysInternal = function (object, names) {
- var O = _toIobject(object);
+ var O = toIObject(object);
var i = 0;
var result = [];
var key;
- for (key in O) if (key != IE_PROTO) _has(O, key) && result.push(key);
+ for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
// Don't enum bug & hidden keys
- while (names.length > i) if (_has(O, key = names[i++])) {
+ while (names.length > i) if (has(O, key = names[i++])) {
~arrayIndexOf(result, key) || result.push(key);
}
return result;
};
+
+
+var _objectKeysInternal$2 = Object.freeze({
+ default: _objectKeysInternal,
+ __moduleExports: _objectKeysInternal
+});
+
// IE 8- don't enum bug keys
var _enumBugKeys = (
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');
-// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
-var hiddenKeys = _enumBugKeys.concat('length', 'prototype');
+
+var _enumBugKeys$2 = Object.freeze({
+ default: _enumBugKeys,
+ __moduleExports: _enumBugKeys
+});
+
+var $keys = ( _objectKeysInternal$2 && _objectKeysInternal ) || _objectKeysInternal$2;
+
+var enumBugKeys = ( _enumBugKeys$2 && _enumBugKeys ) || _enumBugKeys$2;
+
+var hiddenKeys = enumBugKeys.concat('length', 'prototype');
var f$1 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
- return _objectKeysInternal(O, hiddenKeys);
+ return $keys(O, hiddenKeys);
};
var _objectGopn = {
f: f$1
};
-// 7.1.13 ToObject(argument)
+
+
+var _objectGopn$2 = Object.freeze({
+ default: _objectGopn,
+ __moduleExports: _objectGopn,
+ f: f$1
+});
var _toObject = function (it) {
- return Object(_defined(it));
+ return Object(defined(it));
};
-// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+
+
+var _toObject$2 = Object.freeze({
+ default: _toObject,
+ __moduleExports: _toObject
+});
+
+var toObject = ( _toObject$2 && _toObject ) || _toObject$2;
+
'use strict';
var _arrayFill = function fill(value /* , start = 0, end = @length */) {
- var O = _toObject(this);
- var length = _toLength(O.length);
+ var O = toObject(this);
+ var length = toLength(O.length);
var aLen = arguments.length;
- var index = _toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
+ var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
var end = aLen > 2 ? arguments[2] : undefined;
- var endPos = end === undefined ? length : _toAbsoluteIndex(end, length);
+ var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
while (endPos > index) O[index++] = value;
return O;
};
+
+
+var _arrayFill$2 = Object.freeze({
+ default: _arrayFill,
+ __moduleExports: _arrayFill
+});
+
var _wks = createCommonjsModule(function (module) {
-var store = _shared('wks');
+var store = shared$1('wks');
-var Symbol = _global.Symbol;
+var Symbol = global$1.Symbol;
var USE_SYMBOL = typeof Symbol == 'function';
var $exports = module.exports = function (name) {
return store[name] || (store[name] =
- USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));
+ USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
};
$exports.store = store;
});
-var def = _objectDp.f;
-var TAG = _wks('toStringTag');
+
+var _wks$2 = Object.freeze({
+ default: _wks,
+ __moduleExports: _wks
+});
+
+var wks = ( _wks$2 && _wks ) || _wks$2;
+
+var def = $defineProperty.f;
+
+var TAG = wks('toStringTag');
var _setToStringTag = function (it, tag, stat) {
- if (it && !_has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
+ if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
};
+
+
+var _setToStringTag$2 = Object.freeze({
+ default: _setToStringTag,
+ __moduleExports: _setToStringTag
+});
+
+var LIBRARY = ( _library$2 && _library ) || _library$2;
+
+var require$$5 = ( _typed$2 && _typed ) || _typed$2;
+
+var require$$3 = ( _redefineAll$2 && _redefineAll ) || _redefineAll$2;
+
+var anInstance = ( _anInstance$2 && _anInstance ) || _anInstance$2;
+
+var require$$14 = ( _toIndex$2 && _toIndex ) || _toIndex$2;
+
+var require$$0$4 = ( _objectGopn$2 && _objectGopn ) || _objectGopn$2;
+
+var require$$0$5 = ( _arrayFill$2 && _arrayFill ) || _arrayFill$2;
+
+var setToStringTag = ( _setToStringTag$2 && _setToStringTag ) || _setToStringTag$2;
+
var _typedBuffer = createCommonjsModule(function (module, exports) {
'use strict';
@@ -438,8 +780,8 @@ var _typedBuffer = createCommonjsModule(function (module, exports) {
-var gOPN = _objectGopn.f;
-var dP = _objectDp.f;
+var gOPN = require$$0$4.f;
+var dP = $defineProperty.f;
var ARRAY_BUFFER = 'ArrayBuffer';
@@ -447,12 +789,12 @@ var DATA_VIEW = 'DataView';
var PROTOTYPE = 'prototype';
var WRONG_LENGTH = 'Wrong length!';
var WRONG_INDEX = 'Wrong index!';
-var $ArrayBuffer = _global[ARRAY_BUFFER];
-var $DataView = _global[DATA_VIEW];
-var Math = _global.Math;
-var RangeError = _global.RangeError;
+var $ArrayBuffer = global$1[ARRAY_BUFFER];
+var $DataView = global$1[DATA_VIEW];
+var Math = global$1.Math;
+var RangeError = global$1.RangeError;
// eslint-disable-next-line no-shadow-restricted-names
-var Infinity = _global.Infinity;
+var Infinity = global$1.Infinity;
var BaseBuffer = $ArrayBuffer;
var abs = Math.abs;
var pow = Math.pow;
@@ -462,9 +804,9 @@ var LN2 = Math.LN2;
var BUFFER = 'buffer';
var BYTE_LENGTH = 'byteLength';
var BYTE_OFFSET = 'byteOffset';
-var $BUFFER = _descriptors ? '_b' : BUFFER;
-var $LENGTH = _descriptors ? '_l' : BYTE_LENGTH;
-var $OFFSET = _descriptors ? '_o' : BYTE_OFFSET;
+var $BUFFER = require$$0$1 ? '_b' : BUFFER;
+var $LENGTH = require$$0$1 ? '_l' : BYTE_LENGTH;
+var $OFFSET = require$$0$1 ? '_o' : BYTE_OFFSET;
// IEEE754 conversions based on https://github.com/feross/ieee754
function packIEEE754(value, mLen, nBytes) {
@@ -565,7 +907,7 @@ function addGetter(C, key, internal) {
function get(view, bytes, index, isLittleEndian) {
var numIndex = +index;
- var intIndex = _toIndex(numIndex);
+ var intIndex = require$$14(numIndex);
if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
var store = view[$BUFFER]._b;
var start = intIndex + view[$OFFSET];
@@ -574,7 +916,7 @@ function get(view, bytes, index, isLittleEndian) {
}
function set(view, bytes, index, conversion, value, isLittleEndian) {
var numIndex = +index;
- var intIndex = _toIndex(numIndex);
+ var intIndex = require$$14(numIndex);
if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
var store = view[$BUFFER]._b;
var start = intIndex + view[$OFFSET];
@@ -582,35 +924,35 @@ function set(view, bytes, index, conversion, value, isLittleEndian) {
for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
}
-if (!_typed.ABV) {
+if (!require$$5.ABV) {
$ArrayBuffer = function ArrayBuffer(length) {
- _anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
- var byteLength = _toIndex(length);
- this._b = _arrayFill.call(new Array(byteLength), 0);
+ anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
+ var byteLength = require$$14(length);
+ this._b = require$$0$5.call(new Array(byteLength), 0);
this[$LENGTH] = byteLength;
};
$DataView = function DataView(buffer, byteOffset, byteLength) {
- _anInstance(this, $DataView, DATA_VIEW);
- _anInstance(buffer, $ArrayBuffer, DATA_VIEW);
+ anInstance(this, $DataView, DATA_VIEW);
+ anInstance(buffer, $ArrayBuffer, DATA_VIEW);
var bufferLength = buffer[$LENGTH];
- var offset = _toInteger(byteOffset);
+ var offset = toInteger(byteOffset);
if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
- byteLength = byteLength === undefined ? bufferLength - offset : _toLength(byteLength);
+ byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
this[$BUFFER] = buffer;
this[$OFFSET] = offset;
this[$LENGTH] = byteLength;
};
- if (_descriptors) {
+ if (require$$0$1) {
addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
addGetter($DataView, BUFFER, '_b');
addGetter($DataView, BYTE_LENGTH, '_l');
addGetter($DataView, BYTE_OFFSET, '_o');
}
- _redefineAll($DataView[PROTOTYPE], {
+ require$$3($DataView[PROTOTYPE], {
getInt8: function getInt8(byteOffset) {
return get(this, 1, byteOffset)[0] << 24 >> 24;
},
@@ -663,32 +1005,32 @@ if (!_typed.ABV) {
}
});
} else {
- if (!_fails(function () {
+ if (!require$$0(function () {
$ArrayBuffer(1);
- }) || !_fails(function () {
+ }) || !require$$0(function () {
new $ArrayBuffer(-1); // eslint-disable-line no-new
- }) || _fails(function () {
+ }) || require$$0(function () {
new $ArrayBuffer(); // eslint-disable-line no-new
new $ArrayBuffer(1.5); // eslint-disable-line no-new
new $ArrayBuffer(NaN); // eslint-disable-line no-new
return $ArrayBuffer.name != ARRAY_BUFFER;
})) {
$ArrayBuffer = function ArrayBuffer(length) {
- _anInstance(this, $ArrayBuffer);
- return new BaseBuffer(_toIndex(length));
+ anInstance(this, $ArrayBuffer);
+ return new BaseBuffer(require$$14(length));
};
var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
- if (!((key = keys[j++]) in $ArrayBuffer)) _hide($ArrayBuffer, key, BaseBuffer[key]);
+ if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
}
- if (!_library) ArrayBufferProto.constructor = $ArrayBuffer;
+ if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
}
// iOS Safari 7.x bug
var view = new $DataView(new $ArrayBuffer(2));
var $setInt8 = $DataView[PROTOTYPE].setInt8;
view.setInt8(0, 2147483648);
view.setInt8(1, 2147483649);
- if (view.getInt8(0) || !view.getInt8(1)) _redefineAll($DataView[PROTOTYPE], {
+ if (view.getInt8(0) || !view.getInt8(1)) require$$3($DataView[PROTOTYPE], {
setInt8: function setInt8(byteOffset, value) {
$setInt8.call(this, byteOffset, value << 24 >> 24);
},
@@ -697,37 +1039,63 @@ if (!_typed.ABV) {
}
}, true);
}
-_setToStringTag($ArrayBuffer, ARRAY_BUFFER);
-_setToStringTag($DataView, DATA_VIEW);
-_hide($DataView[PROTOTYPE], _typed.VIEW, true);
+setToStringTag($ArrayBuffer, ARRAY_BUFFER);
+setToStringTag($DataView, DATA_VIEW);
+hide($DataView[PROTOTYPE], require$$5.VIEW, true);
exports[ARRAY_BUFFER] = $ArrayBuffer;
exports[DATA_VIEW] = $DataView;
});
-// 7.3.20 SpeciesConstructor(O, defaultConstructor)
-var SPECIES = _wks('species');
+var _typedBuffer$2 = Object.freeze({
+ default: _typedBuffer,
+ __moduleExports: _typedBuffer
+});
+
+var SPECIES = wks('species');
var _speciesConstructor = function (O, D) {
- var C = _anObject(O).constructor;
+ var C = anObject(O).constructor;
var S;
- return C === undefined || (S = _anObject(C)[SPECIES]) == undefined ? D : _aFunction(S);
+ return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
};
+
+
+var _speciesConstructor$2 = Object.freeze({
+ default: _speciesConstructor,
+ __moduleExports: _speciesConstructor
+});
+
'use strict';
-var SPECIES$1 = _wks('species');
+var SPECIES$1 = wks('species');
var _setSpecies = function (KEY) {
- var C = _global[KEY];
- if (_descriptors && C && !C[SPECIES$1]) _objectDp.f(C, SPECIES$1, {
+ var C = global$1[KEY];
+ if (require$$0$1 && C && !C[SPECIES$1]) $defineProperty.f(C, SPECIES$1, {
configurable: true,
get: function () { return this; }
});
};
+
+
+var _setSpecies$2 = Object.freeze({
+ default: _setSpecies,
+ __moduleExports: _setSpecies
+});
+
+var $export$1 = ( _export$2 && _export ) || _export$2;
+
+var require$$6 = ( _typedBuffer$2 && _typedBuffer ) || _typedBuffer$2;
+
+var speciesConstructor = ( _speciesConstructor$2 && _speciesConstructor ) || _speciesConstructor$2;
+
+var require$$5$1 = ( _setSpecies$2 && _setSpecies ) || _setSpecies$2;
+
'use strict';
@@ -736,34 +1104,34 @@ var _setSpecies = function (KEY) {
-var ArrayBuffer = _global.ArrayBuffer;
+var ArrayBuffer = global$1.ArrayBuffer;
-var $ArrayBuffer = _typedBuffer.ArrayBuffer;
-var $DataView = _typedBuffer.DataView;
-var $isView = _typed.ABV && ArrayBuffer.isView;
+var $ArrayBuffer = require$$6.ArrayBuffer;
+var $DataView = require$$6.DataView;
+var $isView = require$$5.ABV && ArrayBuffer.isView;
var $slice = $ArrayBuffer.prototype.slice;
-var VIEW = _typed.VIEW;
+var VIEW = require$$5.VIEW;
var ARRAY_BUFFER = 'ArrayBuffer';
-_export(_export.G + _export.W + _export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
+$export$1($export$1.G + $export$1.W + $export$1.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
-_export(_export.S + _export.F * !_typed.CONSTR, ARRAY_BUFFER, {
+$export$1($export$1.S + $export$1.F * !require$$5.CONSTR, ARRAY_BUFFER, {
// 24.1.3.1 ArrayBuffer.isView(arg)
isView: function isView(it) {
- return $isView && $isView(it) || _isObject(it) && VIEW in it;
+ return $isView && $isView(it) || isObject(it) && VIEW in it;
}
});
-_export(_export.P + _export.U + _export.F * _fails(function () {
+$export$1($export$1.P + $export$1.U + $export$1.F * require$$0(function () {
return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
}), ARRAY_BUFFER, {
// 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
slice: function slice(start, end) {
- if ($slice !== undefined && end === undefined) return $slice.call(_anObject(this), start); // FF fix
- var len = _anObject(this).byteLength;
- var first = _toAbsoluteIndex(start, len);
- var final = _toAbsoluteIndex(end === undefined ? len : end, len);
- var result = new (_speciesConstructor(this, $ArrayBuffer))(_toLength(final - first));
+ if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix
+ var len = anObject(this).byteLength;
+ var first = toAbsoluteIndex(start, len);
+ var final = toAbsoluteIndex(end === undefined ? len : end, len);
+ var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));
var viewS = new $DataView(this);
var viewT = new $DataView(result);
var index = 0;
@@ -773,13 +1141,11 @@ _export(_export.P + _export.U + _export.F * _fails(function () {
}
});
-_setSpecies(ARRAY_BUFFER);
-
-// getting tag from 19.1.3.6 Object.prototype.toString()
+require$$5$1(ARRAY_BUFFER);
-var TAG$1 = _wks('toStringTag');
+var TAG$1 = wks('toStringTag');
// ES3 wrong here
-var ARG = _cof(function () { return arguments; }()) == 'Arguments';
+var ARG = cof(function () { return arguments; }()) == 'Arguments';
// fallback for IE11 Script Access Denied error
var tryGet = function (it, key) {
@@ -794,61 +1160,101 @@ var _classof = function (it) {
// @@toStringTag case
: typeof (T = tryGet(O = Object(it), TAG$1)) == 'string' ? T
// builtinTag case
- : ARG ? _cof(O)
+ : ARG ? cof(O)
// ES3 arguments fallback
- : (B = _cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
+ : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
};
+
+
+var _classof$2 = Object.freeze({
+ default: _classof,
+ __moduleExports: _classof
+});
+
var _iterators = {};
-// check on default Array iterator
-var ITERATOR = _wks('iterator');
+
+var _iterators$2 = Object.freeze({
+ default: _iterators,
+ __moduleExports: _iterators
+});
+
+var Iterators = ( _iterators$2 && _iterators ) || _iterators$2;
+
+var ITERATOR = wks('iterator');
var ArrayProto = Array.prototype;
var _isArrayIter = function (it) {
- return it !== undefined && (_iterators.Array === it || ArrayProto[ITERATOR] === it);
+ return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
};
-// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+var _isArrayIter$2 = Object.freeze({
+ default: _isArrayIter,
+ __moduleExports: _isArrayIter
+});
var _objectKeys = Object.keys || function keys(O) {
- return _objectKeysInternal(O, _enumBugKeys);
+ return $keys(O, enumBugKeys);
};
-var _objectDps = _descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
- _anObject(O);
- var keys = _objectKeys(Properties);
+
+
+var _objectKeys$2 = Object.freeze({
+ default: _objectKeys,
+ __moduleExports: _objectKeys
+});
+
+var getKeys = ( _objectKeys$2 && _objectKeys ) || _objectKeys$2;
+
+var _objectDps = require$$0$1 ? Object.defineProperties : function defineProperties(O, Properties) {
+ anObject(O);
+ var keys = getKeys(Properties);
var length = keys.length;
var i = 0;
var P;
- while (length > i) _objectDp.f(O, P = keys[i++], Properties[P]);
+ while (length > i) $defineProperty.f(O, P = keys[i++], Properties[P]);
return O;
};
-var document$2 = _global.document;
+
+
+var _objectDps$2 = Object.freeze({
+ default: _objectDps,
+ __moduleExports: _objectDps
+});
+
+var document$2 = global$1.document;
var _html = document$2 && document$2.documentElement;
-// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+var _html$2 = Object.freeze({
+ default: _html,
+ __moduleExports: _html
+});
+
+var dPs = ( _objectDps$2 && _objectDps ) || _objectDps$2;
-var IE_PROTO$1 = _sharedKey('IE_PROTO');
+var html = ( _html$2 && _html ) || _html$2;
+
+var IE_PROTO$1 = require$$0$3('IE_PROTO');
var Empty = function () { /* empty */ };
var PROTOTYPE$1 = 'prototype';
// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function () {
// Thrash, waste and sodomy: IE GC bug
- var iframe = _domCreate('iframe');
- var i = _enumBugKeys.length;
+ var iframe = cel('iframe');
+ var i = enumBugKeys.length;
var lt = '<';
var gt = '>';
var iframeDocument;
iframe.style.display = 'none';
- _html.appendChild(iframe);
+ html.appendChild(iframe);
iframe.src = 'javascript:'; // eslint-disable-line no-script-url
// createDict = iframe.contentWindow.Object;
// html.removeChild(iframe);
@@ -857,83 +1263,113 @@ var createDict = function () {
iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
iframeDocument.close();
createDict = iframeDocument.F;
- while (i--) delete createDict[PROTOTYPE$1][_enumBugKeys[i]];
+ while (i--) delete createDict[PROTOTYPE$1][enumBugKeys[i]];
return createDict();
};
var _objectCreate = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
- Empty[PROTOTYPE$1] = _anObject(O);
+ Empty[PROTOTYPE$1] = anObject(O);
result = new Empty();
Empty[PROTOTYPE$1] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
result[IE_PROTO$1] = O;
} else result = createDict();
- return Properties === undefined ? result : _objectDps(result, Properties);
+ return Properties === undefined ? result : dPs(result, Properties);
};
-// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
-var IE_PROTO$2 = _sharedKey('IE_PROTO');
+var _objectCreate$2 = Object.freeze({
+ default: _objectCreate,
+ __moduleExports: _objectCreate
+});
+
+var IE_PROTO$2 = require$$0$3('IE_PROTO');
var ObjectProto = Object.prototype;
var _objectGpo = Object.getPrototypeOf || function (O) {
- O = _toObject(O);
- if (_has(O, IE_PROTO$2)) return O[IE_PROTO$2];
+ O = toObject(O);
+ if (has(O, IE_PROTO$2)) return O[IE_PROTO$2];
if (typeof O.constructor == 'function' && O instanceof O.constructor) {
return O.constructor.prototype;
} return O instanceof Object ? ObjectProto : null;
};
-var ITERATOR$1 = _wks('iterator');
-var core_getIteratorMethod = _core.getIteratorMethod = function (it) {
+
+var _objectGpo$2 = Object.freeze({
+ default: _objectGpo,
+ __moduleExports: _objectGpo
+});
+
+var classof = ( _classof$2 && _classof ) || _classof$2;
+
+var ITERATOR$1 = wks('iterator');
+
+var core_getIteratorMethod = core.getIteratorMethod = function (it) {
if (it != undefined) return it[ITERATOR$1]
|| it['@@iterator']
- || _iterators[_classof(it)];
+ || Iterators[classof(it)];
};
-// 7.2.2 IsArray(argument)
+
+
+var core_getIteratorMethod$2 = Object.freeze({
+ default: core_getIteratorMethod,
+ __moduleExports: core_getIteratorMethod
+});
var _isArray = Array.isArray || function isArray(arg) {
- return _cof(arg) == 'Array';
+ return cof(arg) == 'Array';
};
-var SPECIES$2 = _wks('species');
+
+
+var _isArray$2 = Object.freeze({
+ default: _isArray,
+ __moduleExports: _isArray
+});
+
+var isArray = ( _isArray$2 && _isArray ) || _isArray$2;
+
+var SPECIES$2 = wks('species');
var _arraySpeciesConstructor = function (original) {
var C;
- if (_isArray(original)) {
+ if (isArray(original)) {
C = original.constructor;
// cross-realm fallback
- if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;
- if (_isObject(C)) {
+ if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
+ if (isObject(C)) {
C = C[SPECIES$2];
if (C === null) C = undefined;
}
} return C === undefined ? Array : C;
};
-// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
+var _arraySpeciesConstructor$2 = Object.freeze({
+ default: _arraySpeciesConstructor,
+ __moduleExports: _arraySpeciesConstructor
+});
+
+var speciesConstructor$1 = ( _arraySpeciesConstructor$2 && _arraySpeciesConstructor ) || _arraySpeciesConstructor$2;
+
var _arraySpeciesCreate = function (original, length) {
- return new (_arraySpeciesConstructor(original))(length);
+ return new (speciesConstructor$1(original))(length);
};
-// 0 -> Array#forEach
-// 1 -> Array#map
-// 2 -> Array#filter
-// 3 -> Array#some
-// 4 -> Array#every
-// 5 -> Array#find
-// 6 -> Array#findIndex
-
+var _arraySpeciesCreate$2 = Object.freeze({
+ default: _arraySpeciesCreate,
+ __moduleExports: _arraySpeciesCreate
+});
+var asc = ( _arraySpeciesCreate$2 && _arraySpeciesCreate ) || _arraySpeciesCreate$2;
var _arrayMethods = function (TYPE, $create) {
var IS_MAP = TYPE == 1;
@@ -942,12 +1378,12 @@ var _arrayMethods = function (TYPE, $create) {
var IS_EVERY = TYPE == 4;
var IS_FIND_INDEX = TYPE == 6;
var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
- var create = $create || _arraySpeciesCreate;
+ var create = $create || asc;
return function ($this, callbackfn, that) {
- var O = _toObject($this);
- var self = _iobject(O);
- var f = _ctx(callbackfn, that, 3);
- var length = _toLength(self.length);
+ var O = toObject($this);
+ var self = IObject(O);
+ var f = ctx(callbackfn, that, 3);
+ var length = toLength(self.length);
var index = 0;
var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
var val, res;
@@ -968,18 +1404,40 @@ var _arrayMethods = function (TYPE, $create) {
};
};
-// 22.1.3.31 Array.prototype[@@unscopables]
-var UNSCOPABLES = _wks('unscopables');
+
+
+var _arrayMethods$2 = Object.freeze({
+ default: _arrayMethods,
+ __moduleExports: _arrayMethods
+});
+
+var UNSCOPABLES = wks('unscopables');
var ArrayProto$1 = Array.prototype;
-if (ArrayProto$1[UNSCOPABLES] == undefined) _hide(ArrayProto$1, UNSCOPABLES, {});
+if (ArrayProto$1[UNSCOPABLES] == undefined) hide(ArrayProto$1, UNSCOPABLES, {});
var _addToUnscopables = function (key) {
ArrayProto$1[UNSCOPABLES][key] = true;
};
+
+
+var _addToUnscopables$2 = Object.freeze({
+ default: _addToUnscopables,
+ __moduleExports: _addToUnscopables
+});
+
var _iterStep = function (done, value) {
return { value: value, done: !!done };
};
+
+
+var _iterStep$2 = Object.freeze({
+ default: _iterStep,
+ __moduleExports: _iterStep
+});
+
+var _create = ( _objectCreate$2 && _objectCreate ) || _objectCreate$2;
+
'use strict';
@@ -987,13 +1445,24 @@ var _iterStep = function (done, value) {
var IteratorPrototype = {};
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-_hide(IteratorPrototype, _wks('iterator'), function () { return this; });
+hide(IteratorPrototype, wks('iterator'), function () { return this; });
var _iterCreate = function (Constructor, NAME, next) {
- Constructor.prototype = _objectCreate(IteratorPrototype, { next: _propertyDesc(1, next) });
- _setToStringTag(Constructor, NAME + ' Iterator');
+ Constructor.prototype = _create(IteratorPrototype, { next: createDesc(1, next) });
+ setToStringTag(Constructor, NAME + ' Iterator');
};
+
+
+var _iterCreate$2 = Object.freeze({
+ default: _iterCreate,
+ __moduleExports: _iterCreate
+});
+
+var $iterCreate = ( _iterCreate$2 && _iterCreate ) || _iterCreate$2;
+
+var $getPrototypeOf = ( _objectGpo$2 && _objectGpo ) || _objectGpo$2;
+
'use strict';
@@ -1004,7 +1473,7 @@ var _iterCreate = function (Constructor, NAME, next) {
-var ITERATOR$2 = _wks('iterator');
+var ITERATOR$2 = wks('iterator');
var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
var FF_ITERATOR = '@@iterator';
var KEYS = 'keys';
@@ -1013,7 +1482,7 @@ var VALUES = 'values';
var returnThis = function () { return this; };
var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
- _iterCreate(Constructor, NAME, next);
+ $iterCreate(Constructor, NAME, next);
var getMethod = function (kind) {
if (!BUGGY && kind in proto) return proto[kind];
switch (kind) {
@@ -1032,12 +1501,12 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
var methods, key, IteratorPrototype;
// Fix native
if ($anyNative) {
- IteratorPrototype = _objectGpo($anyNative.call(new Base()));
+ IteratorPrototype = $getPrototypeOf($anyNative.call(new Base()));
if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
// Set @@toStringTag to native iterators
- _setToStringTag(IteratorPrototype, TAG, true);
+ setToStringTag(IteratorPrototype, TAG, true);
// fix for some old engines
- if (!_library && !_has(IteratorPrototype, ITERATOR$2)) _hide(IteratorPrototype, ITERATOR$2, returnThis);
+ if (!LIBRARY && !has(IteratorPrototype, ITERATOR$2)) hide(IteratorPrototype, ITERATOR$2, returnThis);
}
}
// fix Array#{values, @@iterator}.name in V8 / FF
@@ -1046,12 +1515,12 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
$default = function values() { return $native.call(this); };
}
// Define iterator
- if ((!_library || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR$2])) {
- _hide(proto, ITERATOR$2, $default);
+ if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR$2])) {
+ hide(proto, ITERATOR$2, $default);
}
// Plug for library
- _iterators[NAME] = $default;
- _iterators[TAG] = returnThis;
+ Iterators[NAME] = $default;
+ Iterators[TAG] = returnThis;
if (DEFAULT) {
methods = {
values: DEF_VALUES ? $default : getMethod(VALUES),
@@ -1059,12 +1528,25 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
entries: $entries
};
if (FORCED) for (key in methods) {
- if (!(key in proto)) _redefine(proto, key, methods[key]);
- } else _export(_export.P + _export.F * (BUGGY || VALUES_BUG), NAME, methods);
+ if (!(key in proto)) redefine(proto, key, methods[key]);
+ } else $export$1($export$1.P + $export$1.F * (BUGGY || VALUES_BUG), NAME, methods);
}
return methods;
};
+
+
+var _iterDefine$2 = Object.freeze({
+ default: _iterDefine,
+ __moduleExports: _iterDefine
+});
+
+var require$$1 = ( _addToUnscopables$2 && _addToUnscopables ) || _addToUnscopables$2;
+
+var step = ( _iterStep$2 && _iterStep ) || _iterStep$2;
+
+var $iterDefine = ( _iterDefine$2 && _iterDefine ) || _iterDefine$2;
+
'use strict';
@@ -1075,8 +1557,8 @@ var _iterDefine = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORC
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
-var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {
- this._t = _toIobject(iterated); // target
+var es6_array_iterator = $iterDefine(Array, 'Array', function (iterated, kind) {
+ this._t = toIObject(iterated); // target
this._i = 0; // next index
this._k = kind; // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
@@ -1086,21 +1568,28 @@ var es6_array_iterator = _iterDefine(Array, 'Array', function (iterated, kind) {
var index = this._i++;
if (!O || index >= O.length) {
this._t = undefined;
- return _iterStep(1);
+ return step(1);
}
- if (kind == 'keys') return _iterStep(0, index);
- if (kind == 'values') return _iterStep(0, O[index]);
- return _iterStep(0, [index, O[index]]);
+ if (kind == 'keys') return step(0, index);
+ if (kind == 'values') return step(0, O[index]);
+ return step(0, [index, O[index]]);
}, 'values');
// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
-_iterators.Arguments = _iterators.Array;
+Iterators.Arguments = Iterators.Array;
+
+require$$1('keys');
+require$$1('values');
+require$$1('entries');
+
-_addToUnscopables('keys');
-_addToUnscopables('values');
-_addToUnscopables('entries');
-var ITERATOR$3 = _wks('iterator');
+var es6_array_iterator$2 = Object.freeze({
+ default: es6_array_iterator,
+ __moduleExports: es6_array_iterator
+});
+
+var ITERATOR$3 = wks('iterator');
var SAFE_CLOSING = false;
try {
@@ -1123,19 +1612,25 @@ var _iterDetect = function (exec, skipClosing) {
return safe;
};
-// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
+
+
+var _iterDetect$2 = Object.freeze({
+ default: _iterDetect,
+ __moduleExports: _iterDetect
+});
+
'use strict';
var _arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
- var O = _toObject(this);
- var len = _toLength(O.length);
- var to = _toAbsoluteIndex(target, len);
- var from = _toAbsoluteIndex(start, len);
+ var O = toObject(this);
+ var len = toLength(O.length);
+ var to = toAbsoluteIndex(target, len);
+ var from = toAbsoluteIndex(start, len);
var end = arguments.length > 2 ? arguments[2] : undefined;
- var count = Math.min((end === undefined ? len : _toAbsoluteIndex(end, len)) - from, len - to);
+ var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
var inc = 1;
if (from < to && to < from + count) {
inc = -1;
@@ -1150,68 +1645,107 @@ var _arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, st
} return O;
};
+
+
+var _arrayCopyWithin$2 = Object.freeze({
+ default: _arrayCopyWithin,
+ __moduleExports: _arrayCopyWithin
+});
+
var f$3 = {}.propertyIsEnumerable;
var _objectPie = {
f: f$3
};
+
+
+var _objectPie$2 = Object.freeze({
+ default: _objectPie,
+ __moduleExports: _objectPie,
+ f: f$3
+});
+
+var require$$0$6 = ( _objectPie$2 && _objectPie ) || _objectPie$2;
+
var gOPD = Object.getOwnPropertyDescriptor;
-var f$2 = _descriptors ? gOPD : function getOwnPropertyDescriptor(O, P) {
- O = _toIobject(O);
- P = _toPrimitive(P, true);
- if (_ie8DomDefine) try {
+var f$2 = require$$0$1 ? gOPD : function getOwnPropertyDescriptor(O, P) {
+ O = toIObject(O);
+ P = toPrimitive(P, true);
+ if (IE8_DOM_DEFINE) try {
return gOPD(O, P);
} catch (e) { /* empty */ }
- if (_has(O, P)) return _propertyDesc(!_objectPie.f.call(O, P), O[P]);
+ if (has(O, P)) return createDesc(!require$$0$6.f.call(O, P), O[P]);
};
var _objectGopd = {
f: f$2
};
+
+
+var _objectGopd$2 = Object.freeze({
+ default: _objectGopd,
+ __moduleExports: _objectGopd,
+ f: f$2
+});
+
+var isArrayIter = ( _isArrayIter$2 && _isArrayIter ) || _isArrayIter$2;
+
+var getIterFn = ( core_getIteratorMethod$2 && core_getIteratorMethod ) || core_getIteratorMethod$2;
+
+var require$$0$7 = ( _arrayMethods$2 && _arrayMethods ) || _arrayMethods$2;
+
+var $iterators = ( es6_array_iterator$2 && es6_array_iterator ) || es6_array_iterator$2;
+
+var require$$0$8 = ( _iterDetect$2 && _iterDetect ) || _iterDetect$2;
+
+var require$$0$9 = ( _arrayCopyWithin$2 && _arrayCopyWithin ) || _arrayCopyWithin$2;
+
+var gOPD$1 = ( _objectGopd$2 && _objectGopd ) || _objectGopd$2;
+
var _typedArray = createCommonjsModule(function (module) {
'use strict';
-if (_descriptors) {
- var LIBRARY = _library;
- var global = _global;
- var fails = _fails;
- var $export = _export;
- var $typed = _typed;
- var $buffer = _typedBuffer;
- var ctx = _ctx;
- var anInstance = _anInstance;
- var propertyDesc = _propertyDesc;
- var hide = _hide;
- var redefineAll = _redefineAll;
- var toInteger = _toInteger;
- var toLength = _toLength;
- var toIndex = _toIndex;
- var toAbsoluteIndex = _toAbsoluteIndex;
- var toPrimitive = _toPrimitive;
- var has = _has;
- var classof$$1 = _classof;
- var isObject = _isObject;
- var toObject = _toObject;
- var isArrayIter$$1 = _isArrayIter;
- var create = _objectCreate;
- var getPrototypeOf = _objectGpo;
- var gOPN = _objectGopn.f;
- var getIterFn$$1 = core_getIteratorMethod;
- var uid = _uid;
- var wks = _wks;
- var createArrayMethod = _arrayMethods;
- var createArrayIncludes = _arrayIncludes;
- var speciesConstructor = _speciesConstructor;
- var ArrayIterators = es6_array_iterator;
- var Iterators$$1 = _iterators;
- var $iterDetect = _iterDetect;
- var setSpecies = _setSpecies;
- var arrayFill = _arrayFill;
- var arrayCopyWithin = _arrayCopyWithin;
- var $DP = _objectDp;
- var $GOPD = _objectGopd;
+if (require$$0$1) {
+ var LIBRARY$$1 = LIBRARY;
+ var global = global$1;
+ var fails = require$$0;
+ var $export = $export$1;
+ var $typed = require$$5;
+ var $buffer = require$$6;
+ var ctx$$1 = ctx;
+ var anInstance$$1 = anInstance;
+ var propertyDesc = createDesc;
+ var hide$$1 = hide;
+ var redefineAll = require$$3;
+ var toInteger$$1 = toInteger;
+ var toLength$$1 = toLength;
+ var toIndex = require$$14;
+ var toAbsoluteIndex$$1 = toAbsoluteIndex;
+ var toPrimitive$$1 = toPrimitive;
+ var has$$1 = has;
+ var classof$$1 = classof;
+ var isObject$$1 = isObject;
+ var toObject$$1 = toObject;
+ var isArrayIter$$1 = isArrayIter;
+ var create = _create;
+ var getPrototypeOf = $getPrototypeOf;
+ var gOPN = require$$0$4.f;
+ var getIterFn$$1 = getIterFn;
+ var uid$$1 = uid;
+ var wks$$1 = wks;
+ var createArrayMethod = require$$0$7;
+ var createArrayIncludes = require$$0$2;
+ var speciesConstructor$$1 = speciesConstructor;
+ var ArrayIterators = $iterators;
+ var Iterators$$1 = Iterators;
+ var $iterDetect = require$$0$8;
+ var setSpecies = require$$5$1;
+ var arrayFill = require$$0$5;
+ var arrayCopyWithin = require$$0$9;
+ var $DP = $defineProperty;
+ var $GOPD = gOPD$1;
var dP = $DP.f;
var gOPD = $GOPD.f;
var RangeError = global.RangeError;
@@ -1243,17 +1777,17 @@ if (_descriptors) {
var arraySlice = ArrayProto.slice;
var arrayToString = ArrayProto.toString;
var arrayToLocaleString = ArrayProto.toLocaleString;
- var ITERATOR = wks('iterator');
- var TAG = wks('toStringTag');
- var TYPED_CONSTRUCTOR = uid('typed_constructor');
- var DEF_CONSTRUCTOR = uid('def_constructor');
+ var ITERATOR = wks$$1('iterator');
+ var TAG = wks$$1('toStringTag');
+ var TYPED_CONSTRUCTOR = uid$$1('typed_constructor');
+ var DEF_CONSTRUCTOR = uid$$1('def_constructor');
var ALL_CONSTRUCTORS = $typed.CONSTR;
var TYPED_ARRAY = $typed.TYPED;
var VIEW = $typed.VIEW;
var WRONG_LENGTH = 'Wrong length!';
var $map = createArrayMethod(1, function (O, length) {
- return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
+ return allocate(speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]), length);
});
var LITTLE_ENDIAN = fails(function () {
@@ -1266,24 +1800,24 @@ if (_descriptors) {
});
var toOffset = function (it, BYTES) {
- var offset = toInteger(it);
+ var offset = toInteger$$1(it);
if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
return offset;
};
var validate = function (it) {
- if (isObject(it) && TYPED_ARRAY in it) return it;
+ if (isObject$$1(it) && TYPED_ARRAY in it) return it;
throw TypeError(it + ' is not a typed array!');
};
var allocate = function (C, length) {
- if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
+ if (!(isObject$$1(C) && TYPED_CONSTRUCTOR in C)) {
throw TypeError('It is not a typed array constructor!');
} return new C(length);
};
var speciesFromList = function (O, list) {
- return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
+ return fromList(speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]), list);
};
var fromList = function (C, list) {
@@ -1299,7 +1833,7 @@ if (_descriptors) {
};
var $from = function from(source /* , mapfn, thisArg */) {
- var O = toObject(source);
+ var O = toObject$$1(source);
var aLen = arguments.length;
var mapfn = aLen > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
@@ -1310,7 +1844,7 @@ if (_descriptors) {
values.push(step.value);
} O = values;
}
- if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
+ if (mapping && aLen > 2) mapfn = ctx$$1(mapfn, arguments[2], 2);
for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
result[i] = mapping ? mapfn(O[i], i) : O[i];
}
@@ -1397,11 +1931,11 @@ if (_descriptors) {
subarray: function subarray(begin, end) {
var O = validate(this);
var length = O.length;
- var $begin = toAbsoluteIndex(begin, length);
- return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
+ var $begin = toAbsoluteIndex$$1(begin, length);
+ return new (speciesConstructor$$1(O, O[DEF_CONSTRUCTOR]))(
O.buffer,
O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
- toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
+ toLength$$1((end === undefined ? length : toAbsoluteIndex$$1(end, length)) - $begin)
);
}
};
@@ -1414,8 +1948,8 @@ if (_descriptors) {
validate(this);
var offset = toOffset(arguments[1], 1);
var length = this.length;
- var src = toObject(arrayLike);
- var len = toLength(src.length);
+ var src = toObject$$1(arrayLike);
+ var len = toLength$$1(src.length);
var index = 0;
if (len + offset > length) throw RangeError(WRONG_LENGTH);
while (index < len) this[offset + index] = src[index++];
@@ -1434,27 +1968,27 @@ if (_descriptors) {
};
var isTAIndex = function (target, key) {
- return isObject(target)
+ return isObject$$1(target)
&& target[TYPED_ARRAY]
&& typeof key != 'symbol'
&& key in target
&& String(+key) == String(key);
};
var $getDesc = function getOwnPropertyDescriptor(target, key) {
- return isTAIndex(target, key = toPrimitive(key, true))
+ return isTAIndex(target, key = toPrimitive$$1(key, true))
? propertyDesc(2, target[key])
: gOPD(target, key);
};
var $setDesc = function defineProperty(target, key, desc) {
- if (isTAIndex(target, key = toPrimitive(key, true))
- && isObject(desc)
- && has(desc, 'value')
- && !has(desc, 'get')
- && !has(desc, 'set')
+ if (isTAIndex(target, key = toPrimitive$$1(key, true))
+ && isObject$$1(desc)
+ && has$$1(desc, 'value')
+ && !has$$1(desc, 'get')
+ && !has$$1(desc, 'set')
// TODO: add validation descriptor w/o calling accessors
&& !desc.configurable
- && (!has(desc, 'writable') || desc.writable)
- && (!has(desc, 'enumerable') || desc.enumerable)
+ && (!has$$1(desc, 'writable') || desc.writable)
+ && (!has$$1(desc, 'enumerable') || desc.enumerable)
) {
target[key] = desc.value;
return target;
@@ -1479,7 +2013,7 @@ if (_descriptors) {
var $TypedArrayPrototype$ = redefineAll({}, proto);
redefineAll($TypedArrayPrototype$, $iterators$$1);
- hide($TypedArrayPrototype$, ITERATOR, $iterators$$1.values);
+ hide$$1($TypedArrayPrototype$, ITERATOR, $iterators$$1.values);
redefineAll($TypedArrayPrototype$, {
slice: $slice,
set: $set,
@@ -1529,11 +2063,11 @@ if (_descriptors) {
};
if (FORCED) {
TypedArray = wrapper(function (that, data, $offset, $length) {
- anInstance(that, TypedArray, NAME, '_d');
+ anInstance$$1(that, TypedArray, NAME, '_d');
var index = 0;
var offset = 0;
var buffer, byteLength, length, klass;
- if (!isObject(data)) {
+ if (!isObject$$1(data)) {
length = toIndex(data);
byteLength = length * BYTES;
buffer = new $ArrayBuffer(byteLength);
@@ -1546,7 +2080,7 @@ if (_descriptors) {
byteLength = $len - offset;
if (byteLength < 0) throw RangeError(WRONG_LENGTH);
} else {
- byteLength = toLength($length) * BYTES;
+ byteLength = toLength$$1($length) * BYTES;
if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
}
length = byteLength / BYTES;
@@ -1555,7 +2089,7 @@ if (_descriptors) {
} else {
return $from.call(TypedArray, data);
}
- hide(that, '_d', {
+ hide$$1(that, '_d', {
b: buffer,
o: offset,
l: byteLength,
@@ -1565,7 +2099,7 @@ if (_descriptors) {
while (index < length) addElement(that, index++);
});
TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
- hide(TypedArrayPrototype, 'constructor', TypedArray);
+ hide$$1(TypedArrayPrototype, 'constructor', TypedArray);
} else if (!fails(function () {
TypedArray(1);
}) || !fails(function () {
@@ -1577,11 +2111,11 @@ if (_descriptors) {
new TypedArray(iter); // eslint-disable-line no-new
}, true)) {
TypedArray = wrapper(function (that, data, $offset, $length) {
- anInstance(that, TypedArray, NAME);
+ anInstance$$1(that, TypedArray, NAME);
var klass;
// `ws` module bug, temporarily remove validation length for Uint8Array
// https://github.com/websockets/ws/pull/645
- if (!isObject(data)) return new Base(toIndex(data));
+ if (!isObject$$1(data)) return new Base(toIndex(data));
if (data instanceof $ArrayBuffer || (klass = classof$$1(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
return $length !== undefined
? new Base(data, toOffset($offset, BYTES), $length)
@@ -1593,19 +2127,19 @@ if (_descriptors) {
return $from.call(TypedArray, data);
});
arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
- if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
+ if (!(key in TypedArray)) hide$$1(TypedArray, key, Base[key]);
});
TypedArray[PROTOTYPE] = TypedArrayPrototype;
- if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
+ if (!LIBRARY$$1) TypedArrayPrototype.constructor = TypedArray;
}
var $nativeIterator = TypedArrayPrototype[ITERATOR];
var CORRECT_ITER_NAME = !!$nativeIterator
&& ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
var $iterator = $iterators$$1.values;
- hide(TypedArray, TYPED_CONSTRUCTOR, true);
- hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
- hide(TypedArrayPrototype, VIEW, true);
- hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
+ hide$$1(TypedArray, TYPED_CONSTRUCTOR, true);
+ hide$$1(TypedArrayPrototype, TYPED_ARRAY, NAME);
+ hide$$1(TypedArrayPrototype, VIEW, true);
+ hide$$1(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
dP(TypedArrayPrototype, TAG, {
@@ -1626,7 +2160,7 @@ if (_descriptors) {
of: $of
});
- if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
+ if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide$$1(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
$export($export.P, NAME, proto);
@@ -1636,7 +2170,7 @@ if (_descriptors) {
$export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators$$1);
- if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
+ if (!LIBRARY$$1 && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
$export($export.P + $export.F * fails(function () {
new TypedArray(1).slice();
@@ -1649,93 +2183,109 @@ if (_descriptors) {
})), NAME, { toLocaleString: $toLocaleString });
Iterators$$1[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
- if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
+ if (!LIBRARY$$1 && !CORRECT_ITER_NAME) hide$$1(TypedArrayPrototype, ITERATOR, $iterator);
};
} else module.exports = function () { /* empty */ };
});
-_typedArray('Int8', 1, function (init) {
+
+
+var _typedArray$2 = Object.freeze({
+ default: _typedArray,
+ __moduleExports: _typedArray
+});
+
+var require$$0$10 = ( _typedArray$2 && _typedArray ) || _typedArray$2;
+
+require$$0$10('Int8', 1, function (init) {
return function Int8Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint8', 1, function (init) {
+require$$0$10('Uint8', 1, function (init) {
return function Uint8Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint8', 1, function (init) {
+require$$0$10('Uint8', 1, function (init) {
return function Uint8ClampedArray(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
}, true);
-_typedArray('Int16', 2, function (init) {
+require$$0$10('Int16', 2, function (init) {
return function Int16Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint16', 2, function (init) {
+require$$0$10('Uint16', 2, function (init) {
return function Uint16Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Int32', 4, function (init) {
+require$$0$10('Int32', 4, function (init) {
return function Int32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Uint32', 4, function (init) {
+require$$0$10('Uint32', 4, function (init) {
return function Uint32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Float32', 4, function (init) {
+require$$0$10('Float32', 4, function (init) {
return function Float32Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-_typedArray('Float64', 8, function (init) {
+require$$0$10('Float64', 8, function (init) {
return function Float64Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
-// call something on iterator step with safe closing on error
-
var _iterCall = function (iterator, fn, value, entries) {
try {
- return entries ? fn(_anObject(value)[0], value[1]) : fn(value);
+ return entries ? fn(anObject(value)[0], value[1]) : fn(value);
// 7.4.6 IteratorClose(iterator, completion)
} catch (e) {
var ret = iterator['return'];
- if (ret !== undefined) _anObject(ret.call(iterator));
+ if (ret !== undefined) anObject(ret.call(iterator));
throw e;
}
};
+
+
+var _iterCall$2 = Object.freeze({
+ default: _iterCall,
+ __moduleExports: _iterCall
+});
+
+var call = ( _iterCall$2 && _iterCall ) || _iterCall$2;
+
var _forOf = createCommonjsModule(function (module) {
var BREAK = {};
var RETURN = {};
var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
- var iterFn = ITERATOR ? function () { return iterable; } : core_getIteratorMethod(iterable);
- var f = _ctx(fn, that, entries ? 2 : 1);
+ var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
+ var f = ctx(fn, that, entries ? 2 : 1);
var index = 0;
var length, step, iterator, result;
if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
// fast case for arrays with default iterator
- if (_isArrayIter(iterFn)) for (length = _toLength(iterable.length); length > index; index++) {
- result = entries ? f(_anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
+ if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
+ result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
if (result === BREAK || result === RETURN) return result;
} else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
- result = _iterCall(iterator, f, step.value, entries);
+ result = call(iterator, f, step.value, entries);
if (result === BREAK || result === RETURN) return result;
}
};
@@ -1743,16 +2293,23 @@ exports.BREAK = BREAK;
exports.RETURN = RETURN;
});
+
+
+var _forOf$2 = Object.freeze({
+ default: _forOf,
+ __moduleExports: _forOf
+});
+
var _meta = createCommonjsModule(function (module) {
-var META = _uid('meta');
+var META = uid('meta');
-var setDesc = _objectDp.f;
+var setDesc = $defineProperty.f;
var id = 0;
var isExtensible = Object.isExtensible || function () {
return true;
};
-var FREEZE = !_fails(function () {
+var FREEZE = !require$$0(function () {
return isExtensible(Object.preventExtensions({}));
});
var setMeta = function (it) {
@@ -1763,8 +2320,8 @@ var setMeta = function (it) {
};
var fastKey = function (it, create) {
// return primitive with prefix
- if (!_isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
- if (!_has(it, META)) {
+ if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+ if (!has(it, META)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return 'F';
// not necessary to add metadata
@@ -1775,7 +2332,7 @@ var fastKey = function (it, create) {
} return it[META].i;
};
var getWeak = function (it, create) {
- if (!_has(it, META)) {
+ if (!has(it, META)) {
// can't set metadata to uncaught frozen object
if (!isExtensible(it)) return true;
// not necessary to add metadata
@@ -1787,7 +2344,7 @@ var getWeak = function (it, create) {
};
// add metadata on freeze-family methods calling
var onFreeze = function (it) {
- if (FREEZE && meta.NEED && isExtensible(it) && !_has(it, META)) setMeta(it);
+ if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
return it;
};
var meta = module.exports = {
@@ -1799,13 +2356,43 @@ var meta = module.exports = {
};
});
+var _meta_1 = _meta.KEY;
+var _meta_2 = _meta.NEED;
+var _meta_3 = _meta.fastKey;
+var _meta_4 = _meta.getWeak;
+var _meta_5 = _meta.onFreeze;
+
+
+var _meta$2 = Object.freeze({
+ default: _meta,
+ __moduleExports: _meta,
+ KEY: _meta_1,
+ NEED: _meta_2,
+ fastKey: _meta_3,
+ getWeak: _meta_4,
+ onFreeze: _meta_5
+});
+
var _validateCollection = function (it, TYPE) {
- if (!_isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
+ if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
return it;
};
+
+
+var _validateCollection$2 = Object.freeze({
+ default: _validateCollection,
+ __moduleExports: _validateCollection
+});
+
+var forOf = ( _forOf$2 && _forOf ) || _forOf$2;
+
+var require$$0$11 = ( _meta$2 && _meta ) || _meta$2;
+
+var validate = ( _validateCollection$2 && _validateCollection ) || _validateCollection$2;
+
'use strict';
-var dP$1 = _objectDp.f;
+var dP$1 = $defineProperty.f;
@@ -1815,9 +2402,9 @@ var dP$1 = _objectDp.f;
-var fastKey = _meta.fastKey;
+var fastKey = require$$0$11.fastKey;
-var SIZE = _descriptors ? '_s' : 'size';
+var SIZE = require$$0$1 ? '_s' : 'size';
var getEntry = function (that, key) {
// fast case
@@ -1833,19 +2420,19 @@ var getEntry = function (that, key) {
var _collectionStrong = {
getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
var C = wrapper(function (that, iterable) {
- _anInstance(that, C, NAME, '_i');
+ anInstance(that, C, NAME, '_i');
that._t = NAME; // collection type
- that._i = _objectCreate(null); // index
+ that._i = _create(null); // index
that._f = undefined; // first entry
that._l = undefined; // last entry
that[SIZE] = 0; // size
- if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
+ if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
});
- _redefineAll(C.prototype, {
+ require$$3(C.prototype, {
// 23.1.3.1 Map.prototype.clear()
// 23.2.3.2 Set.prototype.clear()
clear: function clear() {
- for (var that = _validateCollection(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
+ for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
entry.r = true;
if (entry.p) entry.p = entry.p.n = undefined;
delete data[entry.i];
@@ -1856,7 +2443,7 @@ var _collectionStrong = {
// 23.1.3.3 Map.prototype.delete(key)
// 23.2.3.4 Set.prototype.delete(value)
'delete': function (key) {
- var that = _validateCollection(this, NAME);
+ var that = validate(this, NAME);
var entry = getEntry(that, key);
if (entry) {
var next = entry.n;
@@ -1873,8 +2460,8 @@ var _collectionStrong = {
// 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
// 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
forEach: function forEach(callbackfn /* , that = undefined */) {
- _validateCollection(this, NAME);
- var f = _ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
+ validate(this, NAME);
+ var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
var entry;
while (entry = entry ? entry.n : this._f) {
f(entry.v, entry.k, this);
@@ -1885,12 +2472,12 @@ var _collectionStrong = {
// 23.1.3.7 Map.prototype.has(key)
// 23.2.3.7 Set.prototype.has(value)
has: function has(key) {
- return !!getEntry(_validateCollection(this, NAME), key);
+ return !!getEntry(validate(this, NAME), key);
}
});
- if (_descriptors) dP$1(C.prototype, 'size', {
+ if (require$$0$1) dP$1(C.prototype, 'size', {
get: function () {
- return _validateCollection(this, NAME)[SIZE];
+ return validate(this, NAME)[SIZE];
}
});
return C;
@@ -1922,8 +2509,8 @@ var _collectionStrong = {
setStrong: function (C, NAME, IS_MAP) {
// add .keys, .values, .entries, [@@iterator]
// 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
- _iterDefine(C, NAME, function (iterated, kind) {
- this._t = _validateCollection(iterated, NAME); // target
+ $iterDefine(C, NAME, function (iterated, kind) {
+ this._t = validate(iterated, NAME); // target
this._k = kind; // kind
this._l = undefined; // previous
}, function () {
@@ -1936,32 +2523,43 @@ var _collectionStrong = {
if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
// or finish the iteration
that._t = undefined;
- return _iterStep(1);
+ return step(1);
}
// return step by kind
- if (kind == 'keys') return _iterStep(0, entry.k);
- if (kind == 'values') return _iterStep(0, entry.v);
- return _iterStep(0, [entry.k, entry.v]);
+ if (kind == 'keys') return step(0, entry.k);
+ if (kind == 'values') return step(0, entry.v);
+ return step(0, [entry.k, entry.v]);
}, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
// add [@@species], 23.1.2.2, 23.2.2.2
- _setSpecies(NAME);
+ require$$5$1(NAME);
}
};
-// Works with __proto__ only. Old v8 can't work with null proto objects.
-/* eslint-disable no-proto */
+var _collectionStrong_1 = _collectionStrong.getConstructor;
+var _collectionStrong_2 = _collectionStrong.def;
+var _collectionStrong_3 = _collectionStrong.getEntry;
+var _collectionStrong_4 = _collectionStrong.setStrong;
+var _collectionStrong$2 = Object.freeze({
+ default: _collectionStrong,
+ __moduleExports: _collectionStrong,
+ getConstructor: _collectionStrong_1,
+ def: _collectionStrong_2,
+ getEntry: _collectionStrong_3,
+ setStrong: _collectionStrong_4
+});
+
var check = function (O, proto) {
- _anObject(O);
- if (!_isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
+ anObject(O);
+ if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
};
var _setProto = {
set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
function (test, buggy, set) {
try {
- set = _ctx(Function.call, _objectGopd.f(Object.prototype, '__proto__').set, 2);
+ set = ctx(Function.call, gOPD$1.f(Object.prototype, '__proto__').set, 2);
set(test, []);
buggy = !(test instanceof Array);
} catch (e) { buggy = true; }
@@ -1975,15 +2573,37 @@ var _setProto = {
check: check
};
-var setPrototypeOf = _setProto.set;
+var _setProto_1 = _setProto.set;
+var _setProto_2 = _setProto.check;
+
+
+var _setProto$2 = Object.freeze({
+ default: _setProto,
+ __moduleExports: _setProto,
+ set: _setProto_1,
+ check: _setProto_2
+});
+
+var setProto = ( _setProto$2 && _setProto ) || _setProto$2;
+
+var setPrototypeOf = setProto.set;
var _inheritIfRequired = function (that, target, C) {
var S = target.constructor;
var P;
- if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && _isObject(P) && setPrototypeOf) {
+ if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
setPrototypeOf(that, P);
} return that;
};
+
+
+var _inheritIfRequired$2 = Object.freeze({
+ default: _inheritIfRequired,
+ __moduleExports: _inheritIfRequired
+});
+
+var inheritIfRequired = ( _inheritIfRequired$2 && _inheritIfRequired ) || _inheritIfRequired$2;
+
'use strict';
@@ -1999,41 +2619,41 @@ var _inheritIfRequired = function (that, target, C) {
var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
- var Base = _global[NAME];
+ var Base = global$1[NAME];
var C = Base;
var ADDER = IS_MAP ? 'set' : 'add';
var proto = C && C.prototype;
var O = {};
var fixMethod = function (KEY) {
var fn = proto[KEY];
- _redefine(proto, KEY,
+ redefine(proto, KEY,
KEY == 'delete' ? function (a) {
- return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'has' ? function has(a) {
- return IS_WEAK && !_isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'get' ? function get(a) {
- return IS_WEAK && !_isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
+ return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
} : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }
: function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }
);
};
- if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !_fails(function () {
+ if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !require$$0(function () {
new C().entries().next();
}))) {
// create collection constructor
C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
- _redefineAll(C.prototype, methods);
- _meta.NEED = true;
+ require$$3(C.prototype, methods);
+ require$$0$11.NEED = true;
} else {
var instance = new C();
// early implementations not supports chaining
var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
// V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
- var THROWS_ON_PRIMITIVES = _fails(function () { instance.has(1); });
+ var THROWS_ON_PRIMITIVES = require$$0(function () { instance.has(1); });
// most early implementations doesn't supports iterables, most modern - not close it correctly
- var ACCEPT_ITERABLES = _iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new
+ var ACCEPT_ITERABLES = require$$0$8(function (iter) { new C(iter); }); // eslint-disable-line no-new
// for early implementations -0 and +0 not the same
- var BUGGY_ZERO = !IS_WEAK && _fails(function () {
+ var BUGGY_ZERO = !IS_WEAK && require$$0(function () {
// V8 ~ Chromium 42- fails only with 5+ elements
var $instance = new C();
var index = 5;
@@ -2042,9 +2662,9 @@ var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
});
if (!ACCEPT_ITERABLES) {
C = wrapper(function (target, iterable) {
- _anInstance(target, C, NAME);
- var that = _inheritIfRequired(new Base(), target, C);
- if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
+ anInstance(target, C, NAME);
+ var that = inheritIfRequired(new Base(), target, C);
+ if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
return that;
});
C.prototype = proto;
@@ -2060,35 +2680,46 @@ var _collection = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
if (IS_WEAK && proto.clear) delete proto.clear;
}
- _setToStringTag(C, NAME);
+ setToStringTag(C, NAME);
O[NAME] = C;
- _export(_export.G + _export.W + _export.F * (C != Base), O);
+ $export$1($export$1.G + $export$1.W + $export$1.F * (C != Base), O);
if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
return C;
};
+
+
+var _collection$2 = Object.freeze({
+ default: _collection,
+ __moduleExports: _collection
+});
+
+var strong = ( _collectionStrong$2 && _collectionStrong ) || _collectionStrong$2;
+
+var require$$0$12 = ( _collection$2 && _collection ) || _collection$2;
+
'use strict';
var MAP = 'Map';
// 23.1 Map Objects
-var es6_map = _collection(MAP, function (get) {
+var es6_map = require$$0$12(MAP, function (get) {
return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.1.3.6 Map.prototype.get(key)
get: function get(key) {
- var entry = _collectionStrong.getEntry(_validateCollection(this, MAP), key);
+ var entry = strong.getEntry(validate(this, MAP), key);
return entry && entry.v;
},
// 23.1.3.9 Map.prototype.set(key, value)
set: function set(key, value) {
- return _collectionStrong.def(_validateCollection(this, MAP), key === 0 ? 0 : key, value);
+ return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);
}
-}, _collectionStrong, true);
+}, strong, true);
'use strict';
@@ -2096,14 +2727,14 @@ var es6_map = _collection(MAP, function (get) {
var SET = 'Set';
// 23.2 Set Objects
-var es6_set = _collection(SET, function (get) {
+var es6_set = require$$0$12(SET, function (get) {
return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.2.3.1 Set.prototype.add(value)
add: function add(value) {
- return _collectionStrong.def(_validateCollection(this, SET), value = value === 0 ? 0 : value, value);
+ return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
}
-}, _collectionStrong);
+}, strong);
var f$4 = Object.getOwnPropertySymbols;
@@ -2111,6 +2742,16 @@ var _objectGops = {
f: f$4
};
+
+
+var _objectGops$2 = Object.freeze({
+ default: _objectGops,
+ __moduleExports: _objectGops,
+ f: f$4
+});
+
+var gOPS = ( _objectGops$2 && _objectGops ) || _objectGops$2;
+
'use strict';
// 19.1.2.1 Object.assign(target, source, ...)
@@ -2121,7 +2762,7 @@ var _objectGops = {
var $assign = Object.assign;
// should work with symbols and should have deterministic property order (V8 bug)
-var _objectAssign = !$assign || _fails(function () {
+var _objectAssign = !$assign || require$$0(function () {
var A = {};
var B = {};
// eslint-disable-next-line no-undef
@@ -2131,14 +2772,14 @@ var _objectAssign = !$assign || _fails(function () {
K.split('').forEach(function (k) { B[k] = k; });
return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
- var T = _toObject(target);
+ var T = toObject(target);
var aLen = arguments.length;
var index = 1;
- var getSymbols = _objectGops.f;
- var isEnum = _objectPie.f;
+ var getSymbols = gOPS.f;
+ var isEnum = require$$0$6.f;
while (aLen > index) {
- var S = _iobject(arguments[index++]);
- var keys = getSymbols ? _objectKeys(S).concat(getSymbols(S)) : _objectKeys(S);
+ var S = IObject(arguments[index++]);
+ var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
var length = keys.length;
var j = 0;
var key;
@@ -2146,9 +2787,16 @@ var _objectAssign = !$assign || _fails(function () {
} return T;
} : $assign;
+
+
+var _objectAssign$2 = Object.freeze({
+ default: _objectAssign,
+ __moduleExports: _objectAssign
+});
+
'use strict';
-var getWeak = _meta.getWeak;
+var getWeak = require$$0$11.getWeak;
@@ -2156,8 +2804,8 @@ var getWeak = _meta.getWeak;
-var arrayFind = _arrayMethods(5);
-var arrayFindIndex = _arrayMethods(6);
+var arrayFind = require$$0$7(5);
+var arrayFindIndex = require$$0$7(6);
var id$1 = 0;
// fallback for uncaught frozen keys
@@ -2197,34 +2845,34 @@ UncaughtFrozenStore.prototype = {
var _collectionWeak = {
getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {
var C = wrapper(function (that, iterable) {
- _anInstance(that, C, NAME, '_i');
+ anInstance(that, C, NAME, '_i');
that._t = NAME; // collection type
that._i = id$1++; // collection id
that._l = undefined; // leak store for uncaught frozen objects
- if (iterable != undefined) _forOf(iterable, IS_MAP, that[ADDER], that);
+ if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
});
- _redefineAll(C.prototype, {
+ require$$3(C.prototype, {
// 23.3.3.2 WeakMap.prototype.delete(key)
// 23.4.3.3 WeakSet.prototype.delete(value)
'delete': function (key) {
- if (!_isObject(key)) return false;
+ if (!isObject(key)) return false;
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME))['delete'](key);
- return data && _has(data, this._i) && delete data[this._i];
+ if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);
+ return data && has(data, this._i) && delete data[this._i];
},
// 23.3.3.4 WeakMap.prototype.has(key)
// 23.4.3.4 WeakSet.prototype.has(value)
- has: function has(key) {
- if (!_isObject(key)) return false;
+ has: function has$$1(key) {
+ if (!isObject(key)) return false;
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(_validateCollection(this, NAME)).has(key);
- return data && _has(data, this._i);
+ if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);
+ return data && has(data, this._i);
}
});
return C;
},
def: function (that, key, value) {
- var data = getWeak(_anObject(key), true);
+ var data = getWeak(anObject(key), true);
if (data === true) uncaughtFrozenStore(that).set(key, value);
else data[that._i] = value;
return that;
@@ -2232,9 +2880,26 @@ var _collectionWeak = {
ufstore: uncaughtFrozenStore
};
+var _collectionWeak_1 = _collectionWeak.getConstructor;
+var _collectionWeak_2 = _collectionWeak.def;
+var _collectionWeak_3 = _collectionWeak.ufstore;
+
+
+var _collectionWeak$2 = Object.freeze({
+ default: _collectionWeak,
+ __moduleExports: _collectionWeak,
+ getConstructor: _collectionWeak_1,
+ def: _collectionWeak_2,
+ ufstore: _collectionWeak_3
+});
+
+var require$$0$13 = ( _objectAssign$2 && _objectAssign ) || _objectAssign$2;
+
+var weak = ( _collectionWeak$2 && _collectionWeak ) || _collectionWeak$2;
+
var es6_weakMap = createCommonjsModule(function (module) {
'use strict';
-var each = _arrayMethods(0);
+var each = require$$0$7(0);
@@ -2243,9 +2908,9 @@ var each = _arrayMethods(0);
var WEAK_MAP = 'WeakMap';
-var getWeak = _meta.getWeak;
+var getWeak = require$$0$11.getWeak;
var isExtensible = Object.isExtensible;
-var uncaughtFrozenStore = _collectionWeak.ufstore;
+var uncaughtFrozenStore = weak.ufstore;
var tmp = {};
var InternalMap;
@@ -2258,32 +2923,32 @@ var wrapper = function (get) {
var methods = {
// 23.3.3.3 WeakMap.prototype.get(key)
get: function get(key) {
- if (_isObject(key)) {
+ if (isObject(key)) {
var data = getWeak(key);
- if (data === true) return uncaughtFrozenStore(_validateCollection(this, WEAK_MAP)).get(key);
+ if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
return data ? data[this._i] : undefined;
}
},
// 23.3.3.5 WeakMap.prototype.set(key, value)
set: function set(key, value) {
- return _collectionWeak.def(_validateCollection(this, WEAK_MAP), key, value);
+ return weak.def(validate(this, WEAK_MAP), key, value);
}
};
// 23.3 WeakMap Objects
-var $WeakMap = module.exports = _collection(WEAK_MAP, wrapper, methods, _collectionWeak, true, true);
+var $WeakMap = module.exports = require$$0$12(WEAK_MAP, wrapper, methods, weak, true, true);
// IE11 WeakMap frozen keys fix
-if (_fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
- InternalMap = _collectionWeak.getConstructor(wrapper, WEAK_MAP);
- _objectAssign(InternalMap.prototype, methods);
- _meta.NEED = true;
+if (require$$0(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {
+ InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
+ require$$0$13(InternalMap.prototype, methods);
+ require$$0$11.NEED = true;
each(['delete', 'has', 'get', 'set'], function (key) {
var proto = $WeakMap.prototype;
var method = proto[key];
- _redefine(proto, key, function (a, b) {
+ redefine(proto, key, function (a, b) {
// store frozen objects on internal weakmap shim
- if (_isObject(a) && !isExtensible(a)) {
+ if (isObject(a) && !isExtensible(a)) {
if (!this._f) this._f = new InternalMap();
var result = this._f[key](a, b);
return key == 'set' ? this : result;
@@ -2300,28 +2965,24 @@ if (_fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp
var WEAK_SET = 'WeakSet';
// 23.4 WeakSet Objects
-_collection(WEAK_SET, function (get) {
+require$$0$12(WEAK_SET, function (get) {
return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
}, {
// 23.4.3.1 WeakSet.prototype.add(value)
add: function add(value) {
- return _collectionWeak.def(_validateCollection(this, WEAK_SET), value, true);
+ return weak.def(validate(this, WEAK_SET), value, true);
}
-}, _collectionWeak, false, true);
-
-// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
-
-
+}, weak, false, true);
-var rApply = (_global.Reflect || {}).apply;
+var rApply = (global$1.Reflect || {}).apply;
var fApply = Function.apply;
// MS Edge argumentsList argument is optional
-_export(_export.S + _export.F * !_fails(function () {
+$export$1($export$1.S + $export$1.F * !require$$0(function () {
rApply(function () { /* empty */ });
}), 'Reflect', {
apply: function apply(target, thisArgument, argumentsList) {
- var T = _aFunction(target);
- var L = _anObject(argumentsList);
+ var T = aFunction(target);
+ var L = anObject(argumentsList);
return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
}
});
@@ -2343,6 +3004,15 @@ var _invoke = function (fn, args, that) {
} return fn.apply(that, args);
};
+
+
+var _invoke$2 = Object.freeze({
+ default: _invoke,
+ __moduleExports: _invoke
+});
+
+var invoke = ( _invoke$2 && _invoke ) || _invoke$2;
+
'use strict';
@@ -2359,41 +3029,42 @@ var construct = function (F, len, args) {
};
var _bind = Function.bind || function bind(that /* , ...args */) {
- var fn = _aFunction(this);
+ var fn = aFunction(this);
var partArgs = arraySlice.call(arguments, 1);
var bound = function (/* args... */) {
var args = partArgs.concat(arraySlice.call(arguments));
- return this instanceof bound ? construct(fn, args.length, args) : _invoke(fn, args, that);
+ return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
};
- if (_isObject(fn.prototype)) bound.prototype = fn.prototype;
+ if (isObject(fn.prototype)) bound.prototype = fn.prototype;
return bound;
};
-// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
-
-
-
+var _bind$2 = Object.freeze({
+ default: _bind,
+ __moduleExports: _bind
+});
+var bind = ( _bind$2 && _bind ) || _bind$2;
-var rConstruct = (_global.Reflect || {}).construct;
+var rConstruct = (global$1.Reflect || {}).construct;
// MS Edge supports only 2 arguments and argumentsList argument is optional
// FF Nightly sets third argument as `new.target`, but does not create `this` from it
-var NEW_TARGET_BUG = _fails(function () {
+var NEW_TARGET_BUG = require$$0(function () {
function F() { /* empty */ }
return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);
});
-var ARGS_BUG = !_fails(function () {
+var ARGS_BUG = !require$$0(function () {
rConstruct(function () { /* empty */ });
});
-_export(_export.S + _export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
+$export$1($export$1.S + $export$1.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
construct: function construct(Target, args /* , newTarget */) {
- _aFunction(Target);
- _anObject(args);
- var newTarget = arguments.length < 3 ? Target : _aFunction(arguments[2]);
+ aFunction(Target);
+ anObject(args);
+ var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
if (Target == newTarget) {
// w/o altered newTarget, optimization for 0-4 arguments
@@ -2407,33 +3078,26 @@ _export(_export.S + _export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
// w/o altered newTarget, lot of arguments case
var $args = [null];
$args.push.apply($args, args);
- return new (_bind.apply(Target, $args))();
+ return new (bind.apply(Target, $args))();
}
// with altered newTarget, not support built-in constructors
var proto = newTarget.prototype;
- var instance = _objectCreate(_isObject(proto) ? proto : Object.prototype);
+ var instance = _create(isObject(proto) ? proto : Object.prototype);
var result = Function.apply.call(Target, instance, args);
- return _isObject(result) ? result : instance;
+ return isObject(result) ? result : instance;
}
});
-// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
-
-
-
-
-
-// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
// eslint-disable-next-line no-undef
- Reflect.defineProperty(_objectDp.f({}, 1, { value: 1 }), 1, { value: 2 });
+ Reflect.defineProperty($defineProperty.f({}, 1, { value: 1 }), 1, { value: 2 });
}), 'Reflect', {
defineProperty: function defineProperty(target, propertyKey, attributes) {
- _anObject(target);
- propertyKey = _toPrimitive(propertyKey, true);
- _anObject(attributes);
+ anObject(target);
+ propertyKey = toPrimitive(propertyKey, true);
+ anObject(attributes);
try {
- _objectDp.f(target, propertyKey, attributes);
+ $defineProperty.f(target, propertyKey, attributes);
return true;
} catch (e) {
return false;
@@ -2441,107 +3105,80 @@ _export(_export.S + _export.F * _fails(function () {
}
});
-// 26.1.4 Reflect.deleteProperty(target, propertyKey)
-
-var gOPD$2 = _objectGopd.f;
+var gOPD$2 = gOPD$1.f;
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
deleteProperty: function deleteProperty(target, propertyKey) {
- var desc = gOPD$2(_anObject(target), propertyKey);
+ var desc = gOPD$2(anObject(target), propertyKey);
return desc && !desc.configurable ? false : delete target[propertyKey];
}
});
-// 26.1.6 Reflect.get(target, propertyKey [, receiver])
-
-
-
-
-
-
-
function get(target, propertyKey /* , receiver */) {
var receiver = arguments.length < 3 ? target : arguments[2];
var desc, proto;
- if (_anObject(target) === receiver) return target[propertyKey];
- if (desc = _objectGopd.f(target, propertyKey)) return _has(desc, 'value')
+ if (anObject(target) === receiver) return target[propertyKey];
+ if (desc = gOPD$1.f(target, propertyKey)) return has(desc, 'value')
? desc.value
: desc.get !== undefined
? desc.get.call(receiver)
: undefined;
- if (_isObject(proto = _objectGpo(target))) return get(proto, propertyKey, receiver);
+ if (isObject(proto = $getPrototypeOf(target))) return get(proto, propertyKey, receiver);
}
-_export(_export.S, 'Reflect', { get: get });
-
-// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
-
+$export$1($export$1.S, 'Reflect', { get: get });
-
-
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
- return _objectGopd.f(_anObject(target), propertyKey);
+ return gOPD$1.f(anObject(target), propertyKey);
}
});
-// 26.1.8 Reflect.getPrototypeOf(target)
-
-
-
-
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
getPrototypeOf: function getPrototypeOf(target) {
- return _objectGpo(_anObject(target));
+ return $getPrototypeOf(anObject(target));
}
});
-// 26.1.9 Reflect.has(target, propertyKey)
-
-
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
has: function has(target, propertyKey) {
return propertyKey in target;
}
});
-// 26.1.10 Reflect.isExtensible(target)
-
-
var $isExtensible = Object.isExtensible;
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
isExtensible: function isExtensible(target) {
- _anObject(target);
+ anObject(target);
return $isExtensible ? $isExtensible(target) : true;
}
});
-// all object keys, includes non-enumerable and symbols
-
-
-
-var Reflect$1 = _global.Reflect;
+var Reflect$1 = global$1.Reflect;
var _ownKeys = Reflect$1 && Reflect$1.ownKeys || function ownKeys(it) {
- var keys = _objectGopn.f(_anObject(it));
- var getSymbols = _objectGops.f;
+ var keys = require$$0$4.f(anObject(it));
+ var getSymbols = gOPS.f;
return getSymbols ? keys.concat(getSymbols(it)) : keys;
};
-// 26.1.11 Reflect.ownKeys(target)
-_export(_export.S, 'Reflect', { ownKeys: _ownKeys });
+var _ownKeys$2 = Object.freeze({
+ default: _ownKeys,
+ __moduleExports: _ownKeys
+});
-// 26.1.12 Reflect.preventExtensions(target)
+var ownKeys = ( _ownKeys$2 && _ownKeys ) || _ownKeys$2;
+$export$1($export$1.S, 'Reflect', { ownKeys: ownKeys });
var $preventExtensions = Object.preventExtensions;
-_export(_export.S, 'Reflect', {
+$export$1($export$1.S, 'Reflect', {
preventExtensions: function preventExtensions(target) {
- _anObject(target);
+ anObject(target);
try {
if ($preventExtensions) $preventExtensions(target);
return true;
@@ -2551,47 +3188,33 @@ _export(_export.S, 'Reflect', {
}
});
-// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
-
-
-
-
-
-
-
-
-
function set(target, propertyKey, V /* , receiver */) {
var receiver = arguments.length < 4 ? target : arguments[3];
- var ownDesc = _objectGopd.f(_anObject(target), propertyKey);
+ var ownDesc = gOPD$1.f(anObject(target), propertyKey);
var existingDescriptor, proto;
if (!ownDesc) {
- if (_isObject(proto = _objectGpo(target))) {
+ if (isObject(proto = $getPrototypeOf(target))) {
return set(proto, propertyKey, V, receiver);
}
- ownDesc = _propertyDesc(0);
+ ownDesc = createDesc(0);
}
- if (_has(ownDesc, 'value')) {
- if (ownDesc.writable === false || !_isObject(receiver)) return false;
- existingDescriptor = _objectGopd.f(receiver, propertyKey) || _propertyDesc(0);
+ if (has(ownDesc, 'value')) {
+ if (ownDesc.writable === false || !isObject(receiver)) return false;
+ existingDescriptor = gOPD$1.f(receiver, propertyKey) || createDesc(0);
existingDescriptor.value = V;
- _objectDp.f(receiver, propertyKey, existingDescriptor);
+ $defineProperty.f(receiver, propertyKey, existingDescriptor);
return true;
}
return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
}
-_export(_export.S, 'Reflect', { set: set });
-
-// 26.1.14 Reflect.setPrototypeOf(target, proto)
+$export$1($export$1.S, 'Reflect', { set: set });
-
-
-if (_setProto) _export(_export.S, 'Reflect', {
+if (setProto) $export$1($export$1.S, 'Reflect', {
setPrototypeOf: function setPrototypeOf(target, proto) {
- _setProto.check(target, proto);
+ setProto.check(target, proto);
try {
- _setProto.set(target, proto);
+ setProto.set(target, proto);
return true;
} catch (e) {
return false;
@@ -2599,11 +3222,11 @@ if (_setProto) _export(_export.S, 'Reflect', {
}
});
-var process$1 = _global.process;
-var setTask = _global.setImmediate;
-var clearTask = _global.clearImmediate;
-var MessageChannel = _global.MessageChannel;
-var Dispatch = _global.Dispatch;
+var process$1 = global$1.process;
+var setTask = global$1.setImmediate;
+var clearTask = global$1.clearImmediate;
+var MessageChannel = global$1.MessageChannel;
+var Dispatch = global$1.Dispatch;
var counter = 0;
var queue = {};
var ONREADYSTATECHANGE = 'onreadystatechange';
@@ -2630,7 +3253,7 @@ if (!setTask || !clearTask) {
while (arguments.length > i) args.push(arguments[i++]);
queue[++counter] = function () {
// eslint-disable-next-line no-new-func
- _invoke(typeof fn == 'function' ? fn : Function(fn), args);
+ invoke(typeof fn == 'function' ? fn : Function(fn), args);
};
defer(counter);
return counter;
@@ -2639,40 +3262,40 @@ if (!setTask || !clearTask) {
delete queue[id];
};
// Node.js 0.8-
- if (_cof(process$1) == 'process') {
+ if (cof(process$1) == 'process') {
defer = function (id) {
- process$1.nextTick(_ctx(run, id, 1));
+ process$1.nextTick(ctx(run, id, 1));
};
// Sphere (JS game engine) Dispatch API
} else if (Dispatch && Dispatch.now) {
defer = function (id) {
- Dispatch.now(_ctx(run, id, 1));
+ Dispatch.now(ctx(run, id, 1));
};
// Browsers with MessageChannel, includes WebWorkers
} else if (MessageChannel) {
channel = new MessageChannel();
port = channel.port2;
channel.port1.onmessage = listener;
- defer = _ctx(port.postMessage, port, 1);
+ defer = ctx(port.postMessage, port, 1);
// Browsers with postMessage, skip WebWorkers
// IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
- } else if (_global.addEventListener && typeof postMessage == 'function' && !_global.importScripts) {
+ } else if (global$1.addEventListener && typeof postMessage == 'function' && !global$1.importScripts) {
defer = function (id) {
- _global.postMessage(id + '', '*');
+ global$1.postMessage(id + '', '*');
};
- _global.addEventListener('message', listener, false);
+ global$1.addEventListener('message', listener, false);
// IE8-
- } else if (ONREADYSTATECHANGE in _domCreate('script')) {
+ } else if (ONREADYSTATECHANGE in cel('script')) {
defer = function (id) {
- _html.appendChild(_domCreate('script'))[ONREADYSTATECHANGE] = function () {
- _html.removeChild(this);
+ html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
+ html.removeChild(this);
run.call(id);
};
};
// Rest old browsers
} else {
defer = function (id) {
- setTimeout(_ctx(run, id, 1), 0);
+ setTimeout(ctx(run, id, 1), 0);
};
}
}
@@ -2681,11 +3304,24 @@ var _task = {
clear: clearTask
};
-var macrotask = _task.set;
-var Observer = _global.MutationObserver || _global.WebKitMutationObserver;
-var process$2 = _global.process;
-var Promise$1 = _global.Promise;
-var isNode$1 = _cof(process$2) == 'process';
+var _task_1 = _task.set;
+var _task_2 = _task.clear;
+
+
+var _task$2 = Object.freeze({
+ default: _task,
+ __moduleExports: _task,
+ set: _task_1,
+ clear: _task_2
+});
+
+var $task = ( _task$2 && _task ) || _task$2;
+
+var macrotask = $task.set;
+var Observer = global$1.MutationObserver || global$1.WebKitMutationObserver;
+var process$2 = global$1.process;
+var Promise$1 = global$1.Promise;
+var isNode$1 = cof(process$2) == 'process';
var _microtask = function () {
var head, last, notify;
@@ -2713,7 +3349,7 @@ var _microtask = function () {
process$2.nextTick(flush);
};
// browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
- } else if (Observer && !(_global.navigator && _global.navigator.standalone)) {
+ } else if (Observer && !(global$1.navigator && global$1.navigator.standalone)) {
var toggle = true;
var node = document.createTextNode('');
new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
@@ -2735,7 +3371,7 @@ var _microtask = function () {
} else {
notify = function () {
// strange IE + webpack dev server bug - use .call(global)
- macrotask.call(_global, flush);
+ macrotask.call(global$1, flush);
};
}
@@ -2749,6 +3385,13 @@ var _microtask = function () {
};
};
+
+
+var _microtask$2 = Object.freeze({
+ default: _microtask,
+ __moduleExports: _microtask
+});
+
'use strict';
// 25.4.1.5 NewPromiseCapability(C)
@@ -2760,8 +3403,8 @@ function PromiseCapability(C) {
resolve = $$resolve;
reject = $$reject;
});
- this.resolve = _aFunction(resolve);
- this.reject = _aFunction(reject);
+ this.resolve = aFunction(resolve);
+ this.reject = aFunction(reject);
}
var f$5 = function (C) {
@@ -2772,6 +3415,14 @@ var _newPromiseCapability = {
f: f$5
};
+
+
+var _newPromiseCapability$2 = Object.freeze({
+ default: _newPromiseCapability,
+ __moduleExports: _newPromiseCapability,
+ f: f$5
+});
+
var _perform = function (exec) {
try {
return { e: false, v: exec() };
@@ -2780,15 +3431,37 @@ var _perform = function (exec) {
}
};
+
+
+var _perform$2 = Object.freeze({
+ default: _perform,
+ __moduleExports: _perform
+});
+
+var newPromiseCapability$1 = ( _newPromiseCapability$2 && _newPromiseCapability ) || _newPromiseCapability$2;
+
var _promiseResolve = function (C, x) {
- _anObject(C);
- if (_isObject(x) && x.constructor === C) return x;
- var promiseCapability = _newPromiseCapability.f(C);
+ anObject(C);
+ if (isObject(x) && x.constructor === C) return x;
+ var promiseCapability = newPromiseCapability$1.f(C);
var resolve = promiseCapability.resolve;
resolve(x);
return promiseCapability.promise;
};
+
+
+var _promiseResolve$2 = Object.freeze({
+ default: _promiseResolve,
+ __moduleExports: _promiseResolve
+});
+
+var require$$1$1 = ( _microtask$2 && _microtask ) || _microtask$2;
+
+var perform = ( _perform$2 && _perform ) || _perform$2;
+
+var promiseResolve = ( _promiseResolve$2 && _promiseResolve ) || _promiseResolve$2;
+
'use strict';
@@ -2800,28 +3473,28 @@ var _promiseResolve = function (C, x) {
-var task = _task.set;
-var microtask = _microtask();
+var task = $task.set;
+var microtask = require$$1$1();
var PROMISE = 'Promise';
-var TypeError$1 = _global.TypeError;
-var process = _global.process;
-var $Promise = _global[PROMISE];
-var isNode = _classof(process) == 'process';
+var TypeError$1 = global$1.TypeError;
+var process = global$1.process;
+var $Promise = global$1[PROMISE];
+var isNode = classof(process) == 'process';
var empty = function () { /* empty */ };
var Internal;
var newGenericPromiseCapability;
var OwnPromiseCapability;
var Wrapper;
-var newPromiseCapability = newGenericPromiseCapability = _newPromiseCapability.f;
+var newPromiseCapability = newGenericPromiseCapability = newPromiseCapability$1.f;
var USE_NATIVE = !!function () {
try {
// correct subclassing with @@species support
var promise = $Promise.resolve(1);
- var FakePromise = (promise.constructor = {})[_wks('species')] = function (exec) {
+ var FakePromise = (promise.constructor = {})[wks('species')] = function (exec) {
exec(empty, empty);
};
// unhandled rejections tracking support, NodeJS Promise without it fails @@species test
@@ -2832,7 +3505,7 @@ var USE_NATIVE = !!function () {
// helpers
var isThenable = function (it) {
var then;
- return _isObject(it) && typeof (then = it.then) == 'function' ? then : false;
+ return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
};
var notify = function (promise, isReject) {
if (promise._n) return;
@@ -2877,17 +3550,17 @@ var notify = function (promise, isReject) {
});
};
var onUnhandled = function (promise) {
- task.call(_global, function () {
+ task.call(global$1, function () {
var value = promise._v;
var unhandled = isUnhandled(promise);
var result, handler, console;
if (unhandled) {
- result = _perform(function () {
+ result = perform(function () {
if (isNode) {
process.emit('unhandledRejection', value, promise);
- } else if (handler = _global.onunhandledrejection) {
+ } else if (handler = global$1.onunhandledrejection) {
handler({ promise: promise, reason: value });
- } else if ((console = _global.console) && console.error) {
+ } else if ((console = global$1.console) && console.error) {
console.error('Unhandled promise rejection', value);
}
});
@@ -2901,11 +3574,11 @@ var isUnhandled = function (promise) {
return promise._h !== 1 && (promise._a || promise._c).length === 0;
};
var onHandleUnhandled = function (promise) {
- task.call(_global, function () {
+ task.call(global$1, function () {
var handler;
if (isNode) {
process.emit('rejectionHandled', promise);
- } else if (handler = _global.onrejectionhandled) {
+ } else if (handler = global$1.onrejectionhandled) {
handler({ promise: promise, reason: promise._v });
}
});
@@ -2932,7 +3605,7 @@ var $resolve = function (value) {
microtask(function () {
var wrapper = { _w: promise, _d: false }; // wrap
try {
- then.call(value, _ctx($resolve, wrapper, 1), _ctx($reject, wrapper, 1));
+ then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
} catch (e) {
$reject.call(wrapper, e);
}
@@ -2951,11 +3624,11 @@ var $resolve = function (value) {
if (!USE_NATIVE) {
// 25.4.3.1 Promise(executor)
$Promise = function Promise(executor) {
- _anInstance(this, $Promise, PROMISE, '_h');
- _aFunction(executor);
+ anInstance(this, $Promise, PROMISE, '_h');
+ aFunction(executor);
Internal.call(this);
try {
- executor(_ctx($resolve, this, 1), _ctx($reject, this, 1));
+ executor(ctx($resolve, this, 1), ctx($reject, this, 1));
} catch (err) {
$reject.call(this, err);
}
@@ -2970,10 +3643,10 @@ if (!USE_NATIVE) {
this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
this._n = false; // <- notify
};
- Internal.prototype = _redefineAll($Promise.prototype, {
+ Internal.prototype = require$$3($Promise.prototype, {
// 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
then: function then(onFulfilled, onRejected) {
- var reaction = newPromiseCapability(_speciesConstructor(this, $Promise));
+ var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
reaction.fail = typeof onRejected == 'function' && onRejected;
reaction.domain = isNode ? process.domain : undefined;
@@ -2990,23 +3663,23 @@ if (!USE_NATIVE) {
OwnPromiseCapability = function () {
var promise = new Internal();
this.promise = promise;
- this.resolve = _ctx($resolve, promise, 1);
- this.reject = _ctx($reject, promise, 1);
+ this.resolve = ctx($resolve, promise, 1);
+ this.reject = ctx($reject, promise, 1);
};
- _newPromiseCapability.f = newPromiseCapability = function (C) {
+ newPromiseCapability$1.f = newPromiseCapability = function (C) {
return C === $Promise || C === Wrapper
? new OwnPromiseCapability(C)
: newGenericPromiseCapability(C);
};
}
-_export(_export.G + _export.W + _export.F * !USE_NATIVE, { Promise: $Promise });
-_setToStringTag($Promise, PROMISE);
-_setSpecies(PROMISE);
-Wrapper = _core[PROMISE];
+$export$1($export$1.G + $export$1.W + $export$1.F * !USE_NATIVE, { Promise: $Promise });
+setToStringTag($Promise, PROMISE);
+require$$5$1(PROMISE);
+Wrapper = core[PROMISE];
// statics
-_export(_export.S + _export.F * !USE_NATIVE, PROMISE, {
+$export$1($export$1.S + $export$1.F * !USE_NATIVE, PROMISE, {
// 25.4.4.5 Promise.reject(r)
reject: function reject(r) {
var capability = newPromiseCapability(this);
@@ -3015,13 +3688,13 @@ _export(_export.S + _export.F * !USE_NATIVE, PROMISE, {
return capability.promise;
}
});
-_export(_export.S + _export.F * (_library || !USE_NATIVE), PROMISE, {
+$export$1($export$1.S + $export$1.F * (LIBRARY || !USE_NATIVE), PROMISE, {
// 25.4.4.6 Promise.resolve(x)
resolve: function resolve(x) {
- return _promiseResolve(_library && this === Wrapper ? $Promise : this, x);
+ return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
}
});
-_export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
+$export$1($export$1.S + $export$1.F * !(USE_NATIVE && require$$0$8(function (iter) {
$Promise.all(iter)['catch'](empty);
})), PROMISE, {
// 25.4.4.1 Promise.all(iterable)
@@ -3030,11 +3703,11 @@ _export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
var capability = newPromiseCapability(C);
var resolve = capability.resolve;
var reject = capability.reject;
- var result = _perform(function () {
+ var result = perform(function () {
var values = [];
var index = 0;
var remaining = 1;
- _forOf(iterable, false, function (promise) {
+ forOf(iterable, false, function (promise) {
var $index = index++;
var alreadyCalled = false;
values.push(undefined);
@@ -3056,8 +3729,8 @@ _export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
var C = this;
var capability = newPromiseCapability(C);
var reject = capability.reject;
- var result = _perform(function () {
- _forOf(iterable, false, function (promise) {
+ var result = perform(function () {
+ forOf(iterable, false, function (promise) {
C.resolve(promise).then(capability.resolve, reject);
});
});
@@ -3066,37 +3739,55 @@ _export(_export.S + _export.F * !(USE_NATIVE && _iterDetect(function (iter) {
}
});
-var f$6 = _wks;
+var f$6 = wks;
var _wksExt = {
f: f$6
};
-var defineProperty = _objectDp.f;
+
+
+var _wksExt$2 = Object.freeze({
+ default: _wksExt,
+ __moduleExports: _wksExt,
+ f: f$6
+});
+
+var wksExt = ( _wksExt$2 && _wksExt ) || _wksExt$2;
+
+var defineProperty = $defineProperty.f;
var _wksDefine = function (name) {
- var $Symbol = _core.Symbol || (_core.Symbol = _library ? {} : _global.Symbol || {});
- if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: _wksExt.f(name) });
+ var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global$1.Symbol || {});
+ if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
};
-// all enumerable object keys, includes symbols
+var _wksDefine$2 = Object.freeze({
+ default: _wksDefine,
+ __moduleExports: _wksDefine
+});
var _enumKeys = function (it) {
- var result = _objectKeys(it);
- var getSymbols = _objectGops.f;
+ var result = getKeys(it);
+ var getSymbols = gOPS.f;
if (getSymbols) {
var symbols = getSymbols(it);
- var isEnum = _objectPie.f;
+ var isEnum = require$$0$6.f;
var i = 0;
var key;
while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
} return result;
};
-// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
-var gOPN$1 = _objectGopn.f;
+
+var _enumKeys$2 = Object.freeze({
+ default: _enumKeys,
+ __moduleExports: _enumKeys
+});
+
+var gOPN$1 = require$$0$4.f;
var toString$1 = {}.toString;
var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
@@ -3111,13 +3802,27 @@ var getWindowNames = function (it) {
};
var f$7 = function getOwnPropertyNames(it) {
- return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN$1(_toIobject(it));
+ return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : gOPN$1(toIObject(it));
};
var _objectGopnExt = {
f: f$7
};
+
+
+var _objectGopnExt$2 = Object.freeze({
+ default: _objectGopnExt,
+ __moduleExports: _objectGopnExt,
+ f: f$7
+});
+
+var wksDefine = ( _wksDefine$2 && _wksDefine ) || _wksDefine$2;
+
+var enumKeys = ( _enumKeys$2 && _enumKeys ) || _enumKeys$2;
+
+var require$$1$2 = ( _objectGopnExt$2 && _objectGopnExt ) || _objectGopnExt$2;
+
'use strict';
// ECMAScript 6 symbols shim
@@ -3125,7 +3830,7 @@ var _objectGopnExt = {
-var META = _meta.KEY;
+var META = require$$0$11.KEY;
@@ -3145,28 +3850,28 @@ var META = _meta.KEY;
-var gOPD$3 = _objectGopd.f;
-var dP$2 = _objectDp.f;
-var gOPN = _objectGopnExt.f;
-var $Symbol = _global.Symbol;
-var $JSON = _global.JSON;
+var gOPD$3 = gOPD$1.f;
+var dP$2 = $defineProperty.f;
+var gOPN = require$$1$2.f;
+var $Symbol = global$1.Symbol;
+var $JSON = global$1.JSON;
var _stringify = $JSON && $JSON.stringify;
var PROTOTYPE$2 = 'prototype';
-var HIDDEN = _wks('_hidden');
-var TO_PRIMITIVE = _wks('toPrimitive');
+var HIDDEN = wks('_hidden');
+var TO_PRIMITIVE = wks('toPrimitive');
var isEnum = {}.propertyIsEnumerable;
-var SymbolRegistry = _shared('symbol-registry');
-var AllSymbols = _shared('symbols');
-var OPSymbols = _shared('op-symbols');
+var SymbolRegistry = shared$1('symbol-registry');
+var AllSymbols = shared$1('symbols');
+var OPSymbols = shared$1('op-symbols');
var ObjectProto$1 = Object[PROTOTYPE$2];
var USE_NATIVE$1 = typeof $Symbol == 'function';
-var QObject = _global.QObject;
+var QObject = global$1.QObject;
// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
var setter = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild;
// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
-var setSymbolDesc = _descriptors && _fails(function () {
- return _objectCreate(dP$2({}, 'a', {
+var setSymbolDesc = require$$0$1 && require$$0(function () {
+ return _create(dP$2({}, 'a', {
get: function () { return dP$2(this, 'a', { value: 7 }).a; }
})).a != 7;
}) ? function (it, key, D) {
@@ -3177,7 +3882,7 @@ var setSymbolDesc = _descriptors && _fails(function () {
} : dP$2;
var wrap = function (tag) {
- var sym = AllSymbols[tag] = _objectCreate($Symbol[PROTOTYPE$2]);
+ var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE$2]);
sym._k = tag;
return sym;
};
@@ -3190,22 +3895,22 @@ var isSymbol = USE_NATIVE$1 && typeof $Symbol.iterator == 'symbol' ? function (i
var $defineProperty$1 = function defineProperty(it, key, D) {
if (it === ObjectProto$1) $defineProperty$1(OPSymbols, key, D);
- _anObject(it);
- key = _toPrimitive(key, true);
- _anObject(D);
- if (_has(AllSymbols, key)) {
+ anObject(it);
+ key = toPrimitive(key, true);
+ anObject(D);
+ if (has(AllSymbols, key)) {
if (!D.enumerable) {
- if (!_has(it, HIDDEN)) dP$2(it, HIDDEN, _propertyDesc(1, {}));
+ if (!has(it, HIDDEN)) dP$2(it, HIDDEN, createDesc(1, {}));
it[HIDDEN][key] = true;
} else {
- if (_has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
- D = _objectCreate(D, { enumerable: _propertyDesc(0, false) });
+ if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
+ D = _create(D, { enumerable: createDesc(0, false) });
} return setSymbolDesc(it, key, D);
} return dP$2(it, key, D);
};
var $defineProperties = function defineProperties(it, P) {
- _anObject(it);
- var keys = _enumKeys(P = _toIobject(P));
+ anObject(it);
+ var keys = enumKeys(P = toIObject(P));
var i = 0;
var l = keys.length;
var key;
@@ -3213,38 +3918,38 @@ var $defineProperties = function defineProperties(it, P) {
return it;
};
var $create = function create(it, P) {
- return P === undefined ? _objectCreate(it) : $defineProperties(_objectCreate(it), P);
+ return P === undefined ? _create(it) : $defineProperties(_create(it), P);
};
var $propertyIsEnumerable = function propertyIsEnumerable(key) {
- var E = isEnum.call(this, key = _toPrimitive(key, true));
- if (this === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return false;
- return E || !_has(this, key) || !_has(AllSymbols, key) || _has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+ var E = isEnum.call(this, key = toPrimitive(key, true));
+ if (this === ObjectProto$1 && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
+ return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
- it = _toIobject(it);
- key = _toPrimitive(key, true);
- if (it === ObjectProto$1 && _has(AllSymbols, key) && !_has(OPSymbols, key)) return;
+ it = toIObject(it);
+ key = toPrimitive(key, true);
+ if (it === ObjectProto$1 && has(AllSymbols, key) && !has(OPSymbols, key)) return;
var D = gOPD$3(it, key);
- if (D && _has(AllSymbols, key) && !(_has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
+ if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
return D;
};
var $getOwnPropertyNames = function getOwnPropertyNames(it) {
- var names = gOPN(_toIobject(it));
+ var names = gOPN(toIObject(it));
var result = [];
var i = 0;
var key;
while (names.length > i) {
- if (!_has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
+ if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
} return result;
};
var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
var IS_OP = it === ObjectProto$1;
- var names = gOPN(IS_OP ? OPSymbols : _toIobject(it));
+ var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
var result = [];
var i = 0;
var key;
while (names.length > i) {
- if (_has(AllSymbols, key = names[i++]) && (IS_OP ? _has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);
+ if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto$1, key) : true)) result.push(AllSymbols[key]);
} return result;
};
@@ -3252,47 +3957,47 @@ var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
if (!USE_NATIVE$1) {
$Symbol = function Symbol() {
if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
- var tag = _uid(arguments.length > 0 ? arguments[0] : undefined);
+ var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
var $set = function (value) {
if (this === ObjectProto$1) $set.call(OPSymbols, value);
- if (_has(this, HIDDEN) && _has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
- setSymbolDesc(this, tag, _propertyDesc(1, value));
+ if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
+ setSymbolDesc(this, tag, createDesc(1, value));
};
- if (_descriptors && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });
+ if (require$$0$1 && setter) setSymbolDesc(ObjectProto$1, tag, { configurable: true, set: $set });
return wrap(tag);
};
- _redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {
+ redefine($Symbol[PROTOTYPE$2], 'toString', function toString() {
return this._k;
});
- _objectGopd.f = $getOwnPropertyDescriptor;
- _objectDp.f = $defineProperty$1;
- _objectGopn.f = _objectGopnExt.f = $getOwnPropertyNames;
- _objectPie.f = $propertyIsEnumerable;
- _objectGops.f = $getOwnPropertySymbols;
+ gOPD$1.f = $getOwnPropertyDescriptor;
+ $defineProperty.f = $defineProperty$1;
+ require$$0$4.f = require$$1$2.f = $getOwnPropertyNames;
+ require$$0$6.f = $propertyIsEnumerable;
+ gOPS.f = $getOwnPropertySymbols;
- if (_descriptors && !_library) {
- _redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+ if (require$$0$1 && !LIBRARY) {
+ redefine(ObjectProto$1, 'propertyIsEnumerable', $propertyIsEnumerable, true);
}
- _wksExt.f = function (name) {
- return wrap(_wks(name));
+ wksExt.f = function (name) {
+ return wrap(wks(name));
};
}
-_export(_export.G + _export.W + _export.F * !USE_NATIVE$1, { Symbol: $Symbol });
+$export$1($export$1.G + $export$1.W + $export$1.F * !USE_NATIVE$1, { Symbol: $Symbol });
for (var es6Symbols = (
// 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
-).split(','), j = 0; es6Symbols.length > j;)_wks(es6Symbols[j++]);
+).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);
-for (var wellKnownSymbols = _objectKeys(_wks.store), k = 0; wellKnownSymbols.length > k;) _wksDefine(wellKnownSymbols[k++]);
+for (var wellKnownSymbols = getKeys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);
-_export(_export.S + _export.F * !USE_NATIVE$1, 'Symbol', {
+$export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Symbol', {
// 19.4.2.1 Symbol.for(key)
'for': function (key) {
- return _has(SymbolRegistry, key += '')
+ return has(SymbolRegistry, key += '')
? SymbolRegistry[key]
: SymbolRegistry[key] = $Symbol(key);
},
@@ -3305,7 +4010,7 @@ _export(_export.S + _export.F * !USE_NATIVE$1, 'Symbol', {
useSimple: function () { setter = false; }
});
-_export(_export.S + _export.F * !USE_NATIVE$1, 'Object', {
+$export$1($export$1.S + $export$1.F * !USE_NATIVE$1, 'Object', {
// 19.1.2.2 Object.create(O [, Properties])
create: $create,
// 19.1.2.4 Object.defineProperty(O, P, Attributes)
@@ -3321,7 +4026,7 @@ _export(_export.S + _export.F * !USE_NATIVE$1, 'Object', {
});
// 24.3.2 JSON.stringify(value [, replacer [, space]])
-$JSON && _export(_export.S + _export.F * (!USE_NATIVE$1 || _fails(function () {
+$JSON && $export$1($export$1.S + $export$1.F * (!USE_NATIVE$1 || require$$0(function () {
var S = $Symbol();
// MS Edge converts symbol values to JSON as {}
// WebKit converts symbol values to JSON as null
@@ -3334,8 +4039,8 @@ $JSON && _export(_export.S + _export.F * (!USE_NATIVE$1 || _fails(function () {
var replacer, $replacer;
while (arguments.length > i) args.push(arguments[i++]);
$replacer = replacer = args[1];
- if (!_isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
- if (!_isArray(replacer)) replacer = function (key, value) {
+ if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
+ if (!isArray(replacer)) replacer = function (key, value) {
if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
if (!isSymbol(value)) return value;
};
@@ -3345,121 +4050,97 @@ $JSON && _export(_export.S + _export.F * (!USE_NATIVE$1 || _fails(function () {
});
// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
-$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || _hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);
+$Symbol[PROTOTYPE$2][TO_PRIMITIVE] || hide($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf);
// 19.4.3.5 Symbol.prototype[@@toStringTag]
-_setToStringTag($Symbol, 'Symbol');
+setToStringTag($Symbol, 'Symbol');
// 20.2.1.9 Math[@@toStringTag]
-_setToStringTag(Math, 'Math', true);
+setToStringTag(Math, 'Math', true);
// 24.3.3 JSON[@@toStringTag]
-_setToStringTag(_global.JSON, 'JSON', true);
-
-// most Object methods by ES6 should accept primitives
-
-
+setToStringTag(global$1.JSON, 'JSON', true);
var _objectSap = function (KEY, exec) {
- var fn = (_core.Object || {})[KEY] || Object[KEY];
+ var fn = (core.Object || {})[KEY] || Object[KEY];
var exp = {};
exp[KEY] = exec(fn);
- _export(_export.S + _export.F * _fails(function () { fn(1); }), 'Object', exp);
+ $export$1($export$1.S + $export$1.F * require$$0(function () { fn(1); }), 'Object', exp);
};
-// 19.1.2.5 Object.freeze(O)
-var meta = _meta.onFreeze;
-_objectSap('freeze', function ($freeze) {
+var _objectSap$2 = Object.freeze({
+ default: _objectSap,
+ __moduleExports: _objectSap
+});
+
+var require$$0$14 = ( _objectSap$2 && _objectSap ) || _objectSap$2;
+
+var meta = require$$0$11.onFreeze;
+
+require$$0$14('freeze', function ($freeze) {
return function freeze(it) {
- return $freeze && _isObject(it) ? $freeze(meta(it)) : it;
+ return $freeze && isObject(it) ? $freeze(meta(it)) : it;
};
});
-// 19.1.2.17 Object.seal(O)
-
-var meta$1 = _meta.onFreeze;
+var meta$1 = require$$0$11.onFreeze;
-_objectSap('seal', function ($seal) {
+require$$0$14('seal', function ($seal) {
return function seal(it) {
- return $seal && _isObject(it) ? $seal(meta$1(it)) : it;
+ return $seal && isObject(it) ? $seal(meta$1(it)) : it;
};
});
-// 19.1.2.15 Object.preventExtensions(O)
-
-var meta$2 = _meta.onFreeze;
+var meta$2 = require$$0$11.onFreeze;
-_objectSap('preventExtensions', function ($preventExtensions) {
+require$$0$14('preventExtensions', function ($preventExtensions) {
return function preventExtensions(it) {
- return $preventExtensions && _isObject(it) ? $preventExtensions(meta$2(it)) : it;
+ return $preventExtensions && isObject(it) ? $preventExtensions(meta$2(it)) : it;
};
});
-// 19.1.2.12 Object.isFrozen(O)
-
-
-_objectSap('isFrozen', function ($isFrozen) {
+require$$0$14('isFrozen', function ($isFrozen) {
return function isFrozen(it) {
- return _isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
+ return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
};
});
-// 19.1.2.13 Object.isSealed(O)
-
-
-_objectSap('isSealed', function ($isSealed) {
+require$$0$14('isSealed', function ($isSealed) {
return function isSealed(it) {
- return _isObject(it) ? $isSealed ? $isSealed(it) : false : true;
+ return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
};
});
-// 19.1.2.11 Object.isExtensible(O)
-
-
-_objectSap('isExtensible', function ($isExtensible) {
+require$$0$14('isExtensible', function ($isExtensible) {
return function isExtensible(it) {
- return _isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
+ return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
};
});
-// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
-
-var $getOwnPropertyDescriptor$1 = _objectGopd.f;
+var $getOwnPropertyDescriptor$1 = gOPD$1.f;
-_objectSap('getOwnPropertyDescriptor', function () {
+require$$0$14('getOwnPropertyDescriptor', function () {
return function getOwnPropertyDescriptor(it, key) {
- return $getOwnPropertyDescriptor$1(_toIobject(it), key);
+ return $getOwnPropertyDescriptor$1(toIObject(it), key);
};
});
-// 19.1.2.9 Object.getPrototypeOf(O)
-
-
-
-_objectSap('getPrototypeOf', function () {
+require$$0$14('getPrototypeOf', function () {
return function getPrototypeOf(it) {
- return _objectGpo(_toObject(it));
+ return $getPrototypeOf(toObject(it));
};
});
-// 19.1.2.14 Object.keys(O)
-
-
-
-_objectSap('keys', function () {
+require$$0$14('keys', function () {
return function keys(it) {
- return _objectKeys(_toObject(it));
+ return getKeys(toObject(it));
};
});
-// 19.1.2.7 Object.getOwnPropertyNames(O)
-_objectSap('getOwnPropertyNames', function () {
- return _objectGopnExt.f;
+require$$0$14('getOwnPropertyNames', function () {
+ return require$$1$2.f;
});
-// 19.1.3.1 Object.assign(target, source)
-
-
-_export(_export.S + _export.F, 'Object', { assign: _objectAssign });
+$export$1($export$1.S + $export$1.F, 'Object', { assign: require$$0$13 });
// 7.2.9 SameValue(x, y)
var _sameValue = Object.is || function is(x, y) {
@@ -3467,17 +4148,24 @@ var _sameValue = Object.is || function is(x, y) {
return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
};
-// 19.1.3.10 Object.is(value1, value2)
-_export(_export.S, 'Object', { is: _sameValue });
-var dP$3 = _objectDp.f;
+var _sameValue$2 = Object.freeze({
+ default: _sameValue,
+ __moduleExports: _sameValue
+});
+
+var require$$0$15 = ( _sameValue$2 && _sameValue ) || _sameValue$2;
+
+$export$1($export$1.S, 'Object', { is: require$$0$15 });
+
+var dP$3 = $defineProperty.f;
var FProto = Function.prototype;
var nameRE = /^\s*function ([^ (]*)/;
var NAME = 'name';
// 19.2.4.2 name
-NAME in FProto || _descriptors && dP$3(FProto, NAME, {
+NAME in FProto || require$$0$1 && dP$3(FProto, NAME, {
configurable: true,
get: function () {
try {
@@ -3488,11 +4176,11 @@ NAME in FProto || _descriptors && dP$3(FProto, NAME, {
}
});
-_export(_export.S, 'String', {
+$export$1($export$1.S, 'String', {
// 21.1.2.4 String.raw(callSite, ...substitutions)
raw: function raw(callSite) {
- var tpl = _toIobject(callSite.raw);
- var len = _toLength(tpl.length);
+ var tpl = toIObject(callSite.raw);
+ var len = toLength(tpl.length);
var aLen = arguments.length;
var res = [];
var i = 0;
@@ -3507,7 +4195,7 @@ var fromCharCode = String.fromCharCode;
var $fromCodePoint = String.fromCodePoint;
// length should be 1, old FF problem
-_export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
+$export$1($export$1.S + $export$1.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
// 21.1.2.2 String.fromCodePoint(...codePoints)
fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
var res = [];
@@ -3516,7 +4204,7 @@ _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1)
var code;
while (aLen > i) {
code = +arguments[i++];
- if (_toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
+ if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
res.push(code < 0x10000
? fromCharCode(code)
: fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
@@ -3525,12 +4213,10 @@ _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1)
}
});
-// true -> String#at
-// false -> String#codePointAt
var _stringAt = function (TO_STRING) {
return function (that, pos) {
- var s = String(_defined(that));
- var i = _toInteger(pos);
+ var s = String(defined(that));
+ var i = toInteger(pos);
var l = s.length;
var a, b;
if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
@@ -3541,10 +4227,19 @@ var _stringAt = function (TO_STRING) {
};
};
+
+
+var _stringAt$2 = Object.freeze({
+ default: _stringAt,
+ __moduleExports: _stringAt
+});
+
+var require$$0$16 = ( _stringAt$2 && _stringAt ) || _stringAt$2;
+
'use strict';
-var $at = _stringAt(false);
-_export(_export.P, 'String', {
+var $at = require$$0$16(false);
+$export$1($export$1.P, 'String', {
// 21.1.3.3 String.prototype.codePointAt(pos)
codePointAt: function codePointAt(pos) {
return $at(this, pos);
@@ -3556,38 +4251,56 @@ _export(_export.P, 'String', {
var _stringRepeat = function repeat(count) {
- var str = String(_defined(this));
+ var str = String(defined(this));
var res = '';
- var n = _toInteger(count);
+ var n = toInteger(count);
if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
return res;
};
-_export(_export.P, 'String', {
- // 21.1.3.13 String.prototype.repeat(count)
- repeat: _stringRepeat
+
+
+var _stringRepeat$2 = Object.freeze({
+ default: _stringRepeat,
+ __moduleExports: _stringRepeat
});
-// 7.2.8 IsRegExp(argument)
+var repeat = ( _stringRepeat$2 && _stringRepeat ) || _stringRepeat$2;
+$export$1($export$1.P, 'String', {
+ // 21.1.3.13 String.prototype.repeat(count)
+ repeat: repeat
+});
-var MATCH = _wks('match');
+var MATCH = wks('match');
var _isRegexp = function (it) {
var isRegExp;
- return _isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');
+ return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
};
-// helper for String#{startsWith, endsWith, includes}
+var _isRegexp$2 = Object.freeze({
+ default: _isRegexp,
+ __moduleExports: _isRegexp
+});
+
+var require$$1$3 = ( _isRegexp$2 && _isRegexp ) || _isRegexp$2;
var _stringContext = function (that, searchString, NAME) {
- if (_isRegexp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
- return String(_defined(that));
+ if (require$$1$3(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
+ return String(defined(that));
};
-var MATCH$1 = _wks('match');
+
+
+var _stringContext$2 = Object.freeze({
+ default: _stringContext,
+ __moduleExports: _stringContext
+});
+
+var MATCH$1 = wks('match');
var _failsIsRegexp = function (KEY) {
var re = /./;
try {
@@ -3600,7 +4313,17 @@ var _failsIsRegexp = function (KEY) {
} return true;
};
-// 21.1.3.18 String.prototype.startsWith(searchString [, position ])
+
+
+var _failsIsRegexp$2 = Object.freeze({
+ default: _failsIsRegexp,
+ __moduleExports: _failsIsRegexp
+});
+
+var context = ( _stringContext$2 && _stringContext ) || _stringContext$2;
+
+var require$$0$17 = ( _failsIsRegexp$2 && _failsIsRegexp ) || _failsIsRegexp$2;
+
'use strict';
@@ -3608,10 +4331,10 @@ var _failsIsRegexp = function (KEY) {
var STARTS_WITH = 'startsWith';
var $startsWith = ''[STARTS_WITH];
-_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
+$export$1($export$1.P + $export$1.F * require$$0$17(STARTS_WITH), 'String', {
startsWith: function startsWith(searchString /* , position = 0 */) {
- var that = _stringContext(this, searchString, STARTS_WITH);
- var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
+ var that = context(this, searchString, STARTS_WITH);
+ var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
var search = String(searchString);
return $startsWith
? $startsWith.call(that, search, index)
@@ -3619,7 +4342,6 @@ _export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
}
});
-// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
'use strict';
@@ -3627,12 +4349,12 @@ _export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {
var ENDS_WITH = 'endsWith';
var $endsWith = ''[ENDS_WITH];
-_export(_export.P + _export.F * _failsIsRegexp(ENDS_WITH), 'String', {
+$export$1($export$1.P + $export$1.F * require$$0$17(ENDS_WITH), 'String', {
endsWith: function endsWith(searchString /* , endPosition = @length */) {
- var that = _stringContext(this, searchString, ENDS_WITH);
+ var that = context(this, searchString, ENDS_WITH);
var endPosition = arguments.length > 1 ? arguments[1] : undefined;
- var len = _toLength(that.length);
- var end = endPosition === undefined ? len : Math.min(_toLength(endPosition), len);
+ var len = toLength(that.length);
+ var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);
var search = String(searchString);
return $endsWith
? $endsWith.call(that, search, end)
@@ -3640,15 +4362,14 @@ _export(_export.P + _export.F * _failsIsRegexp(ENDS_WITH), 'String', {
}
});
-// 21.1.3.7 String.prototype.includes(searchString, position = 0)
'use strict';
var INCLUDES = 'includes';
-_export(_export.P + _export.F * _failsIsRegexp(INCLUDES), 'String', {
+$export$1($export$1.P + $export$1.F * require$$0$17(INCLUDES), 'String', {
includes: function includes(searchString /* , position = 0 */) {
- return !!~_stringContext(this, searchString, INCLUDES)
+ return !!~context(this, searchString, INCLUDES)
.indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
}
});
@@ -3657,7 +4378,7 @@ _export(_export.P + _export.F * _failsIsRegexp(INCLUDES), 'String', {
// 21.2.5.3 get RegExp.prototype.flags
var _flags = function () {
- var that = _anObject(this);
+ var that = anObject(this);
var result = '';
if (that.global) result += 'g';
if (that.ignoreCase) result += 'i';
@@ -3667,10 +4388,18 @@ var _flags = function () {
return result;
};
-// 21.2.5.3 get RegExp.prototype.flags()
-if (_descriptors && /./g.flags != 'g') _objectDp.f(RegExp.prototype, 'flags', {
+
+
+var _flags$2 = Object.freeze({
+ default: _flags,
+ __moduleExports: _flags
+});
+
+var require$$2 = ( _flags$2 && _flags ) || _flags$2;
+
+if (require$$0$1 && /./g.flags != 'g') $defineProperty.f(RegExp.prototype, 'flags', {
configurable: true,
- get: _flags
+ get: require$$2
});
'use strict';
@@ -3681,17 +4410,17 @@ if (_descriptors && /./g.flags != 'g') _objectDp.f(RegExp.prototype, 'flags', {
var _fixReWks = function (KEY, length, exec) {
- var SYMBOL = _wks(KEY);
- var fns = exec(_defined, SYMBOL, ''[KEY]);
+ var SYMBOL = wks(KEY);
+ var fns = exec(defined, SYMBOL, ''[KEY]);
var strfn = fns[0];
var rxfn = fns[1];
- if (_fails(function () {
+ if (require$$0(function () {
var O = {};
O[SYMBOL] = function () { return 7; };
return ''[KEY](O) != 7;
})) {
- _redefine(String.prototype, KEY, strfn);
- _hide(RegExp.prototype, SYMBOL, length == 2
+ redefine(String.prototype, KEY, strfn);
+ hide(RegExp.prototype, SYMBOL, length == 2
// 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
// 21.2.5.11 RegExp.prototype[@@split](string, limit)
? function (string, arg) { return rxfn.call(string, this, arg); }
@@ -3702,8 +4431,16 @@ var _fixReWks = function (KEY, length, exec) {
}
};
-// @@match logic
-_fixReWks('match', 1, function (defined, MATCH, $match) {
+
+
+var _fixReWks$2 = Object.freeze({
+ default: _fixReWks,
+ __moduleExports: _fixReWks
+});
+
+var require$$0$18 = ( _fixReWks$2 && _fixReWks ) || _fixReWks$2;
+
+require$$0$18('match', 1, function (defined, MATCH, $match) {
// 21.1.3.11 String.prototype.match(regexp)
return [function match(regexp) {
'use strict';
@@ -3713,8 +4450,7 @@ _fixReWks('match', 1, function (defined, MATCH, $match) {
}, $match];
});
-// @@replace logic
-_fixReWks('replace', 2, function (defined, REPLACE, $replace) {
+require$$0$18('replace', 2, function (defined, REPLACE, $replace) {
// 21.1.3.14 String.prototype.replace(searchValue, replaceValue)
return [function replace(searchValue, replaceValue) {
'use strict';
@@ -3726,10 +4462,9 @@ _fixReWks('replace', 2, function (defined, REPLACE, $replace) {
}, $replace];
});
-// @@split logic
-_fixReWks('split', 2, function (defined, SPLIT, $split) {
+require$$0$18('split', 2, function (defined, SPLIT, $split) {
'use strict';
- var isRegExp = _isRegexp;
+ var isRegExp = require$$1$3;
var _split = $split;
var $push = [].push;
var $SPLIT = 'split';
@@ -3798,8 +4533,7 @@ _fixReWks('split', 2, function (defined, SPLIT, $split) {
}, $split];
});
-// @@search logic
-_fixReWks('search', 1, function (defined, SEARCH, $search) {
+require$$0$18('search', 1, function (defined, SEARCH, $search) {
// 21.1.3.15 String.prototype.search(regexp)
return [function search(regexp) {
'use strict';
@@ -3814,10 +4548,19 @@ _fixReWks('search', 1, function (defined, SEARCH, $search) {
var _createProperty = function (object, index, value) {
- if (index in object) _objectDp.f(object, index, _propertyDesc(0, value));
+ if (index in object) $defineProperty.f(object, index, createDesc(0, value));
else object[index] = value;
};
+
+
+var _createProperty$2 = Object.freeze({
+ default: _createProperty,
+ __moduleExports: _createProperty
+});
+
+var createProperty = ( _createProperty$2 && _createProperty ) || _createProperty$2;
+
'use strict';
@@ -3828,27 +4571,27 @@ var _createProperty = function (object, index, value) {
-_export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', {
+$export$1($export$1.S + $export$1.F * !require$$0$8(function (iter) { }), 'Array', {
// 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
- var O = _toObject(arrayLike);
+ var O = toObject(arrayLike);
var C = typeof this == 'function' ? this : Array;
var aLen = arguments.length;
var mapfn = aLen > 1 ? arguments[1] : undefined;
var mapping = mapfn !== undefined;
var index = 0;
- var iterFn = core_getIteratorMethod(O);
+ var iterFn = getIterFn(O);
var length, result, step, iterator;
- if (mapping) mapfn = _ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
+ if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
// if object isn't iterable or it's array with default iterator - use simple case
- if (iterFn != undefined && !(C == Array && _isArrayIter(iterFn))) {
+ if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
- _createProperty(result, index, mapping ? _iterCall(iterator, mapfn, [step.value, index], true) : step.value);
+ createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
}
} else {
- length = _toLength(O.length);
+ length = toLength(O.length);
for (result = new C(length); length > index; index++) {
- _createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
+ createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
}
}
result.length = index;
@@ -3861,7 +4604,7 @@ _export(_export.S + _export.F * !_iterDetect(function (iter) { }), 'Array', {
// WebKit Array.of isn't generic
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
function F() { /* empty */ }
return !(Array.of.call(F) instanceof F);
}), 'Array', {
@@ -3870,126 +4613,113 @@ _export(_export.S + _export.F * _fails(function () {
var index = 0;
var aLen = arguments.length;
var result = new (typeof this == 'function' ? this : Array)(aLen);
- while (aLen > index) _createProperty(result, index, arguments[index++]);
+ while (aLen > index) createProperty(result, index, arguments[index++]);
result.length = aLen;
return result;
}
});
-// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
-
+$export$1($export$1.P, 'Array', { copyWithin: require$$0$9 });
-_export(_export.P, 'Array', { copyWithin: _arrayCopyWithin });
-
-_addToUnscopables('copyWithin');
+require$$1('copyWithin');
'use strict';
// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
-var $find = _arrayMethods(5);
+var $find = require$$0$7(5);
var KEY = 'find';
var forced = true;
// Shouldn't skip holes
if (KEY in []) Array(1)[KEY](function () { forced = false; });
-_export(_export.P + _export.F * forced, 'Array', {
+$export$1($export$1.P + $export$1.F * forced, 'Array', {
find: function find(callbackfn /* , that = undefined */) {
return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
-_addToUnscopables(KEY);
+require$$1(KEY);
'use strict';
// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
-var $find$1 = _arrayMethods(6);
+var $find$1 = require$$0$7(6);
var KEY$1 = 'findIndex';
var forced$1 = true;
// Shouldn't skip holes
if (KEY$1 in []) Array(1)[KEY$1](function () { forced$1 = false; });
-_export(_export.P + _export.F * forced$1, 'Array', {
+$export$1($export$1.P + $export$1.F * forced$1, 'Array', {
findIndex: function findIndex(callbackfn /* , that = undefined */) {
return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
-_addToUnscopables(KEY$1);
-
-// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
+require$$1(KEY$1);
+$export$1($export$1.P, 'Array', { fill: require$$0$5 });
-_export(_export.P, 'Array', { fill: _arrayFill });
+require$$1('fill');
-_addToUnscopables('fill');
+var _isFinite = global$1.isFinite;
-// 20.1.2.2 Number.isFinite(number)
-
-var _isFinite = _global.isFinite;
-
-_export(_export.S, 'Number', {
+$export$1($export$1.S, 'Number', {
isFinite: function isFinite(it) {
return typeof it == 'number' && _isFinite(it);
}
});
-// 20.1.2.3 Number.isInteger(number)
-
var floor$1 = Math.floor;
var _isInteger = function isInteger(it) {
- return !_isObject(it) && isFinite(it) && floor$1(it) === it;
+ return !isObject(it) && isFinite(it) && floor$1(it) === it;
};
-// 20.1.2.3 Number.isInteger(number)
-_export(_export.S, 'Number', { isInteger: _isInteger });
+var _isInteger$2 = Object.freeze({
+ default: _isInteger,
+ __moduleExports: _isInteger
+});
-// 20.1.2.5 Number.isSafeInteger(number)
+var isInteger = ( _isInteger$2 && _isInteger ) || _isInteger$2;
+$export$1($export$1.S, 'Number', { isInteger: isInteger });
var abs = Math.abs;
-_export(_export.S, 'Number', {
+$export$1($export$1.S, 'Number', {
isSafeInteger: function isSafeInteger(number) {
- return _isInteger(number) && abs(number) <= 0x1fffffffffffff;
+ return isInteger(number) && abs(number) <= 0x1fffffffffffff;
}
});
-// 20.1.2.4 Number.isNaN(number)
-
-
-_export(_export.S, 'Number', {
+$export$1($export$1.S, 'Number', {
isNaN: function isNaN(number) {
// eslint-disable-next-line no-self-compare
return number != number;
}
});
-// 20.1.2.1 Number.EPSILON
-
-
-_export(_export.S, 'Number', { EPSILON: Math.pow(2, -52) });
-
-// 20.1.2.10 Number.MIN_SAFE_INTEGER
+$export$1($export$1.S, 'Number', { EPSILON: Math.pow(2, -52) });
+$export$1($export$1.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
-_export(_export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });
-
-// 20.1.2.6 Number.MAX_SAFE_INTEGER
-
-
-_export(_export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
+$export$1($export$1.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });
// 20.2.2.20 Math.log1p(x)
var _mathLog1p = Math.log1p || function log1p(x) {
return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
};
-// 20.2.2.3 Math.acosh(x)
+var _mathLog1p$2 = Object.freeze({
+ default: _mathLog1p,
+ __moduleExports: _mathLog1p
+});
+
+var require$$0$19 = ( _mathLog1p$2 && _mathLog1p ) || _mathLog1p$2;
+
var sqrt = Math.sqrt;
var $acosh = Math.acosh;
-_export(_export.S + _export.F * !($acosh
+$export$1($export$1.S + $export$1.F * !($acosh
// V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
&& Math.floor($acosh(Number.MAX_VALUE)) == 710
// Tor Browser bug: Math.acosh(Infinity) -> NaN
@@ -3998,12 +4728,10 @@ _export(_export.S + _export.F * !($acosh
acosh: function acosh(x) {
return (x = +x) < 1 ? NaN : x > 94906265.62425156
? Math.log(x) + Math.LN2
- : _mathLog1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
+ : require$$0$19(x - 1 + sqrt(x - 1) * sqrt(x + 1));
}
});
-// 20.2.2.5 Math.asinh(x)
-
var $asinh = Math.asinh;
function asinh(x) {
@@ -4011,14 +4739,12 @@ function asinh(x) {
}
// Tor Browser bug: Math.asinh(0) -> -0
-_export(_export.S + _export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
-
-// 20.2.2.7 Math.atanh(x)
+$export$1($export$1.S + $export$1.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });
var $atanh = Math.atanh;
// Tor Browser bug: Math.atanh(-0) -> 0
-_export(_export.S + _export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
+$export$1($export$1.S + $export$1.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
atanh: function atanh(x) {
return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
}
@@ -4030,30 +4756,30 @@ var _mathSign = Math.sign || function sign(x) {
return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
};
-// 20.2.2.9 Math.cbrt(x)
+var _mathSign$2 = Object.freeze({
+ default: _mathSign,
+ __moduleExports: _mathSign
+});
+
+var require$$0$20 = ( _mathSign$2 && _mathSign ) || _mathSign$2;
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
cbrt: function cbrt(x) {
- return _mathSign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
+ return require$$0$20(x = +x) * Math.pow(Math.abs(x), 1 / 3);
}
});
-// 20.2.2.11 Math.clz32(x)
-
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
clz32: function clz32(x) {
return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
}
});
-// 20.2.2.12 Math.cosh(x)
-
var exp = Math.exp;
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
cosh: function cosh(x) {
return (exp(x = +x) + exp(-x)) / 2;
}
@@ -4070,13 +4796,16 @@ var _mathExpm1 = (!$expm1
return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
} : $expm1;
-// 20.2.2.14 Math.expm1(x)
+var _mathExpm1$2 = Object.freeze({
+ default: _mathExpm1,
+ __moduleExports: _mathExpm1
+});
-_export(_export.S + _export.F * (_mathExpm1 != Math.expm1), 'Math', { expm1: _mathExpm1 });
+var expm1 = ( _mathExpm1$2 && _mathExpm1 ) || _mathExpm1$2;
-// 20.2.2.16 Math.fround(x)
+$export$1($export$1.S + $export$1.F * (expm1 != Math.expm1), 'Math', { expm1: expm1 });
var pow = Math.pow;
var EPSILON = pow(2, -52);
@@ -4090,7 +4819,7 @@ var roundTiesToEven = function (n) {
var _mathFround = Math.fround || function fround(x) {
var $abs = Math.abs(x);
- var $sign = _mathSign(x);
+ var $sign = require$$0$20(x);
var a, result;
if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
a = (1 + EPSILON32 / EPSILON) * $abs;
@@ -4100,16 +4829,20 @@ var _mathFround = Math.fround || function fround(x) {
return $sign * result;
};
-// 20.2.2.16 Math.fround(x)
-_export(_export.S, 'Math', { fround: _mathFround });
+var _mathFround$2 = Object.freeze({
+ default: _mathFround,
+ __moduleExports: _mathFround
+});
+
+var require$$0$21 = ( _mathFround$2 && _mathFround ) || _mathFround$2;
-// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
+$export$1($export$1.S, 'Math', { fround: require$$0$21 });
var abs$1 = Math.abs;
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars
var sum = 0;
var i = 0;
@@ -4131,12 +4864,10 @@ _export(_export.S, 'Math', {
}
});
-// 20.2.2.18 Math.imul(x, y)
-
var $imul = Math.imul;
// some WebKit versions fails with big numbers, some has wrong arity
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
}), 'Math', {
imul: function imul(x, y) {
@@ -4149,67 +4880,46 @@ _export(_export.S + _export.F * _fails(function () {
}
});
-// 20.2.2.20 Math.log1p(x)
-
-
-_export(_export.S, 'Math', { log1p: _mathLog1p });
-
-// 20.2.2.21 Math.log10(x)
+$export$1($export$1.S, 'Math', { log1p: require$$0$19 });
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
log10: function log10(x) {
return Math.log(x) * Math.LOG10E;
}
});
-// 20.2.2.22 Math.log2(x)
-
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
log2: function log2(x) {
return Math.log(x) / Math.LN2;
}
});
-// 20.2.2.28 Math.sign(x)
-
-
-_export(_export.S, 'Math', { sign: _mathSign });
-
-// 20.2.2.30 Math.sinh(x)
-
+$export$1($export$1.S, 'Math', { sign: require$$0$20 });
var exp$1 = Math.exp;
// V8 near Chromium 38 has a problem with very small numbers
-_export(_export.S + _export.F * _fails(function () {
+$export$1($export$1.S + $export$1.F * require$$0(function () {
return !Math.sinh(-2e-17) != -2e-17;
}), 'Math', {
sinh: function sinh(x) {
return Math.abs(x = +x) < 1
- ? (_mathExpm1(x) - _mathExpm1(-x)) / 2
+ ? (expm1(x) - expm1(-x)) / 2
: (exp$1(x - 1) - exp$1(-x - 1)) * (Math.E / 2);
}
});
-// 20.2.2.33 Math.tanh(x)
-
-
var exp$2 = Math.exp;
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
tanh: function tanh(x) {
- var a = _mathExpm1(x = +x);
- var b = _mathExpm1(-x);
+ var a = expm1(x = +x);
+ var b = expm1(-x);
return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp$2(x) + exp$2(-x));
}
});
-// 20.2.2.34 Math.trunc(x)
-
-
-_export(_export.S, 'Math', {
+$export$1($export$1.S, 'Math', {
trunc: function trunc(it) {
return (it > 0 ? Math.floor : Math.ceil)(it);
}
@@ -4218,21 +4928,21 @@ _export(_export.S, 'Math', {
'use strict';
// https://github.com/tc39/Array.prototype.includes
-var $includes = _arrayIncludes(true);
+var $includes = require$$0$2(true);
-_export(_export.P, 'Array', {
+$export$1($export$1.P, 'Array', {
includes: function includes(el /* , fromIndex = 0 */) {
return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
}
});
-_addToUnscopables('includes');
+require$$1('includes');
-var isEnum$1 = _objectPie.f;
+var isEnum$1 = require$$0$6.f;
var _objectToArray = function (isEntries) {
return function (it) {
- var O = _toIobject(it);
- var keys = _objectKeys(O);
+ var O = toIObject(it);
+ var keys = getKeys(O);
var length = keys.length;
var i = 0;
var result = [];
@@ -4243,70 +4953,81 @@ var _objectToArray = function (isEntries) {
};
};
-// https://github.com/tc39/proposal-object-values-entries
-var $values = _objectToArray(false);
-_export(_export.S, 'Object', {
+var _objectToArray$2 = Object.freeze({
+ default: _objectToArray,
+ __moduleExports: _objectToArray
+});
+
+var require$$0$22 = ( _objectToArray$2 && _objectToArray ) || _objectToArray$2;
+
+var $values = require$$0$22(false);
+
+$export$1($export$1.S, 'Object', {
values: function values(it) {
return $values(it);
}
});
-// https://github.com/tc39/proposal-object-values-entries
+var $entries = require$$0$22(true);
-var $entries = _objectToArray(true);
-
-_export(_export.S, 'Object', {
+$export$1($export$1.S, 'Object', {
entries: function entries(it) {
return $entries(it);
}
});
-// https://github.com/tc39/proposal-object-getownpropertydescriptors
-
-
-
-
-
-
-_export(_export.S, 'Object', {
+$export$1($export$1.S, 'Object', {
getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
- var O = _toIobject(object);
- var getDesc = _objectGopd.f;
- var keys = _ownKeys(O);
+ var O = toIObject(object);
+ var getDesc = gOPD$1.f;
+ var keys = ownKeys(O);
var result = {};
var i = 0;
var key, desc;
while (keys.length > i) {
desc = getDesc(O, key = keys[i++]);
- if (desc !== undefined) _createProperty(result, key, desc);
+ if (desc !== undefined) createProperty(result, key, desc);
}
return result;
}
});
-// https://github.com/tc39/proposal-string-pad-start-end
-
-
-
-
var _stringPad = function (that, maxLength, fillString, left) {
- var S = String(_defined(that));
+ var S = String(defined(that));
var stringLength = S.length;
var fillStr = fillString === undefined ? ' ' : String(fillString);
- var intMaxLength = _toLength(maxLength);
+ var intMaxLength = toLength(maxLength);
if (intMaxLength <= stringLength || fillStr == '') return S;
var fillLen = intMaxLength - stringLength;
- var stringFiller = _stringRepeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
+ var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
return left ? stringFiller + S : S + stringFiller;
};
-var navigator$1 = _global.navigator;
+
+
+var _stringPad$2 = Object.freeze({
+ default: _stringPad,
+ __moduleExports: _stringPad
+});
+
+var navigator$1 = global$1.navigator;
var _userAgent = navigator$1 && navigator$1.userAgent || '';
+
+
+var _userAgent$2 = Object.freeze({
+ default: _userAgent,
+ __moduleExports: _userAgent
+});
+
+var $pad = ( _stringPad$2 && _stringPad ) || _stringPad$2;
+
+var userAgent = ( _userAgent$2 && _userAgent ) || _userAgent$2;
+
'use strict';
// https://github.com/tc39/proposal-string-pad-start-end
@@ -4314,9 +5035,9 @@ var _userAgent = navigator$1 && navigator$1.userAgent || '';
// https://github.com/zloirock/core-js/issues/280
-_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
+$export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
padStart: function padStart(maxLength /* , fillString = ' ' */) {
- return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
}
});
@@ -4327,18 +5048,14 @@ _export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAg
// https://github.com/zloirock/core-js/issues/280
-_export(_export.P + _export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(_userAgent), 'String', {
+$export$1($export$1.P + $export$1.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', {
padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
- return _stringPad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
+ return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
}
});
-// ie9- setTimeout & setInterval additional parameters fix
-
-
-
var slice = [].slice;
-var MSIE = /MSIE .\./.test(_userAgent); // <- dirty ie9- check
+var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
var wrap$1 = function (set) {
return function (fn, time /* , ...args */) {
var boundArgs = arguments.length > 2;
@@ -4349,19 +5066,19 @@ var wrap$1 = function (set) {
} : fn, time);
};
};
-_export(_export.G + _export.B + _export.F * MSIE, {
- setTimeout: wrap$1(_global.setTimeout),
- setInterval: wrap$1(_global.setInterval)
+$export$1($export$1.G + $export$1.B + $export$1.F * MSIE, {
+ setTimeout: wrap$1(global$1.setTimeout),
+ setInterval: wrap$1(global$1.setInterval)
});
-_export(_export.G + _export.B, {
- setImmediate: _task.set,
- clearImmediate: _task.clear
+$export$1($export$1.G + $export$1.B, {
+ setImmediate: $task.set,
+ clearImmediate: $task.clear
});
-var ITERATOR$4 = _wks('iterator');
-var TO_STRING_TAG = _wks('toStringTag');
-var ArrayValues = _iterators.Array;
+var ITERATOR$4 = wks('iterator');
+var TO_STRING_TAG = wks('toStringTag');
+var ArrayValues = Iterators.Array;
var DOMIterables = {
CSSRuleList: true, // TODO: Not spec compliant, should be false.
@@ -4397,17 +5114,17 @@ var DOMIterables = {
TouchList: false
};
-for (var collections = _objectKeys(DOMIterables), i$1 = 0; i$1 < collections.length; i$1++) {
+for (var collections = getKeys(DOMIterables), i$1 = 0; i$1 < collections.length; i$1++) {
var NAME$1 = collections[i$1];
var explicit = DOMIterables[NAME$1];
- var Collection = _global[NAME$1];
+ var Collection = global$1[NAME$1];
var proto = Collection && Collection.prototype;
var key;
if (proto) {
- if (!proto[ITERATOR$4]) _hide(proto, ITERATOR$4, ArrayValues);
- if (!proto[TO_STRING_TAG]) _hide(proto, TO_STRING_TAG, NAME$1);
- _iterators[NAME$1] = ArrayValues;
- if (explicit) for (key in es6_array_iterator) if (!proto[key]) _redefine(proto, key, es6_array_iterator[key], true);
+ if (!proto[ITERATOR$4]) hide(proto, ITERATOR$4, ArrayValues);
+ if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME$1);
+ Iterators[NAME$1] = ArrayValues;
+ if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
}
}
@@ -6675,7 +7392,6 @@ var utils = {
// Plyr support checks
// ==========================================================================
-// Check for feature support
var support = {
// Basic support
audio: 'canPlayType' in document.createElement('audio'),
@@ -7193,7 +7909,6 @@ var Storage = function () {
/* global google */
-// Build the default tag URL
var getTagUrl = function getTagUrl() {
var params = {
AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',
@@ -7854,7 +8569,6 @@ var Ads = function () {
// Plyr Event Listeners
// ==========================================================================
-// Sniff out the browser
var browser$2 = utils.getBrowser();
var listeners = {
@@ -9163,6 +9877,11 @@ var controls = {
setQualityMenu: function setQualityMenu(options) {
var _this = this;
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.quality)) {
+ return;
+ }
+
var type = 'quality';
var list = this.elements.settings.panes.quality.querySelector('ul');
@@ -9324,7 +10043,11 @@ var controls = {
// Set the looping options
/* setLoopMenu() {
- const options = ['start', 'end', 'all', 'reset'];
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.loop)) {
+ return;
+ }
+ const options = ['start', 'end', 'all', 'reset'];
const list = this.elements.settings.panes.loop.querySelector('ul');
// Show the pane and tab
utils.toggleHidden(this.elements.settings.tabs.loop, false);
@@ -9424,6 +10147,11 @@ var controls = {
setSpeedMenu: function setSpeedMenu() {
var _this3 = this;
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.speed)) {
+ return;
+ }
+
var type = 'speed';
// Set the default speeds
@@ -10921,7 +11649,6 @@ var vimeo = {
// Plyr Media
// ==========================================================================
-// Sniff out the browser
var browser$3 = utils.getBrowser();
var media = {
@@ -11166,12 +11893,6 @@ var source = {
// License: The MIT License (MIT)
// ==========================================================================
-// Private properties
-// TODO: Use a WeakMap for private globals
-// const globals = new WeakMap();
-
-// Plyr instance
-
var Plyr$1 = function () {
function Plyr(target, options) {
var _this = this;
@@ -12406,7 +13127,7 @@ var Plyr$1 = function () {
// ==========================================================================
// Plyr Polyfilled Build
-// plyr.js v3.0.0-beta.16
+// plyr.js v3.0.0-beta.17
// https://github.com/sampotts/plyr
// License: The MIT License (MIT)
// ==========================================================================
diff --git a/dist/plyr.polyfilled.js.map b/dist/plyr.polyfilled.js.map
index 1de9523c..26d8507b 100644
--- a/dist/plyr.polyfilled.js.map
+++ b/dist/plyr.polyfilled.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["isObject","require$$0","document","require$$1","require$$2","anObject","toPrimitive","IE8_DOM_DEFINE","dP","createDesc","has","hide","global","aFunction","core","ctx","redefine","uid","VIEW","toInteger","toLength","cof","IObject","defined","min","toIObject","toAbsoluteIndex","$keys","toObject","DESCRIPTORS","toIndex","$typed","anInstance","arrayFill","redefineAll","fails","LIBRARY","setToStringTag","SPECIES","buffer","$export","speciesConstructor","TAG","Iterators","enumBugKeys","getKeys","IE_PROTO","PROTOTYPE","dPs","ITERATOR","classof","isArray","asc","ArrayProto","create","descriptor","$iterCreate","getPrototypeOf","step","addToUnscopables","pIE","require$$3","require$$4","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","call","forOf","validate","$iterDefine","setSpecies","meta","$iterDetect","inheritIfRequired","strong","gOPS","createArrayMethod","id","$has","weak","assign","invoke","bind","gOPD","getProto","Reflect","gOPN","setProto","process","cel","html","Promise","isNode","newPromiseCapability","TypeError","newPromiseCapabilityModule","perform","promiseResolve","wksExt","toString","$GOPD","$DP","gOPNExt","wks","shared","ObjectProto","USE_NATIVE","$fails","_create","$defineProperty","enumKeys","wksDefine","$getOwnPropertyDescriptor","$getPrototypeOf","isRegExp","MATCH","context","createProperty","$find","KEY","forced","floor","isInteger","log1p","sign","$expm1","abs","exp","expm1","isEnum","ownKeys","repeat","navigator","userAgent","$pad","wrap","$task","i","NAME","this","CustomEvent","providers","types","defaults","window","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","event","err","src","first","getElementsByTagName","parentNode","insertBefore","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisement","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","setTimeout","getKeyCode","which","handleKey","code","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.17/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.17\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.0.0-beta.16\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/defaults.js","src/js/utils.js","src/js/support.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js","src/js/plyr.polyfilled.js"],"names":["document","require$$0","require$$1","require$$2","dP","global","VIEW","min","DESCRIPTORS","toIndex","$typed","arrayFill","redefineAll","fails","SPECIES","buffer","$export","TAG","IE_PROTO","PROTOTYPE","ITERATOR","speciesConstructor","ArrayProto","create","descriptor","getPrototypeOf","addToUnscopables","pIE","LIBRARY","require$$3","require$$4","ctx","require$$7","anInstance","require$$8","require$$9","hide","require$$10","require$$11","toInteger","require$$12","toLength","require$$13","toAbsoluteIndex","require$$15","toPrimitive","require$$16","has","require$$17","classof","require$$18","isObject","require$$19","toObject","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","uid","require$$26","wks","require$$27","require$$28","require$$29","require$$30","require$$31","Iterators","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","$iterators","setSpecies","meta","$iterDetect","createArrayMethod","id","$has","assign","gOPD","getProto","Reflect","gOPN","process","Promise","isNode","newPromiseCapability","TypeError","newPromiseCapabilityModule","require$$5","require$$6","toString","$GOPD","$DP","gOPNExt","shared","ObjectProto","USE_NATIVE","$fails","$defineProperty","$keys","$getOwnPropertyDescriptor","isRegExp","MATCH","$find","KEY","forced","floor","log1p","sign","$expm1","abs","exp","isEnum","navigator","wrap","i","NAME","this","CustomEvent","providers","types","defaults","window","language","split","utils","input","instanceof","Plyr","getConstructor","Object","Number","isNaN","String","Boolean","Function","nullOrUndefined","Array","isArray","WeakMap","NodeList","Element","Text","Event","TextTrackCue","VTTCue","TextTrack","string","kind","test","array","nodeList","length","object","keys","constructor","documentMode","documentElement","style","userAgent","platform","url","responseType","resolve","reject","request","XMLHttpRequest","addEventListener","JSON","parse","responseText","e","response","Error","statusText","open","send","callback","error","current","querySelector","callbacks","push","element","createElement","errors","is","function","forEach","cb","call","event","err","src","first","getElementsByTagName","parentNode","insertBefore","prefix","hasId","isCached","updateSprite","data","innerHTML","body","childNodes","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","then","empty","result","setItem","stringify","catch","Math","random","self","top","elements","wrapper","targets","from","reverse","index","child","cloneNode","parent","sibling","nextSibling","appendChild","type","attributes","text","setAttributes","textContent","target","removeElement","removeChild","lastChild","newChild","oldChild","replaceChild","key","sel","existingAttributes","existing","selector","s","trim","className","replace","stripped","parts","value","start","charAt","class","toggle","contains","classList","removeAttribute","prototype","match","includes","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","display","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","last","trap","keyCode","getFocusElement","shiftKey","focus","preventDefault","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","bubbles","detail","plyr","dispatchEvent","toggleState","pressed","getAttribute","state","max","toFixed","parseInt","time","displayHours","inverted","number","formatTime","format","slice","hours","getHours","mins","getMinutes","secs","getSeconds","sources","source","shift","extend","youtube","vimeo","regex","RegExp","$2","parser","href","search","startsWith","parseUrl","hashes","indexOf","reduce","params","hash","val","decodeURIComponent","map","encodeURIComponent","join","fragment","createDocumentFragment","firstChild","innerText","width","height","getRatio","w","h","ratio","transitionEndEvent","find","undefined","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","defineProperty","range","matchMedia","noop","Console","enabled","console","log","bind","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","x","y","overflow","toggleClass","fallback","Fullscreen","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","enter","exit","inFrame","hasClass","fullscreenElement","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","prefixes","some","pre","msExitFullscreen","Storage","store","json","get","removeItem","getTagUrl","base","buildUrlParams","Ads","ads","initialized","blocked","tag","google","loadScript","urls","googleIMA","ready","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","getRemainingTime","label","i18n","advertisement","setInterval","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","cuePercentage","cue","cues","left","setVolume","AdEvent","onAdEvent","ad","getAd","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","seekedTime","discardAdBreak","splice","resize","ViewMode","NORMAL","initialize","init","adError","destroy","setTimeout","getKeyCode","which","handleKey","code","repeat","altKey","ctrlKey","metaKey","seekByKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","set","updateSetting","speed","quality","concat","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","defaultPrevented","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","step","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","iframe","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","getPercentage","buffered","end","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","namespace","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","list","checked","item","radio","faux","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","filter","isYouTube","toggleTab","emptyElement","getBadge","createBadge","createMenuItem","getLabel","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","name","scrollWidth","scrollHeight","getElementById","isTab","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","createObjectURL","blob","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","instance","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stop","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","offset","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","all","getVideoWidth","getVideoHeight","getAspectRatio","dimensions","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","frame","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","check","crossorigin","poster","addStyleHook","insertElements","jQuery","original","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","toggled","soft","done","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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","file":"plyr.polyfilled.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.17/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type],\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type],\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.17\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n","// ==========================================================================\n// Plyr Polyfilled Build\n// plyr.js v3.0.0-beta.17\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport 'babel-polyfill';\n\nimport 'custom-event-polyfill';\n\nimport Plyr from './plyr';\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/dist/plyr.polyfilled.min.js b/dist/plyr.polyfilled.min.js
index 7c7d9090..4220c57c 100644
--- a/dist/plyr.polyfilled.min.js
+++ b/dist/plyr.polyfilled.min.js
@@ -1,2 +1,2 @@
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),r=function(e){return"object"==typeof e?null!==e:"function"==typeof e},o=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e},s=function(e){try{return!!e()}catch(e){return!0}},a=!s(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),l=n.document,c=r(l)&&r(l.createElement),u=function(e){return c?l.createElement(e):{}},d=!a&&!s(function(){return 7!=Object.defineProperty(u("div"),"a",{get:function(){return 7}}).a}),f=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},h=Object.defineProperty,p={f:a?Object.defineProperty:function(e,t,n){if(o(e),t=f(t,!0),o(n),d)try{return h(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},g=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},m=a?function(e,t,n){return p.f(e,t,g(1,n))}:function(e,t,n){return e[t]=n,e},v={}.hasOwnProperty,y=function(e,t){return v.call(e,t)},b=0,w=Math.random(),E=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++b+w).toString(36))},k=t(function(e){var t=E("src"),r=Function.toString,o=(""+r).split("toString");i.inspectSource=function(e){return r.call(e)},(e.exports=function(e,i,r,s){var a="function"==typeof r;a&&(y(r,"name")||m(r,"name",i)),e[i]!==r&&(a&&(y(r,t)||m(r,t,e[i]?""+e[i]:o.join(String(i)))),e===n?e[i]=r:s?e[i]?e[i]=r:m(e,i,r):(delete e[i],m(e,i,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||r.call(this)})}),S=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},T=function(e,t,n){if(S(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},A=function(e,t,r){var o,s,a,l,c=e&A.F,u=e&A.G,d=e&A.S,f=e&A.P,h=e&A.B,p=u?n:d?n[t]||(n[t]={}):(n[t]||{}).prototype,g=u?i:i[t]||(i[t]={}),v=g.prototype||(g.prototype={});for(o in u&&(r=t),r)a=((s=!c&&p&&void 0!==p[o])?p:r)[o],l=h&&s?T(a,n):f&&"function"==typeof a?T(Function.call,a):a,p&&k(p,o,a,e&A.U),g[o]!=a&&m(g,o,l),f&&v[o]!=a&&(v[o]=a)};n.core=i,A.F=1,A.G=2,A.S=4,A.P=8,A.B=16,A.W=32,A.U=64,A.R=128;for(var _,C=A,P=E("typed_array"),x=E("view"),L=!(!n.ArrayBuffer||!n.DataView),M=L,N=0,O="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");N<9;)(_=n[O[N++]])?(m(_.prototype,P,!0),m(_.prototype,x,!0)):M=!1;var j={ABV:L,CONSTR:M,TYPED:P,VIEW:x},I=function(e,t,n){for(var i in t)k(e,i,t[i],n);return e},F=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},R=Math.ceil,D=Math.floor,q=function(e){return isNaN(e=+e)?0:(e>0?D:R)(e)},V=Math.min,U=function(e){return e>0?V(q(e),9007199254740991):0},B=function(e){if(void 0===e)return 0;var t=q(e),n=U(t);if(t!==n)throw RangeError("Wrong length!");return n},H={}.toString,W=function(e){return H.call(e).slice(8,-1)},G=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==W(e)?e.split(""):Object(e)},Y=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},z=function(e){return G(Y(e))},K=Math.max,Q=Math.min,J=function(e,t){return(e=q(e))<0?K(e+t,0):Q(e,t)},X=function(e){return function(t,n,i){var r,o=z(t),s=U(o.length),a=J(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},$=n["__core-js_shared__"]||(n["__core-js_shared__"]={}),Z=function(e){return $[e]||($[e]={})},ee=Z("keys"),te=function(e){return ee[e]||(ee[e]=E(e))},ne=X(!1),ie=te("IE_PROTO"),re=function(e,t){var n,i=z(e),r=0,o=[];for(n in i)n!=ie&&y(i,n)&&o.push(n);for(;t.length>r;)y(i,n=t[r++])&&(~ne(o,n)||o.push(n));return o},oe="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),se=oe.concat("length","prototype"),ae={f:Object.getOwnPropertyNames||function(e){return re(e,se)}},le=function(e){return Object(Y(e))},ce=function(e){for(var t=le(this),n=U(t.length),i=arguments.length,r=J(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:J(o,n);s>r;)t[r++]=e;return t},ue=t(function(e){var t=Z("wks"),i=n.Symbol,r="function"==typeof i;(e.exports=function(e){return t[e]||(t[e]=r&&i[e]||(r?i:E)("Symbol."+e))}).store=t}),de=p.f,fe=ue("toStringTag"),he=function(e,t,n){e&&!y(e=n?e:e.prototype,fe)&&de(e,fe,{configurable:!0,value:t})},pe=t(function(e,t){var i=ae.f,r=p.f,o="prototype",l="Wrong index!",c=n.ArrayBuffer,u=n.DataView,d=n.Math,f=n.RangeError,h=n.Infinity,g=c,v=d.abs,y=d.pow,b=d.floor,w=d.log,E=d.LN2,k=a?"_b":"buffer",S=a?"_l":"byteLength",T=a?"_o":"byteOffset";function A(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,u=23===t?y(2,-24)-y(2,-77):0,d=0,f=e<0||0===e&&1/e<0?1:0;for((e=v(e))!=e||e===h?(r=e!=e?1:0,i=l):(i=b(w(e)/E),e*(o=y(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?u/o:u*y(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*y(2,t),i+=c):(r=e*y(2,c-1)*y(2,t),i=0));t>=8;s[d++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[d++]=255&i,i/=256,a-=8);return s[--d]|=128*f,s}function _(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],u=127&c;for(c>>=7;a>0;u=256*u+e[l],l--,a-=8);for(i=u&(1<<-a)-1,u>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===u)u=1-s;else{if(u===o)return i?NaN:c?-h:h;i+=y(2,t),u-=s}return(c?-1:1)*i*y(2,u-t)}function C(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function P(e){return[255&e]}function x(e){return[255&e,e>>8&255]}function L(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function M(e){return A(e,52,8)}function N(e){return A(e,23,4)}function O(e,t,n){r(e[o],t,{get:function(){return this[n]}})}function R(e,t,n,i){var r=B(+n);if(r+t>e[S])throw f(l);var o=e[k]._b,s=r+e[T],a=o.slice(s,s+t);return i?a:a.reverse()}function D(e,t,n,i,r,o){var s=B(+n);if(s+t>e[S])throw f(l);for(var a=e[k]._b,c=s+e[T],u=i(+r),d=0;d<t;d++)a[c+d]=u[o?d:t-d-1]}if(j.ABV){if(!s(function(){c(1)})||!s(function(){new c(-1)})||s(function(){return new c,new c(1.5),new c(NaN),"ArrayBuffer"!=c.name})){for(var V,H=(c=function(e){return F(this,c),new g(B(e))})[o]=g[o],W=i(g),G=0;W.length>G;)(V=W[G++])in c||m(c,V,g[V]);H.constructor=c}var Y=new u(new c(2)),z=u[o].setInt8;Y.setInt8(0,2147483648),Y.setInt8(1,2147483649),!Y.getInt8(0)&&Y.getInt8(1)||I(u[o],{setInt8:function(e,t){z.call(this,e,t<<24>>24)},setUint8:function(e,t){z.call(this,e,t<<24>>24)}},!0)}else c=function(e){F(this,c,"ArrayBuffer");var t=B(e);this._b=ce.call(new Array(t),0),this[S]=t},u=function(e,t,n){F(this,u,"DataView"),F(e,c,"DataView");var i=e[S],r=q(t);if(r<0||r>i)throw f("Wrong offset!");if(r+(n=void 0===n?i-r:U(n))>i)throw f("Wrong length!");this[k]=e,this[T]=r,this[S]=n},a&&(O(c,"byteLength","_l"),O(u,"buffer","_b"),O(u,"byteLength","_l"),O(u,"byteOffset","_o")),I(u[o],{getInt8:function(e){return R(this,1,e)[0]<<24>>24},getUint8:function(e){return R(this,1,e)[0]},getInt16:function(e){var t=R(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=R(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return C(R(this,4,e,arguments[1]))},getUint32:function(e){return C(R(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return _(R(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return _(R(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){D(this,1,e,P,t)},setUint8:function(e,t){D(this,1,e,P,t)},setInt16:function(e,t){D(this,2,e,x,t,arguments[2])},setUint16:function(e,t){D(this,2,e,x,t,arguments[2])},setInt32:function(e,t){D(this,4,e,L,t,arguments[2])},setUint32:function(e,t){D(this,4,e,L,t,arguments[2])},setFloat32:function(e,t){D(this,4,e,N,t,arguments[2])},setFloat64:function(e,t){D(this,8,e,M,t,arguments[2])}});he(c,"ArrayBuffer"),he(u,"DataView"),m(u[o],j.VIEW,!0),t.ArrayBuffer=c,t.DataView=u}),ge=ue("species"),me=function(e,t){var n,i=o(e).constructor;return void 0===i||void 0==(n=o(i)[ge])?t:S(n)},ve=ue("species"),ye=function(e){var t=n[e];a&&t&&!t[ve]&&p.f(t,ve,{configurable:!0,get:function(){return this}})},be=n.ArrayBuffer,we=pe.ArrayBuffer,Ee=pe.DataView,ke=j.ABV&&be.isView,Se=we.prototype.slice,Te=j.VIEW;C(C.G+C.W+C.F*(be!==we),{ArrayBuffer:we}),C(C.S+C.F*!j.CONSTR,"ArrayBuffer",{isView:function(e){return ke&&ke(e)||r(e)&&Te in e}}),C(C.P+C.U+C.F*s(function(){return!new we(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==Se&&void 0===t)return Se.call(o(this),e);for(var n=o(this).byteLength,i=J(e,n),r=J(void 0===t?n:t,n),s=new(me(this,we))(U(r-i)),a=new Ee(this),l=new Ee(s),c=0;i<r;)l.setUint8(c++,a.getUint8(i++));return s}}),ye("ArrayBuffer");var Ae=ue("toStringTag"),_e="Arguments"==W(function(){return arguments}()),Ce=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),Ae))?n:_e?W(t):"Object"==(i=W(t))&&"function"==typeof t.callee?"Arguments":i},Pe={},xe=ue("iterator"),Le=Array.prototype,Me=function(e){return void 0!==e&&(Pe.Array===e||Le[xe]===e)},Ne=Object.keys||function(e){return re(e,oe)},Oe=a?Object.defineProperties:function(e,t){o(e);for(var n,i=Ne(t),r=i.length,s=0;r>s;)p.f(e,n=i[s++],t[n]);return e},je=n.document,Ie=je&&je.documentElement,Fe=te("IE_PROTO"),Re=function(){},De=function(){var e,t=u("iframe"),n=oe.length;for(t.style.display="none",Ie.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),De=e.F;n--;)delete De.prototype[oe[n]];return De()},qe=Object.create||function(e,t){var n;return null!==e?(Re.prototype=o(e),n=new Re,Re.prototype=null,n[Fe]=e):n=De(),void 0===t?n:Oe(n,t)},Ve=te("IE_PROTO"),Ue=Object.prototype,Be=Object.getPrototypeOf||function(e){return e=le(e),y(e,Ve)?e[Ve]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?Ue:null},He=ue("iterator"),We=i.getIteratorMethod=function(e){if(void 0!=e)return e[He]||e["@@iterator"]||Pe[Ce(e)]},Ge=Array.isArray||function(e){return"Array"==W(e)},Ye=ue("species"),ze=function(e,t){return new(function(e){var t;return Ge(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Ge(t.prototype)||(t=void 0),r(t)&&null===(t=t[Ye])&&(t=void 0)),void 0===t?Array:t}(e))(t)},Ke=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||ze;return function(t,c,u){for(var d,f,h=le(t),p=G(h),g=T(c,u,3),m=U(p.length),v=0,y=n?l(t,m):i?l(t,0):void 0;m>v;v++)if((a||v in p)&&(f=g(d=p[v],v,h),e))if(n)y[v]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return v;case 2:y.push(d)}else if(o)return!1;return s?-1:r||o?o:y}},Qe=ue("unscopables"),Je=Array.prototype;void 0==Je[Qe]&&m(Je,Qe,{});var Xe=function(e){Je[Qe][e]=!0},$e=function(e,t){return{value:t,done:!!e}},Ze={};m(Ze,ue("iterator"),function(){return this});var et=function(e,t,n){e.prototype=qe(Ze,{next:g(1,n)}),he(e,t+" Iterator")},tt=ue("iterator"),nt=!([].keys&&"next"in[].keys()),it=function(){return this},rt=function(e,t,n,i,r,o,s){et(n,t,i);var a,l,c,u=function(e){if(!nt&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,g=p[tt]||p["@@iterator"]||r&&p[r],v=!nt&&g||u(r),b=r?f?u("entries"):v:void 0,w="Array"==t&&p.entries||g;if(w&&(c=Be(w.call(new e)))!==Object.prototype&&c.next&&(he(c,d,!0),y(c,tt)||m(c,tt,it)),f&&g&&"values"!==g.name&&(h=!0,v=function(){return g.call(this)}),(nt||h||!p[tt])&&m(p,tt,v),Pe[t]=v,Pe[d]=it,r)if(a={values:f?v:u("values"),keys:o?v:u("keys"),entries:b},s)for(l in a)l in p||k(p,l,a[l]);else C(C.P+C.F*(nt||h),t,a);return a},ot=rt(Array,"Array",function(e,t){this._t=z(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,$e(1)):$e(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");Pe.Arguments=Pe.Array,Xe("keys"),Xe("values"),Xe("entries");var st=ue("iterator"),at=!1;try{[7][st]().return=function(){at=!0}}catch(e){}var lt=function(e,t){if(!t&&!at)return!1;var n=!1;try{var i=[7],r=i[st]();r.next=function(){return{done:n=!0}},i[st]=function(){return r},e(i)}catch(e){}return n},ct=[].copyWithin||function(e,t){var n=le(this),i=U(n.length),r=J(e,i),o=J(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:J(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ut={f:{}.propertyIsEnumerable},dt=Object.getOwnPropertyDescriptor,ft={f:a?dt:function(e,t){if(e=z(e),t=f(t,!0),d)try{return dt(e,t)}catch(e){}if(y(e,t))return g(!ut.f.call(e,t),e[t])}},ht=t(function(e){if(a){var t=n,i=s,o=C,l=j,c=pe,u=T,d=F,h=g,v=m,b=I,w=q,k=U,S=B,A=J,_=f,P=y,x=Ce,L=r,M=le,N=Me,O=qe,R=Be,D=ae.f,V=We,H=E,W=ue,G=Ke,Y=X,z=me,K=ot,Q=Pe,$=lt,Z=ye,ee=ce,te=ct,ne=p,ie=ft,re=ne.f,oe=ie.f,se=t.RangeError,de=t.TypeError,fe=t.Uint8Array,he=Array.prototype,ge=c.ArrayBuffer,ve=c.DataView,be=G(0),we=G(2),Ee=G(3),ke=G(4),Se=G(5),Te=G(6),Ae=Y(!0),_e=Y(!1),xe=K.values,Le=K.keys,Ne=K.entries,Oe=he.lastIndexOf,je=he.reduce,Ie=he.reduceRight,Fe=he.join,Re=he.sort,De=he.slice,Ve=he.toString,Ue=he.toLocaleString,He=W("iterator"),Ge=W("toStringTag"),Ye=H("typed_constructor"),ze=H("def_constructor"),Qe=l.CONSTR,Je=l.TYPED,Xe=l.VIEW,$e=G(1,function(e,t){return it(z(e,e[ze]),t)}),Ze=i(function(){return 1===new fe(new Uint16Array([1]).buffer)[0]}),et=!!fe&&!!fe.prototype.set&&i(function(){new fe(1).set({})}),tt=function(e,t){var n=w(e);if(n<0||n%t)throw se("Wrong offset!");return n},nt=function(e){if(L(e)&&Je in e)return e;throw de(e+" is not a typed array!")},it=function(e,t){if(!(L(e)&&Ye in e))throw de("It is not a typed array constructor!");return new e(t)},rt=function(e,t){return st(z(e,e[ze]),t)},st=function(e,t){for(var n=0,i=t.length,r=it(e,i);i>n;)r[n]=t[n++];return r},at=function(e,t,n){re(e,t,{get:function(){return this._d[n]}})},ut=function(e){var t,n,i,r,o,s,a=M(e),l=arguments.length,c=l>1?arguments[1]:void 0,d=void 0!==c,f=V(a);if(void 0!=f&&!N(f)){for(s=f.call(a),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);a=i}for(d&&l>2&&(c=u(c,arguments[2],2)),t=0,n=k(a.length),r=it(this,n);n>t;t++)r[t]=d?c(a[t],t):a[t];return r},dt=function(){for(var e=0,t=arguments.length,n=it(this,t);t>e;)n[e]=arguments[e++];return n},ht=!!fe&&i(function(){Ue.call(new fe(1))}),pt=function(){return Ue.apply(ht?De.call(nt(this)):nt(this),arguments)},gt={copyWithin:function(e,t){return te.call(nt(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ke(nt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return ee.apply(nt(this),arguments)},filter:function(e){return rt(this,we(nt(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return Se(nt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return Te(nt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){be(nt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return _e(nt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return Ae(nt(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return Fe.apply(nt(this),arguments)},lastIndexOf:function(e){return Oe.apply(nt(this),arguments)},map:function(e){return $e(nt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return je.apply(nt(this),arguments)},reduceRight:function(e){return Ie.apply(nt(this),arguments)},reverse:function(){for(var e,t=nt(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return Ee(nt(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return Re.call(nt(this),e)},subarray:function(e,t){var n=nt(this),i=n.length,r=A(e,i);return new(z(n,n[ze]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,k((void 0===t?i:A(t,i))-r))}},mt=function(e,t){return rt(this,De.call(nt(this),e,t))},vt=function(e){nt(this);var t=tt(arguments[1],1),n=this.length,i=M(e),r=k(i.length),o=0;if(r+t>n)throw se("Wrong length!");for(;o<r;)this[t+o]=i[o++]},yt={entries:function(){return Ne.call(nt(this))},keys:function(){return Le.call(nt(this))},values:function(){return xe.call(nt(this))}},bt=function(e,t){return L(e)&&e[Je]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},wt=function(e,t){return bt(e,t=_(t,!0))?h(2,e[t]):oe(e,t)},Et=function(e,t,n){return!(bt(e,t=_(t,!0))&&L(n)&&P(n,"value"))||P(n,"get")||P(n,"set")||n.configurable||P(n,"writable")&&!n.writable||P(n,"enumerable")&&!n.enumerable?re(e,t,n):(e[t]=n.value,e)};Qe||(ie.f=wt,ne.f=Et),o(o.S+o.F*!Qe,"Object",{getOwnPropertyDescriptor:wt,defineProperty:Et}),i(function(){Ve.call({})})&&(Ve=Ue=function(){return Fe.call(this)});var kt=b({},gt);b(kt,yt),v(kt,He,yt.values),b(kt,{slice:mt,set:vt,constructor:function(){},toString:Ve,toLocaleString:pt}),at(kt,"buffer","b"),at(kt,"byteOffset","o"),at(kt,"byteLength","l"),at(kt,"length","e"),re(kt,Ge,{get:function(){return this[Je]}}),e.exports=function(e,n,r,s){var a=e+((s=!!s)?"Clamped":"")+"Array",c="get"+e,u="set"+e,f=t[a],h=f||{},p=f&&R(f),g=!f||!l.ABV,m={},y=f&&f.prototype,b=function(e,t){re(e,t,{get:function(){return function(e,t){var i=e._d;return i.v[c](t*n+i.o,Ze)}(this,t)},set:function(e){return function(e,t,i){var r=e._d;s&&(i=(i=Math.round(i))<0?0:i>255?255:255&i),r.v[u](t*n+r.o,i,Ze)}(this,t,e)},enumerable:!0})};g?(f=r(function(e,t,i,r){d(e,f,a,"_d");var o,s,l,c,u=0,h=0;if(L(t)){if(!(t instanceof ge||"ArrayBuffer"==(c=x(t))||"SharedArrayBuffer"==c))return Je in t?st(f,t):ut.call(f,t);o=t,h=tt(i,n);var p=t.byteLength;if(void 0===r){if(p%n)throw se("Wrong length!");if((s=p-h)<0)throw se("Wrong length!")}else if((s=k(r)*n)+h>p)throw se("Wrong length!");l=s/n}else l=S(t),o=new ge(s=l*n);for(v(e,"_d",{b:o,o:h,l:s,e:l,v:new ve(o)});u<l;)b(e,u++)}),y=f.prototype=O(kt),v(y,"constructor",f)):i(function(){f(1)})&&i(function(){new f(-1)})&&$(function(e){new f,new f(null),new f(1.5),new f(e)},!0)||(f=r(function(e,t,i,r){var o;return d(e,f,a),L(t)?t instanceof ge||"ArrayBuffer"==(o=x(t))||"SharedArrayBuffer"==o?void 0!==r?new h(t,tt(i,n),r):void 0!==i?new h(t,tt(i,n)):new h(t):Je in t?st(f,t):ut.call(f,t):new h(S(t))}),be(p!==Function.prototype?D(h).concat(D(p)):D(h),function(e){e in f||v(f,e,h[e])}),f.prototype=y,y.constructor=f);var w=y[He],E=!!w&&("values"==w.name||void 0==w.name),T=yt.values;v(f,Ye,!0),v(y,Je,a),v(y,Xe,!0),v(y,ze,f),(s?new f(1)[Ge]==a:Ge in y)||re(y,Ge,{get:function(){return a}}),m[a]=f,o(o.G+o.W+o.F*(f!=h),m),o(o.S,a,{BYTES_PER_ELEMENT:n}),o(o.S+o.F*i(function(){h.of.call(f,1)}),a,{from:ut,of:dt}),"BYTES_PER_ELEMENT"in y||v(y,"BYTES_PER_ELEMENT",n),o(o.P,a,gt),Z(a),o(o.P+o.F*et,a,{set:vt}),o(o.P+o.F*!E,a,yt),y.toString!=Ve&&(y.toString=Ve),o(o.P+o.F*i(function(){new f(1).slice()}),a,{slice:mt}),o(o.P+o.F*(i(function(){return[1,2].toLocaleString()!=new f([1,2]).toLocaleString()})||!i(function(){y.toLocaleString.call([1,2])})),a,{toLocaleString:pt}),Q[a]=E?w:T,E||v(y,He,T)}}else e.exports=function(){}});ht("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),ht("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),ht("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var pt=function(e,t,n,i){try{return i?t(o(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&o(r.call(e)),t}},gt=t(function(e){var t={},n={},i=e.exports=function(e,i,r,s,a){var l,c,u,d,f=a?function(){return e}:We(e),h=T(r,s,i?2:1),p=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(Me(f)){for(l=U(e.length);l>p;p++)if((d=i?h(o(c=e[p])[0],c[1]):h(e[p]))===t||d===n)return d}else for(u=f.call(e);!(c=u.next()).done;)if((d=pt(u,h,c.value,i))===t||d===n)return d};i.BREAK=t,i.RETURN=n}),mt=t(function(e){var t=E("meta"),n=p.f,i=0,o=Object.isExtensible||function(){return!0},a=!s(function(){return o(Object.preventExtensions({}))}),l=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},c=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!r(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!y(e,t)){if(!o(e))return"F";if(!n)return"E";l(e)}return e[t].i},getWeak:function(e,n){if(!y(e,t)){if(!o(e))return!0;if(!n)return!1;l(e)}return e[t].w},onFreeze:function(e){return a&&c.NEED&&o(e)&&!y(e,t)&&l(e),e}}}),vt=function(e,t){if(!r(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},yt=p.f,bt=mt.fastKey,wt=a?"_s":"size",Et=function(e,t){var n,i=bt(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},kt={getConstructor:function(e,t,n,i){var r=e(function(e,o){F(e,r,t,"_i"),e._t=t,e._i=qe(null),e._f=void 0,e._l=void 0,e[wt]=0,void 0!=o&&gt(o,n,e[i],e)});return I(r.prototype,{clear:function(){for(var e=vt(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[wt]=0},delete:function(e){var n=vt(this,t),i=Et(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[wt]--}return!!i},forEach:function(e){vt(this,t);for(var n,i=T(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!Et(vt(this,t),e)}}),a&&yt(r.prototype,"size",{get:function(){return vt(this,t)[wt]}}),r},def:function(e,t,n){var i,r,o=Et(e,t);return o?o.v=n:(e._l=o={i:r=bt(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[wt]++,"F"!==r&&(e._i[r]=o)),e},getEntry:Et,setStrong:function(e,t,n){rt(e,t,function(e,n){this._t=vt(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?$e(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,$e(1))},n?"entries":"values",!n,!0),ye(t)}},St=function(e,t){if(o(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},Tt={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=T(Function.call,ft.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return St(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:St},At=Tt.set,_t=function(e,t,i,o,a,l){var c=n[e],u=c,d=a?"set":"add",f=u&&u.prototype,h={},p=function(e){var t=f[e];k(f,e,"delete"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(l&&!r(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return l&&!r(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof u&&(l||f.forEach&&!s(function(){(new u).entries().next()}))){var g=new u,m=g[d](l?{}:-0,1)!=g,v=s(function(){g.has(1)}),y=lt(function(e){new u(e)}),b=!l&&s(function(){for(var e=new u,t=5;t--;)e[d](t,t);return!e.has(-0)});y||((u=t(function(t,n){F(t,u,e);var i=function(e,t,n){var i,o=t.constructor;return o!==n&&"function"==typeof o&&(i=o.prototype)!==n.prototype&&r(i)&&At&&At(e,i),e}(new c,t,u);return void 0!=n&&gt(n,a,i[d],i),i})).prototype=f,f.constructor=u),(v||b)&&(p("delete"),p("has"),a&&p("get")),(b||m)&&p(d),l&&f.clear&&delete f.clear}else u=o.getConstructor(t,e,a,d),I(u.prototype,i),mt.NEED=!0;return he(u,e),h[e]=u,C(C.G+C.W+C.F*(u!=c),h),l||o.setStrong(u,e,a),u},Ct=(_t("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=kt.getEntry(vt(this,"Map"),e);return t&&t.v},set:function(e,t){return kt.def(vt(this,"Map"),0===e?0:e,t)}},kt,!0),_t("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return kt.def(vt(this,"Set"),e=0===e?0:e,e)}},kt),{f:Object.getOwnPropertySymbols}),Pt=Object.assign,xt=!Pt||s(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=Pt({},e)[n]||Object.keys(Pt({},t)).join("")!=i})?function(e,t){for(var n=le(e),i=arguments.length,r=1,o=Ct.f,s=ut.f;i>r;)for(var a,l=G(arguments[r++]),c=o?Ne(l).concat(o(l)):Ne(l),u=c.length,d=0;u>d;)s.call(l,a=c[d++])&&(n[a]=l[a]);return n}:Pt,Lt=mt.getWeak,Mt=Ke(5),Nt=Ke(6),Ot=0,jt=function(e){return e._l||(e._l=new It)},It=function(){this.a=[]},Ft=function(e,t){return Mt(e.a,function(e){return e[0]===t})};It.prototype={get:function(e){var t=Ft(this,e);if(t)return t[1]},has:function(e){return!!Ft(this,e)},set:function(e,t){var n=Ft(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Nt(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Rt={getConstructor:function(e,t,n,i){var o=e(function(e,r){F(e,o,t,"_i"),e._t=t,e._i=Ot++,e._l=void 0,void 0!=r&&gt(r,n,e[i],e)});return I(o.prototype,{delete:function(e){if(!r(e))return!1;var n=Lt(e);return!0===n?jt(vt(this,t)).delete(e):n&&y(n,this._i)&&delete n[this._i]},has:function(e){if(!r(e))return!1;var n=Lt(e);return!0===n?jt(vt(this,t)).has(e):n&&y(n,this._i)}}),o},def:function(e,t,n){var i=Lt(o(t),!0);return!0===i?jt(e).set(t,n):i[e._i]=n,e},ufstore:jt};t(function(e){var t,n=Ke(0),i=mt.getWeak,o=Object.isExtensible,a=Rt.ufstore,l={},c=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},u={get:function(e){if(r(e)){var t=i(e);return!0===t?a(vt(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return Rt.def(vt(this,"WeakMap"),e,t)}},d=e.exports=_t("WeakMap",c,u,Rt,!0,!0);s(function(){return 7!=(new d).set((Object.freeze||Object)(l),7).get(l)})&&(t=Rt.getConstructor(c,"WeakMap"),xt(t.prototype,u),mt.NEED=!0,n(["delete","has","get","set"],function(e){var n=d.prototype,i=n[e];k(n,e,function(n,s){if(r(n)&&!o(n)){this._f||(this._f=new t);var a=this._f[e](n,s);return"set"==e?this:a}return i.call(this,n,s)})}))});_t("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Rt.def(vt(this,"WeakSet"),e,!0)}},Rt,!1,!0);var Dt=(n.Reflect||{}).apply,qt=Function.apply;C(C.S+C.F*!s(function(){Dt(function(){})}),"Reflect",{apply:function(e,t,n){var i=S(e),r=o(n);return Dt?Dt(i,t,r):qt.call(i,t,r)}});var Vt=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Ut=[].slice,Bt={},Ht=Function.bind||function(e){var t=S(this),n=Ut.call(arguments,1),i=function(){var r=n.concat(Ut.call(arguments));return this instanceof i?function(e,t,n){if(!(t in Bt)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";Bt[t]=Function("F,a","return new F("+i.join(",")+")")}return Bt[t](e,n)}(t,r.length,r):Vt(t,r,e)};return r(t.prototype)&&(i.prototype=t.prototype),i},Wt=(n.Reflect||{}).construct,Gt=s(function(){function e(){}return!(Wt(function(){},[],e)instanceof e)}),Yt=!s(function(){Wt(function(){})});C(C.S+C.F*(Gt||Yt),"Reflect",{construct:function(e,t){S(e),o(t);var n=arguments.length<3?e:S(arguments[2]);if(Yt&&!Gt)return Wt(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(Ht.apply(e,i))}var s=n.prototype,a=qe(r(s)?s:Object.prototype),l=Function.apply.call(e,a,t);return r(l)?l:a}}),C(C.S+C.F*s(function(){Reflect.defineProperty(p.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){o(e),t=f(t,!0),o(n);try{return p.f(e,t,n),!0}catch(e){return!1}}});var zt=ft.f;C(C.S,"Reflect",{deleteProperty:function(e,t){var n=zt(o(e),t);return!(n&&!n.configurable)&&delete e[t]}}),C(C.S,"Reflect",{get:function e(t,n){var i,s,a=arguments.length<3?t:arguments[2];return o(t)===a?t[n]:(i=ft.f(t,n))?y(i,"value")?i.value:void 0!==i.get?i.get.call(a):void 0:r(s=Be(t))?e(s,n,a):void 0}}),C(C.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return ft.f(o(e),t)}}),C(C.S,"Reflect",{getPrototypeOf:function(e){return Be(o(e))}}),C(C.S,"Reflect",{has:function(e,t){return t in e}});var Kt=Object.isExtensible;C(C.S,"Reflect",{isExtensible:function(e){return o(e),!Kt||Kt(e)}});var Qt=n.Reflect,Jt=Qt&&Qt.ownKeys||function(e){var t=ae.f(o(e)),n=Ct.f;return n?t.concat(n(e)):t};C(C.S,"Reflect",{ownKeys:Jt});var Xt=Object.preventExtensions;C(C.S,"Reflect",{preventExtensions:function(e){o(e);try{return Xt&&Xt(e),!0}catch(e){return!1}}}),C(C.S,"Reflect",{set:function e(t,n,i){var s,a,l=arguments.length<4?t:arguments[3],c=ft.f(o(t),n);if(!c){if(r(a=Be(t)))return e(a,n,i,l);c=g(0)}return y(c,"value")?!(!1===c.writable||!r(l)||((s=ft.f(l,n)||g(0)).value=i,p.f(l,n,s),0)):void 0!==c.set&&(c.set.call(l,i),!0)}}),Tt&&C(C.S,"Reflect",{setPrototypeOf:function(e,t){Tt.check(e,t);try{return Tt.set(e,t),!0}catch(e){return!1}}});var $t,Zt,en,tn=n.process,nn=n.setImmediate,rn=n.clearImmediate,on=n.MessageChannel,sn=n.Dispatch,an=0,ln={},cn=function(){var e=+this;if(ln.hasOwnProperty(e)){var t=ln[e];delete ln[e],t()}},un=function(e){cn.call(e.data)};nn&&rn||(nn=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return ln[++an]=function(){Vt("function"==typeof e?e:Function(e),t)},$t(an),an},rn=function(e){delete ln[e]},"process"==W(tn)?$t=function(e){tn.nextTick(T(cn,e,1))}:sn&&sn.now?$t=function(e){sn.now(T(cn,e,1))}:on?(en=(Zt=new on).port2,Zt.port1.onmessage=un,$t=T(en.postMessage,en,1)):n.addEventListener&&"function"==typeof postMessage&&!n.importScripts?($t=function(e){n.postMessage(e+"","*")},n.addEventListener("message",un,!1)):$t="onreadystatechange"in u("script")?function(e){Ie.appendChild(u("script")).onreadystatechange=function(){Ie.removeChild(this),cn.call(e)}}:function(e){setTimeout(T(cn,e,1),0)});var dn={set:nn,clear:rn},fn=dn.set,hn=n.MutationObserver||n.WebKitMutationObserver,pn=n.process,gn=n.Promise,mn="process"==W(pn);var vn,yn,bn,wn,En={f:function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=S(t),this.reject=S(n)}(e)}},kn=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},Sn=dn.set,Tn=function(){var e,t,i,r=function(){var n,r;for(mn&&(n=pn.domain)&&n.exit();e;){r=e.fn,e=e.next;try{r()}catch(n){throw e?i():t=void 0,n}}t=void 0,n&&n.enter()};if(mn)i=function(){pn.nextTick(r)};else if(!hn||n.navigator&&n.navigator.standalone)if(gn&&gn.resolve){var o=gn.resolve();i=function(){o.then(r)}}else i=function(){fn.call(n,r)};else{var s=!0,a=document.createTextNode("");new hn(r).observe(a,{characterData:!0}),i=function(){a.data=s=!s}}return function(n){var r={fn:n,next:void 0};t&&(t.next=r),e||(e=r,i()),t=r}}(),An=n.TypeError,_n=n.process,Cn=n.Promise,Pn="process"==Ce(_n),xn=function(){},Ln=yn=En.f,Mn=!!function(){try{var e=Cn.resolve(1),t=(e.constructor={})[ue("species")]=function(e){e(xn,xn)};return(Pn||"function"==typeof PromiseRejectionEvent)&&e.then(xn)instanceof t}catch(e){}}(),Nn=function(e){var t;return!(!r(e)||"function"!=typeof(t=e.then))&&t},On=function(e,t){if(!e._n){e._n=!0;var n=e._c;Tn(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&Fn(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(An("Promise-chain cycle")):(o=Nn(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&jn(e)})}},jn=function(e){Sn.call(n,function(){var t,i,r,o=e._v,s=In(e);if(s&&(t=kn(function(){Pn?_n.emit("unhandledRejection",o,e):(i=n.onunhandledrejection)?i({promise:e,reason:o}):(r=n.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=Pn||In(e)?2:1),e._a=void 0,s&&t.e)throw t.v})},In=function(e){return 1!==e._h&&0===(e._a||e._c).length},Fn=function(e){Sn.call(n,function(){var t;Pn?_n.emit("rejectionHandled",e):(t=n.onrejectionhandled)&&t({promise:e,reason:e._v})})},Rn=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),On(t,!0))},Dn=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw An("Promise can't be resolved itself");(t=Nn(e))?Tn(function(){var i={_w:n,_d:!1};try{t.call(e,T(Dn,i,1),T(Rn,i,1))}catch(e){Rn.call(i,e)}}):(n._v=e,n._s=1,On(n,!1))}catch(e){Rn.call({_w:n,_d:!1},e)}}};Mn||(Cn=function(e){F(this,Cn,"Promise","_h"),S(e),vn.call(this);try{e(T(Dn,this,1),T(Rn,this,1))}catch(e){Rn.call(this,e)}},(vn=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=I(Cn.prototype,{then:function(e,t){var n=Ln(me(this,Cn));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=Pn?_n.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&On(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),bn=function(){var e=new vn;this.promise=e,this.resolve=T(Dn,e,1),this.reject=T(Rn,e,1)},En.f=Ln=function(e){return e===Cn||e===wn?new bn(e):yn(e)}),C(C.G+C.W+C.F*!Mn,{Promise:Cn}),he(Cn,"Promise"),ye("Promise"),wn=i.Promise,C(C.S+C.F*!Mn,"Promise",{reject:function(e){var t=Ln(this);return(0,t.reject)(e),t.promise}}),C(C.S+C.F*!Mn,"Promise",{resolve:function(e){return function(e,t){if(o(e),r(t)&&t.constructor===e)return t;var n=En.f(e);return(0,n.resolve)(t),n.promise}(this,e)}}),C(C.S+C.F*!(Mn&&lt(function(e){Cn.all(e).catch(xn)})),"Promise",{all:function(e){var t=this,n=Ln(t),i=n.resolve,r=n.reject,o=kn(function(){var n=[],o=0,s=1;gt(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=Ln(t),i=n.reject,r=kn(function(){gt(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var qn={f:ue},Vn=p.f,Un=function(e){var t=i.Symbol||(i.Symbol=n.Symbol||{});"_"==e.charAt(0)||e in t||Vn(t,e,{value:qn.f(e)})},Bn=ae.f,Hn={}.toString,Wn="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Gn={f:function(e){return Wn&&"[object Window]"==Hn.call(e)?function(e){try{return Bn(e)}catch(e){return Wn.slice()}}(e):Bn(z(e))}},Yn=mt.KEY,zn=ft.f,Kn=p.f,Qn=Gn.f,Jn=n.Symbol,Xn=n.JSON,$n=Xn&&Xn.stringify,Zn=ue("_hidden"),ei=ue("toPrimitive"),ti={}.propertyIsEnumerable,ni=Z("symbol-registry"),ii=Z("symbols"),ri=Z("op-symbols"),oi=Object.prototype,si="function"==typeof Jn,ai=n.QObject,li=!ai||!ai.prototype||!ai.prototype.findChild,ci=a&&s(function(){return 7!=qe(Kn({},"a",{get:function(){return Kn(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=zn(oi,t);i&&delete oi[t],Kn(e,t,n),i&&e!==oi&&Kn(oi,t,i)}:Kn,ui=function(e){var t=ii[e]=qe(Jn.prototype);return t._k=e,t},di=si&&"symbol"==typeof Jn.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Jn},fi=function(e,t,n){return e===oi&&fi(ri,t,n),o(e),t=f(t,!0),o(n),y(ii,t)?(n.enumerable?(y(e,Zn)&&e[Zn][t]&&(e[Zn][t]=!1),n=qe(n,{enumerable:g(0,!1)})):(y(e,Zn)||Kn(e,Zn,g(1,{})),e[Zn][t]=!0),ci(e,t,n)):Kn(e,t,n)},hi=function(e,t){o(e);for(var n,i=function(e){var t=Ne(e),n=Ct.f;if(n)for(var i,r=n(e),o=ut.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t}(t=z(t)),r=0,s=i.length;s>r;)fi(e,n=i[r++],t[n]);return e},pi=function(e){var t=ti.call(this,e=f(e,!0));return!(this===oi&&y(ii,e)&&!y(ri,e))&&(!(t||!y(this,e)||!y(ii,e)||y(this,Zn)&&this[Zn][e])||t)},gi=function(e,t){if(e=z(e),t=f(t,!0),e!==oi||!y(ii,t)||y(ri,t)){var n=zn(e,t);return!n||!y(ii,t)||y(e,Zn)&&e[Zn][t]||(n.enumerable=!0),n}},mi=function(e){for(var t,n=Qn(z(e)),i=[],r=0;n.length>r;)y(ii,t=n[r++])||t==Zn||t==Yn||i.push(t);return i},vi=function(e){for(var t,n=e===oi,i=Qn(n?ri:z(e)),r=[],o=0;i.length>o;)!y(ii,t=i[o++])||n&&!y(oi,t)||r.push(ii[t]);return r};si||(k((Jn=function(){if(this instanceof Jn)throw TypeError("Symbol is not a constructor!");var e=E(arguments.length>0?arguments[0]:void 0),t=function(n){this===oi&&t.call(ri,n),y(this,Zn)&&y(this[Zn],e)&&(this[Zn][e]=!1),ci(this,e,g(1,n))};return a&&li&&ci(oi,e,{configurable:!0,set:t}),ui(e)}).prototype,"toString",function(){return this._k}),ft.f=gi,p.f=fi,ae.f=Gn.f=mi,ut.f=pi,Ct.f=vi,a&&k(oi,"propertyIsEnumerable",pi,!0),qn.f=function(e){return ui(ue(e))}),C(C.G+C.W+C.F*!si,{Symbol:Jn});for(var yi="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),bi=0;yi.length>bi;)ue(yi[bi++]);for(var wi=Ne(ue.store),Ei=0;wi.length>Ei;)Un(wi[Ei++]);C(C.S+C.F*!si,"Symbol",{for:function(e){return y(ni,e+="")?ni[e]:ni[e]=Jn(e)},keyFor:function(e){if(!di(e))throw TypeError(e+" is not a symbol!");for(var t in ni)if(ni[t]===e)return t},useSetter:function(){li=!0},useSimple:function(){li=!1}}),C(C.S+C.F*!si,"Object",{create:function(e,t){return void 0===t?qe(e):hi(qe(e),t)},defineProperty:fi,defineProperties:hi,getOwnPropertyDescriptor:gi,getOwnPropertyNames:mi,getOwnPropertySymbols:vi}),Xn&&C(C.S+C.F*(!si||s(function(){var e=Jn();return"[null]"!=$n([e])||"{}"!=$n({a:e})||"{}"!=$n(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=t=i[1],(r(t)||void 0!==e)&&!di(e))return Ge(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!di(t))return t}),i[1]=t,$n.apply(Xn,i)}}),Jn.prototype[ei]||m(Jn.prototype,ei,Jn.prototype.valueOf),he(Jn,"Symbol"),he(Math,"Math",!0),he(n.JSON,"JSON",!0);var ki=function(e,t){var n=(i.Object||{})[e]||Object[e],r={};r[e]=t(n),C(C.S+C.F*s(function(){n(1)}),"Object",r)},Si=mt.onFreeze;ki("freeze",function(e){return function(t){return e&&r(t)?e(Si(t)):t}});var Ti=mt.onFreeze;ki("seal",function(e){return function(t){return e&&r(t)?e(Ti(t)):t}});var Ai=mt.onFreeze;ki("preventExtensions",function(e){return function(t){return e&&r(t)?e(Ai(t)):t}}),ki("isFrozen",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isSealed",function(e){return function(t){return!r(t)||!!e&&e(t)}}),ki("isExtensible",function(e){return function(t){return!!r(t)&&(!e||e(t))}});var _i=ft.f;ki("getOwnPropertyDescriptor",function(){return function(e,t){return _i(z(e),t)}}),ki("getPrototypeOf",function(){return function(e){return Be(le(e))}}),ki("keys",function(){return function(e){return Ne(le(e))}}),ki("getOwnPropertyNames",function(){return Gn.f}),C(C.S+C.F,"Object",{assign:xt});var Ci=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t};C(C.S,"Object",{is:Ci});var Pi=p.f,xi=Function.prototype,Li=/^\s*function ([^ (]*)/;"name"in xi||a&&Pi(xi,"name",{configurable:!0,get:function(){try{return(""+this).match(Li)[1]}catch(e){return""}}}),C(C.S,"String",{raw:function(e){for(var t=z(e.raw),n=U(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var Mi=String.fromCharCode,Ni=String.fromCodePoint;C(C.S+C.F*(!!Ni&&1!=Ni.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],J(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?Mi(t):Mi(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Oi,ji=(Oi=!1,function(e,t){var n,i,r=String(Y(e)),o=q(t),s=r.length;return o<0||o>=s?Oi?"":void 0:(n=r.charCodeAt(o))<55296||n>56319||o+1===s||(i=r.charCodeAt(o+1))<56320||i>57343?Oi?r.charAt(o):n:Oi?r.slice(o,o+2):i-56320+(n-55296<<10)+65536});C(C.P,"String",{codePointAt:function(e){return ji(this,e)}});var Ii=function(e){var t=String(Y(this)),n="",i=q(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n};C(C.P,"String",{repeat:Ii});var Fi=ue("match"),Ri=function(e){var t;return r(e)&&(void 0!==(t=e[Fi])?!!t:"RegExp"==W(e))},Di=function(e,t,n){if(Ri(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(Y(e))},qi=ue("match"),Vi=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[qi]=!1,!"/./"[e](t)}catch(e){}}return!0},Ui="".startsWith;C(C.P+C.F*Vi("startsWith"),"String",{startsWith:function(e){var t=Di(this,e,"startsWith"),n=U(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Ui?Ui.call(t,i,n):t.slice(n,n+i.length)===i}});var Bi="".endsWith;C(C.P+C.F*Vi("endsWith"),"String",{endsWith:function(e){var t=Di(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=U(t.length),r=void 0===n?i:Math.min(U(n),i),o=String(e);return Bi?Bi.call(t,o,r):t.slice(r-o.length,r)===o}});C(C.P+C.F*Vi("includes"),"String",{includes:function(e){return!!~Di(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});a&&"g"!=/./g.flags&&p.f(RegExp.prototype,"flags",{configurable:!0,get:function(){var e=o(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}});var Hi=function(e,t,n){var i=ue(e),r=n(Y,i,""[e]),o=r[0],a=r[1];s(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(k(String.prototype,e,o),m(RegExp.prototype,i,2==t?function(e,t){return a.call(e,this,t)}:function(e){return a.call(e,this)}))};Hi("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),Hi("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("split",2,function(e,t,n){var i=Ri,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,g=void 0===t?4294967295:t>>>0,m=new RegExp(e.source,h+"g");for(s||(a=new RegExp("^"+m.source+"$(?!\\s)",h));(l=m.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=g));)m.lastIndex===l.index&&m.lastIndex++;return p===n.length?!u&&m.test("")||f.push(""):f.push(n.slice(p)),f.length>g?f.slice(0,g):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),Hi("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var Wi=function(e,t,n){t in e?p.f(e,t,g(0,n)):e[t]=n};C(C.S+C.F*!lt(function(e){}),"Array",{from:function(e){var t,n,i,r,o=le(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=We(o);if(c&&(l=T(l,a>2?arguments[2]:void 0,2)),void 0==d||s==Array&&Me(d))for(n=new s(t=U(o.length));t>u;u++)Wi(n,u,c?l(o[u],u):o[u]);else for(r=d.call(o),n=new s;!(i=r.next()).done;u++)Wi(n,u,c?pt(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),C(C.S+C.F*s(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)Wi(n,e,arguments[e++]);return n.length=t,n}}),C(C.P,"Array",{copyWithin:ct}),Xe("copyWithin");var Gi=Ke(5),Yi=!0;"find"in[]&&Array(1).find(function(){Yi=!1}),C(C.P+C.F*Yi,"Array",{find:function(e){return Gi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("find");var zi=Ke(6),Ki=!0;"findIndex"in[]&&Array(1).findIndex(function(){Ki=!1}),C(C.P+C.F*Ki,"Array",{findIndex:function(e){return zi(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("findIndex"),C(C.P,"Array",{fill:ce}),Xe("fill");var Qi=n.isFinite;C(C.S,"Number",{isFinite:function(e){return"number"==typeof e&&Qi(e)}});var Ji=Math.floor,Xi=function(e){return!r(e)&&isFinite(e)&&Ji(e)===e};C(C.S,"Number",{isInteger:Xi});var $i=Math.abs;C(C.S,"Number",{isSafeInteger:function(e){return Xi(e)&&$i(e)<=9007199254740991}}),C(C.S,"Number",{isNaN:function(e){return e!=e}}),C(C.S,"Number",{EPSILON:Math.pow(2,-52)}),C(C.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),C(C.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var Zi=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},er=Math.sqrt,tr=Math.acosh;C(C.S+C.F*!(tr&&710==Math.floor(tr(Number.MAX_VALUE))&&tr(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:Zi(e-1+er(e-1)*er(e+1))}});var nr=Math.asinh;C(C.S+C.F*!(nr&&1/nr(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var ir=Math.atanh;C(C.S+C.F*!(ir&&1/ir(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var rr=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1};C(C.S,"Math",{cbrt:function(e){return rr(e=+e)*Math.pow(Math.abs(e),1/3)}}),C(C.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var or=Math.exp;C(C.S,"Math",{cosh:function(e){return(or(e=+e)+or(-e))/2}});var sr=Math.expm1,ar=!sr||sr(10)>22025.465794806718||sr(10)<22025.465794806718||-2e-17!=sr(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:sr;C(C.S+C.F*(ar!=Math.expm1),"Math",{expm1:ar});var lr=Math.pow,cr=lr(2,-52),ur=lr(2,-23),dr=lr(2,127)*(2-ur),fr=lr(2,-126),hr=Math.fround||function(e){var t,n,i=Math.abs(e),r=rr(e);return i<fr?r*(i/fr/ur+1/cr-1/cr)*fr*ur:(n=(t=(1+ur/cr)*i)-(t-i))>dr||n!=n?r*(1/0):r*n};C(C.S,"Math",{fround:hr});var pr=Math.abs;C(C.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=pr(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var gr=Math.imul;C(C.S+C.F*s(function(){return-5!=gr(4294967295,5)||2!=gr.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),C(C.S,"Math",{log1p:Zi}),C(C.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),C(C.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),C(C.S,"Math",{sign:rr});var mr=Math.exp;C(C.S+C.F*s(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(ar(e)-ar(-e))/2:(mr(e-1)-mr(-e-1))*(Math.E/2)}});var vr=Math.exp;C(C.S,"Math",{tanh:function(e){var t=ar(e=+e),n=ar(-e);return t==1/0?1:n==1/0?-1:(t-n)/(vr(e)+vr(-e))}}),C(C.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var yr=X(!0);C(C.P,"Array",{includes:function(e){return yr(this,e,arguments.length>1?arguments[1]:void 0)}}),Xe("includes");var br=ut.f,wr=function(e){return function(t){for(var n,i=z(t),r=Ne(i),o=r.length,s=0,a=[];o>s;)br.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Er=wr(!1);C(C.S,"Object",{values:function(e){return Er(e)}});var kr=wr(!0);C(C.S,"Object",{entries:function(e){return kr(e)}}),C(C.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=z(e),r=ft.f,o=Jt(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&Wi(s,t,n);return s}});var Sr=function(e,t,n,i){var r=String(Y(e)),o=r.length,s=void 0===n?" ":String(n),a=U(t);if(a<=o||""==s)return r;var l=a-o,c=Ii.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Tr=n.navigator,Ar=Tr&&Tr.userAgent||"";C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padStart:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),C(C.P+C.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(Ar),"String",{padEnd:function(e){return Sr(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var _r=[].slice,Cr=/MSIE .\./.test(Ar),Pr=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&_r.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};C(C.G+C.B+C.F*Cr,{setTimeout:Pr(n.setTimeout),setInterval:Pr(n.setInterval)}),C(C.G+C.B,{setImmediate:dn.set,clearImmediate:dn.clear});for(var xr=ue("iterator"),Lr=ue("toStringTag"),Mr=Pe.Array,Nr={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},Or=Ne(Nr),jr=0;jr<Or.length;jr++){var Ir,Fr=Or[jr],Rr=Nr[Fr],Dr=n[Fr],qr=Dr&&Dr.prototype;if(qr&&(qr[xr]||m(qr,xr,Mr),qr[Lr]||m(qr,Lr,Fr),Pe[Fr]=Mr,Rr))for(Ir in ot)qr[Ir]||k(qr,Ir,ot[Ir],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},g={};g[s]=function(){return this};var m=Object.getPrototypeOf,v=m&&m(m(L([])));v&&v!==i&&r.call(v,s)&&(g=v);var y=S.prototype=E.prototype=Object.create(g);k.prototype=y.constructor=S,S.constructor=k,S[l]=k.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===k||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,S):(e.__proto__=S,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(y),e},c.awrap=function(e){return{__await:e}},T(A.prototype),A.prototype[a]=function(){return this},c.AsyncIterator=A,c.async=function(e,t,n,i){var r=new A(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},T(y),y[l]="Generator",y[s]=function(){return this},y.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=L,x.prototype={constructor:x,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(P),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),P(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;P(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:L(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof E?t:E,o=Object.create(r.prototype),s=new x(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return M()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=_(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=w(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function E(){}function k(){}function S(){}function T(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function A(t){function n(e,i,o,s){var a=w(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function _(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,_(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=w(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function P(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function x(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function L(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:M}}function M(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var Vr=new window.CustomEvent("test");if(Vr.preventDefault(),!0!==Vr.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ur=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ur.prototype=window.Event.prototype,window.CustomEvent=Ur}var Br,Hr={html5:"html5",youtube:"youtube",vimeo:"vimeo"},Wr={audio:"audio",video:"video"},Gr={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.17/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},Yr=(function(){function e(e){this.value=e}function t(t){var n,i;function r(n,i){try{var s=t[n](i),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":n.resolve({value:t,done:!0});break;case"throw":n.reject(t);break;default:n.resolve({value:t,done:!1})}(n=n.next)?r(n.key,n.arg):i=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};i?i=i.next=a:(n=i=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),zr=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Kr=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Qr=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Jr={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e,t,n){var i=document.querySelector('script[src="'+e+'"]');if(null!==i)return i.callbacks=i.callbacks||[],void i.callbacks.push(t);var r=document.createElement("script");r.callbacks=r.callbacks||[],r.callbacks.push(t),r.errors=r.errors||[],r.errors.push(n),Jr.is.function(t)&&r.addEventListener("load",function(e){r.callbacks.forEach(function(t){return t.call(null,e)}),r.callbacks=null},!1),r.addEventListener("error",function(e){r.errors.forEach(function(t){return t.call(null,e)}),r.errors=null},!1),r.src=e;var o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(r,o)},loadSprite:function(e,t){if(Jr.is.string(e)){var n=Jr.is.string(t);if(!n||!document.querySelectorAll("#"+t).length){var i=document.createElement("div");if(Jr.toggleHidden(i,!0),n&&i.setAttribute("id",t),Xr.storage){var r=window.localStorage.getItem("cache-"+t);if(null!==r){var o=JSON.parse(r);return void s.call(i,o.content)}}Jr.fetch(e).then(function(e){Jr.is.empty(e)||(Xr.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),s.call(i,e))}).catch(function(){})}}function s(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Jr.is.object(t)&&Jr.setAttributes(i,t),Jr.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Jr.createElement(e,n,i))},removeElement:function(e){Jr.is.element(e)&&Jr.is.element(e.parentNode)&&(Jr.is.nodeList(e)||Jr.is.array(e)?Array.from(e).forEach(Jr.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Jr.is.element(t)&&Jr.is.element(t.parentNode)&&Jr.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Jr.is.element(e)&&!Jr.is.empty(t)&&Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})},getAttributesFromSelector:function(e,t){if(!Jr.is.string(e)||Jr.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Jr.is.object(i)&&Jr.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(Jr.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return Jr.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){Jr.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=Jr.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Jr.getElements.call(this,this.config.selectors.buttons.play),pause:Jr.getElement.call(this,this.config.selectors.buttons.pause),restart:Jr.getElement.call(this,this.config.selectors.buttons.restart),rewind:Jr.getElement.call(this,this.config.selectors.buttons.rewind),forward:Jr.getElement.call(this,this.config.selectors.buttons.forward),mute:Jr.getElement.call(this,this.config.selectors.buttons.mute),pip:Jr.getElement.call(this,this.config.selectors.buttons.pip),airplay:Jr.getElement.call(this,this.config.selectors.buttons.airplay),settings:Jr.getElement.call(this,this.config.selectors.buttons.settings),captions:Jr.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Jr.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Jr.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Jr.getElement.call(this,this.config.selectors.inputs.seek),volume:Jr.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Jr.getElement.call(this,this.config.selectors.display.buffer),duration:Jr.getElement.call(this,this.config.selectors.display.duration),currentTime:Jr.getElement.call(this,this.config.selectors.display.currentTime)},Jr.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Jr.is.element(e)){var n=Jr.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Jr.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Jr.on(this.elements.container,"keydown",o,!1):Jr.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n,i,r,o){if(!Jr.is.empty(e)&&!Jr.is.empty(t)&&Jr.is.function(n))if(Jr.is.nodeList(e)||Jr.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Jr.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=!!Jr.is.boolean(o)&&o;Xr.passiveListeners&&(a={passive:!Jr.is.boolean(r)||r,capture:!!Jr.is.boolean(o)&&o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e,t,n,i,r){Jr.toggleListener(e,t,n,!0,i,r)},off:function(e,t,n,i,r){Jr.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e,t,n,i){if(Jr.is.element(e)&&Jr.is.string(t)){var r=new CustomEvent(t,{bubbles:!!Jr.is.boolean(n)&&n,detail:Object.assign({},i,{plyr:Jr.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Jr.is.array(e)||Jr.is.nodeList(e))Array.from(e).forEach(function(e){return Jr.toggleState(e,t)});else if(Jr.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Jr.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Jr.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Jr.is.object(r)?(Object.keys(r).forEach(function(t){Jr.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Kr({},t,{})),Jr.extend(e[t],r[t])):Object.assign(e,Kr({},t,r[t]))}),Jr.extend.apply(Jr,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?Hr.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?Hr.vimeo:null},parseYouTubeId:function(e){if(Jr.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Jr.is.empty(e))return null;if(Jr.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Qr(n,2),r=i[0],o=i[1];return Object.assign(e,Kr({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Jr.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Jr.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Jr.toggleHidden(e,!0),e.offsetHeight,Jr.toggleHidden(e,!1)},0)}},Xr={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Jr.getBrowser(),s=o.isIPhone&&n&&Xr.inline;switch(t+":"+e){case"html5:video":r=(i=Xr.video)&&Xr.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=Xr.audio)&&Xr.rangeInput;break;case"youtube:video":i=!0,r=Xr.rangeInput&&(!o.isIPhone||s);break;case"vimeo:video":i=!0,r=Xr.rangeInput&&!o.isIPhone;break;default:r=(i=Xr.audio&&Xr.video)&&Xr.rangeInput}return{api:i,ui:r}},pip:!Jr.getBrowser().isIPhone&&Jr.is.function(Jr.createElement("video").webkitSetPresentationMode),airplay:Jr.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Jr.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(Br=document.createElement("input"),Br.type="range","range"===Br.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Jr.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},$r=function(){},Zr=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Yr(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return zr(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):$r}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):$r}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):$r}}]),e}(),eo=Jr.getBrowser();function to(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Jr.is.element(e)&&Jr.toggleState(e,this.active),Jr.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),eo.isIos||Jr.trapFocus.call(this.player,this.target,this.active)}}function no(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Jr.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),to.call(this)}var io=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},Jr.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){to.call(n)}),Jr.on(this.player.elements.container,"dblclick",function(){n.toggle()}),Jr.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return zr(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Jr.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(eo.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Jr.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():no.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(eo.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?Jr.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():no.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!Jr.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:Jr.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return eo.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Jr.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return Jr.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!Jr.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),ro=function(){function e(t){Yr(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return zr(e,[{key:"get",value:function(t){var n=window.localStorage.getItem(this.key);if(!e.supported||Jr.is.empty(n))return null;var i=JSON.parse(n);return Jr.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Jr.is.object(t)){var n=this.get();Jr.is.empty(n)&&(n={}),Jr.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),oo=function(){function e(t){var n=this;Yr(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=Jr.is.url(t.config.ads.tag),this.enabled&&(Jr.is.object(window.google)?this.ready():Jr.loadScript(t.config.urls.googleIMA.api,function(){n.ready()},function(){n.blocked=!0,n.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return zr(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Jr.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+Jr.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=Jr.formatTime(e.manager.getRemainingTime()),n=e.player.config.i18n.advertisement+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var n=t.player.elements.progress;if(n){var i=100/t.player.duration*e,r=Jr.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){Jr.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),r("loaded"),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),r("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),r("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),r("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:r("started");break;case google.ima.AdEvent.Type.MIDPOINT:r("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:r("complete");break;case google.ima.AdEvent.Type.IMPRESSION:r("impression");break;case google.ima.AdEvent.Type.CLICK:r("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){Jr.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){Jr.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){Jr.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Jr.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),so=Jr.getBrowser(),ao={global:function(){var e=this,t=null,n=function(n){var i=function(e){return e.keyCode?e.keyCode:e.which}(n),r="keydown"===n.type,o=r&&i===t;if(!(n.altKey||n.ctrlKey||n.metaKey||n.shiftKey)&&Jr.is.number(i)){if(r){var s=Jr.getFocusElement();if(Jr.is.element(s)&&Jr.matches(s,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(n.preventDefault(),n.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:o||(e.currentTime=e.duration/10*(i-48));break;case 32:case 75:o||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:o||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:o||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===i&&e.fullscreen.toggle(),t=i}else t=null}};this.config.keyboard.global?Jr.on(window,"keydown keyup",n,!1):this.config.keyboard.focused&&Jr.on(this.elements.container,"keydown keyup",n,!1),Jr.on(this.elements.container,"focusout",function(t){Jr.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),Jr.on(this.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Jr.toggleClass(Jr.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&Jr.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(Jr.on(this.media,"timeupdate seeking",function(t){return lo.timeUpdate.call(e,t)}),Jr.on(this.media,"durationchange loadedmetadata",function(t){return lo.durationUpdate.call(e,t)}),Jr.on(this.media,"loadeddata",function(){Jr.toggleHidden(e.elements.volume,!e.hasAudio),Jr.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),Jr.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),Jr.on(this.media,"progress playing",function(t){return lo.updateProgress.call(e,t)}),Jr.on(this.media,"volumechange",function(t){return lo.updateVolume.call(e,t)}),Jr.on(this.media,"playing play pause ended",function(t){return lo.checkPlaying.call(e,t)}),Jr.on(this.media,"waiting canplay seeked playing",function(t){return lo.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=Jr.getElement.call(this,"."+this.config.classNames.video);if(!Jr.is.element(t))return;Jr.on(t,"click",function(){e.config.hideControls&&Xr.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&Jr.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),Jr.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),Jr.on(this.media,"ratechange",function(){uo.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),Jr.on(this.media,"qualitychange",function(){uo.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),Jr.on(this.media,"languagechange",function(){uo.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),Jr.on(this.media,"captionsenabled captionsdisabled",function(){uo.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),Jr.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.media.error),Jr.dispatchEvent.call(e,e.elements.container,t.type,!0,n)})},controls:function(){var e=this,t=so.isIE?"change":"input",n=function(t,n,i){var r=e.config.listeners[n];Jr.is.function(r)&&r.call(e,t),!t.defaultPrevented&&Jr.is.function(i)&&i.call(e,t)};Jr.on(this.elements.buttons.play,"click",function(t){return n(t,"play",function(){e.togglePlay()})}),Jr.on(this.elements.buttons.restart,"click",function(t){return n(t,"restart",function(){e.restart()})}),Jr.on(this.elements.buttons.rewind,"click",function(t){return n(t,"rewind",function(){e.rewind()})}),Jr.on(this.elements.buttons.forward,"click",function(t){return n(t,"forward",function(){e.forward()})}),Jr.on(this.elements.buttons.mute,"click",function(t){return n(t,"mute",function(){e.muted=!e.muted})}),Jr.on(this.elements.buttons.captions,"click",function(t){return n(t,"captions",function(){e.toggleCaptions()})}),Jr.on(this.elements.buttons.fullscreen,"click",function(t){return n(t,"fullscreen",function(){e.fullscreen.toggle()})}),Jr.on(this.elements.buttons.pip,"click",function(t){return n(t,"pip",function(){e.pip="toggle"})}),Jr.on(this.elements.buttons.airplay,"click",function(t){return n(t,"airplay",function(){e.airplay()})}),Jr.on(this.elements.buttons.settings,"click",function(t){uo.toggleMenu.call(e,t)}),Jr.on(document.documentElement,"click",function(t){uo.toggleMenu.call(e,t)}),Jr.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),Jr.matches(t.target,e.config.selectors.inputs.language)?n(t,"language",function(){e.language=t.target.value}):Jr.matches(t.target,e.config.selectors.inputs.quality)?n(t,"quality",function(){e.quality=t.target.value}):Jr.matches(t.target,e.config.selectors.inputs.speed)?n(t,"speed",function(){e.speed=parseFloat(t.target.value)}):uo.showTab.call(e,t)}),Jr.on(this.elements.inputs.seek,t,function(t){return n(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!Jr.is.element(this.elements.display.duration)&&Jr.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,lo.timeUpdate.call(e))}),Jr.on(this.elements.inputs.volume,t,function(t){return n(t,"volume",function(){e.volume=t.target.value})}),so.isWebkit&&Jr.on(Jr.getElements.call(this,'input[type="range"]'),"input",function(t){uo.updateRangeFill.call(e,t.target)}),Jr.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return uo.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(Jr.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),Jr.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),Jr.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),Jr.on(this.elements.inputs.volume,"wheel",function(t){return n(t,"volume",function(){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.decreaseVolume(.02),i=-1):(e.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.increaseVolume(.02),i=1):(e.decreaseVolume(.02),i=-1)),(1===i&&e.media.volume<1||-1===i&&e.media.volume>0)&&t.preventDefault()})},!1)}},lo={addStyleHook:function(){Jr.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Jr.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(ao.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void lo.toggleNativeControls.call(this,!0);Jr.is.element(this.elements.controls)||(uo.inject.call(this),ao.controls.call(this)),Jr.is.element(this.elements.controls)&&(lo.toggleNativeControls.call(this),fo.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],lo.timeUpdate.call(this),lo.checkPlaying.call(this),this.ready=!0,setTimeout(function(){Jr.dispatchEvent.call(e,e.media,"ready")},0),lo.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(Jr.is.string(this.config.title)&&!Jr.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Jr.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Jr.getElement.call(this,"iframe");if(!Jr.is.element(t))return;var n=Jr.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",n))}},checkPlaying:function(){Jr.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Jr.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),Jr.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Jr.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(Jr.toggleClass(this.elements.container,this.config.classNames.loading,!1),Jr.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){Jr.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(Jr.is.element(this.elements.inputs.volume)&&lo.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Jr.is.element(this.elements.buttons.mute)&&Jr.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Jr.is.element(e)&&(e.value=t,uo.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=Jr.is.number(t)?t:0,i=Jr.is.element(e)?e:this.elements.display.buffer;if(Jr.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];Jr.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){var t=this;if(this.supported.ui&&Jr.is.event(e)){var n,i=0;if(e)switch(e.type){case"timeupdate":case"seeking":i=Jr.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&lo.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":i=(n=t.media.buffered)&&n.length?Jr.getPercentage(n.end(0),t.duration):Jr.is.number(n)?100*n:0,lo.setProgress.call(this,this.elements.display.buffer,i)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Jr.is.element(e)&&Jr.is.number(t)){var i=Jr.getHours(this.duration)>0;e.textContent=Jr.formatTime(t,i,n)}},timeUpdate:function(e){var t=!Jr.is.element(this.elements.display.duration)&&this.config.invertTime;lo.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||lo.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=Jr.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&lo.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&lo.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),uo.updateSeekTooltip.call(this)}}},co=Jr.getBrowser(),uo={updateRangeFill:function(e){if(co.isWebkit){var t=Jr.is.event(e)?e.target:e;Jr.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||co.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=uo.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Jr.setAttributes(r,Jr.extend(t,{role:"presentation"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=this.config.i18n[e],i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Jr.createElement("span",i,n)},createBadge:function(e){if(Jr.is.empty(e))return null;var t=Jr.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Jr.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Jr.createElement("button"),i=Object.assign({},t),r=e,o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,r){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=r}return o?(n.appendChild(uo.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(uo.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(uo.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(uo.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=this.config.i18n[s]):(n.appendChild(uo.createIcon.call(this,a)),n.appendChild(uo.createLabel.call(this,s))),Jr.extend(i,Jr.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Jr.setAttributes(n,i),"play"===r?(Jr.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Jr.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),i=Jr.createElement("input",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=i,uo.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Jr.createElement("progress",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(Jr.createElement("span",null,"0"));var i="";switch(e){case"played":i=this.config.i18n.played;break;case"buffer":i=this.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Jr.createElement("div",{class:"plyr__time"});return t.appendChild(Jr.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(Jr.createElement("span",Jr.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=Jr.createElement("li"),a=Jr.createElement("label",{class:this.config.classNames.control}),l=Jr.createElement("input",Jr.extend(Jr.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Jr.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),Jr.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&Jr.is.element(this.elements.inputs.seek)&&Jr.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,n=this.elements.inputs.seek.getBoundingClientRect(),i=this.config.classNames.tooltip+"--visible";if(Jr.is.event(e))t=100/n.width*(e.pageX-n.left);else{if(!Jr.hasClass(this.elements.display.seekTooltip,i))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),lo.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",Jr.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&Jr.toggleClass(this.elements.display.seekTooltip,i,"mouseenter"===e.type)}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];Jr.toggleHidden(n,!t),Jr.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this,n=this.elements.settings.panes.quality.querySelector("ul");Jr.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var i=!Jr.is.empty(this.options.quality)&&this.isYouTube;if(uo.toggleTab.call(this,"quality",i),i){Jr.emptyElement(n);this.options.quality.forEach(function(e){return uo.createMenuItem.call(t,e,n,"quality",uo.getLabel.call(t,"quality",e),function(e){var n="";switch(e){case"hd2160":n="4K";break;case"hd1440":n="WQHD";break;case"hd1080":case"hd720":n="HD"}return n.length?uo.createBadge.call(t,n):null}(e))}),uo.updateSetting.call(this,"quality",n)}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return uo.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var n=this.elements.settings.panes[e],i=null,r=t;switch(e){case"captions":i=this.captions.active?this.captions.language:"";break;default:if(i=this[e],Jr.is.empty(i)&&(i=this.config[e].default),!this.options[e].includes(i))return void this.debug.warn("Unsupported value of '"+i+"' for "+e);if(!this.config[e].options.includes(i))return void this.debug.warn("Disabled value of '"+i+"' for "+e)}(Jr.is.element(r)||(r=n&&n.querySelector("ul")),Jr.is.empty(i))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=uo.getLabel.call(this,e,i));var o=r&&r.querySelector('input[value="'+i+'"]');Jr.is.element(o)&&(o.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!Xr.textTracks||!fo.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=fo.getCurrentTrack.call(this);if(Jr.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=fo.getTracks.call(this).length;if(uo.toggleTab.call(this,"captions",n),Jr.emptyElement(t),n){var i=fo.getTracks.call(this).map(function(e){return{language:e.language,label:Jr.is.empty(e.label)?e.language.toUpperCase():e.label}});i.unshift({language:"",label:this.config.i18n.none}),i.forEach(function(n){uo.createMenuItem.call(e,n.language,t,"language",n.label||n.language,uo.createBadge.call(e,n.language.toUpperCase()),n.language.toLowerCase()===e.captions.language.toLowerCase())}),uo.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;Jr.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!Jr.is.empty(this.options.speed);if(uo.toggleTab.call(this,"speed",t),t){var n=this.elements.settings.panes.speed.querySelector("ul");Jr.toggleHidden(this.elements.settings.tabs.speed,!1),Jr.toggleHidden(this.elements.settings.panes.speed,!1),Jr.emptyElement(n),this.options.speed.forEach(function(t){return uo.createMenuItem.call(e,t,n,"speed",uo.getLabel.call(e,"speed",t))}),uo.updateSetting.call(this,"speed",n)}},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings,i=Jr.is.boolean(e)?e:Jr.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(Jr.is.event(e)){var r=Jr.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Jr.is.element(n)&&n.setAttribute("aria-expanded",i),Jr.is.element(t)&&(t.setAttribute("aria-hidden",!i),Jr.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Jr.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(Jr.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),Xr.transitions&&!Xr.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=uo.getTabSize.call(this,r);Jr.on(s,Jr.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",Jr.off(s,Jr.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Jr.is.empty(this.config.controls))return null;var n=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(uo.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(uo.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(uo.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(uo.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.progress)),r=uo.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(uo.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Jr.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(uo.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(uo.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(uo.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=Jr.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=uo.createRange.call(this,"volume",Jr.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(uo.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Jr.is.empty(this.config.settings)){var c=Jr.createElement("div",{class:"plyr__menu"});c.appendChild(uo.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Jr.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=Jr.createElement("div"),f=Jr.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=Jr.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Jr.createElement("li",{role:"tab",hidden:""}),r=Jr.createElement("button",Jr.extend(Jr.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),t.config.i18n[n]),o=Jr.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=Jr.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=Jr.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[n]);i.appendChild(r);var o=Jr.createElement("ul");i.appendChild(o),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&Xr.pip&&n.appendChild(uo.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&Xr.airplay&&n.appendChild(uo.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(uo.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(uo.createButton.call(this,"play-large")),this.elements.controls=n,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&uo.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=uo.getIconUrl.call(this);t.absolute&&Jr.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=Jr.is.string(this.config.controls)||Jr.is.element(this.config.controls)?this.config.controls:Jr.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):uo.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:uo.getLanguage.call(this)});var i=void 0;if(Jr.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),Jr.is.element(i)||(i=this.elements.container),Jr.is.element(n)?i.appendChild(n):i.insertAdjacentHTML("beforeend",n),Jr.is.element(this.elements.controls)||Jr.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Jr.repaint(i),this.config.tooltips.controls){var r=Jr.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){Jr.toggleClass(t,e.config.classNames.hidden,!1),Jr.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},fo={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Jr.is.empty(e)||(this.captions.language=e),Jr.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Jr.is.boolean(this.captions.active)){var t=this.storage.get("captions");Jr.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!Xr.textTracks)Jr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&uo.setCaptionsMenu.call(this);else{Jr.is.element(this.elements.captions)||(this.elements.captions=Jr.createElement("div",Jr.getAttributesFromSelector(this.config.selectors.captions)),Jr.insertAfter(this.elements.captions,this.elements.wrapper)),Jr.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Jr.is.empty(fo.getTracks.call(this)));var n=fo.getTracks.call(this);if(!Jr.is.empty(n)){if(Jr.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Jr.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Jr.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Jr.removeElement(e)})})}fo.setLanguage.call(this),fo.show.call(this),Jr.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&uo.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){fo.getTracks.call(this).forEach(function(t){Jr.on(t,"cuechange",function(t){return fo.setCue.call(e,t)}),t.mode="hidden"});var t=fo.getCurrentTrack.call(this);Jr.is.track(t)&&Array.from(t.activeCues||[]).length&&fo.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Jr.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return fo.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=Jr.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===fo.getCurrentTrack.call(this)&&(Jr.is.cue(i)?fo.setText.call(this,i.getCueAsHTML()):fo.setText.call(this,null),Jr.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Jr.is.element(this.elements.captions)){var t=Jr.createElement("span");Jr.emptyElement(this.elements.captions);var n=Jr.is.nullOrUndefined(e)?"":e;Jr.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(Jr.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");Jr.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Jr.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Jr.toggleState(this.elements.buttons.captions,!0))}}},ho={setup:function(){var e=this;Jr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),ho.setAspectRatio.call(this),Jr.is.object(window.YT)&&Jr.is.function(window.YT.Player)?ho.ready.call(this):(Jr.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){ho.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Jr.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Jr.is.empty(n))return this.config.title=n,void lo.setTitle.call(this)}var i=this.config.keys.google;if(Jr.is.string(i)&&!Jr.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";Jr.fetch(r).then(function(e){Jr.is.object(e)&&(t.config.title=e.items[0].snippet.title,lo.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Jr.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Jr.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Jr.parseYouTubeId(n),r=Jr.generateId(e.provider),o=Jr.createElement("div",{id:r});e.media=Jr.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Jr.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Jr.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var n=t.target;e.media.quality=n.getPlaybackQuality(),Jr.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Jr.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;ho.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.media.seeking=!0,Jr.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return n.getPlaybackQuality()},set:function(t){Jr.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),n.setPlaybackQuality(t)}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Jr.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Jr.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Jr.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Jr.dispatchEvent.call(e,e.media,"timeupdate"),Jr.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Jr.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),Jr.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return lo.build.call(e)},50)},onStateChange:function(t){var n=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):Jr.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&Jr.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&Jr.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,Jr.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){Jr.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),Jr.dispatchEvent.call(e,e.media,"durationchange")),uo.setQualityMenu.call(e,n.getAvailableQualityLevels());break;case 2:e.media.paused=!0,Jr.dispatchEvent.call(e,e.media,"pause")}Jr.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},po={setup:function(){var e=this;Jr.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),po.setAspectRatio.call(this),Jr.is.object(window.Vimeo)?po.ready.call(this):Jr.loadScript(this.config.urls.vimeo.api,function(){po.ready.call(e)})},setAspectRatio:function(e){var t=Jr.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1],i=(200-n)/4;this.elements.wrapper.style.paddingBottom=n+"%",this.media.style.transform="translateY(-"+i+"%)"},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},i=Jr.buildUrlParams(n),r=t.media.getAttribute("src");Jr.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=Jr.parseVimeoId(r),s=Jr.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=Jr.createElement("div");l.appendChild(s),t.media=Jr.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,Jr.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Jr.dispatchEvent.call(t,t.media,"ratechange")})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,Jr.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!Jr.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,Jr.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=Jr.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Jr.getAspectRatio(t[0],t[1]);po.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,lo.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Jr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Jr.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,fo.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Jr.stripHTML(e.cues[0].text)),fo.setText.call(t,n)}),t.embed.on("loaded",function(){Jr.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&Jr.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,Jr.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,Jr.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Jr.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Jr.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Jr.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,Jr.dispatchEvent.call(t,t.media,"seeked"),Jr.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,Jr.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Jr.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return lo.build.call(t)},0)}},go=Jr.getBrowser(),mo={setup:function(){if(this.media)if(Jr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Jr.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Jr.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(Jr.toggleClass(this.elements.container,this.config.classNames.pip.supported,Xr.pip&&this.isHTML5&&this.isVideo),Jr.toggleClass(this.elements.container,this.config.classNames.airplay.supported,Xr.airplay&&this.isHTML5),Jr.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),Jr.toggleClass(this.elements.container,this.config.classNames.isIos,go.isIos),Jr.toggleClass(this.elements.container,this.config.classNames.isTouch,Xr.touch)),this.isVideo&&(this.elements.wrapper=Jr.createElement("div",{class:this.config.classNames.video}),Jr.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":ho.setup.call(this);break;case"vimeo":po.setup.call(this)}else this.isHTML5&&lo.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(Jr.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},vo={insertElements:function(e,t){var n=this;Jr.is.string(t)?Jr.insertElement(e,this.media,{src:t}):Jr.is.array(t)&&t.forEach(function(t){Jr.insertElement(e,n.media,t)})},change:function(e){var t=this;Jr.is.object(e)&&"sources"in e&&e.sources.length?(mo.cancelRequests.call(this),this.destroy.call(this,function(){switch(Jr.removeElement(t.media),t.media=null,Jr.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Jr.is.empty(e.sources[0].provider)?Hr.html5:e.sources[0].provider,t.supported=Xr.check(t.type,t.provider,t.config.inline),t.provider+":"+t.type){case"html5:video":t.media=Jr.createElement("video");break;case"html5:audio":t.media=Jr.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Jr.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Jr.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.inline&&t.media.setAttribute("playsinline","")),lo.addStyleHook.call(t),t.isHTML5&&vo.insertElements.call(t,"source",e.sources),t.config.title=e.title,mo.setup.call(t),t.isHTML5&&("tracks"in e&&vo.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&lo.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(Yr(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=t,Jr.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Jr.is.nodeList(this.media)||Jr.is.array(this.media))&&(this.media=this.media[0]),this.config=Jr.extend({},Gr,n,function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new Zr(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",Xr),!Jr.is.nullOrUndefined(this.media)&&Jr.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(Xr.check().api){this.elements.original=this.media.cloneNode(!0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),Jr.is.element(o)){if(s=o.getAttribute("src"),this.provider=Jr.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=Jr.getUrlParams(s),!Jr.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.playsinline)&&(this.config.inline=!0),l.includes(a.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Jr.is.empty(this.provider)||!Object.keys(Hr).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=Wr.video;break;case"video":case"audio":this.type=r,this.provider=Hr.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=Xr.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new ro(this),this.media.plyr=this,Jr.is.element(this.elements.container)||(this.elements.container=Jr.createElement("div"),Jr.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),ao.global.call(this),lo.addStyleHook.call(this),mo.setup.call(this),this.config.debug&&Jr.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&lo.build.call(this),this.fullscreen=new io(this),this.ads=new oo(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return zr(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(Jr.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Jr.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Jr.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Jr.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Jr.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&Jr.is.element(this.elements.buttons.captions)){var t=Jr.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Jr.toggleState(this.elements.buttons.captions,this.captions.active),Jr.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Jr.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){Xr.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(Jr.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(Jr.is.boolean(e)||(Jr.is.event(e)?(r="enterfullscreen"===e.type,i=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(n=2e3),"focusin"===e.type&&(n=3e3,Jr.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):i=Jr.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),i||this.paused||this.loading){if(Jr.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&Jr.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;Xr.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(Jr.hasClass(t.elements.container,t.config.classNames.hideControls)||Jr.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),Jr.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(Jr.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!Jr.is.empty(t.config.settings)&&uo.toggleMenu.call(t,!1)))},n))}}},{key:"on",value:function(e,t){Jr.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Jr.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Jr.removeElement(t.elements.buttons.play),Jr.removeElement(t.elements.captions),Jr.removeElement(t.elements.controls),Jr.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Jr.is.function(e)&&e()):(Jr.replaceElement(t.elements.original,t.elements.container),Jr.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Jr.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":lo.toggleNativeControls.call(this,!0),i();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}},{key:"supports",value:function(e){return Xr.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===Hr.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===Hr.youtube}},{key:"isVimeo",get:function(){return this.provider===Hr.vimeo}},{key:"isVideo",get:function(){return this.type===Wr.video}},{key:"isAudio",get:function(){return this.type===Wr.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;Jr.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Jr.is.string(t)&&(t=Number(t)),Jr.is.number(t)||(t=this.storage.get("volume")),Jr.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;Jr.is.boolean(t)||(t=this.storage.get("muted")),Jr.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Jr.is.number(e)&&(t=e),Jr.is.number(t)||(t=this.storage.get("speed")),Jr.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;Jr.is.string(e)&&(t=e),Jr.is.string(t)||(t=this.storage.get("quality")),Jr.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Jr.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){vo.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?Jr.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Jr.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(Jr.is.string(e)&&(this.toggleCaptions(!Jr.is.empty(e)),!Jr.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,fo.setText.call(this,null),fo.setLanguage.call(this),Jr.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(Xr.pip){var i=Jr.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return Xr.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return Xr.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Jr.loadSprite(e,t)}}]),e}()});
+!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define("Plyr",t):e.Plyr=t()}(this,function(){"use strict";var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function t(e,t){return e(t={exports:{}},t.exports),t.exports}var n=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),i=Object.freeze({default:n,__moduleExports:n}),r=t(function(e){var t=e.exports={version:"2.5.3"};"number"==typeof __e&&(__e=t)}),o=r.version,s=Object.freeze({default:r,__moduleExports:r,version:o}),a=function(e){return"object"==typeof e?null!==e:"function"==typeof e},l=Object.freeze({default:a,__moduleExports:a}),c=l&&a||l,u=function(e){if(!c(e))throw TypeError(e+" is not an object!");return e},d=Object.freeze({default:u,__moduleExports:u}),f=function(e){try{return!!e()}catch(e){return!0}},h=Object.freeze({default:f,__moduleExports:f}),p=h&&f||h,m=!p(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),g=Object.freeze({default:m,__moduleExports:m}),v=i&&n||i,y=v.document,b=c(y)&&c(y.createElement),E=function(e){return b?y.createElement(e):{}},w=Object.freeze({default:E,__moduleExports:E}),_=g&&m||g,k=w&&E||w,S=!_&&!p(function(){return 7!=Object.defineProperty(k("div"),"a",{get:function(){return 7}}).a}),T=Object.freeze({default:S,__moduleExports:S}),x=function(e,t){if(!c(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!c(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!c(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")},A=Object.freeze({default:x,__moduleExports:x}),O=d&&u||d,C=T&&S||T,j=A&&x||A,P=Object.defineProperty,L=_?Object.defineProperty:function(e,t,n){if(O(e),t=j(t,!0),O(n),C)try{return P(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},N={f:L},M=Object.freeze({default:N,__moduleExports:N,f:L}),I=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},F=Object.freeze({default:I,__moduleExports:I}),R=M&&N||M,z=F&&I||F,D=_?function(e,t,n){return R.f(e,t,z(1,n))}:function(e,t,n){return e[t]=n,e},q=Object.freeze({default:D,__moduleExports:D}),V={}.hasOwnProperty,B=function(e,t){return V.call(e,t)},U=Object.freeze({default:B,__moduleExports:B}),H=0,W=Math.random(),G=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++H+W).toString(36))},Y=Object.freeze({default:G,__moduleExports:G}),K=q&&D||q,Q=U&&B||U,J=Y&&G||Y,X=s&&r||s,$=t(function(e){var t=J("src"),n=Function.toString,i=(""+n).split("toString");X.inspectSource=function(e){return n.call(e)},(e.exports=function(e,n,r,o){var s="function"==typeof r;s&&(Q(r,"name")||K(r,"name",n)),e[n]!==r&&(s&&(Q(r,t)||K(r,t,e[n]?""+e[n]:i.join(String(n)))),e===v?e[n]=r:o?e[n]?e[n]=r:K(e,n,r):(delete e[n],K(e,n,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||n.call(this)})}),Z=Object.freeze({default:$,__moduleExports:$}),ee=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},te=Object.freeze({default:ee,__moduleExports:ee}),ne=te&&ee||te,ie=function(e,t,n){if(ne(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,i){return e.call(t,n,i)};case 3:return function(n,i,r){return e.call(t,n,i,r)}}return function(){return e.apply(t,arguments)}},re=Object.freeze({default:ie,__moduleExports:ie}),oe=Z&&$||Z,se=re&&ie||re,ae=function(e,t,n){var i,r,o,s,a=e&ae.F,l=e&ae.G,c=e&ae.S,u=e&ae.P,d=e&ae.B,f=l?v:c?v[t]||(v[t]={}):(v[t]||{}).prototype,h=l?X:X[t]||(X[t]={}),p=h.prototype||(h.prototype={});for(i in l&&(n=t),n)o=((r=!a&&f&&void 0!==f[i])?f:n)[i],s=d&&r?se(o,v):u&&"function"==typeof o?se(Function.call,o):o,f&&oe(f,i,o,e&ae.U),h[i]!=o&&K(h,i,s),u&&p[i]!=o&&(p[i]=o)};v.core=X,ae.F=1,ae.G=2,ae.S=4,ae.P=8,ae.B=16,ae.W=32,ae.U=64,ae.R=128;for(var le,ce=ae,ue=Object.freeze({default:ce,__moduleExports:ce}),de=J("typed_array"),fe=J("view"),he=!(!v.ArrayBuffer||!v.DataView),pe=he,me=0,ge="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");me<9;)(le=v[ge[me++]])?(K(le.prototype,de,!0),K(le.prototype,fe,!0)):pe=!1;var ve={ABV:he,CONSTR:pe,TYPED:de,VIEW:fe},ye=ve.ABV,be=ve.CONSTR,Ee=ve.TYPED,we=ve.VIEW,_e=Object.freeze({default:ve,__moduleExports:ve,ABV:ye,CONSTR:be,TYPED:Ee,VIEW:we}),ke=Object.freeze({default:!1,__moduleExports:!1}),Se=function(e,t,n){for(var i in t)oe(e,i,t[i],n);return e},Te=Object.freeze({default:Se,__moduleExports:Se}),xe=function(e,t,n,i){if(!(e instanceof t)||void 0!==i&&i in e)throw TypeError(n+": incorrect invocation!");return e},Ae=Object.freeze({default:xe,__moduleExports:xe}),Oe=Math.ceil,Ce=Math.floor,je=function(e){return isNaN(e=+e)?0:(e>0?Ce:Oe)(e)},Pe=Object.freeze({default:je,__moduleExports:je}),Le=Pe&&je||Pe,Ne=Math.min,Me=function(e){return e>0?Ne(Le(e),9007199254740991):0},Ie=Object.freeze({default:Me,__moduleExports:Me}),Fe=Ie&&Me||Ie,Re=function(e){if(void 0===e)return 0;var t=Le(e),n=Fe(t);if(t!==n)throw RangeError("Wrong length!");return n},ze=Object.freeze({default:Re,__moduleExports:Re}),De={}.toString,qe=function(e){return De.call(e).slice(8,-1)},Ve=Object.freeze({default:qe,__moduleExports:qe}),Be=Ve&&qe||Ve,Ue=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==Be(e)?e.split(""):Object(e)},He=Object.freeze({default:Ue,__moduleExports:Ue}),We=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e},Ge=Object.freeze({default:We,__moduleExports:We}),Ye=He&&Ue||He,Ke=Ge&&We||Ge,Qe=function(e){return Ye(Ke(e))},Je=Object.freeze({default:Qe,__moduleExports:Qe}),Xe=Math.max,$e=Math.min,Ze=function(e,t){return(e=Le(e))<0?Xe(e+t,0):$e(e,t)},et=Object.freeze({default:Ze,__moduleExports:Ze}),tt=Je&&Qe||Je,nt=et&&Ze||et,it=function(e){return function(t,n,i){var r,o=tt(t),s=Fe(o.length),a=nt(i,s);if(e&&n!=n){for(;s>a;)if((r=o[a++])!=r)return!0}else for(;s>a;a++)if((e||a in o)&&o[a]===n)return e||a||0;return!e&&-1}},rt=Object.freeze({default:it,__moduleExports:it}),ot=v["__core-js_shared__"]||(v["__core-js_shared__"]={}),st=function(e){return ot[e]||(ot[e]={})},at=Object.freeze({default:st,__moduleExports:st}),lt=at&&st||at,ct=lt("keys"),ut=function(e){return ct[e]||(ct[e]=J(e))},dt=Object.freeze({default:ut,__moduleExports:ut}),ft=rt&&it||rt,ht=dt&&ut||dt,pt=ft(!1),mt=ht("IE_PROTO"),gt=function(e,t){var n,i=tt(e),r=0,o=[];for(n in i)n!=mt&&Q(i,n)&&o.push(n);for(;t.length>r;)Q(i,n=t[r++])&&(~pt(o,n)||o.push(n));return o},vt=Object.freeze({default:gt,__moduleExports:gt}),yt="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),bt=Object.freeze({default:yt,__moduleExports:yt}),Et=vt&&gt||vt,wt=bt&&yt||bt,_t=wt.concat("length","prototype"),kt=Object.getOwnPropertyNames||function(e){return Et(e,_t)},St={f:kt},Tt=Object.freeze({default:St,__moduleExports:St,f:kt}),xt=function(e){return Object(Ke(e))},At=Object.freeze({default:xt,__moduleExports:xt}),Ot=At&&xt||At,Ct=function(e){for(var t=Ot(this),n=Fe(t.length),i=arguments.length,r=nt(i>1?arguments[1]:void 0,n),o=i>2?arguments[2]:void 0,s=void 0===o?n:nt(o,n);s>r;)t[r++]=e;return t},jt=Object.freeze({default:Ct,__moduleExports:Ct}),Pt=t(function(e){var t=lt("wks"),n=v.Symbol,i="function"==typeof n;(e.exports=function(e){return t[e]||(t[e]=i&&n[e]||(i?n:J)("Symbol."+e))}).store=t}),Lt=Object.freeze({default:Pt,__moduleExports:Pt}),Nt=Lt&&Pt||Lt,Mt=R.f,It=Nt("toStringTag"),Ft=function(e,t,n){e&&!Q(e=n?e:e.prototype,It)&&Mt(e,It,{configurable:!0,value:t})},Rt=Object.freeze({default:Ft,__moduleExports:Ft}),zt=ke,Dt=_e&&ve||_e,qt=Te&&Se||Te,Vt=Ae&&xe||Ae,Bt=ze&&Re||ze,Ut=Tt&&St||Tt,Ht=jt&&Ct||jt,Wt=Rt&&Ft||Rt,Gt=t(function(e,t){var n=Ut.f,i=R.f,r="prototype",o="Wrong index!",s=v.ArrayBuffer,a=v.DataView,l=v.Math,c=v.RangeError,u=v.Infinity,d=s,f=l.abs,h=l.pow,m=l.floor,g=l.log,y=l.LN2,b=_?"_b":"buffer",E=_?"_l":"byteLength",w=_?"_o":"byteOffset";function k(e,t,n){var i,r,o,s=new Array(n),a=8*n-t-1,l=(1<<a)-1,c=l>>1,d=23===t?h(2,-24)-h(2,-77):0,p=0,v=e<0||0===e&&1/e<0?1:0;for((e=f(e))!=e||e===u?(r=e!=e?1:0,i=l):(i=m(g(e)/y),e*(o=h(2,-i))<1&&(i--,o*=2),(e+=i+c>=1?d/o:d*h(2,1-c))*o>=2&&(i++,o/=2),i+c>=l?(r=0,i=l):i+c>=1?(r=(e*o-1)*h(2,t),i+=c):(r=e*h(2,c-1)*h(2,t),i=0));t>=8;s[p++]=255&r,r/=256,t-=8);for(i=i<<t|r,a+=t;a>0;s[p++]=255&i,i/=256,a-=8);return s[--p]|=128*v,s}function S(e,t,n){var i,r=8*n-t-1,o=(1<<r)-1,s=o>>1,a=r-7,l=n-1,c=e[l--],d=127&c;for(c>>=7;a>0;d=256*d+e[l],l--,a-=8);for(i=d&(1<<-a)-1,d>>=-a,a+=t;a>0;i=256*i+e[l],l--,a-=8);if(0===d)d=1-s;else{if(d===o)return i?NaN:c?-u:u;i+=h(2,t),d-=s}return(c?-1:1)*i*h(2,d-t)}function T(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]}function x(e){return[255&e]}function A(e){return[255&e,e>>8&255]}function O(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]}function C(e){return k(e,52,8)}function j(e){return k(e,23,4)}function P(e,t,n){i(e[r],t,{get:function(){return this[n]}})}function L(e,t,n,i){var r=Bt(+n);if(r+t>e[E])throw c(o);var s=e[b]._b,a=r+e[w],l=s.slice(a,a+t);return i?l:l.reverse()}function N(e,t,n,i,r,s){var a=Bt(+n);if(a+t>e[E])throw c(o);for(var l=e[b]._b,u=a+e[w],d=i(+r),f=0;f<t;f++)l[u+f]=d[s?f:t-f-1]}if(Dt.ABV){if(!p(function(){s(1)})||!p(function(){new s(-1)})||p(function(){return new s,new s(1.5),new s(NaN),"ArrayBuffer"!=s.name})){for(var M,I=(s=function(e){return Vt(this,s),new d(Bt(e))})[r]=d[r],F=n(d),z=0;F.length>z;)(M=F[z++])in s||K(s,M,d[M]);zt||(I.constructor=s)}var D=new a(new s(2)),q=a[r].setInt8;D.setInt8(0,2147483648),D.setInt8(1,2147483649),!D.getInt8(0)&&D.getInt8(1)||qt(a[r],{setInt8:function(e,t){q.call(this,e,t<<24>>24)},setUint8:function(e,t){q.call(this,e,t<<24>>24)}},!0)}else s=function(e){Vt(this,s,"ArrayBuffer");var t=Bt(e);this._b=Ht.call(new Array(t),0),this[E]=t},a=function(e,t,n){Vt(this,a,"DataView"),Vt(e,s,"DataView");var i=e[E],r=Le(t);if(r<0||r>i)throw c("Wrong offset!");if(r+(n=void 0===n?i-r:Fe(n))>i)throw c("Wrong length!");this[b]=e,this[w]=r,this[E]=n},_&&(P(s,"byteLength","_l"),P(a,"buffer","_b"),P(a,"byteLength","_l"),P(a,"byteOffset","_o")),qt(a[r],{getInt8:function(e){return L(this,1,e)[0]<<24>>24},getUint8:function(e){return L(this,1,e)[0]},getInt16:function(e){var t=L(this,2,e,arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=L(this,2,e,arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return T(L(this,4,e,arguments[1]))},getUint32:function(e){return T(L(this,4,e,arguments[1]))>>>0},getFloat32:function(e){return S(L(this,4,e,arguments[1]),23,4)},getFloat64:function(e){return S(L(this,8,e,arguments[1]),52,8)},setInt8:function(e,t){N(this,1,e,x,t)},setUint8:function(e,t){N(this,1,e,x,t)},setInt16:function(e,t){N(this,2,e,A,t,arguments[2])},setUint16:function(e,t){N(this,2,e,A,t,arguments[2])},setInt32:function(e,t){N(this,4,e,O,t,arguments[2])},setUint32:function(e,t){N(this,4,e,O,t,arguments[2])},setFloat32:function(e,t){N(this,4,e,j,t,arguments[2])},setFloat64:function(e,t){N(this,8,e,C,t,arguments[2])}});Wt(s,"ArrayBuffer"),Wt(a,"DataView"),K(a[r],Dt.VIEW,!0),t.ArrayBuffer=s,t.DataView=a}),Yt=Object.freeze({default:Gt,__moduleExports:Gt}),Kt=Nt("species"),Qt=function(e,t){var n,i=O(e).constructor;return void 0===i||void 0==(n=O(i)[Kt])?t:ne(n)},Jt=Object.freeze({default:Qt,__moduleExports:Qt}),Xt=Nt("species"),$t=function(e){var t=v[e];_&&t&&!t[Xt]&&R.f(t,Xt,{configurable:!0,get:function(){return this}})},Zt=Object.freeze({default:$t,__moduleExports:$t}),en=ue&&ce||ue,tn=Yt&&Gt||Yt,nn=Jt&&Qt||Jt,rn=Zt&&$t||Zt,on=v.ArrayBuffer,sn=tn.ArrayBuffer,an=tn.DataView,ln=Dt.ABV&&on.isView,cn=sn.prototype.slice,un=Dt.VIEW;en(en.G+en.W+en.F*(on!==sn),{ArrayBuffer:sn}),en(en.S+en.F*!Dt.CONSTR,"ArrayBuffer",{isView:function(e){return ln&&ln(e)||c(e)&&un in e}}),en(en.P+en.U+en.F*p(function(){return!new sn(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function(e,t){if(void 0!==cn&&void 0===t)return cn.call(O(this),e);for(var n=O(this).byteLength,i=nt(e,n),r=nt(void 0===t?n:t,n),o=new(nn(this,sn))(Fe(r-i)),s=new an(this),a=new an(o),l=0;i<r;)a.setUint8(l++,s.getUint8(i++));return o}}),rn("ArrayBuffer");var dn=Nt("toStringTag"),fn="Arguments"==Be(function(){return arguments}()),hn=function(e){var t,n,i;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),dn))?n:fn?Be(t):"Object"==(i=Be(t))&&"function"==typeof t.callee?"Arguments":i},pn=Object.freeze({default:hn,__moduleExports:hn}),mn={},gn=Object.freeze({default:mn,__moduleExports:mn}),vn=gn&&mn||gn,yn=Nt("iterator"),bn=Array.prototype,En=function(e){return void 0!==e&&(vn.Array===e||bn[yn]===e)},wn=Object.freeze({default:En,__moduleExports:En}),_n=Object.keys||function(e){return Et(e,wt)},kn=Object.freeze({default:_n,__moduleExports:_n}),Sn=kn&&_n||kn,Tn=_?Object.defineProperties:function(e,t){O(e);for(var n,i=Sn(t),r=i.length,o=0;r>o;)R.f(e,n=i[o++],t[n]);return e},xn=Object.freeze({default:Tn,__moduleExports:Tn}),An=v.document,On=An&&An.documentElement,Cn=Object.freeze({default:On,__moduleExports:On}),jn=xn&&Tn||xn,Pn=Cn&&On||Cn,Ln=ht("IE_PROTO"),Nn=function(){},Mn=function(){var e,t=k("iframe"),n=wt.length;for(t.style.display="none",Pn.appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("<script>document.F=Object<\/script>"),e.close(),Mn=e.F;n--;)delete Mn.prototype[wt[n]];return Mn()},In=Object.create||function(e,t){var n;return null!==e?(Nn.prototype=O(e),n=new Nn,Nn.prototype=null,n[Ln]=e):n=Mn(),void 0===t?n:jn(n,t)},Fn=Object.freeze({default:In,__moduleExports:In}),Rn=ht("IE_PROTO"),zn=Object.prototype,Dn=Object.getPrototypeOf||function(e){return e=Ot(e),Q(e,Rn)?e[Rn]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?zn:null},qn=Object.freeze({default:Dn,__moduleExports:Dn}),Vn=pn&&hn||pn,Bn=Nt("iterator"),Un=X.getIteratorMethod=function(e){if(void 0!=e)return e[Bn]||e["@@iterator"]||vn[Vn(e)]},Hn=Object.freeze({default:Un,__moduleExports:Un}),Wn=Array.isArray||function(e){return"Array"==Be(e)},Gn=Object.freeze({default:Wn,__moduleExports:Wn}),Yn=Gn&&Wn||Gn,Kn=Nt("species"),Qn=function(e){var t;return Yn(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!Yn(t.prototype)||(t=void 0),c(t)&&null===(t=t[Kn])&&(t=void 0)),void 0===t?Array:t},Jn=Object.freeze({default:Qn,__moduleExports:Qn}),Xn=Jn&&Qn||Jn,$n=function(e,t){return new(Xn(e))(t)},Zn=Object.freeze({default:$n,__moduleExports:$n}),ei=Zn&&$n||Zn,ti=function(e,t){var n=1==e,i=2==e,r=3==e,o=4==e,s=6==e,a=5==e||s,l=t||ei;return function(t,c,u){for(var d,f,h=Ot(t),p=Ye(h),m=se(c,u,3),g=Fe(p.length),v=0,y=n?l(t,g):i?l(t,0):void 0;g>v;v++)if((a||v in p)&&(f=m(d=p[v],v,h),e))if(n)y[v]=f;else if(f)switch(e){case 3:return!0;case 5:return d;case 6:return v;case 2:y.push(d)}else if(o)return!1;return s?-1:r||o?o:y}},ni=Object.freeze({default:ti,__moduleExports:ti}),ii=Nt("unscopables"),ri=Array.prototype;void 0==ri[ii]&&K(ri,ii,{});var oi=function(e){ri[ii][e]=!0},si=Object.freeze({default:oi,__moduleExports:oi}),ai=function(e,t){return{value:t,done:!!e}},li=Object.freeze({default:ai,__moduleExports:ai}),ci=Fn&&In||Fn,ui={};K(ui,Nt("iterator"),function(){return this});var di=function(e,t,n){e.prototype=ci(ui,{next:z(1,n)}),Wt(e,t+" Iterator")},fi=Object.freeze({default:di,__moduleExports:di}),hi=fi&&di||fi,pi=qn&&Dn||qn,mi=Nt("iterator"),gi=!([].keys&&"next"in[].keys()),vi=function(){return this},yi=function(e,t,n,i,r,o,s){hi(n,t,i);var a,l,c,u=function(e){if(!gi&&e in p)return p[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},d=t+" Iterator",f="values"==r,h=!1,p=e.prototype,m=p[mi]||p["@@iterator"]||r&&p[r],g=!gi&&m||u(r),v=r?f?u("entries"):g:void 0,y="Array"==t&&p.entries||m;if(y&&(c=pi(y.call(new e)))!==Object.prototype&&c.next&&(Wt(c,d,!0),zt||Q(c,mi)||K(c,mi,vi)),f&&m&&"values"!==m.name&&(h=!0,g=function(){return m.call(this)}),zt&&!s||!gi&&!h&&p[mi]||K(p,mi,g),vn[t]=g,vn[d]=vi,r)if(a={values:f?g:u("values"),keys:o?g:u("keys"),entries:v},s)for(l in a)l in p||oe(p,l,a[l]);else en(en.P+en.F*(gi||h),t,a);return a},bi=Object.freeze({default:yi,__moduleExports:yi}),Ei=si&&oi||si,wi=li&&ai||li,_i=bi&&yi||bi,ki=_i(Array,"Array",function(e,t){this._t=tt(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,wi(1)):wi(0,"keys"==t?n:"values"==t?e[n]:[n,e[n]])},"values");vn.Arguments=vn.Array,Ei("keys"),Ei("values"),Ei("entries");var Si=Object.freeze({default:ki,__moduleExports:ki}),Ti=Nt("iterator"),xi=!1;try{[7][Ti]().return=function(){xi=!0}}catch(e){}var Ai=function(e,t){if(!t&&!xi)return!1;var n=!1;try{var i=[7],r=i[Ti]();r.next=function(){return{done:n=!0}},i[Ti]=function(){return r},e(i)}catch(e){}return n},Oi=Object.freeze({default:Ai,__moduleExports:Ai}),Ci=[].copyWithin||function(e,t){var n=Ot(this),i=Fe(n.length),r=nt(e,i),o=nt(t,i),s=arguments.length>2?arguments[2]:void 0,a=Math.min((void 0===s?i:nt(s,i))-o,i-r),l=1;for(o<r&&r<o+a&&(l=-1,o+=a-1,r+=a-1);a-- >0;)o in n?n[r]=n[o]:delete n[r],r+=l,o+=l;return n},ji=Object.freeze({default:Ci,__moduleExports:Ci}),Pi={}.propertyIsEnumerable,Li={f:Pi},Ni=Object.freeze({default:Li,__moduleExports:Li,f:Pi}),Mi=Ni&&Li||Ni,Ii=Object.getOwnPropertyDescriptor,Fi=_?Ii:function(e,t){if(e=tt(e),t=j(t,!0),C)try{return Ii(e,t)}catch(e){}if(Q(e,t))return z(!Mi.f.call(e,t),e[t])},Ri={f:Fi},zi=Object.freeze({default:Ri,__moduleExports:Ri,f:Fi}),Di=wn&&En||wn,qi=Hn&&Un||Hn,Vi=ni&&ti||ni,Bi=Si&&ki||Si,Ui=Oi&&Ai||Oi,Hi=ji&&Ci||ji,Wi=zi&&Ri||zi,Gi=t(function(e){if(_){var t=zt,n=v,i=p,r=en,o=Dt,s=tn,a=se,l=Vt,u=z,d=K,f=qt,h=Le,m=Fe,g=Bt,y=nt,b=j,E=Q,w=Vn,k=c,S=Ot,T=Di,x=ci,A=pi,O=Ut.f,C=qi,P=J,L=Nt,N=Vi,M=ft,I=nn,F=Bi,D=vn,q=Ui,V=rn,B=Ht,U=Hi,H=R,W=Wi,G=H.f,Y=W.f,X=n.RangeError,$=n.TypeError,Z=n.Uint8Array,ee=Array.prototype,te=s.ArrayBuffer,ne=s.DataView,ie=N(0),re=N(2),oe=N(3),ae=N(4),le=N(5),ce=N(6),ue=M(!0),de=M(!1),fe=F.values,he=F.keys,pe=F.entries,me=ee.lastIndexOf,ge=ee.reduce,ve=ee.reduceRight,ye=ee.join,be=ee.sort,Ee=ee.slice,we=ee.toString,_e=ee.toLocaleString,ke=L("iterator"),Se=L("toStringTag"),Te=P("typed_constructor"),xe=P("def_constructor"),Ae=o.CONSTR,Oe=o.TYPED,Ce=o.VIEW,je=N(1,function(e,t){return Re(I(e,e[xe]),t)}),Pe=i(function(){return 1===new Z(new Uint16Array([1]).buffer)[0]}),Ne=!!Z&&!!Z.prototype.set&&i(function(){new Z(1).set({})}),Me=function(e,t){var n=h(e);if(n<0||n%t)throw X("Wrong offset!");return n},Ie=function(e){if(k(e)&&Oe in e)return e;throw $(e+" is not a typed array!")},Re=function(e,t){if(!(k(e)&&Te in e))throw $("It is not a typed array constructor!");return new e(t)},ze=function(e,t){return De(I(e,e[xe]),t)},De=function(e,t){for(var n=0,i=t.length,r=Re(e,i);i>n;)r[n]=t[n++];return r},qe=function(e,t,n){G(e,t,{get:function(){return this._d[n]}})},Ve=function(e){var t,n,i,r,o,s,l=S(e),c=arguments.length,u=c>1?arguments[1]:void 0,d=void 0!==u,f=C(l);if(void 0!=f&&!T(f)){for(s=f.call(l),i=[],t=0;!(o=s.next()).done;t++)i.push(o.value);l=i}for(d&&c>2&&(u=a(u,arguments[2],2)),t=0,n=Fe(l.length),r=Re(this,n);n>t;t++)r[t]=d?u(l[t],t):l[t];return r},Be=function(){for(var e=0,t=arguments.length,n=Re(this,t);t>e;)n[e]=arguments[e++];return n},Ue=!!Z&&i(function(){_e.call(new Z(1))}),He=function(){return _e.apply(Ue?Ee.call(Ie(this)):Ie(this),arguments)},We={copyWithin:function(e,t){return U.call(Ie(this),e,t,arguments.length>2?arguments[2]:void 0)},every:function(e){return ae(Ie(this),e,arguments.length>1?arguments[1]:void 0)},fill:function(e){return B.apply(Ie(this),arguments)},filter:function(e){return ze(this,re(Ie(this),e,arguments.length>1?arguments[1]:void 0))},find:function(e){return le(Ie(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function(e){return ce(Ie(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function(e){ie(Ie(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function(e){return de(Ie(this),e,arguments.length>1?arguments[1]:void 0)},includes:function(e){return ue(Ie(this),e,arguments.length>1?arguments[1]:void 0)},join:function(e){return ye.apply(Ie(this),arguments)},lastIndexOf:function(e){return me.apply(Ie(this),arguments)},map:function(e){return je(Ie(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function(e){return ge.apply(Ie(this),arguments)},reduceRight:function(e){return ve.apply(Ie(this),arguments)},reverse:function(){for(var e,t=Ie(this).length,n=Math.floor(t/2),i=0;i<n;)e=this[i],this[i++]=this[--t],this[t]=e;return this},some:function(e){return oe(Ie(this),e,arguments.length>1?arguments[1]:void 0)},sort:function(e){return be.call(Ie(this),e)},subarray:function(e,t){var n=Ie(this),i=n.length,r=y(e,i);return new(I(n,n[xe]))(n.buffer,n.byteOffset+r*n.BYTES_PER_ELEMENT,m((void 0===t?i:y(t,i))-r))}},Ge=function(e,t){return ze(this,Ee.call(Ie(this),e,t))},Ye=function(e){Ie(this);var t=Me(arguments[1],1),n=this.length,i=S(e),r=m(i.length),o=0;if(r+t>n)throw X("Wrong length!");for(;o<r;)this[t+o]=i[o++]},Ke={entries:function(){return pe.call(Ie(this))},keys:function(){return he.call(Ie(this))},values:function(){return fe.call(Ie(this))}},Qe=function(e,t){return k(e)&&e[Oe]&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},Je=function(e,t){return Qe(e,t=b(t,!0))?u(2,e[t]):Y(e,t)},Xe=function(e,t,n){return!(Qe(e,t=b(t,!0))&&k(n)&&E(n,"value"))||E(n,"get")||E(n,"set")||n.configurable||E(n,"writable")&&!n.writable||E(n,"enumerable")&&!n.enumerable?G(e,t,n):(e[t]=n.value,e)};Ae||(W.f=Je,H.f=Xe),r(r.S+r.F*!Ae,"Object",{getOwnPropertyDescriptor:Je,defineProperty:Xe}),i(function(){we.call({})})&&(we=_e=function(){return ye.call(this)});var $e=f({},We);f($e,Ke),d($e,ke,Ke.values),f($e,{slice:Ge,set:Ye,constructor:function(){},toString:we,toLocaleString:He}),qe($e,"buffer","b"),qe($e,"byteOffset","o"),qe($e,"byteLength","l"),qe($e,"length","e"),G($e,Se,{get:function(){return this[Oe]}}),e.exports=function(e,s,a,c){var u=e+((c=!!c)?"Clamped":"")+"Array",f="get"+e,h="set"+e,p=n[u],v=p||{},y=p&&A(p),b=!p||!o.ABV,E={},_=p&&p.prototype,S=function(e,t){G(e,t,{get:function(){return function(e,t){var n=e._d;return n.v[f](t*s+n.o,Pe)}(this,t)},set:function(e){return function(e,t,n){var i=e._d;c&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[h](t*s+i.o,n,Pe)}(this,t,e)},enumerable:!0})};b?(p=a(function(e,t,n,i){l(e,p,u,"_d");var r,o,a,c,f=0,h=0;if(k(t)){if(!(t instanceof te||"ArrayBuffer"==(c=w(t))||"SharedArrayBuffer"==c))return Oe in t?De(p,t):Ve.call(p,t);r=t,h=Me(n,s);var v=t.byteLength;if(void 0===i){if(v%s)throw X("Wrong length!");if((o=v-h)<0)throw X("Wrong length!")}else if((o=m(i)*s)+h>v)throw X("Wrong length!");a=o/s}else a=g(t),r=new te(o=a*s);for(d(e,"_d",{b:r,o:h,l:o,e:a,v:new ne(r)});f<a;)S(e,f++)}),_=p.prototype=x($e),d(_,"constructor",p)):i(function(){p(1)})&&i(function(){new p(-1)})&&q(function(e){new p,new p(null),new p(1.5),new p(e)},!0)||(p=a(function(e,t,n,i){var r;return l(e,p,u),k(t)?t instanceof te||"ArrayBuffer"==(r=w(t))||"SharedArrayBuffer"==r?void 0!==i?new v(t,Me(n,s),i):void 0!==n?new v(t,Me(n,s)):new v(t):Oe in t?De(p,t):Ve.call(p,t):new v(g(t))}),ie(y!==Function.prototype?O(v).concat(O(y)):O(v),function(e){e in p||d(p,e,v[e])}),p.prototype=_,t||(_.constructor=p));var T=_[ke],C=!!T&&("values"==T.name||void 0==T.name),j=Ke.values;d(p,Te,!0),d(_,Oe,u),d(_,Ce,!0),d(_,xe,p),(c?new p(1)[Se]==u:Se in _)||G(_,Se,{get:function(){return u}}),E[u]=p,r(r.G+r.W+r.F*(p!=v),E),r(r.S,u,{BYTES_PER_ELEMENT:s}),r(r.S+r.F*i(function(){v.of.call(p,1)}),u,{from:Ve,of:Be}),"BYTES_PER_ELEMENT"in _||d(_,"BYTES_PER_ELEMENT",s),r(r.P,u,We),V(u),r(r.P+r.F*Ne,u,{set:Ye}),r(r.P+r.F*!C,u,Ke),t||_.toString==we||(_.toString=we),r(r.P+r.F*i(function(){new p(1).slice()}),u,{slice:Ge}),r(r.P+r.F*(i(function(){return[1,2].toLocaleString()!=new p([1,2]).toLocaleString()})||!i(function(){_.toLocaleString.call([1,2])})),u,{toLocaleString:He}),D[u]=C?T:j,t||C||d(_,ke,j)}}else e.exports=function(){}}),Yi=Object.freeze({default:Gi,__moduleExports:Gi}),Ki=Yi&&Gi||Yi;Ki("Int8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint8",1,function(e){return function(t,n,i){return e(this,t,n,i)}},!0),Ki("Int16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint16",2,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Int32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Uint32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float32",4,function(e){return function(t,n,i){return e(this,t,n,i)}}),Ki("Float64",8,function(e){return function(t,n,i){return e(this,t,n,i)}});var Qi=function(e,t,n,i){try{return i?t(O(n)[0],n[1]):t(n)}catch(t){var r=e.return;throw void 0!==r&&O(r.call(e)),t}},Ji=Object.freeze({default:Qi,__moduleExports:Qi}),Xi=Ji&&Qi||Ji,$i=t(function(e){var t={},n={},i=e.exports=function(e,i,r,o,s){var a,l,c,u,d=s?function(){return e}:qi(e),f=se(r,o,i?2:1),h=0;if("function"!=typeof d)throw TypeError(e+" is not iterable!");if(Di(d)){for(a=Fe(e.length);a>h;h++)if((u=i?f(O(l=e[h])[0],l[1]):f(e[h]))===t||u===n)return u}else for(c=d.call(e);!(l=c.next()).done;)if((u=Xi(c,f,l.value,i))===t||u===n)return u};i.BREAK=t,i.RETURN=n}),Zi=Object.freeze({default:$i,__moduleExports:$i}),er=t(function(e){var t=J("meta"),n=R.f,i=0,r=Object.isExtensible||function(){return!0},o=!p(function(){return r(Object.preventExtensions({}))}),s=function(e){n(e,t,{value:{i:"O"+ ++i,w:{}}})},a=e.exports={KEY:t,NEED:!1,fastKey:function(e,n){if(!c(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!Q(e,t)){if(!r(e))return"F";if(!n)return"E";s(e)}return e[t].i},getWeak:function(e,n){if(!Q(e,t)){if(!r(e))return!0;if(!n)return!1;s(e)}return e[t].w},onFreeze:function(e){return o&&a.NEED&&r(e)&&!Q(e,t)&&s(e),e}}}),tr=er.KEY,nr=er.NEED,ir=er.fastKey,rr=er.getWeak,or=er.onFreeze,sr=Object.freeze({default:er,__moduleExports:er,KEY:tr,NEED:nr,fastKey:ir,getWeak:rr,onFreeze:or}),ar=function(e,t){if(!c(e)||e._t!==t)throw TypeError("Incompatible receiver, "+t+" required!");return e},lr=Object.freeze({default:ar,__moduleExports:ar}),cr=Zi&&$i||Zi,ur=sr&&er||sr,dr=lr&&ar||lr,fr=R.f,hr=ur.fastKey,pr=_?"_s":"size",mr=function(e,t){var n,i=hr(t);if("F"!==i)return e._i[i];for(n=e._f;n;n=n.n)if(n.k==t)return n},gr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Vt(e,r,t,"_i"),e._t=t,e._i=ci(null),e._f=void 0,e._l=void 0,e[pr]=0,void 0!=o&&cr(o,n,e[i],e)});return qt(r.prototype,{clear:function(){for(var e=dr(this,t),n=e._i,i=e._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];e._f=e._l=void 0,e[pr]=0},delete:function(e){var n=dr(this,t),i=mr(n,e);if(i){var r=i.n,o=i.p;delete n._i[i.i],i.r=!0,o&&(o.n=r),r&&(r.p=o),n._f==i&&(n._f=r),n._l==i&&(n._l=o),n[pr]--}return!!i},forEach:function(e){dr(this,t);for(var n,i=se(e,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function(e){return!!mr(dr(this,t),e)}}),_&&fr(r.prototype,"size",{get:function(){return dr(this,t)[pr]}}),r},def:function(e,t,n){var i,r,o=mr(e,t);return o?o.v=n:(e._l=o={i:r=hr(t,!0),k:t,v:n,p:i=e._l,n:void 0,r:!1},e._f||(e._f=o),i&&(i.n=o),e[pr]++,"F"!==r&&(e._i[r]=o)),e},getEntry:mr,setStrong:function(e,t,n){_i(e,t,function(e,n){this._t=dr(e,t),this._k=n,this._l=void 0},function(){for(var e=this._k,t=this._l;t&&t.r;)t=t.p;return this._t&&(this._l=t=t?t.n:this._t._f)?wi(0,"keys"==e?t.k:"values"==e?t.v:[t.k,t.v]):(this._t=void 0,wi(1))},n?"entries":"values",!n,!0),rn(t)}},vr=gr.getConstructor,yr=gr.def,br=gr.getEntry,Er=gr.setStrong,wr=Object.freeze({default:gr,__moduleExports:gr,getConstructor:vr,def:yr,getEntry:br,setStrong:Er}),_r=function(e,t){if(O(e),!c(t)&&null!==t)throw TypeError(t+": can't set as prototype!")},kr={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,n){try{(n=se(Function.call,Wi.f(Object.prototype,"__proto__").set,2))(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,i){return _r(e,i),t?e.__proto__=i:n(e,i),e}}({},!1):void 0),check:_r},Sr=kr.set,Tr=kr.check,xr=Object.freeze({default:kr,__moduleExports:kr,set:Sr,check:Tr}),Ar=xr&&kr||xr,Or=Ar.set,Cr=function(e,t,n){var i,r=t.constructor;return r!==n&&"function"==typeof r&&(i=r.prototype)!==n.prototype&&c(i)&&Or&&Or(e,i),e},jr=Object.freeze({default:Cr,__moduleExports:Cr}),Pr=jr&&Cr||jr,Lr=function(e,t,n,i,r,o){var s=v[e],a=s,l=r?"set":"add",u=a&&a.prototype,d={},f=function(e){var t=u[e];oe(u,e,"delete"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"has"==e?function(e){return!(o&&!c(e))&&t.call(this,0===e?0:e)}:"get"==e?function(e){return o&&!c(e)?void 0:t.call(this,0===e?0:e)}:"add"==e?function(e){return t.call(this,0===e?0:e),this}:function(e,n){return t.call(this,0===e?0:e,n),this})};if("function"==typeof a&&(o||u.forEach&&!p(function(){(new a).entries().next()}))){var h=new a,m=h[l](o?{}:-0,1)!=h,g=p(function(){h.has(1)}),y=Ui(function(e){new a(e)}),b=!o&&p(function(){for(var e=new a,t=5;t--;)e[l](t,t);return!e.has(-0)});y||((a=t(function(t,n){Vt(t,a,e);var i=Pr(new s,t,a);return void 0!=n&&cr(n,r,i[l],i),i})).prototype=u,u.constructor=a),(g||b)&&(f("delete"),f("has"),r&&f("get")),(b||m)&&f(l),o&&u.clear&&delete u.clear}else a=i.getConstructor(t,e,r,l),qt(a.prototype,n),ur.NEED=!0;return Wt(a,e),d[e]=a,en(en.G+en.W+en.F*(a!=s),d),o||i.setStrong(a,e,r),a},Nr=Object.freeze({default:Lr,__moduleExports:Lr}),Mr=wr&&gr||wr,Ir=Nr&&Lr||Nr,Fr=(Ir("Map",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{get:function(e){var t=Mr.getEntry(dr(this,"Map"),e);return t&&t.v},set:function(e,t){return Mr.def(dr(this,"Map"),0===e?0:e,t)}},Mr,!0),Ir("Set",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return Mr.def(dr(this,"Set"),e=0===e?0:e,e)}},Mr),Object.getOwnPropertySymbols),Rr={f:Fr},zr=Object.freeze({default:Rr,__moduleExports:Rr,f:Fr}),Dr=zr&&Rr||zr,qr=Object.assign,Vr=!qr||p(function(){var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach(function(e){t[e]=e}),7!=qr({},e)[n]||Object.keys(qr({},t)).join("")!=i})?function(e,t){for(var n=Ot(e),i=arguments.length,r=1,o=Dr.f,s=Mi.f;i>r;)for(var a,l=Ye(arguments[r++]),c=o?Sn(l).concat(o(l)):Sn(l),u=c.length,d=0;u>d;)s.call(l,a=c[d++])&&(n[a]=l[a]);return n}:qr,Br=Object.freeze({default:Vr,__moduleExports:Vr}),Ur=ur.getWeak,Hr=Vi(5),Wr=Vi(6),Gr=0,Yr=function(e){return e._l||(e._l=new Kr)},Kr=function(){this.a=[]},Qr=function(e,t){return Hr(e.a,function(e){return e[0]===t})};Kr.prototype={get:function(e){var t=Qr(this,e);if(t)return t[1]},has:function(e){return!!Qr(this,e)},set:function(e,t){var n=Qr(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=Wr(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}};var Jr={getConstructor:function(e,t,n,i){var r=e(function(e,o){Vt(e,r,t,"_i"),e._t=t,e._i=Gr++,e._l=void 0,void 0!=o&&cr(o,n,e[i],e)});return qt(r.prototype,{delete:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Yr(dr(this,t)).delete(e):n&&Q(n,this._i)&&delete n[this._i]},has:function(e){if(!c(e))return!1;var n=Ur(e);return!0===n?Yr(dr(this,t)).has(e):n&&Q(n,this._i)}}),r},def:function(e,t,n){var i=Ur(O(t),!0);return!0===i?Yr(e).set(t,n):i[e._i]=n,e},ufstore:Yr},Xr=Jr.getConstructor,$r=Jr.def,Zr=Jr.ufstore,eo=Object.freeze({default:Jr,__moduleExports:Jr,getConstructor:Xr,def:$r,ufstore:Zr}),to=Br&&Vr||Br,no=eo&&Jr||eo;t(function(e){var t,n=Vi(0),i=ur.getWeak,r=Object.isExtensible,o=no.ufstore,s={},a=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},l={get:function(e){if(c(e)){var t=i(e);return!0===t?o(dr(this,"WeakMap")).get(e):t?t[this._i]:void 0}},set:function(e,t){return no.def(dr(this,"WeakMap"),e,t)}},u=e.exports=Ir("WeakMap",a,l,no,!0,!0);p(function(){return 7!=(new u).set((Object.freeze||Object)(s),7).get(s)})&&(t=no.getConstructor(a,"WeakMap"),to(t.prototype,l),ur.NEED=!0,n(["delete","has","get","set"],function(e){var n=u.prototype,i=n[e];oe(n,e,function(n,o){if(c(n)&&!r(n)){this._f||(this._f=new t);var s=this._f[e](n,o);return"set"==e?this:s}return i.call(this,n,o)})}))});Ir("WeakSet",function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},{add:function(e){return no.def(dr(this,"WeakSet"),e,!0)}},no,!1,!0);var io=(v.Reflect||{}).apply,ro=Function.apply;en(en.S+en.F*!p(function(){io(function(){})}),"Reflect",{apply:function(e,t,n){var i=ne(e),r=O(n);return io?io(i,t,r):ro.call(i,t,r)}});var oo=function(e,t,n){var i=void 0===n;switch(t.length){case 0:return i?e():e.call(n);case 1:return i?e(t[0]):e.call(n,t[0]);case 2:return i?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return i?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return i?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},so=Object.freeze({default:oo,__moduleExports:oo}),ao=so&&oo||so,lo=[].slice,co={},uo=Function.bind||function(e){var t=ne(this),n=lo.call(arguments,1),i=function(){var r=n.concat(lo.call(arguments));return this instanceof i?function(e,t,n){if(!(t in co)){for(var i=[],r=0;r<t;r++)i[r]="a["+r+"]";co[t]=Function("F,a","return new F("+i.join(",")+")")}return co[t](e,n)}(t,r.length,r):ao(t,r,e)};return c(t.prototype)&&(i.prototype=t.prototype),i},fo=Object.freeze({default:uo,__moduleExports:uo}),ho=fo&&uo||fo,po=(v.Reflect||{}).construct,mo=p(function(){function e(){}return!(po(function(){},[],e)instanceof e)}),go=!p(function(){po(function(){})});en(en.S+en.F*(mo||go),"Reflect",{construct:function(e,t){ne(e),O(t);var n=arguments.length<3?e:ne(arguments[2]);if(go&&!mo)return po(e,t,n);if(e==n){switch(t.length){case 0:return new e;case 1:return new e(t[0]);case 2:return new e(t[0],t[1]);case 3:return new e(t[0],t[1],t[2]);case 4:return new e(t[0],t[1],t[2],t[3])}var i=[null];return i.push.apply(i,t),new(ho.apply(e,i))}var r=n.prototype,o=ci(c(r)?r:Object.prototype),s=Function.apply.call(e,o,t);return c(s)?s:o}}),en(en.S+en.F*p(function(){Reflect.defineProperty(R.f({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(e,t,n){O(e),t=j(t,!0),O(n);try{return R.f(e,t,n),!0}catch(e){return!1}}});var vo=Wi.f;en(en.S,"Reflect",{deleteProperty:function(e,t){var n=vo(O(e),t);return!(n&&!n.configurable)&&delete e[t]}}),en(en.S,"Reflect",{get:function e(t,n){var i,r,o=arguments.length<3?t:arguments[2];return O(t)===o?t[n]:(i=Wi.f(t,n))?Q(i,"value")?i.value:void 0!==i.get?i.get.call(o):void 0:c(r=pi(t))?e(r,n,o):void 0}}),en(en.S,"Reflect",{getOwnPropertyDescriptor:function(e,t){return Wi.f(O(e),t)}}),en(en.S,"Reflect",{getPrototypeOf:function(e){return pi(O(e))}}),en(en.S,"Reflect",{has:function(e,t){return t in e}});var yo=Object.isExtensible;en(en.S,"Reflect",{isExtensible:function(e){return O(e),!yo||yo(e)}});var bo=v.Reflect,Eo=bo&&bo.ownKeys||function(e){var t=Ut.f(O(e)),n=Dr.f;return n?t.concat(n(e)):t},wo=Object.freeze({default:Eo,__moduleExports:Eo}),_o=wo&&Eo||wo;en(en.S,"Reflect",{ownKeys:_o});var ko=Object.preventExtensions;en(en.S,"Reflect",{preventExtensions:function(e){O(e);try{return ko&&ko(e),!0}catch(e){return!1}}}),en(en.S,"Reflect",{set:function e(t,n,i){var r,o,s=arguments.length<4?t:arguments[3],a=Wi.f(O(t),n);if(!a){if(c(o=pi(t)))return e(o,n,i,s);a=z(0)}return Q(a,"value")?!(!1===a.writable||!c(s)||((r=Wi.f(s,n)||z(0)).value=i,R.f(s,n,r),0)):void 0!==a.set&&(a.set.call(s,i),!0)}}),Ar&&en(en.S,"Reflect",{setPrototypeOf:function(e,t){Ar.check(e,t);try{return Ar.set(e,t),!0}catch(e){return!1}}});var So,To,xo,Ao=v.process,Oo=v.setImmediate,Co=v.clearImmediate,jo=v.MessageChannel,Po=v.Dispatch,Lo=0,No={},Mo=function(){var e=+this;if(No.hasOwnProperty(e)){var t=No[e];delete No[e],t()}},Io=function(e){Mo.call(e.data)};Oo&&Co||(Oo=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return No[++Lo]=function(){ao("function"==typeof e?e:Function(e),t)},So(Lo),Lo},Co=function(e){delete No[e]},"process"==Be(Ao)?So=function(e){Ao.nextTick(se(Mo,e,1))}:Po&&Po.now?So=function(e){Po.now(se(Mo,e,1))}:jo?(xo=(To=new jo).port2,To.port1.onmessage=Io,So=se(xo.postMessage,xo,1)):v.addEventListener&&"function"==typeof postMessage&&!v.importScripts?(So=function(e){v.postMessage(e+"","*")},v.addEventListener("message",Io,!1)):So="onreadystatechange"in k("script")?function(e){Pn.appendChild(k("script")).onreadystatechange=function(){Pn.removeChild(this),Mo.call(e)}}:function(e){setTimeout(se(Mo,e,1),0)});var Fo={set:Oo,clear:Co},Ro=Fo.set,zo=Fo.clear,Do=Object.freeze({default:Fo,__moduleExports:Fo,set:Ro,clear:zo}),qo=Do&&Fo||Do,Vo=qo.set,Bo=v.MutationObserver||v.WebKitMutationObserver,Uo=v.process,Ho=v.Promise,Wo="process"==Be(Uo),Go=function(){var e,t,n,i=function(){var i,r;for(Wo&&(i=Uo.domain)&&i.exit();e;){r=e.fn,e=e.next;try{r()}catch(i){throw e?n():t=void 0,i}}t=void 0,i&&i.enter()};if(Wo)n=function(){Uo.nextTick(i)};else if(!Bo||v.navigator&&v.navigator.standalone)if(Ho&&Ho.resolve){var r=Ho.resolve();n=function(){r.then(i)}}else n=function(){Vo.call(v,i)};else{var o=!0,s=document.createTextNode("");new Bo(i).observe(s,{characterData:!0}),n=function(){s.data=o=!o}}return function(i){var r={fn:i,next:void 0};t&&(t.next=r),e||(e=r,n()),t=r}},Yo=Object.freeze({default:Go,__moduleExports:Go});var Ko,Qo,Jo,Xo,$o=function(e){return new function(e){var t,n;this.promise=new e(function(e,i){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=i}),this.resolve=ne(t),this.reject=ne(n)}(e)},Zo={f:$o},es=Object.freeze({default:Zo,__moduleExports:Zo,f:$o}),ts=function(e){try{return{e:!1,v:e()}}catch(e){return{e:!0,v:e}}},ns=Object.freeze({default:ts,__moduleExports:ts}),is=es&&Zo||es,rs=function(e,t){if(O(e),c(t)&&t.constructor===e)return t;var n=is.f(e);return(0,n.resolve)(t),n.promise},os=Object.freeze({default:rs,__moduleExports:rs}),ss=Yo&&Go||Yo,as=ns&&ts||ns,ls=os&&rs||os,cs=qo.set,us=ss(),ds=v.TypeError,fs=v.process,hs=v.Promise,ps="process"==Vn(fs),ms=function(){},gs=Qo=is.f,vs=!!function(){try{var e=hs.resolve(1),t=(e.constructor={})[Nt("species")]=function(e){e(ms,ms)};return(ps||"function"==typeof PromiseRejectionEvent)&&e.then(ms)instanceof t}catch(e){}}(),ys=function(e){var t;return!(!c(e)||"function"!=typeof(t=e.then))&&t},bs=function(e,t){if(!e._n){e._n=!0;var n=e._c;us(function(){for(var i=e._v,r=1==e._s,o=0,s=function(t){var n,o,s=r?t.ok:t.fail,a=t.resolve,l=t.reject,c=t.domain;try{s?(r||(2==e._h&&_s(e),e._h=1),!0===s?n=i:(c&&c.enter(),n=s(i),c&&c.exit()),n===t.promise?l(ds("Promise-chain cycle")):(o=ys(n))?o.call(n,a,l):a(n)):l(i)}catch(e){l(e)}};n.length>o;)s(n[o++]);e._c=[],e._n=!1,t&&!e._h&&Es(e)})}},Es=function(e){cs.call(v,function(){var t,n,i,r=e._v,o=ws(e);if(o&&(t=as(function(){ps?fs.emit("unhandledRejection",r,e):(n=v.onunhandledrejection)?n({promise:e,reason:r}):(i=v.console)&&i.error&&i.error("Unhandled promise rejection",r)}),e._h=ps||ws(e)?2:1),e._a=void 0,o&&t.e)throw t.v})},ws=function(e){return 1!==e._h&&0===(e._a||e._c).length},_s=function(e){cs.call(v,function(){var t;ps?fs.emit("rejectionHandled",e):(t=v.onrejectionhandled)&&t({promise:e,reason:e._v})})},ks=function(e){var t=this;t._d||(t._d=!0,(t=t._w||t)._v=e,t._s=2,t._a||(t._a=t._c.slice()),bs(t,!0))},Ss=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw ds("Promise can't be resolved itself");(t=ys(e))?us(function(){var i={_w:n,_d:!1};try{t.call(e,se(Ss,i,1),se(ks,i,1))}catch(e){ks.call(i,e)}}):(n._v=e,n._s=1,bs(n,!1))}catch(e){ks.call({_w:n,_d:!1},e)}}};vs||(hs=function(e){Vt(this,hs,"Promise","_h"),ne(e),Ko.call(this);try{e(se(Ss,this,1),se(ks,this,1))}catch(e){ks.call(this,e)}},(Ko=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=qt(hs.prototype,{then:function(e,t){var n=gs(nn(this,hs));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=ps?fs.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&bs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Jo=function(){var e=new Ko;this.promise=e,this.resolve=se(Ss,e,1),this.reject=se(ks,e,1)},is.f=gs=function(e){return e===hs||e===Xo?new Jo(e):Qo(e)}),en(en.G+en.W+en.F*!vs,{Promise:hs}),Wt(hs,"Promise"),rn("Promise"),Xo=X.Promise,en(en.S+en.F*!vs,"Promise",{reject:function(e){var t=gs(this);return(0,t.reject)(e),t.promise}}),en(en.S+en.F*(zt||!vs),"Promise",{resolve:function(e){return ls(zt&&this===Xo?hs:this,e)}}),en(en.S+en.F*!(vs&&Ui(function(e){hs.all(e).catch(ms)})),"Promise",{all:function(e){var t=this,n=gs(t),i=n.resolve,r=n.reject,o=as(function(){var n=[],o=0,s=1;cr(e,!1,function(e){var a=o++,l=!1;n.push(void 0),s++,t.resolve(e).then(function(e){l||(l=!0,n[a]=e,--s||i(n))},r)}),--s||i(n)});return o.e&&r(o.v),n.promise},race:function(e){var t=this,n=gs(t),i=n.reject,r=as(function(){cr(e,!1,function(e){t.resolve(e).then(n.resolve,i)})});return r.e&&i(r.v),n.promise}});var Ts=Nt,xs={f:Ts},As=Object.freeze({default:xs,__moduleExports:xs,f:Ts}),Os=As&&xs||As,Cs=R.f,js=function(e){var t=X.Symbol||(X.Symbol=zt?{}:v.Symbol||{});"_"==e.charAt(0)||e in t||Cs(t,e,{value:Os.f(e)})},Ps=Object.freeze({default:js,__moduleExports:js}),Ls=function(e){var t=Sn(e),n=Dr.f;if(n)for(var i,r=n(e),o=Mi.f,s=0;r.length>s;)o.call(e,i=r[s++])&&t.push(i);return t},Ns=Object.freeze({default:Ls,__moduleExports:Ls}),Ms=Ut.f,Is={}.toString,Fs="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],Rs=function(e){return Fs&&"[object Window]"==Is.call(e)?function(e){try{return Ms(e)}catch(e){return Fs.slice()}}(e):Ms(tt(e))},zs={f:Rs},Ds=Object.freeze({default:zs,__moduleExports:zs,f:Rs}),qs=Ps&&js||Ps,Vs=Ns&&Ls||Ns,Bs=Ds&&zs||Ds,Us=ur.KEY,Hs=Wi.f,Ws=R.f,Gs=Bs.f,Ys=v.Symbol,Ks=v.JSON,Qs=Ks&&Ks.stringify,Js=Nt("_hidden"),Xs=Nt("toPrimitive"),$s={}.propertyIsEnumerable,Zs=lt("symbol-registry"),ea=lt("symbols"),ta=lt("op-symbols"),na=Object.prototype,ia="function"==typeof Ys,ra=v.QObject,oa=!ra||!ra.prototype||!ra.prototype.findChild,sa=_&&p(function(){return 7!=ci(Ws({},"a",{get:function(){return Ws(this,"a",{value:7}).a}})).a})?function(e,t,n){var i=Hs(na,t);i&&delete na[t],Ws(e,t,n),i&&e!==na&&Ws(na,t,i)}:Ws,aa=function(e){var t=ea[e]=ci(Ys.prototype);return t._k=e,t},la=ia&&"symbol"==typeof Ys.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof Ys},ca=function(e,t,n){return e===na&&ca(ta,t,n),O(e),t=j(t,!0),O(n),Q(ea,t)?(n.enumerable?(Q(e,Js)&&e[Js][t]&&(e[Js][t]=!1),n=ci(n,{enumerable:z(0,!1)})):(Q(e,Js)||Ws(e,Js,z(1,{})),e[Js][t]=!0),sa(e,t,n)):Ws(e,t,n)},ua=function(e,t){O(e);for(var n,i=Vs(t=tt(t)),r=0,o=i.length;o>r;)ca(e,n=i[r++],t[n]);return e},da=function(e){var t=$s.call(this,e=j(e,!0));return!(this===na&&Q(ea,e)&&!Q(ta,e))&&(!(t||!Q(this,e)||!Q(ea,e)||Q(this,Js)&&this[Js][e])||t)},fa=function(e,t){if(e=tt(e),t=j(t,!0),e!==na||!Q(ea,t)||Q(ta,t)){var n=Hs(e,t);return!n||!Q(ea,t)||Q(e,Js)&&e[Js][t]||(n.enumerable=!0),n}},ha=function(e){for(var t,n=Gs(tt(e)),i=[],r=0;n.length>r;)Q(ea,t=n[r++])||t==Js||t==Us||i.push(t);return i},pa=function(e){for(var t,n=e===na,i=Gs(n?ta:tt(e)),r=[],o=0;i.length>o;)!Q(ea,t=i[o++])||n&&!Q(na,t)||r.push(ea[t]);return r};ia||(oe((Ys=function(){if(this instanceof Ys)throw TypeError("Symbol is not a constructor!");var e=J(arguments.length>0?arguments[0]:void 0),t=function(n){this===na&&t.call(ta,n),Q(this,Js)&&Q(this[Js],e)&&(this[Js][e]=!1),sa(this,e,z(1,n))};return _&&oa&&sa(na,e,{configurable:!0,set:t}),aa(e)}).prototype,"toString",function(){return this._k}),Wi.f=fa,R.f=ca,Ut.f=Bs.f=ha,Mi.f=da,Dr.f=pa,_&&!zt&&oe(na,"propertyIsEnumerable",da,!0),Os.f=function(e){return aa(Nt(e))}),en(en.G+en.W+en.F*!ia,{Symbol:Ys});for(var ma="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ga=0;ma.length>ga;)Nt(ma[ga++]);for(var va=Sn(Nt.store),ya=0;va.length>ya;)qs(va[ya++]);en(en.S+en.F*!ia,"Symbol",{for:function(e){return Q(Zs,e+="")?Zs[e]:Zs[e]=Ys(e)},keyFor:function(e){if(!la(e))throw TypeError(e+" is not a symbol!");for(var t in Zs)if(Zs[t]===e)return t},useSetter:function(){oa=!0},useSimple:function(){oa=!1}}),en(en.S+en.F*!ia,"Object",{create:function(e,t){return void 0===t?ci(e):ua(ci(e),t)},defineProperty:ca,defineProperties:ua,getOwnPropertyDescriptor:fa,getOwnPropertyNames:ha,getOwnPropertySymbols:pa}),Ks&&en(en.S+en.F*(!ia||p(function(){var e=Ys();return"[null]"!=Qs([e])||"{}"!=Qs({a:e})||"{}"!=Qs(Object(e))})),"JSON",{stringify:function(e){for(var t,n,i=[e],r=1;arguments.length>r;)i.push(arguments[r++]);if(n=t=i[1],(c(t)||void 0!==e)&&!la(e))return Yn(t)||(t=function(e,t){if("function"==typeof n&&(t=n.call(this,e,t)),!la(t))return t}),i[1]=t,Qs.apply(Ks,i)}}),Ys.prototype[Xs]||K(Ys.prototype,Xs,Ys.prototype.valueOf),Wt(Ys,"Symbol"),Wt(Math,"Math",!0),Wt(v.JSON,"JSON",!0);var ba=function(e,t){var n=(X.Object||{})[e]||Object[e],i={};i[e]=t(n),en(en.S+en.F*p(function(){n(1)}),"Object",i)},Ea=Object.freeze({default:ba,__moduleExports:ba}),wa=Ea&&ba||Ea,_a=ur.onFreeze;wa("freeze",function(e){return function(t){return e&&c(t)?e(_a(t)):t}});var ka=ur.onFreeze;wa("seal",function(e){return function(t){return e&&c(t)?e(ka(t)):t}});var Sa=ur.onFreeze;wa("preventExtensions",function(e){return function(t){return e&&c(t)?e(Sa(t)):t}}),wa("isFrozen",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isSealed",function(e){return function(t){return!c(t)||!!e&&e(t)}}),wa("isExtensible",function(e){return function(t){return!!c(t)&&(!e||e(t))}});var Ta=Wi.f;wa("getOwnPropertyDescriptor",function(){return function(e,t){return Ta(tt(e),t)}}),wa("getPrototypeOf",function(){return function(e){return pi(Ot(e))}}),wa("keys",function(){return function(e){return Sn(Ot(e))}}),wa("getOwnPropertyNames",function(){return Bs.f}),en(en.S+en.F,"Object",{assign:to});var xa=Object.is||function(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t},Aa=Object.freeze({default:xa,__moduleExports:xa}),Oa=Aa&&xa||Aa;en(en.S,"Object",{is:Oa});var Ca=R.f,ja=Function.prototype,Pa=/^\s*function ([^ (]*)/;"name"in ja||_&&Ca(ja,"name",{configurable:!0,get:function(){try{return(""+this).match(Pa)[1]}catch(e){return""}}}),en(en.S,"String",{raw:function(e){for(var t=tt(e.raw),n=Fe(t.length),i=arguments.length,r=[],o=0;n>o;)r.push(String(t[o++])),o<i&&r.push(String(arguments[o]));return r.join("")}});var La=String.fromCharCode,Na=String.fromCodePoint;en(en.S+en.F*(!!Na&&1!=Na.length),"String",{fromCodePoint:function(e){for(var t,n=[],i=arguments.length,r=0;i>r;){if(t=+arguments[r++],nt(t,1114111)!==t)throw RangeError(t+" is not a valid code point");n.push(t<65536?La(t):La(55296+((t-=65536)>>10),t%1024+56320))}return n.join("")}});var Ma=function(e){return function(t,n){var i,r,o=String(Ke(t)),s=Le(n),a=o.length;return s<0||s>=a?e?"":void 0:(i=o.charCodeAt(s))<55296||i>56319||s+1===a||(r=o.charCodeAt(s+1))<56320||r>57343?e?o.charAt(s):i:e?o.slice(s,s+2):r-56320+(i-55296<<10)+65536}},Ia=Object.freeze({default:Ma,__moduleExports:Ma}),Fa=(Ia&&Ma||Ia)(!1);en(en.P,"String",{codePointAt:function(e){return Fa(this,e)}});var Ra=function(e){var t=String(Ke(this)),n="",i=Le(e);if(i<0||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(t+=t))1&i&&(n+=t);return n},za=Object.freeze({default:Ra,__moduleExports:Ra}),Da=za&&Ra||za;en(en.P,"String",{repeat:Da});var qa=Nt("match"),Va=function(e){var t;return c(e)&&(void 0!==(t=e[qa])?!!t:"RegExp"==Be(e))},Ba=Object.freeze({default:Va,__moduleExports:Va}),Ua=Ba&&Va||Ba,Ha=function(e,t,n){if(Ua(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(Ke(e))},Wa=Object.freeze({default:Ha,__moduleExports:Ha}),Ga=Nt("match"),Ya=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[Ga]=!1,!"/./"[e](t)}catch(e){}}return!0},Ka=Object.freeze({default:Ya,__moduleExports:Ya}),Qa=Wa&&Ha||Wa,Ja=Ka&&Ya||Ka,Xa="".startsWith;en(en.P+en.F*Ja("startsWith"),"String",{startsWith:function(e){var t=Qa(this,e,"startsWith"),n=Fe(Math.min(arguments.length>1?arguments[1]:void 0,t.length)),i=String(e);return Xa?Xa.call(t,i,n):t.slice(n,n+i.length)===i}});var $a="".endsWith;en(en.P+en.F*Ja("endsWith"),"String",{endsWith:function(e){var t=Qa(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,i=Fe(t.length),r=void 0===n?i:Math.min(Fe(n),i),o=String(e);return $a?$a.call(t,o,r):t.slice(r-o.length,r)===o}});en(en.P+en.F*Ja("includes"),"String",{includes:function(e){return!!~Qa(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}});var Za=function(){var e=O(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t},el=Object.freeze({default:Za,__moduleExports:Za}),tl=el&&Za||el;_&&"g"!=/./g.flags&&R.f(RegExp.prototype,"flags",{configurable:!0,get:tl});var nl=function(e,t,n){var i=Nt(e),r=n(Ke,i,""[e]),o=r[0],s=r[1];p(function(){var t={};return t[i]=function(){return 7},7!=""[e](t)})&&(oe(String.prototype,e,o),K(RegExp.prototype,i,2==t?function(e,t){return s.call(e,this,t)}:function(e){return s.call(e,this)}))},il=Object.freeze({default:nl,__moduleExports:nl}),rl=il&&nl||il;rl("match",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]}),rl("replace",2,function(e,t,n){return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("split",2,function(e,t,n){var i=Ua,r=n,o=[].push;if("c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length){var s=void 0===/()??/.exec("")[1];n=function(e,t){var n=String(this);if(void 0===e&&0===t)return[];if(!i(e))return r.call(n,e,t);var a,l,c,u,d,f=[],h=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,m=void 0===t?4294967295:t>>>0,g=new RegExp(e.source,h+"g");for(s||(a=new RegExp("^"+g.source+"$(?!\\s)",h));(l=g.exec(n))&&!((c=l.index+l[0].length)>p&&(f.push(n.slice(p,l.index)),!s&&l.length>1&&l[0].replace(a,function(){for(d=1;d<arguments.length-2;d++)void 0===arguments[d]&&(l[d]=void 0)}),l.length>1&&l.index<n.length&&o.apply(f,l.slice(1)),u=l[0].length,p=c,f.length>=m));)g.lastIndex===l.index&&g.lastIndex++;return p===n.length?!u&&g.test("")||f.push(""):f.push(n.slice(p)),f.length>m?f.slice(0,m):f}}else"0".split(void 0,0).length&&(n=function(e,t){return void 0===e&&0===t?[]:r.call(this,e,t)});return[function(i,r){var o=e(this),s=void 0==i?void 0:i[t];return void 0!==s?s.call(i,o,r):n.call(String(o),i,r)},n]}),rl("search",1,function(e,t,n){return[function(n){var i=e(this),r=void 0==n?void 0:n[t];return void 0!==r?r.call(n,i):new RegExp(n)[t](String(i))},n]});var ol=function(e,t,n){t in e?R.f(e,t,z(0,n)):e[t]=n},sl=Object.freeze({default:ol,__moduleExports:ol}),al=sl&&ol||sl;en(en.S+en.F*!Ui(function(e){}),"Array",{from:function(e){var t,n,i,r,o=Ot(e),s="function"==typeof this?this:Array,a=arguments.length,l=a>1?arguments[1]:void 0,c=void 0!==l,u=0,d=qi(o);if(c&&(l=se(l,a>2?arguments[2]:void 0,2)),void 0==d||s==Array&&Di(d))for(n=new s(t=Fe(o.length));t>u;u++)al(n,u,c?l(o[u],u):o[u]);else for(r=d.call(o),n=new s;!(i=r.next()).done;u++)al(n,u,c?Xi(r,l,[i.value,u],!0):i.value);return n.length=u,n}}),en(en.S+en.F*p(function(){function e(){}return!(Array.of.call(e)instanceof e)}),"Array",{of:function(){for(var e=0,t=arguments.length,n=new("function"==typeof this?this:Array)(t);t>e;)al(n,e,arguments[e++]);return n.length=t,n}}),en(en.P,"Array",{copyWithin:Hi}),Ei("copyWithin");var ll=Vi(5),cl=!0;"find"in[]&&Array(1).find(function(){cl=!1}),en(en.P+en.F*cl,"Array",{find:function(e){return ll(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("find");var ul=Vi(6),dl=!0;"findIndex"in[]&&Array(1).findIndex(function(){dl=!1}),en(en.P+en.F*dl,"Array",{findIndex:function(e){return ul(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("findIndex"),en(en.P,"Array",{fill:Ht}),Ei("fill");var fl=v.isFinite;en(en.S,"Number",{isFinite:function(e){return"number"==typeof e&&fl(e)}});var hl=Math.floor,pl=function(e){return!c(e)&&isFinite(e)&&hl(e)===e},ml=Object.freeze({default:pl,__moduleExports:pl}),gl=ml&&pl||ml;en(en.S,"Number",{isInteger:gl});var vl=Math.abs;en(en.S,"Number",{isSafeInteger:function(e){return gl(e)&&vl(e)<=9007199254740991}}),en(en.S,"Number",{isNaN:function(e){return e!=e}}),en(en.S,"Number",{EPSILON:Math.pow(2,-52)}),en(en.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991}),en(en.S,"Number",{MAX_SAFE_INTEGER:9007199254740991});var yl=Math.log1p||function(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)},bl=Object.freeze({default:yl,__moduleExports:yl}),El=bl&&yl||bl,wl=Math.sqrt,_l=Math.acosh;en(en.S+en.F*!(_l&&710==Math.floor(_l(Number.MAX_VALUE))&&_l(1/0)==1/0),"Math",{acosh:function(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:El(e-1+wl(e-1)*wl(e+1))}});var kl=Math.asinh;en(en.S+en.F*!(kl&&1/kl(0)>0),"Math",{asinh:function e(t){return isFinite(t=+t)&&0!=t?t<0?-e(-t):Math.log(t+Math.sqrt(t*t+1)):t}});var Sl=Math.atanh;en(en.S+en.F*!(Sl&&1/Sl(-0)<0),"Math",{atanh:function(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}});var Tl=Math.sign||function(e){return 0==(e=+e)||e!=e?e:e<0?-1:1},xl=Object.freeze({default:Tl,__moduleExports:Tl}),Al=xl&&Tl||xl;en(en.S,"Math",{cbrt:function(e){return Al(e=+e)*Math.pow(Math.abs(e),1/3)}}),en(en.S,"Math",{clz32:function(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}});var Ol=Math.exp;en(en.S,"Math",{cosh:function(e){return(Ol(e=+e)+Ol(-e))/2}});var Cl=Math.expm1,jl=!Cl||Cl(10)>22025.465794806718||Cl(10)<22025.465794806718||-2e-17!=Cl(-2e-17)?function(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:Cl,Pl=Object.freeze({default:jl,__moduleExports:jl}),Ll=Pl&&jl||Pl;en(en.S+en.F*(Ll!=Math.expm1),"Math",{expm1:Ll});var Nl=Math.pow,Ml=Nl(2,-52),Il=Nl(2,-23),Fl=Nl(2,127)*(2-Il),Rl=Nl(2,-126),zl=Math.fround||function(e){var t,n,i=Math.abs(e),r=Al(e);return i<Rl?r*(i/Rl/Il+1/Ml-1/Ml)*Rl*Il:(n=(t=(1+Il/Ml)*i)-(t-i))>Fl||n!=n?r*(1/0):r*n},Dl=Object.freeze({default:zl,__moduleExports:zl}),ql=Dl&&zl||Dl;en(en.S,"Math",{fround:ql});var Vl=Math.abs;en(en.S,"Math",{hypot:function(e,t){for(var n,i,r=0,o=0,s=arguments.length,a=0;o<s;)a<(n=Vl(arguments[o++]))?(r=r*(i=a/n)*i+1,a=n):r+=n>0?(i=n/a)*i:n;return a===1/0?1/0:a*Math.sqrt(r)}});var Bl=Math.imul;en(en.S+en.F*p(function(){return-5!=Bl(4294967295,5)||2!=Bl.length}),"Math",{imul:function(e,t){var n=+e,i=+t,r=65535&n,o=65535&i;return 0|r*o+((65535&n>>>16)*o+r*(65535&i>>>16)<<16>>>0)}}),en(en.S,"Math",{log1p:El}),en(en.S,"Math",{log10:function(e){return Math.log(e)*Math.LOG10E}}),en(en.S,"Math",{log2:function(e){return Math.log(e)/Math.LN2}}),en(en.S,"Math",{sign:Al});var Ul=Math.exp;en(en.S+en.F*p(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(e){return Math.abs(e=+e)<1?(Ll(e)-Ll(-e))/2:(Ul(e-1)-Ul(-e-1))*(Math.E/2)}});var Hl=Math.exp;en(en.S,"Math",{tanh:function(e){var t=Ll(e=+e),n=Ll(-e);return t==1/0?1:n==1/0?-1:(t-n)/(Hl(e)+Hl(-e))}}),en(en.S,"Math",{trunc:function(e){return(e>0?Math.floor:Math.ceil)(e)}});var Wl=ft(!0);en(en.P,"Array",{includes:function(e){return Wl(this,e,arguments.length>1?arguments[1]:void 0)}}),Ei("includes");var Gl=Mi.f,Yl=function(e){return function(t){for(var n,i=tt(t),r=Sn(i),o=r.length,s=0,a=[];o>s;)Gl.call(i,n=r[s++])&&a.push(e?[n,i[n]]:i[n]);return a}},Kl=Object.freeze({default:Yl,__moduleExports:Yl}),Ql=Kl&&Yl||Kl,Jl=Ql(!1);en(en.S,"Object",{values:function(e){return Jl(e)}});var Xl=Ql(!0);en(en.S,"Object",{entries:function(e){return Xl(e)}}),en(en.S,"Object",{getOwnPropertyDescriptors:function(e){for(var t,n,i=tt(e),r=Wi.f,o=_o(i),s={},a=0;o.length>a;)void 0!==(n=r(i,t=o[a++]))&&al(s,t,n);return s}});var $l=function(e,t,n,i){var r=String(Ke(e)),o=r.length,s=void 0===n?" ":String(n),a=Fe(t);if(a<=o||""==s)return r;var l=a-o,c=Da.call(s,Math.ceil(l/s.length));return c.length>l&&(c=c.slice(0,l)),i?c+r:r+c},Zl=Object.freeze({default:$l,__moduleExports:$l}),ec=v.navigator,tc=ec&&ec.userAgent||"",nc=Object.freeze({default:tc,__moduleExports:tc}),ic=Zl&&$l||Zl,rc=nc&&tc||nc;en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padStart:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!0)}}),en(en.P+en.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(rc),"String",{padEnd:function(e){return ic(this,e,arguments.length>1?arguments[1]:void 0,!1)}});var oc=[].slice,sc=/MSIE .\./.test(rc),ac=function(e){return function(t,n){var i=arguments.length>2,r=!!i&&oc.call(arguments,2);return e(i?function(){("function"==typeof t?t:Function(t)).apply(this,r)}:t,n)}};en(en.G+en.B+en.F*sc,{setTimeout:ac(v.setTimeout),setInterval:ac(v.setInterval)}),en(en.G+en.B,{setImmediate:qo.set,clearImmediate:qo.clear});for(var lc=Nt("iterator"),cc=Nt("toStringTag"),uc=vn.Array,dc={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},fc=Sn(dc),hc=0;hc<fc.length;hc++){var pc,mc=fc[hc],gc=dc[mc],vc=v[mc],yc=vc&&vc.prototype;if(yc&&(yc[lc]||K(yc,lc,uc),yc[cc]||K(yc,cc,mc),vn[mc]=uc,gc))for(pc in Bi)yc[pc]||oe(yc,pc,Bi[pc],!0)}t(function(t){!function(e){var n,i=Object.prototype,r=i.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",l=o.toStringTag||"@@toStringTag",c=e.regeneratorRuntime;if(c)t.exports=c;else{(c=e.regeneratorRuntime=t.exports).wrap=b;var u="suspendedStart",d="suspendedYield",f="executing",h="completed",p={},m={};m[s]=function(){return this};var g=Object.getPrototypeOf,v=g&&g(g(j([])));v&&v!==i&&r.call(v,s)&&(m=v);var y=k.prototype=w.prototype=Object.create(m);_.prototype=y.constructor=k,k.constructor=_,k[l]=_.displayName="GeneratorFunction",c.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===_||"GeneratorFunction"===(t.displayName||t.name))},c.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,k):(e.__proto__=k,l in e||(e[l]="GeneratorFunction")),e.prototype=Object.create(y),e},c.awrap=function(e){return{__await:e}},S(T.prototype),T.prototype[a]=function(){return this},c.AsyncIterator=T,c.async=function(e,t,n,i){var r=new T(b(e,t,n,i));return c.isGeneratorFunction(t)?r:r.next().then(function(e){return e.done?e.value:r.next()})},S(y),y[l]="Generator",y[s]=function(){return this},y.toString=function(){return"[object Generator]"},c.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var i=t.pop();if(i in e)return n.value=i,n.done=!1,n}return n.done=!0,n}},c.values=j,C.prototype={constructor:C,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=n,this.done=!1,this.delegate=null,this.method="next",this.arg=n,this.tryEntries.forEach(O),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=n)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function i(i,r){return a.type="throw",a.arg=e,t.next=i,r&&(t.method="next",t.arg=n),!!r}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return i("end");if(s.tryLoc<=this.prev){var l=r.call(s,"catchLoc"),c=r.call(s,"finallyLoc");if(l&&c){if(this.prev<s.catchLoc)return i(s.catchLoc,!0);if(this.prev<s.finallyLoc)return i(s.finallyLoc)}else if(l){if(this.prev<s.catchLoc)return i(s.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return i(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var i=this.tryEntries[n];if(i.tryLoc<=this.prev&&r.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var o=i;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),O(n),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var i=n.completion;if("throw"===i.type){var r=i.arg;O(n)}return r}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,i){return this.delegate={iterator:j(e),resultName:t,nextLoc:i},"next"===this.method&&(this.arg=n),p}}}function b(e,t,n,i){var r=t&&t.prototype instanceof w?t:w,o=Object.create(r.prototype),s=new C(i||[]);return o._invoke=function(e,t,n){var i=u;return function(r,o){if(i===f)throw new Error("Generator is already running");if(i===h){if("throw"===r)throw o;return P()}for(n.method=r,n.arg=o;;){var s=n.delegate;if(s){var a=x(s,n);if(a){if(a===p)continue;return a}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===u)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=f;var l=E(e,t,n);if("normal"===l.type){if(i=n.done?h:d,l.arg===p)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}(e,n,s),o}function E(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function w(){}function _(){}function k(){}function S(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function T(t){function n(e,i,o,s){var a=E(t[e],t,i);if("throw"!==a.type){var l=a.arg,c=l.value;return c&&"object"==typeof c&&r.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,s)},function(e){n("throw",e,o,s)}):Promise.resolve(c).then(function(e){l.value=e,o(l)},s)}s(a.arg)}var i;"object"==typeof e.process&&e.process.domain&&(n=e.process.domain.bind(n)),this._invoke=function(e,t){function r(){return new Promise(function(i,r){n(e,t,i,r)})}return i=i?i.then(r,r):r()}}function x(e,t){var i=e.iterator[t.method];if(i===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,x(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var r=E(i,e.iterator,t.arg);if("throw"===r.type)return t.method="throw",t.arg=r.arg,t.delegate=null,p;var o=r.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,p):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function C(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function j(e){if(e){var t=e[s];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var i=-1,o=function t(){for(;++i<e.length;)if(r.call(e,i))return t.value=e[i],t.done=!1,t;return t.value=n,t.done=!0,t};return o.next=o}}return{next:P}}function P(){return{value:n,done:!0}}}("object"==typeof e?e:"object"==typeof window?window:"object"==typeof self?self:e)});try{var bc=new window.CustomEvent("test");if(bc.preventDefault(),!0!==bc.defaultPrevented)throw new Error("Could not prevent default")}catch(e){var Ec=function(e,t){var n,i;return t=t||{bubbles:!1,cancelable:!1,detail:void 0},(n=document.createEvent("CustomEvent")).initCustomEvent(e,t.bubbles,t.cancelable,t.detail),i=n.preventDefault,n.preventDefault=function(){i.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch(e){this.defaultPrevented=!0}},n};Ec.prototype=window.Event.prototype,window.CustomEvent=Ec}var wc,_c={html5:"html5",youtube:"youtube",vimeo:"vimeo"},kc={audio:"audio",video:"video"},Sc={enabled:!0,title:"",debug:!1,autoplay:!1,autopause:!0,seekTime:10,volume:1,muted:!1,duration:null,displayDuration:!0,invertTime:!0,toggleInvert:!0,ratio:"16:9",clickToPlay:!0,hideControls:!0,showPosterOnEnd:!1,disableContextMenu:!0,loadSprite:!0,iconPrefix:"plyr",iconUrl:"https://cdn.plyr.io/3.0.0-beta.17/plyr.svg",blankVideo:"https://cdn.plyr.io/static/blank.mp4",quality:{default:"default",options:["hd2160","hd1440","hd1080","hd720","large","medium","small","tiny","default"]},loop:{active:!1},speed:{selected:1,options:[.5,.75,1,1.25,1.5,1.75,2]},keyboard:{focused:!0,global:!1},tooltips:{controls:!1,seek:!0},captions:{active:!1,language:window.navigator.language.split("-")[0]},fullscreen:{enabled:!0,fallback:!0,iosNative:!1},storage:{enabled:!0,key:"plyr"},controls:["play-large","play","progress","current-time","mute","volume","captions","settings","pip","airplay","fullscreen"],settings:["captions","quality","speed"],i18n:{restart:"Restart",rewind:"Rewind {seektime} secs",play:"Play",pause:"Pause",forward:"Forward {seektime} secs",seek:"Seek",played:"Played",buffered:"Buffered",currentTime:"Current time",duration:"Duration",volume:"Volume",mute:"Mute",unmute:"Unmute",enableCaptions:"Enable captions",disableCaptions:"Disable captions",enterFullscreen:"Enter fullscreen",exitFullscreen:"Exit fullscreen",frameTitle:"Player for {title}",captions:"Captions",settings:"Settings",speed:"Speed",quality:"Quality",loop:"Loop",start:"Start",end:"End",all:"All",reset:"Reset",none:"None",disabled:"Disabled",advertisement:"Ad"},urls:{vimeo:{api:"https://player.vimeo.com/api/player.js"},youtube:{api:"https://www.youtube.com/iframe_api"},googleIMA:{api:"https://imasdk.googleapis.com/js/sdkloader/ima3.js"}},listeners:{seek:null,play:null,pause:null,restart:null,rewind:null,forward:null,mute:null,volume:null,captions:null,fullscreen:null,pip:null,airplay:null,speed:null,quality:null,loop:null,language:null},events:["ended","progress","stalled","playing","waiting","canplay","canplaythrough","loadstart","loadeddata","loadedmetadata","timeupdate","volumechange","play","pause","error","seeking","seeked","emptied","ratechange","cuechange","enterfullscreen","exitfullscreen","captionsenabled","captionsdisabled","languagechange","controlshidden","controlsshown","ready","statechange","qualitychange","qualityrequested","adsloaded","adscontentpause","adsconentresume","adstarted","adsmidpoint","adscomplete","adsallcomplete","adsimpression","adsclick"],selectors:{editable:"input, textarea, select, [contenteditable]",container:".plyr",controls:{container:null,wrapper:".plyr__controls"},labels:"[data-plyr]",buttons:{play:'[data-plyr="play"]',pause:'[data-plyr="pause"]',restart:'[data-plyr="restart"]',rewind:'[data-plyr="rewind"]',forward:'[data-plyr="fast-forward"]',mute:'[data-plyr="mute"]',captions:'[data-plyr="captions"]',fullscreen:'[data-plyr="fullscreen"]',pip:'[data-plyr="pip"]',airplay:'[data-plyr="airplay"]',settings:'[data-plyr="settings"]',loop:'[data-plyr="loop"]'},inputs:{seek:'[data-plyr="seek"]',volume:'[data-plyr="volume"]',speed:'[data-plyr="speed"]',language:'[data-plyr="language"]',quality:'[data-plyr="quality"]'},display:{currentTime:".plyr__time--current",duration:".plyr__time--duration",buffer:".plyr__progress--buffer",played:".plyr__progress--played",loop:".plyr__progress--loop",volume:".plyr__volume--display"},progress:".plyr__progress",captions:".plyr__captions",menu:{quality:".js-plyr__menu__list--quality"}},classNames:{video:"plyr__video-wrapper",embed:"plyr__video-embed",ads:"plyr__ads",control:"plyr__control",type:"plyr--{0}",provider:"plyr--{0}",stopped:"plyr--stopped",playing:"plyr--playing",loading:"plyr--loading",error:"plyr--has-error",hover:"plyr--hover",tooltip:"plyr__tooltip",cues:"plyr__cues",hidden:"plyr__sr-only",hideControls:"plyr--hide-controls",isIos:"plyr--is-ios",isTouch:"plyr--is-touch",uiSupported:"plyr--full-ui",noTransition:"plyr--no-transition",menu:{value:"plyr__menu__value",badge:"plyr__badge",open:"plyr--menu-open"},captions:{enabled:"plyr--captions-enabled",active:"plyr--captions-active"},fullscreen:{enabled:"plyr--fullscreen-enabled",fallback:"plyr--fullscreen-fallback"},pip:{supported:"plyr--pip-supported",active:"plyr--pip-active"},airplay:{supported:"plyr--airplay-supported",active:"plyr--airplay-active"},tabFocus:"plyr__tab-focus"},attributes:{embed:{provider:"data-plyr-provider",id:"data-plyr-embed-id"}},keys:{google:null},ads:{enabled:!1}},Tc=(function(){function e(e){this.value=e}function t(t){var n,i;function r(n,i){try{var s=t[n](i),a=s.value;a instanceof e?Promise.resolve(a.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(s.done?"return":"normal",s.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":n.resolve({value:t,done:!0});break;case"throw":n.reject(t);break;default:n.resolve({value:t,done:!1})}(n=n.next)?r(n.key,n.arg):i=null}this._invoke=function(e,t){return new Promise(function(o,s){var a={key:e,arg:t,resolve:o,reject:s,next:null};i?i=i.next=a:(n=i=a,r(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),xc=function(){function e(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}}(),Ac=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},Oc=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],i=!0,r=!1,o=void 0;try{for(var s,a=e[Symbol.iterator]();!(i=(s=a.next()).done)&&(n.push(s.value),!t||n.length!==t);i=!0);}catch(e){r=!0,o=e}finally{try{!i&&a.return&&a.return()}finally{if(r)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),Cc={is:{plyr:function(e){return this.instanceof(e,window.Plyr)},object:function(e){return this.getConstructor(e)===Object},number:function(e){return this.getConstructor(e)===Number&&!Number.isNaN(e)},string:function(e){return this.getConstructor(e)===String},boolean:function(e){return this.getConstructor(e)===Boolean},function:function(e){return this.getConstructor(e)===Function},array:function(e){return!this.nullOrUndefined(e)&&Array.isArray(e)},weakMap:function(e){return this.instanceof(e,window.WeakMap)},nodeList:function(e){return this.instanceof(e,window.NodeList)},element:function(e){return this.instanceof(e,window.Element)},textNode:function(e){return this.getConstructor(e)===Text},event:function(e){return this.instanceof(e,window.Event)},cue:function(e){return this.instanceof(e,window.TextTrackCue)||this.instanceof(e,window.VTTCue)},track:function(e){return this.instanceof(e,TextTrack)||!this.nullOrUndefined(e)&&this.string(e.kind)},url:function(e){return!this.nullOrUndefined(e)&&/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(e)},nullOrUndefined:function(e){return null===e||void 0===e},empty:function(e){return this.nullOrUndefined(e)||(this.string(e)||this.array(e)||this.nodeList(e))&&!e.length||this.object(e)&&!Object.keys(e).length},instanceof:function(e,t){return Boolean(e&&t&&e instanceof t)},getConstructor:function(e){return this.nullOrUndefined(e)?null:e.constructor}},getBrowser:function(){return{isIE:!!document.documentMode,isWebkit:"WebkitAppearance"in document.documentElement.style&&!/Edge/.test(navigator.userAgent),isIPhone:/(iPhone|iPod)/gi.test(navigator.platform),isIos:/(iPad|iPhone|iPod)/gi.test(navigator.platform)}},fetch:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text";return new Promise(function(n,i){try{var r=new XMLHttpRequest;if(!("withCredentials"in r))return;r.addEventListener("load",function(){if("text"===t)try{n(JSON.parse(r.responseText))}catch(e){n(r.responseText)}else n(r.response)}),r.addEventListener("error",function(){throw new Error(r.statusText)}),r.open("GET",e,!0),r.responseType=t,r.send()}catch(e){i(e)}})},loadScript:function(e,t,n){var i=document.querySelector('script[src="'+e+'"]');if(null!==i)return i.callbacks=i.callbacks||[],void i.callbacks.push(t);var r=document.createElement("script");r.callbacks=r.callbacks||[],r.callbacks.push(t),r.errors=r.errors||[],r.errors.push(n),Cc.is.function(t)&&r.addEventListener("load",function(e){r.callbacks.forEach(function(t){return t.call(null,e)}),r.callbacks=null},!1),r.addEventListener("error",function(e){r.errors.forEach(function(t){return t.call(null,e)}),r.errors=null},!1),r.src=e;var o=document.getElementsByTagName("script")[0];o.parentNode.insertBefore(r,o)},loadSprite:function(e,t){if(Cc.is.string(e)){var n=Cc.is.string(t);if(!n||!document.querySelectorAll("#"+t).length){var i=document.createElement("div");if(Cc.toggleHidden(i,!0),n&&i.setAttribute("id",t),jc.storage){var r=window.localStorage.getItem("cache-"+t);if(null!==r){var o=JSON.parse(r);return void s.call(i,o.content)}}Cc.fetch(e).then(function(e){Cc.is.empty(e)||(jc.storage&&window.localStorage.setItem("cache-"+t,JSON.stringify({content:e})),s.call(i,e))}).catch(function(){})}}function s(e){this.innerHTML=e,document.body.insertBefore(this,document.body.childNodes[0])}},generateId:function(e){return e+"-"+Math.floor(1e4*Math.random())},inFrame:function(){try{return window.self!==window.top}catch(e){return!0}},wrap:function(e,t){var n=e.length?e:[e];Array.from(n).reverse().forEach(function(e,n){var i=n>0?t.cloneNode(!0):t,r=e.parentNode,o=e.nextSibling;i.appendChild(e),o?r.insertBefore(i,o):r.appendChild(i)})},createElement:function(e,t,n){var i=document.createElement(e);return Cc.is.object(t)&&Cc.setAttributes(i,t),Cc.is.string(n)&&(i.textContent=n),i},insertAfter:function(e,t){t.parentNode.insertBefore(e,t.nextSibling)},insertElement:function(e,t,n,i){t.appendChild(Cc.createElement(e,n,i))},removeElement:function(e){Cc.is.element(e)&&Cc.is.element(e.parentNode)&&(Cc.is.nodeList(e)||Cc.is.array(e)?Array.from(e).forEach(Cc.removeElement):e.parentNode.removeChild(e))},emptyElement:function(e){for(var t=e.childNodes.length;t>0;)e.removeChild(e.lastChild),t-=1},replaceElement:function(e,t){return Cc.is.element(t)&&Cc.is.element(t.parentNode)&&Cc.is.element(e)?(t.parentNode.replaceChild(e,t),e):null},setAttributes:function(e,t){Cc.is.element(e)&&!Cc.is.empty(t)&&Object.keys(t).forEach(function(n){e.setAttribute(n,t[n])})},getAttributesFromSelector:function(e,t){if(!Cc.is.string(e)||Cc.is.empty(e))return{};var n={},i=t;return e.split(",").forEach(function(e){var t=e.trim(),r=t.replace(".",""),o=t.replace(/[[\]]/g,"").split("="),s=o[0],a=o.length>1?o[1].replace(/["']/g,""):"";switch(t.charAt(0)){case".":Cc.is.object(i)&&Cc.is.string(i.class)&&(i.class+=" "+r),n.class=r;break;case"#":n.id=t.replace("#","");break;case"[":n[s]=a}}),n},toggleClass:function(e,t,n){if(Cc.is.element(e)){var i=e.classList.contains(t);return e.classList[n?"add":"remove"](t),n&&!i||!n&&i}return null},hasClass:function(e,t){return Cc.is.element(e)&&e.classList.contains(t)},toggleHidden:function(e,t){Cc.is.element(e)&&(t?e.setAttribute("hidden",""):e.removeAttribute("hidden"))},matches:function(e,t){var n={Element:Element};var i=n.matches||n.webkitMatchesSelector||n.mozMatchesSelector||n.msMatchesSelector||function(){return Array.from(document.querySelectorAll(t)).includes(this)};return i.call(e,t)},getElements:function(e){return this.elements.container.querySelectorAll(e)},getElement:function(e){return this.elements.container.querySelector(e)},findElements:function(){try{return this.elements.controls=Cc.getElement.call(this,this.config.selectors.controls.wrapper),this.elements.buttons={play:Cc.getElements.call(this,this.config.selectors.buttons.play),pause:Cc.getElement.call(this,this.config.selectors.buttons.pause),restart:Cc.getElement.call(this,this.config.selectors.buttons.restart),rewind:Cc.getElement.call(this,this.config.selectors.buttons.rewind),forward:Cc.getElement.call(this,this.config.selectors.buttons.forward),mute:Cc.getElement.call(this,this.config.selectors.buttons.mute),pip:Cc.getElement.call(this,this.config.selectors.buttons.pip),airplay:Cc.getElement.call(this,this.config.selectors.buttons.airplay),settings:Cc.getElement.call(this,this.config.selectors.buttons.settings),captions:Cc.getElement.call(this,this.config.selectors.buttons.captions),fullscreen:Cc.getElement.call(this,this.config.selectors.buttons.fullscreen)},this.elements.progress=Cc.getElement.call(this,this.config.selectors.progress),this.elements.inputs={seek:Cc.getElement.call(this,this.config.selectors.inputs.seek),volume:Cc.getElement.call(this,this.config.selectors.inputs.volume)},this.elements.display={buffer:Cc.getElement.call(this,this.config.selectors.display.buffer),duration:Cc.getElement.call(this,this.config.selectors.display.duration),currentTime:Cc.getElement.call(this,this.config.selectors.display.currentTime)},Cc.is.element(this.elements.progress)&&(this.elements.display.seekTooltip=this.elements.progress.querySelector("."+this.config.classNames.tooltip)),!0}catch(e){return this.debug.warn("It looks like there is a problem with your custom controls HTML",e),this.toggleNativeControls(!0),!1}},getFocusElement:function(){var e=document.activeElement;return e=e&&e!==document.body?document.querySelector(":focus"):null},trapFocus:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Cc.is.element(e)){var n=Cc.getElements.call(this,"button:not(:disabled), input:not(:disabled), [tabindex]"),i=n[0],r=n[n.length-1],o=function(e){if("Tab"===e.key&&9===e.keyCode){var t=Cc.getFocusElement();t!==r||e.shiftKey?t===i&&e.shiftKey&&(r.focus(),e.preventDefault()):(i.focus(),e.preventDefault())}};t?Cc.on(this.elements.container,"keydown",o,!1):Cc.off(this.elements.container,"keydown",o,!1)}},toggleListener:function(e,t,n,i,r,o){if(!Cc.is.empty(e)&&!Cc.is.empty(t)&&Cc.is.function(n))if(Cc.is.nodeList(e)||Cc.is.array(e))Array.from(e).forEach(function(e){e instanceof Node&&Cc.toggleListener.call(null,e,t,n,i,r,o)});else{var s=t.split(" "),a=!!Cc.is.boolean(o)&&o;jc.passiveListeners&&(a={passive:!Cc.is.boolean(r)||r,capture:!!Cc.is.boolean(o)&&o}),s.forEach(function(t){e[i?"addEventListener":"removeEventListener"](t,n,a)})}},on:function(e,t,n,i,r){Cc.toggleListener(e,t,n,!0,i,r)},off:function(e,t,n,i,r){Cc.toggleListener(e,t,n,!1,i,r)},dispatchEvent:function(e,t,n,i){if(Cc.is.element(e)&&Cc.is.string(t)){var r=new CustomEvent(t,{bubbles:!!Cc.is.boolean(n)&&n,detail:Object.assign({},i,{plyr:Cc.is.plyr(this)?this:null})});e.dispatchEvent(r)}},toggleState:function(e,t){if(Cc.is.array(e)||Cc.is.nodeList(e))Array.from(e).forEach(function(e){return Cc.toggleState(e,t)});else if(Cc.is.element(e)){var n="true"===e.getAttribute("aria-pressed"),i=Cc.is.boolean(t)?t:!n;e.setAttribute("aria-pressed",i)}},getPercentage:function(e,t){return 0===e||0===t||Number.isNaN(e)||Number.isNaN(t)?0:(e/t*100).toFixed(2)},getHours:function(e){return parseInt(e/60/60%60,10)},getMinutes:function(e){return parseInt(e/60%60,10)},getSeconds:function(e){return parseInt(e%60,10)},formatTime:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!Cc.is.number(e))return this.formatTime(null,t,n);var i=function(e){return("0"+e).slice(-2)},r=this.getHours(e),o=this.getMinutes(e),s=this.getSeconds(e);return t||r>0?r+=":":r="",(n?"-":"")+r+i(o)+":"+i(s)},extend:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length,n=Array(t>1?t-1:0),i=1;i<t;i++)n[i-1]=arguments[i];if(!n.length)return e;var r=n.shift();return Cc.is.object(r)?(Object.keys(r).forEach(function(t){Cc.is.object(r[t])?(Object.keys(e).includes(t)||Object.assign(e,Ac({},t,{})),Cc.extend(e[t],r[t])):Object.assign(e,Ac({},t,r[t]))}),Cc.extend.apply(Cc,[e].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}(n)))):e},getProviderByUrl:function(e){return/^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/.test(e)?_c.youtube:/^https?:\/\/player.vimeo.com\/video\/\d{8,}(?=\b|\/)/.test(e)?_c.vimeo:null},parseYouTubeId:function(e){if(Cc.is.empty(e))return null;return e.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/)?RegExp.$2:e},parseVimeoId:function(e){if(Cc.is.empty(e))return null;if(Cc.is.number(Number(e)))return e;return e.match(/^.*(vimeo.com\/|video\/)(\d+).*/)?RegExp.$2:e},parseUrl:function(e){var t=document.createElement("a");return t.href=e,t},getUrlParams:function(e){var t=e;(e.startsWith("http://")||e.startsWith("https://"))&&(t=this.parseUrl(e).search);return this.is.empty(t)?null:t.slice(t.indexOf("?")+1).split("&").reduce(function(e,t){var n=t.split("="),i=Oc(n,2),r=i[0],o=i[1];return Object.assign(e,Ac({},r,decodeURIComponent(o)))},{})},buildUrlParams:function(e){return Cc.is.object(e)?Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&"):""},stripHTML:function(e){var t=document.createDocumentFragment(),n=document.createElement("div");return t.appendChild(n),n.innerHTML=e,t.firstChild.innerText},getAspectRatio:function(e,t){var n=function e(t,n){return 0===n?t:e(n,t%n)}(e,t);return e/n+":"+t/n},get transitionEndEvent(){var e=document.createElement("span"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n=Object.keys(t).find(function(t){return void 0!==e.style[t]});return!!Cc.is.string(n)&&t[n]},repaint:function(e){setTimeout(function(){Cc.toggleHidden(e,!0),e.offsetHeight,Cc.toggleHidden(e,!1)},0)}},jc={audio:"canPlayType"in document.createElement("audio"),video:"canPlayType"in document.createElement("video"),check:function(e,t,n){var i=!1,r=!1,o=Cc.getBrowser(),s=o.isIPhone&&n&&jc.inline;switch(t+":"+e){case"html5:video":r=(i=jc.video)&&jc.rangeInput&&(!o.isIPhone||s);break;case"html5:audio":r=(i=jc.audio)&&jc.rangeInput;break;case"youtube:video":i=!0,r=jc.rangeInput&&(!o.isIPhone||s);break;case"vimeo:video":i=!0,r=jc.rangeInput&&!o.isIPhone;break;default:r=(i=jc.audio&&jc.video)&&jc.rangeInput}return{api:i,ui:r}},pip:!Cc.getBrowser().isIPhone&&Cc.is.function(Cc.createElement("video").webkitSetPresentationMode),airplay:Cc.is.function(window.WebKitPlaybackTargetAvailabilityEvent),inline:"playsInline"in document.createElement("video"),mime:function(e){var t=this.media;try{if(!this.isHTML5||!Cc.is.function(t.canPlayType))return!1;if(this.isVideo)switch(e){case"video/webm":return t.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/,"");case"video/mp4":return t.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/,"");case"video/ogg":return t.canPlayType('video/ogg; codecs="theora"').replace(/no/,"");default:return!1}else if(this.isAudio)switch(e){case"audio/mpeg":return t.canPlayType("audio/mpeg;").replace(/no/,"");case"audio/ogg":return t.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/,"");case"audio/wav":return t.canPlayType('audio/wav; codecs="1"').replace(/no/,"");default:return!1}}catch(e){return!1}return!1},textTracks:"textTracks"in document.createElement("video"),passiveListeners:function(){var e=!1;try{var t=Object.defineProperty({},"passive",{get:function(){return e=!0,null}});window.addEventListener("test",null,t)}catch(e){}return e}(),rangeInput:(wc=document.createElement("input"),wc.type="range","range"===wc.type),touch:"ontouchstart"in document.documentElement,transitions:!1!==Cc.transitionEndEvent,reducedMotion:"matchMedia"in window&&window.matchMedia("(prefers-reduced-motion)").matches},Pc=function(){},Lc=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0];Tc(this,e),this.enabled=window.console&&t,this.enabled&&this.log("Debugging enabled")}return xc(e,[{key:"log",get:function(){return this.enabled?Function.prototype.bind.call(console.log,console):Pc}},{key:"warn",get:function(){return this.enabled?Function.prototype.bind.call(console.warn,console):Pc}},{key:"error",get:function(){return this.enabled?Function.prototype.bind.call(console.error,console):Pc}}]),e}(),Nc=Cc.getBrowser();function Mc(){if(this.enabled){var e=this.player.elements.buttons.fullscreen;Cc.is.element(e)&&Cc.toggleState(e,this.active),Cc.dispatchEvent(this.target,this.active?"enterfullscreen":"exitfullscreen",!0),Nc.isIos||Cc.trapFocus.call(this.player,this.target,this.active)}}function Ic(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];e?this.scrollPosition={x:window.scrollX||0,y:window.scrollY||0}:window.scrollTo(this.scrollPosition.x,this.scrollPosition.y),document.body.style.overflow=e?"hidden":"",Cc.toggleClass(this.target,this.player.config.classNames.fullscreen.fallback,e),Mc.call(this)}var Fc=function(){function e(t){var n=this;Tc(this,e),this.player=t,this.prefix=e.prefix,this.scrollPosition={x:0,y:0},Cc.on(document,"ms"===this.prefix?"MSFullscreenChange":this.prefix+"fullscreenchange",function(){Mc.call(n)}),Cc.on(this.player.elements.container,"dblclick",function(){n.toggle()}),Cc.on(this.player.elements.controls,"dblclick",function(e){return e.stopPropagation()}),this.update()}return xc(e,[{key:"update",value:function(){this.enabled?this.player.debug.log((e.native?"Native":"Fallback")+" fullscreen enabled"):this.player.debug.log("Fullscreen not supported and fallback disabled"),Cc.toggleClass(this.player.elements.container,this.player.config.classNames.fullscreen.enabled,this.enabled)}},{key:"enter",value:function(){this.enabled&&(Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.playing&&this.target.webkitEnterFullscreen():e.native?this.prefix?Cc.is.empty(this.prefix)||this.target[this.prefix+("ms"===this.prefix?"RequestFullscreen":"RequestFullScreen")]():this.target.requestFullScreen():Ic.call(this,!0))}},{key:"exit",value:function(){this.enabled&&(Nc.isIos&&this.player.config.fullscreen.iosNative?(this.target.webkitExitFullscreen(),this.player.play()):e.native?this.prefix?Cc.is.empty(this.prefix)||document[this.prefix+("ms"===this.prefix?"ExitFullscreen":"CancelFullScreen")]():document.cancelFullScreen():Ic.call(this,!1))}},{key:"toggle",value:function(){this.active?this.exit():this.enter()}},{key:"enabled",get:function(){var t=this.player.config.fullscreen.fallback&&!Cc.inFrame();return(e.native||t)&&this.player.config.fullscreen.enabled&&this.player.supported.ui&&this.player.isVideo}},{key:"active",get:function(){return!!this.enabled&&(e.native?(this.prefix?document[this.prefix+"FullscreenElement"]:document.fullscreenElement)===this.target:Cc.hasClass(this.target,this.player.config.classNames.fullscreen.fallback))}},{key:"target",get:function(){return Nc.isIos&&this.player.config.fullscreen.iosNative?this.player.media:this.player.elements.container}}],[{key:"native",get:function(){return!!(document.fullscreenEnabled||document.webkitFullscreenEnabled||document.mozFullScreenEnabled||document.msFullscreenEnabled)}},{key:"prefix",get:function(){if(Cc.is.function(document.cancelFullScreen))return!1;var e="";return["webkit","moz","ms"].some(function(t){return Cc.is.function(document[t+"CancelFullScreen"])?(e=t,!0):!!Cc.is.function(document.msExitFullscreen)&&(e="ms",!0)}),e}}]),e}(),Rc=function(){function e(t){Tc(this,e),this.enabled=t.config.storage.enabled,this.key=t.config.storage.key}return xc(e,[{key:"get",value:function(t){var n=window.localStorage.getItem(this.key);if(!e.supported||Cc.is.empty(n))return null;var i=JSON.parse(n);return Cc.is.string(t)&&t.length?i[t]:i}},{key:"set",value:function(t){if(e.supported&&this.enabled&&Cc.is.object(t)){var n=this.get();Cc.is.empty(n)&&(n={}),Cc.extend(n,t),window.localStorage.setItem(this.key,JSON.stringify(n))}}}],[{key:"supported",get:function(){if(!("localStorage"in window))return!1;try{return window.localStorage.setItem("___test","___test"),window.localStorage.removeItem("___test"),!0}catch(e){return!1}}}]),e}(),zc=function(){function e(t){var n=this;Tc(this,e),this.player=t,this.enabled=t.config.ads.enabled,this.playing=!1,this.initialized=!1,this.blocked=!1,this.enabled=Cc.is.url(t.config.ads.tag),this.enabled&&(Cc.is.object(window.google)?this.ready():Cc.loadScript(t.config.urls.googleIMA.api,function(){n.ready()},function(){n.blocked=!0,n.player.debug.log("Ads error: Google IMA SDK failed to load")}))}return xc(e,[{key:"ready",value:function(){var e=this;this.elements={container:null,displayContainer:null},this.manager=null,this.loader=null,this.cuePoints=null,this.events={},this.safetyTimer=null,this.countdownTimer=null,this.listeners(),this.startSafetyTimer(12e3,"ready()"),this.loaderPromise=new Promise(function(t){e.on("ADS_LOADER_LOADED",function(){return t()})}),this.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()})}),this.managerPromise.then(function(){e.clearSafetyTimer("onAdsManagerLoaded()")}),this.setupIMA()}},{key:"setupIMA",value:function(){this.elements.container=Cc.createElement("div",{class:this.player.config.classNames.ads,hidden:""}),this.player.elements.container.appendChild(this.elements.container),google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED),google.ima.settings.setLocale(this.player.config.ads.language),this.elements.displayContainer=new google.ima.AdDisplayContainer(this.elements.container),this.requestAds()}},{key:"requestAds",value:function(){var e=this,t=this.player.elements.container;try{this.loader=new google.ima.AdsLoader(this.elements.displayContainer),this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,function(t){return e.onAdsManagerLoaded(t)},!1),this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(t){return e.onAdError(t)},!1);var n=new google.ima.AdsRequest;n.adTagUrl="https://go.aniview.com/api/adserver6/vast/?"+Cc.buildUrlParams({AV_PUBLISHERID:"58c25bb0073ef448b1087ad6",AV_CHANNELID:"5a0458dc28a06145e4519d21",AV_URL:"127.0.0.1:3000",cb:1,AV_WIDTH:640,AV_HEIGHT:480}),n.linearAdSlotWidth=t.offsetWidth,n.linearAdSlotHeight=t.offsetHeight,n.nonLinearAdSlotWidth=t.offsetWidth,n.nonLinearAdSlotHeight=t.offsetHeight,n.forceNonLinearFullSlot=!1,this.loader.requestAds(n),this.handleEventListeners("ADS_LOADER_LOADED")}catch(e){this.onAdError(e)}}},{key:"pollCountdown",value:function(){var e=this;if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))return window.clearInterval(this.countdownTimer),void this.elements.container.removeAttribute("data-badge-text");this.countdownTimer=window.setInterval(function(){var t=Cc.formatTime(e.manager.getRemainingTime()),n=e.player.config.i18n.advertisement+" - "+t;e.elements.container.setAttribute("data-badge-text",n)},100)}},{key:"onAdsManagerLoaded",value:function(e){var t=this,n=new google.ima.AdsRenderingSettings;n.restoreCustomPlaybackStateOnAdBreakComplete=!0,n.enablePreloading=!0,this.manager=e.getAdsManager(this.player,n),this.cuePoints=this.manager.getCuePoints(),this.cuePoints.forEach(function(e){if(0!==e&&-1!==e){var n=t.player.elements.progress;if(n){var i=100/t.player.duration*e,r=Cc.createElement("span",{class:t.player.config.classNames.cues});r.style.left=i.toString()+"%",n.appendChild(r)}}}),this.manager.setVolume(this.player.volume),this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR,function(e){return t.onAdError(e)}),Object.keys(google.ima.AdEvent.Type).forEach(function(e){t.manager.addEventListener(google.ima.AdEvent.Type[e],function(e){return t.onAdEvent(e)})}),this.handleEventListeners("ADS_MANAGER_LOADED")}},{key:"onAdEvent",value:function(e){var t=this,n=this.player.elements.container,i=e.getAd(),r=function(e){Cc.dispatchEvent.call(t.player,t.player.media,"ads"+e)};switch(e.type){case google.ima.AdEvent.Type.LOADED:this.handleEventListeners("LOADED"),r("loaded"),this.pollCountdown(!0),i.isLinear()||(i.width=n.offsetWidth,i.height=n.offsetHeight);break;case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:this.handleEventListeners("ALL_ADS_COMPLETED"),r("allcomplete"),this.loadAds();break;case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:this.handleEventListeners("CONTENT_PAUSE_REQUESTED"),r("contentpause"),this.pauseContent();break;case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:this.handleEventListeners("CONTENT_RESUME_REQUESTED"),r("contentresume"),this.pollCountdown(),this.resumeContent();break;case google.ima.AdEvent.Type.STARTED:r("started");break;case google.ima.AdEvent.Type.MIDPOINT:r("midpoint");break;case google.ima.AdEvent.Type.COMPLETE:r("complete");break;case google.ima.AdEvent.Type.IMPRESSION:r("impression");break;case google.ima.AdEvent.Type.CLICK:r("click")}}},{key:"onAdError",value:function(e){this.cancel(),this.player.debug.log("Ads error",e)}},{key:"listeners",value:function(){var e=this,t=this.player.elements.container,n=void 0;this.player.on("ended",function(){e.loader.contentComplete()}),this.player.on("seeking",function(){return n=e.player.currentTime}),this.player.on("seeked",function(){var t=e.player.currentTime;e.cuePoints.forEach(function(i,r){n<i&&i<t&&(e.manager.discardAdBreak(),e.cuePoints.splice(r,1))})}),window.addEventListener("resize",function(){e.manager.resize(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL)})}},{key:"play",value:function(){var e=this,t=this.player.elements.container;this.managerPromise&&this.managerPromise.then(function(){e.elements.displayContainer.initialize();try{e.initialized||(e.manager.init(t.offsetWidth,t.offsetHeight,google.ima.ViewMode.NORMAL),e.manager.start()),e.initialized=!0}catch(t){e.onAdError(t)}})}},{key:"resumeContent",value:function(){Cc.toggleHidden(this.elements.container,!0),this.playing=!1,this.player.currentTime<this.player.duration&&this.player.play()}},{key:"pauseContent",value:function(){Cc.toggleHidden(this.elements.container,!1),this.playing=!0,this.player.pause()}},{key:"cancel",value:function(){this.initialized&&this.resumeContent(),this.handleEventListeners("ERROR"),this.loadAds()}},{key:"loadAds",value:function(){var e=this;this.managerPromise.then(function(){e.manager&&e.manager.destroy(),e.managerPromise=new Promise(function(t){e.on("ADS_MANAGER_LOADED",function(){return t()}),e.player.debug.log(e.manager)}),e.requestAds()})}},{key:"handleEventListeners",value:function(e){Cc.is.function(this.events[e])&&this.events[e].call(this)}},{key:"on",value:function(e,t){return this.events[e]=t,this}},{key:"startSafetyTimer",value:function(e,t){var n=this;this.player.debug.log("Safety timer invoked from: "+t),this.safetyTimer=setTimeout(function(){n.cancel(),n.clearSafetyTimer("startSafetyTimer()")},e)}},{key:"clearSafetyTimer",value:function(e){Cc.is.nullOrUndefined(this.safetyTimer)||(this.player.debug.log("Safety timer cleared from: "+e),clearTimeout(this.safetyTimer),this.safetyTimer=null)}}]),e}(),Dc=Cc.getBrowser(),qc={global:function(){var e=this,t=null,n=function(n){var i=function(e){return e.keyCode?e.keyCode:e.which}(n),r="keydown"===n.type,o=r&&i===t;if(!(n.altKey||n.ctrlKey||n.metaKey||n.shiftKey)&&Cc.is.number(i)){if(r){var s=Cc.getFocusElement();if(Cc.is.element(s)&&Cc.matches(s,e.config.selectors.editable))return;switch([48,49,50,51,52,53,54,56,57,32,75,38,40,77,39,37,70,67,73,76,79].includes(i)&&(n.preventDefault(),n.stopPropagation()),i){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:o||(e.currentTime=e.duration/10*(i-48));break;case 32:case 75:o||e.togglePlay();break;case 38:e.increaseVolume(.1);break;case 40:e.decreaseVolume(.1);break;case 77:o||(e.muted=!e.muted);break;case 39:e.forward();break;case 37:e.rewind();break;case 70:e.fullscreen.toggle();break;case 67:o||e.toggleCaptions();break;case 76:e.loop=!e.loop}!e.fullscreen.enabled&&e.fullscreen.active&&27===i&&e.fullscreen.toggle(),t=i}else t=null}};this.config.keyboard.global?Cc.on(window,"keydown keyup",n,!1):this.config.keyboard.focused&&Cc.on(this.elements.container,"keydown keyup",n,!1),Cc.on(this.elements.container,"focusout",function(t){Cc.toggleClass(t.target,e.config.classNames.tabFocus,!1)}),Cc.on(this.elements.container,"keydown",function(t){9===t.keyCode&&setTimeout(function(){Cc.toggleClass(Cc.getFocusElement(),e.config.classNames.tabFocus,!0)},0)}),this.config.hideControls&&Cc.on(this.elements.container,"mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen",function(t){e.toggleControls(t)})},media:function(){var e=this;if(Cc.on(this.media,"timeupdate seeking",function(t){return Vc.timeUpdate.call(e,t)}),Cc.on(this.media,"durationchange loadedmetadata",function(t){return Vc.durationUpdate.call(e,t)}),Cc.on(this.media,"loadeddata",function(){Cc.toggleHidden(e.elements.volume,!e.hasAudio),Cc.toggleHidden(e.elements.buttons.mute,!e.hasAudio)}),Cc.on(this.media,"ended",function(){e.isHTML5&&e.isVideo&&e.config.showPosterOnEnd&&(e.restart(),e.media.load())}),Cc.on(this.media,"progress playing",function(t){return Vc.updateProgress.call(e,t)}),Cc.on(this.media,"volumechange",function(t){return Vc.updateVolume.call(e,t)}),Cc.on(this.media,"playing play pause ended",function(t){return Vc.checkPlaying.call(e,t)}),Cc.on(this.media,"waiting canplay seeked playing",function(t){return Vc.checkLoading.call(e,t)}),this.supported.ui&&this.config.clickToPlay&&!this.isAudio){var t=Cc.getElement.call(this,"."+this.config.classNames.video);if(!Cc.is.element(t))return;Cc.on(t,"click",function(){e.config.hideControls&&jc.touch&&!e.paused||(e.paused?e.play():e.ended?(e.restart(),e.play()):e.pause())})}this.supported.ui&&this.config.disableContextMenu&&Cc.on(this.media,"contextmenu",function(e){e.preventDefault()},!1),Cc.on(this.media,"volumechange",function(){e.storage.set({volume:e.volume,muted:e.muted})}),Cc.on(this.media,"ratechange",function(){Uc.updateSetting.call(e,"speed"),e.storage.set({speed:e.speed})}),Cc.on(this.media,"qualitychange",function(){Uc.updateSetting.call(e,"quality"),e.storage.set({quality:e.quality})}),Cc.on(this.media,"languagechange",function(){Uc.updateSetting.call(e,"captions"),e.storage.set({language:e.language})}),Cc.on(this.media,"captionsenabled captionsdisabled",function(){Uc.updateSetting.call(e,"captions"),e.storage.set({captions:e.captions.active})}),Cc.on(this.media,this.config.events.concat(["keyup","keydown"]).join(" "),function(t){var n={};"error"===t.type&&(n=e.media.error),Cc.dispatchEvent.call(e,e.elements.container,t.type,!0,n)})},controls:function(){var e=this,t=Dc.isIE?"change":"input",n=function(t,n,i){var r=e.config.listeners[n];Cc.is.function(r)&&r.call(e,t),!t.defaultPrevented&&Cc.is.function(i)&&i.call(e,t)};Cc.on(this.elements.buttons.play,"click",function(t){return n(t,"play",function(){e.togglePlay()})}),Cc.on(this.elements.buttons.restart,"click",function(t){return n(t,"restart",function(){e.restart()})}),Cc.on(this.elements.buttons.rewind,"click",function(t){return n(t,"rewind",function(){e.rewind()})}),Cc.on(this.elements.buttons.forward,"click",function(t){return n(t,"forward",function(){e.forward()})}),Cc.on(this.elements.buttons.mute,"click",function(t){return n(t,"mute",function(){e.muted=!e.muted})}),Cc.on(this.elements.buttons.captions,"click",function(t){return n(t,"captions",function(){e.toggleCaptions()})}),Cc.on(this.elements.buttons.fullscreen,"click",function(t){return n(t,"fullscreen",function(){e.fullscreen.toggle()})}),Cc.on(this.elements.buttons.pip,"click",function(t){return n(t,"pip",function(){e.pip="toggle"})}),Cc.on(this.elements.buttons.airplay,"click",function(t){return n(t,"airplay",function(){e.airplay()})}),Cc.on(this.elements.buttons.settings,"click",function(t){Uc.toggleMenu.call(e,t)}),Cc.on(document.documentElement,"click",function(t){Uc.toggleMenu.call(e,t)}),Cc.on(this.elements.settings.form,"click",function(t){t.stopPropagation(),Cc.matches(t.target,e.config.selectors.inputs.language)?n(t,"language",function(){e.language=t.target.value}):Cc.matches(t.target,e.config.selectors.inputs.quality)?n(t,"quality",function(){e.quality=t.target.value}):Cc.matches(t.target,e.config.selectors.inputs.speed)?n(t,"speed",function(){e.speed=parseFloat(t.target.value)}):Uc.showTab.call(e,t)}),Cc.on(this.elements.inputs.seek,t,function(t){return n(t,"seek",function(){e.currentTime=t.target.value/t.target.max*e.duration})}),this.config.toggleInvert&&!Cc.is.element(this.elements.display.duration)&&Cc.on(this.elements.display.currentTime,"click",function(){0!==e.currentTime&&(e.config.invertTime=!e.config.invertTime,Vc.timeUpdate.call(e))}),Cc.on(this.elements.inputs.volume,t,function(t){return n(t,"volume",function(){e.volume=t.target.value})}),Dc.isWebkit&&Cc.on(Cc.getElements.call(this,'input[type="range"]'),"input",function(t){Uc.updateRangeFill.call(e,t.target)}),Cc.on(this.elements.progress,"mouseenter mouseleave mousemove",function(t){return Uc.updateSeekTooltip.call(e,t)}),this.config.hideControls&&(Cc.on(this.elements.controls,"mouseenter mouseleave",function(t){e.elements.controls.hover="mouseenter"===t.type}),Cc.on(this.elements.controls,"mousedown mouseup touchstart touchend touchcancel",function(t){e.elements.controls.pressed=["mousedown","touchstart"].includes(t.type)}),Cc.on(this.elements.controls,"focusin focusout",function(t){e.toggleControls(t)})),Cc.on(this.elements.inputs.volume,"wheel",function(t){return n(t,"volume",function(){var n=t.webkitDirectionInvertedFromDevice,i=0;(t.deltaY<0||t.deltaX>0)&&(n?(e.decreaseVolume(.02),i=-1):(e.increaseVolume(.02),i=1)),(t.deltaY>0||t.deltaX<0)&&(n?(e.increaseVolume(.02),i=1):(e.decreaseVolume(.02),i=-1)),(1===i&&e.media.volume<1||-1===i&&e.media.volume>0)&&t.preventDefault()})},!1)}},Vc={addStyleHook:function(){Cc.toggleClass(this.elements.container,this.config.selectors.container.replace(".",""),!0),Cc.toggleClass(this.elements.container,this.config.classNames.uiSupported,this.supported.ui)},toggleNativeControls:function(){arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.isHTML5?this.media.setAttribute("controls",""):this.media.removeAttribute("controls")},build:function(){var e=this;if(qc.media.call(this),!this.supported.ui)return this.debug.warn("Basic support only for "+this.provider+" "+this.type),void Vc.toggleNativeControls.call(this,!0);Cc.is.element(this.elements.controls)||(Uc.inject.call(this),qc.controls.call(this)),Cc.is.element(this.elements.controls)&&(Vc.toggleNativeControls.call(this),Hc.setup.call(this),this.volume=null,this.muted=null,this.speed=null,this.loop=null,this.options.quality=[],Vc.timeUpdate.call(this),Vc.checkPlaying.call(this),this.ready=!0,setTimeout(function(){Cc.dispatchEvent.call(e,e.media,"ready")},0),Vc.setTitle.call(this))},setTitle:function(){var e=this.config.i18n.play;if(Cc.is.string(this.config.title)&&!Cc.is.empty(this.config.title)&&(e+=", "+this.config.title,this.elements.container.setAttribute("aria-label",this.config.title)),Cc.is.nodeList(this.elements.buttons.play)&&Array.from(this.elements.buttons.play).forEach(function(t){t.setAttribute("aria-label",e)}),this.isEmbed){var t=Cc.getElement.call(this,"iframe");if(!Cc.is.element(t))return;var n=Cc.is.empty(this.config.title)?"video":this.config.title;t.setAttribute("title",this.config.i18n.frameTitle.replace("{title}",n))}},checkPlaying:function(){Cc.toggleClass(this.elements.container,this.config.classNames.playing,this.playing),Cc.toggleClass(this.elements.container,this.config.classNames.stopped,this.paused),Cc.toggleState(this.elements.buttons.play,this.playing),this.toggleControls(!this.playing)},checkLoading:function(e){var t=this;this.loading=["stalled","waiting"].includes(e.type),clearTimeout(this.timers.loading),this.timers.loading=setTimeout(function(){Cc.toggleClass(t.elements.container,t.config.classNames.loading,t.loading),t.toggleControls(t.loading)},this.loading?250:0)},checkFailed:function(){var e=this;this.failed=3===this.media.networkState,this.failed&&(Cc.toggleClass(this.elements.container,this.config.classNames.loading,!1),Cc.toggleClass(this.elements.container,this.config.classNames.error,!0)),clearTimeout(this.timers.failed),this.timers.loading=setTimeout(function(){Cc.toggleClass(e.elements.container,e.config.classNames.loading,e.loading),e.toggleControls(e.loading)},this.loading?250:0)},updateVolume:function(){this.supported.ui&&(Cc.is.element(this.elements.inputs.volume)&&Vc.setRange.call(this,this.elements.inputs.volume,this.muted?0:this.volume),Cc.is.element(this.elements.buttons.mute)&&Cc.toggleState(this.elements.buttons.mute,this.muted||0===this.volume))},setRange:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;Cc.is.element(e)&&(e.value=t,Uc.updateRangeFill.call(this,e))},setProgress:function(e,t){var n=Cc.is.number(t)?t:0,i=Cc.is.element(e)?e:this.elements.display.buffer;if(Cc.is.element(i)){i.value=n;var r=i.getElementsByTagName("span")[0];Cc.is.element(r)&&(r.childNodes[0].nodeValue=n)}},updateProgress:function(e){var t=this;if(this.supported.ui&&Cc.is.event(e)){var n,i=0;if(e)switch(e.type){case"timeupdate":case"seeking":i=Cc.getPercentage(this.currentTime,this.duration),"timeupdate"===e.type&&Vc.setRange.call(this,this.elements.inputs.seek,i);break;case"playing":case"progress":i=(n=t.media.buffered)&&n.length?Cc.getPercentage(n.end(0),t.duration):Cc.is.number(n)?100*n:0,Vc.setProgress.call(this,this.elements.display.buffer,i)}}},updateTimeDisplay:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(Cc.is.element(e)&&Cc.is.number(t)){var i=Cc.getHours(this.duration)>0;e.textContent=Cc.formatTime(t,i,n)}},timeUpdate:function(e){var t=!Cc.is.element(this.elements.display.duration)&&this.config.invertTime;Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,t?this.duration-this.currentTime:this.currentTime,t),e&&"timeupdate"===e.type&&this.media.seeking||Vc.updateProgress.call(this,e)},durationUpdate:function(){if(this.supported.ui){var e=Cc.is.element(this.elements.display.duration);!e&&this.config.displayDuration&&this.paused&&Vc.updateTimeDisplay.call(this,this.elements.display.currentTime,this.duration),e&&Vc.updateTimeDisplay.call(this,this.elements.display.duration,this.duration),Uc.updateSeekTooltip.call(this)}}},Bc=Cc.getBrowser(),Uc={updateRangeFill:function(e){if(Bc.isWebkit){var t=Cc.is.event(e)?e.target:e;Cc.is.element(t)&&"range"===t.getAttribute("type")&&t.style.setProperty("--value",t.value/t.max*100+"%")}},getIconUrl:function(){return{url:this.config.iconUrl,absolute:0===this.config.iconUrl.indexOf("http")||Bc.isIE&&!window.svg4everybody}},createIcon:function(e,t){var n=Uc.getIconUrl.call(this),i=(n.absolute?"":n.url)+"#"+this.config.iconPrefix,r=document.createElementNS("http://www.w3.org/2000/svg","svg");Cc.setAttributes(r,Cc.extend(t,{role:"presentation"}));var o=document.createElementNS("http://www.w3.org/2000/svg","use"),s=i+"-"+e;return"href"in o?o.setAttributeNS("http://www.w3.org/1999/xlink","href",s):o.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",s),r.appendChild(o),r},createLabel:function(e,t){var n=this.config.i18n[e],i=Object.assign({},t);switch(e){case"pip":n="PIP";break;case"airplay":n="AirPlay"}return"class"in i?i.class+=" "+this.config.classNames.hidden:i.class=this.config.classNames.hidden,Cc.createElement("span",i,n)},createBadge:function(e){if(Cc.is.empty(e))return null;var t=Cc.createElement("span",{class:this.config.classNames.menu.value});return t.appendChild(Cc.createElement("span",{class:this.config.classNames.menu.badge},e)),t},createButton:function(e,t){var n=Cc.createElement("button"),i=Object.assign({},t),r=e,o=!1,s=void 0,a=void 0,l=void 0,c=void 0;switch("type"in i||(i.type="button"),"class"in i?i.class.includes(this.config.classNames.control)&&(i.class+=" "+this.config.classNames.control):i.class=this.config.classNames.control,r){case"play":o=!0,s="play",l="pause",a="play",c="pause";break;case"mute":o=!0,s="mute",l="unmute",a="volume",c="muted";break;case"captions":o=!0,s="enableCaptions",l="disableCaptions",a="captions-off",c="captions-on";break;case"fullscreen":o=!0,s="enterFullscreen",l="exitFullscreen",a="enter-fullscreen",c="exit-fullscreen";break;case"play-large":i.class+=" "+this.config.classNames.control+"--overlaid",r="play",s="play",a="play";break;default:s=r,a=r}return o?(n.appendChild(Uc.createIcon.call(this,c,{class:"icon--pressed"})),n.appendChild(Uc.createIcon.call(this,a,{class:"icon--not-pressed"})),n.appendChild(Uc.createLabel.call(this,l,{class:"label--pressed"})),n.appendChild(Uc.createLabel.call(this,s,{class:"label--not-pressed"})),i["aria-pressed"]=!1,i["aria-label"]=this.config.i18n[s]):(n.appendChild(Uc.createIcon.call(this,a)),n.appendChild(Uc.createLabel.call(this,s))),Cc.extend(i,Cc.getAttributesFromSelector(this.config.selectors.buttons[r],i)),Cc.setAttributes(n,i),"play"===r?(Cc.is.array(this.elements.buttons[r])||(this.elements.buttons[r]=[]),this.elements.buttons[r].push(n)):this.elements.buttons[r]=n,n},createRange:function(e,t){var n=Cc.createElement("label",{for:t.id,class:this.config.classNames.hidden},this.config.i18n[e]),i=Cc.createElement("input",Cc.extend(Cc.getAttributesFromSelector(this.config.selectors.inputs[e]),{type:"range",min:0,max:100,step:.01,value:0,autocomplete:"off"},t));return this.elements.inputs[e]=i,Uc.updateRangeFill.call(this,i),{label:n,input:i}},createProgress:function(e,t){var n=Cc.createElement("progress",Cc.extend(Cc.getAttributesFromSelector(this.config.selectors.display[e]),{min:0,max:100,value:0},t));if("volume"!==e){n.appendChild(Cc.createElement("span",null,"0"));var i="";switch(e){case"played":i=this.config.i18n.played;break;case"buffer":i=this.config.i18n.buffered}n.textContent="% "+i.toLowerCase()}return this.elements.display[e]=n,n},createTime:function(e){var t=Cc.createElement("div",{class:"plyr__time"});return t.appendChild(Cc.createElement("span",{class:this.config.classNames.hidden},this.config.i18n[e])),t.appendChild(Cc.createElement("span",Cc.getAttributesFromSelector(this.config.selectors.display[e]),"00:00")),this.elements.display[e]=t,t},createMenuItem:function(e,t,n,i){var r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,o=arguments.length>5&&void 0!==arguments[5]&&arguments[5],s=Cc.createElement("li"),a=Cc.createElement("label",{class:this.config.classNames.control}),l=Cc.createElement("input",Cc.extend(Cc.getAttributesFromSelector(this.config.selectors.inputs[n]),{type:"radio",name:"plyr-"+n,value:e,checked:o,class:"plyr__sr-only"})),c=Cc.createElement("span",{"aria-hidden":!0});a.appendChild(l),a.appendChild(c),a.insertAdjacentHTML("beforeend",i),Cc.is.element(r)&&a.appendChild(r),s.appendChild(a),t.appendChild(s)},updateSeekTooltip:function(e){if(this.config.tooltips.seek&&Cc.is.element(this.elements.inputs.seek)&&Cc.is.element(this.elements.display.seekTooltip)&&0!==this.duration){var t=0,n=this.elements.inputs.seek.getBoundingClientRect(),i=this.config.classNames.tooltip+"--visible";if(Cc.is.event(e))t=100/n.width*(e.pageX-n.left);else{if(!Cc.hasClass(this.elements.display.seekTooltip,i))return;t=parseFloat(this.elements.display.seekTooltip.style.left,10)}t<0?t=0:t>100&&(t=100),Vc.updateTimeDisplay.call(this,this.elements.display.seekTooltip,this.duration/100*t),this.elements.display.seekTooltip.style.left=t+"%",Cc.is.event(e)&&["mouseenter","mouseleave"].includes(e.type)&&Cc.toggleClass(this.elements.display.seekTooltip,i,"mouseenter"===e.type)}},toggleTab:function(e,t){var n=this.elements.settings.tabs[e],i=this.elements.settings.panes[e];Cc.toggleHidden(n,!t),Cc.toggleHidden(i,!t)},setQualityMenu:function(e){var t=this;if(Cc.is.element(this.elements.settings.panes.quality)){var n=this.elements.settings.panes.quality.querySelector("ul");Cc.is.array(e)?this.options.quality=e.filter(function(e){return t.config.quality.options.includes(e)}):this.options.quality=this.config.quality.options;var i=!Cc.is.empty(this.options.quality)&&this.isYouTube;if(Uc.toggleTab.call(this,"quality",i),i){Cc.emptyElement(n);this.options.quality.forEach(function(e){return Uc.createMenuItem.call(t,e,n,"quality",Uc.getLabel.call(t,"quality",e),function(e){var n="";switch(e){case"hd2160":n="4K";break;case"hd1440":n="WQHD";break;case"hd1080":case"hd720":n="HD"}return n.length?Uc.createBadge.call(t,n):null}(e))}),Uc.updateSetting.call(this,"quality",n)}}},getLabel:function(e,t){switch(e){case"speed":return 1===t?"Normal":t+"&times;";case"quality":switch(t){case"hd2160":return"2160P";case"hd1440":return"1440P";case"hd1080":return"1080P";case"hd720":return"720P";case"large":return"480P";case"medium":return"360P";case"small":return"240P";case"tiny":return"Tiny";case"default":return"Auto";default:return t}case"captions":return Uc.getLanguage.call(this);default:return null}},updateSetting:function(e,t){var n=this.elements.settings.panes[e],i=null,r=t;switch(e){case"captions":i=this.captions.active?this.captions.language:"";break;default:if(i=this[e],Cc.is.empty(i)&&(i=this.config[e].default),!this.options[e].includes(i))return void this.debug.warn("Unsupported value of '"+i+"' for "+e);if(!this.config[e].options.includes(i))return void this.debug.warn("Disabled value of '"+i+"' for "+e)}(Cc.is.element(r)||(r=n&&n.querySelector("ul")),Cc.is.empty(i))||(this.elements.settings.tabs[e].querySelector("."+this.config.classNames.menu.value).innerHTML=Uc.getLabel.call(this,e,i));var o=r&&r.querySelector('input[value="'+i+'"]');Cc.is.element(o)&&(o.checked=!0)},getLanguage:function(){if(!this.supported.ui)return null;if(!jc.textTracks||!Hc.getTracks.call(this).length)return this.config.i18n.none;if(this.captions.active){var e=Hc.getCurrentTrack.call(this);if(Cc.is.track(e))return e.label}return this.config.i18n.disabled},setCaptionsMenu:function(){var e=this,t=this.elements.settings.panes.captions.querySelector("ul"),n=Hc.getTracks.call(this).length;if(Uc.toggleTab.call(this,"captions",n),Cc.emptyElement(t),n){var i=Hc.getTracks.call(this).map(function(e){return{language:e.language,label:Cc.is.empty(e.label)?e.language.toUpperCase():e.label}});i.unshift({language:"",label:this.config.i18n.none}),i.forEach(function(n){Uc.createMenuItem.call(e,n.language,t,"language",n.label||n.language,Uc.createBadge.call(e,n.language.toUpperCase()),n.language.toLowerCase()===e.captions.language.toLowerCase())}),Uc.updateSetting.call(this,"captions",t)}},setSpeedMenu:function(){var e=this;if(Cc.is.element(this.elements.settings.panes.speed)){Cc.is.object(this.options.speed)&&Object.keys(this.options.speed).length||(this.options.speed=[.5,.75,1,1.25,1.5,1.75,2]),this.options.speed=this.options.speed.filter(function(t){return e.config.speed.options.includes(t)});var t=!Cc.is.empty(this.options.speed);if(Uc.toggleTab.call(this,"speed",t),t){var n=this.elements.settings.panes.speed.querySelector("ul");Cc.toggleHidden(this.elements.settings.tabs.speed,!1),Cc.toggleHidden(this.elements.settings.panes.speed,!1),Cc.emptyElement(n),this.options.speed.forEach(function(t){return Uc.createMenuItem.call(e,t,n,"speed",Uc.getLabel.call(e,"speed",t))}),Uc.updateSetting.call(this,"speed",n)}}},toggleMenu:function(e){var t=this.elements.settings.form,n=this.elements.buttons.settings,i=Cc.is.boolean(e)?e:Cc.is.element(t)&&"true"===t.getAttribute("aria-hidden");if(Cc.is.event(e)){var r=Cc.is.element(t)&&t.contains(e.target),o=e.target===this.elements.buttons.settings;if(r||!r&&!o&&i)return;o&&e.stopPropagation()}Cc.is.element(n)&&n.setAttribute("aria-expanded",i),Cc.is.element(t)&&(t.setAttribute("aria-hidden",!i),Cc.toggleClass(this.elements.container,this.config.classNames.menu.open,i),i?t.removeAttribute("tabindex"):t.setAttribute("tabindex",-1))},getTabSize:function(e){var t=e.cloneNode(!0);t.style.position="absolute",t.style.opacity=0,t.setAttribute("aria-hidden",!1),Array.from(t.querySelectorAll("input[name]")).forEach(function(e){var t=e.getAttribute("name");e.setAttribute("name",t+"-clone")}),e.parentNode.appendChild(t);var n=t.scrollWidth,i=t.scrollHeight;return Cc.removeElement(t),{width:n,height:i}},showTab:function(e){var t=this.elements.settings.menu,n=e.target,i="false"===n.getAttribute("aria-expanded"),r=document.getElementById(n.getAttribute("aria-controls"));if(Cc.is.element(r)&&"tabpanel"===r.getAttribute("role")){var o=t.querySelector('[role="tabpanel"][aria-hidden="false"]'),s=o.parentNode;if(Array.from(t.querySelectorAll('[aria-controls="'+o.getAttribute("id")+'"]')).forEach(function(e){e.setAttribute("aria-expanded",!1)}),jc.transitions&&!jc.reducedMotion){s.style.width=o.scrollWidth+"px",s.style.height=o.scrollHeight+"px";var a=Uc.getTabSize.call(this,r);Cc.on(s,Cc.transitionEndEvent,function e(t){t.target===s&&["width","height"].includes(t.propertyName)&&(s.style.width="",s.style.height="",Cc.off(s,Cc.transitionEndEvent,e))}),s.style.width=a.width+"px",s.style.height=a.height+"px"}o.setAttribute("aria-hidden",!0),o.setAttribute("tabindex",-1),r.setAttribute("aria-hidden",!i),n.setAttribute("aria-expanded",i),r.removeAttribute("tabindex"),r.querySelectorAll("button:not(:disabled), input:not(:disabled), [tabindex]")[0].focus()}},create:function(e){var t=this;if(Cc.is.empty(this.config.controls))return null;var n=Cc.createElement("div",Cc.getAttributesFromSelector(this.config.selectors.controls.wrapper));if(this.config.controls.includes("restart")&&n.appendChild(Uc.createButton.call(this,"restart")),this.config.controls.includes("rewind")&&n.appendChild(Uc.createButton.call(this,"rewind")),this.config.controls.includes("play")&&n.appendChild(Uc.createButton.call(this,"play")),this.config.controls.includes("fast-forward")&&n.appendChild(Uc.createButton.call(this,"fast-forward")),this.config.controls.includes("progress")){var i=Cc.createElement("div",Cc.getAttributesFromSelector(this.config.selectors.progress)),r=Uc.createRange.call(this,"seek",{id:"plyr-seek-"+e.id});if(i.appendChild(r.label),i.appendChild(r.input),i.appendChild(Uc.createProgress.call(this,"buffer")),this.config.tooltips.seek){var o=Cc.createElement("span",{role:"tooltip",class:this.config.classNames.tooltip},"00:00");i.appendChild(o),this.elements.display.seekTooltip=o}this.elements.progress=i,n.appendChild(this.elements.progress)}if(this.config.controls.includes("current-time")&&n.appendChild(Uc.createTime.call(this,"currentTime")),this.config.controls.includes("duration")&&n.appendChild(Uc.createTime.call(this,"duration")),this.config.controls.includes("mute")&&n.appendChild(Uc.createButton.call(this,"mute")),this.config.controls.includes("volume")){var s=Cc.createElement("div",{class:"plyr__volume"}),a={max:1,step:.05,value:this.config.volume},l=Uc.createRange.call(this,"volume",Cc.extend(a,{id:"plyr-volume-"+e.id}));s.appendChild(l.label),s.appendChild(l.input),this.elements.volume=s,n.appendChild(s)}if(this.config.controls.includes("captions")&&n.appendChild(Uc.createButton.call(this,"captions")),this.config.controls.includes("settings")&&!Cc.is.empty(this.config.settings)){var c=Cc.createElement("div",{class:"plyr__menu"});c.appendChild(Uc.createButton.call(this,"settings",{id:"plyr-settings-toggle-"+e.id,"aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id,"aria-expanded":!1}));var u=Cc.createElement("form",{class:"plyr__menu__container",id:"plyr-settings-"+e.id,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tablist",tabindex:-1}),d=Cc.createElement("div"),f=Cc.createElement("div",{id:"plyr-settings-"+e.id+"-home","aria-hidden":!1,"aria-labelled-by":"plyr-settings-toggle-"+e.id,role:"tabpanel"}),h=Cc.createElement("ul",{role:"tablist"});this.config.settings.forEach(function(n){var i=Cc.createElement("li",{role:"tab",hidden:""}),r=Cc.createElement("button",Cc.extend(Cc.getAttributesFromSelector(t.config.selectors.buttons.settings),{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--forward",id:"plyr-settings-"+e.id+"-"+n+"-tab","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-"+n,"aria-expanded":!1}),t.config.i18n[n]),o=Cc.createElement("span",{class:t.config.classNames.menu.value});o.innerHTML=e[n],r.appendChild(o),i.appendChild(r),h.appendChild(i),t.elements.settings.tabs[n]=i}),f.appendChild(h),d.appendChild(f),this.config.settings.forEach(function(n){var i=Cc.createElement("div",{id:"plyr-settings-"+e.id+"-"+n,"aria-hidden":!0,"aria-labelled-by":"plyr-settings-"+e.id+"-"+n+"-tab",role:"tabpanel",tabindex:-1,hidden:""}),r=Cc.createElement("button",{type:"button",class:t.config.classNames.control+" "+t.config.classNames.control+"--back","aria-haspopup":!0,"aria-controls":"plyr-settings-"+e.id+"-home","aria-expanded":!1},t.config.i18n[n]);i.appendChild(r);var o=Cc.createElement("ul");i.appendChild(o),d.appendChild(i),t.elements.settings.panes[n]=i}),u.appendChild(d),c.appendChild(u),n.appendChild(c),this.elements.settings.form=u,this.elements.settings.menu=c}return this.config.controls.includes("pip")&&jc.pip&&n.appendChild(Uc.createButton.call(this,"pip")),this.config.controls.includes("airplay")&&jc.airplay&&n.appendChild(Uc.createButton.call(this,"airplay")),this.config.controls.includes("fullscreen")&&n.appendChild(Uc.createButton.call(this,"fullscreen")),this.config.controls.includes("play-large")&&this.elements.container.appendChild(Uc.createButton.call(this,"play-large")),this.elements.controls=n,this.config.controls.includes("settings")&&this.config.settings.includes("speed")&&Uc.setSpeedMenu.call(this),n},inject:function(){var e=this;if(this.config.loadSprite){var t=Uc.getIconUrl.call(this);t.absolute&&Cc.loadSprite(t.url,"sprite-plyr")}this.id=Math.floor(1e4*Math.random());var n=null;this.elements.controls=null,n=Cc.is.string(this.config.controls)||Cc.is.element(this.config.controls)?this.config.controls:Cc.is.function(this.config.controls)?this.config.controls({id:this.id,seektime:this.config.seekTime,title:this.config.title}):Uc.create.call(this,{id:this.id,seektime:this.config.seekTime,speed:this.speed,quality:this.quality,captions:Uc.getLanguage.call(this)});var i=void 0;if(Cc.is.string(this.config.selectors.controls.container)&&(i=document.querySelector(this.config.selectors.controls.container)),Cc.is.element(i)||(i=this.elements.container),Cc.is.element(n)?i.appendChild(n):i.insertAdjacentHTML("beforeend",n),Cc.is.element(this.elements.controls)||Cc.findElements.call(this),window.navigator.userAgent.includes("Edge")&&Cc.repaint(i),this.config.tooltips.controls){var r=Cc.getElements.call(this,[this.config.selectors.controls.wrapper," ",this.config.selectors.labels," .",this.config.classNames.hidden].join(""));Array.from(r).forEach(function(t){Cc.toggleClass(t,e.config.classNames.hidden,!1),Cc.toggleClass(t,e.config.classNames.tooltip,!0),t.setAttribute("role","tooltip")})}}},Hc={setup:function(){if(this.supported.ui){var e=this.storage.get("language");if(Cc.is.empty(e)||(this.captions.language=e),Cc.is.empty(this.captions.language)&&(this.captions.language=this.config.captions.language.toLowerCase()),!Cc.is.boolean(this.captions.active)){var t=this.storage.get("captions");Cc.is.boolean(t)?this.captions.active=t:this.captions.active=this.config.captions.active}if(!this.isVideo||this.isYouTube||this.isHTML5&&!jc.textTracks)Cc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this);else{Cc.is.element(this.elements.captions)||(this.elements.captions=Cc.createElement("div",Cc.getAttributesFromSelector(this.config.selectors.captions)),Cc.insertAfter(this.elements.captions,this.elements.wrapper)),Cc.toggleClass(this.elements.container,this.config.classNames.captions.enabled,!Cc.is.empty(Hc.getTracks.call(this)));var n=Hc.getTracks.call(this);if(!Cc.is.empty(n)){if(Cc.getBrowser().isIE&&window.URL){var i=this.media.querySelectorAll("track");Array.from(i).forEach(function(e){var t=e.getAttribute("src"),n=Cc.parseUrl(t);n.hostname!==window.location.href.hostname&&["http:","https:"].includes(n.protocol)&&Cc.fetch(t,"blob").then(function(t){e.setAttribute("src",window.URL.createObjectURL(t))}).catch(function(){Cc.removeElement(e)})})}Hc.setLanguage.call(this),Hc.show.call(this),Cc.is.array(this.config.controls)&&this.config.controls.includes("settings")&&this.config.settings.includes("captions")&&Uc.setCaptionsMenu.call(this)}}}},setLanguage:function(){var e=this;if(this.isHTML5&&this.isVideo){Hc.getTracks.call(this).forEach(function(t){Cc.on(t,"cuechange",function(t){return Hc.setCue.call(e,t)}),t.mode="hidden"});var t=Hc.getCurrentTrack.call(this);Cc.is.track(t)&&Array.from(t.activeCues||[]).length&&Hc.setCue.call(this,t)}else this.isVimeo&&this.captions.active&&this.embed.enableTextTrack(this.language)},getTracks:function(){return Cc.is.nullOrUndefined(this.media)?[]:Array.from(this.media.textTracks||[]).filter(function(e){return["captions","subtitles"].includes(e.kind)})},getCurrentTrack:function(){var e=this;return Hc.getTracks.call(this).find(function(t){return t.language.toLowerCase()===e.language})},setCue:function(e){var t=Cc.is.event(e)?e.target:e,n=t.activeCues,i=n.length&&n[0];t===Hc.getCurrentTrack.call(this)&&(Cc.is.cue(i)?Hc.setText.call(this,i.getCueAsHTML()):Hc.setText.call(this,null),Cc.dispatchEvent.call(this,this.media,"cuechange"))},setText:function(e){if(this.supported.ui)if(Cc.is.element(this.elements.captions)){var t=Cc.createElement("span");Cc.emptyElement(this.elements.captions);var n=Cc.is.nullOrUndefined(e)?"":e;Cc.is.string(n)?t.textContent=n.trim():t.appendChild(n),this.elements.captions.appendChild(t)}else this.debug.warn("No captions element to render to")},show:function(){if(Cc.is.element(this.elements.buttons.captions)){var e=this.storage.get("captions");Cc.is.boolean(e)?this.captions.active=e:e=this.config.captions.active,e&&(Cc.toggleClass(this.elements.container,this.config.classNames.captions.active,!0),Cc.toggleState(this.elements.buttons.captions,!0))}}},Wc={setup:function(){var e=this;Cc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Wc.setAspectRatio.call(this),Cc.is.object(window.YT)&&Cc.is.function(window.YT.Player)?Wc.ready.call(this):(Cc.loadScript(this.config.urls.youtube.api),window.onYouTubeReadyCallbacks=window.onYouTubeReadyCallbacks||[],window.onYouTubeReadyCallbacks.push(function(){Wc.ready.call(e)}),window.onYouTubeIframeAPIReady=function(){window.onYouTubeReadyCallbacks.forEach(function(e){e()})})},getTitle:function(e){var t=this;if(Cc.is.function(this.embed.getVideoData)){var n=this.embed.getVideoData().title;if(Cc.is.empty(n))return this.config.title=n,void Vc.setTitle.call(this)}var i=this.config.keys.google;if(Cc.is.string(i)&&!Cc.is.empty(i)){var r="https://www.googleapis.com/youtube/v3/videos?id="+e+"&key="+i+"&fields=items(snippet(title))&part=snippet";Cc.fetch(r).then(function(e){Cc.is.object(e)&&(t.config.title=e.items[0].snippet.title,Vc.setTitle.call(t))}).catch(function(){})}},setAspectRatio:function(){var e=this.config.ratio.split(":");this.elements.wrapper.style.paddingBottom=100/e[0]*e[1]+"%"},ready:function(){var e=this,t=e.media.getAttribute("id");if(Cc.is.empty(t)||!t.startsWith("youtube-")){var n=e.media.getAttribute("src");Cc.is.empty(n)&&(n=e.media.getAttribute(this.config.attributes.embed.id));var i=Cc.parseYouTubeId(n),r=Cc.generateId(e.provider),o=Cc.createElement("div",{id:r});e.media=Cc.replaceElement(o,e.media),e.embed=new window.YT.Player(r,{videoId:i,playerVars:{autoplay:e.config.autoplay?1:0,controls:e.supported.ui?0:1,rel:0,showinfo:0,iv_load_policy:3,modestbranding:1,disablekb:1,playsinline:1,widget_referrer:window?window.location.href:null,cc_load_policy:e.captions.active?1:0,cc_lang_pref:e.config.captions.language},events:{onError:function(t){if(!Cc.is.object(e.media.error)){var n={code:t.data};switch(t.data){case 2:n.message="The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.";break;case 5:n.message="The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.";break;case 100:n.message="The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.";break;case 101:case 150:n.message="The owner of the requested video does not allow it to be played in embedded players.";break;default:n.message="An unknown error occured"}e.media.error=n,Cc.dispatchEvent.call(e,e.media,"error")}},onPlaybackQualityChange:function(t){var n=t.target;e.media.quality=n.getPlaybackQuality(),Cc.dispatchEvent.call(e,e.media,"qualitychange")},onPlaybackRateChange:function(t){var n=t.target;e.media.playbackRate=n.getPlaybackRate(),Cc.dispatchEvent.call(e,e.media,"ratechange")},onReady:function(t){var n=t.target;Wc.getTitle.call(e,i),e.media.play=function(){n.playVideo()},e.media.pause=function(){n.pauseVideo()},e.media.stop=function(){n.stopVideo()},e.media.duration=n.getDuration(),e.media.paused=!0,e.media.currentTime=0,Object.defineProperty(e.media,"currentTime",{get:function(){return Number(n.getCurrentTime())},set:function(t){e.media.seeking=!0,Cc.dispatchEvent.call(e,e.media,"seeking"),n.seekTo(t)}}),Object.defineProperty(e.media,"playbackRate",{get:function(){return n.getPlaybackRate()},set:function(e){n.setPlaybackRate(e)}}),Object.defineProperty(e.media,"quality",{get:function(){return n.getPlaybackQuality()},set:function(t){Cc.dispatchEvent.call(e,e.media,"qualityrequested",!1,{quality:t}),n.setPlaybackQuality(t)}});var r=e.config.volume;Object.defineProperty(e.media,"volume",{get:function(){return r},set:function(t){r=t,n.setVolume(100*r),Cc.dispatchEvent.call(e,e.media,"volumechange")}});var o=e.config.muted;Object.defineProperty(e.media,"muted",{get:function(){return o},set:function(t){var i=Cc.is.boolean(t)?t:o;o=i,n[i?"mute":"unMute"](),Cc.dispatchEvent.call(e,e.media,"volumechange")}}),Object.defineProperty(e.media,"currentSrc",{get:function(){return n.getVideoUrl()}}),Object.defineProperty(e.media,"ended",{get:function(){return e.currentTime===e.duration}}),e.options.speed=n.getAvailablePlaybackRates(),e.supported.ui&&e.media.setAttribute("tabindex",-1),Cc.dispatchEvent.call(e,e.media,"timeupdate"),Cc.dispatchEvent.call(e,e.media,"durationchange"),window.clearInterval(e.timers.buffering),e.timers.buffering=window.setInterval(function(){e.media.buffered=n.getVideoLoadedFraction(),(null===e.media.lastBuffered||e.media.lastBuffered<e.media.buffered)&&Cc.dispatchEvent.call(e,e.media,"progress"),e.media.lastBuffered=e.media.buffered,1===e.media.buffered&&(window.clearInterval(e.timers.buffering),Cc.dispatchEvent.call(e,e.media,"canplaythrough"))},200),setTimeout(function(){return Vc.build.call(e)},50)},onStateChange:function(t){var n=t.target;switch(window.clearInterval(e.timers.playing),t.data){case 0:e.media.paused=!0,e.media.loop?(n.stopVideo(),n.playVideo()):Cc.dispatchEvent.call(e,e.media,"ended");break;case 1:e.media.seeking&&Cc.dispatchEvent.call(e,e.media,"seeked"),e.media.seeking=!1,e.media.paused&&Cc.dispatchEvent.call(e,e.media,"play"),e.media.paused=!1,Cc.dispatchEvent.call(e,e.media,"playing"),e.timers.playing=window.setInterval(function(){Cc.dispatchEvent.call(e,e.media,"timeupdate")},50),e.media.duration!==n.getDuration()&&(e.media.duration=n.getDuration(),Cc.dispatchEvent.call(e,e.media,"durationchange")),Uc.setQualityMenu.call(e,n.getAvailableQualityLevels());break;case 2:e.media.paused=!0,Cc.dispatchEvent.call(e,e.media,"pause")}Cc.dispatchEvent.call(e,e.elements.container,"statechange",!1,{code:t.data})}}})}}},Gc={setup:function(){var e=this;Cc.toggleClass(this.elements.wrapper,this.config.classNames.embed,!0),Gc.setAspectRatio.call(this),Cc.is.object(window.Vimeo)?Gc.ready.call(this):Cc.loadScript(this.config.urls.vimeo.api,function(){Gc.ready.call(e)})},setAspectRatio:function(e){var t=Cc.is.string(e)?e.split(":"):this.config.ratio.split(":"),n=100/t[0]*t[1],i=(200-n)/4;this.elements.wrapper.style.paddingBottom=n+"%",this.media.style.transform="translateY(-"+i+"%)"},ready:function(){var e=this,t=this,n={loop:t.config.loop.active,autoplay:t.autoplay,byline:!1,portrait:!1,title:!1,speed:!0,transparent:0,gesture:"media"},i=Cc.buildUrlParams(n),r=t.media.getAttribute("src");Cc.is.empty(r)&&(r=t.media.getAttribute(this.config.attributes.embed.id));var o=Cc.parseVimeoId(r),s=Cc.createElement("iframe"),a="https://player.vimeo.com/video/"+o+"?"+i;s.setAttribute("src",a),s.setAttribute("allowfullscreen",""),s.setAttribute("allowtransparency",""),s.setAttribute("allow","autoplay");var l=Cc.createElement("div");l.appendChild(s),t.media=Cc.replaceElement(l,t.media),t.embed=new window.Vimeo.Player(s),t.media.paused=!0,t.media.currentTime=0,t.media.play=function(){t.embed.play().then(function(){t.media.paused=!1})},t.media.pause=function(){t.embed.pause().then(function(){t.media.paused=!0})},t.media.stop=function(){t.embed.stop().then(function(){t.media.paused=!0,t.currentTime=0})};var c=t.media.currentTime;Object.defineProperty(t.media,"currentTime",{get:function(){return c},set:function(e){var n=t.media.paused;t.media.seeking=!0,Cc.dispatchEvent.call(t,t.media,"seeking"),t.embed.setCurrentTime(e),n&&t.pause()}});var u=t.config.speed.selected;Object.defineProperty(t.media,"playbackRate",{get:function(){return u},set:function(e){t.embed.setPlaybackRate(e).then(function(){u=e,Cc.dispatchEvent.call(t,t.media,"ratechange")})}});var d=t.config.volume;Object.defineProperty(t.media,"volume",{get:function(){return d},set:function(e){t.embed.setVolume(e).then(function(){d=e,Cc.dispatchEvent.call(t,t.media,"volumechange")})}});var f=t.config.muted;Object.defineProperty(t.media,"muted",{get:function(){return f},set:function(e){var n=!!Cc.is.boolean(e)&&e;t.embed.setVolume(n?0:t.config.volume).then(function(){f=n,Cc.dispatchEvent.call(t,t.media,"volumechange")})}});var h=t.config.loop;Object.defineProperty(t.media,"loop",{get:function(){return h},set:function(e){var n=Cc.is.boolean(e)?e:t.config.loop.active;t.embed.setLoop(n).then(function(){h=n})}});var p=void 0;t.embed.getVideoUrl().then(function(e){p=e}),Object.defineProperty(t.media,"currentSrc",{get:function(){return p}}),Object.defineProperty(t.media,"ended",{get:function(){return t.currentTime===t.duration}}),Promise.all([t.embed.getVideoWidth(),t.embed.getVideoHeight()]).then(function(t){var n=Cc.getAspectRatio(t[0],t[1]);Gc.setAspectRatio.call(e,n)}),t.embed.setAutopause(t.config.autopause).then(function(e){t.config.autopause=e}),t.embed.getVideoTitle().then(function(n){t.config.title=n,Vc.setTitle.call(e)}),t.embed.getCurrentTime().then(function(e){c=e,Cc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.getDuration().then(function(e){t.media.duration=e,Cc.dispatchEvent.call(t,t.media,"durationchange")}),t.embed.getTextTracks().then(function(e){t.media.textTracks=e,Hc.setup.call(t)}),t.embed.on("cuechange",function(e){var n=null;e.cues.length&&(n=Cc.stripHTML(e.cues[0].text)),Hc.setText.call(t,n)}),t.embed.on("loaded",function(){Cc.is.element(t.embed.element)&&t.supported.ui&&t.embed.element.setAttribute("tabindex",-1)}),t.embed.on("play",function(){t.media.paused&&Cc.dispatchEvent.call(t,t.media,"play"),t.media.paused=!1,Cc.dispatchEvent.call(t,t.media,"playing")}),t.embed.on("pause",function(){t.media.paused=!0,Cc.dispatchEvent.call(t,t.media,"pause")}),t.embed.on("timeupdate",function(e){t.media.seeking=!1,c=e.seconds,Cc.dispatchEvent.call(t,t.media,"timeupdate")}),t.embed.on("progress",function(e){t.media.buffered=e.percent,Cc.dispatchEvent.call(t,t.media,"progress"),1===parseInt(e.percent,10)&&Cc.dispatchEvent.call(t,t.media,"canplaythrough")}),t.embed.on("seeked",function(){t.media.seeking=!1,Cc.dispatchEvent.call(t,t.media,"seeked"),Cc.dispatchEvent.call(t,t.media,"play")}),t.embed.on("ended",function(){t.media.paused=!0,Cc.dispatchEvent.call(t,t.media,"ended")}),t.embed.on("error",function(e){t.media.error=e,Cc.dispatchEvent.call(t,t.media,"error")}),setTimeout(function(){return Vc.build.call(t)},0)}},Yc=Cc.getBrowser(),Kc={setup:function(){if(this.media)if(Cc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}",this.type),!0),Cc.toggleClass(this.elements.container,this.config.classNames.provider.replace("{0}",this.provider),!0),this.isEmbed&&Cc.toggleClass(this.elements.container,this.config.classNames.type.replace("{0}","video"),!0),this.supported.ui&&(Cc.toggleClass(this.elements.container,this.config.classNames.pip.supported,jc.pip&&this.isHTML5&&this.isVideo),Cc.toggleClass(this.elements.container,this.config.classNames.airplay.supported,jc.airplay&&this.isHTML5),Cc.toggleClass(this.elements.container,this.config.classNames.stopped,this.config.autoplay),Cc.toggleClass(this.elements.container,this.config.classNames.isIos,Yc.isIos),Cc.toggleClass(this.elements.container,this.config.classNames.isTouch,jc.touch)),this.isVideo&&(this.elements.wrapper=Cc.createElement("div",{class:this.config.classNames.video}),Cc.wrap(this.media,this.elements.wrapper)),this.isEmbed)switch(this.provider){case"youtube":Wc.setup.call(this);break;case"vimeo":Gc.setup.call(this)}else this.isHTML5&&Vc.setTitle.call(this);else this.debug.warn("No media element found!")},cancelRequests:function(){this.isHTML5&&(Cc.removeElement(this.media.querySelectorAll("source")),this.media.setAttribute("src",this.config.blankVideo),this.media.load(),this.debug.log("Cancelled network requests"))}},Qc={insertElements:function(e,t){var n=this;Cc.is.string(t)?Cc.insertElement(e,this.media,{src:t}):Cc.is.array(t)&&t.forEach(function(t){Cc.insertElement(e,n.media,t)})},change:function(e){var t=this;Cc.is.object(e)&&"sources"in e&&e.sources.length?(Kc.cancelRequests.call(this),this.destroy.call(this,function(){switch(Cc.removeElement(t.media),t.media=null,Cc.is.element(t.elements.container)&&t.elements.container.removeAttribute("class"),t.type=e.type,t.provider=Cc.is.empty(e.sources[0].provider)?_c.html5:e.sources[0].provider,t.supported=jc.check(t.type,t.provider,t.config.inline),t.provider+":"+t.type){case"html5:video":t.media=Cc.createElement("video");break;case"html5:audio":t.media=Cc.createElement("audio");break;case"youtube:video":case"vimeo:video":t.media=Cc.createElement("div",{src:e.sources[0].src})}t.elements.container.appendChild(t.media),Cc.is.boolean(e.autoplay)&&(t.config.autoplay=e.autoplay),t.isHTML5&&(t.config.crossorigin&&t.media.setAttribute("crossorigin",""),t.config.autoplay&&t.media.setAttribute("autoplay",""),"poster"in e&&t.media.setAttribute("poster",e.poster),t.config.loop.active&&t.media.setAttribute("loop",""),t.config.muted&&t.media.setAttribute("muted",""),t.config.inline&&t.media.setAttribute("playsinline","")),Vc.addStyleHook.call(t),t.isHTML5&&Qc.insertElements.call(t,"source",e.sources),t.config.title=e.title,Kc.setup.call(t),t.isHTML5&&("tracks"in e&&Qc.insertElements.call(t,"track",e.tracks),t.media.load()),(t.isHTML5||t.isEmbed&&!t.supported.ui)&&Vc.build.call(t),t.fullscreen.update()},!0)):this.debug.warn("Invalid source format")}};return function(){function e(t,n){var i=this;if(Tc(this,e),this.timers={},this.ready=!1,this.loading=!1,this.failed=!1,this.media=t,Cc.is.string(this.media)&&(this.media=document.querySelectorAll(this.media)),(window.jQuery&&this.media instanceof jQuery||Cc.is.nodeList(this.media)||Cc.is.array(this.media))&&(this.media=this.media[0]),this.config=Cc.extend({},Sc,n,function(){try{return JSON.parse(i.media.getAttribute("data-plyr-config"))}catch(e){return{}}}()),this.elements={container:null,buttons:{},display:{},progress:{},inputs:{},settings:{menu:null,panes:{},tabs:{}},captions:null},this.captions={active:null,currentTrack:null},this.fullscreen={active:!1},this.options={speed:[],quality:[]},this.debug=new Lc(this.config.debug),this.debug.log("Config",this.config),this.debug.log("Support",jc),!Cc.is.nullOrUndefined(this.media)&&Cc.is.element(this.media))if(this.media.plyr)this.debug.warn("Target already setup");else if(this.config.enabled)if(jc.check().api){this.elements.original=this.media.cloneNode(!0);var r=this.media.tagName.toLowerCase(),o=null,s=null,a=null;switch(r){case"div":if(o=this.media.querySelector("iframe"),Cc.is.element(o)){if(s=o.getAttribute("src"),this.provider=Cc.getProviderByUrl(s),this.elements.container=this.media,this.media=o,this.elements.container.className="",a=Cc.getUrlParams(s),!Cc.is.empty(a)){var l=["1","true"];l.includes(a.autoplay)&&(this.config.autoplay=!0),l.includes(a.playsinline)&&(this.config.inline=!0),l.includes(a.loop)&&(this.config.loop.active=!0)}}else this.provider=this.media.getAttribute(this.config.attributes.embed.provider),this.media.removeAttribute(this.config.attributes.embed.provider);if(Cc.is.empty(this.provider)||!Object.keys(_c).includes(this.provider))return void this.debug.error("Setup failed: Invalid provider");this.type=kc.video;break;case"video":case"audio":this.type=r,this.provider=_c.html5,this.media.hasAttribute("crossorigin")&&(this.config.crossorigin=!0),this.media.hasAttribute("autoplay")&&(this.config.autoplay=!0),this.media.hasAttribute("playsinline")&&(this.config.inline=!0),this.media.hasAttribute("muted")&&(this.config.muted=!0),this.media.hasAttribute("loop")&&(this.config.loop.active=!0);break;default:return void this.debug.error("Setup failed: unsupported type")}this.supported=jc.check(this.type,this.provider,this.config.inline),this.supported.api?(this.storage=new Rc(this),this.media.plyr=this,Cc.is.element(this.elements.container)||(this.elements.container=Cc.createElement("div"),Cc.wrap(this.media,this.elements.container)),this.elements.container.setAttribute("tabindex",0),qc.global.call(this),Vc.addStyleHook.call(this),Kc.setup.call(this),this.config.debug&&Cc.on(this.elements.container,this.config.events.join(" "),function(e){i.debug.log("event: "+e.type)}),(this.isHTML5||this.isEmbed&&!this.supported.ui)&&Vc.build.call(this),this.fullscreen=new Fc(this),this.ads=new zc(this)):this.debug.error("Setup failed: no support")}else this.debug.error("Setup failed: no support");else this.debug.error("Setup failed: disabled by config");else this.debug.error("Setup failed: no suitable element passed")}return xc(e,[{key:"play",value:function(){return!this.ads.enabled||this.ads.initialized||this.ads.blocked?this.media.play():(this.ads.play(),null)}},{key:"pause",value:function(){this.playing&&this.media.pause()}},{key:"togglePlay",value:function(e){(Cc.is.boolean(e)?e:!this.playing)?this.play():this.pause()}},{key:"stop",value:function(){this.restart(),this.pause()}},{key:"restart",value:function(){this.currentTime=0}},{key:"rewind",value:function(e){this.currentTime=this.currentTime-(Cc.is.number(e)?e:this.config.seekTime)}},{key:"forward",value:function(e){this.currentTime=this.currentTime+(Cc.is.number(e)?e:this.config.seekTime)}},{key:"increaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t+(Cc.is.number(e)?e:1)}},{key:"decreaseVolume",value:function(e){var t=this.media.muted?0:this.volume;this.volume=t-(Cc.is.number(e)?e:1)}},{key:"toggleCaptions",value:function(e){if(this.supported.ui&&Cc.is.element(this.elements.buttons.captions)){var t=Cc.is.boolean(e)?e:-1===this.elements.container.className.indexOf(this.config.classNames.captions.active);this.captions.active!==t&&(this.captions.active=t,Cc.toggleState(this.elements.buttons.captions,this.captions.active),Cc.toggleClass(this.elements.container,this.config.classNames.captions.active,this.captions.active),Cc.dispatchEvent.call(this,this.media,this.captions.active?"captionsenabled":"captionsdisabled"))}}},{key:"airplay",value:function(){jc.airplay&&this.media.webkitShowPlaybackTargetPicker()}},{key:"toggleControls",value:function(e){var t=this;if(Cc.is.element(this.elements.controls)&&this.supported.ui&&!this.isAudio){var n=0,i=e,r=!1;if(Cc.is.boolean(e)||(Cc.is.event(e)?(r="enterfullscreen"===e.type,i=["mouseenter","mousemove","touchstart","touchmove","focusin"].includes(e.type),["mousemove","touchmove","touchend"].includes(e.type)&&(n=2e3),"focusin"===e.type&&(n=3e3,Cc.toggleClass(this.elements.controls,this.config.classNames.noTransition,!0))):i=Cc.hasClass(this.elements.container,this.config.classNames.hideControls)),window.clearTimeout(this.timers.controls),i||this.paused||this.loading){if(Cc.toggleClass(this.elements.container,this.config.classNames.hideControls,!1)&&Cc.dispatchEvent.call(this,this.media,"controlsshown"),this.paused||this.loading)return;jc.touch&&(n=3e3)}i&&!this.playing||(this.timers.controls=setTimeout(function(){(!t.elements.controls.pressed&&!t.elements.controls.hover||r)&&(Cc.hasClass(t.elements.container,t.config.classNames.hideControls)||Cc.toggleClass(t.elements.controls,t.config.classNames.noTransition,!1),Cc.toggleClass(t.elements.container,t.config.classNames.hideControls,!0)&&(Cc.dispatchEvent.call(t,t.media,"controlshidden"),t.config.controls.includes("settings")&&!Cc.is.empty(t.config.settings)&&Uc.toggleMenu.call(t,!1)))},n))}}},{key:"on",value:function(e,t){Cc.on(this.elements.container,e,t)}},{key:"off",value:function(e,t){Cc.off(this.elements.container,e,t)}},{key:"destroy",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],i=function(){document.body.style.overflow="",t.embed=null,n?(Object.keys(t.elements).length&&(Cc.removeElement(t.elements.buttons.play),Cc.removeElement(t.elements.captions),Cc.removeElement(t.elements.controls),Cc.removeElement(t.elements.wrapper),t.elements.buttons.play=null,t.elements.captions=null,t.elements.controls=null,t.elements.wrapper=null),Cc.is.function(e)&&e()):(Cc.replaceElement(t.elements.original,t.elements.container),Cc.dispatchEvent.call(t,t.elements.original,"destroyed",!0),Cc.is.function(e)&&e.call(t.elements.original),t.elements=null)};switch(this.provider+":"+this.type){case"html5:video":case"html5:audio":Vc.toggleNativeControls.call(this,!0),i();break;case"youtube:video":window.clearInterval(this.timers.buffering),window.clearInterval(this.timers.playing),null!==this.embed&&this.embed.destroy(),i();break;case"vimeo:video":null!==this.embed&&this.embed.unload().then(i),setTimeout(i,200)}}},{key:"supports",value:function(e){return jc.mime.call(this,e)}},{key:"isHTML5",get:function(){return this.provider===_c.html5}},{key:"isEmbed",get:function(){return this.isYouTube||this.isVimeo}},{key:"isYouTube",get:function(){return this.provider===_c.youtube}},{key:"isVimeo",get:function(){return this.provider===_c.vimeo}},{key:"isVideo",get:function(){return this.type===kc.video}},{key:"isAudio",get:function(){return this.type===kc.audio}},{key:"paused",get:function(){return this.media.paused}},{key:"playing",get:function(){return!this.paused&&!this.ended&&(!this.isHTML5||this.media.readyState>2)}},{key:"ended",get:function(){return this.media.ended}},{key:"currentTime",set:function(e){var t=0;Cc.is.number(e)&&(t=e),t<0?t=0:t>this.duration&&(t=this.duration),this.media.currentTime=t.toFixed(4),this.debug.log("Seeking to "+this.currentTime+" seconds")},get:function(){return Number(this.media.currentTime)}},{key:"seeking",get:function(){return this.media.seeking}},{key:"duration",get:function(){var e=parseInt(this.config.duration,10),t=Number(this.media.duration);return Number.isNaN(e)?t:e}},{key:"volume",set:function(e){var t=e;Cc.is.string(t)&&(t=Number(t)),Cc.is.number(t)||(t=this.storage.get("volume")),Cc.is.number(t)||(t=this.config.volume),t>1&&(t=1),t<0&&(t=0),this.config.volume=t,this.media.volume=t,this.muted&&t>0&&(this.muted=!1)},get:function(){return this.media.volume}},{key:"muted",set:function(e){var t=e;Cc.is.boolean(t)||(t=this.storage.get("muted")),Cc.is.boolean(t)||(t=this.config.muted),this.config.muted=t,this.media.muted=t},get:function(){return this.media.muted}},{key:"hasAudio",get:function(){return!this.isHTML5||(!!this.isAudio||(this.media.mozHasAudio||Boolean(this.media.webkitAudioDecodedByteCount)||Boolean(this.media.audioTracks&&this.media.audioTracks.length)))}},{key:"speed",set:function(e){var t=null;Cc.is.number(e)&&(t=e),Cc.is.number(t)||(t=this.storage.get("speed")),Cc.is.number(t)||(t=this.config.speed.selected),t<.1&&(t=.1),t>2&&(t=2),this.config.speed.options.includes(t)?(this.config.speed.selected=t,this.media.playbackRate=t):this.debug.warn("Unsupported speed ("+t+")")},get:function(){return this.media.playbackRate}},{key:"quality",set:function(e){var t=null;Cc.is.string(e)&&(t=e),Cc.is.string(t)||(t=this.storage.get("quality")),Cc.is.string(t)||(t=this.config.quality.selected),this.options.quality.includes(t)?(this.config.quality.selected=t,this.media.quality=t):this.debug.warn("Unsupported quality option ("+t+")")},get:function(){return this.media.quality}},{key:"loop",set:function(e){var t=Cc.is.boolean(e)?e:this.config.loop.active;this.config.loop.active=t,this.media.loop=t},get:function(){return this.media.loop}},{key:"source",set:function(e){Qc.change.call(this,e)},get:function(){return this.media.currentSrc}},{key:"poster",set:function(e){this.isHTML5&&this.isVideo?Cc.is.string(e)&&this.media.setAttribute("poster",e):this.debug.warn("Poster can only be set on HTML5 video")},get:function(){return this.isHTML5&&this.isVideo?this.media.getAttribute("poster"):null}},{key:"autoplay",set:function(e){var t=Cc.is.boolean(e)?e:this.config.autoplay;this.config.autoplay=t},get:function(){return this.config.autoplay}},{key:"language",set:function(e){if(Cc.is.string(e)&&(this.toggleCaptions(!Cc.is.empty(e)),!Cc.is.empty(e))){var t=e.toLowerCase();this.language!==t&&(this.captions.language=t,Hc.setText.call(this,null),Hc.setLanguage.call(this),Cc.dispatchEvent.call(this,this.media,"languagechange"))}},get:function(){return this.captions.language}},{key:"pip",set:function(e){var t="picture-in-picture",n="inline";if(jc.pip){var i=Cc.is.boolean(e)?e:this.pip===n;this.media.webkitSetPresentationMode(i?t:n)}},get:function(){return jc.pip?this.media.webkitPresentationMode:null}}],[{key:"supported",value:function(e,t,n){return jc.check(e,t,n)}},{key:"loadSprite",value:function(e,t){return Cc.loadSprite(e,t)}}]),e}()});
//# sourceMappingURL=plyr.polyfilled.min.js.map
diff --git a/dist/plyr.polyfilled.min.js.map b/dist/plyr.polyfilled.min.js.map
index 7b472a97..66a02782 100644
--- a/dist/plyr.polyfilled.min.js.map
+++ b/dist/plyr.polyfilled.min.js.map
@@ -1 +1 @@
-{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","f","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesCreate","original","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","gOPD","getOwnPropertyDescriptor","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","resolve","reject","promise","$$resolve","$$reject","_perform","task","microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","then","toggle","node","createTextNode","observe","characterData","$Promise","empty","newPromiseCapability","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","x","promiseCapability","promiseResolve","all","remaining","$index","alreadyCalled","race","_wksDefine","$Symbol","charAt","wksExt","windowNames","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","symbols","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","TO_STRING","$at","pos","charCodeAt","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","flags","RegExp","ignoreCase","multiline","unicode","sticky","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","callback","current","querySelector","callbacks","element","errors","function","cb","getElementsByTagName","parentNode","insertBefore","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","updateSprite","innerHTML","body","childNodes","prefix","top","elements","targets","child","cloneNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","sel","existingAttributes","existing","selector","trim","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","youtube","vimeo","$2","parser","href","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","msExitFullscreen","Storage","json","removeItem","Ads","ads","initialized","blocked","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","_this4","getRemainingTime","label","i18n","advertisement","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this8","adError","_this9","destroy","handleKey","which","getKeyCode","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"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QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACEhkC,OAAOwrB,UAAUyY,SAAShgC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BACF,iCACA,+BACF,+BACE,mCAEF,2BACA,gCAEG,oDAMN,4BACA,wBACF,oBACI,qBACH,qBACI,oBACD,wBACA,wBACA,sBACF,wBACA,sBACE,qBACH,oBACE,6BACM,4BACP,uBACE,6BACI,6BACC,kCAEH,0BACA,mBACD,qCAGG,gCACD,6CAGC,oCACC,4CAGC,6BACH,uCAGG,iCACH,iCAEF,+CAMI,wBACN,oCAMA,oBAMC,oxDClXXigC,aAEE,SACKC,UACMz/B,KAAK0/B,WAAWD,EAAOnkC,OAAOqkC,cAFzC,SAIOF,UACIz/B,KAAKge,eAAeyhB,KAAWjjC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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.17/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n })\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text\n )\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes\n )\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes\n )\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type]\n )\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n })\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase()\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00'\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n })\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n })\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type]\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type]\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join('')\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.17\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
+{"version":3,"sources":["node_modules/core-js/modules/_global.js","node_modules/core-js/modules/_core.js","node_modules/core-js/modules/_is-object.js","node_modules/core-js/modules/_an-object.js","node_modules/core-js/modules/_fails.js","node_modules/core-js/modules/_descriptors.js","node_modules/core-js/modules/_dom-create.js","node_modules/core-js/modules/_ie8-dom-define.js","node_modules/core-js/modules/_to-primitive.js","node_modules/core-js/modules/_object-dp.js","node_modules/core-js/modules/_property-desc.js","node_modules/core-js/modules/_hide.js","node_modules/core-js/modules/_has.js","node_modules/core-js/modules/_uid.js","node_modules/core-js/modules/_redefine.js","node_modules/core-js/modules/_a-function.js","node_modules/core-js/modules/_ctx.js","node_modules/core-js/modules/_export.js","node_modules/core-js/modules/_typed.js","node_modules/core-js/modules/_library.js","node_modules/core-js/modules/_redefine-all.js","node_modules/core-js/modules/_an-instance.js","node_modules/core-js/modules/_to-integer.js","node_modules/core-js/modules/_to-length.js","node_modules/core-js/modules/_to-index.js","node_modules/core-js/modules/_cof.js","node_modules/core-js/modules/_iobject.js","node_modules/core-js/modules/_defined.js","node_modules/core-js/modules/_to-iobject.js","node_modules/core-js/modules/_to-absolute-index.js","node_modules/core-js/modules/_array-includes.js","node_modules/core-js/modules/_shared.js","node_modules/core-js/modules/_shared-key.js","node_modules/core-js/modules/_object-keys-internal.js","node_modules/core-js/modules/_enum-bug-keys.js","node_modules/core-js/modules/_object-gopn.js","node_modules/core-js/modules/_to-object.js","node_modules/core-js/modules/_array-fill.js","node_modules/core-js/modules/_wks.js","node_modules/core-js/modules/_set-to-string-tag.js","node_modules/core-js/modules/_typed-buffer.js","node_modules/core-js/modules/_species-constructor.js","node_modules/core-js/modules/_set-species.js","node_modules/core-js/modules/es6.typed.array-buffer.js","node_modules/core-js/modules/_classof.js","node_modules/core-js/modules/_iterators.js","node_modules/core-js/modules/_is-array-iter.js","node_modules/core-js/modules/_object-keys.js","node_modules/core-js/modules/_object-dps.js","node_modules/core-js/modules/_html.js","node_modules/core-js/modules/_object-create.js","node_modules/core-js/modules/_object-gpo.js","node_modules/core-js/modules/core.get-iterator-method.js","node_modules/core-js/modules/_is-array.js","node_modules/core-js/modules/_array-species-constructor.js","node_modules/core-js/modules/_array-species-create.js","node_modules/core-js/modules/_array-methods.js","node_modules/core-js/modules/_add-to-unscopables.js","node_modules/core-js/modules/_iter-step.js","node_modules/core-js/modules/_iter-create.js","node_modules/core-js/modules/_iter-define.js","node_modules/core-js/modules/es6.array.iterator.js","node_modules/core-js/modules/_iter-detect.js","node_modules/core-js/modules/_array-copy-within.js","node_modules/core-js/modules/_object-pie.js","node_modules/core-js/modules/_object-gopd.js","node_modules/core-js/modules/_typed-array.js","node_modules/core-js/modules/es6.typed.int8-array.js","node_modules/core-js/modules/es6.typed.uint8-array.js","node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","node_modules/core-js/modules/es6.typed.int16-array.js","node_modules/core-js/modules/es6.typed.uint16-array.js","node_modules/core-js/modules/es6.typed.int32-array.js","node_modules/core-js/modules/es6.typed.uint32-array.js","node_modules/core-js/modules/es6.typed.float32-array.js","node_modules/core-js/modules/es6.typed.float64-array.js","node_modules/core-js/modules/_iter-call.js","node_modules/core-js/modules/_for-of.js","node_modules/core-js/modules/_meta.js","node_modules/core-js/modules/_validate-collection.js","node_modules/core-js/modules/_collection-strong.js","node_modules/core-js/modules/_set-proto.js","node_modules/core-js/modules/_inherit-if-required.js","node_modules/core-js/modules/_collection.js","node_modules/core-js/modules/_object-gops.js","node_modules/core-js/modules/es6.map.js","node_modules/core-js/modules/es6.set.js","node_modules/core-js/modules/_object-assign.js","node_modules/core-js/modules/_collection-weak.js","node_modules/core-js/modules/es6.weak-map.js","node_modules/core-js/modules/es6.weak-set.js","node_modules/core-js/modules/es6.reflect.apply.js","node_modules/core-js/modules/_invoke.js","node_modules/core-js/modules/_bind.js","node_modules/core-js/modules/es6.reflect.construct.js","node_modules/core-js/modules/es6.reflect.define-property.js","node_modules/core-js/modules/es6.reflect.delete-property.js","node_modules/core-js/modules/es6.reflect.get.js","node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","node_modules/core-js/modules/es6.reflect.get-prototype-of.js","node_modules/core-js/modules/es6.reflect.has.js","node_modules/core-js/modules/es6.reflect.is-extensible.js","node_modules/core-js/modules/_own-keys.js","node_modules/core-js/modules/es6.reflect.own-keys.js","node_modules/core-js/modules/es6.reflect.prevent-extensions.js","node_modules/core-js/modules/es6.reflect.set.js","node_modules/core-js/modules/es6.reflect.set-prototype-of.js","node_modules/core-js/modules/_task.js","node_modules/core-js/modules/_microtask.js","node_modules/core-js/modules/_new-promise-capability.js","node_modules/core-js/modules/es6.promise.js","node_modules/core-js/modules/_perform.js","node_modules/core-js/modules/_promise-resolve.js","node_modules/core-js/modules/_wks-ext.js","node_modules/core-js/modules/_wks-define.js","node_modules/core-js/modules/_enum-keys.js","node_modules/core-js/modules/_object-gopn-ext.js","node_modules/core-js/modules/es6.symbol.js","node_modules/core-js/modules/_object-sap.js","node_modules/core-js/modules/es6.object.freeze.js","node_modules/core-js/modules/es6.object.seal.js","node_modules/core-js/modules/es6.object.prevent-extensions.js","node_modules/core-js/modules/es6.object.is-frozen.js","node_modules/core-js/modules/es6.object.is-sealed.js","node_modules/core-js/modules/es6.object.is-extensible.js","node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","node_modules/core-js/modules/es6.object.get-prototype-of.js","node_modules/core-js/modules/es6.object.keys.js","node_modules/core-js/modules/es6.object.get-own-property-names.js","node_modules/core-js/modules/es6.object.assign.js","node_modules/core-js/modules/_same-value.js","node_modules/core-js/modules/es6.object.is.js","node_modules/core-js/modules/es6.function.name.js","node_modules/core-js/modules/es6.string.raw.js","node_modules/core-js/modules/es6.string.from-code-point.js","node_modules/core-js/modules/_string-at.js","node_modules/core-js/modules/es6.string.code-point-at.js","node_modules/core-js/modules/_string-repeat.js","node_modules/core-js/modules/es6.string.repeat.js","node_modules/core-js/modules/_is-regexp.js","node_modules/core-js/modules/_string-context.js","node_modules/core-js/modules/_fails-is-regexp.js","node_modules/core-js/modules/es6.string.starts-with.js","node_modules/core-js/modules/es6.string.ends-with.js","node_modules/core-js/modules/es6.string.includes.js","node_modules/core-js/modules/_flags.js","node_modules/core-js/modules/es6.regexp.flags.js","node_modules/core-js/modules/_fix-re-wks.js","node_modules/core-js/modules/es6.regexp.match.js","node_modules/core-js/modules/es6.regexp.replace.js","node_modules/core-js/modules/es6.regexp.split.js","node_modules/core-js/modules/es6.regexp.search.js","node_modules/core-js/modules/_create-property.js","node_modules/core-js/modules/es6.array.from.js","node_modules/core-js/modules/es6.array.of.js","node_modules/core-js/modules/es6.array.copy-within.js","node_modules/core-js/modules/es6.array.find.js","node_modules/core-js/modules/es6.array.find-index.js","node_modules/core-js/modules/es6.array.fill.js","node_modules/core-js/modules/es6.number.is-finite.js","node_modules/core-js/modules/_is-integer.js","node_modules/core-js/modules/es6.number.is-integer.js","node_modules/core-js/modules/es6.number.is-safe-integer.js","node_modules/core-js/modules/es6.number.is-nan.js","node_modules/core-js/modules/es6.number.epsilon.js","node_modules/core-js/modules/es6.number.min-safe-integer.js","node_modules/core-js/modules/es6.number.max-safe-integer.js","node_modules/core-js/modules/_math-log1p.js","node_modules/core-js/modules/es6.math.acosh.js","node_modules/core-js/modules/es6.math.asinh.js","node_modules/core-js/modules/es6.math.atanh.js","node_modules/core-js/modules/_math-sign.js","node_modules/core-js/modules/es6.math.cbrt.js","node_modules/core-js/modules/es6.math.clz32.js","node_modules/core-js/modules/es6.math.cosh.js","node_modules/core-js/modules/_math-expm1.js","node_modules/core-js/modules/es6.math.expm1.js","node_modules/core-js/modules/_math-fround.js","node_modules/core-js/modules/es6.math.fround.js","node_modules/core-js/modules/es6.math.hypot.js","node_modules/core-js/modules/es6.math.imul.js","node_modules/core-js/modules/es6.math.log1p.js","node_modules/core-js/modules/es6.math.log10.js","node_modules/core-js/modules/es6.math.log2.js","node_modules/core-js/modules/es6.math.sign.js","node_modules/core-js/modules/es6.math.sinh.js","node_modules/core-js/modules/es6.math.tanh.js","node_modules/core-js/modules/es6.math.trunc.js","node_modules/core-js/modules/es7.array.includes.js","node_modules/core-js/modules/_object-to-array.js","node_modules/core-js/modules/es7.object.values.js","node_modules/core-js/modules/es7.object.entries.js","node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","node_modules/core-js/modules/_string-pad.js","node_modules/core-js/modules/_user-agent.js","node_modules/core-js/modules/es7.string.pad-start.js","node_modules/core-js/modules/es7.string.pad-end.js","node_modules/core-js/modules/web.timers.js","node_modules/core-js/modules/web.immediate.js","node_modules/core-js/modules/web.dom.iterable.js","node_modules/regenerator-runtime/runtime.js","node_modules/custom-event-polyfill/custom-event-polyfill.js","src/js/types.js","src/js/support.js","src/js/defaults.js","src/js/utils.js","src/js/console.js","src/js/fullscreen.js","src/js/storage.js","src/js/plugins/ads.js","src/js/listeners.js","src/js/ui.js","src/js/controls.js","src/js/captions.js","src/js/plugins/youtube.js","src/js/plugins/vimeo.js","src/js/media.js","src/js/source.js","src/js/plyr.js"],"names":["global","module","exports","window","Math","self","Function","__g","core","version","__e","_isObject","it","_anObject","isObject","TypeError","_fails","exec","e","_descriptors","require$$0","Object","defineProperty","get","a","document","is","createElement","_domCreate","_ie8DomDefine","require$$1","require$$2","_toPrimitive","S","fn","val","toString","call","valueOf","dP","f","O","P","Attributes","anObject","toPrimitive","IE8_DOM_DEFINE","value","_propertyDesc","bitmap","enumerable","configurable","writable","_hide","object","key","createDesc","hasOwnProperty","_has","id","px","random","_uid","concat","undefined","SRC","$toString","TPL","split","inspectSource","safe","isFunction","has","hide","join","String","prototype","this","_aFunction","_ctx","that","length","aFunction","b","c","apply","arguments","$export","type","name","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","IS_PROTO","IS_BIND","B","target","expProto","ctx","redefine","U","W","R","Typed","_export","TYPED","uid","VIEW","ABV","ArrayBuffer","DataView","CONSTR","i","TypedArrayConstructors","_typed","_redefineAll","src","_anInstance","Constructor","forbiddenField","ceil","floor","_toInteger","isNaN","min","_toLength","toInteger","_toIndex","number","toLength","RangeError","_cof","slice","_iobject","propertyIsEnumerable","cof","_defined","_toIobject","IObject","defined","max","_toAbsoluteIndex","index","_arrayIncludes","IS_INCLUDES","$this","el","fromIndex","toIObject","toAbsoluteIndex","store","_shared","shared","_sharedKey","arrayIndexOf","IE_PROTO","_objectKeysInternal","names","result","push","_enumBugKeys","hiddenKeys","f$1","getOwnPropertyNames","$keys","_toObject","_arrayFill","toObject","aLen","end","endPos","Symbol","USE_SYMBOL","def","TAG","_setToStringTag","tag","stat","gOPN","PROTOTYPE","WRONG_INDEX","$ArrayBuffer","$DataView","Infinity","BaseBuffer","abs","pow","log","LN2","$BUFFER","DESCRIPTORS","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","m","buffer","Array","eLen","eMax","eBias","rt","s","unpackIEEE754","nBits","NaN","unpackI32","bytes","packI8","packI16","packI32","packF64","packF32","addGetter","C","internal","view","isLittleEndian","intIndex","toIndex","_b","start","pack","reverse","set","conversion","$typed","fails","ArrayBufferProto","anInstance","keys","j","LIBRARY","constructor","$setInt8","setInt8","getInt8","redefineAll","byteOffset","setUint8","byteLength","arrayFill","bufferLength","offset","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","setToStringTag","SPECIES","_speciesConstructor","D","_setSpecies","KEY","$isView","isView","$slice","len","first","final","speciesConstructor","viewS","viewT","ARG","_classof","T","tryGet","callee","_iterators","ITERATOR","ArrayProto","_isArrayIter","Iterators","_objectKeys","enumBugKeys","_objectDps","defineProperties","Properties","getKeys","_html","documentElement","Empty","createDict","iframeDocument","iframe","style","display","appendChild","contentWindow","open","write","lt","close","_objectCreate","create","dPs","ObjectProto","_objectGpo","getPrototypeOf","core_getIteratorMethod","getIteratorMethod","classof","_isArray","isArray","arg","_arraySpeciesConstructor","original","_arraySpeciesCreate","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","asc","callbackfn","res","UNSCOPABLES","_addToUnscopables","_iterStep","done","IteratorPrototype","_iterCreate","NAME","next","descriptor","BUGGY","returnThis","_iterDefine","Base","DEFAULT","IS_SET","FORCED","$iterCreate","methods","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","es6_array_iterator","iterated","_t","_i","_k","step","Arguments","addToUnscopables","SAFE_CLOSING","_iterDetect","skipClosing","arr","iter","_arrayCopyWithin","copyWithin","to","from","count","inc","f$3","gOPD","getOwnPropertyDescriptor","f$2","pIE","require$$3","require$$4","require$$5","$buffer","require$$6","require$$7","require$$8","propertyDesc","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","isArrayIter","require$$21","require$$22","require$$23","require$$24","getIterFn","require$$25","require$$26","wks","require$$27","createArrayMethod","require$$28","createArrayIncludes","require$$29","require$$30","ArrayIterators","require$$31","require$$32","$iterDetect","require$$33","setSpecies","require$$34","require$$35","arrayCopyWithin","require$$36","$DP","require$$37","$GOPD","require$$38","Uint8Array","arrayForEach","arrayFilter","arraySome","arrayEvery","arrayFind","arrayFindIndex","arrayIncludes","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","lastIndexOf","arrayReduce","reduce","arrayReduceRight","reduceRight","arrayJoin","arraySort","sort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","TYPED_ARRAY","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","speciesFromList","list","fromList","_d","$from","iterator","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","every","fill","filter","find","predicate","findIndex","forEach","indexOf","searchElement","includes","separator","map","middle","some","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$set","arrayLike","$iterators","isTAIndex","$getDesc","$setDesc","desc","$TypedArrayPrototype$","wrapper","CLAMPED","GETTER","SETTER","TypedArray","TAC","TypedArrayPrototype","addElement","data","v","o","getter","round","setter","$offset","$length","klass","$len","l","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","init","_iterCall","ret","BREAK","RETURN","iterable","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","_validateCollection","SIZE","getEntry","entry","_f","n","k","_collectionStrong","getConstructor","ADDER","_l","forOf","clear","r","p","delete","prev","setStrong","$iterDefine","check","_setProto","setPrototypeOf","test","buggy","__proto__","_inheritIfRequired","_collection","common","IS_WEAK","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","inheritIfRequired","f$4","strong","add","getOwnPropertySymbols","$assign","assign","_objectAssign","A","K","getSymbols","gOPS","isEnum","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","splice","_collectionWeak","$has","ufstore","InternalMap","each","weak","tmp","$WeakMap","freeze","method","rApply","Reflect","fApply","thisArgument","argumentsList","L","_invoke","args","un","factories","_bind","bind","partArgs","bound","construct","invoke","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","receiver","getProto","$isExtensible","_ownKeys","ownKeys","$preventExtensions","V","existingDescriptor","ownDesc","setProto","defer","channel","port","process","setTask","setImmediate","clearTask","clearImmediate","MessageChannel","Dispatch","counter","queue","run","listener","event","nextTick","now","port2","port1","onmessage","postMessage","addEventListener","importScripts","cel","html","removeChild","setTimeout","_task","macrotask","Observer","MutationObserver","WebKitMutationObserver","Promise","isNode","_microtask","head","last","notify","flush","parent","domain","exit","enter","navigator","standalone","resolve","promise","then","toggle","node","createTextNode","observe","characterData","task","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","f$5","reject","$$resolve","$$reject","_perform","_promiseResolve","x","promiseCapability","newPromiseCapability","microtask","$Promise","empty","newPromiseCapabilityModule","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","isReject","_n","chain","_c","_v","ok","_s","reaction","handler","fail","_h","onHandleUnhandled","onUnhandled","console","unhandled","isUnhandled","perform","emit","onunhandledrejection","reason","error","_a","onrejectionhandled","$reject","_w","$resolve","executor","err","onFulfilled","onRejected","catch","capability","promiseResolve","all","remaining","$index","alreadyCalled","race","f$6","_wksDefine","$Symbol","charAt","wksExt","_enumKeys","symbols","windowNames","f$7","getWindowNames","gOPNExt","$JSON","JSON","_stringify","stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","$fails","_create","protoDesc","wrap","sym","isSymbol","$defineProperty","$defineProperties","enumKeys","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","wksDefine","for","keyFor","useSetter","useSimple","replacer","$replacer","_objectSap","$freeze","$seal","$isFrozen","$isSealed","$getPrototypeOf","_sameValue","y","FProto","nameRE","match","raw","callSite","tpl","fromCharCode","$fromCodePoint","fromCodePoint","code","_stringAt","TO_STRING","pos","charCodeAt","$at","codePointAt","_stringRepeat","str","repeat","MATCH","_isRegexp","isRegExp","_stringContext","searchString","_failsIsRegexp","re","$startsWith","startsWith","context","search","$endsWith","endsWith","endPosition","_flags","ignoreCase","multiline","unicode","sticky","flags","RegExp","_fixReWks","SYMBOL","fns","strfn","rxfn","string","$match","regexp","REPLACE","$replace","searchValue","replaceValue","SPLIT","$split","_split","$push","NPCG","limit","separator2","lastIndex","lastLength","output","lastLastIndex","splitLimit","separatorCopy","replace","SEARCH","$search","_createProperty","createProperty","$find","forced","_isFinite","isFinite","_isInteger","isInteger","isSafeInteger","EPSILON","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","_mathLog1p","log1p","sqrt","$acosh","acosh","Number","MAX_VALUE","$asinh","asinh","$atanh","atanh","_mathSign","sign","cbrt","clz32","LOG2E","cosh","$expm1","expm1","_mathExpm1","EPSILON32","MAX32","MIN32","_mathFround","fround","$abs","$sign","hypot","value1","value2","div","sum","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$includes","_objectToArray","isEntries","$values","getOwnPropertyDescriptors","getDesc","_stringPad","maxLength","fillString","left","stringLength","fillStr","intMaxLength","fillLen","stringFiller","_userAgent","userAgent","padStart","$pad","padEnd","MSIE","time","boundArgs","setInterval","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","Op","hasOwn","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","runtime","regeneratorRuntime","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","NativeIteratorPrototype","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","__await","defineIteratorMethods","AsyncIterator","async","innerFn","outerFn","tryLocsList","pop","Context","reset","skipTempReset","sent","_sent","delegate","tryEntries","resetTryEntry","stop","rootRecord","completion","rval","dispatchException","exception","handle","loc","caught","record","tryLoc","hasCatch","hasFinally","catchLoc","finallyLoc","Error","abrupt","finallyEntry","complete","afterLoc","finish","thrown","delegateYield","resultName","nextLoc","protoGenerator","generator","state","doneResult","delegateResult","maybeInvokeDelegate","tryCatch","makeInvokeMethod","obj","unwrapped","previousPromise","callInvokeWithMethodAndArg","return","info","pushTryEntry","locs","iteratorMethod","ce","CustomEvent","preventDefault","defaultPrevented","params","evt","origPrevent","bubbles","cancelable","detail","createEvent","initCustomEvent","Event","range","providers","types","defaults","language","utils","input","instanceof","Plyr","Boolean","nullOrUndefined","WeakMap","Element","Text","TextTrackCue","VTTCue","TextTrack","array","nodeList","documentMode","platform","url","responseType","request","XMLHttpRequest","parse","responseText","response","statusText","send","callback","current","querySelector","callbacks","element","errors","function","cb","getElementsByTagName","parentNode","insertBefore","hasId","querySelectorAll","container","toggleHidden","setAttribute","support","storage","cached","localStorage","getItem","content","fetch","setItem","updateSprite","innerHTML","body","childNodes","prefix","top","elements","targets","child","cloneNode","sibling","nextSibling","text","setAttributes","textContent","removeElement","lastChild","newChild","oldChild","replaceChild","sel","existingAttributes","existing","selector","trim","className","parts","class","contains","classList","removeAttribute","matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","controls","getElement","config","selectors","buttons","getElements","play","pause","restart","rewind","forward","mute","pip","airplay","settings","captions","fullscreen","progress","inputs","seek","volume","duration","currentTime","seekTooltip","classNames","tooltip","debug","warn","toggleNativeControls","focused","activeElement","focusable","trap","keyCode","getFocusElement","shiftKey","focus","on","off","passive","capture","Node","toggleListener","events","options","boolean","passiveListeners","plyr","dispatchEvent","toggleState","pressed","getAttribute","toFixed","parseInt","displayHours","inverted","formatTime","format","hours","getHours","mins","getMinutes","secs","getSeconds","sources","_len","_key","shift","defineProperty$1","extend","toConsumableArray","youtube","vimeo","$2","parser","href","parseUrl","hash","_hash$split2","decodeURIComponent","encodeURIComponent","fragment","createDocumentFragment","firstChild","innerText","width","height","ratio","getRatio","h","offsetHeight","provider","inline","api","ui","browser","getBrowser","playsInline","isIPhone","video","rangeInput","audio","webkitSetPresentationMode","WebKitPlaybackTargetAvailabilityEvent","media","isHTML5","canPlayType","isVideo","isAudio","supported","transitionEndEvent","matchMedia","noop","Console","enabled","onChange","button","player","active","isIos","trapFocus","toggleFallback","scrollPosition","scrollX","scrollY","scrollTo","overflow","toggleClass","fallback","Fullscreen","_this","stopPropagation","update","native","iosNative","playing","webkitEnterFullscreen","requestFullScreen","webkitExitFullscreen","cancelFullScreen","inFrame","fullscreenElement","hasClass","fullscreenEnabled","webkitFullscreenEnabled","mozFullScreenEnabled","msFullscreenEnabled","pre","msExitFullscreen","Storage","json","removeItem","Ads","ads","initialized","blocked","google","ready","loadScript","urls","googleIMA","manager","loader","cuePoints","safetyTimer","countdownTimer","listeners","startSafetyTimer","loaderPromise","managerPromise","clearSafetyTimer","setupIMA","ima","setVpaidMode","ImaSdkSettings","VpaidMode","ENABLED","setLocale","displayContainer","AdDisplayContainer","requestAds","AdsLoader","AdsManagerLoadedEvent","Type","ADS_MANAGER_LOADED","_this3","onAdsManagerLoaded","AdErrorEvent","AD_ERROR","onAdError","AdsRequest","adTagUrl","base","buildUrlParams","linearAdSlotWidth","offsetWidth","linearAdSlotHeight","nonLinearAdSlotWidth","nonLinearAdSlotHeight","forceNonLinearFullSlot","handleEventListeners","clearInterval","_this4","getRemainingTime","label","i18n","advertisement","adsManagerLoadedEvent","AdsRenderingSettings","restoreCustomPlaybackStateOnAdBreakComplete","enablePreloading","getAdsManager","getCuePoints","cuePoint","seekElement","_this5","cuePercentage","cue","cues","setVolume","AdEvent","onAdEvent","ad","getAd","_this6","LOADED","pollCountdown","isLinear","ALL_ADS_COMPLETED","loadAds","CONTENT_PAUSE_REQUESTED","pauseContent","CONTENT_RESUME_REQUESTED","resumeContent","STARTED","MIDPOINT","COMPLETE","IMPRESSION","CLICK","cancel","contentComplete","_this7","seekedTime","discardAdBreak","resize","ViewMode","NORMAL","initialize","_this8","adError","_this9","destroy","handleKey","which","getKeyCode","altKey","ctrlKey","metaKey","editable","togglePlay","increaseVolume","decreaseVolume","muted","toggleCaptions","loop","keyboard","tabFocus","hideControls","toggleControls","timeUpdate","_this2","durationUpdate","hasAudio","showPosterOnEnd","load","updateProgress","updateVolume","checkPlaying","checkLoading","clickToPlay","touch","paused","ended","disableContextMenu","updateSetting","speed","quality","inputEvent","isIE","proxy","handlerKey","defaultHandler","customHandler","toggleMenu","form","parseFloat","showTab","toggleInvert","invertTime","isWebkit","updateRangeFill","updateSeekTooltip","hover","webkitDirectionInvertedFromDevice","direction","deltaY","deltaX","uiSupported","inject","setup","setTitle","title","isEmbed","frameTitle","stopped","loading","timers","failed","networkState","setRange","nodeValue","buffered","getPercentage","setProgress","invert","updateTimeDisplay","seeking","hasDuration","displayDuration","setProperty","iconUrl","svg4everybody","getIconUrl","iconPath","absolute","iconPrefix","icon","createElementNS","use","path","setAttributeNS","attr","hidden","badge","menu","buttonType","labelPressed","iconPressed","control","createIcon","createLabel","getAttributesFromSelector","suffix","played","toLowerCase","checked","item","radio","faux","aria-hidden","insertAdjacentHTML","tooltips","percent","clientRect","getBoundingClientRect","visible","pageX","setting","tab","tabs","pane","panes","isYouTube","toggleTab","emptyElement","createMenuItem","getLabel","createBadge","getBadge","getLanguage","default","textTracks","getTracks","none","currentTrack","getCurrentTrack","track","disabled","hasTracks","tracks","toUpperCase","unshift","show","isMenuItem","isButton","clone","position","opacity","scrollWidth","scrollHeight","getElementById","transitions","reducedMotion","size","getTabSize","restore","propertyName","createButton","createRange","createProgress","createTime","inner","home","back","setSpeedMenu","loadSprite","seekTime","findElements","repaint","labels","stored","setCaptionsMenu","insertAfter","URL","hostname","location","protocol","blob","createObjectURL","setLanguage","setCue","mode","activeCues","isVimeo","embed","enableTextTrack","setText","getCueAsHTML","caption","setAspectRatio","YT","Player","onYouTubeReadyCallbacks","onYouTubeIframeAPIReady","videoId","getVideoData","items","snippet","paddingBottom","currentId","parseYouTubeId","generateId","replaceElement","autoplay","message","getPlaybackQuality","playbackRate","getPlaybackRate","getTitle","playVideo","pauseVideo","stopVideo","getDuration","getCurrentTime","seekTo","setPlaybackRate","setPlaybackQuality","getVideoUrl","getAvailablePlaybackRates","buffering","getVideoLoadedFraction","lastBuffered","build","setQualityMenu","getAvailableQualityLevels","Vimeo","padding","transform","parseVimeoId","setCurrentTime","selected","setLoop","currentSrc","getVideoWidth","getVideoHeight","dimensions","getAspectRatio","setAutopause","autopause","getVideoTitle","getTextTracks","stripHTML","seconds","isTouch","blankVideo","insertElement","attribute","cancelRequests","html5","crossorigin","poster","addStyleHook","insertElements","jQuery","tagName","getProviderByUrl","getUrlParams","truthy","playsinline","hasAttribute","webkitShowPlaybackTargetPicker","delay","isEnterFullscreen","noTransition","clearTimeout","soft","unload","mime","readyState","targetTime","fauxDuration","realDuration","mozHasAudio","webkitAudioDecodedByteCount","audioTracks","change","states","webkitPresentationMode"],"mappings":"mXACA,IAAIA,EAASC,EAAAC,QAAkC,oBAAVC,QAAyBA,OAAOC,MAAQA,KACzED,OAAwB,oBAARE,MAAuBA,KAAKD,MAAQA,KAAOC,KAE3DC,SAAS,cAATA,GACc,iBAAPC,MAAiBA,IAAMP,oECLlC,IAAIQ,EAAOP,EAAAC,SAAmBO,QAAS,SACrB,iBAAPC,MAAiBA,IAAMF,0ECDlCG,EAAiB,SAAUC,GACzB,MAAqB,iBAAPA,EAAyB,OAAPA,EAA4B,mBAAPA,4DCAvDC,EAAiB,SAAUD,GACzB,IAAKE,EAASF,GAAK,MAAMG,UAAUH,EAAK,sBACxC,OAAOA,kDCHTI,EAAiB,SAAUC,GACzB,IACE,QAASA,IACT,MAAOC,GACP,OAAO,6DCHXC,GAAkBC,EAAoB,WACpC,OAA+E,GAAxEC,OAAOC,kBAAmB,KAAOC,IAAK,WAAc,OAAO,KAAQC,6DCDxEC,EAAWL,EAAqBK,SAEhCC,EAAKZ,EAASW,IAAaX,EAASW,EAASE,eACjDC,EAAiB,SAAUhB,GACzB,OAAOc,EAAKD,EAASE,cAAcf,0ECLrCiB,GAAkBT,IAA8BU,EAAoB,WAClE,OAA4G,GAArGT,OAAOC,eAAeS,EAAyB,OAAQ,KAAOR,IAAK,WAAc,OAAO,KAAQC,mDCGzGQ,EAAiB,SAAUpB,EAAIqB,GAC7B,IAAKnB,EAASF,GAAK,OAAOA,EAC1B,IAAIsB,EAAIC,EACR,GAAIF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACzF,GAAgC,mBAApBD,EAAKtB,EAAG0B,WAA2BxB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EACnF,IAAKF,GAAkC,mBAArBC,EAAKtB,EAAGwB,YAA4BtB,EAASqB,EAAMD,EAAGG,KAAKzB,IAAM,OAAOuB,EAC1F,MAAMpB,UAAU,yHCPdwB,EAAKlB,OAAOC,eAEhBkB,EAAYpB,EAA4BC,OAAOC,eAAiB,SAAwBmB,EAAGC,EAAGC,GAI5F,GAHAC,EAASH,GACTC,EAAIG,EAAYH,GAAG,GACnBE,EAASD,GACLG,EAAgB,IAClB,OAAOP,EAAGE,EAAGC,EAAGC,GAChB,MAAOzB,IACT,GAAI,QAASyB,GAAc,QAASA,EAAY,MAAM5B,UAAU,4BAEhE,MADI,UAAW4B,IAAYF,EAAEC,GAAKC,EAAWI,OACtCN,8DCdTO,EAAiB,SAAUC,EAAQF,GACjC,OACEG,aAAuB,EAATD,GACdE,eAAyB,EAATF,GAChBG,WAAqB,EAATH,GACZF,MAAOA,uECHXM,EAAiBjC,EAA4B,SAAUkC,EAAQC,EAAKR,GAClE,OAAOR,EAAGC,EAAEc,EAAQC,EAAKC,EAAW,EAAGT,KACrC,SAAUO,EAAQC,EAAKR,GAEzB,OADAO,EAAOC,GAAOR,EACPO,kDCNLG,KAAoBA,eACxBC,EAAiB,SAAU9C,EAAI2C,GAC7B,OAAOE,EAAepB,KAAKzB,EAAI2C,mDCF7BI,EAAK,EACLC,EAAKxD,KAAKyD,SACdC,EAAiB,SAAUP,GACzB,MAAO,UAAUQ,YAAeC,IAART,EAAoB,GAAKA,EAAK,QAASI,EAAKC,GAAIxB,SAAS,6GCAnF,IAAI6B,EAAM7C,EAAkB,OAExB8C,EAAY5D,SAAkB,SAC9B6D,GAAO,GAAKD,GAAWE,MAFX,YAIhBtC,EAAmBuC,cAAgB,SAAUzD,GAC3C,OAAOsD,EAAU7B,KAAKzB,KAGvBX,EAAAC,QAAiB,SAAUuC,EAAGc,EAAKpB,EAAKmC,GACvC,IAAIC,EAA2B,mBAAPpC,EACpBoC,IAAYC,EAAIrC,EAAK,SAAWsC,EAAKtC,EAAK,OAAQoB,IAClDd,EAAEc,KAASpB,IACXoC,IAAYC,EAAIrC,EAAK8B,IAAQQ,EAAKtC,EAAK8B,EAAKxB,EAAEc,GAAO,GAAKd,EAAEc,GAAOY,EAAIO,KAAKC,OAAOpB,MACnFd,IAAMzC,EACRyC,EAAEc,GAAOpB,EACCmC,EAGD7B,EAAEc,GACXd,EAAEc,GAAOpB,EAETsC,EAAKhC,EAAGc,EAAKpB,WALNM,EAAEc,GACTkB,EAAKhC,EAAGc,EAAKpB,OAOd7B,SAASsE,UAxBI,WAwBkB,WAChC,MAAsB,mBAARC,MAAsBA,KAAKZ,IAAQC,EAAU7B,KAAKwC,yDC7BlEC,GAAiB,SAAUlE,GACzB,GAAiB,mBAANA,EAAkB,MAAMG,UAAUH,EAAK,uBAClD,OAAOA,mECATmE,GAAiB,SAAU7C,EAAI8C,EAAMC,GAEnC,GADAC,GAAUhD,QACG8B,IAATgB,EAAoB,OAAO9C,EAC/B,OAAQ+C,GACN,KAAK,EAAG,OAAO,SAAUzD,GACvB,OAAOU,EAAGG,KAAK2C,EAAMxD,IAEvB,KAAK,EAAG,OAAO,SAAUA,EAAG2D,GAC1B,OAAOjD,EAAGG,KAAK2C,EAAMxD,EAAG2D,IAE1B,KAAK,EAAG,OAAO,SAAU3D,EAAG2D,EAAGC,GAC7B,OAAOlD,EAAGG,KAAK2C,EAAMxD,EAAG2D,EAAGC,IAG/B,OAAO,WACL,OAAOlD,EAAGmD,MAAML,EAAMM,wFCVtBC,GAAU,SAAUC,EAAMC,EAAMC,GAClC,IAQInC,EAAKoC,EAAKC,EAAKC,EARfC,EAAYN,EAAOD,GAAQQ,EAC3BC,EAAYR,EAAOD,GAAQU,EAC3BC,EAAYV,EAAOD,GAAQtD,EAC3BkE,EAAWX,EAAOD,GAAQ7C,EAC1B0D,EAAUZ,EAAOD,GAAQc,EACzBC,EAASN,EAAYhG,EAASkG,EAAYlG,EAAOyF,KAAUzF,EAAOyF,QAAezF,EAAOyF,QAAsB,UAC9GvF,EAAU8F,EAAYxF,EAAOA,EAAKiF,KAAUjF,EAAKiF,OACjDc,EAAWrG,EAAiB,YAAMA,EAAiB,cAGvD,IAAKqD,KADDyC,IAAWN,EAASD,GACZC,EAIVE,IAFAD,GAAOG,GAAaQ,QAA0BtC,IAAhBsC,EAAO/C,IAExB+C,EAASZ,GAAQnC,GAE9BsC,EAAMO,GAAWT,EAAMa,GAAIZ,EAAK5F,GAAUmG,GAA0B,mBAAPP,EAAoBY,GAAIlG,SAAS+B,KAAMuD,GAAOA,EAEvGU,GAAQG,GAASH,EAAQ/C,EAAKqC,EAAKJ,EAAOD,GAAQmB,GAElDxG,EAAQqD,IAAQqC,GAAKnB,EAAKvE,EAASqD,EAAKsC,GACxCM,GAAYI,EAAShD,IAAQqC,IAAKW,EAAShD,GAAOqC,IAG1D5F,EAAOQ,KAAOA,EAEd+E,GAAQQ,EAAI,EACZR,GAAQU,EAAI,EACZV,GAAQtD,EAAI,EACZsD,GAAQ7C,EAAI,EACZ6C,GAAQc,EAAI,GACZd,GAAQoB,EAAI,GACZpB,GAAQmB,EAAI,GACZnB,GAAQqB,EAAI,IC1BZ,ID2BA,ICjCIC,GDiCJC,GAAiBvB,qDCvCbwB,GAAQC,EAAI,eACZC,GAAOD,EAAI,QACXE,MAASlH,EAAOmH,cAAenH,EAAOoH,UACtCC,GAASH,GACTI,GAAI,EAIJC,GAAyB,iHAE3BnD,MAAM,KAEDkD,GAPC,IAQFT,GAAQ7G,EAAOuH,GAAuBD,SACxC7C,EAAKoC,GAAMjC,UAAWmC,IAAO,GAC7BtC,EAAKoC,GAAMjC,UAAWqC,IAAM,IACvBI,IAAS,EAGlB,IAAAG,IACEN,IAAKA,GACLG,OAAQA,GACRN,MAAOA,GACPE,KAAMA,iKC1BS,mBAAA,ICCjBQ,GAAiB,SAAUnB,EAAQoB,EAAKpD,GACtC,IAAK,IAAIf,KAAOmE,EAAKjB,GAASH,EAAQ/C,EAAKmE,EAAInE,GAAMe,GACrD,OAAOgC,qDCHTqB,GAAiB,SAAU/G,EAAIgH,EAAanC,EAAMoC,GAChD,KAAMjH,aAAcgH,SAAoC5D,IAAnB6D,GAAgCA,KAAkBjH,EACrF,MAAMG,UAAU0E,EAAO,2BACvB,OAAO7E,qDCFPkH,GAAO1H,KAAK0H,KACZC,GAAQ3H,KAAK2H,MACjBC,GAAiB,SAAUpH,GACzB,OAAOqH,MAAMrH,GAAMA,GAAM,GAAKA,EAAK,EAAImH,GAAQD,IAAMlH,oECFnDsH,GAAM9H,KAAK8H,IACfC,GAAiB,SAAUvH,GACzB,OAAOA,EAAK,EAAIsH,GAAIE,GAAUxH,GAAK,kBAAoB,mECDzDyH,GAAiB,SAAUzH,GACzB,QAAWoD,IAAPpD,EAAkB,OAAO,EAC7B,IAAI0H,EAASF,GAAUxH,GACnBqE,EAASsD,GAASD,GACtB,GAAIA,IAAWrD,EAAQ,MAAMuD,WAAW,iBACxC,OAAOvD,qDCRL7C,MAAcA,SAElBqG,GAAiB,SAAU7H,GACzB,OAAOwB,GAASC,KAAKzB,GAAI8H,MAAM,GAAI,oECArCC,GAAiBtH,OAAO,KAAKuH,qBAAqB,GAAKvH,OAAS,SAAUT,GACxE,MAAkB,UAAXiI,GAAIjI,GAAkBA,EAAGwD,MAAM,IAAM/C,OAAOT,sDCHrDkI,GAAiB,SAAUlI,GACzB,QAAUoD,GAANpD,EAAiB,MAAMG,UAAU,yBAA2BH,GAChE,OAAOA,iFCATmI,GAAiB,SAAUnI,GACzB,OAAOoI,GAAQC,GAAQrI,uDCHrBsI,GAAM9I,KAAK8I,IACXhB,GAAM9H,KAAK8H,IACfiB,GAAiB,SAAUC,EAAOnE,GAEhC,OADAmE,EAAQhB,GAAUgB,IACH,EAAIF,GAAIE,EAAQnE,EAAQ,GAAKiD,GAAIkB,EAAOnE,kFCAzDoE,GAAiB,SAAUC,GACzB,OAAO,SAAUC,EAAOC,EAAIC,GAC1B,IAGI1G,EAHAN,EAAIiH,GAAUH,GACdtE,EAASsD,GAAS9F,EAAEwC,QACpBmE,EAAQO,GAAgBF,EAAWxE,GAIvC,GAAIqE,GAAeE,GAAMA,GAAI,KAAOvE,EAASmE,GAG3C,IAFArG,EAAQN,EAAE2G,OAEGrG,EAAO,OAAO,OAEtB,KAAMkC,EAASmE,EAAOA,IAAS,IAAIE,GAAeF,KAAS3G,IAC5DA,EAAE2G,KAAWI,EAAI,OAAOF,GAAeF,GAAS,EACpD,OAAQE,IAAgB,sDClB1BM,GAAQ5J,EADC,wBACkBA,EADlB,0BAEb6J,GAAiB,SAAUtG,GACzB,OAAOqG,GAAMrG,KAASqG,GAAMrG,wECJ1BuG,GAAS1I,GAAqB,QAElC2I,GAAiB,SAAUxG,GACzB,OAAOuG,GAAOvG,KAASuG,GAAOvG,GAAOyD,EAAIzD,mFCDvCyG,GAAe5I,IAA6B,GAC5C6I,GAAWnI,GAAyB,YAExCoI,GAAiB,SAAU5G,EAAQ6G,GACjC,IAGI5G,EAHAd,EAAIiH,GAAUpG,GACdgE,EAAI,EACJ8C,KAEJ,IAAK7G,KAAOd,EAAOc,GAAO0G,IAAUzF,EAAI/B,EAAGc,IAAQ6G,EAAOC,KAAK9G,GAE/D,KAAO4G,EAAMlF,OAASqC,GAAO9C,EAAI/B,EAAGc,EAAM4G,EAAM7C,SAC7C0C,GAAaI,EAAQ7G,IAAQ6G,EAAOC,KAAK9G,IAE5C,OAAO6G,qDCdTE,GAAiB,gGAEflG,MAAM,mFCDJmG,GAAanJ,GAA4B2C,OAAO,SAAU,aAE9DyG,GAAYnJ,OAAOoJ,qBAAuB,SAA6BhI,GACrE,OAAOiI,GAAMjI,EAAG8H,sECHlBI,GAAiB,SAAU/J,GACzB,OAAOS,OAAO4H,GAAQrI,qECExBgK,GAAiB,SAAc7H,GAO7B,IANA,IAAIN,EAAIoI,GAAShG,MACbI,EAASsD,GAAS9F,EAAEwC,QACpB6F,EAAOxF,UAAUL,OACjBmE,EAAQO,GAAgBmB,EAAO,EAAIxF,UAAU,QAAKtB,EAAWiB,GAC7D8F,EAAMD,EAAO,EAAIxF,UAAU,QAAKtB,EAChCgH,OAAiBhH,IAAR+G,EAAoB9F,EAAS0E,GAAgBoB,EAAK9F,GACxD+F,EAAS5B,GAAO3G,EAAE2G,KAAWrG,EACpC,OAAON,sECbT,IAAImH,EAAQxI,GAAqB,OAE7B6J,EAASnJ,EAAqBmJ,OAC9BC,EAA8B,mBAAVD,GAEThL,EAAAC,QAAiB,SAAUuF,GACxC,OAAOmE,EAAMnE,KAAUmE,EAAMnE,GAC3ByF,GAAcD,EAAOxF,KAAUyF,EAAaD,EAASjE,GAAK,UAAYvB,MAGjEmE,MAAQA,oECVbuB,GAAM/J,EAAwBoB,EAE9B4I,GAAMtJ,GAAkB,eAE5BuJ,GAAiB,SAAUzK,EAAI0K,EAAKC,GAC9B3K,IAAO4D,EAAI5D,EAAK2K,EAAO3K,EAAKA,EAAGgE,UAAWwG,KAAMD,GAAIvK,EAAIwK,IAAOjI,cAAc,EAAMJ,MAAOuI,kLCOhG,IAAIE,EAAOpK,GAA0BoB,EACjCD,EAAKT,EAAwBU,EAK7BiJ,EAAY,YAEZC,EAAc,eACdC,EAAe3L,EAAmB,YAClC4L,EAAY5L,EAAgB,SAC5BI,EAAOJ,EAAOI,KACdoI,EAAaxI,EAAOwI,WAEpBqD,EAAW7L,EAAO6L,SAClBC,EAAaH,EACbI,EAAM3L,EAAK2L,IACXC,EAAM5L,EAAK4L,IACXjE,EAAQ3H,EAAK2H,MACbkE,EAAM7L,EAAK6L,IACXC,EAAM9L,EAAK8L,IAIXC,EAAUC,EAAc,KAHf,SAITC,EAAUD,EAAc,KAHV,aAIdE,EAAUF,EAAc,KAHV,aAMlB,SAASG,EAAYxJ,EAAOyJ,EAAMC,GAChC,IAOIvL,EAAGwL,EAAGtH,EAPNuH,EAAS,IAAIC,MAAMH,GACnBI,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,EAAc,KAATR,EAAcR,EAAI,GAAI,IAAMA,EAAI,GAAI,IAAM,EAC/C1E,EAAI,EACJ2F,EAAIlK,EAAQ,GAAe,IAAVA,GAAe,EAAIA,EAAQ,EAAI,EAAI,EAkCxD,KAhCAA,EAAQgJ,EAAIhJ,KAECA,GAASA,IAAU8I,GAE9Ba,EAAI3J,GAASA,EAAQ,EAAI,EACzB7B,EAAI4L,IAEJ5L,EAAI6G,EAAMkE,EAAIlJ,GAASmJ,GACnBnJ,GAASqC,EAAI4G,EAAI,GAAI9K,IAAM,IAC7BA,IACAkE,GAAK,IAGLrC,GADE7B,EAAI6L,GAAS,EACNC,EAAK5H,EAEL4H,EAAKhB,EAAI,EAAG,EAAIe,IAEf3H,GAAK,IACflE,IACAkE,GAAK,GAEHlE,EAAI6L,GAASD,GACfJ,EAAI,EACJxL,EAAI4L,GACK5L,EAAI6L,GAAS,GACtBL,GAAK3J,EAAQqC,EAAI,GAAK4G,EAAI,EAAGQ,GAC7BtL,GAAQ6L,IAERL,EAAI3J,EAAQiJ,EAAI,EAAGe,EAAQ,GAAKf,EAAI,EAAGQ,GACvCtL,EAAI,IAGDsL,GAAQ,EAAGG,EAAOrF,KAAW,IAAJoF,EAASA,GAAK,IAAKF,GAAQ,GAG3D,IAFAtL,EAAIA,GAAKsL,EAAOE,EAChBG,GAAQL,EACDK,EAAO,EAAGF,EAAOrF,KAAW,IAAJpG,EAASA,GAAK,IAAK2L,GAAQ,GAE1D,OADAF,IAASrF,IAAU,IAAJ2F,EACRN,EAET,SAASO,EAAcP,EAAQH,EAAMC,GACnC,IAOIC,EAPAG,EAAgB,EAATJ,EAAaD,EAAO,EAC3BM,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBK,EAAQN,EAAO,EACfvF,EAAImF,EAAS,EACbQ,EAAIN,EAAOrF,KACXpG,EAAQ,IAAJ+L,EAGR,IADAA,IAAM,EACCE,EAAQ,EAAGjM,EAAQ,IAAJA,EAAUyL,EAAOrF,GAAIA,IAAK6F,GAAS,GAIzD,IAHAT,EAAIxL,GAAK,IAAMiM,GAAS,EACxBjM,KAAOiM,EACPA,GAASX,EACFW,EAAQ,EAAGT,EAAQ,IAAJA,EAAUC,EAAOrF,GAAIA,IAAK6F,GAAS,GACzD,GAAU,IAANjM,EACFA,EAAI,EAAI6L,MACH,CAAA,GAAI7L,IAAM4L,EACf,OAAOJ,EAAIU,IAAMH,GAAKpB,EAAWA,EAEjCa,GAAQV,EAAI,EAAGQ,GACftL,GAAQ6L,EACR,OAAQE,GAAK,EAAI,GAAKP,EAAIV,EAAI,EAAG9K,EAAIsL,GAGzC,SAASa,EAAUC,GACjB,OAAOA,EAAM,IAAM,GAAKA,EAAM,IAAM,GAAKA,EAAM,IAAM,EAAIA,EAAM,GAEjE,SAASC,EAAO3M,GACd,OAAa,IAALA,GAEV,SAAS4M,EAAQ5M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,KAE/B,SAAS6M,EAAQ7M,GACf,OAAa,IAALA,EAAWA,GAAM,EAAI,IAAMA,GAAM,GAAK,IAAMA,GAAM,GAAK,KAEjE,SAAS8M,EAAQ9M,GACf,OAAO2L,EAAY3L,EAAI,GAAI,GAE7B,SAAS+M,EAAQ/M,GACf,OAAO2L,EAAY3L,EAAI,GAAI,GAG7B,SAASgN,EAAUC,EAAGtK,EAAKuK,GACzBvL,EAAGsL,EAAEpC,GAAYlI,GAAOhC,IAAK,WAAc,OAAOsD,KAAKiJ,MAGzD,SAASvM,EAAIwM,EAAMT,EAAOlE,EAAO4E,GAC/B,IACIC,EAAWC,IADC9E,GAEhB,GAAI6E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM7D,EAAWkD,GACvD,IAAI9B,EAAQmE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOzE,EAAMlB,MAAM0F,EAAOA,EAAQd,GACtC,OAAOU,EAAiBK,EAAOA,EAAKC,UAEtC,SAASC,EAAIR,EAAMT,EAAOlE,EAAOoF,EAAYzL,EAAOiL,GAClD,IACIC,EAAWC,IADC9E,GAEhB,GAAI6E,EAAWX,EAAQS,EAAK1B,GAAU,MAAM7D,EAAWkD,GAIvD,IAHA,IAAI9B,EAAQmE,EAAK5B,GAASgC,GACtBC,EAAQH,EAAWF,EAAKzB,GACxB+B,EAAOG,GAAYzL,GACduE,EAAI,EAAGA,EAAIgG,EAAOhG,IAAKsC,EAAMwE,EAAQ9G,GAAK+G,EAAKL,EAAiB1G,EAAIgG,EAAQhG,EAAI,GAG3F,GAAKmH,GAAOvH,IAgFL,CACL,IAAKwH,EAAM,WACT/C,EAAa,OACR+C,EAAM,WACX,IAAI/C,GAAc,MACd+C,EAAM,WAIV,OAHA,IAAI/C,EACJ,IAAIA,EAAa,KACjB,IAAIA,EAAayB,KApOF,eAqORzB,EAAalG,OAClB,CAMF,IADA,IACyClC,EADrCoL,GAJJhD,EAAe,SAAqB1G,GAElC,OADA2J,GAAW/J,KAAM8G,GACV,IAAIG,EAAWoC,GAAQjJ,MAEIwG,GAAaK,EAAWL,GACnDoD,EAAOrD,EAAKM,GAAagD,EAAI,EAAQD,EAAK5J,OAAS6J,IACnDvL,EAAMsL,EAAKC,QAASnD,GAAelH,EAAKkH,EAAcpI,EAAKuI,EAAWvI,IAE1EwL,KAASJ,EAAiBK,YAAcrD,GAG/C,IAAIoC,EAAO,IAAInC,EAAU,IAAID,EAAa,IACtCsD,EAAWrD,EAAUH,GAAWyD,QACpCnB,EAAKmB,QAAQ,EAAG,YAChBnB,EAAKmB,QAAQ,EAAG,aACZnB,EAAKoB,QAAQ,IAAOpB,EAAKoB,QAAQ,IAAIC,GAAYxD,EAAUH,IAC7DyD,QAAS,SAAiBG,EAAYtM,GACpCkM,EAAS5M,KAAKwC,KAAMwK,EAAYtM,GAAS,IAAM,KAEjDuM,SAAU,SAAkBD,EAAYtM,GACtCkM,EAAS5M,KAAKwC,KAAMwK,EAAYtM,GAAS,IAAM,OAEhD,QAhHH4I,EAAe,SAAqB1G,GAClC2J,GAAW/J,KAAM8G,EA9IF,eA+If,IAAI4D,EAAarB,GAAQjJ,GACzBJ,KAAKsJ,GAAKqB,GAAUnN,KAAK,IAAIuK,MAAM2C,GAAa,GAChD1K,KAAKwH,GAAWkD,GAGlB3D,EAAY,SAAkBe,EAAQ0C,EAAYE,GAChDX,GAAW/J,KAAM+G,EApJL,YAqJZgD,GAAWjC,EAAQhB,EArJP,YAsJZ,IAAI8D,EAAe9C,EAAON,GACtBqD,EAAStH,GAAUiH,GACvB,GAAIK,EAAS,GAAKA,EAASD,EAAc,MAAMjH,EAAW,iBAE1D,GAAIkH,GADJH,OAA4BvL,IAAfuL,EAA2BE,EAAeC,EAASnH,GAASgH,IAC/CE,EAAc,MAAMjH,EAxJ/B,iBAyJf3D,KAAKsH,GAAWQ,EAChB9H,KAAKyH,GAAWoD,EAChB7K,KAAKwH,GAAWkD,GAGdnD,IACFwB,EAAUjC,EAhJI,aAgJuB,MACrCiC,EAAUhC,EAlJD,SAkJoB,MAC7BgC,EAAUhC,EAlJI,aAkJoB,MAClCgC,EAAUhC,EAlJI,aAkJoB,OAGpCwD,GAAYxD,EAAUH,IACpB0D,QAAS,SAAiBE,GACxB,OAAO9N,EAAIsD,KAAM,EAAGwK,GAAY,IAAM,IAAM,IAE9CM,SAAU,SAAkBN,GAC1B,OAAO9N,EAAIsD,KAAM,EAAGwK,GAAY,IAElCO,SAAU,SAAkBP,GAC1B,IAAI/B,EAAQ/L,EAAIsD,KAAM,EAAGwK,EAAY/J,UAAU,IAC/C,OAAQgI,EAAM,IAAM,EAAIA,EAAM,KAAO,IAAM,IAE7CuC,UAAW,SAAmBR,GAC5B,IAAI/B,EAAQ/L,EAAIsD,KAAM,EAAGwK,EAAY/J,UAAU,IAC/C,OAAOgI,EAAM,IAAM,EAAIA,EAAM,IAE/BwC,SAAU,SAAkBT,GAC1B,OAAOhC,EAAU9L,EAAIsD,KAAM,EAAGwK,EAAY/J,UAAU,MAEtDyK,UAAW,SAAmBV,GAC5B,OAAOhC,EAAU9L,EAAIsD,KAAM,EAAGwK,EAAY/J,UAAU,OAAS,GAE/D0K,WAAY,SAAoBX,GAC9B,OAAOnC,EAAc3L,EAAIsD,KAAM,EAAGwK,EAAY/J,UAAU,IAAK,GAAI,IAEnE2K,WAAY,SAAoBZ,GAC9B,OAAOnC,EAAc3L,EAAIsD,KAAM,EAAGwK,EAAY/J,UAAU,IAAK,GAAI,IAEnE4J,QAAS,SAAiBG,EAAYtM,GACpCwL,EAAI1J,KAAM,EAAGwK,EAAY9B,EAAQxK,IAEnCuM,SAAU,SAAkBD,EAAYtM,GACtCwL,EAAI1J,KAAM,EAAGwK,EAAY9B,EAAQxK,IAEnCmN,SAAU,SAAkBb,EAAYtM,GACtCwL,EAAI1J,KAAM,EAAGwK,EAAY7B,EAASzK,EAAOuC,UAAU,KAErD6K,UAAW,SAAmBd,EAAYtM,GACxCwL,EAAI1J,KAAM,EAAGwK,EAAY7B,EAASzK,EAAOuC,UAAU,KAErD8K,SAAU,SAAkBf,EAAYtM,GACtCwL,EAAI1J,KAAM,EAAGwK,EAAY5B,EAAS1K,EAAOuC,UAAU,KAErD+K,UAAW,SAAmBhB,EAAYtM,GACxCwL,EAAI1J,KAAM,EAAGwK,EAAY5B,EAAS1K,EAAOuC,UAAU,KAErDgL,WAAY,SAAoBjB,EAAYtM,GAC1CwL,EAAI1J,KAAM,EAAGwK,EAAY1B,EAAS5K,EAAOuC,UAAU,KAErDiL,WAAY,SAAoBlB,EAAYtM,GAC1CwL,EAAI1J,KAAM,EAAGwK,EAAY3B,EAAS3K,EAAOuC,UAAU,OAsCzDkL,GAAe7E,EA/PI,eAgQnB6E,GAAe5E,EA/PC,YAgQhBnH,EAAKmH,EAAUH,GAAYgD,GAAOxH,MAAM,GACxC/G,EAAoB,YAAIyL,EACxBzL,EAAiB,SAAI0L,sDChRjB6E,GAAUrP,GAAkB,WAChCsP,GAAiB,SAAUjO,EAAGkO,GAC5B,IACI1O,EADA4L,EAAIjL,EAASH,GAAGuM,YAEpB,YAAahL,IAAN6J,QAAiD7J,IAA7B/B,EAAIW,EAASiL,GAAG4C,KAAyBE,EAAIzL,GAAUjD,sDCHhFwO,GAAUrP,GAAkB,WAEhCwP,GAAiB,SAAUC,GACzB,IAAIhD,EAAI7N,EAAO6Q,GACXzE,GAAeyB,IAAMA,EAAE4C,KAAUlO,EAAGC,EAAEqL,EAAG4C,IAC3CtN,cAAc,EACd5B,IAAK,WAAc,OAAOsD,mHCF1BsC,GAAc/F,EAAqB+F,YAEnCwE,GAAegB,GAAOxF,YACtByE,GAAYe,GAAOvF,SACnB0J,GAAUrC,GAAOvH,KAAOC,GAAY4J,OACpCC,GAASrF,GAAa/G,UAAU8D,MAChCzB,GAAOwH,GAAOxH,KAGlB1B,GAAQA,GAAQU,EAAIV,GAAQoB,EAAIpB,GAAQQ,GAAKoB,KAAgBwE,KAAiBxE,YAAawE,KAE3FpG,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAK0I,GAAOpH,OAJrB,eAMjB0J,OAAQ,SAAgBnQ,GACtB,OAAOkQ,IAAWA,GAAQlQ,IAAOE,EAASF,IAAOqG,MAAQrG,KAI7D2E,GAAQA,GAAQ7C,EAAI6C,GAAQmB,EAAInB,GAAQQ,EAAIjE,EAAoB,WAC9D,OAAQ,IAAI6J,GAAa,GAAGjD,MAAM,OAAG1E,GAAWuL,aAZ/B,eAejB7G,MAAO,SAAe0F,EAAOrD,GAC3B,QAAe/G,IAAXgN,SAAgChN,IAAR+G,EAAmB,OAAOiG,GAAO3O,KAAKO,EAASiC,MAAOuJ,GAQlF,IAPA,IAAI6C,EAAMrO,EAASiC,MAAM0K,WACrB2B,EAAQvH,GAAgByE,EAAO6C,GAC/BE,EAAQxH,QAAwB3F,IAAR+G,EAAoBkG,EAAMlG,EAAKkG,GACvD7G,EAAS,IAAKgH,GAAmBvM,KAAM8G,IAA9B,CAA6CpD,GAAS4I,EAAQD,IACvEG,EAAQ,IAAIzF,GAAU/G,MACtByM,EAAQ,IAAI1F,GAAUxB,GACtBhB,EAAQ,EACL8H,EAAQC,GACbG,EAAMhC,SAASlG,IAASiI,EAAM1B,SAASuB,MACvC,OAAO9G,KAIbrI,GA9BmB,eCbnB,IAAIqJ,GAAMhK,GAAkB,eAExBmQ,GAAkD,aAA5C1I,GAAI,WAAc,OAAOvD,UAArB,IASdkM,GAAiB,SAAU5Q,GACzB,IAAI6B,EAAGgP,EAAGpL,EACV,YAAcrC,IAAPpD,EAAmB,YAAqB,OAAPA,EAAc,OAEN,iBAApC6Q,EAVD,SAAU7Q,EAAI2C,GACzB,IACE,OAAO3C,EAAG2C,GACV,MAAOrC,KAOOwQ,CAAOjP,EAAIpB,OAAOT,GAAKwK,KAAoBqG,EAEvDF,GAAM1I,GAAIpG,GAEM,WAAf4D,EAAIwC,GAAIpG,KAAsC,mBAAZA,EAAEkP,OAAuB,YAActL,qDCrBhFuL,sECEIC,GAAWzQ,GAAkB,YAC7B0Q,GAAalF,MAAMhI,UAEvBmN,GAAiB,SAAUnR,GACzB,YAAcoD,IAAPpD,IAAqBoR,GAAUpF,QAAUhM,GAAMkR,GAAWD,MAAcjR,sDCFjFqR,GAAiB5Q,OAAOwN,MAAQ,SAAcpM,GAC5C,OAAOiI,GAAMjI,EAAGyP,qECDlBC,GAAiB/Q,EAA4BC,OAAO+Q,iBAAmB,SAA0B3P,EAAG4P,GAClGzP,EAASH,GAKT,IAJA,IAGIC,EAHAmM,EAAOyD,GAAQD,GACfpN,EAAS4J,EAAK5J,OACdqC,EAAI,EAEDrC,EAASqC,GAAG/E,EAAGC,EAAEC,EAAGC,EAAImM,EAAKvH,KAAM+K,EAAW3P,IACrD,OAAOD,qDCXLhB,GAAWL,EAAqBK,SACpC8Q,GAAiB9Q,IAAYA,GAAS+Q,8FCGlCvI,GAAW7I,GAAyB,YACpCqR,GAAQ,aAIRC,GAAa,WAEf,IAIIC,EAJAC,EAAS9Q,EAAyB,UAClCwF,EAAI4K,GAAYjN,OAcpB,IAVA2N,EAAOC,MAAMC,QAAU,OACvB/Q,GAAmBgR,YAAYH,GAC/BA,EAAOlL,IAAM,eAGbiL,EAAiBC,EAAOI,cAAcvR,UACvBwR,OACfN,EAAeO,MAAMC,uCACrBR,EAAeS,QACfV,GAAaC,EAAe5M,EACrBuB,YAAYoL,GAAoB,UAAER,GAAY5K,IACrD,OAAOoL,MAGTW,GAAiBhS,OAAOiS,QAAU,SAAgB7Q,EAAG4P,GACnD,IAAIjI,EAQJ,OAPU,OAAN3H,GACFgQ,GAAe,UAAI7P,EAASH,GAC5B2H,EAAS,IAAIqI,GACbA,GAAe,UAAI,KAEnBrI,EAAOH,IAAYxH,GACd2H,EAASsI,UACM1O,IAAfqO,EAA2BjI,EAASmJ,GAAInJ,EAAQiI,sDCpCrDpI,GAAW7I,GAAyB,YACpCoS,GAAcnS,OAAOuD,UAEzB6O,GAAiBpS,OAAOqS,gBAAkB,SAAUjR,GAElD,OADAA,EAAIoI,GAASpI,GACT+B,EAAI/B,EAAGwH,IAAkBxH,EAAEwH,IACH,mBAAjBxH,EAAEuM,aAA6BvM,aAAaA,EAAEuM,YAChDvM,EAAEuM,YAAYpK,UACdnC,aAAapB,OAASmS,GAAc,sECV3C3B,GAAWzQ,GAAkB,YAEjCuS,GAAiB7R,EAAmB8R,kBAAoB,SAAUhT,GAChE,QAAUoD,GAANpD,EAAiB,OAAOA,EAAGiR,KAC1BjR,EAAG,eACHoR,GAAU6B,GAAQjT,uDCJzBkT,GAAiBlH,MAAMmH,SAAW,SAAiBC,GACjD,MAAmB,SAAZnL,GAAImL,oECDTvD,GAAUrP,GAAkB,WAEhC6S,GAAiB,SAAUC,GACzB,IAAIrG,EASF,OAREkG,GAAQG,KAGM,mBAFhBrG,EAAIqG,EAASlF,cAEkBnB,IAAMjB,QAASmH,GAAQlG,EAAEjJ,aAAaiJ,OAAI7J,GACrElD,EAAS+M,IAED,QADVA,EAAIA,EAAE4C,OACU5C,OAAI7J,SAETA,IAAN6J,EAAkBjB,MAAQiB,mECXrCsG,GAAiB,SAAUD,EAAUjP,GACnC,OAAO,IAAKmM,GAAmB8C,GAAxB,CAAmCjP,oECQ5CmP,GAAiB,SAAUC,EAAMC,GAC/B,IAAIC,EAAiB,GAARF,EACTG,EAAoB,GAARH,EACZI,EAAkB,GAARJ,EACVK,EAAmB,GAARL,EACXM,EAAwB,GAARN,EAChBO,EAAmB,GAARP,GAAaM,EACxBrB,EAASgB,GAAWO,GACxB,OAAO,SAAUtL,EAAOuL,EAAY9P,GAQlC,IAPA,IAMI7C,EAAK4S,EANLtS,EAAIoI,GAAStB,GACblJ,EAAO2I,GAAQvG,GACfD,EAAIgE,GAAIsO,EAAY9P,EAAM,GAC1BC,EAASsD,GAASlI,EAAK4E,QACvBmE,EAAQ,EACRgB,EAASmK,EAASjB,EAAO/J,EAAOtE,GAAUuP,EAAYlB,EAAO/J,EAAO,QAAKvF,EAEvEiB,EAASmE,EAAOA,IAAS,IAAIwL,GAAYxL,KAAS/I,KAEtD0U,EAAMvS,EADNL,EAAM9B,EAAK+I,GACEA,EAAO3G,GAChB4R,GACF,GAAIE,EAAQnK,EAAOhB,GAAS2L,OACvB,GAAIA,EAAK,OAAQV,GACpB,KAAK,EAAG,OAAO,EACf,KAAK,EAAG,OAAOlS,EACf,KAAK,EAAG,OAAOiH,EACf,KAAK,EAAGgB,EAAOC,KAAKlI,QACf,GAAIuS,EAAU,OAAO,EAGhC,OAAOC,GAAiB,EAAIF,GAAWC,EAAWA,EAAWtK,sDCxC7D4K,GAAc5T,GAAkB,eAChC0Q,GAAalF,MAAMhI,eACQZ,GAA3B8N,GAAWkD,KAA2BlT,EAAmBgQ,GAAYkD,OACzE,IAAAC,GAAiB,SAAU1R,GACzBuO,GAAWkD,IAAazR,IAAO,qDCLjC2R,GAAiB,SAAUC,EAAMpS,GAC/B,OAASA,MAAOA,EAAOoS,OAAQA,oECG7BC,MAGJhU,EAAmBgU,GAAmBtT,GAAkB,YAAa,WAAc,OAAO+C,OAE1F,IAAAwQ,GAAiB,SAAUzN,EAAa0N,EAAMC,GAC5C3N,EAAYhD,UAAY0O,GAAO8B,IAAqBG,KAAMC,EAAW,EAAGD,KACxE/E,GAAe5I,EAAa0N,EAAO,4FCDjCzD,GAAWzQ,GAAkB,YAC7BqU,QAAa5G,MAAQ,WAAaA,QAKlC6G,GAAa,WAAc,OAAO7Q,MAEtC8Q,GAAiB,SAAUC,EAAMN,EAAM1N,EAAa2N,EAAMM,EAASC,EAAQC,GACzEC,GAAYpO,EAAa0N,EAAMC,GAC/B,IAeIU,EAAS1S,EAAK6R,EAfdc,EAAY,SAAUC,GACxB,IAAKV,IAASU,KAAQC,EAAO,OAAOA,EAAMD,GAC1C,OAAQA,GACN,IAVK,OAWL,IAVO,SAUM,OAAO,WAAoB,OAAO,IAAIvO,EAAY/C,KAAMsR,IACrE,OAAO,WAAqB,OAAO,IAAIvO,EAAY/C,KAAMsR,KAEzD/K,EAAMkK,EAAO,YACbe,EAdO,UAcMR,EACbS,GAAa,EACbF,EAAQR,EAAKhR,UACb2R,EAAUH,EAAMvE,KAAauE,EAnBjB,eAmBuCP,GAAWO,EAAMP,GACpEW,GAAaf,IAASc,GAAYL,EAAUL,GAC5CY,EAAWZ,EAAWQ,EAAwBH,EAAU,WAArBM,OAAkCxS,EACrE0S,EAAqB,SAARpB,GAAkBc,EAAMO,SAAqBJ,EAwB9D,GArBIG,IACFtB,EAAoB1B,GAAegD,EAAWrU,KAAK,IAAIuT,OAC7BvU,OAAOuD,WAAawQ,EAAkBG,OAE9D/E,GAAe4E,EAAmBhK,GAAK,GAElC2D,IAAYvK,EAAI4Q,EAAmBvD,KAAWpN,EAAK2Q,EAAmBvD,GAAU6D,KAIrFW,GAAcE,GAjCP,WAiCkBA,EAAQ9Q,OACnC6Q,GAAa,EACbE,EAAW,WAAoB,OAAOD,EAAQlU,KAAKwC,QAG/CkK,KAAWgH,IAAYN,KAASa,GAAeF,EAAMvE,KACzDpN,EAAK2R,EAAOvE,GAAU2E,GAGxBxE,GAAUsD,GAAQkB,EAClBxE,GAAU5G,GAAOsK,GACbG,EAMF,GALAI,GACEW,OAAQP,EAAaG,EAAWN,EA9CzB,UA+CPrH,KAAMiH,EAASU,EAAWN,EAhDrB,QAiDLS,QAASF,GAEPV,EAAQ,IAAKxS,KAAO0S,EAChB1S,KAAO6S,GAAQ3P,GAAS2P,EAAO7S,EAAK0S,EAAQ1S,SAC7CgC,GAAQA,GAAQ7C,EAAI6C,GAAQQ,GAAK0P,IAASa,GAAahB,EAAMW,GAEtE,OAAOA,+FC1DTY,GAAiBzV,GAA0BwL,MAAO,QAAS,SAAUkK,EAAUX,GAC7EtR,KAAKkS,GAAKrN,GAAUoN,GACpBjS,KAAKmS,GAAK,EACVnS,KAAKoS,GAAKd,GAET,WACD,IAAI1T,EAAIoC,KAAKkS,GACTZ,EAAOtR,KAAKoS,GACZ7N,EAAQvE,KAAKmS,KACjB,OAAKvU,GAAK2G,GAAS3G,EAAEwC,QACnBJ,KAAKkS,QAAK/S,EACHkT,GAAK,IAEaA,GAAK,EAApB,QAARf,EAA+B/M,EACvB,UAAR+M,EAAiC1T,EAAE2G,IACvBA,EAAO3G,EAAE2G,MACxB,UAGH4I,GAAUmF,UAAYnF,GAAUpF,MAEhCwK,GAAiB,QACjBA,GAAiB,UACjBA,GAAiB,iECjCbvF,GAAWzQ,GAAkB,YAC7BiW,IAAe,EAEnB,KACe,GAAGxF,MACF,OAAI,WAAcwF,IAAe,GAG/C,MAAOnW,IAET,IAAAoW,GAAiB,SAAUrW,EAAMsW,GAC/B,IAAKA,IAAgBF,GAAc,OAAO,EAC1C,IAAI/S,GAAO,EACX,IACE,IAAIkT,GAAO,GACPC,EAAOD,EAAI3F,MACf4F,EAAKlC,KAAO,WAAc,OAASJ,KAAM7Q,GAAO,IAChDkT,EAAI3F,IAAY,WAAc,OAAO4F,GACrCxW,EAAKuW,GACL,MAAOtW,IACT,OAAOoD,qDCdToT,MAAoBC,YAAc,SAAoBrR,EAAkB8H,GACtE,IAAI3L,EAAIoI,GAAShG,MACboM,EAAM1I,GAAS9F,EAAEwC,QACjB2S,EAAKjO,GAAgBrD,EAAQ2K,GAC7B4G,EAAOlO,GAAgByE,EAAO6C,GAC9BlG,EAAMzF,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAC5C8T,EAAQ1X,KAAK8H,UAAalE,IAAR+G,EAAoBkG,EAAMtH,GAAgBoB,EAAKkG,IAAQ4G,EAAM5G,EAAM2G,GACrFG,EAAM,EAMV,IALIF,EAAOD,GAAMA,EAAKC,EAAOC,IAC3BC,GAAO,EACPF,GAAQC,EAAQ,EAChBF,GAAME,EAAQ,GAETA,KAAU,GACXD,KAAQpV,EAAGA,EAAEmV,GAAMnV,EAAEoV,UACbpV,EAAEmV,GACdA,GAAMG,EACNF,GAAQE,EACR,OAAOtV,qDCxBXuV,MAAepP,oGCMXqP,GAAO5W,OAAO6W,yBAElBC,GAAY/W,EAA4B6W,GAAO,SAAkCxV,EAAGC,GAGlF,GAFAD,EAAIiH,GAAUjH,GACdC,EAAIG,EAAYH,GAAG,GACfI,EAAgB,IAClB,OAAOmV,GAAKxV,EAAGC,GACf,MAAOxB,IACT,GAAIsD,EAAI/B,EAAGC,GAAI,OAAOc,GAAY4U,GAAI5V,EAAEH,KAAKI,EAAGC,GAAID,EAAEC,yLCbxD,GAAItB,EAA2B,CAC7B,IAAI2N,EAAUjN,GACV9B,EAAS+B,EACT2M,EAAQ2J,EACR9S,EAAU+S,GACV7J,EAAS8J,GACTC,EAAUC,GACVjS,EAAMkS,GACN9J,EAAa+J,GACbC,EAAeC,EACfpU,EAAOqU,EACP1J,EAAc2J,GACd3Q,EAAY4Q,GACZzQ,EAAW0Q,GACX/K,EAAUgL,GACVvP,EAAkBwP,GAClBtW,EAAcuW,EACd5U,EAAM6U,EACNxF,EAAUyF,GACVxY,EAAWyY,EACX1O,EAAW2O,GACXC,EAAcC,GACdpG,EAASqG,GACTjG,EAAiBkG,GACjBpO,EAAOqO,GAA0BrX,EACjCsX,EAAYC,GACZ/S,EAAMgT,EACNC,EAAMC,GACNC,EAAoBC,GACpBC,EAAsBC,GACtBlJ,EAAqBmJ,GACrBC,EAAiBC,GACjBzI,EAAY0I,GACZC,EAAcC,GACdC,EAAaC,GACbtL,EAAYuL,GACZC,EAAkBC,GAClBC,EAAMC,EACNC,EAAQC,GACR9Y,EAAK2Y,EAAI1Y,EACTyV,EAAOmD,EAAM5Y,EACbgG,EAAaxI,EAAOwI,WACpBzH,EAAYf,EAAOe,UACnBua,EAAatb,EAAOsb,WAKpBxJ,GAAalF,MAAe,UAC5BjB,GAAe6M,EAAQrR,YACvByE,GAAY4M,EAAQpR,SACpBmU,GAAepB,EAAkB,GACjCqB,GAAcrB,EAAkB,GAChCsB,GAAYtB,EAAkB,GAC9BuB,GAAavB,EAAkB,GAC/BwB,GAAYxB,EAAkB,GAC9ByB,GAAiBzB,EAAkB,GACnC0B,GAAgBxB,GAAoB,GACpCrQ,GAAeqQ,GAAoB,GACnCyB,GAActB,EAAe5D,OAC7BmF,GAAYvB,EAAe3L,KAC3BmN,GAAexB,EAAe7D,QAC9BsF,GAAmBnK,GAAWoK,YAC9BC,GAAcrK,GAAWsK,OACzBC,GAAmBvK,GAAWwK,YAC9BC,GAAYzK,GAAWpN,KACvB8X,GAAY1K,GAAW2K,KACvBC,GAAa5K,GAAWpJ,MACxBiU,GAAgB7K,GAAW1P,SAC3Bwa,GAAsB9K,GAAW+K,eACjChL,GAAWoI,EAAI,YACf7O,GAAM6O,EAAI,eACV6C,GAAoB9V,EAAI,qBACxB+V,GAAkB/V,EAAI,mBACtBgW,GAAmBvO,EAAOpH,OAC1B4V,GAAcxO,EAAO1H,MACrBE,GAAOwH,EAAOxH,KAGdiW,GAAO/C,EAAkB,EAAG,SAAU1X,EAAGwC,GAC3C,OAAOkY,GAAS/L,EAAmB3O,EAAGA,EAAEsa,KAAmB9X,KAGzDmY,GAAgB1O,EAAM,WAExB,OAA0D,IAAnD,IAAI4M,EAAW,IAAI+B,aAAa,IAAI1Q,QAAQ,KAGjD2Q,KAAehC,KAAgBA,EAAoB,UAAE/M,KAAOG,EAAM,WACpE,IAAI4M,EAAW,GAAG/M,UAGhBgP,GAAW,SAAU3c,EAAI4c,GAC3B,IAAI9N,EAAStH,EAAUxH,GACvB,GAAI8O,EAAS,GAAKA,EAAS8N,EAAO,MAAMhV,EAAW,iBACnD,OAAOkH,GAGL+N,GAAW,SAAU7c,GACvB,GAAIE,EAASF,IAAOqc,MAAerc,EAAI,OAAOA,EAC9C,MAAMG,EAAUH,EAAK,2BAGnBuc,GAAW,SAAUtP,EAAG5I,GAC1B,KAAMnE,EAAS+M,IAAMiP,MAAqBjP,GACxC,MAAM9M,EAAU,wCAChB,OAAO,IAAI8M,EAAE5I,IAGbyY,GAAkB,SAAUjb,EAAGkb,GACjC,OAAOC,GAASxM,EAAmB3O,EAAGA,EAAEsa,KAAmBY,IAGzDC,GAAW,SAAU/P,EAAG8P,GAI1B,IAHA,IAAIvU,EAAQ,EACRnE,EAAS0Y,EAAK1Y,OACdmF,EAAS+S,GAAStP,EAAG5I,GAClBA,EAASmE,GAAOgB,EAAOhB,GAASuU,EAAKvU,KAC5C,OAAOgB,GAGLwD,GAAY,SAAUhN,EAAI2C,EAAKuK,GACjCvL,EAAG3B,EAAI2C,GAAOhC,IAAK,WAAc,OAAOsD,KAAKgZ,GAAG/P,OAG9CgQ,GAAQ,SAAcpY,GACxB,IAKI4B,EAAGrC,EAAQ2R,EAAQxM,EAAQ8M,EAAM6G,EALjCtb,EAAIoI,EAASnF,GACboF,EAAOxF,UAAUL,OACjB+Y,EAAQlT,EAAO,EAAIxF,UAAU,QAAKtB,EAClCia,OAAoBja,IAAVga,EACVE,EAASpE,EAAUrX,GAEvB,QAAcuB,GAAVka,IAAwBzE,EAAYyE,GAAS,CAC/C,IAAKH,EAAWG,EAAO7b,KAAKI,GAAImU,KAAatP,EAAI,IAAK4P,EAAO6G,EAASxI,QAAQJ,KAAM7N,IAClFsP,EAAOvM,KAAK6M,EAAKnU,OACjBN,EAAImU,EAGR,IADIqH,GAAWnT,EAAO,IAAGkT,EAAQxX,EAAIwX,EAAO1Y,UAAU,GAAI,IACrDgC,EAAI,EAAGrC,EAASsD,GAAS9F,EAAEwC,QAASmF,EAAS+S,GAAStY,KAAMI,GAASA,EAASqC,EAAGA,IACpF8C,EAAO9C,GAAK2W,EAAUD,EAAMvb,EAAE6E,GAAIA,GAAK7E,EAAE6E,GAE3C,OAAO8C,GAGL+T,GAAM,WAIR,IAHA,IAAI/U,EAAQ,EACRnE,EAASK,UAAUL,OACnBmF,EAAS+S,GAAStY,KAAMI,GACrBA,EAASmE,GAAOgB,EAAOhB,GAAS9D,UAAU8D,KACjD,OAAOgB,GAILgU,KAAkB9C,GAAc5M,EAAM,WAAckO,GAAoBva,KAAK,IAAIiZ,EAAW,MAE5F+C,GAAkB,WACpB,OAAOzB,GAAoBvX,MAAM+Y,GAAgB1B,GAAWra,KAAKob,GAAS5Y,OAAS4Y,GAAS5Y,MAAOS,YAGjG8Q,IACFuB,WAAY,SAAoBrR,EAAQ8H,GACtC,OAAO4M,EAAgB3Y,KAAKob,GAAS5Y,MAAOyB,EAAQ8H,EAAO9I,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEnGsa,MAAO,SAAexJ,GACpB,OAAO4G,GAAW+B,GAAS5Y,MAAOiQ,EAAYxP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEtFua,KAAM,SAAcxb,GAClB,OAAOyM,EAAUnK,MAAMoY,GAAS5Y,MAAOS,YAEzCkZ,OAAQ,SAAgB1J,GACtB,OAAO4I,GAAgB7Y,KAAM2W,GAAYiC,GAAS5Y,MAAOiQ,EACvDxP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAE1Cya,KAAM,SAAcC,GAClB,OAAO/C,GAAU8B,GAAS5Y,MAAO6Z,EAAWpZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEpF2a,UAAW,SAAmBD,GAC5B,OAAO9C,GAAe6B,GAAS5Y,MAAO6Z,EAAWpZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEzF4a,QAAS,SAAiB9J,GACxByG,GAAakC,GAAS5Y,MAAOiQ,EAAYxP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAEjF6a,QAAS,SAAiBC,GACxB,OAAO9U,GAAayT,GAAS5Y,MAAOia,EAAexZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3F+a,SAAU,SAAkBD,GAC1B,OAAOjD,GAAc4B,GAAS5Y,MAAOia,EAAexZ,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE5FU,KAAM,SAAcsa,GAClB,OAAOzC,GAAUlX,MAAMoY,GAAS5Y,MAAOS,YAEzC4W,YAAa,SAAqB4C,GAChC,OAAO7C,GAAiB5W,MAAMoY,GAAS5Y,MAAOS,YAEhD2Z,IAAK,SAAajB,GAChB,OAAOd,GAAKO,GAAS5Y,MAAOmZ,EAAO1Y,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAE3EoY,OAAQ,SAAgBtH,GACtB,OAAOqH,GAAY9W,MAAMoY,GAAS5Y,MAAOS,YAE3CgX,YAAa,SAAqBxH,GAChC,OAAOuH,GAAiBhX,MAAMoY,GAAS5Y,MAAOS,YAEhDgJ,QAAS,WAMP,IALA,IAIIvL,EAHAkC,EAASwY,GADF5Y,MACiBI,OACxBia,EAAS9e,KAAK2H,MAAM9C,EAAS,GAC7BmE,EAAQ,EAELA,EAAQ8V,GACbnc,EANS8B,KAMIuE,GANJvE,KAOJuE,KAPIvE,OAOcI,GAPdJ,KAQJI,GAAUlC,EACf,OATS8B,MAWbsa,KAAM,SAAcrK,GAClB,OAAO2G,GAAUgC,GAAS5Y,MAAOiQ,EAAYxP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,IAErFyY,KAAM,SAAc2C,GAClB,OAAO5C,GAAUna,KAAKob,GAAS5Y,MAAOua,IAExCC,SAAU,SAAkBC,EAAOvU,GACjC,IAAItI,EAAIgb,GAAS5Y,MACbI,EAASxC,EAAEwC,OACXsa,EAAS5V,EAAgB2V,EAAOra,GACpC,OAAO,IAAKmM,EAAmB3O,EAAGA,EAAEsa,KAA7B,CACLta,EAAEkK,OACFlK,EAAE4M,WAAakQ,EAAS9c,EAAE+c,kBAC1BjX,QAAkBvE,IAAR+G,EAAoB9F,EAAS0E,EAAgBoB,EAAK9F,IAAWsa,MAKzEvO,GAAS,SAAe5C,EAAOrD,GACjC,OAAO2S,GAAgB7Y,KAAM6X,GAAWra,KAAKob,GAAS5Y,MAAOuJ,EAAOrD,KAGlE0U,GAAO,SAAaC,GACtBjC,GAAS5Y,MACT,IAAI6K,EAAS6N,GAASjY,UAAU,GAAI,GAChCL,EAASJ,KAAKI,OACdyC,EAAMmD,EAAS6U,GACfzO,EAAM1I,EAASb,EAAIzC,QACnBmE,EAAQ,EACZ,GAAI6H,EAAMvB,EAASzK,EAAQ,MAAMuD,EAvKhB,iBAwKjB,KAAOY,EAAQ6H,GAAKpM,KAAK6K,EAAStG,GAAS1B,EAAI0B,MAG7CuW,IACFhJ,QAAS,WACP,OAAOqF,GAAa3Z,KAAKob,GAAS5Y,QAEpCgK,KAAM,WACJ,OAAOkN,GAAU1Z,KAAKob,GAAS5Y,QAEjC+R,OAAQ,WACN,OAAOkF,GAAYzZ,KAAKob,GAAS5Y,SAIjC+a,GAAY,SAAUtZ,EAAQ/C,GAChC,OAAOzC,EAASwF,IACXA,EAAO2W,KACO,iBAAP1Z,GACPA,KAAO+C,GACP3B,QAAQpB,IAAQoB,OAAOpB,IAE1Bsc,GAAW,SAAkCvZ,EAAQ/C,GACvD,OAAOqc,GAAUtZ,EAAQ/C,EAAMV,EAAYU,GAAK,IAC5CqV,EAAa,EAAGtS,EAAO/C,IACvB0U,EAAK3R,EAAQ/C,IAEfuc,GAAW,SAAwBxZ,EAAQ/C,EAAKwc,GAClD,QAAIH,GAAUtZ,EAAQ/C,EAAMV,EAAYU,GAAK,KACxCzC,EAASif,IACTvb,EAAIub,EAAM,WACTvb,EAAIub,EAAM,QACVvb,EAAIub,EAAM,QAEVA,EAAK5c,cACJqB,EAAIub,EAAM,cAAeA,EAAK3c,UAC9BoB,EAAIub,EAAM,gBAAiBA,EAAK7c,WAI9BX,EAAG+D,EAAQ/C,EAAKwc,IAFvBzZ,EAAO/C,GAAOwc,EAAKhd,MACZuD,IAIN0W,KACH5B,EAAM5Y,EAAIqd,GACV3E,EAAI1Y,EAAIsd,IAGVva,EAAQA,EAAQtD,EAAIsD,EAAQQ,GAAKiX,GAAkB,UACjD9E,yBAA0B2H,GAC1Bve,eAAgBwe,KAGdpR,EAAM,WAAciO,GAActa,aACpCsa,GAAgBC,GAAsB,WACpC,OAAOL,GAAUla,KAAKwC,QAI1B,IAAImb,GAAwB5Q,KAAgBgH,IAC5ChH,EAAY4Q,GAAuBL,IACnClb,EAAKub,GAAuBnO,GAAU8N,GAAW/I,QACjDxH,EAAY4Q,IACVtX,MAAOsI,GACPzC,IAAKkR,GACLzQ,YAAa,aACb5M,SAAUua,GACVE,eAAgBwB,KAElBzQ,GAAUoS,GAAuB,SAAU,KAC3CpS,GAAUoS,GAAuB,aAAc,KAC/CpS,GAAUoS,GAAuB,aAAc,KAC/CpS,GAAUoS,GAAuB,SAAU,KAC3Czd,EAAGyd,GAAuB5U,IACxB7J,IAAK,WAAc,OAAOsD,KAAKoY,OAIjChd,EAAAC,QAAiB,SAAU2Q,EAAK2M,EAAOyC,EAASC,GAE9C,IAAI5K,EAAOzE,IADXqP,IAAYA,GACgB,UAAY,IAAM,QAC1CC,EAAS,MAAQtP,EACjBuP,EAAS,MAAQvP,EACjBwP,EAAargB,EAAOsV,GACpBM,EAAOyK,MACPC,EAAMD,GAAc3M,EAAe2M,GACnCtK,GAAUsK,IAAe5R,EAAOvH,IAChCzE,KACA8d,EAAsBF,GAAcA,EAAoB,UAUxDG,EAAa,SAAUxb,EAAMoE,GAC/B7G,EAAGyC,EAAMoE,GACP7H,IAAK,WACH,OAZO,SAAUyD,EAAMoE,GAC3B,IAAIqX,EAAOzb,EAAK6Y,GAChB,OAAO4C,EAAKC,EAAEP,GAAQ/W,EAAQoU,EAAQiD,EAAKE,EAAGvD,IAUnCwD,CAAO/b,KAAMuE,IAEtBmF,IAAK,SAAUxL,GACb,OAXO,SAAUiC,EAAMoE,EAAOrG,GAClC,IAAI0d,EAAOzb,EAAK6Y,GACZqC,IAASnd,GAASA,EAAQ3C,KAAKygB,MAAM9d,IAAU,EAAI,EAAIA,EAAQ,IAAO,IAAe,IAARA,GACjF0d,EAAKC,EAAEN,GAAQhX,EAAQoU,EAAQiD,EAAKE,EAAG5d,EAAOqa,IAQnC0D,CAAOjc,KAAMuE,EAAOrG,IAE7BG,YAAY,KAGZ6S,GACFsK,EAAaJ,EAAQ,SAAUjb,EAAMyb,EAAMM,EAASC,GAClDpS,EAAW5J,EAAMqb,EAAY/K,EAAM,MACnC,IAEI3I,EAAQ4C,EAAYtK,EAAQgc,EAF5B7X,EAAQ,EACRsG,EAAS,EAEb,GAAK5O,EAAS2f,GAIP,CAAA,KAAIA,aAAgB9U,IAhUd,gBAgU+BsV,EAAQpN,EAAQ4M,KA/T9C,qBA+TwEQ,GAa/E,OAAIhE,MAAewD,EACjB7C,GAASyC,EAAYI,GAErB3C,GAAMzb,KAAKge,EAAYI,GAf9B9T,EAAS8T,EACT/Q,EAAS6N,GAASwD,EAASvD,GAC3B,IAAI0D,EAAOT,EAAKlR,WAChB,QAAgBvL,IAAZgd,EAAuB,CACzB,GAAIE,EAAO1D,EAAO,MAAMhV,EApSf,iBAsST,IADA+G,EAAa2R,EAAOxR,GACH,EAAG,MAAMlH,EAtSjB,sBAyST,IADA+G,EAAahH,EAASyY,GAAWxD,GAChB9N,EAASwR,EAAM,MAAM1Y,EAzS7B,iBA2SXvD,EAASsK,EAAaiO,OAftBvY,EAASiJ,EAAQuS,GAEjB9T,EAAS,IAAIhB,GADb4D,EAAatK,EAASuY,GA2BxB,IAPA/Y,EAAKO,EAAM,MACTG,EAAGwH,EACHgU,EAAGjR,EACHyR,EAAG5R,EACHrO,EAAG+D,EACHyb,EAAG,IAAI9U,GAAUe,KAEZvD,EAAQnE,GAAQub,EAAWxb,EAAMoE,OAE1CmX,EAAsBF,EAAoB,UAAI/M,EAAO0M,IACrDvb,EAAK8b,EAAqB,cAAeF,IAC/B3R,EAAM,WAChB2R,EAAW,MACN3R,EAAM,WACX,IAAI2R,GAAY,MACX1F,EAAY,SAAUlD,GAC3B,IAAI4I,EACJ,IAAIA,EAAW,MACf,IAAIA,EAAW,KACf,IAAIA,EAAW5I,KACd,KACD4I,EAAaJ,EAAQ,SAAUjb,EAAMyb,EAAMM,EAASC,GAElD,IAAIC,EAGJ,OAJArS,EAAW5J,EAAMqb,EAAY/K,GAIxBxU,EAAS2f,GACVA,aAAgB9U,IA7WP,gBA6WwBsV,EAAQpN,EAAQ4M,KA5WvC,qBA4WiEQ,OAC1Djd,IAAZgd,EACH,IAAIpL,EAAK6K,EAAMlD,GAASwD,EAASvD,GAAQwD,QAC7Bhd,IAAZ+c,EACE,IAAInL,EAAK6K,EAAMlD,GAASwD,EAASvD,IACjC,IAAI5H,EAAK6K,GAEbxD,MAAewD,EAAa7C,GAASyC,EAAYI,GAC9C3C,GAAMzb,KAAKge,EAAYI,GATF,IAAI7K,EAAK1H,EAAQuS,MAW/ClF,GAAa+E,IAAQhgB,SAASsE,UAAY4G,EAAKoK,GAAM7R,OAAOyH,EAAK8U,IAAQ9U,EAAKoK,GAAO,SAAUrS,GACvFA,KAAO8c,GAAa5b,EAAK4b,EAAY9c,EAAKqS,EAAKrS,MAEvD8c,EAAoB,UAAIE,EACnBxR,IAASwR,EAAoBvR,YAAcqR,IAElD,IAAIe,EAAkBb,EAAoB1O,IACtCwP,IAAsBD,IACI,UAAxBA,EAAgB3b,WAA4CzB,GAAxBod,EAAgB3b,MACtD6b,EAAY3B,GAAW/I,OAC3BnS,EAAK4b,EAAYvD,IAAmB,GACpCrY,EAAK8b,EAAqBtD,GAAa3H,GACvC7Q,EAAK8b,EAAqBtZ,IAAM,GAChCxC,EAAK8b,EAAqBxD,GAAiBsD,IAEvCH,EAAU,IAAIG,EAAW,GAAGjV,KAAQkK,EAASlK,MAAOmV,IACtDhe,EAAGge,EAAqBnV,IACtB7J,IAAK,WAAc,OAAO+T,KAI9B7S,EAAE6S,GAAQ+K,EAEV9a,EAAQA,EAAQU,EAAIV,EAAQoB,EAAIpB,EAAQQ,GAAKsa,GAAczK,GAAOnT,GAElE8C,EAAQA,EAAQtD,EAAGqT,GACjBkK,kBAAmBhC,IAGrBjY,EAAQA,EAAQtD,EAAIsD,EAAQQ,EAAI2I,EAAM,WAAckH,EAAK2L,GAAGlf,KAAKge,EAAY,KAAQ/K,GACnFuC,KAAMiG,GACNyD,GAAIpD,KApZgB,sBAuZKoC,GAAsB9b,EAAK8b,EAvZhC,oBAuZwE/C,GAE9FjY,EAAQA,EAAQ7C,EAAG4S,EAAMc,IAEzByE,EAAWvF,GAEX/P,EAAQA,EAAQ7C,EAAI6C,EAAQQ,EAAIuX,GAAYhI,GAAQ/G,IAAKkR,KAEzDla,EAAQA,EAAQ7C,EAAI6C,EAAQQ,GAAKsb,EAAmB/L,EAAMqK,IAErD5Q,GAAWwR,EAAoBne,UAAYua,KAAe4D,EAAoBne,SAAWua,IAE9FpX,EAAQA,EAAQ7C,EAAI6C,EAAQQ,EAAI2I,EAAM,WACpC,IAAI2R,EAAW,GAAG3X,UAChB4M,GAAQ5M,MAAOsI,KAEnBzL,EAAQA,EAAQ7C,EAAI6C,EAAQQ,GAAK2I,EAAM,WACrC,OAAQ,EAAG,GAAGmO,kBAAoB,IAAIwD,GAAY,EAAG,IAAIxD,qBACpDnO,EAAM,WACX6R,EAAoB1D,eAAexa,MAAM,EAAG,OACzCiT,GAAQuH,eAAgBwB,KAE7BrM,EAAUsD,GAAQ+L,EAAoBD,EAAkBE,EACnDvS,GAAYsS,GAAmB5c,EAAK8b,EAAqB1O,GAAUyP,SAErErhB,EAAAC,QAAiB,+EC/dxBkB,GAA0B,OAAQ,EAAG,SAAUogB,GAC7C,OAAO,SAAmBf,EAAMpR,EAAYpK,GAC1C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCFxC7D,GAA0B,QAAS,EAAG,SAAUogB,GAC9C,OAAO,SAAoBf,EAAMpR,EAAYpK,GAC3C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCFxC7D,GAA0B,QAAS,EAAG,SAAUogB,GAC9C,OAAO,SAA2Bf,EAAMpR,EAAYpK,GAClD,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MAErC,GCJH7D,GAA0B,QAAS,EAAG,SAAUogB,GAC9C,OAAO,SAAoBf,EAAMpR,EAAYpK,GAC3C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCFxC7D,GAA0B,SAAU,EAAG,SAAUogB,GAC/C,OAAO,SAAqBf,EAAMpR,EAAYpK,GAC5C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCFxC7D,GAA0B,QAAS,EAAG,SAAUogB,GAC9C,OAAO,SAAoBf,EAAMpR,EAAYpK,GAC3C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCFxC7D,GAA0B,SAAU,EAAG,SAAUogB,GAC/C,OAAO,SAAqBf,EAAMpR,EAAYpK,GAC5C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCFxC7D,GAA0B,UAAW,EAAG,SAAUogB,GAChD,OAAO,SAAsBf,EAAMpR,EAAYpK,GAC7C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCFxC7D,GAA0B,UAAW,EAAG,SAAUogB,GAChD,OAAO,SAAsBf,EAAMpR,EAAYpK,GAC7C,OAAOuc,EAAK3c,KAAM4b,EAAMpR,EAAYpK,MCAxC,IAAAwc,GAAiB,SAAU1D,EAAU7b,EAAIa,EAAO4T,GAC9C,IACE,OAAOA,EAAUzU,EAAGU,EAASG,GAAO,GAAIA,EAAM,IAAMb,EAAGa,GAEvD,MAAO7B,GACP,IAAIwgB,EAAM3D,EAAiB,OAE3B,WADY/Z,IAAR0d,GAAmB9e,EAAS8e,EAAIrf,KAAK0b,IACnC7c,qFCHV,IAAIygB,KACAC,KACA1hB,EAAUD,EAAAC,QAAiB,SAAU2hB,EAAUlL,EAASzU,EAAI8C,EAAM6M,GACpE,IAGI5M,EAAQiS,EAAM6G,EAAU3T,EAHxB8T,EAASrM,EAAW,WAAc,OAAOgQ,GAAc/H,GAAU+H,GACjErf,EAAIgE,GAAItE,EAAI8C,EAAM2R,EAAU,EAAI,GAChCvN,EAAQ,EAEZ,GAAqB,mBAAV8U,EAAsB,MAAMnd,UAAU8gB,EAAW,qBAE5D,GAAIpI,GAAYyE,IAAS,IAAKjZ,EAASsD,GAASsZ,EAAS5c,QAASA,EAASmE,EAAOA,IAEhF,IADAgB,EAASuM,EAAUnU,EAAEI,EAASsU,EAAO2K,EAASzY,IAAQ,GAAI8N,EAAK,IAAM1U,EAAEqf,EAASzY,OACjEuY,GAASvX,IAAWwX,EAAQ,OAAOxX,OAC7C,IAAK2T,EAAWG,EAAO7b,KAAKwf,KAAa3K,EAAO6G,EAASxI,QAAQJ,MAEtE,IADA/K,EAAS/H,GAAK0b,EAAUvb,EAAG0U,EAAKnU,MAAO4T,MACxBgL,GAASvX,IAAWwX,EAAQ,OAAOxX,GAGtDlK,EAAQyhB,MAAQA,EAChBzhB,EAAQ0hB,OAASA,uECxBjB,IAAIE,EAAO1gB,EAAkB,QAGzB2gB,EAAUjgB,EAAwBU,EAClCmB,EAAK,EACLqe,EAAe3gB,OAAO2gB,cAAgB,WACxC,OAAO,GAELC,GAAUlgB,EAAoB,WAChC,OAAOigB,EAAa3gB,OAAO6gB,yBAEzBC,EAAU,SAAUvhB,GACtBmhB,EAAQnhB,EAAIkhB,GAAQ/e,OAClBuE,EAAG,OAAQ3D,EACXye,SAgCAC,EAAOpiB,EAAAC,SACT2Q,IAAKiR,EACLQ,MAAM,EACNC,QAhCY,SAAU3hB,EAAI0S,GAE1B,IAAKxS,EAASF,GAAK,MAAoB,iBAANA,EAAiBA,GAAmB,iBAANA,EAAiB,IAAM,KAAOA,EAC7F,IAAK4D,EAAI5D,EAAIkhB,GAAO,CAElB,IAAKE,EAAaphB,GAAK,MAAO,IAE9B,IAAK0S,EAAQ,MAAO,IAEpB6O,EAAQvhB,GAER,OAAOA,EAAGkhB,GAAMxa,GAsBlBkb,QApBY,SAAU5hB,EAAI0S,GAC1B,IAAK9O,EAAI5D,EAAIkhB,GAAO,CAElB,IAAKE,EAAaphB,GAAK,OAAO,EAE9B,IAAK0S,EAAQ,OAAO,EAEpB6O,EAAQvhB,GAER,OAAOA,EAAGkhB,GAAMM,GAYlBK,SATa,SAAU7hB,GAEvB,OADIqhB,GAAUI,EAAKC,MAAQN,EAAaphB,KAAQ4D,EAAI5D,EAAIkhB,IAAOK,EAAQvhB,GAChEA,yKC3CT8hB,GAAiB,SAAU9hB,EAAIyT,GAC7B,IAAKvT,EAASF,IAAOA,EAAGmW,KAAO1C,EAAM,MAAMtT,UAAU,0BAA4BsT,EAAO,cACxF,OAAOzT,+FCFL2B,GAAKnB,EAAwBoB,EAU7B+f,GAAUzgB,GAAmBygB,QAE7BI,GAAOvW,EAAc,KAAO,OAE5BwW,GAAW,SAAU5d,EAAMzB,GAE7B,IACIsf,EADAzZ,EAAQmZ,GAAQhf,GAEpB,GAAc,MAAV6F,EAAe,OAAOpE,EAAKgS,GAAG5N,GAElC,IAAKyZ,EAAQ7d,EAAK8d,GAAID,EAAOA,EAAQA,EAAME,EACzC,GAAIF,EAAMG,GAAKzf,EAAK,OAAOsf,GAI/BI,IACEC,eAAgB,SAAUjD,EAAS3K,EAAMf,EAAQ4O,GAC/C,IAAItV,EAAIoS,EAAQ,SAAUjb,EAAM6c,GAC9BjT,GAAW5J,EAAM6I,EAAGyH,EAAM,MAC1BtQ,EAAK+R,GAAKzB,EACVtQ,EAAKgS,GAAK1D,GAAO,MACjBtO,EAAK8d,QAAK9e,EACVgB,EAAKoe,QAAKpf,EACVgB,EAAK2d,IAAQ,OACG3e,GAAZ6d,GAAuBwB,GAAMxB,EAAUtN,EAAQvP,EAAKme,GAAQne,KAsDlE,OApDAoK,GAAYvB,EAAEjJ,WAGZ0e,MAAO,WACL,IAAK,IAAIte,EAAOyY,GAAS5Y,KAAMyQ,GAAOmL,EAAOzb,EAAKgS,GAAI6L,EAAQ7d,EAAK8d,GAAID,EAAOA,EAAQA,EAAME,EAC1FF,EAAMU,GAAI,EACNV,EAAMW,IAAGX,EAAMW,EAAIX,EAAMW,EAAET,OAAI/e,UAC5Byc,EAAKoC,EAAMvb,GAEpBtC,EAAK8d,GAAK9d,EAAKoe,QAAKpf,EACpBgB,EAAK2d,IAAQ,GAIfc,OAAU,SAAUlgB,GAClB,IAAIyB,EAAOyY,GAAS5Y,KAAMyQ,GACtBuN,EAAQD,GAAS5d,EAAMzB,GAC3B,GAAIsf,EAAO,CACT,IAAItN,EAAOsN,EAAME,EACbW,EAAOb,EAAMW,SACVxe,EAAKgS,GAAG6L,EAAMvb,GACrBub,EAAMU,GAAI,EACNG,IAAMA,EAAKX,EAAIxN,GACfA,IAAMA,EAAKiO,EAAIE,GACf1e,EAAK8d,IAAMD,IAAO7d,EAAK8d,GAAKvN,GAC5BvQ,EAAKoe,IAAMP,IAAO7d,EAAKoe,GAAKM,GAChC1e,EAAK2d,MACL,QAASE,GAIbjE,QAAS,SAAiB9J,GACxB2I,GAAS5Y,KAAMyQ,GAGf,IAFA,IACIuN,EADArgB,EAAIgE,GAAIsO,EAAYxP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAW,GAElE6e,EAAQA,EAAQA,EAAME,EAAIle,KAAKie,IAGpC,IAFAtgB,EAAEqgB,EAAMnC,EAAGmC,EAAMG,EAAGne,MAEbge,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,GAK3Chf,IAAK,SAAajB,GAChB,QAASqf,GAASnF,GAAS5Y,KAAMyQ,GAAO/R,MAGxC6I,GAAa7J,GAAGsL,EAAEjJ,UAAW,QAC/BrD,IAAK,WACH,OAAOkc,GAAS5Y,KAAMyQ,GAAMqN,OAGzB9U,GAET1C,IAAK,SAAUnG,EAAMzB,EAAKR,GACxB,IACI2gB,EAAMta,EADNyZ,EAAQD,GAAS5d,EAAMzB,GAoBzB,OAjBEsf,EACFA,EAAMnC,EAAI3d,GAGViC,EAAKoe,GAAKP,GACRvb,EAAG8B,EAAQmZ,GAAQhf,GAAK,GACxByf,EAAGzf,EACHmd,EAAG3d,EACHygB,EAAGE,EAAO1e,EAAKoe,GACfL,OAAG/e,EACHuf,GAAG,GAEAve,EAAK8d,KAAI9d,EAAK8d,GAAKD,GACpBa,IAAMA,EAAKX,EAAIF,GACnB7d,EAAK2d,MAES,MAAVvZ,IAAepE,EAAKgS,GAAG5N,GAASyZ,IAC7B7d,GAEX4d,SAAUA,GACVe,UAAW,SAAU9V,EAAGyH,EAAMf,GAG5BqP,GAAY/V,EAAGyH,EAAM,SAAUwB,EAAUX,GACvCtR,KAAKkS,GAAK0G,GAAS3G,EAAUxB,GAC7BzQ,KAAKoS,GAAKd,EACVtR,KAAKue,QAAKpf,GACT,WAKD,IAJA,IACImS,EADOtR,KACKoS,GACZ4L,EAFOhe,KAEMue,GAEVP,GAASA,EAAMU,GAAGV,EAAQA,EAAMW,EAEvC,OANW3e,KAMDkS,KANClS,KAMYue,GAAKP,EAAQA,EAAQA,EAAME,EANvCle,KAMgDkS,GAAG+L,IAMnC5L,GAAK,EAApB,QAARf,EAA+B0M,EAAMG,EAC7B,UAAR7M,EAAiC0M,EAAMnC,GAC3BmC,EAAMG,EAAGH,EAAMnC,KAdpB7b,KAQJkS,QAAK/S,EACHkT,GAAK,KAMb3C,EAAS,UAAY,UAAWA,GAAQ,GAG3CsG,GAAWvF,uKCzIXuO,GAAQ,SAAUphB,EAAG2T,GAEvB,GADAxT,EAASH,IACJ3B,EAASsV,IAAoB,OAAVA,EAAgB,MAAMrV,UAAUqV,EAAQ,8BAElE0N,IACEvV,IAAKlN,OAAO0iB,iBAAmB,gBAC7B,SAAUC,EAAMC,EAAO1V,GACrB,KACEA,EAAMnN,GAAkBd,SAAS+B,KAAMP,GAA0BU,EAAEnB,OAAOuD,UAAW,aAAa2J,IAAK,IACnGyV,MACJC,IAAUD,aAAgBpX,OAC1B,MAAO1L,GAAK+iB,GAAQ,EACtB,OAAO,SAAwBxhB,EAAG2T,GAIhC,OAHAyN,GAAMphB,EAAG2T,GACL6N,EAAOxhB,EAAEyhB,UAAY9N,EACpB7H,EAAI9L,EAAG2T,GACL3T,GAVX,KAYM,QAASuB,GACjB6f,MAAOA,0GCtBLE,GAAiB3iB,GAAwBmN,IAC7C4V,GAAiB,SAAUnf,EAAMsB,EAAQuH,GACvC,IACInL,EADAT,EAAIqE,EAAO0I,YAIb,OAFE/M,IAAM4L,GAAiB,mBAAL5L,IAAoBS,EAAIT,EAAE2C,aAAeiJ,EAAEjJ,WAAa9D,EAAS4B,IAAMqhB,IAC3FA,GAAe/e,EAAMtC,GACdsC,mECOXof,GAAiB,SAAU9O,EAAM2K,EAAShK,EAASoO,EAAQ9P,EAAQ+P,GACjE,IAAI1O,EAAO5V,EAAOsV,GACdzH,EAAI+H,EACJuN,EAAQ5O,EAAS,MAAQ,MACzB6B,EAAQvI,GAAKA,EAAEjJ,UACfnC,KACA8hB,EAAY,SAAU1T,GACxB,IAAI3O,EAAKkU,EAAMvF,GACfpK,GAAS2P,EAAOvF,EACP,UAAPA,EAAkB,SAAUrP,GAC1B,QAAO8iB,IAAYxjB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPqP,EAAe,SAAarP,GAC9B,QAAO8iB,IAAYxjB,EAASU,KAAaU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAC5D,OAAPqP,EAAe,SAAarP,GAC9B,OAAO8iB,IAAYxjB,EAASU,QAAKwC,EAAY9B,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,IAChE,OAAPqP,EAAe,SAAarP,GAAqC,OAAhCU,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,GAAWqD,MACxE,SAAarD,EAAG2D,GAAwC,OAAnCjD,EAAGG,KAAKwC,KAAY,IAANrD,EAAU,EAAIA,EAAG2D,GAAWN,QAGvE,GAAgB,mBAALgJ,IAAqByW,GAAWlO,EAAMwI,UAAYlQ,EAAM,YACjE,IAAIb,GAAI8I,UAAUpB,UAMb,CACL,IAAIiP,EAAW,IAAI3W,EAEf4W,EAAiBD,EAASrB,GAAOmB,MAAgB,EAAG,IAAME,EAE1DE,EAAuBhW,EAAM,WAAc8V,EAAShgB,IAAI,KAExDmgB,EAAmBhK,GAAY,SAAUlD,GAAQ,IAAI5J,EAAE4J,KAEvDmN,GAAcN,GAAW5V,EAAM,WAIjC,IAFA,IAAImW,EAAY,IAAIhX,EAChBzE,EAAQ,EACLA,KAASyb,EAAU1B,GAAO/Z,EAAOA,GACxC,OAAQyb,EAAUrgB,KAAK,KAEpBmgB,KACH9W,EAAIoS,EAAQ,SAAU3Z,EAAQub,GAC5BjT,GAAWtI,EAAQuH,EAAGyH,GACtB,IAAItQ,EAAO8f,GAAkB,IAAIlP,EAAQtP,EAAQuH,GAEjD,YADgB7J,GAAZ6d,GAAuBwB,GAAMxB,EAAUtN,EAAQvP,EAAKme,GAAQne,GACzDA,KAEPJ,UAAYwR,EACdA,EAAMpH,YAAcnB,IAElB6W,GAAwBE,KAC1BL,EAAU,UACVA,EAAU,OACVhQ,GAAUgQ,EAAU,SAElBK,GAAcH,IAAgBF,EAAUpB,GAExCmB,GAAWlO,EAAMkN,cAAclN,EAAMkN,WApCzCzV,EAAIwW,EAAOnB,eAAejD,EAAS3K,EAAMf,EAAQ4O,GACjD/T,GAAYvB,EAAEjJ,UAAWqR,GACzBoM,GAAKC,MAAO,EA4Cd,OAPA9R,GAAe3C,EAAGyH,GAElB7S,EAAE6S,GAAQzH,EACVtI,GAAQA,GAAQU,EAAIV,GAAQoB,EAAIpB,GAAQQ,GAAK8H,GAAK+H,GAAOnT,GAEpD6hB,GAASD,EAAOV,UAAU9V,EAAGyH,EAAMf,GAEjC1G,iFCnFTkX,ICMiB3jB,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/EzC,IAAK,SAAagC,GAChB,IAAIsf,EAAQmC,GAAOpC,SAASnF,GAAS5Y,KAR/B,OAQ2CtB,GACjD,OAAOsf,GAASA,EAAMnC,GAGxBnS,IAAK,SAAahL,EAAKR,GACrB,OAAOiiB,GAAO7Z,IAAIsS,GAAS5Y,KAbrB,OAayC,IAARtB,EAAY,EAAIA,EAAKR,KAE7DiiB,IAAQ,GCZM5jB,GAHP,MAGqC,SAAUG,GACvD,OAAO,WAAiB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAG/EihB,IAAK,SAAaliB,GAChB,OAAOiiB,GAAO7Z,IAAIsS,GAAS5Y,KARrB,OAQiC9B,EAAkB,IAAVA,EAAc,EAAIA,EAAOA,KAEzEiiB,IFbS3jB,OAAO6jB,sGGOfC,GAAU9jB,OAAO+jB,OAGrBC,IAAkBF,IAAW/jB,EAAoB,WAC/C,IAAIkkB,KACAjf,KAEApE,EAAIgJ,SACJsa,EAAI,uBAGR,OAFAD,EAAErjB,GAAK,EACPsjB,EAAEnhB,MAAM,IAAIwa,QAAQ,SAAUoE,GAAK3c,EAAE2c,GAAKA,IACd,GAArBmC,MAAYG,GAAGrjB,IAAWZ,OAAOwN,KAAKsW,MAAY9e,IAAI3B,KAAK,KAAO6gB,IACtE,SAAgBjf,EAAQZ,GAM3B,IALA,IAAI+L,EAAI5G,GAASvE,GACbwE,EAAOxF,UAAUL,OACjBmE,EAAQ,EACRoc,EAAaC,GAAKjjB,EAClBkjB,EAAStN,GAAI5V,EACVsI,EAAO1B,GAMZ,IALA,IAII7F,EAJAtB,EAAI+G,GAAQ1D,UAAU8D,MACtByF,EAAO2W,EAAalT,GAAQrQ,GAAG8B,OAAOyhB,EAAWvjB,IAAMqQ,GAAQrQ,GAC/DgD,EAAS4J,EAAK5J,OACd6J,EAAI,EAED7J,EAAS6J,GAAO4W,EAAOrjB,KAAKJ,EAAGsB,EAAMsL,EAAKC,QAAO2C,EAAElO,GAAOtB,EAAEsB,IACnE,OAAOkO,GACP0T,qDC/BA3C,GAAUphB,GAAmBohB,QAQ7B7G,GAAYxB,GAAkB,GAC9ByB,GAAiBzB,GAAkB,GACnCxW,GAAK,EAGLgiB,GAAsB,SAAU3gB,GAClC,OAAOA,EAAKoe,KAAOpe,EAAKoe,GAAK,IAAIwC,KAE/BA,GAAsB,WACxB/gB,KAAKrD,MAEHqkB,GAAqB,SAAUjc,EAAOrG,GACxC,OAAOoY,GAAU/R,EAAMpI,EAAG,SAAUZ,GAClC,OAAOA,EAAG,KAAO2C,KAGrBqiB,GAAoBhhB,WAClBrD,IAAK,SAAUgC,GACb,IAAIsf,EAAQgD,GAAmBhhB,KAAMtB,GACrC,GAAIsf,EAAO,OAAOA,EAAM,IAE1Bre,IAAK,SAAUjB,GACb,QAASsiB,GAAmBhhB,KAAMtB,IAEpCgL,IAAK,SAAUhL,EAAKR,GAClB,IAAI8f,EAAQgD,GAAmBhhB,KAAMtB,GACjCsf,EAAOA,EAAM,GAAK9f,EACjB8B,KAAKrD,EAAE6I,MAAM9G,EAAKR,KAEzB0gB,OAAU,SAAUlgB,GAClB,IAAI6F,EAAQwS,GAAe/W,KAAKrD,EAAG,SAAUZ,GAC3C,OAAOA,EAAG,KAAO2C,IAGnB,OADK6F,GAAOvE,KAAKrD,EAAEskB,OAAO1c,EAAO,MACvBA,IAId,IAAA2c,IACE7C,eAAgB,SAAUjD,EAAS3K,EAAMf,EAAQ4O,GAC/C,IAAItV,EAAIoS,EAAQ,SAAUjb,EAAM6c,GAC9BjT,GAAW5J,EAAM6I,EAAGyH,EAAM,MAC1BtQ,EAAK+R,GAAKzB,EACVtQ,EAAKgS,GAAKrT,KACVqB,EAAKoe,QAAKpf,OACMA,GAAZ6d,GAAuBwB,GAAMxB,EAAUtN,EAAQvP,EAAKme,GAAQne,KAoBlE,OAlBAoK,GAAYvB,EAAEjJ,WAGZ6e,OAAU,SAAUlgB,GAClB,IAAKzC,EAASyC,GAAM,OAAO,EAC3B,IAAIkd,EAAO+B,GAAQjf,GACnB,OAAa,IAATkd,EAAsBkF,GAAoBlI,GAAS5Y,KAAMyQ,IAAe,OAAE/R,GACvEkd,GAAQuF,EAAKvF,EAAM5b,KAAKmS,YAAcyJ,EAAK5b,KAAKmS,KAIzDxS,IAAK,SAAajB,GAChB,IAAKzC,EAASyC,GAAM,OAAO,EAC3B,IAAIkd,EAAO+B,GAAQjf,GACnB,OAAa,IAATkd,EAAsBkF,GAAoBlI,GAAS5Y,KAAMyQ,IAAO9Q,IAAIjB,GACjEkd,GAAQuF,EAAKvF,EAAM5b,KAAKmS,OAG5BnJ,GAET1C,IAAK,SAAUnG,EAAMzB,EAAKR,GACxB,IAAI0d,EAAO+B,GAAQ5f,EAASW,IAAM,GAGlC,OAFa,IAATkd,EAAekF,GAAoB3gB,GAAMuJ,IAAIhL,EAAKR,GACjD0d,EAAKzb,EAAKgS,IAAMjU,EACdiC,GAETihB,QAASN,iLClFX,IAaIO,EAbAC,EAAO/kB,GAA4B,GASnCohB,EAAUH,GAAKG,QACfR,EAAe3gB,OAAO2gB,aACtB2D,EAAsBS,GAAKH,QAC3BI,KAGApG,EAAU,SAAU1e,GACtB,OAAO,WACL,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,KAIvDiS,GAEF1U,IAAK,SAAagC,GAChB,GAAIzC,EAASyC,GAAM,CACjB,IAAIkd,EAAO+B,EAAQjf,GACnB,OAAa,IAATkd,EAAsBkF,EAAoBlI,GAAS5Y,KAlB9C,YAkB+DtD,IAAIgC,GACrEkd,EAAOA,EAAK5b,KAAKmS,SAAMhT,IAIlCuK,IAAK,SAAahL,EAAKR,GACrB,OAAOqjB,GAAKjb,IAAIsS,GAAS5Y,KAxBd,WAwB+BtB,EAAKR,KAK/CujB,EAAWrmB,EAAAC,QAAiB4B,GA7BjB,UA6BoDme,EAAShK,EAASmQ,IAAM,GAAM,GAG7F1X,EAAM,WAAc,OAAyE,IAAlE,IAAI4X,GAAW/X,KAAKlN,OAAOklB,QAAUllB,QAAQglB,GAAM,GAAG9kB,IAAI8kB,OACvFH,EAAcE,GAAKlD,eAAejD,EAjCrB,WAkCbmF,GAAOc,EAAYthB,UAAWqR,GAC9BoM,GAAKC,MAAO,EACZ6D,GAAM,SAAU,MAAO,MAAO,OAAQ,SAAU5iB,GAC9C,IAAI6S,EAAQkQ,EAAS1hB,UACjB4hB,EAASpQ,EAAM7S,GACnBkD,GAAS2P,EAAO7S,EAAK,SAAU/B,EAAG2D,GAEhC,GAAIrE,EAASU,KAAOwgB,EAAaxgB,GAAI,CAC9BqD,KAAKie,KAAIje,KAAKie,GAAK,IAAIoD,GAC5B,IAAI9b,EAASvF,KAAKie,GAAGvf,GAAK/B,EAAG2D,GAC7B,MAAc,OAAP5B,EAAesB,KAAOuF,EAE7B,OAAOoc,EAAOnkB,KAAKwC,KAAMrD,EAAG2D,UCjDpC/D,GAHe,UAGoB,SAAUG,GAC3C,OAAO,WAAqB,OAAOA,EAAIsD,KAAMS,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGnFihB,IAAK,SAAaliB,GAChB,OAAOqjB,GAAKjb,IAAIsS,GAAS5Y,KARd,WAQ+B9B,GAAO,KAElDqjB,IAAM,GAAO,GCThB,IAAIK,IAAUrlB,EAAqBslB,aAAerhB,MAC9CshB,GAASrmB,SAAS+E,MAEtBE,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAKjE,EAAoB,WACnD2kB,GAAO,gBACL,WACFphB,MAAO,SAAeiB,EAAQsgB,EAAcC,GAC1C,IAAIpV,EAAIvM,GAAUoB,GACdwgB,EAAIlkB,EAASikB,GACjB,OAAOJ,GAASA,GAAOhV,EAAGmV,EAAcE,GAAKH,GAAOtkB,KAAKoP,EAAGmV,EAAcE,MCZ9E,IAAAC,GAAiB,SAAU7kB,EAAI8kB,EAAMhiB,GACnC,IAAIiiB,OAAcjjB,IAATgB,EACT,OAAQgiB,EAAK/hB,QACX,KAAK,EAAG,OAAOgiB,EAAK/kB,IACAA,EAAGG,KAAK2C,GAC5B,KAAK,EAAG,OAAOiiB,EAAK/kB,EAAG8kB,EAAK,IACR9kB,EAAGG,KAAK2C,EAAMgiB,EAAK,IACvC,KAAK,EAAG,OAAOC,EAAK/kB,EAAG8kB,EAAK,GAAIA,EAAK,IACjB9kB,EAAGG,KAAK2C,EAAMgiB,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOC,EAAK/kB,EAAG8kB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1B9kB,EAAGG,KAAK2C,EAAMgiB,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzD,KAAK,EAAG,OAAOC,EAAK/kB,EAAG8kB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACnC9kB,EAAGG,KAAK2C,EAAMgiB,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAClE,OAAO9kB,EAAGmD,MAAML,EAAMgiB,oECVtBtK,MAAgBhU,MAChBwe,MAUJC,GAAiB7mB,SAAS8mB,MAAQ,SAAcpiB,GAC9C,IAAI9C,EAAKgD,GAAUL,MACfwiB,EAAW3K,GAAWra,KAAKiD,UAAW,GACtCgiB,EAAQ,WACV,IAAIN,EAAOK,EAAStjB,OAAO2Y,GAAWra,KAAKiD,YAC3C,OAAOT,gBAAgByiB,EAbX,SAAUvhB,EAAGkL,EAAK+V,GAChC,KAAM/V,KAAOiW,IAAY,CACvB,IAAK,IAAInE,KAAQzb,EAAI,EAAGA,EAAI2J,EAAK3J,IAAKyb,EAAEzb,GAAK,KAAOA,EAAI,IAExD4f,GAAUjW,GAAO3Q,SAAS,MAAO,gBAAkByiB,EAAEre,KAAK,KAAO,KACjE,OAAOwiB,GAAUjW,GAAKlL,EAAGihB,GAQMO,CAAUrlB,EAAI8kB,EAAK/hB,OAAQ+hB,GAAQQ,GAAOtlB,EAAI8kB,EAAMhiB,IAGrF,OADIlE,EAASoB,EAAG0C,aAAY0iB,EAAM1iB,UAAY1C,EAAG0C,WAC1C0iB,mECfLG,IAAcrmB,EAAqBslB,aAAea,UAIlDG,GAAiBhZ,EAAM,WACzB,SAAS3I,KACT,QAAS0hB,GAAW,gBAAiC1hB,aAAcA,KAEjE4hB,IAAYjZ,EAAM,WACpB+Y,GAAW,gBAGbliB,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAK2hB,IAAkBC,IAAW,WAC5DJ,UAAW,SAAmBK,EAAQZ,GACpC9hB,GAAU0iB,GACVhlB,EAASokB,GACT,IAAIa,EAAYviB,UAAUL,OAAS,EAAI2iB,EAAS1iB,GAAUI,UAAU,IACpE,GAAIqiB,KAAaD,GAAgB,OAAOD,GAAWG,EAAQZ,EAAMa,GACjE,GAAID,GAAUC,EAAW,CAEvB,OAAQb,EAAK/hB,QACX,KAAK,EAAG,OAAO,IAAI2iB,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAOZ,EAAK,IAC/B,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,IACxC,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjD,KAAK,EAAG,OAAO,IAAIY,EAAOZ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAG5D,IAAIc,GAAS,MAEb,OADAA,EAAMzd,KAAKhF,MAAMyiB,EAAOd,GACjB,IAAKI,GAAK/hB,MAAMuiB,EAAQE,IAGjC,IAAI1R,EAAQyR,EAAUjjB,UAClB4f,EAAWlR,GAAOxS,EAASsV,GAASA,EAAQ/U,OAAOuD,WACnDwF,EAAS9J,SAAS+E,MAAMhD,KAAKulB,EAAQpD,EAAUwC,GACnD,OAAOlmB,EAASsJ,GAAUA,EAASoa,KCrCvCjf,GAAQA,GAAQtD,EAAIsD,GAAQQ,EAAI3E,EAAoB,WAElDslB,QAAQplB,eAAeiB,EAAGC,KAAM,GAAKO,MAAO,IAAM,GAAKA,MAAO,MAC5D,WACFzB,eAAgB,SAAwBgF,EAAQyhB,EAAaC,GAC3DplB,EAAS0D,GACTyhB,EAAcllB,EAAYklB,GAAa,GACvCnlB,EAASolB,GACT,IAEE,OADAzlB,EAAGC,EAAE8D,EAAQyhB,EAAaC,IACnB,EACP,MAAO9mB,GACP,OAAO,MCjBb,IAAI+W,GAAO7W,GAA0BoB,EAGrC+C,GAAQA,GAAQtD,EAAG,WACjBgmB,eAAgB,SAAwB3hB,EAAQyhB,GAC9C,IAAIhI,EAAO9H,GAAKrV,EAAS0D,GAASyhB,GAClC,QAAOhI,IAASA,EAAK5c,sBAA8BmD,EAAOyhB,MCY9DxiB,GAAQA,GAAQtD,EAAG,WAAaV,IAZhC,SAASA,EAAI+E,EAAQyhB,GACnB,IACIhI,EAAM3J,EADN8R,EAAW5iB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GAEzD,OAAI1C,EAAS0D,KAAY4hB,EAAiB5hB,EAAOyhB,IAC7ChI,EAAO9H,GAAKzV,EAAE8D,EAAQyhB,IAAqBvjB,EAAIub,EAAM,SACrDA,EAAKhd,WACQiB,IAAb+b,EAAKxe,IACHwe,EAAKxe,IAAIc,KAAK6lB,QACdlkB,EACFlD,EAASsV,EAAQ1C,GAAepN,IAAiB/E,EAAI6U,EAAO2R,EAAaG,QAA7E,KCZF3iB,GAAQA,GAAQtD,EAAG,WACjBiW,yBAA0B,SAAkC5R,EAAQyhB,GAClE,OAAO9P,GAAKzV,EAAEI,EAAS0D,GAASyhB,MCFpCxiB,GAAQA,GAAQtD,EAAG,WACjByR,eAAgB,SAAwBpN,GACtC,OAAO6hB,GAASvlB,EAAS0D,OCJ7Bf,GAAQA,GAAQtD,EAAG,WACjBuC,IAAK,SAAa8B,EAAQyhB,GACxB,OAAOA,KAAezhB,KCF1B,IAAI8hB,GAAgB/mB,OAAO2gB,aAE3Bzc,GAAQA,GAAQtD,EAAG,WACjB+f,aAAc,SAAsB1b,GAElC,OADA1D,EAAS0D,IACF8hB,IAAgBA,GAAc9hB,MCJzC,IAAIogB,GAAUtlB,EAAqBslB,QACnC2B,GAAiB3B,IAAWA,GAAQ4B,SAAW,SAAiB1nB,GAC9D,IAAIiO,EAAOrD,GAAKhJ,EAAEI,EAAShC,IACvB4kB,EAAaC,GAAKjjB,EACtB,OAAOgjB,EAAa3W,EAAK9K,OAAOyhB,EAAW5kB,IAAOiO,mECLpDtJ,GAAQA,GAAQtD,EAAG,WAAaqmB,QAASlnB,KCAzC,IAAImnB,GAAqBlnB,OAAO6gB,kBAEhC3c,GAAQA,GAAQtD,EAAG,WACjBigB,kBAAmB,SAA2B5b,GAC5C1D,EAAS0D,GACT,IAEE,OADIiiB,IAAoBA,GAAmBjiB,IACpC,EACP,MAAOpF,GACP,OAAO,MCkBbqE,GAAQA,GAAQtD,EAAG,WAAasM,IApBhC,SAASA,EAAIjI,EAAQyhB,EAAaS,GAChC,IAEIC,EAAoBrS,EAFpB8R,EAAW5iB,UAAUL,OAAS,EAAIqB,EAAShB,UAAU,GACrDojB,EAAUzQ,GAAKzV,EAAEI,EAAS0D,GAASyhB,GAEvC,IAAKW,EAAS,CACZ,GAAI5nB,EAASsV,EAAQ1C,GAAepN,IAClC,OAAOiI,EAAI6H,EAAO2R,EAAaS,EAAGN,GAEpCQ,EAAUllB,EAAW,GAEvB,OAAIgB,EAAIkkB,EAAS,YACU,IAArBA,EAAQtlB,WAAuBtC,EAASonB,MAC5CO,EAAqBxQ,GAAKzV,EAAE0lB,EAAUH,IAAgBvkB,EAAW,IAC9CT,MAAQylB,EAC3BjmB,EAAGC,EAAE0lB,EAAUH,EAAaU,GACrB,SAEczkB,IAAhB0kB,EAAQna,MAA6Bma,EAAQna,IAAIlM,KAAK6lB,EAAUM,IAAI,MCvBzEG,IAAUpjB,GAAQA,GAAQtD,EAAG,WAC/B8hB,eAAgB,SAAwBzd,EAAQ8P,GAC9CuS,GAAS9E,MAAMvd,EAAQ8P,GACvB,IAEE,OADAuS,GAASpa,IAAIjI,EAAQ8P,IACd,EACP,MAAOlV,GACP,OAAO,MCNb,IAQI0nB,GAAOC,GAASC,GARhBC,GAAU/oB,EAAO+oB,QACjBC,GAAUhpB,EAAOipB,aACjBC,GAAYlpB,EAAOmpB,eACnBC,GAAiBppB,EAAOopB,eACxBC,GAAWrpB,EAAOqpB,SAClBC,GAAU,EACVC,MAGAC,GAAM,WACR,IAAI7lB,GAAMkB,KAEV,GAAI0kB,GAAM9lB,eAAeE,GAAK,CAC5B,IAAIzB,EAAKqnB,GAAM5lB,UACR4lB,GAAM5lB,GACbzB,MAGAunB,GAAW,SAAUC,GACvBF,GAAInnB,KAAKqnB,EAAMjJ,OAGZuI,IAAYE,KACfF,GAAU,SAAsB9mB,GAG9B,IAFA,IAAI8kB,KACA1f,EAAI,EACDhC,UAAUL,OAASqC,GAAG0f,EAAK3c,KAAK/E,UAAUgC,MAMjD,OALAiiB,KAAQD,IAAW,WAEjB9B,GAAoB,mBAANtlB,EAAmBA,EAAK5B,SAAS4B,GAAK8kB,IAEtD4B,GAAMU,IACCA,IAETJ,GAAY,SAAwBvlB,UAC3B4lB,GAAM5lB,IAGmB,WAA9BvC,GAAkB2nB,IACpBH,GAAQ,SAAUjlB,GAChBolB,GAAQY,SAASnjB,GAAIgjB,GAAK7lB,EAAI,KAGvB0lB,IAAYA,GAASO,IAC9BhB,GAAQ,SAAUjlB,GAChB0lB,GAASO,IAAIpjB,GAAIgjB,GAAK7lB,EAAI,KAGnBylB,IAETN,IADAD,GAAU,IAAIO,IACCS,MACfhB,GAAQiB,MAAMC,UAAYN,GAC1Bb,GAAQpiB,GAAIsiB,GAAKkB,YAAalB,GAAM,IAG3B9oB,EAAOiqB,kBAA0C,mBAAfD,cAA8BhqB,EAAOkqB,eAChFtB,GAAQ,SAAUjlB,GAChB3D,EAAOgqB,YAAYrmB,EAAK,GAAI,MAE9B3D,EAAOiqB,iBAAiB,UAAWR,IAAU,IAG7Cb,GAvDqB,uBAsDUuB,EAAI,UAC3B,SAAUxmB,GAChBymB,GAAKrX,YAAYoX,EAAI,WAA6B,mBAAI,WACpDC,GAAKC,YAAYxlB,MACjB2kB,GAAInnB,KAAKsB,KAKL,SAAUA,GAChB2mB,WAAW9jB,GAAIgjB,GAAK7lB,EAAI,GAAI,KAIlC,IAAA4mB,IACEhc,IAAKya,GACL1F,MAAO4F,0GCjFLsB,GAAYppB,GAAmBmN,IAC/Bkc,GAAWzqB,EAAO0qB,kBAAoB1qB,EAAO2qB,uBAC7C5B,GAAU/oB,EAAO+oB,QACjB6B,GAAU5qB,EAAO4qB,QACjBC,GAAuC,WAA9B/oB,GAAkBinB,IAE/B+B,GAAiB,WACf,IAAIC,EAAMC,EAAMC,EAEZC,EAAQ,WACV,IAAIC,EAAQjpB,EAEZ,IADI2oB,KAAWM,EAASpC,GAAQqC,SAASD,EAAOE,OACzCN,GAAM,CACX7oB,EAAK6oB,EAAK7oB,GACV6oB,EAAOA,EAAKxV,KACZ,IACErT,IACA,MAAOhB,GAGP,MAFI6pB,EAAME,IACLD,OAAOhnB,EACN9C,GAER8pB,OAAOhnB,EACLmnB,GAAQA,EAAOG,SAIrB,GAAIT,GACFI,EAAS,WACPlC,GAAQY,SAASuB,SAGd,IAAIT,IAAczqB,EAAOurB,WAAavrB,EAAOurB,UAAUC,WAQvD,GAAIZ,IAAWA,GAAQa,QAAS,CACrC,IAAIC,EAAUd,GAAQa,UACtBR,EAAS,WACPS,EAAQC,KAAKT,SASfD,EAAS,WAEPT,GAAUnoB,KAAKrC,EAAQkrB,QAtBgD,CACzE,IAAIU,GAAS,EACTC,EAAOpqB,SAASqqB,eAAe,IACnC,IAAIrB,GAASS,GAAOa,QAAQF,GAAQG,eAAe,IACnDf,EAAS,WACPY,EAAKpL,KAAOmL,GAAUA,GAqB1B,OAAO,SAAU1pB,GACf,IAAI+pB,GAAS/pB,GAAIA,EAAIqT,UAAMvR,GACvBgnB,IAAMA,EAAKzV,KAAO0W,GACjBlB,IACHA,EAAOkB,EACPhB,KACAD,EAAOiB,sDClDb,ICOIC,GAAUC,GAA6BC,GAAsBC,GDPjEC,GAAmB,SAAUze,GAC3B,OAAO,IAZT,SAA2BA,GACzB,IAAI4d,EAASc,EACb1nB,KAAK6mB,QAAU,IAAI7d,EAAE,SAAU2e,EAAWC,GACxC,QAAgBzoB,IAAZynB,QAAoCznB,IAAXuoB,EAAsB,MAAMxrB,UAAU,2BACnE0qB,EAAUe,EACVD,EAASE,IAEX5nB,KAAK4mB,QAAUvmB,GAAUumB,GACzB5mB,KAAK0nB,OAASrnB,GAAUqnB,GAIjB,CAAsB1e,qEEhB/B6e,GAAiB,SAAUzrB,GACzB,IACE,OAASC,GAAG,EAAOwf,EAAGzf,KACtB,MAAOC,GACP,OAASA,GAAG,EAAMwf,EAAGxf,qECAzByrB,GAAiB,SAAU9e,EAAG+e,GAE5B,GADAhqB,EAASiL,GACL/M,EAAS8rB,IAAMA,EAAE5d,cAAgBnB,EAAG,OAAO+e,EAC/C,IAAIC,EAAoBC,GAAqBtqB,EAAEqL,GAG/C,OADA4d,EADcoB,EAAkBpB,SACxBmB,GACDC,EAAkBnB,qGFCvBO,GAAO7qB,GAAmBmN,IAC1Bwe,GAAYjrB,KAKZf,GAAYf,EAAOe,UACnBgoB,GAAU/oB,EAAO+oB,QACjBiE,GAAWhtB,EAAc,QACzB6qB,GAA6B,WAApBhX,GAAQkV,IACjBkE,GAAQ,aAERH,GAAuBX,GAA8Be,GAA2B1qB,EAEhF2qB,KAAe,WACjB,IAEE,IAAIzB,EAAUsB,GAASvB,QAAQ,GAC3B2B,GAAe1B,EAAQ1c,gBAAkBjN,GAAkB,YAAc,SAAUd,GACrFA,EAAKgsB,GAAOA,KAGd,OAAQpC,IAA0C,mBAAzBwC,wBAAwC3B,EAAQC,KAAKsB,cAAkBG,EAChG,MAAOlsB,KATQ,GAafosB,GAAa,SAAU1sB,GACzB,IAAI+qB,EACJ,SAAO7qB,EAASF,IAAkC,mBAAnB+qB,EAAO/qB,EAAG+qB,QAAsBA,GAE7DV,GAAS,SAAUS,EAAS6B,GAC9B,IAAI7B,EAAQ8B,GAAZ,CACA9B,EAAQ8B,IAAK,EACb,IAAIC,EAAQ/B,EAAQgC,GACpBX,GAAU,WAgCR,IA/BA,IAAIhqB,EAAQ2oB,EAAQiC,GAChBC,EAAmB,GAAdlC,EAAQmC,GACbvmB,EAAI,EACJkiB,EAAM,SAAUsE,GAClB,IAII1jB,EAAQuhB,EAJRoC,EAAUH,EAAKE,EAASF,GAAKE,EAASE,KACtCvC,EAAUqC,EAASrC,QACnBc,EAASuB,EAASvB,OAClBnB,EAAS0C,EAAS1C,OAEtB,IACM2C,GACGH,IACe,GAAdlC,EAAQuC,IAASC,GAAkBxC,GACvCA,EAAQuC,GAAK,IAEC,IAAZF,EAAkB3jB,EAASrH,GAEzBqoB,GAAQA,EAAOE,QACnBlhB,EAAS2jB,EAAQhrB,GACbqoB,GAAQA,EAAOC,QAEjBjhB,IAAW0jB,EAASpC,QACtBa,EAAOxrB,GAAU,yBACR4qB,EAAO2B,GAAWljB,IAC3BuhB,EAAKtpB,KAAK+H,EAAQqhB,EAASc,GACtBd,EAAQrhB,IACVmiB,EAAOxpB,GACd,MAAO7B,GACPqrB,EAAOrrB,KAGJusB,EAAMxoB,OAASqC,GAAGkiB,EAAIiE,EAAMnmB,MACnCokB,EAAQgC,MACRhC,EAAQ8B,IAAK,EACTD,IAAa7B,EAAQuC,IAAIE,GAAYzC,OAGzCyC,GAAc,SAAUzC,GAC1BO,GAAK5pB,KAAKrC,EAAQ,WAChB,IAEIoK,EAAQ2jB,EAASK,EAFjBrrB,EAAQ2oB,EAAQiC,GAChBU,EAAYC,GAAY5C,GAe5B,GAbI2C,IACFjkB,EAASmkB,GAAQ,WACX1D,GACF9B,GAAQyF,KAAK,qBAAsBzrB,EAAO2oB,IACjCqC,EAAU/tB,EAAOyuB,sBAC1BV,GAAUrC,QAASA,EAASgD,OAAQ3rB,KAC1BqrB,EAAUpuB,EAAOouB,UAAYA,EAAQO,OAC/CP,EAAQO,MAAM,8BAA+B5rB,KAIjD2oB,EAAQuC,GAAKpD,IAAUyD,GAAY5C,GAAW,EAAI,GAClDA,EAAQkD,QAAK5qB,EACXqqB,GAAajkB,EAAOlJ,EAAG,MAAMkJ,EAAOsW,KAGxC4N,GAAc,SAAU5C,GAC1B,OAAsB,IAAfA,EAAQuC,IAAkD,KAArCvC,EAAQkD,IAAMlD,EAAQgC,IAAIzoB,QAEpDipB,GAAoB,SAAUxC,GAChCO,GAAK5pB,KAAKrC,EAAQ,WAChB,IAAI+tB,EACAlD,GACF9B,GAAQyF,KAAK,mBAAoB9C,IACxBqC,EAAU/tB,EAAO6uB,qBAC1Bd,GAAUrC,QAASA,EAASgD,OAAQhD,EAAQiC,QAI9CmB,GAAU,SAAU/rB,GACtB,IAAI2oB,EAAU7mB,KACV6mB,EAAQ7N,KACZ6N,EAAQ7N,IAAK,GACb6N,EAAUA,EAAQqD,IAAMrD,GAChBiC,GAAK5qB,EACb2oB,EAAQmC,GAAK,EACRnC,EAAQkD,KAAIlD,EAAQkD,GAAKlD,EAAQgC,GAAGhlB,SACzCuiB,GAAOS,GAAS,KAEdsD,GAAW,SAAUjsB,GACvB,IACI4oB,EADAD,EAAU7mB,KAEd,IAAI6mB,EAAQ7N,GAAZ,CACA6N,EAAQ7N,IAAK,EACb6N,EAAUA,EAAQqD,IAAMrD,EACxB,IACE,GAAIA,IAAY3oB,EAAO,MAAMhC,GAAU,qCACnC4qB,EAAO2B,GAAWvqB,IACpBgqB,GAAU,WACR,IAAI9M,GAAY8O,GAAIrD,EAAS7N,IAAI,GACjC,IACE8N,EAAKtpB,KAAKU,EAAOyD,GAAIwoB,GAAU/O,EAAS,GAAIzZ,GAAIsoB,GAAS7O,EAAS,IAClE,MAAO/e,GACP4tB,GAAQzsB,KAAK4d,EAAS/e,OAI1BwqB,EAAQiC,GAAK5qB,EACb2oB,EAAQmC,GAAK,EACb5C,GAAOS,GAAS,IAElB,MAAOxqB,GACP4tB,GAAQzsB,MAAO0sB,GAAIrD,EAAS7N,IAAI,GAAS3c,MAKxCisB,KAEHH,GAAW,SAAiBiC,GAC1BrgB,GAAW/J,KAAMmoB,GA/IP,UA+I0B,MACpC9nB,GAAU+pB,GACV/C,GAAS7pB,KAAKwC,MACd,IACEoqB,EAASzoB,GAAIwoB,GAAUnqB,KAAM,GAAI2B,GAAIsoB,GAASjqB,KAAM,IACpD,MAAOqqB,GACPJ,GAAQzsB,KAAKwC,KAAMqqB,MAIvBhD,GAAW,SAAiB+C,GAC1BpqB,KAAK6oB,MACL7oB,KAAK+pB,QAAK5qB,EACVa,KAAKgpB,GAAK,EACVhpB,KAAKgZ,IAAK,EACVhZ,KAAK8oB,QAAK3pB,EACVa,KAAKopB,GAAK,EACVppB,KAAK2oB,IAAK,IAEH5oB,UAAYyT,GAA2B2U,GAASpoB,WAEvD+mB,KAAM,SAAcwD,EAAaC,GAC/B,IAAItB,EAAWhB,GAAqB1b,GAAmBvM,KAAMmoB,KAO7D,OANAc,EAASF,GAA2B,mBAAfuB,GAA4BA,EACjDrB,EAASE,KAA4B,mBAAdoB,GAA4BA,EACnDtB,EAAS1C,OAASP,GAAS9B,GAAQqC,YAASpnB,EAC5Ca,KAAK6oB,GAAGrjB,KAAKyjB,GACTjpB,KAAK+pB,IAAI/pB,KAAK+pB,GAAGvkB,KAAKyjB,GACtBjpB,KAAKgpB,IAAI5C,GAAOpmB,MAAM,GACnBipB,EAASpC,SAGlB2D,MAAS,SAAUD,GACjB,OAAOvqB,KAAK8mB,UAAK3nB,EAAWorB,MAGhChD,GAAuB,WACrB,IAAIV,EAAU,IAAIQ,GAClBrnB,KAAK6mB,QAAUA,EACf7mB,KAAK4mB,QAAUjlB,GAAIwoB,GAAUtD,EAAS,GACtC7mB,KAAK0nB,OAAS/lB,GAAIsoB,GAASpD,EAAS,IAEtCwB,GAA2B1qB,EAAIsqB,GAAuB,SAAUjf,GAC9D,OAAOA,IAAMmf,IAAYnf,IAAMwe,GAC3B,IAAID,GAAqBve,GACzBse,GAA4Bte,KAIpCtI,GAAQA,GAAQU,EAAIV,GAAQoB,EAAIpB,GAAQQ,GAAKonB,IAAcvC,QAASoC,KACpE1U,GAAgC0U,GAjMlB,WAkMdzU,GAlMc,WAmMd8T,GAAU5T,EAA0B,QAGpClT,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAKonB,GAtMnB,WAwMZZ,OAAQ,SAAgBhJ,GACtB,IAAI+L,EAAaxC,GAAqBjoB,MAGtC,OADA4nB,EADe6C,EAAW/C,QACjBhJ,GACF+L,EAAW5D,WAGtBnmB,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAKgJ,KAAYoe,IA/M/B,WAiNZ1B,QAAS,SAAiBmB,GACxB,OAAO2C,GAAexgB,IAAWlK,OAASwnB,GAAUW,GAAWnoB,KAAM+nB,MAGzErnB,GAAQA,GAAQtD,EAAIsD,GAAQQ,IAAMonB,IAAczU,GAA0B,SAAUjB,GAClFuV,GAASwC,IAAI/X,GAAa,MAAEwV,OAtNhB,WAyNZuC,IAAK,SAAa3N,GAChB,IAAIhU,EAAIhJ,KACJyqB,EAAaxC,GAAqBjf,GAClC4d,EAAU6D,EAAW7D,QACrBc,EAAS+C,EAAW/C,OACpBniB,EAASmkB,GAAQ,WACnB,IAAI3X,KACAxN,EAAQ,EACRqmB,EAAY,EAChBpM,GAAMxB,GAAU,EAAO,SAAU6J,GAC/B,IAAIgE,EAAStmB,IACTumB,GAAgB,EACpB/Y,EAAOvM,UAAKrG,GACZyrB,IACA5hB,EAAE4d,QAAQC,GAASC,KAAK,SAAU5oB,GAC5B4sB,IACJA,GAAgB,EAChB/Y,EAAO8Y,GAAU3sB,IACf0sB,GAAahE,EAAQ7U,KACtB2V,OAEHkD,GAAahE,EAAQ7U,KAGzB,OADIxM,EAAOlJ,GAAGqrB,EAAOniB,EAAOsW,GACrB4O,EAAW5D,SAGpBkE,KAAM,SAAc/N,GAClB,IAAIhU,EAAIhJ,KACJyqB,EAAaxC,GAAqBjf,GAClC0e,EAAS+C,EAAW/C,OACpBniB,EAASmkB,GAAQ,WACnBlL,GAAMxB,GAAU,EAAO,SAAU6J,GAC/B7d,EAAE4d,QAAQC,GAASC,KAAK2D,EAAW7D,QAASc,OAIhD,OADIniB,EAAOlJ,GAAGqrB,EAAOniB,EAAOsW,GACrB4O,EAAW5D,WG9QtB,IAAAmE,GAAYzuB,kFCIRE,GAAiBF,EAAwBoB,EAC7CstB,GAAiB,SAAUrqB,GACzB,IAAIsqB,EAAUvvB,EAAKyK,SAAWzK,EAAKyK,OAAS8D,MAAe/O,EAAOiL,YAC5C,KAAlBxF,EAAKuqB,OAAO,IAAevqB,KAAQsqB,GAAUzuB,GAAeyuB,EAAStqB,GAAQ1C,MAAOktB,GAAOztB,EAAEiD,wDCHnGyqB,GAAiB,SAAUtvB,GACzB,IAAIwJ,EAASkI,GAAQ1R,GACjB4kB,EAAaC,GAAKjjB,EACtB,GAAIgjB,EAKF,IAJA,IAGIjiB,EAHA4sB,EAAU3K,EAAW5kB,GACrB8kB,EAAStN,GAAI5V,EACb8E,EAAI,EAED6oB,EAAQlrB,OAASqC,GAAOoe,EAAOrjB,KAAKzB,EAAI2C,EAAM4sB,EAAQ7oB,OAAO8C,EAAOC,KAAK9G,GAChF,OAAO6G,qDCXPoB,GAAOpK,GAA0BoB,EACjCJ,MAAcA,SAEdguB,GAA+B,iBAAVjwB,QAAsBA,QAAUkB,OAAOoJ,oBAC5DpJ,OAAOoJ,oBAAoBtK,WAU/BkwB,GAAmB,SAA6BzvB,GAC9C,OAAOwvB,IAAoC,mBAArBhuB,GAASC,KAAKzB,GATjB,SAAUA,GAC7B,IACE,OAAO4K,GAAK5K,GACZ,MAAOM,GACP,OAAOkvB,GAAY1nB,SAK0C4nB,CAAe1vB,GAAM4K,GAAK9B,GAAU9I,gHCVjGkhB,GAAO1gB,GAAmByP,IAoB1BoH,GAAOmD,GAAM5Y,EACbD,GAAK2Y,EAAI1Y,EACTgJ,GAAO+kB,GAAQ/tB,EACfutB,GAAU/vB,EAAOiL,OACjBulB,GAAQxwB,EAAOywB,KACfC,GAAaF,IAASA,GAAMG,UAE5BC,GAAS3W,GAAI,WACb4W,GAAe5W,GAAI,eACnByL,MAAY9c,qBACZkoB,GAAiBhnB,GAAO,mBACxBinB,GAAajnB,GAAO,WACpBknB,GAAYlnB,GAAO,cACnB0J,GAAcnS,OAAgB,UAC9B8rB,GAA+B,mBAAX4C,GACpBkB,GAAUjxB,EAAOixB,QAEjBnQ,IAAUmQ,KAAYA,GAAiB,YAAMA,GAAiB,UAAEC,UAGhEC,GAAgB/kB,GAAeglB,EAAO,WACxC,OAES,GAFFC,GAAQ9uB,MAAO,KACpBhB,IAAK,WAAc,OAAOgB,GAAGsC,KAAM,KAAO9B,MAAO,IAAKvB,MACpDA,IACD,SAAUZ,EAAI2C,EAAKoN,GACtB,IAAI2gB,EAAYrZ,GAAKzE,GAAajQ,GAC9B+tB,UAAkB9d,GAAYjQ,GAClChB,GAAG3B,EAAI2C,EAAKoN,GACR2gB,GAAa1wB,IAAO4S,IAAajR,GAAGiR,GAAajQ,EAAK+tB,IACxD/uB,GAEAgvB,GAAO,SAAUjmB,GACnB,IAAIkmB,EAAMT,GAAWzlB,GAAO+lB,GAAQtB,GAAiB,WAErD,OADAyB,EAAIva,GAAK3L,EACFkmB,GAGLC,GAAWtE,IAAyC,iBAApB4C,GAAQhS,SAAuB,SAAUnd,GAC3E,MAAoB,iBAANA,GACZ,SAAUA,GACZ,OAAOA,aAAcmvB,IAGnB2B,GAAkB,SAAwB9wB,EAAI2C,EAAKoN,GAKrD,OAJI/P,IAAO4S,IAAake,GAAgBV,GAAWztB,EAAKoN,GACxD/N,EAAShC,GACT2C,EAAMV,EAAYU,GAAK,GACvBX,EAAS+N,GACLnM,EAAIusB,GAAYxtB,IACboN,EAAEzN,YAIDsB,EAAI5D,EAAIgwB,KAAWhwB,EAAGgwB,IAAQrtB,KAAM3C,EAAGgwB,IAAQrtB,IAAO,GAC1DoN,EAAI0gB,GAAQ1gB,GAAKzN,WAAYM,EAAW,GAAG,OAJtCgB,EAAI5D,EAAIgwB,KAASruB,GAAG3B,EAAIgwB,GAAQptB,EAAW,OAChD5C,EAAGgwB,IAAQrtB,IAAO,GAIX4tB,GAAcvwB,EAAI2C,EAAKoN,IACzBpO,GAAG3B,EAAI2C,EAAKoN,IAEnBghB,GAAoB,SAA0B/wB,EAAI8B,GACpDE,EAAShC,GAKT,IAJA,IAGI2C,EAHAsL,EAAO+iB,GAASlvB,EAAIgH,GAAUhH,IAC9B4E,EAAI,EACJ6Z,EAAItS,EAAK5J,OAENkc,EAAI7Z,GAAGoqB,GAAgB9wB,EAAI2C,EAAMsL,EAAKvH,KAAM5E,EAAEa,IACrD,OAAO3C,GAKLixB,GAAwB,SAA8BtuB,GACxD,IAAIuuB,EAAIpM,GAAOrjB,KAAKwC,KAAMtB,EAAMV,EAAYU,GAAK,IACjD,QAAIsB,OAAS2O,IAAehP,EAAIusB,GAAYxtB,KAASiB,EAAIwsB,GAAWztB,QAC7DuuB,IAAMttB,EAAIK,KAAMtB,KAASiB,EAAIusB,GAAYxtB,IAAQiB,EAAIK,KAAM+rB,KAAW/rB,KAAK+rB,IAAQrtB,KAAOuuB,IAE/FC,GAA4B,SAAkCnxB,EAAI2C,GAGpE,GAFA3C,EAAK8I,GAAU9I,GACf2C,EAAMV,EAAYU,GAAK,GACnB3C,IAAO4S,KAAehP,EAAIusB,GAAYxtB,IAASiB,EAAIwsB,GAAWztB,GAAlE,CACA,IAAIoN,EAAIsH,GAAKrX,EAAI2C,GAEjB,OADIoN,IAAKnM,EAAIusB,GAAYxtB,IAAUiB,EAAI5D,EAAIgwB,KAAWhwB,EAAGgwB,IAAQrtB,KAAOoN,EAAEzN,YAAa,GAChFyN,IAELqhB,GAAuB,SAA6BpxB,GAKtD,IAJA,IAGI2C,EAHA4G,EAAQqB,GAAK9B,GAAU9I,IACvBwJ,KACA9C,EAAI,EAED6C,EAAMlF,OAASqC,GACf9C,EAAIusB,GAAYxtB,EAAM4G,EAAM7C,OAAS/D,GAAOqtB,IAAUrtB,GAAOue,IAAM1X,EAAOC,KAAK9G,GACpF,OAAO6G,GAEP6nB,GAAyB,SAA+BrxB,GAM1D,IALA,IAII2C,EAJA2uB,EAAQtxB,IAAO4S,GACfrJ,EAAQqB,GAAK0mB,EAAQlB,GAAYtnB,GAAU9I,IAC3CwJ,KACA9C,EAAI,EAED6C,EAAMlF,OAASqC,IAChB9C,EAAIusB,GAAYxtB,EAAM4G,EAAM7C,OAAU4qB,IAAQ1tB,EAAIgP,GAAajQ,IAAc6G,EAAOC,KAAK0mB,GAAWxtB,IACxG,OAAO6G,GAIN+iB,KAYH1mB,IAXAspB,GAAU,WACR,GAAIlrB,gBAAgBkrB,GAAS,MAAMhvB,UAAU,gCAC7C,IAAIuK,EAAMtE,EAAI1B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAChDyb,EAAO,SAAU1c,GACf8B,OAAS2O,IAAaiM,EAAKpd,KAAK2uB,GAAWjuB,GAC3CyB,EAAIK,KAAM+rB,KAAWpsB,EAAIK,KAAK+rB,IAAStlB,KAAMzG,KAAK+rB,IAAQtlB,IAAO,GACrE6lB,GAActsB,KAAMyG,EAAK9H,EAAW,EAAGT,KAGzC,OADIqJ,GAAe0U,IAAQqQ,GAAc3d,GAAalI,GAAOnI,cAAc,EAAMoL,IAAKkR,IAC/E8R,GAAKjmB,KAEY,UAAG,WAAY,WACvC,OAAOzG,KAAKoS,KAGdmE,GAAM5Y,EAAIuvB,GACV7W,EAAI1Y,EAAIkvB,GACR5vB,GAA0BU,EAAI+tB,GAAQ/tB,EAAIwvB,GAC1CjwB,GAAyBS,EAAIqvB,GAC7BxZ,GAA0B7V,EAAIyvB,GAE1B7lB,IAAgBkM,IAClB7R,GAAS+M,GAAa,uBAAwBqe,IAAuB,GAGvE5B,GAAOztB,EAAI,SAAUiD,GACnB,OAAO8rB,GAAKtX,GAAIxU,MAIpBF,GAAQA,GAAQU,EAAIV,GAAQoB,EAAIpB,GAAQQ,GAAKonB,IAAcliB,OAAQ8kB,KAEnE,IAAK,IAAIoC,GAAa,iHAGpB/tB,MAAM,KAAM0K,GAAI,EAAGqjB,GAAWltB,OAAS6J,IAAGmL,GAAIkY,GAAWrjB,OAE3D,IAAK,IAAIsjB,GAAmB1nB,GAAMuP,GAAIrQ,OAAQoZ,GAAI,EAAGoP,GAAiBntB,OAAS+d,IAAIqP,GAAUD,GAAiBpP,OAE9Gzd,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAKonB,GAAY,UAE3CmF,IAAO,SAAU/uB,GACf,OAAOiB,EAAIssB,GAAgBvtB,GAAO,IAC9ButB,GAAevtB,GACfutB,GAAevtB,GAAOwsB,GAAQxsB,IAGpCgvB,OAAQ,SAAgBf,GACtB,IAAKC,GAASD,GAAM,MAAMzwB,UAAUywB,EAAM,qBAC1C,IAAK,IAAIjuB,KAAOutB,GAAgB,GAAIA,GAAevtB,KAASiuB,EAAK,OAAOjuB,GAE1EivB,UAAW,WAAc1R,IAAS,GAClC2R,UAAW,WAAc3R,IAAS,KAGpCvb,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAKonB,GAAY,UAE3C7Z,OA/FY,SAAgB1S,EAAI8B,GAChC,YAAasB,IAANtB,EAAkB2uB,GAAQzwB,GAAM+wB,GAAkBN,GAAQzwB,GAAK8B,IAgGtEpB,eAAgBowB,GAEhBtf,iBAAkBuf,GAElBzZ,yBAA0B6Z,GAE1BtnB,oBAAqBunB,GAErB9M,sBAAuB+M,KAIzBzB,IAASjrB,GAAQA,GAAQtD,EAAIsD,GAAQQ,IAAMonB,IAAciE,EAAO,WAC9D,IAAInvB,EAAI8tB,KAIR,MAA0B,UAAnBW,IAAYzuB,KAA2C,MAAxByuB,IAAalvB,EAAGS,KAAyC,MAAzByuB,GAAWrvB,OAAOY,OACrF,QACH0uB,UAAW,SAAmB/vB,GAI5B,IAHA,IAEI8xB,EAAUC,EAFV3L,GAAQpmB,GACR0G,EAAI,EAEDhC,UAAUL,OAASqC,GAAG0f,EAAK3c,KAAK/E,UAAUgC,MAEjD,GADAqrB,EAAYD,EAAW1L,EAAK,IACvBlmB,EAAS4xB,SAAoB1uB,IAAPpD,KAAoB6wB,GAAS7wB,GAMxD,OALKmT,GAAQ2e,KAAWA,EAAW,SAAUnvB,EAAKR,GAEhD,GADwB,mBAAb4vB,IAAyB5vB,EAAQ4vB,EAAUtwB,KAAKwC,KAAMtB,EAAKR,KACjE0uB,GAAS1uB,GAAQ,OAAOA,IAE/BikB,EAAK,GAAK0L,EACHhC,GAAWrrB,MAAMmrB,GAAOxJ,MAKnC+I,GAAiB,UAAEc,KAAiBtY,EAAmBwX,GAAiB,UAAGc,GAAcd,GAAiB,UAAEztB,SAE5GkO,GAAeuf,GAAS,UAExBvf,GAAepQ,KAAM,QAAQ,GAE7BoQ,GAAexQ,EAAOywB,KAAM,QAAQ,GCrOpC,IAAAmC,GAAiB,SAAU/hB,EAAK5P,GAC9B,IAAIiB,GAAM1B,EAAKa,YAAcwP,IAAQxP,OAAOwP,GACxChL,KACJA,EAAIgL,GAAO5P,EAAKiB,GAChBqD,GAAQA,GAAQtD,EAAIsD,GAAQQ,EAAI2I,EAAM,WAAcxM,EAAG,KAAQ,SAAU2D,oECNvEwc,GAAOjhB,GAAmBqhB,SAE9B3gB,GAAyB,SAAU,SAAU+wB,GAC3C,OAAO,SAAgBjyB,GACrB,OAAOiyB,GAAW/xB,EAASF,GAAMiyB,EAAQxQ,GAAKzhB,IAAOA,KCJzD,IAAIyhB,GAAOjhB,GAAmBqhB,SAE9B3gB,GAAyB,OAAQ,SAAUgxB,GACzC,OAAO,SAAclyB,GACnB,OAAOkyB,GAAShyB,EAASF,GAAMkyB,EAAMzQ,GAAKzhB,IAAOA,KCJrD,IAAIyhB,GAAOjhB,GAAmBqhB,SAE9B3gB,GAAyB,oBAAqB,SAAUymB,GACtD,OAAO,SAA2B3nB,GAChC,OAAO2nB,GAAsBznB,EAASF,GAAM2nB,EAAmBlG,GAAKzhB,IAAOA,KCH/EQ,GAAyB,WAAY,SAAU2xB,GAC7C,OAAO,SAAkBnyB,GACvB,OAAOE,EAASF,MAAMmyB,GAAYA,EAAUnyB,MCFhDQ,GAAyB,WAAY,SAAU4xB,GAC7C,OAAO,SAAkBpyB,GACvB,OAAOE,EAASF,MAAMoyB,GAAYA,EAAUpyB,MCFhDQ,GAAyB,eAAgB,SAAUgnB,GACjD,OAAO,SAAsBxnB,GAC3B,QAAOE,EAASF,MAAMwnB,GAAgBA,EAAcxnB,OCHxD,IAAImxB,GAA4B3wB,GAA0BoB,EAE1DV,GAAyB,2BAA4B,WACnD,OAAO,SAAkClB,EAAI2C,GAC3C,OAAOwuB,GAA0BroB,GAAU9I,GAAK2C,MCFpDnC,GAAyB,iBAAkB,WACzC,OAAO,SAAwBR,GAC7B,OAAOqyB,GAAgBpoB,GAASjK,OCFpCQ,GAAyB,OAAQ,WAC/B,OAAO,SAAcR,GACnB,OAAO8J,GAAMG,GAASjK,OCL1BQ,GAAyB,sBAAuB,WAC9C,OAAOU,GAA8BU,ICCvC+C,GAAQA,GAAQtD,EAAIsD,GAAQQ,EAAG,UAAYqf,OAAQhkB,KCFnD,IAAA8xB,GAAiB7xB,OAAOK,IAAM,SAAYkrB,EAAGuG,GAE3C,OAAOvG,IAAMuG,EAAU,IAANvG,GAAW,EAAIA,GAAM,EAAIuG,EAAIvG,GAAKA,GAAKuG,GAAKA,mECD/D5tB,GAAQA,GAAQtD,EAAG,UAAYP,GAAIN,KCFnC,IAAImB,GAAKnB,EAAwBoB,EAC7B4wB,GAAS9yB,SAASsE,UAClByuB,GAAS,wBACF,SAGHD,IAAUtxB,GAA6BS,GAAG6wB,GAHvC,QAITjwB,cAAc,EACd5B,IAAK,WACH,IACE,OAAQ,GAAKsD,MAAMyuB,MAAMD,IAAQ,GACjC,MAAOnyB,GACP,MAAO,OCRbqE,GAAQA,GAAQtD,EAAG,UAEjBsxB,IAAK,SAAaC,GAMhB,IALA,IAAIC,EAAM/pB,GAAU8pB,EAASD,KACzBtiB,EAAM1I,GAASkrB,EAAIxuB,QACnB6F,EAAOxF,UAAUL,OACjB8P,KACAzN,EAAI,EACD2J,EAAM3J,GACXyN,EAAI1K,KAAK1F,OAAO8uB,EAAInsB,OAChBA,EAAIwD,GAAMiK,EAAI1K,KAAK1F,OAAOW,UAAUgC,KACxC,OAAOyN,EAAIrQ,KAAK,OCbtB,IAAIgvB,GAAe/uB,OAAO+uB,aACtBC,GAAiBhvB,OAAOivB,cAG5BruB,GAAQA,GAAQtD,EAAIsD,GAAQQ,KAAO4tB,IAA2C,GAAzBA,GAAe1uB,QAAc,UAEhF2uB,cAAe,SAAuBhH,GAKpC,IAJA,IAGIiH,EAHA9e,KACAjK,EAAOxF,UAAUL,OACjBqC,EAAI,EAEDwD,EAAOxD,GAAG,CAEf,GADAusB,GAAQvuB,UAAUgC,KACdqC,GAAgBkqB,EAAM,WAAcA,EAAM,MAAMrrB,WAAWqrB,EAAO,8BACtE9e,EAAI1K,KAAKwpB,EAAO,MACZH,GAAaG,GACbH,GAAyC,QAA1BG,GAAQ,QAAY,IAAcA,EAAO,KAAQ,QAEpE,OAAO9e,EAAIrQ,KAAK,OChBtB,IAAAovB,GAAiB,SAAUC,GACzB,OAAO,SAAU/uB,EAAMgvB,GACrB,IAGIxyB,EAAG2D,EAHH8H,EAAItI,OAAOsE,GAAQjE,IACnBsC,EAAIc,GAAU4rB,GACd7S,EAAIlU,EAAEhI,OAEV,OAAIqC,EAAI,GAAKA,GAAK6Z,EAAU4S,EAAY,QAAK/vB,GAC7CxC,EAAIyL,EAAEgnB,WAAW3sB,IACN,OAAU9F,EAAI,OAAU8F,EAAI,IAAM6Z,IAAMhc,EAAI8H,EAAEgnB,WAAW3sB,EAAI,IAAM,OAAUnC,EAAI,MACxF4uB,EAAY9mB,EAAE+iB,OAAO1oB,GAAK9F,EAC1BuyB,EAAY9mB,EAAEvE,MAAMpB,EAAGA,EAAI,GAA2BnC,EAAI,OAAzB3D,EAAI,OAAU,IAAqB,0DCZxE0yB,iBAA8B,GAClC3uB,GAAQA,GAAQ7C,EAAG,UAEjByxB,YAAa,SAAqBH,GAChC,OAAOE,GAAIrvB,KAAMmvB,MCFrB,IAAAI,GAAiB,SAAgBtc,GAC/B,IAAIuc,EAAM1vB,OAAOsE,GAAQpE,OACrBkQ,EAAM,GACNgO,EAAI3a,GAAU0P,GAClB,GAAIiL,EAAI,GAAKA,GAAKlX,EAAAA,EAAU,MAAMrD,WAAW,2BAC7C,KAAMua,EAAI,GAAIA,KAAO,KAAOsR,GAAOA,GAAc,EAAJtR,IAAOhO,GAAOsf,GAC3D,OAAOtf,mECRTxP,GAAQA,GAAQ7C,EAAG,UAEjB4xB,OAAQlzB,KCDV,IAAImzB,GAAQnzB,GAAkB,SAC9BozB,GAAiB,SAAU5zB,GACzB,IAAI6zB,EACJ,OAAO3zB,EAASF,UAAmCoD,KAA1BywB,EAAW7zB,EAAG2zB,OAA0BE,EAAsB,UAAX5rB,GAAIjI,qECFlF8zB,GAAiB,SAAU1vB,EAAM2vB,EAAcrf,GAC7C,GAAImf,GAASE,GAAe,MAAM5zB,UAAU,UAAYuU,EAAO,0BAC/D,OAAO3Q,OAAOsE,GAAQjE,uDCNpBuvB,GAAQnzB,GAAkB,SAC9BwzB,GAAiB,SAAU/jB,GACzB,IAAIgkB,EAAK,IACT,IACE,MAAMhkB,GAAKgkB,GACX,MAAO3zB,GACP,IAEE,OADA2zB,EAAGN,KAAS,GACJ,MAAM1jB,GAAKgkB,GACnB,MAAOryB,KACT,OAAO,iFCJPsyB,GAAc,GAAc,WAEhCvvB,GAAQA,GAAQ7C,EAAI6C,GAAQQ,EAAI3E,GAHd,cAG0D,UAC1E2zB,WAAY,SAAoBJ,GAC9B,IAAI3vB,EAAOgwB,GAAQnwB,KAAM8vB,EALX,cAMVvrB,EAAQb,GAASnI,KAAK8H,IAAI5C,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EAAWgB,EAAKC,SAChFgwB,EAAStwB,OAAOgwB,GACpB,OAAOG,GACHA,GAAYzyB,KAAK2C,EAAMiwB,EAAQ7rB,GAC/BpE,EAAK0D,MAAMU,EAAOA,EAAQ6rB,EAAOhwB,UAAYgwB,KCVrD,IACIC,GAAY,GAAY,SAE5B3vB,GAAQA,GAAQ7C,EAAI6C,GAAQQ,EAAI3E,GAHhB,YAG0D,UACxE+zB,SAAU,SAAkBR,GAC1B,IAAI3vB,EAAOgwB,GAAQnwB,KAAM8vB,EALb,YAMRS,EAAc9vB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,EACpDiN,EAAM1I,GAASvD,EAAKC,QACpB8F,OAAsB/G,IAAhBoxB,EAA4BnkB,EAAM7Q,KAAK8H,IAAIK,GAAS6sB,GAAcnkB,GACxEgkB,EAAStwB,OAAOgwB,GACpB,OAAOO,GACHA,GAAU7yB,KAAK2C,EAAMiwB,EAAQlqB,GAC7B/F,EAAK0D,MAAMqC,EAAMkqB,EAAOhwB,OAAQ8F,KAASkqB,KCXjD1vB,GAAQA,GAAQ7C,EAAI6C,GAAQQ,EAAI3E,GAFjB,YAE0D,UACvE2d,SAAU,SAAkB4V,GAC1B,SAAUK,GAAQnwB,KAAM8vB,EAJb,YAKR9V,QAAQ8V,EAAcrvB,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MCNnE,IAAAqxB,GAAiB,WACf,IAAIrwB,EAAOpC,EAASiC,MAChBuF,EAAS,GAMb,OALIpF,EAAKhF,SAAQoK,GAAU,KACvBpF,EAAKswB,aAAYlrB,GAAU,KAC3BpF,EAAKuwB,YAAWnrB,GAAU,KAC1BpF,EAAKwwB,UAASprB,GAAU,KACxBpF,EAAKywB,SAAQrrB,GAAU,KACpBA,mECVLhJ,GAA2C,KAAd,KAAKs0B,OAAc5zB,EAAwBU,EAAEmzB,OAAO/wB,UAAW,SAC9FzB,cAAc,EACd5B,IAAKQ,KCIP,IAAA6zB,GAAiB,SAAU/kB,EAAK5L,EAAQhE,GACtC,IAAI40B,EAAS5b,GAAIpJ,GACbilB,EAAM70B,EAAKgI,GAAS4sB,EAAQ,GAAGhlB,IAC/BklB,EAAQD,EAAI,GACZE,EAAOF,EAAI,GACXpnB,EAAM,WACR,IAAIjM,KAEJ,OADAA,EAAEozB,GAAU,WAAc,OAAO,GACZ,GAAd,GAAGhlB,GAAKpO,OAEfgE,GAAS9B,OAAOC,UAAWiM,EAAKklB,GAChCtxB,EAAKkxB,OAAO/wB,UAAWixB,EAAkB,GAAV5wB,EAG3B,SAAUgxB,EAAQjiB,GAAO,OAAOgiB,EAAK3zB,KAAK4zB,EAAQpxB,KAAMmP,IAGxD,SAAUiiB,GAAU,OAAOD,EAAK3zB,KAAK4zB,EAAQpxB,0ECvBrDzD,GAAyB,QAAS,EAAG,SAAU6H,EAASsrB,EAAO2B,GAE7D,OAAQ,SAAeC,GAErB,IAAI1zB,EAAIwG,EAAQpE,MACZ3C,OAAe8B,GAAVmyB,OAAsBnyB,EAAYmyB,EAAO5B,GAClD,YAAcvwB,IAAP9B,EAAmBA,EAAGG,KAAK8zB,EAAQ1zB,GAAK,IAAIkzB,OAAOQ,GAAQ5B,GAAO5vB,OAAOlC,KAC/EyzB,KCPL90B,GAAyB,UAAW,EAAG,SAAU6H,EAASmtB,EAASC,GAEjE,OAAQ,SAAiBC,EAAaC,GAEpC,IAAI9zB,EAAIwG,EAAQpE,MACZ3C,OAAoB8B,GAAfsyB,OAA2BtyB,EAAYsyB,EAAYF,GAC5D,YAAcpyB,IAAP9B,EACHA,EAAGG,KAAKi0B,EAAa7zB,EAAG8zB,GACxBF,EAASh0B,KAAKsC,OAAOlC,GAAI6zB,EAAaC,IACzCF,KCTLj1B,GAAyB,QAAS,EAAG,SAAU6H,EAASutB,EAAOC,GAE7D,IAAIhC,EAAW3yB,GACX40B,EAASD,EACTE,KAAWtsB,KAIf,GAC+B,KAA7B,OAAa,MAAE,QAAQ,IACe,GAAtC,OAAa,MAAE,QAAS,GAAS,QACE,GAAnC,KAAW,MAAE,WAAiB,QACK,GAAnC,IAAU,MAAE,YAAkB,QAC9B,IAAU,MAAE,QAAc,OAAI,GAC9B,GAAS,MAAE,MAAY,OACvB,CACA,IAAIusB,OAA8B5yB,IAAvB,OAAO/C,KAAK,IAAI,GAE3Bw1B,EAAS,SAAUzX,EAAW6X,GAC5B,IAAIZ,EAAStxB,OAAOE,MACpB,QAAkBb,IAAdgb,GAAqC,IAAV6X,EAAa,SAE5C,IAAKpC,EAASzV,GAAY,OAAO0X,EAAOr0B,KAAK4zB,EAAQjX,EAAW6X,GAChE,IASIC,EAAYxD,EAAOyD,EAAWC,EAAY1vB,EAT1C2vB,KACAvB,GAAS1W,EAAUsW,WAAa,IAAM,KAC7BtW,EAAUuW,UAAY,IAAM,KAC5BvW,EAAUwW,QAAU,IAAM,KAC1BxW,EAAUyW,OAAS,IAAM,IAClCyB,EAAgB,EAChBC,OAAuBnzB,IAAV6yB,EAAsB,WAAaA,IAAU,EAE1DO,EAAgB,IAAIzB,OAAO3W,EAAUtZ,OAAQgwB,EAAQ,KAIzD,IADKkB,IAAME,EAAa,IAAInB,OAAO,IAAMyB,EAAc1xB,OAAS,WAAYgwB,KACrEpC,EAAQ8D,EAAcn2B,KAAKg1B,QAEhCc,EAAYzD,EAAMlqB,MAAQkqB,EAAM,GAAS,QACzB4D,IACdD,EAAO5sB,KAAK4rB,EAAOvtB,MAAMwuB,EAAe5D,EAAMlqB,SAGzCwtB,GAAQtD,EAAY,OAAI,GAAGA,EAAM,GAAG+D,QAAQP,EAAY,WAC3D,IAAKxvB,EAAI,EAAGA,EAAIhC,UAAgB,OAAI,EAAGgC,SAA0BtD,IAAjBsB,UAAUgC,KAAkBgsB,EAAMhsB,QAAKtD,KAErFsvB,EAAY,OAAI,GAAKA,EAAMlqB,MAAQ6sB,EAAa,QAAGU,EAAMtxB,MAAM4xB,EAAQ3D,EAAM5qB,MAAM,IACvFsuB,EAAa1D,EAAM,GAAS,OAC5B4D,EAAgBH,EACZE,EAAa,QAAKE,KAEpBC,EAAwB,YAAM9D,EAAMlqB,OAAOguB,EAAwB,YAKzE,OAHIF,IAAkBjB,EAAa,QAC7Be,GAAeI,EAAcpT,KAAK,KAAKiT,EAAO5sB,KAAK,IAClD4sB,EAAO5sB,KAAK4rB,EAAOvtB,MAAMwuB,IACzBD,EAAa,OAAIE,EAAaF,EAAOvuB,MAAM,EAAGyuB,GAAcF,OAG5D,IAAU,WAAEjzB,EAAW,GAAS,SACzCyyB,EAAS,SAAUzX,EAAW6X,GAC5B,YAAqB7yB,IAAdgb,GAAqC,IAAV6X,KAAmBH,EAAOr0B,KAAKwC,KAAMma,EAAW6X,KAItF,OAAQ,SAAe7X,EAAW6X,GAChC,IAAIp0B,EAAIwG,EAAQpE,MACZ3C,OAAkB8B,GAAbgb,OAAyBhb,EAAYgb,EAAUwX,GACxD,YAAcxyB,IAAP9B,EAAmBA,EAAGG,KAAK2c,EAAWvc,EAAGo0B,GAASJ,EAAOp0B,KAAKsC,OAAOlC,GAAIuc,EAAW6X,IAC1FJ,KCpELr1B,GAAyB,SAAU,EAAG,SAAU6H,EAASquB,EAAQC,GAE/D,OAAQ,SAAgBpB,GAEtB,IAAI1zB,EAAIwG,EAAQpE,MACZ3C,OAAe8B,GAAVmyB,OAAsBnyB,EAAYmyB,EAAOmB,GAClD,YAActzB,IAAP9B,EAAmBA,EAAGG,KAAK8zB,EAAQ1zB,GAAK,IAAIkzB,OAAOQ,GAAQmB,GAAQ3yB,OAAOlC,KAChF80B,KCJL,IAAAC,GAAiB,SAAUl0B,EAAQ8F,EAAOrG,GACpCqG,KAAS9F,EAAQouB,EAAgBlvB,EAAEc,EAAQ8F,EAAO5F,EAAW,EAAGT,IAC/DO,EAAO8F,GAASrG,mECIvBwC,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAK3E,GAA0B,SAAUqW,MAA8B,SAEjGI,KAAM,SAAc6H,GAClB,IAOIza,EAAQmF,EAAQ8M,EAAM6G,EAPtBtb,EAAIoI,GAAS6U,GACb7R,EAAmB,mBAARhJ,KAAqBA,KAAO+H,MACvC9B,EAAOxF,UAAUL,OACjB+Y,EAAQlT,EAAO,EAAIxF,UAAU,QAAKtB,EAClCia,OAAoBja,IAAVga,EACV5U,EAAQ,EACR8U,EAASpE,GAAUrX,GAIvB,GAFIwb,IAASD,EAAQxX,GAAIwX,EAAOlT,EAAO,EAAIxF,UAAU,QAAKtB,EAAW,SAEvDA,GAAVka,GAAyBrQ,GAAKjB,OAAS6M,GAAYyE,GAMrD,IAAK9T,EAAS,IAAIyD,EADlB5I,EAASsD,GAAS9F,EAAEwC,SACSA,EAASmE,EAAOA,IAC3CquB,GAAertB,EAAQhB,EAAO6U,EAAUD,EAAMvb,EAAE2G,GAAQA,GAAS3G,EAAE2G,SANrE,IAAK2U,EAAWG,EAAO7b,KAAKI,GAAI2H,EAAS,IAAIyD,IAAOqJ,EAAO6G,EAASxI,QAAQJ,KAAM/L,IAChFquB,GAAertB,EAAQhB,EAAO6U,EAAU5b,GAAK0b,EAAUC,GAAQ9G,EAAKnU,MAAOqG,IAAQ,GAAQ8N,EAAKnU,OASpG,OADAqH,EAAOnF,OAASmE,EACTgB,KC7BX7E,GAAQA,GAAQtD,EAAIsD,GAAQQ,EAAI3E,EAAoB,WAClD,SAAS2E,KACT,QAAS6G,MAAM2U,GAAGlf,KAAK0D,aAAcA,KACnC,SAEFwb,GAAI,WAIF,IAHA,IAAInY,EAAQ,EACR0B,EAAOxF,UAAUL,OACjBmF,EAAS,IAAoB,mBAARvF,KAAqBA,KAAO+H,OAAO9B,GACrDA,EAAO1B,GAAOquB,GAAertB,EAAQhB,EAAO9D,UAAU8D,MAE7D,OADAgB,EAAOnF,OAAS6F,EACTV,KCbX7E,GAAQA,GAAQ7C,EAAG,SAAWiV,WAAYvW,KAE1CU,GAAiC,cCFjC,IAAI41B,GAAQt2B,GAA4B,GAEpCu2B,IAAS,EADH,YAGK/qB,MAAM,GAAM,KAAE,WAAc+qB,IAAS,IACpDpyB,GAAQA,GAAQ7C,EAAI6C,GAAQQ,EAAI4xB,GAAQ,SACtClZ,KAAM,SAAc3J,GAClB,OAAO4iB,GAAM7yB,KAAMiQ,EAAYxP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,QCDV,IAAI41B,GAAQt2B,GAA4B,GAEpCu2B,IAAS,EADH,iBAGK/qB,MAAM,GAAM,UAAE,WAAc+qB,IAAS,IACpDpyB,GAAQA,GAAQ7C,EAAI6C,GAAQQ,EAAI4xB,GAAQ,SACtChZ,UAAW,SAAmB7J,GAC5B,OAAO4iB,GAAM7yB,KAAMiQ,EAAYxP,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAGzElC,GATU,aCDVyD,GAAQA,GAAQ7C,EAAG,SAAW6b,KAAMnd,KAEpCU,GAAiC,QCHjC,IAAI81B,GAAYx2B,EAAqBy2B,SAErCtyB,GAAQA,GAAQtD,EAAG,UACjB41B,SAAU,SAAkBj3B,GAC1B,MAAoB,iBAANA,GAAkBg3B,GAAUh3B,MCJ9C,IAAImH,GAAQ3H,KAAK2H,MACjB+vB,GAAiB,SAAmBl3B,GAClC,OAAQE,EAASF,IAAOi3B,SAASj3B,IAAOmH,GAAMnH,KAAQA,mECDxD2E,GAAQA,GAAQtD,EAAG,UAAY81B,UAAW32B,KCA1C,IAAI2K,GAAM3L,KAAK2L,IAEfxG,GAAQA,GAAQtD,EAAG,UACjB+1B,cAAe,SAAuB1vB,GACpC,OAAOyvB,GAAUzvB,IAAWyD,GAAIzD,IAAW,oBCJ/C/C,GAAQA,GAAQtD,EAAG,UACjBgG,MAAO,SAAeK,GAEpB,OAAOA,GAAUA,KCHrB/C,GAAQA,GAAQtD,EAAG,UAAYg2B,QAAS73B,KAAK4L,IAAI,GAAI,MCArDzG,GAAQA,GAAQtD,EAAG,UAAYi2B,kBAAmB,mBCAlD3yB,GAAQA,GAAQtD,EAAG,UAAYk2B,iBAAkB,mBCFjD,IAAAC,GAAiBh4B,KAAKi4B,OAAS,SAAezL,GAC5C,OAAQA,GAAKA,IAAM,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAIxsB,KAAK6L,IAAI,EAAI2gB,oECCjE0L,GAAOl4B,KAAKk4B,KACZC,GAASn4B,KAAKo4B,MAElBjzB,GAAQA,GAAQtD,EAAIsD,GAAQQ,IAAMwyB,IAEW,KAAxCn4B,KAAK2H,MAAMwwB,GAAOE,OAAOC,aAEzBH,GAAO1sB,EAAAA,IAAaA,EAAAA,GACtB,QACD2sB,MAAO,SAAe5L,GACpB,OAAQA,GAAKA,GAAK,EAAIxf,IAAMwf,EAAI,kBAC5BxsB,KAAK6L,IAAI2gB,GAAKxsB,KAAK8L,IACnBmsB,GAAMzL,EAAI,EAAI0L,GAAK1L,EAAI,GAAK0L,GAAK1L,EAAI,OCb7C,IAAI+L,GAASv4B,KAAKw4B,MAOlBrzB,GAAQA,GAAQtD,EAAIsD,GAAQQ,IAAM4yB,IAAU,EAAIA,GAAO,GAAK,GAAI,QAAUC,MAL1E,SAASA,EAAMhM,GACb,OAAQiL,SAASjL,GAAKA,IAAW,GAALA,EAAaA,EAAI,GAAKgM,GAAOhM,GAAKxsB,KAAK6L,IAAI2gB,EAAIxsB,KAAKk4B,KAAK1L,EAAIA,EAAI,IAAxDA,KCHvC,IAAIiM,GAASz4B,KAAK04B,MAGlBvzB,GAAQA,GAAQtD,EAAIsD,GAAQQ,IAAM8yB,IAAU,EAAIA,IAAQ,GAAK,GAAI,QAC/DC,MAAO,SAAelM,GACpB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIxsB,KAAK6L,KAAK,EAAI2gB,IAAM,EAAIA,IAAM,KCN7D,IAAAmM,GAAiB34B,KAAK44B,MAAQ,SAAcpM,GAE1C,OAAmB,IAAXA,GAAKA,IAAWA,GAAKA,EAAIA,EAAIA,EAAI,GAAK,EAAI,mECCpDrnB,GAAQA,GAAQtD,EAAG,QACjBg3B,KAAM,SAAcrM,GAClB,OAAOoM,GAAKpM,GAAKA,GAAKxsB,KAAK4L,IAAI5L,KAAK2L,IAAI6gB,GAAI,EAAI,MCHpDrnB,GAAQA,GAAQtD,EAAG,QACjBi3B,MAAO,SAAetM,GACpB,OAAQA,KAAO,GAAK,GAAKxsB,KAAK2H,MAAM3H,KAAK6L,IAAI2gB,EAAI,IAAOxsB,KAAK+4B,OAAS,MCH1E,IAAItzB,GAAMzF,KAAKyF,IAEfN,GAAQA,GAAQtD,EAAG,QACjBm3B,KAAM,SAAcxM,GAClB,OAAQ/mB,GAAI+mB,GAAKA,GAAK/mB,IAAK+mB,IAAM,KCLrC,IAAIyM,GAASj5B,KAAKk5B,MAClBC,IAAmBF,IAEdA,GAAO,IAAM,oBAAsBA,GAAO,IAAM,qBAE7B,OAAnBA,IAAQ,OACT,SAAezM,GACjB,OAAmB,IAAXA,GAAKA,GAAUA,EAAIA,GAAK,MAAQA,EAAI,KAAOA,EAAIA,EAAIA,EAAI,EAAIxsB,KAAKyF,IAAI+mB,GAAK,GAC/EyM,mECLJ9zB,GAAQA,GAAQtD,EAAIsD,GAAQQ,GAAKszB,IAAUj5B,KAAKk5B,OAAQ,QAAUA,MAAOD,KCFzE,IAAIrtB,GAAM5L,KAAK4L,IACXisB,GAAUjsB,GAAI,GAAI,IAClBwtB,GAAYxtB,GAAI,GAAI,IACpBytB,GAAQztB,GAAI,EAAG,MAAQ,EAAIwtB,IAC3BE,GAAQ1tB,GAAI,GAAI,KAMpB2tB,GAAiBv5B,KAAKw5B,QAAU,SAAgBhN,GAC9C,IAEIprB,EAAG4I,EAFHyvB,EAAOz5B,KAAK2L,IAAI6gB,GAChBkN,EAAQd,GAAKpM,GAEjB,OAAIiN,EAAOH,GAAcI,GAAwBD,EAAOH,GAAQF,GAPrD,EAAIvB,GAAU,EAAIA,IAOgDyB,GAAQF,IAErFpvB,GADA5I,GAAK,EAAIg4B,GAAYvB,IAAW4B,IAClBr4B,EAAIq4B,IAELJ,IAASrvB,GAAUA,EAAe0vB,GAAQjuB,EAAAA,GAChDiuB,EAAQ1vB,mEClBjB7E,GAAQA,GAAQtD,EAAG,QAAU23B,OAAQx4B,KCDrC,IAAI2K,GAAM3L,KAAK2L,IAEfxG,GAAQA,GAAQtD,EAAG,QACjB83B,MAAO,SAAeC,EAAQC,GAM5B,IALA,IAIIjmB,EAAKkmB,EAJLC,EAAM,EACN7yB,EAAI,EACJwD,EAAOxF,UAAUL,OACjBm1B,EAAO,EAEJ9yB,EAAIwD,GAELsvB,GADJpmB,EAAMjI,GAAIzG,UAAUgC,QAGlB6yB,EAAMA,GADND,EAAME,EAAOpmB,GACKkmB,EAAM,EACxBE,EAAOpmB,GAGPmmB,GAFSnmB,EAAM,GACfkmB,EAAMlmB,EAAMomB,GACCF,EACDlmB,EAEhB,OAAOomB,IAASvuB,EAAAA,EAAWA,EAAAA,EAAWuuB,EAAOh6B,KAAKk4B,KAAK6B,MCpB3D,IAAIE,GAAQj6B,KAAKk6B,KAGjB/0B,GAAQA,GAAQtD,EAAIsD,GAAQQ,EAAI3E,EAAoB,WAClD,OAAgC,GAAzBi5B,GAAM,WAAY,IAA4B,GAAhBA,GAAMp1B,SACzC,QACFq1B,KAAM,SAAc1N,EAAGuG,GACrB,IACIoH,GAAM3N,EACN4N,GAAMrH,EACNsH,EAHS,MAGKF,EACdG,EAJS,MAIKF,EAClB,OAAO,EAAIC,EAAKC,IALH,MAKmBH,IAAO,IAAMG,EAAKD,GALrC,MAKoDD,IAAO,KAAO,KAAO,MCX1Fj1B,GAAQA,GAAQtD,EAAG,QAAUo2B,MAAOj3B,KCApCmE,GAAQA,GAAQtD,EAAG,QACjB04B,MAAO,SAAe/N,GACpB,OAAOxsB,KAAK6L,IAAI2gB,GAAKxsB,KAAKw6B,UCF9Br1B,GAAQA,GAAQtD,EAAG,QACjB44B,KAAM,SAAcjO,GAClB,OAAOxsB,KAAK6L,IAAI2gB,GAAKxsB,KAAK8L,OCF9B3G,GAAQA,GAAQtD,EAAG,QAAU+2B,KAAM53B,KCAnC,IAAIyE,GAAMzF,KAAKyF,IAGfN,GAAQA,GAAQtD,EAAIsD,GAAQQ,EAAI3E,EAAoB,WAClD,OAA8B,QAAtBhB,KAAK06B,MAAM,SACjB,QACFA,KAAM,SAAclO,GAClB,OAAOxsB,KAAK2L,IAAI6gB,GAAKA,GAAK,GACrB0M,GAAM1M,GAAK0M,IAAO1M,IAAM,GACxB/mB,GAAI+mB,EAAI,GAAK/mB,IAAK+mB,EAAI,KAAOxsB,KAAK0xB,EAAI,MCT/C,IAAIjsB,GAAMzF,KAAKyF,IAEfN,GAAQA,GAAQtD,EAAG,QACjB84B,KAAM,SAAcnO,GAClB,IAAIprB,EAAI83B,GAAM1M,GAAKA,GACfznB,EAAIm0B,IAAO1M,GACf,OAAOprB,GAAKqK,EAAAA,EAAW,EAAI1G,GAAK0G,EAAAA,GAAY,GAAKrK,EAAI2D,IAAMU,GAAI+mB,GAAK/mB,IAAK+mB,OCN7ErnB,GAAQA,GAAQtD,EAAG,QACjB+4B,MAAO,SAAep6B,GACpB,OAAQA,EAAK,EAAIR,KAAK2H,MAAQ3H,KAAK0H,MAAMlH,MCF7C,IAAIq6B,GAAY75B,IAA6B,GAE7CmE,GAAQA,GAAQ7C,EAAG,SACjBqc,SAAU,SAAkBvV,GAC1B,OAAOyxB,GAAUp2B,KAAM2E,EAAIlE,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,MAIrElC,GAAiC,YCTjC,IAAI4jB,GAAStkB,GAAyBoB,EACtC04B,GAAiB,SAAUC,GACzB,OAAO,SAAUv6B,GAOf,IANA,IAKI2C,EALAd,EAAIiH,GAAU9I,GACdiO,EAAOyD,GAAQ7P,GACfwC,EAAS4J,EAAK5J,OACdqC,EAAI,EACJ8C,KAEGnF,EAASqC,GAAOoe,GAAOrjB,KAAKI,EAAGc,EAAMsL,EAAKvH,OAC/C8C,EAAOC,KAAK8wB,GAAa53B,EAAKd,EAAEc,IAAQd,EAAEc,IAC1C,OAAO6G,oECXTgxB,GAAUh6B,IAA8B,GAE5CmE,GAAQA,GAAQtD,EAAG,UACjB2U,OAAQ,SAAgBhW,GACtB,OAAOw6B,GAAQx6B,MCJnB,IAAI6V,GAAWrV,IAA8B,GAE7CmE,GAAQA,GAAQtD,EAAG,UACjB0U,QAAS,SAAiB/V,GACxB,OAAO6V,GAAS7V,MCCpB2E,GAAQA,GAAQtD,EAAG,UACjBo5B,0BAA2B,SAAmC/3B,GAO5D,IANA,IAKIC,EAAKwc,EALLtd,EAAIiH,GAAUpG,GACdg4B,EAAUrjB,GAAKzV,EACfqM,EAAOyZ,GAAQ7lB,GACf2H,KACA9C,EAAI,EAEDuH,EAAK5J,OAASqC,QAENtD,KADb+b,EAAOub,EAAQ74B,EAAGc,EAAMsL,EAAKvH,QACLmwB,GAAertB,EAAQ7G,EAAKwc,GAEtD,OAAO3V,KCdX,IAAAmxB,GAAiB,SAAUv2B,EAAMw2B,EAAWC,EAAYC,GACtD,IAAIz5B,EAAI0C,OAAOsE,GAAQjE,IACnB22B,EAAe15B,EAAEgD,OACjB22B,OAAyB53B,IAAfy3B,EAA2B,IAAM92B,OAAO82B,GAClDI,EAAetzB,GAASizB,GAC5B,GAAIK,GAAgBF,GAA2B,IAAXC,EAAe,OAAO35B,EAC1D,IAAI65B,EAAUD,EAAeF,EACzBI,EAAezH,GAAOjyB,KAAKu5B,EAASx7B,KAAK0H,KAAKg0B,EAAUF,EAAQ32B,SAEpE,OADI82B,EAAa92B,OAAS62B,IAASC,EAAeA,EAAarzB,MAAM,EAAGozB,IACjEJ,EAAOK,EAAe95B,EAAIA,EAAI85B,qDCbnCxQ,GAAYvrB,EAAOurB,UAEvByQ,GAAiBzQ,IAAaA,GAAU0Q,WAAa,iFCIrD12B,GAAQA,GAAQ7C,EAAI6C,GAAQQ,EAAI,oCAAoCie,KAAKiY,IAAY,UACnFC,SAAU,SAAkBV,GAC1B,OAAOW,GAAKt3B,KAAM22B,EAAWl2B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCFlFuB,GAAQA,GAAQ7C,EAAI6C,GAAQQ,EAAI,oCAAoCie,KAAKiY,IAAY,UACnFG,OAAQ,SAAgBZ,GACtB,OAAOW,GAAKt3B,KAAM22B,EAAWl2B,UAAUL,OAAS,EAAIK,UAAU,QAAKtB,GAAW,MCLlF,IAAI0E,MAAWA,MACX2zB,GAAO,WAAWrY,KAAKiY,IACvB1K,GAAO,SAAUhjB,GACnB,OAAO,SAAUrM,EAAIo6B,GACnB,IAAIC,EAAYj3B,UAAUL,OAAS,EAC/B+hB,IAAOuV,GAAY7zB,GAAMrG,KAAKiD,UAAW,GAC7C,OAAOiJ,EAAIguB,EAAY,YAEP,mBAANr6B,EAAmBA,EAAK5B,SAAS4B,IAAKmD,MAAMR,KAAMmiB,IACxD9kB,EAAIo6B,KAGZ/2B,GAAQA,GAAQU,EAAIV,GAAQc,EAAId,GAAQQ,EAAIs2B,IAC1C/R,WAAYiH,GAAKvxB,EAAOsqB,YACxBkS,YAAajL,GAAKvxB,EAAOw8B,eChB3Bj3B,GAAQA,GAAQU,EAAIV,GAAQc,GAC1B4iB,aAAcwT,GAAMluB,IACpB4a,eAAgBsT,GAAMnZ,QCyCxB,IAtCA,IAAIzR,GAAWoI,GAAI,YACfyiB,GAAgBziB,GAAI,eACpB0iB,GAAc3qB,GAAUpF,MAExBgwB,IACFC,aAAa,EACbC,qBAAqB,EACrBC,cAAc,EACdC,gBAAgB,EAChBC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,sBAAsB,EACtBC,UAAU,EACVC,mBAAmB,EACnBC,gBAAgB,EAChBC,iBAAiB,EACjBC,mBAAmB,EACnBC,WAAW,EACXC,eAAe,EACfC,cAAc,EACdC,UAAU,EACVC,kBAAkB,EAClBC,QAAQ,EACRC,aAAa,EACbC,eAAe,EACfC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,eAAe,EACfC,kBAAkB,EAClBC,kBAAkB,EAClBC,gBAAgB,EAChBC,kBAAkB,EAClBC,eAAe,EACfC,WAAW,GAGJC,GAActsB,GAAQsqB,IAAet1B,GAAI,EAAGA,GAAIs3B,GAAY35B,OAAQqC,KAAK,CAChF,IAII/D,GAJA+R,GAAOspB,GAAYt3B,IACnBu3B,GAAWjC,GAAatnB,IACxBwpB,GAAa9+B,EAAOsV,IACpBc,GAAQ0oB,IAAcA,GAAWl6B,UAErC,GAAIwR,KACGA,GAAMvE,KAAWpN,EAAK2R,GAAOvE,GAAU8qB,IACvCvmB,GAAMsmB,KAAgBj4B,EAAK2R,GAAOsmB,GAAepnB,IACtDtD,GAAUsD,IAAQqnB,GACdkC,IAAU,IAAKt7B,MAAOoc,GAAiBvJ,GAAM7S,KAAMkD,GAAS2P,GAAO7S,GAAKoc,GAAWpc,KAAM,kBC7ChG,SAAUvD,GAGT,IAEIgE,EAFA+6B,EAAK19B,OAAOuD,UACZo6B,EAASD,EAAGt7B,eAEZssB,EAA4B,mBAAX9kB,OAAwBA,UACzCg0B,EAAiBlP,EAAQhS,UAAY,aACrCmhB,EAAsBnP,EAAQoP,eAAiB,kBAC/CC,EAAoBrP,EAAQsP,aAAe,gBAG3CC,EAAUt/B,EAAOu/B,mBACrB,GAAID,EAIAr/B,EAAAC,QAAiBo/B,MAJrB,EAaAA,EAAUt/B,EAAOu/B,mBAAgCt/B,EAAOC,SAchDqxB,KAAOA,EAoBf,IAAIiO,EAAyB,iBACzBC,EAAyB,iBACzBC,EAAoB,YACpBC,EAAoB,YAIpBC,KAYAxqB,KACJA,EAAkB6pB,GAAkB,WAClC,OAAOp6B,MAGT,IAAIsjB,EAAW9mB,OAAOqS,eAClBmsB,EAA0B1X,GAAYA,EAASA,EAASvR,QACxDipB,GACAA,IAA4Bd,GAC5BC,EAAO38B,KAAKw9B,EAAyBZ,KAGvC7pB,EAAoByqB,GAGtB,IAAIC,EAAKC,EAA2Bn7B,UAClCo7B,EAAUp7B,UAAYvD,OAAOiS,OAAO8B,GACtC6qB,EAAkBr7B,UAAYk7B,EAAG9wB,YAAc+wB,EAC/CA,EAA2B/wB,YAAcixB,EACzCF,EAA2BX,GACzBa,EAAkBC,YAAc,oBAYlCZ,EAAQa,oBAAsB,SAASC,GACrC,IAAIC,EAAyB,mBAAXD,GAAyBA,EAAOpxB,YAClD,QAAOqxB,IACHA,IAASJ,GAG2B,uBAAnCI,EAAKH,aAAeG,EAAK56B,QAIhC65B,EAAQgB,KAAO,SAASF,GAUtB,OATI/+B,OAAO0iB,eACT1iB,OAAO0iB,eAAeqc,EAAQL,IAE9BK,EAAOlc,UAAY6b,EACbX,KAAqBgB,IACzBA,EAAOhB,GAAqB,sBAGhCgB,EAAOx7B,UAAYvD,OAAOiS,OAAOwsB,GAC1BM,GAOTd,EAAQiB,MAAQ,SAASvsB,GACvB,OAASwsB,QAASxsB,IAkFpBysB,EAAsBC,EAAc97B,WACpC87B,EAAc97B,UAAUs6B,GAAuB,WAC7C,OAAOr6B,MAETy6B,EAAQoB,cAAgBA,EAKxBpB,EAAQqB,MAAQ,SAASC,EAASC,EAASxgC,EAAMygC,GAC/C,IAAIrpB,EAAO,IAAIipB,EACbnP,EAAKqP,EAASC,EAASxgC,EAAMygC,IAG/B,OAAOxB,EAAQa,oBAAoBU,GAC/BppB,EACAA,EAAKlC,OAAOoW,KAAK,SAASvhB,GACxB,OAAOA,EAAO+K,KAAO/K,EAAOrH,MAAQ0U,EAAKlC,UAsKjDkrB,EAAsBX,GAEtBA,EAAGV,GAAqB,YAOxBU,EAAGb,GAAkB,WACnB,OAAOp6B,MAGTi7B,EAAG19B,SAAW,WACZ,MAAO,sBAkCTk9B,EAAQzwB,KAAO,SAASvL,GACtB,IAAIuL,KACJ,IAAK,IAAItL,KAAOD,EACduL,EAAKxE,KAAK9G,GAMZ,OAJAsL,EAAKP,UAIE,SAASiH,IACd,KAAO1G,EAAK5J,QAAQ,CAClB,IAAI1B,EAAMsL,EAAKkyB,MACf,GAAIx9B,KAAOD,EAGT,OAFAiS,EAAKxS,MAAQQ,EACbgS,EAAKJ,MAAO,EACLI,EAQX,OADAA,EAAKJ,MAAO,EACLI,IAsCX+pB,EAAQ1oB,OAASA,EAMjBoqB,EAAQp8B,WACNoK,YAAagyB,EAEbC,MAAO,SAASC,GAcd,GAbAr8B,KAAK6e,KAAO,EACZ7e,KAAK0Q,KAAO,EAGZ1Q,KAAKs8B,KAAOt8B,KAAKu8B,MAAQp9B,EACzBa,KAAKsQ,MAAO,EACZtQ,KAAKw8B,SAAW,KAEhBx8B,KAAK2hB,OAAS,OACd3hB,KAAKmP,IAAMhQ,EAEXa,KAAKy8B,WAAW1iB,QAAQ2iB,IAEnBL,EACH,IAAK,IAAIz7B,KAAQZ,KAEQ,MAAnBY,EAAKuqB,OAAO,IACZgP,EAAO38B,KAAKwC,KAAMY,KACjBwC,OAAOxC,EAAKiD,MAAM,MACrB7D,KAAKY,GAAQzB,IAMrBw9B,KAAM,WACJ38B,KAAKsQ,MAAO,EAEZ,IACIssB,EADY58B,KAAKy8B,WAAW,GACLI,WAC3B,GAAwB,UAApBD,EAAWj8B,KACb,MAAMi8B,EAAWztB,IAGnB,OAAOnP,KAAK88B,MAGdC,kBAAmB,SAASC,GAC1B,GAAIh9B,KAAKsQ,KACP,MAAM0sB,EAGR,IAAI7M,EAAUnwB,KACd,SAASi9B,EAAOC,EAAKC,GAYnB,OAXAC,EAAOz8B,KAAO,QACdy8B,EAAOjuB,IAAM6tB,EACb7M,EAAQzf,KAAOwsB,EAEXC,IAGFhN,EAAQxO,OAAS,OACjBwO,EAAQhhB,IAAMhQ,KAGNg+B,EAGZ,IAAK,IAAI16B,EAAIzC,KAAKy8B,WAAWr8B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIub,EAAQhe,KAAKy8B,WAAWh6B,GACxB26B,EAASpf,EAAM6e,WAEnB,GAAqB,SAAjB7e,EAAMqf,OAIR,OAAOJ,EAAO,OAGhB,GAAIjf,EAAMqf,QAAUr9B,KAAK6e,KAAM,CAC7B,IAAIye,EAAWnD,EAAO38B,KAAKwgB,EAAO,YAC9Buf,EAAapD,EAAO38B,KAAKwgB,EAAO,cAEpC,GAAIsf,GAAYC,EAAY,CAC1B,GAAIv9B,KAAK6e,KAAOb,EAAMwf,SACpB,OAAOP,EAAOjf,EAAMwf,UAAU,GACzB,GAAIx9B,KAAK6e,KAAOb,EAAMyf,WAC3B,OAAOR,EAAOjf,EAAMyf,iBAGjB,GAAIH,GACT,GAAIt9B,KAAK6e,KAAOb,EAAMwf,SACpB,OAAOP,EAAOjf,EAAMwf,UAAU,OAG3B,CAAA,IAAID,EAMT,MAAM,IAAIG,MAAM,0CALhB,GAAI19B,KAAK6e,KAAOb,EAAMyf,WACpB,OAAOR,EAAOjf,EAAMyf,gBAU9BE,OAAQ,SAASh9B,EAAMwO,GACrB,IAAK,IAAI1M,EAAIzC,KAAKy8B,WAAWr8B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIub,EAAQhe,KAAKy8B,WAAWh6B,GAC5B,GAAIub,EAAMqf,QAAUr9B,KAAK6e,MACrBsb,EAAO38B,KAAKwgB,EAAO,eACnBhe,KAAK6e,KAAOb,EAAMyf,WAAY,CAChC,IAAIG,EAAe5f,EACnB,OAIA4f,IACU,UAATj9B,GACS,aAATA,IACDi9B,EAAaP,QAAUluB,GACvBA,GAAOyuB,EAAaH,aAGtBG,EAAe,MAGjB,IAAIR,EAASQ,EAAeA,EAAaf,cAIzC,OAHAO,EAAOz8B,KAAOA,EACdy8B,EAAOjuB,IAAMA,EAETyuB,GACF59B,KAAK2hB,OAAS,OACd3hB,KAAK0Q,KAAOktB,EAAaH,WAClB1C,GAGF/6B,KAAK69B,SAAST,IAGvBS,SAAU,SAAST,EAAQU,GACzB,GAAoB,UAAhBV,EAAOz8B,KACT,MAAMy8B,EAAOjuB,IAcf,MAXoB,UAAhBiuB,EAAOz8B,MACS,aAAhBy8B,EAAOz8B,KACTX,KAAK0Q,KAAO0sB,EAAOjuB,IACM,WAAhBiuB,EAAOz8B,MAChBX,KAAK88B,KAAO98B,KAAKmP,IAAMiuB,EAAOjuB,IAC9BnP,KAAK2hB,OAAS,SACd3hB,KAAK0Q,KAAO,OACa,WAAhB0sB,EAAOz8B,MAAqBm9B,IACrC99B,KAAK0Q,KAAOotB,GAGP/C,GAGTgD,OAAQ,SAASN,GACf,IAAK,IAAIh7B,EAAIzC,KAAKy8B,WAAWr8B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIub,EAAQhe,KAAKy8B,WAAWh6B,GAC5B,GAAIub,EAAMyf,aAAeA,EAGvB,OAFAz9B,KAAK69B,SAAS7f,EAAM6e,WAAY7e,EAAM8f,UACtCpB,EAAc1e,GACP+c,IAKbvQ,MAAS,SAAS6S,GAChB,IAAK,IAAI56B,EAAIzC,KAAKy8B,WAAWr8B,OAAS,EAAGqC,GAAK,IAAKA,EAAG,CACpD,IAAIub,EAAQhe,KAAKy8B,WAAWh6B,GAC5B,GAAIub,EAAMqf,SAAWA,EAAQ,CAC3B,IAAID,EAASpf,EAAM6e,WACnB,GAAoB,UAAhBO,EAAOz8B,KAAkB,CAC3B,IAAIq9B,EAASZ,EAAOjuB,IACpButB,EAAc1e,GAEhB,OAAOggB,GAMX,MAAM,IAAIN,MAAM,0BAGlBO,cAAe,SAASjhB,EAAUkhB,EAAYC,GAa5C,OAZAn+B,KAAKw8B,UACHtjB,SAAUnH,EAAOiL,GACjBkhB,WAAYA,EACZC,QAASA,GAGS,SAAhBn+B,KAAK2hB,SAGP3hB,KAAKmP,IAAMhQ,GAGN47B,IA/qBX,SAASrO,EAAKqP,EAASC,EAASxgC,EAAMygC,GAEpC,IAAImC,EAAiBpC,GAAWA,EAAQj8B,qBAAqBo7B,EAAYa,EAAUb,EAC/EkD,EAAY7hC,OAAOiS,OAAO2vB,EAAer+B,WACzCowB,EAAU,IAAIgM,EAAQF,OAM1B,OAFAoC,EAAUnc,QA8MZ,SAA0B6Z,EAASvgC,EAAM20B,GACvC,IAAImO,EAAQ3D,EAEZ,OAAO,SAAgBhZ,EAAQxS,GAC7B,GAAImvB,IAAUzD,EACZ,MAAM,IAAI6C,MAAM,gCAGlB,GAAIY,IAAUxD,EAAmB,CAC/B,GAAe,UAAXnZ,EACF,MAAMxS,EAKR,OAAOovB,IAMT,IAHApO,EAAQxO,OAASA,EACjBwO,EAAQhhB,IAAMA,IAED,CACX,IAAIqtB,EAAWrM,EAAQqM,SACvB,GAAIA,EAAU,CACZ,IAAIgC,EAAiBC,EAAoBjC,EAAUrM,GACnD,GAAIqO,EAAgB,CAClB,GAAIA,IAAmBzD,EAAkB,SACzC,OAAOyD,GAIX,GAAuB,SAAnBrO,EAAQxO,OAGVwO,EAAQmM,KAAOnM,EAAQoM,MAAQpM,EAAQhhB,SAElC,GAAuB,UAAnBghB,EAAQxO,OAAoB,CACrC,GAAI2c,IAAU3D,EAEZ,MADA2D,EAAQxD,EACF3K,EAAQhhB,IAGhBghB,EAAQ4M,kBAAkB5M,EAAQhhB,SAEN,WAAnBghB,EAAQxO,QACjBwO,EAAQwN,OAAO,SAAUxN,EAAQhhB,KAGnCmvB,EAAQzD,EAER,IAAIuC,EAASsB,EAAS3C,EAASvgC,EAAM20B,GACrC,GAAoB,WAAhBiN,EAAOz8B,KAAmB,CAO5B,GAJA29B,EAAQnO,EAAQ7f,KACZwqB,EACAF,EAEAwC,EAAOjuB,MAAQ4rB,EACjB,SAGF,OACE78B,MAAOk/B,EAAOjuB,IACdmB,KAAM6f,EAAQ7f,MAGS,UAAhB8sB,EAAOz8B,OAChB29B,EAAQxD,EAGR3K,EAAQxO,OAAS,QACjBwO,EAAQhhB,IAAMiuB,EAAOjuB,OAtRPwvB,CAAiB5C,EAASvgC,EAAM20B,GAE7CkO,EAcT,SAASK,EAASrhC,EAAIuhC,EAAKzvB,GACzB,IACE,OAASxO,KAAM,SAAUwO,IAAK9R,EAAGG,KAAKohC,EAAKzvB,IAC3C,MAAOkb,GACP,OAAS1pB,KAAM,QAASwO,IAAKkb,IAiBjC,SAAS8Q,KACT,SAASC,KACT,SAASF,KA4BT,SAASU,EAAsB77B,IAC5B,OAAQ,QAAS,UAAUga,QAAQ,SAAS4H,GAC3C5hB,EAAU4hB,GAAU,SAASxS,GAC3B,OAAOnP,KAAKkiB,QAAQP,EAAQxS,MAoClC,SAAS0sB,EAAcwC,GACrB,SAAS1b,EAAOhB,EAAQxS,EAAKyX,EAASc,GACpC,IAAI0V,EAASsB,EAASL,EAAU1c,GAAS0c,EAAWlvB,GACpD,GAAoB,UAAhBiuB,EAAOz8B,KAEJ,CACL,IAAI4E,EAAS63B,EAAOjuB,IAChBjR,EAAQqH,EAAOrH,MACnB,OAAIA,GACiB,iBAAVA,GACPi8B,EAAO38B,KAAKU,EAAO,WACd6nB,QAAQa,QAAQ1oB,EAAMy9B,SAAS7U,KAAK,SAAS5oB,GAClDykB,EAAO,OAAQzkB,EAAO0oB,EAASc,IAC9B,SAAS2C,GACV1H,EAAO,QAAS0H,EAAKzD,EAASc,KAI3B3B,QAAQa,QAAQ1oB,GAAO4oB,KAAK,SAAS+X,GAgB1Ct5B,EAAOrH,MAAQ2gC,EACfjY,EAAQrhB,IACPmiB,GAhCHA,EAAO0V,EAAOjuB,KAwClB,IAAI2vB,EAJ0B,iBAAnB3jC,EAAO+oB,SAAwB/oB,EAAO+oB,QAAQqC,SACvD5D,EAASxnB,EAAO+oB,QAAQqC,OAAOhE,KAAKI,IAmCtC3iB,KAAKkiB,QA9BL,SAAiBP,EAAQxS,GACvB,SAAS4vB,IACP,OAAO,IAAIhZ,QAAQ,SAASa,EAASc,GACnC/E,EAAOhB,EAAQxS,EAAKyX,EAASc,KAIjC,OAAOoX,EAaLA,EAAkBA,EAAgBhY,KAChCiY,EAGAA,GACEA,KA+GV,SAASN,EAAoBjC,EAAUrM,GACrC,IAAIxO,EAAS6a,EAAStjB,SAASiX,EAAQxO,QACvC,GAAIA,IAAWxiB,EAAW,CAKxB,GAFAgxB,EAAQqM,SAAW,KAEI,UAAnBrM,EAAQxO,OAAoB,CAC9B,GAAI6a,EAAStjB,SAAS8lB,SAGpB7O,EAAQxO,OAAS,SACjBwO,EAAQhhB,IAAMhQ,EACds/B,EAAoBjC,EAAUrM,GAEP,UAAnBA,EAAQxO,QAGV,OAAOoZ,EAIX5K,EAAQxO,OAAS,QACjBwO,EAAQhhB,IAAM,IAAIjT,UAChB,kDAGJ,OAAO6+B,EAGT,IAAIqC,EAASsB,EAAS/c,EAAQ6a,EAAStjB,SAAUiX,EAAQhhB,KAEzD,GAAoB,UAAhBiuB,EAAOz8B,KAIT,OAHAwvB,EAAQxO,OAAS,QACjBwO,EAAQhhB,IAAMiuB,EAAOjuB,IACrBghB,EAAQqM,SAAW,KACZzB,EAGT,IAAIkE,EAAO7B,EAAOjuB,IAElB,OAAM8vB,EAOFA,EAAK3uB,MAGP6f,EAAQqM,EAAS0B,YAAce,EAAK/gC,MAGpCiyB,EAAQzf,KAAO8rB,EAAS2B,QAQD,WAAnBhO,EAAQxO,SACVwO,EAAQxO,OAAS,OACjBwO,EAAQhhB,IAAMhQ,GAUlBgxB,EAAQqM,SAAW,KACZzB,GANEkE,GA3BP9O,EAAQxO,OAAS,QACjBwO,EAAQhhB,IAAM,IAAIjT,UAAU,oCAC5Bi0B,EAAQqM,SAAW,KACZzB,GAoDX,SAASmE,EAAaC,GACpB,IAAInhB,GAAUqf,OAAQ8B,EAAK,IAEvB,KAAKA,IACPnhB,EAAMwf,SAAW2B,EAAK,IAGpB,KAAKA,IACPnhB,EAAMyf,WAAa0B,EAAK,GACxBnhB,EAAM8f,SAAWqB,EAAK,IAGxBn/B,KAAKy8B,WAAWj3B,KAAKwY,GAGvB,SAAS0e,EAAc1e,GACrB,IAAIof,EAASpf,EAAM6e,eACnBO,EAAOz8B,KAAO,gBACPy8B,EAAOjuB,IACd6O,EAAM6e,WAAaO,EAGrB,SAASjB,EAAQF,GAIfj8B,KAAKy8B,aAAgBY,OAAQ,SAC7BpB,EAAYliB,QAAQmlB,EAAcl/B,MAClCA,KAAKo8B,OAAM,GA8Bb,SAASrqB,EAAOiL,GACd,GAAIA,EAAU,CACZ,IAAIoiB,EAAiBpiB,EAASod,GAC9B,GAAIgF,EACF,OAAOA,EAAe5hC,KAAKwf,GAG7B,GAA6B,mBAAlBA,EAAStM,KAClB,OAAOsM,EAGT,IAAK5Z,MAAM4Z,EAAS5c,QAAS,CAC3B,IAAIqC,GAAK,EAAGiO,EAAO,SAASA,IAC1B,OAASjO,EAAIua,EAAS5c,QACpB,GAAI+5B,EAAO38B,KAAKwf,EAAUva,GAGxB,OAFAiO,EAAKxS,MAAQ8e,EAASva,GACtBiO,EAAKJ,MAAO,EACLI,EAOX,OAHAA,EAAKxS,MAAQiB,EACbuR,EAAKJ,MAAO,EAELI,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,OAASA,KAAM6tB,GAIjB,SAASA,IACP,OAASrgC,MAAOiB,EAAWmR,MAAM,IApgBpC,CAktBmB,iBAAXnV,EAAsBA,EACX,iBAAXG,OAAsBA,OACb,iBAATE,KAAoBA,KAAOwE,KCxtBpC,IACI,IAAIq/B,GAAK,IAAI/jC,OAAOgkC,YAAY,QAEhC,GADAD,GAAGE,kBACyB,IAAxBF,GAAGG,iBAGH,MAAM,IAAI9B,MAAM,6BAEtB,MAAMrhC,GACN,IAAIijC,GAAc,SAASza,EAAO4a,GAChC,IAAIC,EAAKC,EAsBT,OArBAF,EAASA,IACPG,SAAS,EACTC,YAAY,EACZC,YAAQ3gC,IAGVugC,EAAM9iC,SAASmjC,YAAY,gBACvBC,gBAAgBnb,EAAO4a,EAAOG,QAASH,EAAOI,WAAYJ,EAAOK,QACrEH,EAAcD,EAAIH,eAClBG,EAAIH,eAAiB,WACnBI,EAAYniC,KAAKwC,MACjB,IACExD,OAAOC,eAAeuD,KAAM,oBAC1BtD,IAAK,WACH,OAAO,KAGX,MAAML,GACN2D,KAAKw/B,kBAAmB,IAGrBE,GAGTJ,GAAYv/B,UAAYzE,OAAO2kC,MAAMlgC,UACrCzE,OAAOgkC,YAAcA,GCtCvB,IC2IcY,GD3IDC,UACF,gBACE,gBACF,SAGEC,UACF,cACA,SERLC,aAEO,QAGF,UAGA,YAGG,aAGC,WAGD,UAGF,SACD,WAGG,sBAIO,cAGL,gBAGE,QAGP,oBAGM,gBAGC,mBAGG,sBAGG,cAGR,aACA,eACH,wDAGG,wDAIC,mBAEL,SACA,SACA,SACA,QACA,QACA,SACA,QACA,OACA,0BAMI,mBAOE,WAEN,GACA,IACA,EACA,KACA,IACA,KACA,uBAMK,UACD,uBAKE,QACJ,qBAKE,WACE/kC,OAAOorB,UAAU4Z,SAAS/gC,MAAM,KAAK,yBAKtC,YACC,aACC,qBAKF,MACJ,kBAKL,aACA,OACA,WACA,eACA,OACA,SACA,WACA,WACA,MACA,UACA,wBAGA,WACA,UACA,uBAKS,iBACD,8BACF,aACC,gBACE,+BACH,cACE,kBACE,uBACG,wBACH,kBACF,cACF,cACE,wBACQ,kCACC,mCACA,kCACD,6BACJ,8BACF,oBACA,iBACH,gBACE,eACH,aACC,YACF,UACA,YACE,aACD,gBACI,yBACK,uBAMN,uDAGA,qDAGA,uEAMH,UACA,WACC,aACE,YACD,aACC,UACH,YACE,cACE,gBACE,SACP,aACI,WACF,aACE,UACH,cACI,sBAQV,WACA,UACA,UACA,UACA,UACA,iBACA,YACA,aACA,iBACA,aACA,eACA,OACA,QACA,QACA,UACA,SACA,UACA,aACA,8BAIA,iBACA,kBACA,mBACA,iBACA,iBACA,gBACA,sBAIA,gBACA,+BAIA,kBACA,kBACA,YACA,cACA,cACA,iBACA,gBACA,gCAMU,uDACC,4BAEI,aACF,0BAEL,4BAEE,2BACC,8BACE,+BACD,+BACC,kCACH,8BACI,oCACE,+BACP,4BACI,iCACC,8BACJ,mCAGA,4BACE,6BACD,+BACG,iCACD,8CAGI,gCACH,+BAC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","file":"plyr.polyfilled.min.js","sourcesContent":["// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","var core = module.exports = { version: '2.5.3' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","module.exports = false;\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","var global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function (key) {\n return store[key] || (store[key] = {});\n};\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var final = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(final - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < final) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","module.exports = {};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = (!BUGGY && $native) || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","exports.f = {}.propertyIsEnumerable;\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) if (isEnum.call(S, key = keys[j++])) T[key] = S[key];\n } return T;\n} : $assign;\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","'use strict';\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar validate = require('./_validate-collection');\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar tmp = {};\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n existingDescriptor = gOPD.f(receiver, propertyKey) || createDesc(0);\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n var promise = Promise.resolve();\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value);\n if (domain) domain.exit();\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","exports.f = require('./_wks');\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function';\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n require('./_object-gops').f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n var fns = exec(defined, SYMBOL, ''[KEY]);\n var strfn = fns[0];\n var rxfn = fns[1];\n if (fails(function () {\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n })) {\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match) {\n // 21.1.3.11 String.prototype.match(regexp)\n return [function match(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n }, $match];\n});\n","// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace) {\n // 21.1.3.14 String.prototype.replace(searchValue, replaceValue)\n return [function replace(searchValue, replaceValue) {\n 'use strict';\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n }, $replace];\n});\n","// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split) {\n 'use strict';\n var isRegExp = require('./_is-regexp');\n var _split = $split;\n var $push = [].push;\n var $SPLIT = 'split';\n var LENGTH = 'length';\n var LAST_INDEX = 'lastIndex';\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n var NPCG = /()??/.exec('')[1] === undefined; // nonparticipating capturing group\n // based on es5-shim implementation, need to rework it\n $split = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return _split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? 4294967295 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var separator2, match, lastIndex, lastLength, i;\n // Doesn't need flags gy, but they don't hurt\n if (!NPCG) separator2 = new RegExp('^' + separatorCopy.source + '$(?!\\\\s)', flags);\n while (match = separatorCopy.exec(string)) {\n // `separatorCopy.lastIndex` is not reliable cross-browser\n lastIndex = match.index + match[0][LENGTH];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n // Fix browsers whose `exec` methods don't consistently return `undefined` for NPCG\n // eslint-disable-next-line no-loop-func\n if (!NPCG && match[LENGTH] > 1) match[0].replace(separator2, function () {\n for (i = 1; i < arguments[LENGTH] - 2; i++) if (arguments[i] === undefined) match[i] = undefined;\n });\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n $split = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : _split.call(this, separator, limit);\n };\n }\n // 21.1.3.17 String.prototype.split(separator, limit)\n return [function split(separator, limit) {\n var O = defined(this);\n var fn = separator == undefined ? undefined : separator[SPLIT];\n return fn !== undefined ? fn.call(separator, O, limit) : $split.call(String(O), separator, limit);\n }, $split];\n});\n","// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search) {\n // 21.1.3.15 String.prototype.search(regexp)\n return [function search(regexp) {\n 'use strict';\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n }, $search];\n});\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","var getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) if (isEnum.call(O, key = keys[i++])) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n } return result;\n };\n};\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\n$export($export.P + $export.F * /Version\\/10\\.\\d+(\\.\\d+)? Safari\\//.test(userAgent), 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n if (typeof global.process === \"object\" && global.process.domain) {\n invoke = global.process.domain.bind(invoke);\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // Among the various tricks for obtaining a reference to the global\n // object, this seems to be the most reliable technique that does not\n // use indirect eval (which violates Content Security Policy).\n typeof global === \"object\" ? global :\n typeof window === \"object\" ? window :\n typeof self === \"object\" ? self : this\n);\n","// Polyfill for creating CustomEvents on IE9/10/11\n\n// code pulled from:\n// https://github.com/d4tocchini/customevent-polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent#Polyfill\n\ntry {\n var ce = new window.CustomEvent('test');\n ce.preventDefault();\n if (ce.defaultPrevented !== true) {\n // IE has problems with .preventDefault() on custom events\n // http://stackoverflow.com/questions/23349191\n throw new Error('Could not prevent default');\n }\n} catch(e) {\n var CustomEvent = function(event, params) {\n var evt, origPrevent;\n params = params || {\n bubbles: false,\n cancelable: false,\n detail: undefined\n };\n\n evt = document.createEvent(\"CustomEvent\");\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n origPrevent = evt.preventDefault;\n evt.preventDefault = function () {\n origPrevent.call(this);\n try {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function () {\n return true;\n }\n });\n } catch(e) {\n this.defaultPrevented = true;\n }\n };\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n window.CustomEvent = CustomEvent; // expose definition to window\n}\n","// ==========================================================================\n// Plyr supported types and providers\n// ==========================================================================\n\nexport const providers = {\n html5: 'html5',\n youtube: 'youtube',\n vimeo: 'vimeo',\n};\n\nexport const types = {\n audio: 'audio',\n video: 'video',\n};\n\nexport default { providers, types };\n","// ==========================================================================\n// Plyr support checks\n// ==========================================================================\n\nimport utils from './utils';\n\n// Check for feature support\nconst support = {\n // Basic support\n audio: 'canPlayType' in document.createElement('audio'),\n video: 'canPlayType' in document.createElement('video'),\n\n // Check for support\n // Basic functionality vs full UI\n check(type, provider, inline) {\n let api = false;\n let ui = false;\n const browser = utils.getBrowser();\n const playsInline = browser.isIPhone && inline && support.inline;\n\n switch (`${provider}:${type}`) {\n case 'html5:video':\n api = support.video;\n ui = api && support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'html5:audio':\n api = support.audio;\n ui = api && support.rangeInput;\n break;\n\n case 'youtube:video':\n api = true;\n ui = support.rangeInput && (!browser.isIPhone || playsInline);\n break;\n\n case 'vimeo:video':\n api = true;\n ui = support.rangeInput && !browser.isIPhone;\n break;\n\n default:\n api = support.audio && support.video;\n ui = api && support.rangeInput;\n }\n\n return {\n api,\n ui,\n };\n },\n\n // Picture-in-picture support\n // Safari only currently\n pip: (() => {\n const browser = utils.getBrowser();\n return !browser.isIPhone && utils.is.function(utils.createElement('video').webkitSetPresentationMode);\n })(),\n\n // Airplay support\n // Safari only currently\n airplay: utils.is.function(window.WebKitPlaybackTargetAvailabilityEvent),\n\n // Inline playback support\n // https://webkit.org/blog/6784/new-video-policies-for-ios/\n inline: 'playsInline' in document.createElement('video'),\n\n // Check for mime type support against a player instance\n // Credits: http://diveintohtml5.info/everything.html\n // Related: http://www.leanbackplayer.com/test/h5mt.html\n mime(type) {\n const { media } = this;\n\n try {\n // Bail if no checking function\n if (!this.isHTML5 || !utils.is.function(media.canPlayType)) {\n return false;\n }\n\n // Type specific checks\n if (this.isVideo) {\n switch (type) {\n case 'video/webm':\n return media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, '');\n\n case 'video/mp4':\n return media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '');\n\n case 'video/ogg':\n return media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, '');\n\n default:\n return false;\n }\n } else if (this.isAudio) {\n switch (type) {\n case 'audio/mpeg':\n return media.canPlayType('audio/mpeg;').replace(/no/, '');\n\n case 'audio/ogg':\n return media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, '');\n\n case 'audio/wav':\n return media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, '');\n\n default:\n return false;\n }\n }\n } catch (e) {\n return false;\n }\n\n // If we got this far, we're stuffed\n return false;\n },\n\n // Check for textTracks support\n textTracks: 'textTracks' in document.createElement('video'),\n\n // Check for passive event listener support\n // https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md\n // https://www.youtube.com/watch?v=NPM6172J22g\n passiveListeners: (() => {\n // Test via a getter in the options object to see if the passive property is accessed\n let supported = false;\n try {\n const options = Object.defineProperty({}, 'passive', {\n get() {\n supported = true;\n return null;\n },\n });\n window.addEventListener('test', null, options);\n } catch (e) {\n // Do nothing\n }\n\n return supported;\n })(),\n\n // <input type=\"range\"> Sliders\n rangeInput: (() => {\n const range = document.createElement('input');\n range.type = 'range';\n return range.type === 'range';\n })(),\n\n // Touch\n // Remember a device can be moust + touch enabled\n touch: 'ontouchstart' in document.documentElement,\n\n // Detect transitions support\n transitions: utils.transitionEndEvent !== false,\n\n // Reduced motion iOS & MacOS setting\n // https://webkit.org/blog/7551/responsive-design-for-motion/\n reducedMotion: 'matchMedia' in window && window.matchMedia('(prefers-reduced-motion)').matches,\n};\n\nexport default support;\n","// ==========================================================================\n// Plyr default config\n// ==========================================================================\n\nconst defaults = {\n // Disable\n enabled: true,\n\n // Custom media title\n title: '',\n\n // Logging to console\n debug: false,\n\n // Auto play (if supported)\n autoplay: false,\n\n // Only allow one media playing at once (vimeo only)\n autopause: true,\n\n // Default time to skip when rewind/fast forward\n seekTime: 10,\n\n // Default volume\n volume: 1,\n muted: false,\n\n // Pass a custom duration\n duration: null,\n\n // Display the media duration on load in the current time position\n // If you have opted to display both duration and currentTime, this is ignored\n displayDuration: true,\n\n // Invert the current time to be a countdown\n invertTime: true,\n\n // Clicking the currentTime inverts it's value to show time left rather than elapsed\n toggleInvert: true,\n\n // Aspect ratio (for embeds)\n ratio: '16:9',\n\n // Click video container to play/pause\n clickToPlay: true,\n\n // Auto hide the controls\n hideControls: true,\n\n // Revert to poster on finish (HTML5 - will cause reload)\n showPosterOnEnd: false,\n\n // Disable the standard context menu\n disableContextMenu: true,\n\n // Sprite (for icons)\n loadSprite: true,\n iconPrefix: 'plyr',\n iconUrl: 'https://cdn.plyr.io/3.0.0-beta.17/plyr.svg',\n\n // Blank video (used to prevent errors on source change)\n blankVideo: 'https://cdn.plyr.io/static/blank.mp4',\n\n // Quality default\n quality: {\n default: 'default',\n options: [\n 'hd2160',\n 'hd1440',\n 'hd1080',\n 'hd720',\n 'large',\n 'medium',\n 'small',\n 'tiny',\n 'default',\n ],\n },\n\n // Set loops\n loop: {\n active: false,\n // start: null,\n // end: null,\n },\n\n // Speed default and options to display\n speed: {\n selected: 1,\n options: [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ],\n },\n\n // Keyboard shortcut settings\n keyboard: {\n focused: true,\n global: false,\n },\n\n // Display tooltips\n tooltips: {\n controls: false,\n seek: true,\n },\n\n // Captions settings\n captions: {\n active: false,\n language: window.navigator.language.split('-')[0],\n },\n\n // Fullscreen settings\n fullscreen: {\n enabled: true, // Allow fullscreen?\n fallback: true, // Fallback for vintage browsers\n iosNative: false, // Use the native fullscreen in iOS (disables custom controls)\n },\n\n // Local storage\n storage: {\n enabled: true,\n key: 'plyr',\n },\n\n // Default controls\n controls: [\n 'play-large',\n 'play',\n 'progress',\n 'current-time',\n 'mute',\n 'volume',\n 'captions',\n 'settings',\n 'pip',\n 'airplay',\n 'fullscreen',\n ],\n settings: [\n 'captions',\n 'quality',\n 'speed',\n ],\n\n // Localisation\n i18n: {\n restart: 'Restart',\n rewind: 'Rewind {seektime} secs',\n play: 'Play',\n pause: 'Pause',\n forward: 'Forward {seektime} secs',\n seek: 'Seek',\n played: 'Played',\n buffered: 'Buffered',\n currentTime: 'Current time',\n duration: 'Duration',\n volume: 'Volume',\n mute: 'Mute',\n unmute: 'Unmute',\n enableCaptions: 'Enable captions',\n disableCaptions: 'Disable captions',\n enterFullscreen: 'Enter fullscreen',\n exitFullscreen: 'Exit fullscreen',\n frameTitle: 'Player for {title}',\n captions: 'Captions',\n settings: 'Settings',\n speed: 'Speed',\n quality: 'Quality',\n loop: 'Loop',\n start: 'Start',\n end: 'End',\n all: 'All',\n reset: 'Reset',\n none: 'None',\n disabled: 'Disabled',\n advertisement: 'Ad',\n },\n\n // URLs\n urls: {\n vimeo: {\n api: 'https://player.vimeo.com/api/player.js',\n },\n youtube: {\n api: 'https://www.youtube.com/iframe_api',\n },\n googleIMA: {\n api: 'https://imasdk.googleapis.com/js/sdkloader/ima3.js',\n },\n },\n\n // Custom control listeners\n listeners: {\n seek: null,\n play: null,\n pause: null,\n restart: null,\n rewind: null,\n forward: null,\n mute: null,\n volume: null,\n captions: null,\n fullscreen: null,\n pip: null,\n airplay: null,\n speed: null,\n quality: null,\n loop: null,\n language: null,\n },\n\n // Events to watch and bubble\n events: [\n // Events to watch on HTML5 media elements and bubble\n // https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events\n 'ended',\n 'progress',\n 'stalled',\n 'playing',\n 'waiting',\n 'canplay',\n 'canplaythrough',\n 'loadstart',\n 'loadeddata',\n 'loadedmetadata',\n 'timeupdate',\n 'volumechange',\n 'play',\n 'pause',\n 'error',\n 'seeking',\n 'seeked',\n 'emptied',\n 'ratechange',\n 'cuechange',\n\n // Custom events\n 'enterfullscreen',\n 'exitfullscreen',\n 'captionsenabled',\n 'captionsdisabled',\n 'languagechange',\n 'controlshidden',\n 'controlsshown',\n 'ready',\n\n // YouTube\n 'statechange',\n 'qualitychange',\n 'qualityrequested',\n\n // Ads\n 'adsloaded',\n 'adscontentpause',\n 'adsconentresume',\n 'adstarted',\n 'adsmidpoint',\n 'adscomplete',\n 'adsallcomplete',\n 'adsimpression',\n 'adsclick',\n ],\n\n // Selectors\n // Change these to match your template if using custom HTML\n selectors: {\n editable: 'input, textarea, select, [contenteditable]',\n container: '.plyr',\n controls: {\n container: null,\n wrapper: '.plyr__controls',\n },\n labels: '[data-plyr]',\n buttons: {\n play: '[data-plyr=\"play\"]',\n pause: '[data-plyr=\"pause\"]',\n restart: '[data-plyr=\"restart\"]',\n rewind: '[data-plyr=\"rewind\"]',\n forward: '[data-plyr=\"fast-forward\"]',\n mute: '[data-plyr=\"mute\"]',\n captions: '[data-plyr=\"captions\"]',\n fullscreen: '[data-plyr=\"fullscreen\"]',\n pip: '[data-plyr=\"pip\"]',\n airplay: '[data-plyr=\"airplay\"]',\n settings: '[data-plyr=\"settings\"]',\n loop: '[data-plyr=\"loop\"]',\n },\n inputs: {\n seek: '[data-plyr=\"seek\"]',\n volume: '[data-plyr=\"volume\"]',\n speed: '[data-plyr=\"speed\"]',\n language: '[data-plyr=\"language\"]',\n quality: '[data-plyr=\"quality\"]',\n },\n display: {\n currentTime: '.plyr__time--current',\n duration: '.plyr__time--duration',\n buffer: '.plyr__progress--buffer',\n played: '.plyr__progress--played',\n loop: '.plyr__progress--loop',\n volume: '.plyr__volume--display',\n },\n progress: '.plyr__progress',\n captions: '.plyr__captions',\n menu: {\n quality: '.js-plyr__menu__list--quality',\n },\n },\n\n // Class hooks added to the player in different states\n classNames: {\n video: 'plyr__video-wrapper',\n embed: 'plyr__video-embed',\n ads: 'plyr__ads',\n control: 'plyr__control',\n type: 'plyr--{0}',\n provider: 'plyr--{0}',\n stopped: 'plyr--stopped',\n playing: 'plyr--playing',\n loading: 'plyr--loading',\n error: 'plyr--has-error',\n hover: 'plyr--hover',\n tooltip: 'plyr__tooltip',\n cues: 'plyr__cues',\n hidden: 'plyr__sr-only',\n hideControls: 'plyr--hide-controls',\n isIos: 'plyr--is-ios',\n isTouch: 'plyr--is-touch',\n uiSupported: 'plyr--full-ui',\n noTransition: 'plyr--no-transition',\n menu: {\n value: 'plyr__menu__value',\n badge: 'plyr__badge',\n open: 'plyr--menu-open',\n },\n captions: {\n enabled: 'plyr--captions-enabled',\n active: 'plyr--captions-active',\n },\n fullscreen: {\n enabled: 'plyr--fullscreen-enabled',\n fallback: 'plyr--fullscreen-fallback',\n },\n pip: {\n supported: 'plyr--pip-supported',\n active: 'plyr--pip-active',\n },\n airplay: {\n supported: 'plyr--airplay-supported',\n active: 'plyr--airplay-active',\n },\n tabFocus: 'plyr__tab-focus',\n },\n\n // Embed attributes\n attributes: {\n embed: {\n provider: 'data-plyr-provider',\n id: 'data-plyr-embed-id',\n },\n },\n\n // API keys\n keys: {\n google: null,\n },\n\n // Advertisements plugin\n // Tag is not required as publisher is determined by vi.ai using the domain\n ads: {\n enabled: false,\n },\n};\n\nexport default defaults;\n","// ==========================================================================\n// Plyr utils\n// ==========================================================================\n\nimport support from './support';\nimport { providers } from './types';\n\nconst utils = {\n // Check variable types\n is: {\n plyr(input) {\n return this.instanceof(input, window.Plyr);\n },\n object(input) {\n return this.getConstructor(input) === Object;\n },\n number(input) {\n return this.getConstructor(input) === Number && !Number.isNaN(input);\n },\n string(input) {\n return this.getConstructor(input) === String;\n },\n boolean(input) {\n return this.getConstructor(input) === Boolean;\n },\n function(input) {\n return this.getConstructor(input) === Function;\n },\n array(input) {\n return !this.nullOrUndefined(input) && Array.isArray(input);\n },\n weakMap(input) {\n return this.instanceof(input, window.WeakMap);\n },\n nodeList(input) {\n return this.instanceof(input, window.NodeList);\n },\n element(input) {\n return this.instanceof(input, window.Element);\n },\n textNode(input) {\n return this.getConstructor(input) === Text;\n },\n event(input) {\n return this.instanceof(input, window.Event);\n },\n cue(input) {\n return this.instanceof(input, window.TextTrackCue) || this.instanceof(input, window.VTTCue);\n },\n track(input) {\n return this.instanceof(input, TextTrack) || (!this.nullOrUndefined(input) && this.string(input.kind));\n },\n url(input) {\n return !this.nullOrUndefined(input) && /(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/.test(input);\n },\n nullOrUndefined(input) {\n return input === null || typeof input === 'undefined';\n },\n empty(input) {\n return (\n this.nullOrUndefined(input) ||\n ((this.string(input) || this.array(input) || this.nodeList(input)) && !input.length) ||\n (this.object(input) && !Object.keys(input).length)\n );\n },\n instanceof(input, constructor) {\n return Boolean(input && constructor && input instanceof constructor);\n },\n getConstructor(input) {\n return !this.nullOrUndefined(input) ? input.constructor : null;\n },\n },\n\n // Unfortunately, due to mixed support, UA sniffing is required\n getBrowser() {\n return {\n isIE: /* @cc_on!@ */ false || !!document.documentMode,\n isWebkit: 'WebkitAppearance' in document.documentElement.style && !/Edge/.test(navigator.userAgent),\n isIPhone: /(iPhone|iPod)/gi.test(navigator.platform),\n isIos: /(iPad|iPhone|iPod)/gi.test(navigator.platform),\n };\n },\n\n // Fetch wrapper\n // Using XHR to avoid issues with older browsers\n fetch(url, responseType = 'text') {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n\n // Check for CORS support\n if (!('withCredentials' in request)) {\n return;\n }\n\n request.addEventListener('load', () => {\n if (responseType === 'text') {\n try {\n resolve(JSON.parse(request.responseText));\n } catch(e) {\n resolve(request.responseText);\n }\n }\n else {\n resolve(request.response);\n }\n });\n\n request.addEventListener('error', () => {\n throw new Error(request.statusText);\n });\n\n request.open('GET', url, true);\n\n // Set the required response type\n request.responseType = responseType;\n\n request.send();\n } catch (e) {\n reject(e);\n }\n });\n },\n\n // Load an external script\n loadScript(url, callback, error) {\n const current = document.querySelector(`script[src=\"${url}\"]`);\n\n // Check script is not already referenced, if so wait for load\n if (current !== null) {\n current.callbacks = current.callbacks || [];\n current.callbacks.push(callback);\n return;\n }\n\n // Build the element\n const element = document.createElement('script');\n\n // Callback queue\n element.callbacks = element.callbacks || [];\n element.callbacks.push(callback);\n\n // Error queue\n element.errors = element.errors || [];\n element.errors.push(error);\n\n // Bind callback\n if (utils.is.function(callback)) {\n element.addEventListener(\n 'load',\n event => {\n element.callbacks.forEach(cb => cb.call(null, event));\n element.callbacks = null;\n },\n false,\n );\n }\n\n // Bind error handling\n element.addEventListener(\n 'error',\n event => {\n element.errors.forEach(err => err.call(null, event));\n element.errors = null;\n },\n false,\n );\n\n // Set the URL after binding callback\n element.src = url;\n\n // Inject\n const first = document.getElementsByTagName('script')[0];\n first.parentNode.insertBefore(element, first);\n },\n\n // Load an external SVG sprite\n loadSprite(url, id) {\n if (!utils.is.string(url)) {\n return;\n }\n\n const prefix = 'cache-';\n const hasId = utils.is.string(id);\n let isCached = false;\n\n function updateSprite(data) {\n // Inject content\n this.innerHTML = data;\n\n // Inject the SVG to the body\n document.body.insertBefore(this, document.body.childNodes[0]);\n }\n\n // Only load once\n if (!hasId || !document.querySelectorAll(`#${id}`).length) {\n // Create container\n const container = document.createElement('div');\n utils.toggleHidden(container, true);\n\n if (hasId) {\n container.setAttribute('id', id);\n }\n\n // Check in cache\n if (support.storage) {\n const cached = window.localStorage.getItem(prefix + id);\n isCached = cached !== null;\n\n if (isCached) {\n const data = JSON.parse(cached);\n updateSprite.call(container, data.content);\n return;\n }\n }\n\n // Get the sprite\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.empty(result)) {\n return;\n }\n\n if (support.storage) {\n window.localStorage.setItem(\n prefix + id,\n JSON.stringify({\n content: result,\n }),\n );\n }\n\n updateSprite.call(container, result);\n })\n .catch(() => {});\n }\n },\n\n // Generate a random ID\n generateId(prefix) {\n return `${prefix}-${Math.floor(Math.random() * 10000)}`;\n },\n\n // Determine if we're in an iframe\n inFrame() {\n try {\n return window.self !== window.top;\n } catch (e) {\n return true;\n }\n },\n\n // Wrap an element\n wrap(elements, wrapper) {\n // Convert `elements` to an array, if necessary.\n const targets = elements.length ? elements : [elements];\n\n // Loops backwards to prevent having to clone the wrapper on the\n // first element (see `child` below).\n Array.from(targets)\n .reverse()\n .forEach((element, index) => {\n const child = index > 0 ? wrapper.cloneNode(true) : wrapper;\n\n // Cache the current parent and sibling.\n const parent = element.parentNode;\n const sibling = element.nextSibling;\n\n // Wrap the element (is automatically removed from its current\n // parent).\n child.appendChild(element);\n\n // If the element had a sibling, insert the wrapper before\n // the sibling to maintain the HTML structure; otherwise, just\n // append it to the parent.\n if (sibling) {\n parent.insertBefore(child, sibling);\n } else {\n parent.appendChild(child);\n }\n });\n },\n\n // Create a DocumentFragment\n createElement(type, attributes, text) {\n // Create a new <element>\n const element = document.createElement(type);\n\n // Set all passed attributes\n if (utils.is.object(attributes)) {\n utils.setAttributes(element, attributes);\n }\n\n // Add text node\n if (utils.is.string(text)) {\n element.textContent = text;\n }\n\n // Return built element\n return element;\n },\n\n // Inaert an element after another\n insertAfter(element, target) {\n target.parentNode.insertBefore(element, target.nextSibling);\n },\n\n // Insert a DocumentFragment\n insertElement(type, parent, attributes, text) {\n // Inject the new <element>\n parent.appendChild(utils.createElement(type, attributes, text));\n },\n\n // Remove an element\n removeElement(element) {\n if (!utils.is.element(element) || !utils.is.element(element.parentNode)) {\n return;\n }\n\n if (utils.is.nodeList(element) || utils.is.array(element)) {\n Array.from(element).forEach(utils.removeElement);\n return;\n }\n\n element.parentNode.removeChild(element);\n },\n\n // Remove all child elements\n emptyElement(element) {\n let { length } = element.childNodes;\n\n while (length > 0) {\n element.removeChild(element.lastChild);\n length -= 1;\n }\n },\n\n // Replace element\n replaceElement(newChild, oldChild) {\n if (!utils.is.element(oldChild) || !utils.is.element(oldChild.parentNode) || !utils.is.element(newChild)) {\n return null;\n }\n\n oldChild.parentNode.replaceChild(newChild, oldChild);\n\n return newChild;\n },\n\n // Set attributes\n setAttributes(element, attributes) {\n if (!utils.is.element(element) || utils.is.empty(attributes)) {\n return;\n }\n\n Object.keys(attributes).forEach(key => {\n element.setAttribute(key, attributes[key]);\n });\n },\n\n // Get an attribute object from a string selector\n getAttributesFromSelector(sel, existingAttributes) {\n // For example:\n // '.test' to { class: 'test' }\n // '#test' to { id: 'test' }\n // '[data-test=\"test\"]' to { 'data-test': 'test' }\n\n if (!utils.is.string(sel) || utils.is.empty(sel)) {\n return {};\n }\n\n const attributes = {};\n const existing = existingAttributes;\n\n sel.split(',').forEach(s => {\n // Remove whitespace\n const selector = s.trim();\n const className = selector.replace('.', '');\n const stripped = selector.replace(/[[\\]]/g, '');\n\n // Get the parts and value\n const parts = stripped.split('=');\n const key = parts[0];\n const value = parts.length > 1 ? parts[1].replace(/[\"']/g, '') : '';\n\n // Get the first character\n const start = selector.charAt(0);\n\n switch (start) {\n case '.':\n // Add to existing classname\n if (utils.is.object(existing) && utils.is.string(existing.class)) {\n existing.class += ` ${className}`;\n }\n\n attributes.class = className;\n break;\n\n case '#':\n // ID selector\n attributes.id = selector.replace('#', '');\n break;\n\n case '[':\n // Attribute selector\n attributes[key] = value;\n\n break;\n\n default:\n break;\n }\n });\n\n return attributes;\n },\n\n // Toggle class on an element\n toggleClass(element, className, toggle) {\n if (utils.is.element(element)) {\n const contains = element.classList.contains(className);\n\n element.classList[toggle ? 'add' : 'remove'](className);\n\n return (toggle && !contains) || (!toggle && contains);\n }\n\n return null;\n },\n\n // Has class name\n hasClass(element, className) {\n return utils.is.element(element) && element.classList.contains(className);\n },\n\n // Toggle hidden attribute on an element\n toggleHidden(element, toggle) {\n if (!utils.is.element(element)) {\n return;\n }\n\n if (toggle) {\n element.setAttribute('hidden', '');\n } else {\n element.removeAttribute('hidden');\n }\n },\n\n // Element matches selector\n matches(element, selector) {\n const prototype = { Element };\n\n function match() {\n return Array.from(document.querySelectorAll(selector)).includes(this);\n }\n\n const matches = prototype.matches || prototype.webkitMatchesSelector || prototype.mozMatchesSelector || prototype.msMatchesSelector || match;\n\n return matches.call(element, selector);\n },\n\n // Find all elements\n getElements(selector) {\n return this.elements.container.querySelectorAll(selector);\n },\n\n // Find a single element\n getElement(selector) {\n return this.elements.container.querySelector(selector);\n },\n\n // Find the UI controls and store references in custom controls\n // TODO: Allow settings menus with custom controls\n findElements() {\n try {\n this.elements.controls = utils.getElement.call(this, this.config.selectors.controls.wrapper);\n\n // Buttons\n this.elements.buttons = {\n play: utils.getElements.call(this, this.config.selectors.buttons.play),\n pause: utils.getElement.call(this, this.config.selectors.buttons.pause),\n restart: utils.getElement.call(this, this.config.selectors.buttons.restart),\n rewind: utils.getElement.call(this, this.config.selectors.buttons.rewind),\n forward: utils.getElement.call(this, this.config.selectors.buttons.forward),\n mute: utils.getElement.call(this, this.config.selectors.buttons.mute),\n pip: utils.getElement.call(this, this.config.selectors.buttons.pip),\n airplay: utils.getElement.call(this, this.config.selectors.buttons.airplay),\n settings: utils.getElement.call(this, this.config.selectors.buttons.settings),\n captions: utils.getElement.call(this, this.config.selectors.buttons.captions),\n fullscreen: utils.getElement.call(this, this.config.selectors.buttons.fullscreen),\n };\n\n // Progress\n this.elements.progress = utils.getElement.call(this, this.config.selectors.progress);\n\n // Inputs\n this.elements.inputs = {\n seek: utils.getElement.call(this, this.config.selectors.inputs.seek),\n volume: utils.getElement.call(this, this.config.selectors.inputs.volume),\n };\n\n // Display\n this.elements.display = {\n buffer: utils.getElement.call(this, this.config.selectors.display.buffer),\n duration: utils.getElement.call(this, this.config.selectors.display.duration),\n currentTime: utils.getElement.call(this, this.config.selectors.display.currentTime),\n };\n\n // Seek tooltip\n if (utils.is.element(this.elements.progress)) {\n this.elements.display.seekTooltip = this.elements.progress.querySelector(`.${this.config.classNames.tooltip}`);\n }\n\n return true;\n } catch (error) {\n // Log it\n this.debug.warn('It looks like there is a problem with your custom controls HTML', error);\n\n // Restore native video controls\n this.toggleNativeControls(true);\n\n return false;\n }\n },\n\n // Get the focused element\n getFocusElement() {\n let focused = document.activeElement;\n\n if (!focused || focused === document.body) {\n focused = null;\n } else {\n focused = document.querySelector(':focus');\n }\n\n return focused;\n },\n\n // Trap focus inside container\n trapFocus(element = null, toggle = false) {\n if (!utils.is.element(element)) {\n return;\n }\n\n const focusable = utils.getElements.call(this, 'button:not(:disabled), input:not(:disabled), [tabindex]');\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n const trap = event => {\n // Bail if not tab key or not fullscreen\n if (event.key !== 'Tab' || event.keyCode !== 9) {\n return;\n }\n\n // Get the current focused element\n const focused = utils.getFocusElement();\n\n if (focused === last && !event.shiftKey) {\n // Move focus to first element that can be tabbed if Shift isn't used\n first.focus();\n event.preventDefault();\n } else if (focused === first && event.shiftKey) {\n // Move focus to last element that can be tabbed if Shift is used\n last.focus();\n event.preventDefault();\n }\n };\n\n if (toggle) {\n utils.on(this.elements.container, 'keydown', trap, false);\n } else {\n utils.off(this.elements.container, 'keydown', trap, false);\n }\n },\n\n // Toggle event listener\n toggleListener(elements, event, callback, toggle, passive, capture) {\n // Bail if no elemetns, event, or callback\n if (utils.is.empty(elements) || utils.is.empty(event) || !utils.is.function(callback)) {\n return;\n }\n\n // If a nodelist is passed, call itself on each node\n if (utils.is.nodeList(elements) || utils.is.array(elements)) {\n // Create listener for each node\n Array.from(elements).forEach(element => {\n if (element instanceof Node) {\n utils.toggleListener.call(null, element, event, callback, toggle, passive, capture);\n }\n });\n\n return;\n }\n\n // Allow multiple events\n const events = event.split(' ');\n\n // Build options\n // Default to just capture boolean\n let options = utils.is.boolean(capture) ? capture : false;\n\n // If passive events listeners are supported\n if (support.passiveListeners) {\n options = {\n // Whether the listener can be passive (i.e. default never prevented)\n passive: utils.is.boolean(passive) ? passive : true,\n // Whether the listener is a capturing listener or not\n capture: utils.is.boolean(capture) ? capture : false,\n };\n }\n\n // If a single node is passed, bind the event listener\n events.forEach(type => {\n elements[toggle ? 'addEventListener' : 'removeEventListener'](type, callback, options);\n });\n },\n\n // Bind event handler\n on(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, true, passive, capture);\n },\n\n // Unbind event handler\n off(element, events, callback, passive, capture) {\n utils.toggleListener(element, events, callback, false, passive, capture);\n },\n\n // Trigger event\n dispatchEvent(element, type, bubbles, detail) {\n // Bail if no element\n if (!utils.is.element(element) || !utils.is.string(type)) {\n return;\n }\n\n // Create and dispatch the event\n const event = new CustomEvent(type, {\n bubbles: utils.is.boolean(bubbles) ? bubbles : false,\n detail: Object.assign({}, detail, {\n plyr: utils.is.plyr(this) ? this : null,\n }),\n });\n\n // Dispatch the event\n element.dispatchEvent(event);\n },\n\n // Toggle aria-pressed state on a toggle button\n // http://www.ssbbartgroup.com/blog/how-not-to-misuse-aria-states-properties-and-roles\n toggleState(element, input) {\n // If multiple elements passed\n if (utils.is.array(element) || utils.is.nodeList(element)) {\n Array.from(element).forEach(target => utils.toggleState(target, input));\n return;\n }\n\n // Bail if no target\n if (!utils.is.element(element)) {\n return;\n }\n\n // Get state\n const pressed = element.getAttribute('aria-pressed') === 'true';\n const state = utils.is.boolean(input) ? input : !pressed;\n\n // Set the attribute on target\n element.setAttribute('aria-pressed', state);\n },\n\n // Get percentage\n getPercentage(current, max) {\n if (current === 0 || max === 0 || Number.isNaN(current) || Number.isNaN(max)) {\n return 0;\n }\n return (current / max * 100).toFixed(2);\n },\n\n // Time helpers\n getHours(value) {\n return parseInt((value / 60 / 60) % 60, 10);\n },\n getMinutes(value) {\n return parseInt((value / 60) % 60, 10);\n },\n getSeconds(value) {\n return parseInt(value % 60, 10);\n },\n\n // Format time to UI friendly string\n formatTime(time = 0, displayHours = false, inverted = false) {\n // Bail if the value isn't a number\n if (!utils.is.number(time)) {\n return this.formatTime(null, displayHours, inverted);\n }\n\n // Format time component to add leading zero\n const format = value => `0${value}`.slice(-2);\n\n // Breakdown to hours, mins, secs\n let hours = this.getHours(time);\n const mins = this.getMinutes(time);\n const secs = this.getSeconds(time);\n\n // Do we need to display hours?\n if (displayHours || hours > 0) {\n hours = `${hours}:`;\n } else {\n hours = '';\n }\n\n // Render\n return `${inverted ? '-' : ''}${hours}${format(mins)}:${format(secs)}`;\n },\n\n // Deep extend destination object with N more objects\n extend(target = {}, ...sources) {\n if (!sources.length) {\n return target;\n }\n\n const source = sources.shift();\n\n if (!utils.is.object(source)) {\n return target;\n }\n\n Object.keys(source).forEach(key => {\n if (utils.is.object(source[key])) {\n if (!Object.keys(target).includes(key)) {\n Object.assign(target, { [key]: {} });\n }\n\n utils.extend(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n });\n\n return utils.extend(target, ...sources);\n },\n\n // Get the provider for a given URL\n getProviderByUrl(url) {\n // YouTube\n if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtu\\.?be)\\/.+$/.test(url)) {\n return providers.youtube;\n }\n\n // Vimeo\n if (/^https?:\\/\\/player.vimeo.com\\/video\\/\\d{8,}(?=\\b|\\/)/.test(url)) {\n return providers.vimeo;\n }\n\n return null;\n },\n\n // Parse YouTube ID from URL\n parseYouTubeId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n const regex = /^.*(youtu.be\\/|v\\/|u\\/\\w\\/|embed\\/|watch\\?v=|&v=)([^#&?]*).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Parse Vimeo ID from URL\n parseVimeoId(url) {\n if (utils.is.empty(url)) {\n return null;\n }\n\n if (utils.is.number(Number(url))) {\n return url;\n }\n\n const regex = /^.*(vimeo.com\\/|video\\/)(\\d+).*/;\n return url.match(regex) ? RegExp.$2 : url;\n },\n\n // Convert a URL to a location object\n parseUrl(url) {\n const parser = document.createElement('a');\n parser.href = url;\n return parser;\n },\n\n // Get URL query parameters\n getUrlParams(input) {\n let search = input;\n\n // Parse URL if needed\n if (input.startsWith('http://') || input.startsWith('https://')) {\n ({ search } = this.parseUrl(input));\n }\n\n if (this.is.empty(search)) {\n return null;\n }\n\n const hashes = search.slice(search.indexOf('?') + 1).split('&');\n\n return hashes.reduce((params, hash) => {\n const [\n key,\n val,\n ] = hash.split('=');\n\n return Object.assign(params, { [key]: decodeURIComponent(val) });\n }, {});\n },\n\n // Convert object to URL parameters\n buildUrlParams(input) {\n if (!utils.is.object(input)) {\n return '';\n }\n\n return Object.keys(input)\n .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(input[key])}`)\n .join('&');\n },\n\n // Remove HTML from a string\n stripHTML(source) {\n const fragment = document.createDocumentFragment();\n const element = document.createElement('div');\n fragment.appendChild(element);\n element.innerHTML = source;\n return fragment.firstChild.innerText;\n },\n\n // Get aspect ratio for dimensions\n getAspectRatio(width, height) {\n const getRatio = (w, h) => (h === 0 ? w : getRatio(h, w % h));\n const ratio = getRatio(width, height);\n return `${width / ratio}:${height / ratio}`;\n },\n\n // Get the transition end event\n get transitionEndEvent() {\n const element = document.createElement('span');\n\n const events = {\n WebkitTransition: 'webkitTransitionEnd',\n MozTransition: 'transitionend',\n OTransition: 'oTransitionEnd otransitionend',\n transition: 'transitionend',\n };\n\n const type = Object.keys(events).find(event => element.style[event] !== undefined);\n\n return utils.is.string(type) ? events[type] : false;\n },\n\n // Force repaint of element\n repaint(element) {\n setTimeout(() => {\n utils.toggleHidden(element, true);\n element.offsetHeight; // eslint-disable-line\n utils.toggleHidden(element, false);\n }, 0);\n },\n};\n\nexport default utils;\n","// ==========================================================================\n// Console wrapper\n// ==========================================================================\n\nconst noop = () => {};\n\nexport default class Console {\n constructor(enabled = false) {\n this.enabled = window.console && enabled;\n\n if (this.enabled) {\n this.log('Debugging enabled');\n }\n }\n\n get log() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.log, console) : noop;\n }\n get warn() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.warn, console) : noop;\n }\n get error() {\n // eslint-disable-next-line no-console\n return this.enabled ? Function.prototype.bind.call(console.error, console) : noop;\n }\n}\n","// ==========================================================================\n// Fullscreen wrapper\n// ==========================================================================\n\nimport utils from './utils';\n\nconst browser = utils.getBrowser();\n\nfunction onChange() {\n if (!this.enabled) {\n return;\n }\n\n // Update toggle button\n const button = this.player.elements.buttons.fullscreen;\n if (utils.is.element(button)) {\n utils.toggleState(button, this.active);\n }\n\n // Trigger an event\n utils.dispatchEvent(this.target, this.active ? 'enterfullscreen' : 'exitfullscreen', true);\n\n // Trap focus in container\n if (!browser.isIos) {\n utils.trapFocus.call(this.player, this.target, this.active);\n }\n}\n\nfunction toggleFallback(toggle = false) {\n // Store or restore scroll position\n if (toggle) {\n this.scrollPosition = {\n x: window.scrollX || 0,\n y: window.scrollY || 0,\n };\n } else {\n window.scrollTo(this.scrollPosition.x, this.scrollPosition.y);\n }\n\n // Toggle scroll\n document.body.style.overflow = toggle ? 'hidden' : '';\n\n // Toggle class hook\n utils.toggleClass(this.target, this.player.config.classNames.fullscreen.fallback, toggle);\n\n // Toggle button and fire events\n onChange.call(this);\n}\n\nclass Fullscreen {\n constructor(player) {\n // Keep reference to parent\n this.player = player;\n\n // Get prefix\n this.prefix = Fullscreen.prefix;\n\n // Scroll position\n this.scrollPosition = { x: 0, y: 0 };\n\n // Register event listeners\n // Handle event (incase user presses escape etc)\n utils.on(document, this.prefix === 'ms' ? 'MSFullscreenChange' : `${this.prefix}fullscreenchange`, () => {\n // TODO: Filter for target??\n onChange.call(this);\n });\n\n // Fullscreen toggle on double click\n utils.on(this.player.elements.container, 'dblclick', () => {\n this.toggle();\n });\n\n // Prevent double click on controls bubbling up\n utils.on(this.player.elements.controls, 'dblclick', event => event.stopPropagation());\n\n // Update the UI\n this.update();\n }\n\n // Determine if native supported\n static get native() {\n return !!(document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled);\n }\n\n // Get the prefix for handlers\n static get prefix() {\n // No prefix\n if (utils.is.function(document.cancelFullScreen)) {\n return false;\n }\n\n // Check for fullscreen support by vendor prefix\n let value = '';\n const prefixes = [\n 'webkit',\n 'moz',\n 'ms',\n ];\n\n prefixes.some(pre => {\n if (utils.is.function(document[`${pre}CancelFullScreen`])) {\n value = pre;\n return true;\n } else if (utils.is.function(document.msExitFullscreen)) {\n value = 'ms';\n return true;\n }\n\n return false;\n });\n\n return value;\n }\n\n // Determine if fullscreen is enabled\n get enabled() {\n const fallback = this.player.config.fullscreen.fallback && !utils.inFrame();\n\n return (Fullscreen.native || fallback) && this.player.config.fullscreen.enabled && this.player.supported.ui && this.player.isVideo;\n }\n\n // Get active state\n get active() {\n if (!this.enabled) {\n return false;\n }\n\n // Fallback using classname\n if (!Fullscreen.native) {\n return utils.hasClass(this.target, this.player.config.classNames.fullscreen.fallback);\n }\n\n const element = !this.prefix ? document.fullscreenElement : document[`${this.prefix}FullscreenElement`];\n\n return element === this.target;\n }\n\n // Get target element\n get target() {\n return browser.isIos && this.player.config.fullscreen.iosNative ? this.player.media : this.player.elements.container;\n }\n\n // Update UI\n update() {\n if (this.enabled) {\n this.player.debug.log(`${Fullscreen.native ? 'Native' : 'Fallback'} fullscreen enabled`);\n } else {\n this.player.debug.log('Fullscreen not supported and fallback disabled');\n }\n\n // Add styling hook to show button\n utils.toggleClass(this.player.elements.container, this.player.config.classNames.fullscreen.enabled, this.enabled);\n }\n\n // Make an element fullscreen\n enter() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen doesn't need the request step\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n if (this.player.playing) {\n this.target.webkitEnterFullscreen();\n }\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, true);\n } else if (!this.prefix) {\n this.target.requestFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n this.target[`${this.prefix}${this.prefix === 'ms' ? 'RequestFullscreen' : 'RequestFullScreen'}`]();\n }\n }\n\n // Bail from fullscreen\n exit() {\n if (!this.enabled) {\n return;\n }\n\n // iOS native fullscreen\n if (browser.isIos && this.player.config.fullscreen.iosNative) {\n this.target.webkitExitFullscreen();\n this.player.play();\n } else if (!Fullscreen.native) {\n toggleFallback.call(this, false);\n } else if (!this.prefix) {\n document.cancelFullScreen();\n } else if (!utils.is.empty(this.prefix)) {\n document[`${this.prefix}${this.prefix === 'ms' ? 'ExitFullscreen' : 'CancelFullScreen'}`]();\n }\n }\n\n // Toggle state\n toggle() {\n if (!this.active) {\n this.enter();\n } else {\n this.exit();\n }\n }\n}\n\nexport default Fullscreen;\n","// ==========================================================================\n// Plyr storage\n// ==========================================================================\n\nimport utils from './utils';\n\nclass Storage {\n constructor(player) {\n this.enabled = player.config.storage.enabled;\n this.key = player.config.storage.key;\n }\n\n // Check for actual support (see if we can use it)\n static get supported() {\n if (!('localStorage' in window)) {\n return false;\n }\n\n const test = '___test';\n\n // Try to use it (it might be disabled, e.g. user is in private mode)\n // see: https://github.com/sampotts/plyr/issues/131\n try {\n window.localStorage.setItem(test, test);\n window.localStorage.removeItem(test);\n return true;\n } catch (e) {\n return false;\n }\n }\n\n get(key) {\n const store = window.localStorage.getItem(this.key);\n\n if (!Storage.supported || utils.is.empty(store)) {\n return null;\n }\n\n const json = JSON.parse(store);\n\n return utils.is.string(key) && key.length ? json[key] : json;\n }\n\n set(object) {\n // Bail if we don't have localStorage support or it's disabled\n if (!Storage.supported || !this.enabled) {\n return;\n }\n\n // Can only store objectst\n if (!utils.is.object(object)) {\n return;\n }\n\n // Get current storage\n let storage = this.get();\n\n // Default to empty object\n if (utils.is.empty(storage)) {\n storage = {};\n }\n\n // Update the working copy of the values\n utils.extend(storage, object);\n\n // Update storage\n window.localStorage.setItem(this.key, JSON.stringify(storage));\n }\n}\n\nexport default Storage;\n","// ==========================================================================\n// Advertisement plugin using Google IMA HTML5 SDK\n// Create an account with our ad partner, vi here:\n// https://www.vi.ai/publisher-video-monetization/\n// ==========================================================================\n\n/* global google */\n\nimport utils from '../utils';\n\n// Build the default tag URL\nconst getTagUrl = () => {\n const params = {\n AV_PUBLISHERID: '58c25bb0073ef448b1087ad6',\n AV_CHANNELID: '5a0458dc28a06145e4519d21',\n AV_URL: '127.0.0.1:3000',\n cb: 1,\n AV_WIDTH: 640,\n AV_HEIGHT: 480,\n };\n\n const base = 'https://go.aniview.com/api/adserver6/vast/';\n\n return `${base}?${utils.buildUrlParams(params)}`;\n};\n\nclass Ads {\n /**\n * Ads constructor.\n * @param {object} player\n * @return {Ads}\n */\n constructor(player) {\n this.player = player;\n this.enabled = player.config.ads.enabled;\n this.playing = false;\n this.initialized = false;\n this.blocked = false;\n this.enabled = utils.is.url(player.config.ads.tag);\n\n // Check if a tag URL is provided.\n if (!this.enabled) {\n return;\n }\n\n // Check if the Google IMA3 SDK is loaded or load it ourselves\n if (!utils.is.object(window.google)) {\n utils.loadScript(\n player.config.urls.googleIMA.api,\n () => {\n this.ready();\n },\n () => {\n // Script failed to load or is blocked\n this.blocked = true;\n this.player.debug.log('Ads error: Google IMA SDK failed to load');\n },\n );\n } else {\n this.ready();\n }\n }\n\n /**\n * Get the ads instance ready.\n */\n ready() {\n this.elements = {\n container: null,\n displayContainer: null,\n };\n this.manager = null;\n this.loader = null;\n this.cuePoints = null;\n this.events = {};\n this.safetyTimer = null;\n this.countdownTimer = null;\n\n // Set listeners on the Plyr instance\n this.listeners();\n\n // Start ticking our safety timer. If the whole advertisement\n // thing doesn't resolve within our set time; we bail\n this.startSafetyTimer(12000, 'ready()');\n\n // Setup a simple promise to resolve if the IMA loader is ready\n this.loaderPromise = new Promise(resolve => {\n this.on('ADS_LOADER_LOADED', () => resolve());\n });\n\n // Setup a promise to resolve if the IMA manager is ready\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n });\n\n // Clear the safety timer\n this.managerPromise.then(() => {\n this.clearSafetyTimer('onAdsManagerLoaded()');\n });\n\n // Setup the IMA SDK\n this.setupIMA();\n }\n\n /**\n * In order for the SDK to display ads for our video, we need to tell it where to put them,\n * so here we define our ad container. This div is set up to render on top of the video player.\n * Using the code below, we tell the SDK to render ads within that div. We also provide a\n * handle to the content video player - the SDK will poll the current time of our player to\n * properly place mid-rolls. After we create the ad display container, we initialize it. On\n * mobile devices, this initialization is done as the result of a user action.\n */\n setupIMA() {\n // Create the container for our advertisements\n this.elements.container = utils.createElement('div', {\n class: this.player.config.classNames.ads,\n hidden: '',\n });\n this.player.elements.container.appendChild(this.elements.container);\n\n // So we can run VPAID2\n google.ima.settings.setVpaidMode(google.ima.ImaSdkSettings.VpaidMode.ENABLED);\n\n // Set language\n google.ima.settings.setLocale(this.player.config.ads.language);\n\n // We assume the adContainer is the video container of the plyr element\n // that will house the ads\n this.elements.displayContainer = new google.ima.AdDisplayContainer(this.elements.container);\n\n // Request video ads to be pre-loaded\n this.requestAds();\n }\n\n /**\n * Request advertisements\n */\n requestAds() {\n const { container } = this.player.elements;\n\n try {\n // Create ads loader\n this.loader = new google.ima.AdsLoader(this.elements.displayContainer);\n\n // Listen and respond to ads loaded and error events\n this.loader.addEventListener(google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, event => this.onAdsManagerLoaded(event), false);\n this.loader.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error), false);\n\n // Request video ads\n const request = new google.ima.AdsRequest();\n request.adTagUrl = getTagUrl();\n\n // Specify the linear and nonlinear slot sizes. This helps the SDK\n // to select the correct creative if multiple are returned\n request.linearAdSlotWidth = container.offsetWidth;\n request.linearAdSlotHeight = container.offsetHeight;\n request.nonLinearAdSlotWidth = container.offsetWidth;\n request.nonLinearAdSlotHeight = container.offsetHeight;\n\n // We only overlay ads as we only support video.\n request.forceNonLinearFullSlot = false;\n\n this.loader.requestAds(request);\n\n this.handleEventListeners('ADS_LOADER_LOADED');\n } catch (e) {\n this.onAdError(e);\n }\n }\n\n /**\n * Update the ad countdown\n * @param {boolean} start\n */\n pollCountdown(start = false) {\n if (!start) {\n window.clearInterval(this.countdownTimer);\n this.elements.container.removeAttribute('data-badge-text');\n return;\n }\n\n const update = () => {\n const time = utils.formatTime(this.manager.getRemainingTime());\n const label = `${this.player.config.i18n.advertisement} - ${time}`;\n this.elements.container.setAttribute('data-badge-text', label);\n };\n\n this.countdownTimer = window.setInterval(update, 100);\n }\n\n /**\n * This method is called whenever the ads are ready inside the AdDisplayContainer\n * @param {Event} adsManagerLoadedEvent\n */\n onAdsManagerLoaded(adsManagerLoadedEvent) {\n // Get the ads manager\n const settings = new google.ima.AdsRenderingSettings();\n\n // Tell the SDK to save and restore content video state on our behalf\n settings.restoreCustomPlaybackStateOnAdBreakComplete = true;\n settings.enablePreloading = true;\n\n // The SDK is polling currentTime on the contentPlayback. And needs a duration\n // so it can determine when to start the mid- and post-roll\n this.manager = adsManagerLoadedEvent.getAdsManager(this.player, settings);\n\n // Get the cue points for any mid-rolls by filtering out the pre- and post-roll\n this.cuePoints = this.manager.getCuePoints();\n\n // Add advertisement cue's within the time line if available\n this.cuePoints.forEach(cuePoint => {\n if (cuePoint !== 0 && cuePoint !== -1) {\n const seekElement = this.player.elements.progress;\n\n if (seekElement) {\n const cuePercentage = 100 / this.player.duration * cuePoint;\n const cue = utils.createElement('span', {\n class: this.player.config.classNames.cues,\n });\n\n cue.style.left = `${cuePercentage.toString()}%`;\n seekElement.appendChild(cue);\n }\n }\n });\n\n // Get skippable state\n // TODO: Skip button\n // this.manager.getAdSkippableState();\n\n // Set volume to match player\n this.manager.setVolume(this.player.volume);\n\n // Add listeners to the required events\n // Advertisement error events\n this.manager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, error => this.onAdError(error));\n\n // Advertisement regular events\n Object.keys(google.ima.AdEvent.Type).forEach(type => {\n this.manager.addEventListener(google.ima.AdEvent.Type[type], event => this.onAdEvent(event));\n });\n\n // Resolve our adsManager\n this.handleEventListeners('ADS_MANAGER_LOADED');\n }\n\n /**\n * This is where all the event handling takes place. Retrieve the ad from the event. Some\n * events (e.g. ALL_ADS_COMPLETED) don't have the ad object associated\n * https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/apis#ima.AdEvent.Type\n * @param {Event} event\n */\n onAdEvent(event) {\n const { container } = this.player.elements;\n\n // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)\n // don't have ad object associated\n const ad = event.getAd();\n\n // Proxy event\n const dispatchEvent = type => {\n utils.dispatchEvent.call(this.player, this.player.media, `ads${type}`);\n };\n\n switch (event.type) {\n case google.ima.AdEvent.Type.LOADED:\n // This is the first event sent for an ad - it is possible to determine whether the\n // ad is a video ad or an overlay\n this.handleEventListeners('LOADED');\n\n // Bubble event\n dispatchEvent('loaded');\n\n // Start countdown\n this.pollCountdown(true);\n\n if (!ad.isLinear()) {\n // Position AdDisplayContainer correctly for overlay\n ad.width = container.offsetWidth;\n ad.height = container.offsetHeight;\n }\n\n // console.info('Ad type: ' + event.getAd().getAdPodInfo().getPodIndex());\n // console.info('Ad time: ' + event.getAd().getAdPodInfo().getTimeOffset());\n break;\n\n case google.ima.AdEvent.Type.ALL_ADS_COMPLETED:\n // All ads for the current videos are done. We can now request new advertisements\n // in case the video is re-played\n this.handleEventListeners('ALL_ADS_COMPLETED');\n\n // Fire event\n dispatchEvent('allcomplete');\n\n // TODO: Example for what happens when a next video in a playlist would be loaded.\n // So here we load a new video when all ads are done.\n // Then we load new ads within a new adsManager. When the video\n // Is started - after - the ads are loaded, then we get ads.\n // You can also easily test cancelling and reloading by running\n // player.ads.cancel() and player.ads.play from the console I guess.\n // this.player.source = {\n // type: 'video',\n // title: 'View From A Blue Moon',\n // sources: [{\n // src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.mp4', type:\n // 'video/mp4', }], poster:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.jpg', tracks:\n // [ { kind: 'captions', label: 'English', srclang: 'en', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.en.vtt',\n // default: true, }, { kind: 'captions', label: 'French', srclang: 'fr', src:\n // 'https://cdn.plyr.io/static/demo/View_From_A_Blue_Moon_Trailer-HD.fr.vtt', }, ],\n // };\n\n // TODO: So there is still this thing where a video should only be allowed to start\n // playing when the IMA SDK is ready or has failed\n\n this.loadAds();\n break;\n\n case google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED:\n // This event indicates the ad has started - the video player can adjust the UI,\n // for example display a pause button and remaining time. Fired when content should\n // be paused. This usually happens right before an ad is about to cover the content\n this.handleEventListeners('CONTENT_PAUSE_REQUESTED');\n\n dispatchEvent('contentpause');\n\n this.pauseContent();\n\n break;\n\n case google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED:\n // This event indicates the ad has finished - the video player can perform\n // appropriate UI actions, such as removing the timer for remaining time detection.\n // Fired when content should be resumed. This usually happens when an ad finishes\n // or collapses\n this.handleEventListeners('CONTENT_RESUME_REQUESTED');\n\n dispatchEvent('contentresume');\n\n this.pollCountdown();\n\n this.resumeContent();\n\n break;\n\n case google.ima.AdEvent.Type.STARTED:\n dispatchEvent('started');\n break;\n\n case google.ima.AdEvent.Type.MIDPOINT:\n dispatchEvent('midpoint');\n break;\n\n case google.ima.AdEvent.Type.COMPLETE:\n dispatchEvent('complete');\n break;\n\n case google.ima.AdEvent.Type.IMPRESSION:\n dispatchEvent('impression');\n break;\n\n case google.ima.AdEvent.Type.CLICK:\n dispatchEvent('click');\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Any ad error handling comes through here\n * @param {Event} event\n */\n onAdError(event) {\n this.cancel();\n this.player.debug.log('Ads error', event);\n }\n\n /**\n * Setup hooks for Plyr and window events. This ensures\n * the mid- and post-roll launch at the correct time. And\n * resize the advertisement when the player resizes\n */\n listeners() {\n const { container } = this.player.elements;\n let time;\n\n // Add listeners to the required events\n this.player.on('ended', () => {\n this.loader.contentComplete();\n });\n\n this.player.on('seeking', () => {\n time = this.player.currentTime;\n return time;\n });\n\n this.player.on('seeked', () => {\n const seekedTime = this.player.currentTime;\n\n this.cuePoints.forEach((cuePoint, index) => {\n if (time < cuePoint && cuePoint < seekedTime) {\n this.manager.discardAdBreak();\n this.cuePoints.splice(index, 1);\n }\n });\n });\n\n // Listen to the resizing of the window. And resize ad accordingly\n // TODO: eventually implement ResizeObserver\n window.addEventListener('resize', () => {\n this.manager.resize(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n });\n }\n\n /**\n * Initialize the adsManager and start playing advertisements\n */\n play() {\n const { container } = this.player.elements;\n\n if (!this.managerPromise) {\n return;\n }\n\n // Play the requested advertisement whenever the adsManager is ready\n this.managerPromise.then(() => {\n // Initialize the container. Must be done via a user action on mobile devices\n this.elements.displayContainer.initialize();\n\n try {\n if (!this.initialized) {\n // Initialize the ads manager. Ad rules playlist will start at this time\n this.manager.init(container.offsetWidth, container.offsetHeight, google.ima.ViewMode.NORMAL);\n\n // Call play to start showing the ad. Single video and overlay ads will\n // start at this time; the call will be ignored for ad rules\n this.manager.start();\n }\n\n this.initialized = true;\n } catch (adError) {\n // An error may be thrown if there was a problem with the\n // VAST response\n this.onAdError(adError);\n }\n });\n }\n\n /**\n * Resume our video.\n */\n resumeContent() {\n // Hide our ad container\n utils.toggleHidden(this.elements.container, true);\n\n // Ad is stopped\n this.playing = false;\n\n // Play our video\n if (this.player.currentTime < this.player.duration) {\n this.player.play();\n }\n }\n\n /**\n * Pause our video\n */\n pauseContent() {\n // Show our ad container.\n utils.toggleHidden(this.elements.container, false);\n\n // Ad is playing.\n this.playing = true;\n\n // Pause our video.\n this.player.pause();\n }\n\n /**\n * Destroy the adsManager so we can grab new ads after this. If we don't then we're not\n * allowed to call new ads based on google policies, as they interpret this as an accidental\n * video requests. https://developers.google.com/interactive-\n * media-ads/docs/sdks/android/faq#8\n */\n cancel() {\n // Pause our video\n if (this.initialized) {\n this.resumeContent();\n }\n\n // Tell our instance that we're done for now\n this.handleEventListeners('ERROR');\n\n // Re-create our adsManager\n this.loadAds();\n }\n\n /**\n * Re-create our adsManager\n */\n loadAds() {\n // Tell our adsManager to go bye bye\n this.managerPromise.then(() => {\n // Destroy our adsManager\n if (this.manager) {\n this.manager.destroy();\n }\n\n // Re-set our adsManager promises\n this.managerPromise = new Promise(resolve => {\n this.on('ADS_MANAGER_LOADED', () => resolve());\n this.player.debug.log(this.manager);\n });\n\n // Now request some new advertisements\n this.requestAds();\n });\n }\n\n /**\n * Handles callbacks after an ad event was invoked\n * @param {string} event - Event type\n */\n handleEventListeners(event) {\n if (utils.is.function(this.events[event])) {\n this.events[event].call(this);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n * @return {Ads}\n */\n on(event, callback) {\n this.events[event] = callback;\n return this;\n }\n\n /**\n * Setup a safety timer for when the ad network doesn't respond for whatever reason.\n * The advertisement has 12 seconds to get its things together. We stop this timer when the\n * advertisement is playing, or when a user action is required to start, then we clear the\n * timer on ad ready\n * @param {number} time\n * @param {string} from\n */\n startSafetyTimer(time, from) {\n this.player.debug.log(`Safety timer invoked from: ${from}`);\n\n this.safetyTimer = setTimeout(() => {\n this.cancel();\n this.clearSafetyTimer('startSafetyTimer()');\n }, time);\n }\n\n /**\n * Clear our safety timer(s)\n * @param {string} from\n */\n clearSafetyTimer(from) {\n if (!utils.is.nullOrUndefined(this.safetyTimer)) {\n this.player.debug.log(`Safety timer cleared from: ${from}`);\n\n clearTimeout(this.safetyTimer);\n this.safetyTimer = null;\n }\n }\n}\n\nexport default Ads;\n","// ==========================================================================\n// Plyr Event Listeners\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst listeners = {\n // Global listeners\n global() {\n let last = null;\n\n // Get the key code for an event\n const getKeyCode = event => (event.keyCode ? event.keyCode : event.which);\n\n // Handle key press\n const handleKey = event => {\n const code = getKeyCode(event);\n const pressed = event.type === 'keydown';\n const repeat = pressed && code === last;\n\n // Bail if a modifier key is set\n if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {\n return;\n }\n\n // If the event is bubbled from the media element\n // Firefox doesn't get the keycode for whatever reason\n if (!utils.is.number(code)) {\n return;\n }\n\n // Seek by the number keys\n const seekByKey = () => {\n // Divide the max duration into 10th's and times by the number value\n this.currentTime = this.duration / 10 * (code - 48);\n };\n\n // Handle the key on keydown\n // Reset on keyup\n if (pressed) {\n // Which keycodes should we prevent default\n const preventDefault = [\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 56,\n 57,\n 32,\n 75,\n 38,\n 40,\n 77,\n 39,\n 37,\n 70,\n 67,\n 73,\n 76,\n 79,\n ];\n\n // Check focused element\n // and if the focused element is not editable (e.g. text input)\n // and any that accept key input http://webaim.org/techniques/keyboard/\n const focused = utils.getFocusElement();\n if (utils.is.element(focused) && utils.matches(focused, this.config.selectors.editable)) {\n return;\n }\n\n // If the code is found prevent default (e.g. prevent scrolling for arrows)\n if (preventDefault.includes(code)) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n switch (code) {\n case 48:\n case 49:\n case 50:\n case 51:\n case 52:\n case 53:\n case 54:\n case 55:\n case 56:\n case 57:\n // 0-9\n if (!repeat) {\n seekByKey();\n }\n break;\n\n case 32:\n case 75:\n // Space and K key\n if (!repeat) {\n this.togglePlay();\n }\n break;\n\n case 38:\n // Arrow up\n this.increaseVolume(0.1);\n break;\n\n case 40:\n // Arrow down\n this.decreaseVolume(0.1);\n break;\n\n case 77:\n // M key\n if (!repeat) {\n this.muted = !this.muted;\n }\n break;\n\n case 39:\n // Arrow forward\n this.forward();\n break;\n\n case 37:\n // Arrow back\n this.rewind();\n break;\n\n case 70:\n // F key\n this.fullscreen.toggle();\n break;\n\n case 67:\n // C key\n if (!repeat) {\n this.toggleCaptions();\n }\n break;\n\n case 76:\n // L key\n this.loop = !this.loop;\n break;\n\n /* case 73:\n this.setLoop('start');\n break;\n\n case 76:\n this.setLoop();\n break;\n\n case 79:\n this.setLoop('end');\n break; */\n\n default:\n break;\n }\n\n // Escape is handle natively when in full screen\n // So we only need to worry about non native\n if (!this.fullscreen.enabled && this.fullscreen.active && code === 27) {\n this.fullscreen.toggle();\n }\n\n // Store last code for next cycle\n last = code;\n } else {\n last = null;\n }\n };\n\n // Keyboard shortcuts\n if (this.config.keyboard.global) {\n utils.on(window, 'keydown keyup', handleKey, false);\n } else if (this.config.keyboard.focused) {\n utils.on(this.elements.container, 'keydown keyup', handleKey, false);\n }\n\n // Detect tab focus\n // Remove class on blur/focusout\n utils.on(this.elements.container, 'focusout', event => {\n utils.toggleClass(event.target, this.config.classNames.tabFocus, false);\n });\n\n // Add classname to tabbed elements\n utils.on(this.elements.container, 'keydown', event => {\n if (event.keyCode !== 9) {\n return;\n }\n\n // Delay the adding of classname until the focus has changed\n // This event fires before the focusin event\n setTimeout(() => {\n utils.toggleClass(utils.getFocusElement(), this.config.classNames.tabFocus, true);\n }, 0);\n });\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Toggle controls on mouse events and entering fullscreen\n utils.on(this.elements.container, 'mouseenter mouseleave mousemove touchstart touchend touchmove enterfullscreen exitfullscreen', event => {\n this.toggleControls(event);\n });\n }\n },\n\n // Listen for media events\n media() {\n // Time change on media\n utils.on(this.media, 'timeupdate seeking', event => ui.timeUpdate.call(this, event));\n\n // Display duration\n utils.on(this.media, 'durationchange loadedmetadata', event => ui.durationUpdate.call(this, event));\n\n // Check for audio tracks on load\n // We can't use `loadedmetadata` as it doesn't seem to have audio tracks at that point\n utils.on(this.media, 'loadeddata', () => {\n utils.toggleHidden(this.elements.volume, !this.hasAudio);\n utils.toggleHidden(this.elements.buttons.mute, !this.hasAudio);\n });\n\n // Handle the media finishing\n utils.on(this.media, 'ended', () => {\n // Show poster on end\n if (this.isHTML5 && this.isVideo && this.config.showPosterOnEnd) {\n // Restart\n this.restart();\n\n // Re-load media\n this.media.load();\n }\n });\n\n // Check for buffer progress\n utils.on(this.media, 'progress playing', event => ui.updateProgress.call(this, event));\n\n // Handle native mute\n utils.on(this.media, 'volumechange', event => ui.updateVolume.call(this, event));\n\n // Handle native play/pause\n utils.on(this.media, 'playing play pause ended', event => ui.checkPlaying.call(this, event));\n\n // Loading\n utils.on(this.media, 'waiting canplay seeked playing', event => ui.checkLoading.call(this, event));\n\n // Check if media failed to load\n // utils.on(this.media, 'play', event => ui.checkFailed.call(this, event));\n\n // Click video\n if (this.supported.ui && this.config.clickToPlay && !this.isAudio) {\n // Re-fetch the wrapper\n const wrapper = utils.getElement.call(this, `.${this.config.classNames.video}`);\n\n // Bail if there's no wrapper (this should never happen)\n if (!utils.is.element(wrapper)) {\n return;\n }\n\n // On click play, pause ore restart\n utils.on(wrapper, 'click', () => {\n // Touch devices will just show controls (if we're hiding controls)\n if (this.config.hideControls && support.touch && !this.paused) {\n return;\n }\n\n if (this.paused) {\n this.play();\n } else if (this.ended) {\n this.restart();\n this.play();\n } else {\n this.pause();\n }\n });\n }\n\n // Disable right click\n if (this.supported.ui && this.config.disableContextMenu) {\n utils.on(\n this.media,\n 'contextmenu',\n event => {\n event.preventDefault();\n },\n false,\n );\n }\n\n // Volume change\n utils.on(this.media, 'volumechange', () => {\n // Save to storage\n this.storage.set({ volume: this.volume, muted: this.muted });\n });\n\n // Speed change\n utils.on(this.media, 'ratechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'speed');\n\n // Save to storage\n this.storage.set({ speed: this.speed });\n });\n\n // Quality change\n utils.on(this.media, 'qualitychange', () => {\n // Update UI\n controls.updateSetting.call(this, 'quality');\n\n // Save to storage\n this.storage.set({ quality: this.quality });\n });\n\n // Caption language change\n utils.on(this.media, 'languagechange', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ language: this.language });\n });\n\n // Captions toggle\n utils.on(this.media, 'captionsenabled captionsdisabled', () => {\n // Update UI\n controls.updateSetting.call(this, 'captions');\n\n // Save to storage\n this.storage.set({ captions: this.captions.active });\n });\n\n // Proxy events to container\n // Bubble up key events for Edge\n utils.on(this.media, this.config.events.concat([\n 'keyup',\n 'keydown',\n ]).join(' '), event => {\n let detail = {};\n\n // Get error details from media\n if (event.type === 'error') {\n detail = this.media.error;\n }\n\n utils.dispatchEvent.call(this, this.elements.container, event.type, true, detail);\n });\n },\n\n // Listen for control events\n controls() {\n // IE doesn't support input event, so we fallback to change\n const inputEvent = browser.isIE ? 'change' : 'input';\n\n // Trigger custom and default handlers\n const proxy = (event, handlerKey, defaultHandler) => {\n const customHandler = this.config.listeners[handlerKey];\n\n // Execute custom handler\n if (utils.is.function(customHandler)) {\n customHandler.call(this, event);\n }\n\n // Only call default handler if not prevented in custom handler\n if (!event.defaultPrevented && utils.is.function(defaultHandler)) {\n defaultHandler.call(this, event);\n }\n };\n\n // Play/pause toggle\n utils.on(this.elements.buttons.play, 'click', event =>\n proxy(event, 'play', () => {\n this.togglePlay();\n }),\n );\n\n // Pause\n utils.on(this.elements.buttons.restart, 'click', event =>\n proxy(event, 'restart', () => {\n this.restart();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.rewind, 'click', event =>\n proxy(event, 'rewind', () => {\n this.rewind();\n }),\n );\n\n // Rewind\n utils.on(this.elements.buttons.forward, 'click', event =>\n proxy(event, 'forward', () => {\n this.forward();\n }),\n );\n\n // Mute toggle\n utils.on(this.elements.buttons.mute, 'click', event =>\n proxy(event, 'mute', () => {\n this.muted = !this.muted;\n }),\n );\n\n // Captions toggle\n utils.on(this.elements.buttons.captions, 'click', event =>\n proxy(event, 'captions', () => {\n this.toggleCaptions();\n }),\n );\n\n // Fullscreen toggle\n utils.on(this.elements.buttons.fullscreen, 'click', event =>\n proxy(event, 'fullscreen', () => {\n this.fullscreen.toggle();\n }),\n );\n\n // Picture-in-Picture\n utils.on(this.elements.buttons.pip, 'click', event =>\n proxy(event, 'pip', () => {\n this.pip = 'toggle';\n }),\n );\n\n // Airplay\n utils.on(this.elements.buttons.airplay, 'click', event =>\n proxy(event, 'airplay', () => {\n this.airplay();\n }),\n );\n\n // Settings menu\n utils.on(this.elements.buttons.settings, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Click anywhere closes menu\n utils.on(document.documentElement, 'click', event => {\n controls.toggleMenu.call(this, event);\n });\n\n // Settings menu\n utils.on(this.elements.settings.form, 'click', event => {\n event.stopPropagation();\n\n // Settings menu items - use event delegation as items are added/removed\n if (utils.matches(event.target, this.config.selectors.inputs.language)) {\n proxy(event, 'language', () => {\n this.language = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.quality)) {\n proxy(event, 'quality', () => {\n this.quality = event.target.value;\n });\n } else if (utils.matches(event.target, this.config.selectors.inputs.speed)) {\n proxy(event, 'speed', () => {\n this.speed = parseFloat(event.target.value);\n });\n } else {\n controls.showTab.call(this, event);\n }\n });\n\n // Seek\n utils.on(this.elements.inputs.seek, inputEvent, event =>\n proxy(event, 'seek', () => {\n this.currentTime = event.target.value / event.target.max * this.duration;\n }),\n );\n\n // Current time invert\n // Only if one time element is used for both currentTime and duration\n if (this.config.toggleInvert && !utils.is.element(this.elements.display.duration)) {\n utils.on(this.elements.display.currentTime, 'click', () => {\n // Do nothing if we're at the start\n if (this.currentTime === 0) {\n return;\n }\n\n this.config.invertTime = !this.config.invertTime;\n ui.timeUpdate.call(this);\n });\n }\n\n // Volume\n utils.on(this.elements.inputs.volume, inputEvent, event =>\n proxy(event, 'volume', () => {\n this.volume = event.target.value;\n }),\n );\n\n // Polyfill for lower fill in <input type=\"range\"> for webkit\n if (browser.isWebkit) {\n utils.on(utils.getElements.call(this, 'input[type=\"range\"]'), 'input', event => {\n controls.updateRangeFill.call(this, event.target);\n });\n }\n\n // Seek tooltip\n utils.on(this.elements.progress, 'mouseenter mouseleave mousemove', event => controls.updateSeekTooltip.call(this, event));\n\n // Toggle controls visibility based on mouse movement\n if (this.config.hideControls) {\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mouseenter mouseleave', event => {\n this.elements.controls.hover = event.type === 'mouseenter';\n });\n\n // Watch for cursor over controls so they don't hide when trying to interact\n utils.on(this.elements.controls, 'mousedown mouseup touchstart touchend touchcancel', event => {\n this.elements.controls.pressed = [\n 'mousedown',\n 'touchstart',\n ].includes(event.type);\n });\n\n // Focus in/out on controls\n utils.on(this.elements.controls, 'focusin focusout', event => {\n this.toggleControls(event);\n });\n }\n\n // Mouse wheel for volume\n utils.on(\n this.elements.inputs.volume,\n 'wheel',\n event =>\n proxy(event, 'volume', () => {\n // Detect \"natural\" scroll - suppored on OS X Safari only\n // Other browsers on OS X will be inverted until support improves\n const inverted = event.webkitDirectionInvertedFromDevice;\n const step = 1 / 50;\n let direction = 0;\n\n // Scroll down (or up on natural) to decrease\n if (event.deltaY < 0 || event.deltaX > 0) {\n if (inverted) {\n this.decreaseVolume(step);\n direction = -1;\n } else {\n this.increaseVolume(step);\n direction = 1;\n }\n }\n\n // Scroll up (or down on natural) to increase\n if (event.deltaY > 0 || event.deltaX < 0) {\n if (inverted) {\n this.increaseVolume(step);\n direction = 1;\n } else {\n this.decreaseVolume(step);\n direction = -1;\n }\n }\n\n // Don't break page scrolling at max and min\n if ((direction === 1 && this.media.volume < 1) || (direction === -1 && this.media.volume > 0)) {\n event.preventDefault();\n }\n }),\n false,\n );\n },\n};\n\nexport default listeners;\n","// ==========================================================================\n// Plyr UI\n// ==========================================================================\n\nimport utils from './utils';\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\n\nconst ui = {\n addStyleHook() {\n utils.toggleClass(this.elements.container, this.config.selectors.container.replace('.', ''), true);\n utils.toggleClass(this.elements.container, this.config.classNames.uiSupported, this.supported.ui);\n },\n\n // Toggle native HTML5 media controls\n toggleNativeControls(toggle = false) {\n if (toggle && this.isHTML5) {\n this.media.setAttribute('controls', '');\n } else {\n this.media.removeAttribute('controls');\n }\n },\n\n // Setup the UI\n build() {\n // Re-attach media element listeners\n // TODO: Use event bubbling\n listeners.media.call(this);\n\n // Don't setup interface if no support\n if (!this.supported.ui) {\n this.debug.warn(`Basic support only for ${this.provider} ${this.type}`);\n\n // Restore native controls\n ui.toggleNativeControls.call(this, true);\n\n // Bail\n return;\n }\n\n // Inject custom controls if not present\n if (!utils.is.element(this.elements.controls)) {\n // Inject custom controls\n controls.inject.call(this);\n\n // Re-attach control listeners\n listeners.controls.call(this);\n }\n\n // If there's no controls, bail\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Remove native controls\n ui.toggleNativeControls.call(this);\n\n // Captions\n captions.setup.call(this);\n\n // Reset volume\n this.volume = null;\n\n // Reset mute state\n this.muted = null;\n\n // Reset speed\n this.speed = null;\n\n // Reset loop state\n this.loop = null;\n\n // Reset quality options\n this.options.quality = [];\n\n // Reset time display\n ui.timeUpdate.call(this);\n\n // Update the UI\n ui.checkPlaying.call(this);\n\n // Ready for API calls\n this.ready = true;\n\n // Ready event at end of execution stack\n setTimeout(() => {\n utils.dispatchEvent.call(this, this.media, 'ready');\n }, 0);\n\n // Set the title\n ui.setTitle.call(this);\n },\n\n // Setup aria attribute for play and iframe title\n setTitle() {\n // Find the current text\n let label = this.config.i18n.play;\n\n // If there's a media title set, use that for the label\n if (utils.is.string(this.config.title) && !utils.is.empty(this.config.title)) {\n label += `, ${this.config.title}`;\n\n // Set container label\n this.elements.container.setAttribute('aria-label', this.config.title);\n }\n\n // If there's a play button, set label\n if (utils.is.nodeList(this.elements.buttons.play)) {\n Array.from(this.elements.buttons.play).forEach(button => {\n button.setAttribute('aria-label', label);\n });\n }\n\n // Set iframe title\n // https://github.com/sampotts/plyr/issues/124\n if (this.isEmbed) {\n const iframe = utils.getElement.call(this, 'iframe');\n\n if (!utils.is.element(iframe)) {\n return;\n }\n\n // Default to media type\n const title = !utils.is.empty(this.config.title) ? this.config.title : 'video';\n\n iframe.setAttribute('title', this.config.i18n.frameTitle.replace('{title}', title));\n }\n },\n\n // Check playing state\n checkPlaying() {\n // Class hooks\n utils.toggleClass(this.elements.container, this.config.classNames.playing, this.playing);\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.paused);\n\n // Set ARIA state\n utils.toggleState(this.elements.buttons.play, this.playing);\n\n // Toggle controls\n this.toggleControls(!this.playing);\n },\n\n // Check if media is loading\n checkLoading(event) {\n this.loading = [\n 'stalled',\n 'waiting',\n ].includes(event.type);\n\n // Clear timer\n clearTimeout(this.timers.loading);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Check if media failed to load\n checkFailed() {\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/networkState\n this.failed = this.media.networkState === 3;\n\n if (this.failed) {\n utils.toggleClass(this.elements.container, this.config.classNames.loading, false);\n utils.toggleClass(this.elements.container, this.config.classNames.error, true);\n }\n\n // Clear timer\n clearTimeout(this.timers.failed);\n\n // Timer to prevent flicker when seeking\n this.timers.loading = setTimeout(() => {\n // Toggle container class hook\n utils.toggleClass(this.elements.container, this.config.classNames.loading, this.loading);\n\n // Show controls if loading, hide if done\n this.toggleControls(this.loading);\n }, this.loading ? 250 : 0);\n },\n\n // Update volume UI and storage\n updateVolume() {\n if (!this.supported.ui) {\n return;\n }\n\n // Update range\n if (utils.is.element(this.elements.inputs.volume)) {\n ui.setRange.call(this, this.elements.inputs.volume, this.muted ? 0 : this.volume);\n }\n\n // Update mute state\n if (utils.is.element(this.elements.buttons.mute)) {\n utils.toggleState(this.elements.buttons.mute, this.muted || this.volume === 0);\n }\n },\n\n // Update seek value and lower fill\n setRange(target, value = 0) {\n if (!utils.is.element(target)) {\n return;\n }\n\n // eslint-disable-next-line\n target.value = value;\n\n // Webkit range fill\n controls.updateRangeFill.call(this, target);\n },\n\n // Set <progress> value\n setProgress(target, input) {\n const value = utils.is.number(input) ? input : 0;\n const progress = utils.is.element(target) ? target : this.elements.display.buffer;\n\n // Update value and label\n if (utils.is.element(progress)) {\n progress.value = value;\n\n // Update text label inside\n const label = progress.getElementsByTagName('span')[0];\n if (utils.is.element(label)) {\n label.childNodes[0].nodeValue = value;\n }\n }\n },\n\n // Update <progress> elements\n updateProgress(event) {\n if (!this.supported.ui || !utils.is.event(event)) {\n return;\n }\n\n let value = 0;\n\n if (event) {\n switch (event.type) {\n // Video playing\n case 'timeupdate':\n case 'seeking':\n value = utils.getPercentage(this.currentTime, this.duration);\n\n // Set seek range value only if it's a 'natural' time event\n if (event.type === 'timeupdate') {\n ui.setRange.call(this, this.elements.inputs.seek, value);\n }\n\n break;\n\n // Check buffer status\n case 'playing':\n case 'progress':\n value = (() => {\n const { buffered } = this.media;\n\n if (buffered && buffered.length) {\n // HTML5\n return utils.getPercentage(buffered.end(0), this.duration);\n } else if (utils.is.number(buffered)) {\n // YouTube returns between 0 and 1\n return buffered * 100;\n }\n\n return 0;\n })();\n\n ui.setProgress.call(this, this.elements.display.buffer, value);\n\n break;\n\n default:\n break;\n }\n }\n },\n\n // Update the displayed time\n updateTimeDisplay(target = null, time = 0, inverted = false) {\n // Bail if there's no element to display or the value isn't a number\n if (!utils.is.element(target) || !utils.is.number(time)) {\n return;\n }\n\n // Always display hours if duration is over an hour\n const displayHours = utils.getHours(this.duration) > 0;\n\n // eslint-disable-next-line no-param-reassign\n target.textContent = utils.formatTime(time, displayHours, inverted);\n },\n\n // Handle time change event\n timeUpdate(event) {\n // Only invert if only one time element is displayed and used for both duration and currentTime\n const invert = !utils.is.element(this.elements.display.duration) && this.config.invertTime;\n\n // Duration\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, invert ? this.duration - this.currentTime : this.currentTime, invert);\n\n // Ignore updates while seeking\n if (event && event.type === 'timeupdate' && this.media.seeking) {\n return;\n }\n\n // Playing progress\n ui.updateProgress.call(this, event);\n },\n\n // Show the duration on metadataloaded\n durationUpdate() {\n if (!this.supported.ui) {\n return;\n }\n\n // If there's a spot to display duration\n const hasDuration = utils.is.element(this.elements.display.duration);\n\n // If there's only one time display, display duration there\n if (!hasDuration && this.config.displayDuration && this.paused) {\n ui.updateTimeDisplay.call(this, this.elements.display.currentTime, this.duration);\n }\n\n // If there's a duration element, update content\n if (hasDuration) {\n ui.updateTimeDisplay.call(this, this.elements.display.duration, this.duration);\n }\n\n // Update the tooltip (if visible)\n controls.updateSeekTooltip.call(this);\n },\n};\n\nexport default ui;\n","// ==========================================================================\n// Plyr controls\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport ui from './ui';\nimport captions from './captions';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst controls = {\n // Webkit polyfill for lower fill range\n updateRangeFill(target) {\n // WebKit only\n if (!browser.isWebkit) {\n return;\n }\n\n // Get range from event if event passed\n const range = utils.is.event(target) ? target.target : target;\n\n // Needs to be a valid <input type='range'>\n if (!utils.is.element(range) || range.getAttribute('type') !== 'range') {\n return;\n }\n\n // Set CSS custom property\n range.style.setProperty('--value', `${range.value / range.max * 100}%`);\n },\n\n // Get icon URL\n getIconUrl() {\n return {\n url: this.config.iconUrl,\n absolute: this.config.iconUrl.indexOf('http') === 0 || (browser.isIE && !window.svg4everybody),\n };\n },\n\n // Create <svg> icon\n createIcon(type, attributes) {\n const namespace = 'http://www.w3.org/2000/svg';\n const iconUrl = controls.getIconUrl.call(this);\n const iconPath = `${!iconUrl.absolute ? iconUrl.url : ''}#${this.config.iconPrefix}`;\n\n // Create <svg>\n const icon = document.createElementNS(namespace, 'svg');\n utils.setAttributes(\n icon,\n utils.extend(attributes, {\n role: 'presentation',\n }),\n );\n\n // Create the <use> to reference sprite\n const use = document.createElementNS(namespace, 'use');\n const path = `${iconPath}-${type}`;\n\n // Set `href` attributes\n // https://github.com/sampotts/plyr/issues/460\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href\n if ('href' in use) {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'href', path);\n } else {\n use.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', path);\n }\n\n // Add <use> to <svg>\n icon.appendChild(use);\n\n return icon;\n },\n\n // Create hidden text label\n createLabel(type, attr) {\n let text = this.config.i18n[type];\n const attributes = Object.assign({}, attr);\n\n switch (type) {\n case 'pip':\n text = 'PIP';\n break;\n\n case 'airplay':\n text = 'AirPlay';\n break;\n\n default:\n break;\n }\n\n if ('class' in attributes) {\n attributes.class += ` ${this.config.classNames.hidden}`;\n } else {\n attributes.class = this.config.classNames.hidden;\n }\n\n return utils.createElement('span', attributes, text);\n },\n\n // Create a badge\n createBadge(text) {\n if (utils.is.empty(text)) {\n return null;\n }\n\n const badge = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n badge.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.menu.badge,\n },\n text,\n ),\n );\n\n return badge;\n },\n\n // Create a <button>\n createButton(buttonType, attr) {\n const button = utils.createElement('button');\n const attributes = Object.assign({}, attr);\n let type = buttonType;\n\n let toggle = false;\n let label;\n let icon;\n let labelPressed;\n let iconPressed;\n\n if (!('type' in attributes)) {\n attributes.type = 'button';\n }\n\n if ('class' in attributes) {\n if (attributes.class.includes(this.config.classNames.control)) {\n attributes.class += ` ${this.config.classNames.control}`;\n }\n } else {\n attributes.class = this.config.classNames.control;\n }\n\n // Large play button\n switch (type) {\n case 'play':\n toggle = true;\n label = 'play';\n labelPressed = 'pause';\n icon = 'play';\n iconPressed = 'pause';\n break;\n\n case 'mute':\n toggle = true;\n label = 'mute';\n labelPressed = 'unmute';\n icon = 'volume';\n iconPressed = 'muted';\n break;\n\n case 'captions':\n toggle = true;\n label = 'enableCaptions';\n labelPressed = 'disableCaptions';\n icon = 'captions-off';\n iconPressed = 'captions-on';\n break;\n\n case 'fullscreen':\n toggle = true;\n label = 'enterFullscreen';\n labelPressed = 'exitFullscreen';\n icon = 'enter-fullscreen';\n iconPressed = 'exit-fullscreen';\n break;\n\n case 'play-large':\n attributes.class += ` ${this.config.classNames.control}--overlaid`;\n type = 'play';\n label = 'play';\n icon = 'play';\n break;\n\n default:\n label = type;\n icon = type;\n }\n\n // Setup toggle icon and labels\n if (toggle) {\n // Icon\n button.appendChild(controls.createIcon.call(this, iconPressed, { class: 'icon--pressed' }));\n button.appendChild(controls.createIcon.call(this, icon, { class: 'icon--not-pressed' }));\n\n // Label/Tooltip\n button.appendChild(controls.createLabel.call(this, labelPressed, { class: 'label--pressed' }));\n button.appendChild(controls.createLabel.call(this, label, { class: 'label--not-pressed' }));\n\n // Add aria attributes\n attributes['aria-pressed'] = false;\n attributes['aria-label'] = this.config.i18n[label];\n } else {\n button.appendChild(controls.createIcon.call(this, icon));\n button.appendChild(controls.createLabel.call(this, label));\n }\n\n // Merge attributes\n utils.extend(attributes, utils.getAttributesFromSelector(this.config.selectors.buttons[type], attributes));\n\n utils.setAttributes(button, attributes);\n\n // We have multiple play buttons\n if (type === 'play') {\n if (!utils.is.array(this.elements.buttons[type])) {\n this.elements.buttons[type] = [];\n }\n\n this.elements.buttons[type].push(button);\n } else {\n this.elements.buttons[type] = button;\n }\n\n return button;\n },\n\n // Create an <input type='range'>\n createRange(type, attributes) {\n // Seek label\n const label = utils.createElement(\n 'label',\n {\n for: attributes.id,\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n );\n\n // Seek input\n const input = utils.createElement(\n 'input',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.inputs[type]),\n {\n type: 'range',\n min: 0,\n max: 100,\n step: 0.01,\n value: 0,\n autocomplete: 'off',\n },\n attributes,\n ),\n );\n\n this.elements.inputs[type] = input;\n\n // Set the fill for webkit now\n controls.updateRangeFill.call(this, input);\n\n return {\n label,\n input,\n };\n },\n\n // Create a <progress>\n createProgress(type, attributes) {\n const progress = utils.createElement(\n 'progress',\n utils.extend(\n utils.getAttributesFromSelector(this.config.selectors.display[type]),\n {\n min: 0,\n max: 100,\n value: 0,\n },\n attributes,\n ),\n );\n\n // Create the label inside\n if (type !== 'volume') {\n progress.appendChild(utils.createElement('span', null, '0'));\n\n let suffix = '';\n switch (type) {\n case 'played':\n suffix = this.config.i18n.played;\n break;\n\n case 'buffer':\n suffix = this.config.i18n.buffered;\n break;\n\n default:\n break;\n }\n\n progress.textContent = `% ${suffix.toLowerCase()}`;\n }\n\n this.elements.display[type] = progress;\n\n return progress;\n },\n\n // Create time display\n createTime(type) {\n const container = utils.createElement('div', {\n class: 'plyr__time',\n });\n\n container.appendChild(\n utils.createElement(\n 'span',\n {\n class: this.config.classNames.hidden,\n },\n this.config.i18n[type],\n ),\n );\n\n container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));\n\n this.elements.display[type] = container;\n\n return container;\n },\n\n // Create a settings menu item\n createMenuItem(value, list, type, title, badge = null, checked = false) {\n const item = utils.createElement('li');\n\n const label = utils.createElement('label', {\n class: this.config.classNames.control,\n });\n\n const radio = utils.createElement(\n 'input',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.inputs[type]), {\n type: 'radio',\n name: `plyr-${type}`,\n value,\n checked,\n class: 'plyr__sr-only',\n }),\n );\n\n const faux = utils.createElement('span', { 'aria-hidden': true });\n\n label.appendChild(radio);\n label.appendChild(faux);\n label.insertAdjacentHTML('beforeend', title);\n\n if (utils.is.element(badge)) {\n label.appendChild(badge);\n }\n\n item.appendChild(label);\n list.appendChild(item);\n },\n\n // Update hover tooltip for seeking\n updateSeekTooltip(event) {\n // Bail if setting not true\n if (\n !this.config.tooltips.seek ||\n !utils.is.element(this.elements.inputs.seek) ||\n !utils.is.element(this.elements.display.seekTooltip) ||\n this.duration === 0\n ) {\n return;\n }\n\n // Calculate percentage\n let percent = 0;\n const clientRect = this.elements.inputs.seek.getBoundingClientRect();\n const visible = `${this.config.classNames.tooltip}--visible`;\n\n // Determine percentage, if already visible\n if (utils.is.event(event)) {\n percent = 100 / clientRect.width * (event.pageX - clientRect.left);\n } else if (utils.hasClass(this.elements.display.seekTooltip, visible)) {\n percent = parseFloat(this.elements.display.seekTooltip.style.left, 10);\n } else {\n return;\n }\n\n // Set bounds\n if (percent < 0) {\n percent = 0;\n } else if (percent > 100) {\n percent = 100;\n }\n\n // Display the time a click would seek to\n ui.updateTimeDisplay.call(this, this.elements.display.seekTooltip, this.duration / 100 * percent);\n\n // Set position\n this.elements.display.seekTooltip.style.left = `${percent}%`;\n\n // Show/hide the tooltip\n // If the event is a moues in/out and percentage is inside bounds\n if (utils.is.event(event) && [\n 'mouseenter',\n 'mouseleave',\n ].includes(event.type)) {\n utils.toggleClass(this.elements.display.seekTooltip, visible, event.type === 'mouseenter');\n }\n },\n\n // Hide/show a tab\n toggleTab(setting, toggle) {\n const tab = this.elements.settings.tabs[setting];\n const pane = this.elements.settings.panes[setting];\n\n utils.toggleHidden(tab, !toggle);\n utils.toggleHidden(pane, !toggle);\n },\n\n // Set the YouTube quality menu\n // TODO: Support for HTML5\n setQualityMenu(options) {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.quality)) {\n return;\n }\n\n const type = 'quality';\n const list = this.elements.settings.panes.quality.querySelector('ul');\n\n // Set options if passed and filter based on config\n if (utils.is.array(options)) {\n this.options.quality = options.filter(quality => this.config.quality.options.includes(quality));\n } else {\n this.options.quality = this.config.quality.options;\n }\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.quality) && this.isYouTube;\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Get the badge HTML for HD, 4K etc\n const getBadge = quality => {\n let label = '';\n\n switch (quality) {\n case 'hd2160':\n label = '4K';\n break;\n\n case 'hd1440':\n label = 'WQHD';\n break;\n\n case 'hd1080':\n label = 'HD';\n break;\n\n case 'hd720':\n label = 'HD';\n break;\n\n default:\n break;\n }\n\n if (!label.length) {\n return null;\n }\n\n return controls.createBadge.call(this, label);\n };\n\n this.options.quality.forEach(quality =>\n controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),\n );\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Translate a value into a nice label\n // TODO: Localisation\n getLabel(setting, value) {\n switch (setting) {\n case 'speed':\n return value === 1 ? 'Normal' : `${value}&times;`;\n\n case 'quality':\n switch (value) {\n case 'hd2160':\n return '2160P';\n case 'hd1440':\n return '1440P';\n case 'hd1080':\n return '1080P';\n case 'hd720':\n return '720P';\n case 'large':\n return '480P';\n case 'medium':\n return '360P';\n case 'small':\n return '240P';\n case 'tiny':\n return 'Tiny';\n case 'default':\n return 'Auto';\n default:\n return value;\n }\n\n case 'captions':\n return controls.getLanguage.call(this);\n\n default:\n return null;\n }\n },\n\n // Update the selected setting\n updateSetting(setting, container) {\n const pane = this.elements.settings.panes[setting];\n let value = null;\n let list = container;\n\n switch (setting) {\n case 'captions':\n value = this.captions.active ? this.captions.language : '';\n break;\n\n default:\n value = this[setting];\n\n // Get default\n if (utils.is.empty(value)) {\n value = this.config[setting].default;\n }\n\n // Unsupported value\n if (!this.options[setting].includes(value)) {\n this.debug.warn(`Unsupported value of '${value}' for ${setting}`);\n return;\n }\n\n // Disabled value\n if (!this.config[setting].options.includes(value)) {\n this.debug.warn(`Disabled value of '${value}' for ${setting}`);\n return;\n }\n\n break;\n }\n\n // Get the list if we need to\n if (!utils.is.element(list)) {\n list = pane && pane.querySelector('ul');\n }\n\n // Update the label\n if (!utils.is.empty(value)) {\n const label = this.elements.settings.tabs[setting].querySelector(`.${this.config.classNames.menu.value}`);\n label.innerHTML = controls.getLabel.call(this, setting, value);\n }\n\n // Find the radio option\n const target = list && list.querySelector(`input[value=\"${value}\"]`);\n\n if (utils.is.element(target)) {\n // Check it\n target.checked = true;\n }\n },\n\n // Set the looping options\n /* setLoopMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.loop)) {\n return;\n }\n\n const options = ['start', 'end', 'all', 'reset'];\n const list = this.elements.settings.panes.loop.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.loop, false);\n utils.toggleHidden(this.elements.settings.panes.loop, false);\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.loop.options);\n controls.toggleTab.call(this, 'loop', toggle);\n\n // Empty the menu\n utils.emptyElement(list);\n\n options.forEach(option => {\n const item = utils.createElement('li');\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.loop), {\n type: 'button',\n class: this.config.classNames.control,\n 'data-plyr-loop-action': option,\n }),\n this.config.i18n[option]\n );\n\n if (['start', 'end'].includes(option)) {\n const badge = controls.createBadge.call(this, '00:00');\n button.appendChild(badge);\n }\n\n item.appendChild(button);\n list.appendChild(item);\n });\n }, */\n\n // Get current selected caption language\n // TODO: rework this to user the getter in the API?\n getLanguage() {\n if (!this.supported.ui) {\n return null;\n }\n\n if (!support.textTracks || !captions.getTracks.call(this).length) {\n return this.config.i18n.none;\n }\n\n if (this.captions.active) {\n const currentTrack = captions.getCurrentTrack.call(this);\n\n if (utils.is.track(currentTrack)) {\n return currentTrack.label;\n }\n }\n\n return this.config.i18n.disabled;\n },\n\n // Set a list of available captions languages\n setCaptionsMenu() {\n // TODO: Captions or language? Currently it's mixed\n const type = 'captions';\n const list = this.elements.settings.panes.captions.querySelector('ul');\n\n // Toggle the pane and tab\n const hasTracks = captions.getTracks.call(this).length;\n controls.toggleTab.call(this, type, hasTracks);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // If there's no captions, bail\n if (!hasTracks) {\n return;\n }\n\n // Re-map the tracks into just the data we need\n const tracks = captions.getTracks.call(this).map(track => ({\n language: track.language,\n label: !utils.is.empty(track.label) ? track.label : track.language.toUpperCase(),\n }));\n\n // Add the \"None\" option to turn off captions\n tracks.unshift({\n language: '',\n label: this.config.i18n.none,\n });\n\n // Generate options\n tracks.forEach(track => {\n controls.createMenuItem.call(\n this,\n track.language,\n list,\n 'language',\n track.label || track.language,\n controls.createBadge.call(this, track.language.toUpperCase()),\n track.language.toLowerCase() === this.captions.language.toLowerCase(),\n );\n });\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Set a list of available captions languages\n setSpeedMenu() {\n // Menu required\n if (!utils.is.element(this.elements.settings.panes.speed)) {\n return;\n }\n\n const type = 'speed';\n\n // Set the default speeds\n if (!utils.is.object(this.options.speed) || !Object.keys(this.options.speed).length) {\n this.options.speed = [\n 0.5,\n 0.75,\n 1,\n 1.25,\n 1.5,\n 1.75,\n 2,\n ];\n }\n\n // Set options if passed and filter based on config\n this.options.speed = this.options.speed.filter(speed => this.config.speed.options.includes(speed));\n\n // Toggle the pane and tab\n const toggle = !utils.is.empty(this.options.speed);\n controls.toggleTab.call(this, type, toggle);\n\n // If we're hiding, nothing more to do\n if (!toggle) {\n return;\n }\n\n // Get the list to populate\n const list = this.elements.settings.panes.speed.querySelector('ul');\n\n // Show the pane and tab\n utils.toggleHidden(this.elements.settings.tabs.speed, false);\n utils.toggleHidden(this.elements.settings.panes.speed, false);\n\n // Empty the menu\n utils.emptyElement(list);\n\n // Create items\n this.options.speed.forEach(speed => controls.createMenuItem.call(this, speed, list, type, controls.getLabel.call(this, 'speed', speed)));\n\n controls.updateSetting.call(this, type, list);\n },\n\n // Show/hide menu\n toggleMenu(event) {\n const { form } = this.elements.settings;\n const button = this.elements.buttons.settings;\n const show = utils.is.boolean(event) ? event : utils.is.element(form) && form.getAttribute('aria-hidden') === 'true';\n\n if (utils.is.event(event)) {\n const isMenuItem = utils.is.element(form) && form.contains(event.target);\n const isButton = event.target === this.elements.buttons.settings;\n\n // If the click was inside the form or if the click\n // wasn't the button or menu item and we're trying to\n // show the menu (a doc click shouldn't show the menu)\n if (isMenuItem || (!isMenuItem && !isButton && show)) {\n return;\n }\n\n // Prevent the toggle being caught by the doc listener\n if (isButton) {\n event.stopPropagation();\n }\n }\n\n // Set form and button attributes\n if (utils.is.element(button)) {\n button.setAttribute('aria-expanded', show);\n }\n\n if (utils.is.element(form)) {\n form.setAttribute('aria-hidden', !show);\n utils.toggleClass(this.elements.container, this.config.classNames.menu.open, show);\n\n if (show) {\n form.removeAttribute('tabindex');\n } else {\n form.setAttribute('tabindex', -1);\n }\n }\n },\n\n // Get the natural size of a tab\n getTabSize(tab) {\n const clone = tab.cloneNode(true);\n clone.style.position = 'absolute';\n clone.style.opacity = 0;\n clone.setAttribute('aria-hidden', false);\n\n // Prevent input's being unchecked due to the name being identical\n Array.from(clone.querySelectorAll('input[name]')).forEach(input => {\n const name = input.getAttribute('name');\n input.setAttribute('name', `${name}-clone`);\n });\n\n // Append to parent so we get the \"real\" size\n tab.parentNode.appendChild(clone);\n\n // Get the sizes before we remove\n const width = clone.scrollWidth;\n const height = clone.scrollHeight;\n\n // Remove from the DOM\n utils.removeElement(clone);\n\n return {\n width,\n height,\n };\n },\n\n // Toggle Menu\n showTab(event) {\n const { menu } = this.elements.settings;\n const tab = event.target;\n const show = tab.getAttribute('aria-expanded') === 'false';\n const pane = document.getElementById(tab.getAttribute('aria-controls'));\n\n // Nothing to show, bail\n if (!utils.is.element(pane)) {\n return;\n }\n\n // Are we targetting a tab? If not, bail\n const isTab = pane.getAttribute('role') === 'tabpanel';\n if (!isTab) {\n return;\n }\n\n // Hide all other tabs\n // Get other tabs\n const current = menu.querySelector('[role=\"tabpanel\"][aria-hidden=\"false\"]');\n const container = current.parentNode;\n\n // Set other toggles to be expanded false\n Array.from(menu.querySelectorAll(`[aria-controls=\"${current.getAttribute('id')}\"]`)).forEach(toggle => {\n toggle.setAttribute('aria-expanded', false);\n });\n\n // If we can do fancy animations, we'll animate the height/width\n if (support.transitions && !support.reducedMotion) {\n // Set the current width as a base\n container.style.width = `${current.scrollWidth}px`;\n container.style.height = `${current.scrollHeight}px`;\n\n // Get potential sizes\n const size = controls.getTabSize.call(this, pane);\n\n // Restore auto height/width\n const restore = e => {\n // We're only bothered about height and width on the container\n if (e.target !== container || ![\n 'width',\n 'height',\n ].includes(e.propertyName)) {\n return;\n }\n\n // Revert back to auto\n container.style.width = '';\n container.style.height = '';\n\n // Only listen once\n utils.off(container, utils.transitionEndEvent, restore);\n };\n\n // Listen for the transition finishing and restore auto height/width\n utils.on(container, utils.transitionEndEvent, restore);\n\n // Set dimensions to target\n container.style.width = `${size.width}px`;\n container.style.height = `${size.height}px`;\n }\n\n // Set attributes on current tab\n current.setAttribute('aria-hidden', true);\n current.setAttribute('tabindex', -1);\n\n // Set attributes on target\n pane.setAttribute('aria-hidden', !show);\n tab.setAttribute('aria-expanded', show);\n pane.removeAttribute('tabindex');\n\n // Focus the first item\n pane.querySelectorAll('button:not(:disabled), input:not(:disabled), [tabindex]')[0].focus();\n },\n\n // Build the default HTML\n // TODO: Set order based on order in the config.controls array?\n create(data) {\n // Do nothing if we want no controls\n if (utils.is.empty(this.config.controls)) {\n return null;\n }\n\n // Create the container\n const container = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.controls.wrapper));\n\n // Restart button\n if (this.config.controls.includes('restart')) {\n container.appendChild(controls.createButton.call(this, 'restart'));\n }\n\n // Rewind button\n if (this.config.controls.includes('rewind')) {\n container.appendChild(controls.createButton.call(this, 'rewind'));\n }\n\n // Play/Pause button\n if (this.config.controls.includes('play')) {\n container.appendChild(controls.createButton.call(this, 'play'));\n }\n\n // Fast forward button\n if (this.config.controls.includes('fast-forward')) {\n container.appendChild(controls.createButton.call(this, 'fast-forward'));\n }\n\n // Progress\n if (this.config.controls.includes('progress')) {\n const progress = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.progress));\n\n // Seek range slider\n const seek = controls.createRange.call(this, 'seek', {\n id: `plyr-seek-${data.id}`,\n });\n progress.appendChild(seek.label);\n progress.appendChild(seek.input);\n\n // Buffer progress\n progress.appendChild(controls.createProgress.call(this, 'buffer'));\n\n // TODO: Add loop display indicator\n\n // Seek tooltip\n if (this.config.tooltips.seek) {\n const tooltip = utils.createElement(\n 'span',\n {\n role: 'tooltip',\n class: this.config.classNames.tooltip,\n },\n '00:00',\n );\n\n progress.appendChild(tooltip);\n this.elements.display.seekTooltip = tooltip;\n }\n\n this.elements.progress = progress;\n container.appendChild(this.elements.progress);\n }\n\n // Media current time display\n if (this.config.controls.includes('current-time')) {\n container.appendChild(controls.createTime.call(this, 'currentTime'));\n }\n\n // Media duration display\n if (this.config.controls.includes('duration')) {\n container.appendChild(controls.createTime.call(this, 'duration'));\n }\n\n // Toggle mute button\n if (this.config.controls.includes('mute')) {\n container.appendChild(controls.createButton.call(this, 'mute'));\n }\n\n // Volume range control\n if (this.config.controls.includes('volume')) {\n const volume = utils.createElement('div', {\n class: 'plyr__volume',\n });\n\n // Set the attributes\n const attributes = {\n max: 1,\n step: 0.05,\n value: this.config.volume,\n };\n\n // Create the volume range slider\n const range = controls.createRange.call(\n this,\n 'volume',\n utils.extend(attributes, {\n id: `plyr-volume-${data.id}`,\n }),\n );\n volume.appendChild(range.label);\n volume.appendChild(range.input);\n\n this.elements.volume = volume;\n\n container.appendChild(volume);\n }\n\n // Toggle captions button\n if (this.config.controls.includes('captions')) {\n container.appendChild(controls.createButton.call(this, 'captions'));\n }\n\n // Settings button / menu\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n const menu = utils.createElement('div', {\n class: 'plyr__menu',\n });\n\n menu.appendChild(\n controls.createButton.call(this, 'settings', {\n id: `plyr-settings-toggle-${data.id}`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}`,\n 'aria-expanded': false,\n }),\n );\n\n const form = utils.createElement('form', {\n class: 'plyr__menu__container',\n id: `plyr-settings-${data.id}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tablist',\n tabindex: -1,\n });\n\n const inner = utils.createElement('div');\n\n const home = utils.createElement('div', {\n id: `plyr-settings-${data.id}-home`,\n 'aria-hidden': false,\n 'aria-labelled-by': `plyr-settings-toggle-${data.id}`,\n role: 'tabpanel',\n });\n\n // Create the tab list\n const tabs = utils.createElement('ul', {\n role: 'tablist',\n });\n\n // Build the tabs\n this.config.settings.forEach(type => {\n const tab = utils.createElement('li', {\n role: 'tab',\n hidden: '',\n });\n\n const button = utils.createElement(\n 'button',\n utils.extend(utils.getAttributesFromSelector(this.config.selectors.buttons.settings), {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--forward`,\n id: `plyr-settings-${data.id}-${type}-tab`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-${type}`,\n 'aria-expanded': false,\n }),\n this.config.i18n[type],\n );\n\n const value = utils.createElement('span', {\n class: this.config.classNames.menu.value,\n });\n\n // Speed contains HTML entities\n value.innerHTML = data[type];\n\n button.appendChild(value);\n tab.appendChild(button);\n tabs.appendChild(tab);\n\n this.elements.settings.tabs[type] = tab;\n });\n\n home.appendChild(tabs);\n inner.appendChild(home);\n\n // Build the panes\n this.config.settings.forEach(type => {\n const pane = utils.createElement('div', {\n id: `plyr-settings-${data.id}-${type}`,\n 'aria-hidden': true,\n 'aria-labelled-by': `plyr-settings-${data.id}-${type}-tab`,\n role: 'tabpanel',\n tabindex: -1,\n hidden: '',\n });\n\n const back = utils.createElement(\n 'button',\n {\n type: 'button',\n class: `${this.config.classNames.control} ${this.config.classNames.control}--back`,\n 'aria-haspopup': true,\n 'aria-controls': `plyr-settings-${data.id}-home`,\n 'aria-expanded': false,\n },\n this.config.i18n[type],\n );\n\n pane.appendChild(back);\n\n const options = utils.createElement('ul');\n\n pane.appendChild(options);\n inner.appendChild(pane);\n\n this.elements.settings.panes[type] = pane;\n });\n\n form.appendChild(inner);\n menu.appendChild(form);\n container.appendChild(menu);\n\n this.elements.settings.form = form;\n this.elements.settings.menu = menu;\n }\n\n // Picture in picture button\n if (this.config.controls.includes('pip') && support.pip) {\n container.appendChild(controls.createButton.call(this, 'pip'));\n }\n\n // Airplay button\n if (this.config.controls.includes('airplay') && support.airplay) {\n container.appendChild(controls.createButton.call(this, 'airplay'));\n }\n\n // Toggle fullscreen button\n if (this.config.controls.includes('fullscreen')) {\n container.appendChild(controls.createButton.call(this, 'fullscreen'));\n }\n\n // Larger overlaid play button\n if (this.config.controls.includes('play-large')) {\n this.elements.container.appendChild(controls.createButton.call(this, 'play-large'));\n }\n\n this.elements.controls = container;\n\n if (this.config.controls.includes('settings') && this.config.settings.includes('speed')) {\n controls.setSpeedMenu.call(this);\n }\n\n return container;\n },\n\n // Insert controls\n inject() {\n // Sprite\n if (this.config.loadSprite) {\n const icon = controls.getIconUrl.call(this);\n\n // Only load external sprite using AJAX\n if (icon.absolute) {\n utils.loadSprite(icon.url, 'sprite-plyr');\n }\n }\n\n // Create a unique ID\n this.id = Math.floor(Math.random() * 10000);\n\n // Null by default\n let container = null;\n this.elements.controls = null;\n\n // HTML or Element passed as the option\n if (utils.is.string(this.config.controls) || utils.is.element(this.config.controls)) {\n container = this.config.controls;\n } else if (utils.is.function(this.config.controls)) {\n // A custom function to build controls\n // The function can return a HTMLElement or String\n container = this.config.controls({\n id: this.id,\n seektime: this.config.seekTime,\n title: this.config.title,\n });\n } else {\n // Create controls\n container = controls.create.call(this, {\n id: this.id,\n seektime: this.config.seekTime,\n speed: this.speed,\n quality: this.quality,\n captions: controls.getLanguage.call(this),\n // TODO: Looping\n // loop: 'None',\n });\n }\n\n // Controls container\n let target;\n\n // Inject to custom location\n if (utils.is.string(this.config.selectors.controls.container)) {\n target = document.querySelector(this.config.selectors.controls.container);\n }\n\n // Inject into the container by default\n if (!utils.is.element(target)) {\n target = this.elements.container;\n }\n\n // Inject controls HTML\n if (utils.is.element(container)) {\n target.appendChild(container);\n } else {\n target.insertAdjacentHTML('beforeend', container);\n }\n\n // Find the elements if need be\n if (!utils.is.element(this.elements.controls)) {\n utils.findElements.call(this);\n }\n\n // Edge sometimes doesn't finish the paint so force a redraw\n if (window.navigator.userAgent.includes('Edge')) {\n utils.repaint(target);\n }\n\n // Setup tooltips\n if (this.config.tooltips.controls) {\n const labels = utils.getElements.call(\n this,\n [\n this.config.selectors.controls.wrapper,\n ' ',\n this.config.selectors.labels,\n ' .',\n this.config.classNames.hidden,\n ].join(''),\n );\n\n Array.from(labels).forEach(label => {\n utils.toggleClass(label, this.config.classNames.hidden, false);\n utils.toggleClass(label, this.config.classNames.tooltip, true);\n label.setAttribute('role', 'tooltip');\n });\n }\n },\n};\n\nexport default controls;\n","// ==========================================================================\n// Plyr Captions\n// TODO: Create as class\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport controls from './controls';\n\nconst captions = {\n // Setup captions\n setup() {\n // Requires UI support\n if (!this.supported.ui) {\n return;\n }\n\n // Set default language if not set\n const stored = this.storage.get('language');\n\n if (!utils.is.empty(stored)) {\n this.captions.language = stored;\n }\n\n if (utils.is.empty(this.captions.language)) {\n this.captions.language = this.config.captions.language.toLowerCase();\n }\n\n // Set captions enabled state if not set\n if (!utils.is.boolean(this.captions.active)) {\n const active = this.storage.get('captions');\n\n if (utils.is.boolean(active)) {\n this.captions.active = active;\n } else {\n this.captions.active = this.config.captions.active;\n }\n }\n\n // Only Vimeo and HTML5 video supported at this point\n if (!this.isVideo || this.isYouTube || (this.isHTML5 && !support.textTracks)) {\n // Clear menu and hide\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n\n return;\n }\n // Inject the container\n if (!utils.is.element(this.elements.captions)) {\n this.elements.captions = utils.createElement('div', utils.getAttributesFromSelector(this.config.selectors.captions));\n\n utils.insertAfter(this.elements.captions, this.elements.wrapper);\n }\n\n // Set the class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.enabled, !utils.is.empty(captions.getTracks.call(this)));\n\n // Get tracks\n const tracks = captions.getTracks.call(this);\n\n // If no caption file exists, hide container for caption text\n if (utils.is.empty(tracks)) {\n return;\n }\n\n // Get browser info\n const browser = utils.getBrowser();\n\n // Fix IE captions if CORS is used\n // Fetch captions and inject as blobs instead (data URIs not supported!)\n if (browser.isIE && window.URL) {\n const elements = this.media.querySelectorAll('track');\n\n Array.from(elements).forEach(track => {\n const src = track.getAttribute('src');\n const href = utils.parseUrl(src);\n\n if (href.hostname !== window.location.href.hostname && [\n 'http:',\n 'https:',\n ].includes(href.protocol)) {\n utils\n .fetch(src, 'blob')\n .then(blob => {\n track.setAttribute('src', window.URL.createObjectURL(blob));\n })\n .catch(() => {\n utils.removeElement(track);\n });\n }\n });\n }\n\n // Set language\n captions.setLanguage.call(this);\n\n // Enable UI\n captions.show.call(this);\n\n // Set available languages in list\n if (utils.is.array(this.config.controls) && this.config.controls.includes('settings') && this.config.settings.includes('captions')) {\n controls.setCaptionsMenu.call(this);\n }\n },\n\n // Set the captions language\n setLanguage() {\n // Setup HTML5 track rendering\n if (this.isHTML5 && this.isVideo) {\n captions.getTracks.call(this).forEach(track => {\n // Show track\n utils.on(track, 'cuechange', event => captions.setCue.call(this, event));\n\n // Turn off native caption rendering to avoid double captions\n // eslint-disable-next-line\n track.mode = 'hidden';\n });\n\n // Get current track\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Check if suported kind\n if (utils.is.track(currentTrack)) {\n // If we change the active track while a cue is already displayed we need to update it\n if (Array.from(currentTrack.activeCues || []).length) {\n captions.setCue.call(this, currentTrack);\n }\n }\n } else if (this.isVimeo && this.captions.active) {\n this.embed.enableTextTrack(this.language);\n }\n },\n\n // Get the tracks\n getTracks() {\n // Return empty array at least\n if (utils.is.nullOrUndefined(this.media)) {\n return [];\n }\n\n // Only get accepted kinds\n return Array.from(this.media.textTracks || []).filter(track => [\n 'captions',\n 'subtitles',\n ].includes(track.kind));\n },\n\n // Get the current track for the current language\n getCurrentTrack() {\n return captions.getTracks.call(this).find(track => track.language.toLowerCase() === this.language);\n },\n\n // Display active caption if it contains text\n setCue(input) {\n // Get the track from the event if needed\n const track = utils.is.event(input) ? input.target : input;\n const { activeCues } = track;\n const active = activeCues.length && activeCues[0];\n const currentTrack = captions.getCurrentTrack.call(this);\n\n // Only display current track\n if (track !== currentTrack) {\n return;\n }\n\n // Display a cue, if there is one\n if (utils.is.cue(active)) {\n captions.setText.call(this, active.getCueAsHTML());\n } else {\n captions.setText.call(this, null);\n }\n\n utils.dispatchEvent.call(this, this.media, 'cuechange');\n },\n\n // Set the current caption\n setText(input) {\n // Requires UI\n if (!this.supported.ui) {\n return;\n }\n\n if (utils.is.element(this.elements.captions)) {\n const content = utils.createElement('span');\n\n // Empty the container\n utils.emptyElement(this.elements.captions);\n\n // Default to empty\n const caption = !utils.is.nullOrUndefined(input) ? input : '';\n\n // Set the span content\n if (utils.is.string(caption)) {\n content.textContent = caption.trim();\n } else {\n content.appendChild(caption);\n }\n\n // Set new caption text\n this.elements.captions.appendChild(content);\n } else {\n this.debug.warn('No captions element to render to');\n }\n },\n\n // Display captions container and button (for initialization)\n show() {\n // If there's no caption toggle, bail\n if (!utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // Try to load the value from storage\n let active = this.storage.get('captions');\n\n // Otherwise fall back to the default config\n if (!utils.is.boolean(active)) {\n ({ active } = this.config.captions);\n } else {\n this.captions.active = active;\n }\n\n if (active) {\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, true);\n utils.toggleState(this.elements.buttons.captions, true);\n }\n },\n};\n\nexport default captions;\n","// ==========================================================================\n// YouTube plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport controls from './../controls';\nimport ui from './../ui';\n\nconst youtube = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set aspect ratio\n youtube.setAspectRatio.call(this);\n\n // Setup API\n if (utils.is.object(window.YT) && utils.is.function(window.YT.Player)) {\n youtube.ready.call(this);\n } else {\n // Load the API\n utils.loadScript(this.config.urls.youtube.api);\n\n // Setup callback for the API\n // YouTube has it's own system of course...\n window.onYouTubeReadyCallbacks = window.onYouTubeReadyCallbacks || [];\n\n // Add to queue\n window.onYouTubeReadyCallbacks.push(() => {\n youtube.ready.call(this);\n });\n\n // Set callback to process queue\n window.onYouTubeIframeAPIReady = () => {\n window.onYouTubeReadyCallbacks.forEach(callback => {\n callback();\n });\n };\n }\n },\n\n // Get the media title\n getTitle(videoId) {\n // Try via undocumented API method first\n // This method disappears now and then though...\n // https://github.com/sampotts/plyr/issues/709\n if (utils.is.function(this.embed.getVideoData)) {\n const { title } = this.embed.getVideoData();\n\n if (utils.is.empty(title)) {\n this.config.title = title;\n ui.setTitle.call(this);\n return;\n }\n }\n\n // Or via Google API\n const key = this.config.keys.google;\n if (utils.is.string(key) && !utils.is.empty(key)) {\n const url = `https://www.googleapis.com/youtube/v3/videos?id=${videoId}&key=${key}&fields=items(snippet(title))&part=snippet`;\n\n utils\n .fetch(url)\n .then(result => {\n if (utils.is.object(result)) {\n this.config.title = result.items[0].snippet.title;\n ui.setTitle.call(this);\n }\n })\n .catch(() => {});\n }\n },\n\n // Set aspect ratio\n setAspectRatio() {\n const ratio = this.config.ratio.split(':');\n this.elements.wrapper.style.paddingBottom = `${100 / ratio[0] * ratio[1]}%`;\n },\n\n // API ready\n ready() {\n const player = this;\n\n // Ignore already setup (race condition)\n const currentId = player.media.getAttribute('id');\n if (!utils.is.empty(currentId) && currentId.startsWith('youtube-')) {\n return;\n }\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n // Replace the <iframe> with a <div> due to YouTube API issues\n const videoId = utils.parseYouTubeId(source);\n const id = utils.generateId(player.provider);\n const container = utils.createElement('div', { id });\n player.media = utils.replaceElement(container, player.media);\n\n // Setup instance\n // https://developers.google.com/youtube/iframe_api_reference\n player.embed = new window.YT.Player(id, {\n videoId,\n playerVars: {\n autoplay: player.config.autoplay ? 1 : 0, // Autoplay\n controls: player.supported.ui ? 0 : 1, // Only show controls if not fully supported\n rel: 0, // No related vids\n showinfo: 0, // Hide info\n iv_load_policy: 3, // Hide annotations\n modestbranding: 1, // Hide logos as much as possible (they still show one in the corner when paused)\n disablekb: 1, // Disable keyboard as we handle it\n playsinline: 1, // Allow iOS inline playback\n\n // Tracking for stats\n // origin: window ? `${window.location.protocol}//${window.location.host}` : null,\n widget_referrer: window ? window.location.href : null,\n\n // Captions are flaky on YouTube\n cc_load_policy: player.captions.active ? 1 : 0,\n cc_lang_pref: player.config.captions.language,\n },\n events: {\n onError(event) {\n // If we've already fired an error, don't do it again\n // YouTube fires onError twice\n if (utils.is.object(player.media.error)) {\n return;\n }\n\n const detail = {\n code: event.data,\n };\n\n // Messages copied from https://developers.google.com/youtube/iframe_api_reference#onError\n switch (event.data) {\n case 2:\n detail.message =\n 'The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.';\n break;\n\n case 5:\n detail.message =\n 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.';\n break;\n\n case 100:\n detail.message =\n 'The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.';\n break;\n\n case 101:\n case 150:\n detail.message = 'The owner of the requested video does not allow it to be played in embedded players.';\n break;\n\n default:\n detail.message = 'An unknown error occured';\n break;\n }\n\n player.media.error = detail;\n\n utils.dispatchEvent.call(player, player.media, 'error');\n },\n onPlaybackQualityChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current quality\n player.media.quality = instance.getPlaybackQuality();\n\n utils.dispatchEvent.call(player, player.media, 'qualitychange');\n },\n onPlaybackRateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Get current speed\n player.media.playbackRate = instance.getPlaybackRate();\n\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n },\n onReady(event) {\n // Get the instance\n const instance = event.target;\n\n // Get the title\n youtube.getTitle.call(player, videoId);\n\n // Create a faux HTML5 API using the YouTube API\n player.media.play = () => {\n instance.playVideo();\n };\n\n player.media.pause = () => {\n instance.pauseVideo();\n };\n\n player.media.stop = () => {\n instance.stopVideo();\n };\n\n player.media.duration = instance.getDuration();\n player.media.paused = true;\n\n // Seeking\n player.media.currentTime = 0;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return Number(instance.getCurrentTime());\n },\n set(time) {\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events sent\n instance.seekTo(time);\n },\n });\n\n // Playback speed\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return instance.getPlaybackRate();\n },\n set(input) {\n instance.setPlaybackRate(input);\n },\n });\n\n // Quality\n Object.defineProperty(player.media, 'quality', {\n get() {\n return instance.getPlaybackQuality();\n },\n set(input) {\n // Trigger request event\n utils.dispatchEvent.call(player, player.media, 'qualityrequested', false, {\n quality: input,\n });\n\n instance.setPlaybackQuality(input);\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n volume = input;\n instance.setVolume(volume * 100);\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : muted;\n muted = toggle;\n instance[toggle ? 'mute' : 'unMute']();\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n },\n });\n\n // Source\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return instance.getVideoUrl();\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Get available speeds\n player.options.speed = instance.getAvailablePlaybackRates();\n\n // Set the tabindex to avoid focus entering iframe\n if (player.supported.ui) {\n player.media.setAttribute('tabindex', -1);\n }\n\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n\n // Reset timer\n window.clearInterval(player.timers.buffering);\n\n // Setup buffering\n player.timers.buffering = window.setInterval(() => {\n // Get loaded % from YouTube\n player.media.buffered = instance.getVideoLoadedFraction();\n\n // Trigger progress only when we actually buffer something\n if (player.media.lastBuffered === null || player.media.lastBuffered < player.media.buffered) {\n utils.dispatchEvent.call(player, player.media, 'progress');\n }\n\n // Set last buffer point\n player.media.lastBuffered = player.media.buffered;\n\n // Bail if we're at 100%\n if (player.media.buffered === 1) {\n window.clearInterval(player.timers.buffering);\n\n // Trigger event\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n }, 200);\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 50);\n },\n onStateChange(event) {\n // Get the instance\n const instance = event.target;\n\n // Reset timer\n window.clearInterval(player.timers.playing);\n\n // Handle events\n // -1 Unstarted\n // 0 Ended\n // 1 Playing\n // 2 Paused\n // 3 Buffering\n // 5 Video cued\n switch (event.data) {\n case 0:\n player.media.paused = true;\n\n // YouTube doesn't support loop for a single video, so mimick it.\n if (player.media.loop) {\n // YouTube needs a call to `stopVideo` before playing again\n instance.stopVideo();\n instance.playVideo();\n } else {\n utils.dispatchEvent.call(player, player.media, 'ended');\n }\n\n break;\n\n case 1:\n // If we were seeking, fire seeked event\n if (player.media.seeking) {\n utils.dispatchEvent.call(player, player.media, 'seeked');\n }\n player.media.seeking = false;\n\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n\n utils.dispatchEvent.call(player, player.media, 'playing');\n\n // Poll to get playback progress\n player.timers.playing = window.setInterval(() => {\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n }, 50);\n\n // Check duration again due to YouTube bug\n // https://github.com/sampotts/plyr/issues/374\n // https://code.google.com/p/gdata-issues/issues/detail?id=8690\n if (player.media.duration !== instance.getDuration()) {\n player.media.duration = instance.getDuration();\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n }\n\n // Get quality\n controls.setQualityMenu.call(player, instance.getAvailableQualityLevels());\n\n break;\n\n case 2:\n player.media.paused = true;\n\n utils.dispatchEvent.call(player, player.media, 'pause');\n\n break;\n\n default:\n break;\n }\n\n utils.dispatchEvent.call(player, player.elements.container, 'statechange', false, {\n code: event.data,\n });\n },\n },\n });\n },\n};\n\nexport default youtube;\n","// ==========================================================================\n// Vimeo plugin\n// ==========================================================================\n\nimport utils from './../utils';\nimport captions from './../captions';\nimport ui from './../ui';\n\nconst vimeo = {\n setup() {\n // Add embed class for responsive\n utils.toggleClass(this.elements.wrapper, this.config.classNames.embed, true);\n\n // Set intial ratio\n vimeo.setAspectRatio.call(this);\n\n // Load the API if not already\n if (!utils.is.object(window.Vimeo)) {\n utils.loadScript(this.config.urls.vimeo.api, () => {\n vimeo.ready.call(this);\n });\n } else {\n vimeo.ready.call(this);\n }\n },\n\n // Set aspect ratio\n // For Vimeo we have an extra 300% height <div> to hide the standard controls and UI\n setAspectRatio(input) {\n const ratio = utils.is.string(input) ? input.split(':') : this.config.ratio.split(':');\n const padding = 100 / ratio[0] * ratio[1];\n const height = 200;\n const offset = (height - padding) / (height / 50);\n this.elements.wrapper.style.paddingBottom = `${padding}%`;\n this.media.style.transform = `translateY(-${offset}%)`;\n },\n\n // API Ready\n ready() {\n const player = this;\n\n // Get Vimeo params for the iframe\n const options = {\n loop: player.config.loop.active,\n autoplay: player.autoplay,\n byline: false,\n portrait: false,\n title: false,\n speed: true,\n transparent: 0,\n gesture: 'media',\n };\n const params = utils.buildUrlParams(options);\n\n // Get the source URL or ID\n let source = player.media.getAttribute('src');\n\n // Get from <div> if needed\n if (utils.is.empty(source)) {\n source = player.media.getAttribute(this.config.attributes.embed.id);\n }\n\n const id = utils.parseVimeoId(source);\n\n // Build an iframe\n const iframe = utils.createElement('iframe');\n const src = `https://player.vimeo.com/video/${id}?${params}`;\n iframe.setAttribute('src', src);\n iframe.setAttribute('allowfullscreen', '');\n iframe.setAttribute('allowtransparency', '');\n iframe.setAttribute('allow', 'autoplay');\n\n // Inject the package\n const wrapper = utils.createElement('div');\n wrapper.appendChild(iframe);\n player.media = utils.replaceElement(wrapper, player.media);\n\n // Setup instance\n // https://github.com/vimeo/player.js\n player.embed = new window.Vimeo.Player(iframe);\n\n player.media.paused = true;\n player.media.currentTime = 0;\n\n // Create a faux HTML5 API using the Vimeo API\n player.media.play = () => {\n player.embed.play().then(() => {\n player.media.paused = false;\n });\n };\n\n player.media.pause = () => {\n player.embed.pause().then(() => {\n player.media.paused = true;\n });\n };\n\n player.media.stop = () => {\n player.embed.stop().then(() => {\n player.media.paused = true;\n player.currentTime = 0;\n });\n };\n\n // Seeking\n let { currentTime } = player.media;\n Object.defineProperty(player.media, 'currentTime', {\n get() {\n return currentTime;\n },\n set(time) {\n // Get current paused state\n // Vimeo will automatically play on seek\n const { paused } = player.media;\n\n // Set seeking flag\n player.media.seeking = true;\n\n // Trigger seeking\n utils.dispatchEvent.call(player, player.media, 'seeking');\n\n // Seek after events\n player.embed.setCurrentTime(time);\n\n // Restore pause state\n if (paused) {\n player.pause();\n }\n },\n });\n\n // Playback speed\n let speed = player.config.speed.selected;\n Object.defineProperty(player.media, 'playbackRate', {\n get() {\n return speed;\n },\n set(input) {\n player.embed.setPlaybackRate(input).then(() => {\n speed = input;\n utils.dispatchEvent.call(player, player.media, 'ratechange');\n });\n },\n });\n\n // Volume\n let { volume } = player.config;\n Object.defineProperty(player.media, 'volume', {\n get() {\n return volume;\n },\n set(input) {\n player.embed.setVolume(input).then(() => {\n volume = input;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Muted\n let { muted } = player.config;\n Object.defineProperty(player.media, 'muted', {\n get() {\n return muted;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : false;\n\n player.embed.setVolume(toggle ? 0 : player.config.volume).then(() => {\n muted = toggle;\n utils.dispatchEvent.call(player, player.media, 'volumechange');\n });\n },\n });\n\n // Loop\n let { loop } = player.config;\n Object.defineProperty(player.media, 'loop', {\n get() {\n return loop;\n },\n set(input) {\n const toggle = utils.is.boolean(input) ? input : player.config.loop.active;\n\n player.embed.setLoop(toggle).then(() => {\n loop = toggle;\n });\n },\n });\n\n // Source\n let currentSrc;\n player.embed.getVideoUrl().then(value => {\n currentSrc = value;\n });\n Object.defineProperty(player.media, 'currentSrc', {\n get() {\n return currentSrc;\n },\n });\n\n // Ended\n Object.defineProperty(player.media, 'ended', {\n get() {\n return player.currentTime === player.duration;\n },\n });\n\n // Set aspect ratio based on video size\n Promise.all([\n player.embed.getVideoWidth(),\n player.embed.getVideoHeight(),\n ]).then(dimensions => {\n const ratio = utils.getAspectRatio(dimensions[0], dimensions[1]);\n vimeo.setAspectRatio.call(this, ratio);\n });\n\n // Set autopause\n player.embed.setAutopause(player.config.autopause).then(state => {\n player.config.autopause = state;\n });\n\n // Get title\n player.embed.getVideoTitle().then(title => {\n player.config.title = title;\n ui.setTitle.call(this);\n });\n\n // Get current time\n player.embed.getCurrentTime().then(value => {\n currentTime = value;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n // Get duration\n player.embed.getDuration().then(value => {\n player.media.duration = value;\n utils.dispatchEvent.call(player, player.media, 'durationchange');\n });\n\n // Get captions\n player.embed.getTextTracks().then(tracks => {\n player.media.textTracks = tracks;\n captions.setup.call(player);\n });\n\n player.embed.on('cuechange', data => {\n let cue = null;\n\n if (data.cues.length) {\n cue = utils.stripHTML(data.cues[0].text);\n }\n\n captions.setText.call(player, cue);\n });\n\n player.embed.on('loaded', () => {\n if (utils.is.element(player.embed.element) && player.supported.ui) {\n const frame = player.embed.element;\n\n // Fix keyboard focus issues\n // https://github.com/sampotts/plyr/issues/317\n frame.setAttribute('tabindex', -1);\n }\n });\n\n player.embed.on('play', () => {\n // Only fire play if paused before\n if (player.media.paused) {\n utils.dispatchEvent.call(player, player.media, 'play');\n }\n player.media.paused = false;\n utils.dispatchEvent.call(player, player.media, 'playing');\n });\n\n player.embed.on('pause', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'pause');\n });\n\n player.embed.on('timeupdate', data => {\n player.media.seeking = false;\n currentTime = data.seconds;\n utils.dispatchEvent.call(player, player.media, 'timeupdate');\n });\n\n player.embed.on('progress', data => {\n player.media.buffered = data.percent;\n utils.dispatchEvent.call(player, player.media, 'progress');\n\n // Check all loaded\n if (parseInt(data.percent, 10) === 1) {\n utils.dispatchEvent.call(player, player.media, 'canplaythrough');\n }\n });\n\n player.embed.on('seeked', () => {\n player.media.seeking = false;\n utils.dispatchEvent.call(player, player.media, 'seeked');\n utils.dispatchEvent.call(player, player.media, 'play');\n });\n\n player.embed.on('ended', () => {\n player.media.paused = true;\n utils.dispatchEvent.call(player, player.media, 'ended');\n });\n\n player.embed.on('error', detail => {\n player.media.error = detail;\n utils.dispatchEvent.call(player, player.media, 'error');\n });\n\n // Rebuild UI\n setTimeout(() => ui.build.call(player), 0);\n },\n};\n\nexport default vimeo;\n","// ==========================================================================\n// Plyr Media\n// ==========================================================================\n\nimport support from './support';\nimport utils from './utils';\nimport youtube from './plugins/youtube';\nimport vimeo from './plugins/vimeo';\nimport ui from './ui';\n\n// Sniff out the browser\nconst browser = utils.getBrowser();\n\nconst media = {\n // Setup media\n setup() {\n // If there's no media, bail\n if (!this.media) {\n this.debug.warn('No media element found!');\n return;\n }\n\n // Add type class\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', this.type), true);\n\n // Add provider class\n utils.toggleClass(this.elements.container, this.config.classNames.provider.replace('{0}', this.provider), true);\n\n // Add video class for embeds\n // This will require changes if audio embeds are added\n if (this.isEmbed) {\n utils.toggleClass(this.elements.container, this.config.classNames.type.replace('{0}', 'video'), true);\n }\n\n if (this.supported.ui) {\n // Check for picture-in-picture support\n utils.toggleClass(this.elements.container, this.config.classNames.pip.supported, support.pip && this.isHTML5 && this.isVideo);\n\n // Check for airplay support\n utils.toggleClass(this.elements.container, this.config.classNames.airplay.supported, support.airplay && this.isHTML5);\n\n // If there's no autoplay attribute, assume the video is stopped and add state class\n utils.toggleClass(this.elements.container, this.config.classNames.stopped, this.config.autoplay);\n\n // Add iOS class\n utils.toggleClass(this.elements.container, this.config.classNames.isIos, browser.isIos);\n\n // Add touch class\n utils.toggleClass(this.elements.container, this.config.classNames.isTouch, support.touch);\n }\n\n // Inject the player wrapper\n if (this.isVideo) {\n // Create the wrapper div\n this.elements.wrapper = utils.createElement('div', {\n class: this.config.classNames.video,\n });\n\n // Wrap the video in a container\n utils.wrap(this.media, this.elements.wrapper);\n }\n\n if (this.isEmbed) {\n switch (this.provider) {\n case 'youtube':\n youtube.setup.call(this);\n break;\n\n case 'vimeo':\n vimeo.setup.call(this);\n break;\n\n default:\n break;\n }\n } else if (this.isHTML5) {\n ui.setTitle.call(this);\n }\n },\n\n // Cancel current network requests\n // See https://github.com/sampotts/plyr/issues/174\n cancelRequests() {\n if (!this.isHTML5) {\n return;\n }\n\n // Remove child sources\n utils.removeElement(this.media.querySelectorAll('source'));\n\n // Set blank video src attribute\n // This is to prevent a MEDIA_ERR_SRC_NOT_SUPPORTED error\n // Info: http://stackoverflow.com/questions/32231579/how-to-properly-dispose-of-an-html5-video-and-close-socket-or-connection\n this.media.setAttribute('src', this.config.blankVideo);\n\n // Load the new empty source\n // This will cancel existing requests\n // See https://github.com/sampotts/plyr/issues/174\n this.media.load();\n\n // Debugging\n this.debug.log('Cancelled network requests');\n },\n};\n\nexport default media;\n","// ==========================================================================\n// Plyr source update\n// ==========================================================================\n\nimport { providers } from './types';\nimport utils from './utils';\nimport media from './media';\nimport ui from './ui';\nimport support from './support';\n\nconst source = {\n // Add elements to HTML5 media (source, tracks, etc)\n insertElements(type, attributes) {\n if (utils.is.string(attributes)) {\n utils.insertElement(type, this.media, {\n src: attributes,\n });\n } else if (utils.is.array(attributes)) {\n attributes.forEach(attribute => {\n utils.insertElement(type, this.media, attribute);\n });\n }\n },\n\n // Update source\n // Sources are not checked for support so be careful\n change(input) {\n if (!utils.is.object(input) || !('sources' in input) || !input.sources.length) {\n this.debug.warn('Invalid source format');\n return;\n }\n\n // Cancel current network requests\n media.cancelRequests.call(this);\n\n // Destroy instance and re-setup\n this.destroy.call(\n this,\n () => {\n // TODO: Reset menus here\n\n // Remove elements\n utils.removeElement(this.media);\n this.media = null;\n\n // Reset class name\n if (utils.is.element(this.elements.container)) {\n this.elements.container.removeAttribute('class');\n }\n\n // Set the type and provider\n this.type = input.type;\n this.provider = !utils.is.empty(input.sources[0].provider) ? input.sources[0].provider : providers.html5;\n\n // Check for support\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // Create new markup\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n this.media = utils.createElement('video');\n break;\n\n case 'html5:audio':\n this.media = utils.createElement('audio');\n break;\n\n case 'youtube:video':\n case 'vimeo:video':\n this.media = utils.createElement('div', {\n src: input.sources[0].src,\n });\n break;\n\n default:\n break;\n }\n\n // Inject the new element\n this.elements.container.appendChild(this.media);\n\n // Autoplay the new source?\n if (utils.is.boolean(input.autoplay)) {\n this.config.autoplay = input.autoplay;\n }\n\n // Set attributes for audio and video\n if (this.isHTML5) {\n if (this.config.crossorigin) {\n this.media.setAttribute('crossorigin', '');\n }\n if (this.config.autoplay) {\n this.media.setAttribute('autoplay', '');\n }\n if ('poster' in input) {\n this.media.setAttribute('poster', input.poster);\n }\n if (this.config.loop.active) {\n this.media.setAttribute('loop', '');\n }\n if (this.config.muted) {\n this.media.setAttribute('muted', '');\n }\n if (this.config.inline) {\n this.media.setAttribute('playsinline', '');\n }\n }\n\n // Restore class hook\n ui.addStyleHook.call(this);\n\n // Set new sources for html5\n if (this.isHTML5) {\n source.insertElements.call(this, 'source', input.sources);\n }\n\n // Set video title\n this.config.title = input.title;\n\n // Set up from scratch\n media.setup.call(this);\n\n // HTML5 stuff\n if (this.isHTML5) {\n // Setup captions\n if ('tracks' in input) {\n source.insertElements.call(this, 'track', input.tracks);\n }\n\n // Load HTML5 sources\n this.media.load();\n }\n\n // If HTML5 or embed but not fully supported, setupInterface and call ready now\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n // Setup interface\n ui.build.call(this);\n }\n\n // Update the fullscreen support\n this.fullscreen.update();\n },\n true,\n );\n },\n};\n\nexport default source;\n","// ==========================================================================\n// Plyr\n// plyr.js v3.0.0-beta.17\n// https://github.com/sampotts/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n\nimport { providers, types } from './types';\nimport defaults from './defaults';\nimport support from './support';\nimport utils from './utils';\n\nimport Console from './console';\nimport Fullscreen from './fullscreen';\nimport Storage from './storage';\nimport Ads from './plugins/ads';\n\nimport captions from './captions';\nimport controls from './controls';\nimport listeners from './listeners';\nimport media from './media';\nimport source from './source';\nimport ui from './ui';\n\n// Private properties\n// TODO: Use a WeakMap for private globals\n// const globals = new WeakMap();\n\n// Plyr instance\nclass Plyr {\n constructor(target, options) {\n this.timers = {};\n\n // State\n this.ready = false;\n this.loading = false;\n this.failed = false;\n\n // Set the media element\n this.media = target;\n\n // String selector passed\n if (utils.is.string(this.media)) {\n this.media = document.querySelectorAll(this.media);\n }\n\n // jQuery, NodeList or Array passed, use first element\n if ((window.jQuery && this.media instanceof jQuery) || utils.is.nodeList(this.media) || utils.is.array(this.media)) {\n // eslint-disable-next-line\n this.media = this.media[0];\n }\n\n // Set config\n this.config = utils.extend(\n {},\n defaults,\n options,\n (() => {\n try {\n return JSON.parse(this.media.getAttribute('data-plyr-config'));\n } catch (e) {\n return {};\n }\n })(),\n );\n\n // Elements cache\n this.elements = {\n container: null,\n buttons: {},\n display: {},\n progress: {},\n inputs: {},\n settings: {\n menu: null,\n panes: {},\n tabs: {},\n },\n captions: null,\n };\n\n // Captions\n this.captions = {\n active: null,\n currentTrack: null,\n };\n\n // Fullscreen\n this.fullscreen = {\n active: false,\n };\n\n // Options\n this.options = {\n speed: [],\n quality: [],\n };\n\n // Debugging\n // TODO: move to globals\n this.debug = new Console(this.config.debug);\n\n // Log config options and support\n this.debug.log('Config', this.config);\n this.debug.log('Support', support);\n\n // We need an element to setup\n if (utils.is.nullOrUndefined(this.media) || !utils.is.element(this.media)) {\n this.debug.error('Setup failed: no suitable element passed');\n return;\n }\n\n // Bail if the element is initialized\n if (this.media.plyr) {\n this.debug.warn('Target already setup');\n return;\n }\n\n // Bail if not enabled\n if (!this.config.enabled) {\n this.debug.error('Setup failed: disabled by config');\n return;\n }\n\n // Bail if disabled or no basic support\n // You may want to disable certain UAs etc\n if (!support.check().api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Cache original element state for .destroy()\n this.elements.original = this.media.cloneNode(true);\n\n // Set media type based on tag or data attribute\n // Supported: video, audio, vimeo, youtube\n const type = this.media.tagName.toLowerCase();\n\n // Embed properties\n let iframe = null;\n let url = null;\n let params = null;\n\n // Different setup based on type\n switch (type) {\n case 'div':\n // Find the frame\n iframe = this.media.querySelector('iframe');\n\n // <iframe> type\n if (utils.is.element(iframe)) {\n // Detect provider\n url = iframe.getAttribute('src');\n this.provider = utils.getProviderByUrl(url);\n\n // Rework elements\n this.elements.container = this.media;\n this.media = iframe;\n\n // Reset classname\n this.elements.container.className = '';\n\n // Get attributes from URL and set config\n params = utils.getUrlParams(url);\n if (!utils.is.empty(params)) {\n const truthy = [\n '1',\n 'true',\n ];\n\n if (truthy.includes(params.autoplay)) {\n this.config.autoplay = true;\n }\n if (truthy.includes(params.playsinline)) {\n this.config.inline = true;\n }\n if (truthy.includes(params.loop)) {\n this.config.loop.active = true;\n }\n }\n } else {\n // <div> with attributes\n this.provider = this.media.getAttribute(this.config.attributes.embed.provider);\n\n // Remove attribute\n this.media.removeAttribute(this.config.attributes.embed.provider);\n }\n\n // Unsupported or missing provider\n if (utils.is.empty(this.provider) || !Object.keys(providers).includes(this.provider)) {\n this.debug.error('Setup failed: Invalid provider');\n return;\n }\n\n // Audio will come later for external providers\n this.type = types.video;\n\n break;\n\n case 'video':\n case 'audio':\n this.type = type;\n this.provider = providers.html5;\n\n // Get config from attributes\n if (this.media.hasAttribute('crossorigin')) {\n this.config.crossorigin = true;\n }\n if (this.media.hasAttribute('autoplay')) {\n this.config.autoplay = true;\n }\n if (this.media.hasAttribute('playsinline')) {\n this.config.inline = true;\n }\n if (this.media.hasAttribute('muted')) {\n this.config.muted = true;\n }\n if (this.media.hasAttribute('loop')) {\n this.config.loop.active = true;\n }\n\n break;\n\n default:\n this.debug.error('Setup failed: unsupported type');\n return;\n }\n\n // Check for support again but with type\n this.supported = support.check(this.type, this.provider, this.config.inline);\n\n // If no support for even API, bail\n if (!this.supported.api) {\n this.debug.error('Setup failed: no support');\n return;\n }\n\n // Setup local storage for user settings\n this.storage = new Storage(this);\n\n // Store reference\n this.media.plyr = this;\n\n // Wrap media\n if (!utils.is.element(this.elements.container)) {\n this.elements.container = utils.createElement('div');\n utils.wrap(this.media, this.elements.container);\n }\n\n // Allow focus to be captured\n this.elements.container.setAttribute('tabindex', 0);\n\n // Global listeners\n listeners.global.call(this);\n\n // Add style hook\n ui.addStyleHook.call(this);\n\n // Setup media\n media.setup.call(this);\n\n // Listen for events if debugging\n if (this.config.debug) {\n utils.on(this.elements.container, this.config.events.join(' '), event => {\n this.debug.log(`event: ${event.type}`);\n });\n }\n\n // Setup interface\n // If embed but not fully supported, build interface now to avoid flash of controls\n if (this.isHTML5 || (this.isEmbed && !this.supported.ui)) {\n ui.build.call(this);\n }\n\n // Setup fullscreen\n this.fullscreen = new Fullscreen(this);\n\n // Setup ads if provided\n this.ads = new Ads(this);\n }\n\n // ---------------------------------------\n // API\n // ---------------------------------------\n\n /**\n * Types and provider helpers\n */\n get isHTML5() {\n return this.provider === providers.html5;\n }\n get isEmbed() {\n return this.isYouTube || this.isVimeo;\n }\n get isYouTube() {\n return this.provider === providers.youtube;\n }\n get isVimeo() {\n return this.provider === providers.vimeo;\n }\n get isVideo() {\n return this.type === types.video;\n }\n get isAudio() {\n return this.type === types.audio;\n }\n\n /**\n * Play the media, or play the advertisement (if they are not blocked)\n */\n play() {\n // TODO: Always return a promise?\n if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) {\n this.ads.play();\n return null;\n }\n\n // Return the promise (for HTML5)\n return this.media.play();\n }\n\n /**\n * Pause the media\n */\n pause() {\n if (!this.playing) {\n return;\n }\n\n this.media.pause();\n }\n\n /**\n * Get paused state\n */\n get paused() {\n return this.media.paused;\n }\n\n /**\n * Get playing state\n */\n get playing() {\n return !this.paused && !this.ended && (this.isHTML5 ? this.media.readyState > 2 : true);\n }\n\n /**\n * Get ended state\n */\n get ended() {\n return this.media.ended;\n }\n\n /**\n * Toggle playback based on current status\n * @param {boolean} input\n */\n togglePlay(input) {\n // Toggle based on current state if nothing passed\n const toggle = utils.is.boolean(input) ? input : !this.playing;\n\n if (toggle) {\n this.play();\n } else {\n this.pause();\n }\n }\n\n /**\n * Stop playback\n */\n stop() {\n this.restart();\n this.pause();\n }\n\n /**\n * Restart playback\n */\n restart() {\n this.currentTime = 0;\n }\n\n /**\n * Rewind\n * @param {number} seekTime - how far to rewind in seconds. Defaults to the config.seekTime\n */\n rewind(seekTime) {\n this.currentTime = this.currentTime - (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Fast forward\n * @param {number} seekTime - how far to fast forward in seconds. Defaults to the config.seekTime\n */\n forward(seekTime) {\n this.currentTime = this.currentTime + (utils.is.number(seekTime) ? seekTime : this.config.seekTime);\n }\n\n /**\n * Seek to a time\n * @param {number} input - where to seek to in seconds. Defaults to 0 (the start)\n */\n set currentTime(input) {\n let targetTime = 0;\n\n if (utils.is.number(input)) {\n targetTime = input;\n }\n\n // Normalise targetTime\n if (targetTime < 0) {\n targetTime = 0;\n } else if (targetTime > this.duration) {\n targetTime = this.duration;\n }\n\n // Set\n this.media.currentTime = targetTime.toFixed(4);\n\n // Logging\n this.debug.log(`Seeking to ${this.currentTime} seconds`);\n }\n\n /**\n * Get current time\n */\n get currentTime() {\n return Number(this.media.currentTime);\n }\n\n /**\n * Get seeking status\n */\n get seeking() {\n return this.media.seeking;\n }\n\n /**\n * Get the duration of the current media\n */\n get duration() {\n // Faux duration set via config\n const fauxDuration = parseInt(this.config.duration, 10);\n\n // True duration\n const realDuration = Number(this.media.duration);\n\n // If custom duration is funky, use regular duration\n return !Number.isNaN(fauxDuration) ? fauxDuration : realDuration;\n }\n\n /**\n * Set the player volume\n * @param {number} value - must be between 0 and 1. Defaults to the value from local storage and config.volume if not set in storage\n */\n set volume(value) {\n let volume = value;\n const max = 1;\n const min = 0;\n\n if (utils.is.string(volume)) {\n volume = Number(volume);\n }\n\n // Load volume from storage if no value specified\n if (!utils.is.number(volume)) {\n volume = this.storage.get('volume');\n }\n\n // Use config if all else fails\n if (!utils.is.number(volume)) {\n ({ volume } = this.config);\n }\n\n // Maximum is volumeMax\n if (volume > max) {\n volume = max;\n }\n // Minimum is volumeMin\n if (volume < min) {\n volume = min;\n }\n\n // Update config\n this.config.volume = volume;\n\n // Set the player volume\n this.media.volume = volume;\n\n // If muted, and we're increasing volume, reset muted state\n if (this.muted && volume > 0) {\n this.muted = false;\n }\n }\n\n /**\n * Get the current player volume\n */\n get volume() {\n return this.media.volume;\n }\n\n /**\n * Increase volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n increaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume + (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Decrease volume\n * @param {boolean} step - How much to decrease by (between 0 and 1)\n */\n decreaseVolume(step) {\n const volume = this.media.muted ? 0 : this.volume;\n this.volume = volume - (utils.is.number(step) ? step : 1);\n }\n\n /**\n * Set muted state\n * @param {boolean} mute\n */\n set muted(mute) {\n let toggle = mute;\n\n // Load muted state from storage\n if (!utils.is.boolean(toggle)) {\n toggle = this.storage.get('muted');\n }\n\n // Use config if all else fails\n if (!utils.is.boolean(toggle)) {\n toggle = this.config.muted;\n }\n\n // Update config\n this.config.muted = toggle;\n\n // Set mute on the player\n this.media.muted = toggle;\n }\n\n /**\n * Get current muted state\n */\n get muted() {\n return this.media.muted;\n }\n\n /**\n * Check if the media has audio\n */\n get hasAudio() {\n // Assume yes for all non HTML5 (as we can't tell...)\n if (!this.isHTML5) {\n return true;\n }\n\n if (this.isAudio) {\n return true;\n }\n\n // Get audio tracks\n return this.media.mozHasAudio || Boolean(this.media.webkitAudioDecodedByteCount) || Boolean(this.media.audioTracks && this.media.audioTracks.length);\n }\n\n /**\n * Set playback speed\n * @param {decimal} speed - the speed of playback (0.5-2.0)\n */\n set speed(input) {\n let speed = null;\n\n if (utils.is.number(input)) {\n speed = input;\n }\n\n if (!utils.is.number(speed)) {\n speed = this.storage.get('speed');\n }\n\n if (!utils.is.number(speed)) {\n speed = this.config.speed.selected;\n }\n\n // Set min/max\n if (speed < 0.1) {\n speed = 0.1;\n }\n if (speed > 2.0) {\n speed = 2.0;\n }\n\n if (!this.config.speed.options.includes(speed)) {\n this.debug.warn(`Unsupported speed (${speed})`);\n return;\n }\n\n // Update config\n this.config.speed.selected = speed;\n\n // Set media speed\n this.media.playbackRate = speed;\n }\n\n /**\n * Get current playback speed\n */\n get speed() {\n return this.media.playbackRate;\n }\n\n /**\n * Set playback quality\n * Currently YouTube only\n * @param {string} input - Quality level\n */\n set quality(input) {\n let quality = null;\n\n if (utils.is.string(input)) {\n quality = input;\n }\n\n if (!utils.is.string(quality)) {\n quality = this.storage.get('quality');\n }\n\n if (!utils.is.string(quality)) {\n quality = this.config.quality.selected;\n }\n\n if (!this.options.quality.includes(quality)) {\n this.debug.warn(`Unsupported quality option (${quality})`);\n return;\n }\n\n // Update config\n this.config.quality.selected = quality;\n\n // Set quality\n this.media.quality = quality;\n }\n\n /**\n * Get current quality level\n */\n get quality() {\n return this.media.quality;\n }\n\n /**\n * Toggle loop\n * TODO: Finish fancy new logic. Set the indicator on load as user may pass loop as config\n * @param {boolean} input - Whether to loop or not\n */\n set loop(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.loop.active;\n this.config.loop.active = toggle;\n this.media.loop = toggle;\n\n // Set default to be a true toggle\n /* const type = ['start', 'end', 'all', 'none', 'toggle'].includes(input) ? input : 'toggle';\n\n switch (type) {\n case 'start':\n if (this.config.loop.end && this.config.loop.end <= this.currentTime) {\n this.config.loop.end = null;\n }\n this.config.loop.start = this.currentTime;\n // this.config.loop.indicator.start = this.elements.display.played.value;\n break;\n\n case 'end':\n if (this.config.loop.start >= this.currentTime) {\n return this;\n }\n this.config.loop.end = this.currentTime;\n // this.config.loop.indicator.end = this.elements.display.played.value;\n break;\n\n case 'all':\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n this.config.loop.indicator.start = 0;\n this.config.loop.indicator.end = 100;\n break;\n\n case 'toggle':\n if (this.config.loop.active) {\n this.config.loop.start = 0;\n this.config.loop.end = null;\n } else {\n this.config.loop.start = 0;\n this.config.loop.end = this.duration - 2;\n }\n break;\n\n default:\n this.config.loop.start = 0;\n this.config.loop.end = null;\n break;\n } */\n }\n\n /**\n * Get current loop state\n */\n get loop() {\n return this.media.loop;\n }\n\n /**\n * Set new media source\n * @param {object} input - The new source object (see docs)\n */\n set source(input) {\n source.change.call(this, input);\n }\n\n /**\n * Get current source\n */\n get source() {\n return this.media.currentSrc;\n }\n\n /**\n * Set the poster image for a HTML5 video\n * @param {input} - the URL for the new poster image\n */\n set poster(input) {\n if (!this.isHTML5 || !this.isVideo) {\n this.debug.warn('Poster can only be set on HTML5 video');\n return;\n }\n\n if (utils.is.string(input)) {\n this.media.setAttribute('poster', input);\n }\n }\n\n /**\n * Get the current poster image\n */\n get poster() {\n if (!this.isHTML5 || !this.isVideo) {\n return null;\n }\n\n return this.media.getAttribute('poster');\n }\n\n /**\n * Set the autoplay state\n * @param {boolean} input - Whether to autoplay or not\n */\n set autoplay(input) {\n const toggle = utils.is.boolean(input) ? input : this.config.autoplay;\n this.config.autoplay = toggle;\n }\n\n /**\n * Get the current autoplay state\n */\n get autoplay() {\n return this.config.autoplay;\n }\n\n /**\n * Toggle captions\n * @param {boolean} input - Whether to enable captions\n */\n toggleCaptions(input) {\n // If there's no full support, or there's no caption toggle\n if (!this.supported.ui || !utils.is.element(this.elements.buttons.captions)) {\n return;\n }\n\n // If the method is called without parameter, toggle based on current value\n const show = utils.is.boolean(input) ? input : this.elements.container.className.indexOf(this.config.classNames.captions.active) === -1;\n\n // Nothing to change...\n if (this.captions.active === show) {\n return;\n }\n\n // Set global\n this.captions.active = show;\n\n // Toggle state\n utils.toggleState(this.elements.buttons.captions, this.captions.active);\n\n // Add class hook\n utils.toggleClass(this.elements.container, this.config.classNames.captions.active, this.captions.active);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, this.captions.active ? 'captionsenabled' : 'captionsdisabled');\n }\n\n /**\n * Set the captions language\n * @param {string} - Two character ISO language code (e.g. EN, FR, PT, etc)\n */\n set language(input) {\n // Nothing specified\n if (!utils.is.string(input)) {\n return;\n }\n\n // Toggle captions based on input\n this.toggleCaptions(!utils.is.empty(input));\n\n // If empty string is passed, assume disable captions\n if (utils.is.empty(input)) {\n return;\n }\n\n // Normalize\n const language = input.toLowerCase();\n\n // If nothing to change, bail\n if (this.language === language) {\n return;\n }\n\n // Update config\n this.captions.language = language;\n\n // Clear caption\n captions.setText.call(this, null);\n\n // Update captions\n captions.setLanguage.call(this);\n\n // Trigger an event\n utils.dispatchEvent.call(this, this.media, 'languagechange');\n }\n\n /**\n * Get the current captions language\n */\n get language() {\n return this.captions.language;\n }\n\n /**\n * Toggle picture-in-picture playback on WebKit/MacOS\n * TODO: update player with state, support, enabled\n * TODO: detect outside changes\n */\n set pip(input) {\n const states = {\n pip: 'picture-in-picture',\n inline: 'inline',\n };\n\n // Bail if no support\n if (!support.pip) {\n return;\n }\n\n // Toggle based on current state if not passed\n const toggle = utils.is.boolean(input) ? input : this.pip === states.inline;\n\n // Toggle based on current state\n this.media.webkitSetPresentationMode(toggle ? states.pip : states.inline);\n }\n\n /**\n * Get the current picture-in-picture state\n */\n get pip() {\n if (!support.pip) {\n return null;\n }\n\n return this.media.webkitPresentationMode;\n }\n\n /**\n * Trigger the airplay dialog\n * TODO: update player with state, support, enabled\n */\n airplay() {\n // Show dialog if supported\n if (support.airplay) {\n this.media.webkitShowPlaybackTargetPicker();\n }\n }\n\n /**\n * Toggle the player controls\n * @param {boolean} toggle - Whether to show the controls\n */\n toggleControls(toggle) {\n // We need controls of course...\n if (!utils.is.element(this.elements.controls)) {\n return;\n }\n\n // Don't hide if no UI support or it's audio\n if (!this.supported.ui || this.isAudio) {\n return;\n }\n\n let delay = 0;\n let show = toggle;\n let isEnterFullscreen = false;\n\n // Get toggle state if not set\n if (!utils.is.boolean(toggle)) {\n if (utils.is.event(toggle)) {\n // Is the enter fullscreen event\n isEnterFullscreen = toggle.type === 'enterfullscreen';\n\n // Whether to show controls\n show = [\n 'mouseenter',\n 'mousemove',\n 'touchstart',\n 'touchmove',\n 'focusin',\n ].includes(toggle.type);\n\n // Delay hiding on move events\n if ([\n 'mousemove',\n 'touchmove',\n 'touchend',\n ].includes(toggle.type)) {\n delay = 2000;\n }\n\n // Delay a little more for keyboard users\n if (toggle.type === 'focusin') {\n delay = 3000;\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, true);\n }\n } else {\n show = utils.hasClass(this.elements.container, this.config.classNames.hideControls);\n }\n }\n\n // Clear timer on every call\n window.clearTimeout(this.timers.controls);\n\n // If the mouse is not over the controls, set a timeout to hide them\n if (show || this.paused || this.loading) {\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, false);\n\n // Trigger event\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlsshown');\n }\n\n // Always show controls when paused or if touch\n if (this.paused || this.loading) {\n return;\n }\n\n // Delay for hiding on touch\n if (support.touch) {\n delay = 3000;\n }\n }\n\n // If toggle is false or if we're playing (regardless of toggle),\n // then set the timer to hide the controls\n if (!show || this.playing) {\n this.timers.controls = setTimeout(() => {\n // If the mouse is over the controls (and not entering fullscreen), bail\n if ((this.elements.controls.pressed || this.elements.controls.hover) && !isEnterFullscreen) {\n return;\n }\n\n // Restore transition behaviour\n if (!utils.hasClass(this.elements.container, this.config.classNames.hideControls)) {\n utils.toggleClass(this.elements.controls, this.config.classNames.noTransition, false);\n }\n\n // Check if controls toggled\n const toggled = utils.toggleClass(this.elements.container, this.config.classNames.hideControls, true);\n\n // Trigger event and close menu\n if (toggled) {\n utils.dispatchEvent.call(this, this.media, 'controlshidden');\n\n if (this.config.controls.includes('settings') && !utils.is.empty(this.config.settings)) {\n controls.toggleMenu.call(this, false);\n }\n }\n }, delay);\n }\n }\n\n /**\n * Add event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n on(event, callback) {\n utils.on(this.elements.container, event, callback);\n }\n\n /**\n * Remove event listeners\n * @param {string} event - Event type\n * @param {function} callback - Callback for when event occurs\n */\n off(event, callback) {\n utils.off(this.elements.container, event, callback);\n }\n\n /**\n * Destroy an instance\n * Event listeners are removed when elements are removed\n * http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n * @param {function} callback - Callback for when destroy is complete\n * @param {boolean} soft - Whether it's a soft destroy (for source changes etc)\n */\n destroy(callback, soft = false) {\n const done = () => {\n // Reset overflow (incase destroyed while in fullscreen)\n document.body.style.overflow = '';\n\n // GC for embed\n this.embed = null;\n\n // If it's a soft destroy, make minimal changes\n if (soft) {\n if (Object.keys(this.elements).length) {\n // Remove elements\n utils.removeElement(this.elements.buttons.play);\n utils.removeElement(this.elements.captions);\n utils.removeElement(this.elements.controls);\n utils.removeElement(this.elements.wrapper);\n\n // Clear for GC\n this.elements.buttons.play = null;\n this.elements.captions = null;\n this.elements.controls = null;\n this.elements.wrapper = null;\n }\n\n // Callback\n if (utils.is.function(callback)) {\n callback();\n }\n } else {\n // Replace the container with the original element provided\n utils.replaceElement(this.elements.original, this.elements.container);\n\n // Event\n utils.dispatchEvent.call(this, this.elements.original, 'destroyed', true);\n\n // Callback\n if (utils.is.function(callback)) {\n callback.call(this.elements.original);\n }\n\n // Clear for GC\n this.elements = null;\n }\n };\n\n // Type specific stuff\n switch (`${this.provider}:${this.type}`) {\n case 'html5:video':\n case 'html5:audio':\n // Restore native video controls\n ui.toggleNativeControls.call(this, true);\n\n // Clean up\n done();\n\n break;\n\n case 'youtube:video':\n // Clear timers\n window.clearInterval(this.timers.buffering);\n window.clearInterval(this.timers.playing);\n\n // Destroy YouTube API\n if (this.embed !== null) {\n this.embed.destroy();\n }\n\n // Clean up\n done();\n\n break;\n\n case 'vimeo:video':\n // Destroy Vimeo API\n // then clean up (wait, to prevent postmessage errors)\n if (this.embed !== null) {\n this.embed.unload().then(done);\n }\n\n // Vimeo does not always return\n setTimeout(done, 200);\n\n break;\n\n default:\n break;\n }\n }\n\n /**\n * Check for support for a mime type (HTML5 only)\n * @param {string} type - Mime type\n */\n supports(type) {\n return support.mime.call(this, type);\n }\n\n /**\n * Check for support\n * @param {string} type - Player type (audio/video)\n * @param {string} provider - Provider (html5/youtube/vimeo)\n * @param {bool} inline - Where player has `playsinline` sttribute\n */\n static supported(type, provider, inline) {\n return support.check(type, provider, inline);\n }\n\n /**\n * Load an SVG sprite into the page\n * @param {string} url - URL for the SVG sprite\n * @param {string} [id] - Unique ID\n */\n static loadSprite(url, id) {\n return utils.loadSprite(url, id);\n }\n}\n\nexport default Plyr;\n"]} \ No newline at end of file
diff --git a/package.json b/package.json
index 7eefbe9d..2f2dd286 100644
--- a/package.json
+++ b/package.json
@@ -36,15 +36,15 @@
"gulp-uglify-es": "^1.0.1",
"gulp-util": "^3.0.8",
"rollup-plugin-babel": "^3.0.3",
- "rollup-plugin-commonjs": "^8.3.0",
- "rollup-plugin-node-resolve": "^3.0.3",
+ "rollup-plugin-commonjs": "^9.0.0",
+ "rollup-plugin-node-resolve": "^3.2.0",
"run-sequence": "^2.2.1",
"stylelint": "^9.1.1",
"stylelint-config-prettier": "^2.1.0",
"stylelint-config-sass-guidelines": "^5.0.0",
"stylelint-config-recommended": "^2.1.0",
"stylelint-order": "^0.8.1",
- "stylelint-scss": "^2.4.0",
+ "stylelint-scss": "^2.5.0",
"stylelint-selector-bem-pattern": "^2.0.0"
},
"keywords": ["HTML5 Video", "HTML5 Audio", "Media Player", "DASH", "Shaka", "WordPress", "HLS"],
diff --git a/readme.md b/readme.md
index 3c62a8cd..8c92fdbf 100644
--- a/readme.md
+++ b/readme.md
@@ -278,7 +278,7 @@ Note the single quotes encapsulating the JSON and double quotes on the object ke
| `toggleInvert` | Boolean | `true` | Allow users to click to toggle the above. |
| `listeners` | Object | `null` | Allows binding of event listeners to the controls before the default handlers. See the `defaults.js` for available listeners. If your handler prevents default on the event (`event.preventDefault()`), the default handler will not fire. |
| `captions` | Object | `{ active: false, language: window.navigator.language.split('-')[0] }` | `active`: Toggles if captions should be active by default. `language`: Sets the default language to load (if available). |
-| `fullscreen` | Object | `{ enabled: true, fallback: true }` | `enabled`: Toggles whether fullscreen should be enabled. `fallback`: Allow fallback to a full-window solution. |
+| `fullscreen` | Object | `{ enabled: true, fallback: true, iosNative: false }` | `enabled`: Toggles whether fullscreen should be enabled. `fallback`: Allow fallback to a full-window solution. `iosNative`: whether to use native iOS fullscreen when entering fullscreen (no custom controls) |
| `ratio` | String | `16:9` | The aspect ratio you want to use for embedded players. |
| `storage` | Object | `{ enabled: true, key: 'plyr' }` | `enabled`: Allow use of local storage to store user settings. `key`: The key name to use. |
| `speed` | Object | `{ selected: 1, options: [0.5, 0.75, 1, 1.25, 1.5, 1.75, 2] }` | `selected`: The default speed for playback. `options`: Options to display in the menu. Most browsers will refuse to play slower than 0.5. |
diff --git a/src/js/controls.js b/src/js/controls.js
index 5e16b952..66c95231 100644
--- a/src/js/controls.js
+++ b/src/js/controls.js
@@ -50,7 +50,7 @@ const controls = {
icon,
utils.extend(attributes, {
role: 'presentation',
- })
+ }),
);
// Create the <use> to reference sprite
@@ -115,8 +115,8 @@ const controls = {
{
class: this.config.classNames.menu.badge,
},
- text
- )
+ text,
+ ),
);
return badge;
@@ -238,7 +238,7 @@ const controls = {
for: attributes.id,
class: this.config.classNames.hidden,
},
- this.config.i18n[type]
+ this.config.i18n[type],
);
// Seek input
@@ -254,8 +254,8 @@ const controls = {
value: 0,
autocomplete: 'off',
},
- attributes
- )
+ attributes,
+ ),
);
this.elements.inputs[type] = input;
@@ -280,8 +280,8 @@ const controls = {
max: 100,
value: 0,
},
- attributes
- )
+ attributes,
+ ),
);
// Create the label inside
@@ -322,8 +322,8 @@ const controls = {
{
class: this.config.classNames.hidden,
},
- this.config.i18n[type]
- )
+ this.config.i18n[type],
+ ),
);
container.appendChild(utils.createElement('span', utils.getAttributesFromSelector(this.config.selectors.display[type]), '00:00'));
@@ -349,7 +349,7 @@ const controls = {
value,
checked,
class: 'plyr__sr-only',
- })
+ }),
);
const faux = utils.createElement('span', { 'aria-hidden': true });
@@ -427,6 +427,11 @@ const controls = {
// Set the YouTube quality menu
// TODO: Support for HTML5
setQualityMenu(options) {
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.quality)) {
+ return;
+ }
+
const type = 'quality';
const list = this.elements.settings.panes.quality.querySelector('ul');
@@ -482,7 +487,7 @@ const controls = {
};
this.options.quality.forEach(quality =>
- controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality))
+ controls.createMenuItem.call(this, quality, list, type, controls.getLabel.call(this, 'quality', quality), getBadge(quality)),
);
controls.updateSetting.call(this, type, list);
@@ -583,6 +588,11 @@ const controls = {
// Set the looping options
/* setLoopMenu() {
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.loop)) {
+ return;
+ }
+
const options = ['start', 'end', 'all', 'reset'];
const list = this.elements.settings.panes.loop.querySelector('ul');
@@ -681,7 +691,7 @@ const controls = {
'language',
track.label || track.language,
controls.createBadge.call(this, track.language.toUpperCase()),
- track.language.toLowerCase() === this.captions.language.toLowerCase()
+ track.language.toLowerCase() === this.captions.language.toLowerCase(),
);
});
@@ -690,6 +700,11 @@ const controls = {
// Set a list of available captions languages
setSpeedMenu() {
+ // Menu required
+ if (!utils.is.element(this.elements.settings.panes.speed)) {
+ return;
+ }
+
const type = 'speed';
// Set the default speeds
@@ -933,7 +948,7 @@ const controls = {
role: 'tooltip',
class: this.config.classNames.tooltip,
},
- '00:00'
+ '00:00',
);
progress.appendChild(tooltip);
@@ -978,7 +993,7 @@ const controls = {
'volume',
utils.extend(attributes, {
id: `plyr-volume-${data.id}`,
- })
+ }),
);
volume.appendChild(range.label);
volume.appendChild(range.input);
@@ -1005,7 +1020,7 @@ const controls = {
'aria-haspopup': true,
'aria-controls': `plyr-settings-${data.id}`,
'aria-expanded': false,
- })
+ }),
);
const form = utils.createElement('form', {
@@ -1048,7 +1063,7 @@ const controls = {
'aria-controls': `plyr-settings-${data.id}-${type}`,
'aria-expanded': false,
}),
- this.config.i18n[type]
+ this.config.i18n[type],
);
const value = utils.createElement('span', {
@@ -1088,7 +1103,7 @@ const controls = {
'aria-controls': `plyr-settings-${data.id}-home`,
'aria-expanded': false,
},
- this.config.i18n[type]
+ this.config.i18n[type],
);
pane.appendChild(back);
@@ -1221,7 +1236,7 @@ const controls = {
this.config.selectors.labels,
' .',
this.config.classNames.hidden,
- ].join('')
+ ].join(''),
);
Array.from(labels).forEach(label => {